<?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>173656</bug_id>
          
          <creation_ts>2017-06-21 09:26:41 -0700</creation_ts>
          <short_desc>Remove expat source code from Source/ThirdParty/libwebrtc</short_desc>
          <delta_ts>2017-06-27 09:20:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173665</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jonlee</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321515</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-06-21 09:26:41 -0700</bug_when>
    <thetext>They are not used anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321516</commentid>
    <comment_count>1</comment_count>
      <attachid>313523</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-06-21 09:27:42 -0700</bug_when>
    <thetext>Created attachment 313523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321517</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-21 09:30:17 -0700</bug_when>
    <thetext>Attachment 313523 did not pass style-queue:


ERROR: Source/ThirdParty/libwebrtc/ChangeLog:42:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: fuzzer  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 1 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321518</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-21 09:31:59 -0700</bug_when>
    <thetext>r=me (as long as the bots are happy!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321606</commentid>
    <comment_count>4</comment_count>
      <attachid>313523</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-21 13:52:27 -0700</bug_when>
    <thetext>Comment on attachment 313523
Patch

Clearing flags on attachment: 313523

Committed r218646: &lt;http://trac.webkit.org/changeset/218646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321607</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-21 13:52:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321618</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-21 13:59:38 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 173665</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313523</attachid>
            <date>2017-06-21 09:27:42 -0700</date>
            <delta_ts>2017-06-21 13:52:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173656-20170621092741.patch</filename>
            <type>text/plain</type>
            <size>714716</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCAzYjJhNTk2ZGQ2MGEzZTJkZTFlMTI3ZjJmNzYyYTBkZjhjMmZhNDUzLi4wZDU2
NjczOTEwMjJmMzc1N2Y1YmU5NGMxNjk3NDZjM2JkMjdlYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxNy0wNi0yMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGV4cGF0IHNvdXJjZSBj
b2RlIGZyb20gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9C
VUlMRC5nbjogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvT1dO
RVJTOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9SRUFETUUu
Y2hyb21pdW06IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Zp
bGVzL0NPUFlJTkc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0
L2ZpbGVzL0NoYW5nZXM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL01BTklGRVNUOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0
eS9leHBhdC9maWxlcy9SRUFETUU6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3Bh
cnR5L2V4cGF0L2ZpbGVzL2xpYi9hbWlnYWNvbmZpZy5oOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYXNjaWkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2FzY2lpdGFiLmg6IFJlbW92
ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIv
ZXhwYXRfY29uZmlnLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi9leHBhdF9leHRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvaWFzY2lpdGFiLmg6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9pbnRlcm5hbC5oOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGF0aW4x
dGFiLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVz
L2xpYi9saWJleHBhdC5kZWY6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2ZpbGVzL2xpYi9saWJleHBhdHcuZGVmOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbWFjY29uZmlnLmg6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9uYW1ldGFiLmg6IFJlbW92
ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi91dGY4dGFi
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xp
Yi93aW5jb25maWcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvZXhw
YXQvZmlsZXMvbGliL3dpbmNvbmZpZy5oLm9yaWdpbmFsOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scGFyc2UuYzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHBhcnNlLmMub3Jp
Z2luYWw6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVz
L2xpYi94bWxyb2xlLmM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi94bWxyb2xlLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2suYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRvay5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rX2ltcGwuYzogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRv
a19pbXBsLmMub3JpZ2luYWw6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfaW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rX25zLmM6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1enovT1dORVJTOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9mdXp6L2V4cGF0X3htbF9wYXJzZV9mdXp6
ZXIuY2M6IFJlbW92ZWQuCisKIDIwMTctMDYtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlZnJlc2ggbGlid2VicnRjIGNvZGUgdXAgdG8gYTg3Njc1ZDRh
MTYwZTJjNDljM2U3NTRjZDljYTI5MWQ2YzhmMzZhZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9CVUlMRC5nbiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvQlVJTEQuZ24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzJkMGM2MzdjNmQ4YTI0ODIwNDU1MWMz
NDZhZDJkZTRmNGMwMDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9CVUlMRC5nbgorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMgQ29weXJpZ2h0IChj
KSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCgiLy9idWls
ZC9jb25maWcvY2hyb21lY2FzdF9idWlsZC5nbmkiKQotaW1wb3J0KCIvL3Rlc3RpbmcvbGliZnV6
emVyL2Z1enplcl90ZXN0LmduaSIpCi0KLSMgT24gTGludXgsIHdlIGltcGxpY2l0bHkgYWxyZWFk
eSBkZXBlbmQgb24gZXhwYXQgdmlhIGZvbnRjb25maWc7Ci0jIGxldCdzIG5vdCBwdWxsIGl0IGlu
IHR3aWNlLgotIyBDaHJvbWVjYXN0IGRvZXNuJ3Qgc2hpcCBleHBhdCBhcyBhIHN5c3RlbSBsaWJy
YXJ5LgotIyBMaWJmdXp6ZXIgYW5kIEFGTCBuZWVkIHRvIGJ1aWxkIGxpYnJhcnkgZnJvbSBzb3Vy
Y2VzLgotaWYgKGlzX2xpbnV4ICYmICFpc19jaHJvbWVjYXN0ICYmICF1c2VfbGliZnV6emVyICYm
ICF1c2VfYWZsKSB7Ci0gIGNvbmZpZygiZXhwYXRfY29uZmlnIikgewotICAgIGxpYnMgPSBbICJl
eHBhdCIgXQotICB9Ci0KLSAgZ3JvdXAoImV4cGF0IikgewotICAgIHB1YmxpY19jb25maWdzID0g
WyAiOmV4cGF0X2NvbmZpZyIgXQotICB9Ci19IGVsc2UgewotICBjb25maWcoImV4cGF0X2NvbmZp
ZyIpIHsKLSAgICBpbmNsdWRlX2RpcnMgPSBbICJmaWxlcy9saWIiIF0KLSAgICBkZWZpbmVzID0g
WyAiWE1MX1NUQVRJQyIgXQotICB9Ci0KLSAgc3RhdGljX2xpYnJhcnkoImV4cGF0IikgewotICAg
IHNvdXJjZXMgPSBbCi0gICAgICAiZmlsZXMvbGliL2V4cGF0LmgiLAotICAgICAgImZpbGVzL2xp
Yi94bWxwYXJzZS5jIiwKLSAgICAgICJmaWxlcy9saWIveG1scm9sZS5jIiwKLSAgICAgICJmaWxl
cy9saWIveG1sdG9rLmMiLAotICAgIF0KLQotICAgIHB1YmxpY19jb25maWdzID0gWyAiOmV4cGF0
X2NvbmZpZyIgXQotCi0gICAgZGVmaW5lcyA9IFsgIl9MSUIiIF0KLSAgICBpZiAoaXNfd2luKSB7
Ci0gICAgICBkZWZpbmVzICs9IFsgIkNPTVBJTEVEX0ZST01fRFNQIiBdCi0gICAgfSBlbHNlIHsK
LSAgICAgIGRlZmluZXMgKz0gWyAiSEFWRV9FWFBBVF9DT05GSUdfSCIgXQotICAgIH0KLSAgfQot
fQotCi1mdXp6ZXJfdGVzdCgiZXhwYXRfeG1sX3BhcnNlX2Z1enplciIpIHsKLSAgc291cmNlcyA9
IFsKLSAgICAiZnV6ei9leHBhdF94bWxfcGFyc2VfZnV6emVyLmNjIiwKLSAgXQotICBkZXBzID0g
WwotICAgICI6ZXhwYXQiLAotICBdCi0gIGRpY3QgPSAiLy90ZXN0aW5nL2xpYmZ1enplci9mdXp6
ZXJzL2RpY3RzL3htbC5kaWN0IgotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9PV05FUlMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L09XTkVSUwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWI0MDg4OTA5ODYxOGIwZjFjMDFlMWM5NzVlNzAwMWU3Yzk5YTA1
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L09XTkVSUworKysg
L2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotbmlja0BjaHJvbWl1bS5vcmcKLWRvbWluaWNjQGNo
cm9taXVtLm9yZwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9SRUFETUUuY2hyb21pdW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L1JFQURNRS5jaHJvbWl1bQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhZjFlMmQzMTBmZGM4NzdhNGUxZDkzNGMwYTZlMDcx
MTY4NjBkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L1JFQURN
RS5jaHJvbWl1bQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLU5hbWU6IEV4cGF0IFhN
TCBQYXJzZXIKLVNob3J0IE5hbWU6IGV4cGF0Ci1VUkw6IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQv
cHJvamVjdHMvZXhwYXQvCi1WZXJzaW9uOiAyLjEuMAotTGljZW5zZTogTUlUCi1MaWNlbnNlIEZp
bGU6IGZpbGVzL0NPUFlJTkcKLVNlY3VyaXR5IENyaXRpY2FsOiB5ZXMKLQotRGVzY3JpcHRpb246
Ci0gIFRoaXMgaXMgRXhwYXQgWE1MIHBhcnNlciAtIHZlcnkgbGlnaHR3ZWlnaHQgQyBsaWJyYXJ5
IGZvciBwYXJzaW5nIFhNTC4KLSAgRXhwYXQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxp
Y2Vuc2UgZGV0YWlsZWQgaW4gZmlsZXMvQ09QWUlORy4KLQotICBXZSBpbmNsdWRlIGl0IGhlcmUg
YmVjYXVzZSBsaWJqaW5nbGUgZGVwZW5kcyBvbiBpdC4KLQotTG9jYWwgTW9kaWZpY2F0aW9uczoK
LSAgUmVtb3ZlZCBmaWxlcyB0aGF0IENocm9taXVtIGRpZG4ndCBuZWVkOgotICAgIGxpYi9leHBh
dCouZHNwCi0gICAgbGliL01ha2VmaWxlLk1QVwotICAgIGFtaWdhLyoKLSAgICBiY2I1LyoKLSAg
ICBjb25mdG9vbHMvKgotICAgIGRvYy8qCi0gICAgZXhhbXBsZXMvKgotICAgIHRlc3RzLyoKLSAg
ICB2bXMvKgotICAgIHdpbjMyLyoKLSAgICB4bWx3Zi8qCi0gICAgY29uZmlndXJlCi0gICAgY29u
ZmlndXJlLmluCi0gICAgTWFrZWZpbGUuaW4KLSAgICBleHBhdC5kc3cKLSAgICBleHBhdC5kc3cK
LSAgICBleHBhdF9jb25maWcuaC5pbgotICBFZGl0ZWQ6Ci0gICAgbGliL3dpbmNvbmZpZy5oIChz
ZWUgd2luY29uZmlnLmgub3JpZ2luYWwgZm9yIHVubW9kaWZpZWQgdmVyc2lvbikKLSAgICAgICog
QWRkZWQgY2hlY2sgb24gbGluZSAxNzUxIG9mIHhtbHRva19pbXBsLmMgdG8gcGF0Y2ggYQotICAg
ICAgICBidWcgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdXRmLTggY2hhcmFjdGVycyB0aGF0IGxlYWRz
IHRvIGEgY3Jhc2guCi0gICAgbGliL3htbHRva19pbXBsLmMgKHNlZSB4bWx0b2tfaW1wLmMub3Jp
Z2luYWwgZm9yIHVubW9kaWZpZWQgdmVyc2lvbikKLSAgICAgICogUHJldmVudCBhIGNvbXBpbGVy
IHdhcm5pbmcgd2hlbiBjb21waWxpbmcgd2l0aAotICAgICAgICBXSU4zMl9MRUFOX0FORF9NRUFO
IHByZWRlZmluZWQuCi0gICAgbGliL3htbHBhcnNlLmMgKHNlZSB4bWxwYXJzZS5jLm9yaWdpbmFs
IGZvciB1bm1vZGlmaWVkIHZlcnNpb24pCi0gICAgICAqIEFwcGx5IGh0dHBzOi8vaGcubW96aWxs
YS5vcmcvcmVsZWFzZXMvbW96aWxsYS1lc3IzMS9yZXYvMmYzZTc4NjQzZjVjCi0gICAgICAgIHRv
IHByZXZlbnQgYW4gaW50ZWdlciBvdmVyZmxvdy4KLSAgQWRkZWQgZmlsZXM6Ci0gICAgbGliL2V4
cGF0X2NvbmZpZy5oIChhIGdlbmVyYXRlZCBjb25maWcgZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvQ09Q
WUlORyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhw
YXQvZmlsZXMvQ09QWUlORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiNDUwNjQy
OTY4NGIyNTNjYzQ0MGNhNDBhMTA5ZmI2YjkyNTNhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL0NPUFlJTkcKKysrIC9kZXYvbnVsbApAQCAtMSwyMiAr
MCwwIEBACi1Db3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgVGhhaSBPcGVuIFNvdXJjZSBT
b2Z0d2FyZSBDZW50ZXIgTHRkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENs
YXJrIENvb3BlcgotQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2IEV4cGF0IG1haW50YWluZXJzLgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLWEgY29weSBvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotIlNvZnR3YXJl
IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
Zwotd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l
cmdlLCBwdWJsaXNoLAotZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVz
IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi1wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0
d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLXRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLWluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg
cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLUVYUFJFU1MgT1IgSU1QTElFRCwg
SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN
RU5ULgotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg
QkUgTElBQkxFIEZPUiBBTlkKLUNMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCi1UT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotU09GVFdBUkUgT1IgVEhF
IFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL0No
YW5nZXMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL0NoYW5nZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODk3Yjlm
OWVkMTU1ZDg1MWY1OGI4YzkwYjViNWY1N2E3NDYzZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9DaGFuZ2VzCisrKyAvZGV2L251bGwKQEAgLTEsMjA1
ICswLDAgQEAKLVJlbGVhc2UgMi4xLjAgU2F0IE1hcmNoIDI0IDIwMTIKLSAgICAgICAgLSBCdWcg
Rml4ZXM6Ci0gICAgICAgICAgIzE3NDIzMTU6IEhhcm1mdWwgWE1MX1BhcnNlckNyZWF0ZU5TIHN1
Z2dlc3Rpb24uCi0gICAgICAgICAgIzI4OTU1MzM6IENWRS0yMDEyLTExNDcgLSBSZXNvdXJjZSBs
ZWFrIGluIHJlYWRmaWxlbWFwLmMuCi0gICAgICAgICAgIzE3ODU0MzA6IEV4cGF0IGJ1aWxkIGZh
aWxzIG9uIGxpbnV4LWFtZDY0IHdpdGggZ2NjIHZlcnNpb24+PTQuMSAtTzMuCi0gICAgICAgICAg
IzE5ODM5NTMsIDI1MTc5NTIsIDI1MTc5NjIsIDI2NDk4Mzg6IAotICAgICAgICAgICAgICAgIEJ1
aWxkIG1vZGlmaWNhdGlvbnMgdXNpbmcgYXV0b3JlY29uZiBpbnN0ZWFkIG9mIGJ1aWxkY29uZi5z
aC4KLSAgICAgICAgICAjMjgxNTk0NywgIzI4ODQwODY6IE9CSkVYVCBhbmQgRVhFRVhUIHN1cHBv
cnQgd2hpbGUgYnVpbGRpbmcuCi0gICAgICAgICAgIzE5OTA0MzA6IENWRS0yMDA5LTM3MjAgLSBQ
YXJzZXIgY3Jhc2ggd2l0aCBzcGVjaWFsIFVURi04IHNlcXVlbmNlcy4KLSAgICAgICAgICAjMjUx
NzkzODogeG1sd2Ygc2hvdWxkIHJldHVybiBub24temVybyBleGl0IHN0YXR1cyBpZiBub3Qgd2Vs
bC1mb3JtZWQuCi0gICAgICAgICAgIzI1MTc5NDY6IFdyb25nIHN0YXRlbWVudCBhYm91dCBYTUxE
ZWNsIGluIHhtbHdmLjEgYW5kIHhtbHdmLnNnbWwuCi0gICAgICAgICAgIzI4NTU2MDk6IERhbmds
aW5nIHBvc2l0aW9uUHRyIGFmdGVyIGVycm9yLgotICAgICAgICAgICMyODk0MDg1OiBDVkUtMjAw
OS0zNTYwIC0gQnVmZmVyIG92ZXItcmVhZCBhbmQgY3Jhc2ggaW4gYmlnMl90b1V0ZjgoKS4KLSAg
ICAgICAgICAjMjk1ODc5NDogQ1ZFLTIwMTItMTE0OCAtIE1lbW9yeSBsZWFrIGluIHBvb2xHcm93
LgotICAgICAgICAgICMyOTkwNjUyOiBDTWFrZSBzdXBwb3J0LgotICAgICAgICAgICMzMDEwODE5
OiBVTkVYUEVDVEVEX1NUQVRFIHdpdGggYSB0cmFpbGluZyAiJSIgaW4gZW50aXR5IHZhbHVlLgot
ICAgICAgICAgICMzMjA2NDk3OiBVbml0aWFsaXplZCBtZW1vcnkgcmV0dXJuZWQgZnJvbSBYTUxf
UGFyc2UuCi0gICAgICAgICAgIzMyODc4NDk6IG1ha2UgY2hlY2sgZmFpbHMgb24gbWluZ3ctdzY0
LgotICAgICAgICAgICMzNDk2NjA4OiBDVkUtMjAxMi0wODc2IC0gSGFzaCBET1MgYXR0YWNrLgot
ICAgICAgICAtIFBhdGNoZXM6Ci0gICAgICAgICAgIzE3NDkxOTg6IHBrZy1jb25maWcgc3VwcG9y
dC4KLSAgICAgICAgICAjMzAxMDIyMjogRml4IGZvciBidWcgIzMwMTA4MTkuCi0gICAgICAgICAg
IzMzMTI1Njg6IENNYWtlIHN1cHBvcnQuCi0gICAgICAgICAgIzM0NDYzODQ6IFJlcG9ydCBieXRl
IG9mZnNldHMgZm9yIGF0dHIgbmFtZXMgYW5kIHZhbHVlcy4KLSAgICAgICAgLSBOZXcgRmVhdHVy
ZXMgLyBBUEkgY2hhbmdlczoKLSAgICAgICAgICBBZGRlZCBuZXcgQVBJIG1lbWJlciBYTUxfU2V0
SGFzaFNhbHQoKSB0aGF0IGFsbG93cyBzZXR0aW5nIGFuIGludGlhbAotICAgICAgICAgICAgICAg
IHZhbHVlIChzYWx0KSBmb3IgaGFzaCBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgcGFydCBvZiB0aGUg
Zml4IGZvcgotICAgICAgICAgICAgICAgIGJ1ZyAjMzQ5NjYwOCB0byByYW5kb21pemUgaGFzaCBw
YXJhbWV0ZXJzLgotICAgICAgICAgIFdoZW4gY29tcGlsZWQgd2l0aCBYTUxfQVRUUl9JTkZPIGRl
ZmluZWQsIGFkZHMgbmV3IEFQSSBtZW1iZXIKLSAgICAgICAgICAgICAgICBYTUxfR2V0QXR0cmli
dXRlSW5mbygpIHRoYXQgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGJ5dGUKLSAgICAgICAgICAgICAg
ICBvZmZzZXRzIGZvciBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcyAocGF0Y2ggIzM0NDYzODQp
LgotICAgICAgICAgIEFkZGVkIENNYWtlIGJ1aWxkIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBT
ZWUgYnVnICMyOTkwNjUyIGFuZCBwYXRjaCAjMzMxMjU2OC4KLSAgICAgICAgICBBZGRlZCBydW4t
YmVuY2htYXJrIHRhcmdldCB0byBNYWtlZmlsZS5pbiAtIHJlbGllcyBvbiB0ZXN0ZGF0YSBtb2R1
bGUKLSAgICAgICAgICAgICAgICBwcmVzZW50IGluIHRoZSBzYW1lIHJlbGF0aXZlIGxvY2F0aW9u
IGFzIGluIHRoZSByZXBvc2l0b3J5LgotICAgICAgICAgIAotUmVsZWFzZSAyLjAuMSBUdWUgSnVu
ZSA1IDIwMDcKLSAgICAgICAgLSBGaXhlZCBidWdzICMxNTE1MjY2LCAjMTUxNTYwMDogVGhlIGNo
YXJhY3RlciBkYXRhIGhhbmRsZXIncyBjYWxsaW5nCi0gICAgICAgICAgb2YgWE1MX1N0b3BQYXJz
ZXIoKSB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHk7IGlmIHRoZSBwYXJzZXIgd2FzCi0gICAgICAg
ICAgc3RvcHBlZCBhbmQgdGhlIGhhbmRsZXIgc2V0IHRvIE5VTEwsIHRoZSBwYXJzZXIgd291bGQg
c2VnZmF1bHQuCi0gICAgICAgIC0gRml4ZWQgYnVnICMxNjkwODgzOiBFeHBhdCBmYWlsZWQgb24g
RUJDRElDIHN5c3RlbXMgYXMgaXQgYXNzdW1lZAotICAgICAgICAgIHNvbWUgY2hhcmFjdGVyIGNv
bnN0YW50cyB0byBiZSBBU0NJSSBlbmNvZGVkLgotICAgICAgICAtIE1pbm9yIGNsZWFudXBzIG9m
IHRoZSB0ZXN0IGhhcm5lc3MuCi0gICAgICAgIC0gRml4ZWQgeG1sd2YgYnVnICMxNTEzNTY2OiAi
b3V0IG9mIG1lbW9yeSIgZXJyb3Igb24gZmlsZSBzaXplIHplcm8uCi0gICAgICAgIC0gRml4ZWQg
b3V0bGluZS5jIGJ1ZyAjMTU0MzIzMzogbWlzc2luZyBhIGZpbmFsIFhNTF9QYXJzZXJGcmVlKCkg
Y2FsbC4KLSAgICAgICAgLSBGaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGZvciBXaW5kb3dzIHBsYXRm
b3JtOgotICAgICAgICAgIGJ1Z3MgIzE0MDk0NTEsICMxNDc2MTYwLCAjMTU0ODE4MiwgIzE2MDI3
NjksICMxNzE3MzIyLgotICAgICAgICAtIEJ1aWxkIGZpeGVzIGZvciB2YXJpb3VzIHBsYXRmb3Jt
czoKLSAgICAgICAgICBIUC1VWCwgVHJ1NjQsIFNvbGFyaXMgOTogcGF0Y2ggIzE0Mzc4NDAsIGJ1
ZyAjMTE5NjE4MC4KLSAgICAgICAgICBBbGwgVW5peDogIzE1NTQ2MTggKHJlZnJlc2hlZCBjb25m
aWcuc3ViL2NvbmZpZy5ndWVzcykuCi0gICAgICAgICAgICAgICAgICAgICMxNDkwMzcxLCAjMTYx
MzQ1Nzogc3VwcG9ydCBib3RoLCBERVNURElSIGFuZCBJTlNUQUxMX1JPT1QsCi0gICAgICAgICAg
ICAgICAgICAgIHdpdGhvdXQgcmVseWluZyBvbiBHTlUtTWFrZSBzcGVjaWZpYyBmZWF0dXJlcy4K
LSAgICAgICAgICAjMTY0NzgwNTogUGF0Y2hlZCBjb25maWd1cmUuaW4gdG8gd29yayBiZXR0ZXIg
d2l0aCBJbnRlbCBjb21waWxlci4KLSAgICAgICAgLSBGaXhlcyB0byBNYWtlZmlsZS5pbiB0byBo
YXZlIG1ha2UgY2hlY2sgd29yayBjb3JyZWN0bHk6Ci0gICAgICAgICAgYnVncyAjMTQwODE0Mywg
IzE1MzU2MDMsICMxNTM2Njg0LgotICAgICAgICAtIEFkZGVkIE9wZW4gV2F0Y29tIHN1cHBvcnQ6
IHBhdGNoICMxNTIzMjQyLgotCi1SZWxlYXNlIDIuMC4wIFdlZCBKYW4gMTEgMjAwNgotICAgICAg
ICAtIFdlIG5vIGxvbmdlciB1c2UgdGhlICJjaGVjayIgbGlicmFyeSBmb3IgQyB1bml0IHRlc3Rp
bmc7IHdlCi0gICAgICAgICAgYWx3YXlzIHVzZSB0aGUgKHBhcnRpYWwpIGludGVybmFsIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBBUEkuCi0gICAgICAgIC0gUmVwb3J0IFhNTF9OUyBzZXR0aW5nIHZp
YSBYTUxfR2V0RmVhdHVyZUxpc3QoKS4KLSAgICAgICAgLSBGaXhlZCBoZWFkZXJzIGZvciB1c2Ug
ZnJvbSBDKysuCi0gICAgICAgIC0gWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKCkgYW5kICBYTUxf
R2V0Q3VycmVudENvbHVtbk51bWJlcigpCi0gICAgICAgICAgbm93IHJldHVybiB1bnNpZ25lZCBp
bnRlZ2Vycy4KLSAgICAgICAgLSBBZGRlZCBYTUxfTEFSR0VfU0laRSBzd2l0Y2ggdG8gZW5hYmxl
IDY0LWJpdCBpbnRlZ2VycyBmb3IKLSAgICAgICAgICBieXRlIGluZGV4ZXMgYW5kIGxpbmUvY29s
dW1uIG51bWJlcnMuCi0gICAgICAgIC0gVXBkYXRlZCB0byB1c2UgbGlidG9vbCAxLjUuMjIgKHRo
ZSBtb3N0IHJlY2VudCkuCi0gICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgQW1pZ2FPUy4KLSAg
ICAgICAgLSBTb21lIG1vc3RseSBtaW5vciBidWcgZml4ZXMuIFNGIGlzc3VlcyBpbmNsdWRlOiAj
MTAwNjcwOCwKLSAgICAgICAgICAjMTAyMTc3NiwgIzEwMjM2NDYsICMxMTE0OTYwLCAjMTE1NjM5
OCwgIzEyMjExNjAsICMxMjcxNjQyLgotCi1SZWxlYXNlIDEuOTUuOCBGcmkgSnVsIDIzIDIwMDQK
LSAgICAgICAgLSBNYWpvciBuZXcgZmVhdHVyZTogc3VzcGVuZC9yZXN1bWUuICBIYW5kbGVycyBj
YW4gbm93IHJlcXVlc3QKLSAgICAgICAgICB0aGF0IGEgcGFyc2UgYmUgc3VzcGVuZGVkIGZvciBs
YXRlciByZXN1bXB0aW9uIG9yIGFib3J0ZWQKLSAgICAgICAgICBhbHRvZ2V0aGVyLiAgU2VlICJU
ZW1wb3JhcmlseSBTdG9wcGluZyBQYXJzaW5nIiBpbiB0aGUKLSAgICAgICAgICBkb2N1bWVudGF0
aW9uIGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIC0gU29tZSBtb3N0bHkgbWlub3IgYnVnIGZp
eGVzLCBidXQgY29tcGlsYXRpb24gc2hvdWxkIG5vCi0gICAgICAgICAgbG9uZ2VyIGdlbmVyYXRl
IHdhcm5pbmdzIG9uIG1vc3QgcGxhdGZvcm1zLiAgU0YgaXNzdWVzCi0gICAgICAgICAgaW5jbHVk
ZTogIzgyNzMxOSwgIzg0MDE3MywgIzg0NjMwOSwgIzg4ODMyOSwgIzg5NjE4OCwgIzkyMzkxMywK
LSAgICAgICAgICAjOTI4MTEzLCAjOTYxNjk4LCAjOTg1MTkyLgotCi1SZWxlYXNlIDEuOTUuNyBN
b24gT2N0IDIwIDIwMDMKLSAgICAgICAgLSBGaXhlZCBlbnVtIFhNTF9TdGF0dXMgaXNzdWUgKHJl
cG9ydGVkIG9uIFNvdXJjZUZvcmdlIG1hbnkKLSAgICAgICAgICB0aW1lcyksIHNvIGNvbXBpbGVy
cyB0aGF0IGFyZSBwcm9wZXJseSBwaWNreSB3aWxsIGJlIGhhcHB5LgotICAgICAgICAtIEludHJv
ZHVjZWQgYW4gWE1MQ0FMTCBtYWNybyB0byBjb250cm9sIHRoZSBjYWxsaW5nCi0gICAgICAgICAg
Y29udmVudGlvbiB1c2VkIGJ5IHRoZSBFeHBhdCBBUEk7IHRoaXMgbWFjcm8gc2hvdWxkIGJlIHVz
ZWQKLSAgICAgICAgICB0byBhbm5vdGF0ZSBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucyBvZiBj
YWxsYmFjawotICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBpbiBjb2RlIGNvbXBpbGVkIHdpdGgg
YSBjYWxsaW5nIGNvbnZlbnRpb24KLSAgICAgICAgICBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGNv
bnZlbnRpb24gZm9yIHRoZSBob3N0IHBsYXRmb3JtLgotICAgICAgICAtIEltcHJvdmVkIGFiaWxp
dHkgdG8gYnVpbGQgd2l0aG91dCB0aGUgY29uZmlndXJlLWdlbmVyYXRlZAotICAgICAgICAgIGV4
cGF0X2NvbmZpZy5oIGhlYWRlci4gIFRoaXMgaXMgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMKLSAg
ICAgICAgICB3aGljaCBlbWJlZCBFeHBhdCByYXRoZXIgdGhhbiBsaW5raW5nIGluIHRoZSBsaWJy
YXJ5LgotICAgICAgICAtIEZpeGVkIGEgdmFyaWV0eSBvZiBidWdzOiBzZWUgU0YgaXNzdWVzICM0
NTg5MDcsICM2MDk2MDMsCi0gICAgICAgICAgIzY3Njg0NCwgIzY3OTc1NCwgIzY5Mjg3OCwgIzY5
Mjk2NCwgIzY5NTQwMSwgIzY5OTMyMywgIzY5OTQ4NywKLSAgICAgICAgICAjODIwOTQ2LgotICAg
ICAgICAtIEltcHJvdmVkIGhhc2ggdGFibGUgbG9va3Vwcy4KLSAgICAgICAgLSBBZGRlZCBtb3Jl
IHJlZ3Jlc3Npb24gdGVzdHMgYW5kIGltcHJvdmVkIGRvY3VtZW50YXRpb24uCi0KLVJlbGVhc2Ug
MS45NS42IFR1ZSBKYW4gMjggMjAwMwotICAgICAgICAtIEFkZGVkIFhNTF9GcmVlQ29udGVudE1v
ZGVsKCkuCi0gICAgICAgIC0gQWRkZWQgWE1MX01lbU1hbGxvYygpLCBYTUxfTWVtUmVhbGxvYygp
LCBYTUxfTWVtRnJlZSgpLgotICAgICAgICAtIEZpeGVkIGEgdmFyaWV0eSBvZiBidWdzOiBzZWUg
U0YgaXNzdWVzICM2MTU2MDYsICM2MTY4NjMsCi0gICAgICAgICAgIzYxODE5OSwgIzY1MzE4MCwg
IzY3Mzc5MS4KLSAgICAgICAgLSBFbmhhbmNlZCB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgot
ICAgICAgICAtIE1hbiBwYWdlIGltcHJvdmVtZW50czogaW5jbHVkZXMgU0YgaXNzdWUgIzYzMjE0
Ni4KLQotUmVsZWFzZSAxLjk1LjUgRnJpIFNlcCA2IDIwMDIKLSAgICAgICAgLSBBZGRlZCBYTUxf
VXNlRm9yZWlnbkRURCgpIGZvciBpbXByb3ZlZCBTQVgyIHN1cHBvcnQuCi0gICAgICAgIC0gQWRk
ZWQgWE1MX0dldEZlYXR1cmVMaXN0KCkuCi0gICAgICAgIC0gRGVmaW5lZCBYTUxfQm9vbCB0eXBl
IGFuZCB0aGUgdmFsdWVzIFhNTF9UUlVFIGFuZCBYTUxfRkFMU0UuCi0gICAgICAgIC0gVXNlIGFu
IGluY29tcGxldGUgc3RydWN0IGluc3RlYWQgb2YgYSB2b2lkKiBmb3IgdGhlIHBhcnNlcgotICAg
ICAgICAgIChtYXkgbm90IHJldGFpbikuCi0gICAgICAgIC0gRml4ZWQgVVRGLTggZGVjb2Rpbmcg
YnVnIHRoYXQgY2F1c2VkIGxlZ2FsIFVURi04IHRvIGJlIHJlamVjdGVkLgotICAgICAgICAtIEZp
bmFsbHkgZml4ZWQgYnVnIHdoZXJlIGRlZmF1bHQgaGFuZGxlciB3b3VsZCByZXBvcnQgRFRECi0g
ICAgICAgICAgZXZlbnRzIHRoYXQgd2VyZSBhbHJlYWR5IGhhbmRsZWQgYnkgYW5vdGhlciBoYW5k
bGVyLgotICAgICAgICAgIEluaXRpYWwgcGF0Y2ggY29udHJpYnV0ZWQgYnkgRGFycnlsIE1pbGVz
LgotICAgICAgICAtIFJlbW92ZWQgdW5uZWNlc3NhcnkgRGxsTWFpbigpIGZ1bmN0aW9uIHRoYXQg
Y2F1c2VkIHN0YXRpYwotICAgICAgICAgIGxpbmtpbmcgaW50byBhIERMTCB0byBiZSBkaWZmaWN1
bHQuCi0gICAgICAgIC0gQWRkZWQgVkMrKyBwcm9qZWN0cyBmb3IgYnVpbGRpbmcgc3RhdGljIGxp
YnJhcmllcy4KLSAgICAgICAgLSBSZWR1Y2VkIGxpbmUtbGVuZ3RoIGZvciBhbGwgc291cmNlIGNv
ZGUgYW5kIGhlYWRlcnMgdG8gYmUKLSAgICAgICAgICBubyBsb25nZXIgdGhhbiA4MCBjaGFyYWN0
ZXJzLCB0byBoZWxwIHdpdGggQVMvNDAwIHN1cHBvcnQuCi0gICAgICAgIC0gUmVkdWNlZCBtZW1v
cnkgY29weWluZyBkdXJpbmcgcGFyc2luZyAoU0YgcGF0Y2ggIzYwMDk2NCkuCi0gICAgICAgIC0g
Rml4ZWQgYSB2YXJpZXR5IG9mIGJ1Z3M6IHNlZSBTRiBpc3N1ZXMgIzU4MDc5MywgIzQzNDY2NCwK
LSAgICAgICAgICAjNDgzNTE0LCAjNTgwNTAzLCAjNTgxMDY5LCAjNTg0MDQxLCAjNTg0MTgzLCAj
NTg0ODMyLCAjNTg1NTM3LAotICAgICAgICAgICM1OTY1NTUsICM1OTY2NzgsICM1OTgzNTIsICM1
OTg5NDQsICM1OTk3MTUsICM2MDA0NzksICM2MDA5NzEuCi0KLVJlbGVhc2UgMS45NS40IEZyaSBK
dWwgMTIgMjAwMgotICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIFZNUywgY29udHJpYnV0ZWQg
YnkgQ3JhaWcgQmVycnkuICBTZWUKLSAgICAgICAgICB2bXMvUkVBRE1FLnZtcyBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgICAgICAgLSBBZGRlZCBNYWMgT1MgKGNsYXNzaWMpIHN1cHBvcnQsIHdp
dGggYSBtYWtlZmlsZSBmb3IgTVBXLAotICAgICAgICAgIGNvbnRyaWJ1dGVkIGJ5IFRob21hcyBX
ZWduZXIgYW5kIERhcnlsZSBXYWxrZXIuCi0gICAgICAgIC0gQWRkZWQgQm9ybGFuZCBDKysgQnVp
bGRlciA1IC8gQkNDIDUuNSBzdXBwb3J0LCBjb250cmlidXRlZAotICAgICAgICAgIGJ5IFBhdHJp
Y2sgTWNDb25uZWxsIChTRiBwYXRjaCAjNTM4MDMyKS4KLSAgICAgICAgLSBGaXhlZCBhIHZhcmll
dHkgb2YgYnVnczogc2VlIFNGIGlzc3VlcyAjNDQxNDQ5LCAjNTYzMTg0LAotICAgICAgICAgICM1
NjQzNDIsICM1NjYzMzQsICM1NjY5MDEsICM1Njk0NjEsICM1NzAyNjMsICM1NzUxNjgsICM1Nzkx
OTYuCi0gICAgICAgIC0gTWFkZSBza2lwcGVkRW50aXR5SGFuZGxlciBjb25mb3JtIHRvIFNBWDIg
KHNlZSBzb3VyY2UgY29tbWVudCkKLSAgICAgICAgLSBSZS1pbXBsZW1lbnRlZCBXRkM6IEVudGl0
eSBEZWNsYXJlZCBmcm9tIFhNTCAxLjAgc3BlYyBhbmQKLSAgICAgICAgICBhZGRlZCBhIG5ldyBl
cnJvciAiZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkiOgotICAgICAgICAgIHNl
ZSBTRiBidWcgcmVwb3J0ICM1Njk0NjEgYW5kIFNGIHBhdGNoICM1NzgxNjEKLSAgICAgICAgLSBS
ZS1pbXBsZW1lbnRlZCBzZWN0aW9uIDUuMSBmcm9tIFhNTCAxLjAgc3BlYzoKLSAgICAgICAgICBz
ZWUgU0YgYnVnIHJlcG9ydCAjNTcwMjYzIGFuZCBTRiBwYXRjaCAjNTc4MTYxCi0KLVJlbGVhc2Ug
MS45NS4zIE1vbiBKdW4gMyAyMDAyCi0gICAgICAgIC0gQWRkZWQgYSBwcm9qZWN0IHRvIHRoZSBN
U1ZDIHdvcmtzcGFjZSB0byBjcmVhdGUgYSB3Y2hhcl90Ci0gICAgICAgICAgdmVyc2lvbiBvZiB0
aGUgbGlicmFyeTsgdGhlIERMTHMgYXJlIG5hbWVkIGxpYmV4cGF0dy5kbGwuCi0gICAgICAgIC0g
Q2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgV2luZG93cyBETExzIGZyb20gZXhwYXQuZGxsIHRvCi0g
ICAgICAgICAgbGliZXhwYXQuZGxsOyB0aGlzIGZpeGVzIFNGIGJ1ZyAjNDMyNDU2LgotICAgICAg
ICAtIEFkZGVkIHRoZSBYTUxfUGFyc2VyUmVzZXQoKSBBUEkgZnVuY3Rpb24uCi0gICAgICAgIC0g
Rml4ZWQgWE1MX1NldFJldHVybk5TVHJpcGxldCgpIHRvIHdvcmsgZm9yIGVsZW1lbnQgbmFtZXMu
Ci0gICAgICAgIC0gTWFkZSB0aGUgWE1MX1VOSUNPREUgYnVpbGRzIHVzYWJsZSAodGhhbmtzLCBL
YXJsISkuCi0gICAgICAgIC0gQWxsb3cgeG1sd2YgdG8gcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0
LgotICAgICAgICAtIEluc3RhbGwgYSBtYW4gcGFnZSBmb3IgeG1sd2Ygb24gVW5peCBzeXN0ZW1z
LgotICAgICAgICAtIEZpeGVkIG1hbnkgYnVnczsgc2VlIFNGIGJ1ZyByZXBvcnRzICMyMzE4NjQs
ICM0NjEzODAsICM0NjQ4MzcsCi0gICAgICAgICAgIzQ2Njg4NSwgIzQ2OTIyNiwgIzQ3NzY2Nywg
IzQ4NDQxOSwgIzQ4Nzg0MCwgIzQ5NDc0OSwgIzQ5NjUwNSwKLSAgICAgICAgICAjNTQ3MzUwLiAg
T3RoZXIgYnVncyB3aGljaCB3ZSBjYW4ndCB0ZXN0IGFzIGVhc2lseSBtYXkgYWxzbwotICAgICAg
ICAgIGhhdmUgYmVlbiBmaXhlZCwgZXNwZWNpYWxseSBpbiB0aGUgYXJlYSBvZiBidWlsZCBzdXBw
b3J0LgotCi1SZWxlYXNlIDEuOTUuMiBGcmkgSnVsIDI3IDIwMDEKLSAgICAgICAgLSBNb3JlIGNo
YW5nZXMgdG8gbWFrZSBNU1ZDIGhhcHB5IHdpdGggdGhlIGJ1aWxkOyBhZGQgYSBzaW5nbGUKLSAg
ICAgICAgICB3b3Jrc3BhY2UgdG8gc3VwcG9ydCBib3RoIHRoZSBsaWJyYXJ5IGFuZCB4bWx3ZiBh
cHBsaWNhdGlvbi4KLSAgICAgICAgLSBBZGRlZCBhIFdpbmRvd3MgaW5zdGFsbGVyIGZvciBXaW5k
b3dzIHVzZXJzOyBpbmNsdWRlcwotICAgICAgICAgIHhtbHdmLmV4ZS4KLSAgICAgICAgLSBBZGRl
ZCBjb21waWxlLXRpbWUgY29uc3RhbnRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRo
ZQotICAgICAgICAgIEV4cGF0IHZlcnNpb24KLSAgICAgICAgLSBSZW1vdmVkIGEgbG90IG9mIEdO
VS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gYWlkZSBwb3J0YWJpbGl0eQotICAgICAgICAgIGFt
b25nIHRoZSB2YXJpb3VzIFVuaXggZmxhdm9ycy4KLSAgICAgICAgLSBGaXggdGhlIFVURi04IEJP
TSBidWcuCi0gICAgICAgIC0gQ2xlYW5lZCB1cCB3YXJuaW5nIG1lc3NhZ2VzIGZvciBzZXZlcmFs
IGNvbXBpbGVycy4KLSAgICAgICAgLSBBZGRlZCB0aGUgLVdhbGwsIC1Xc3RyaWN0LXByb3RvdHlw
ZXMgb3B0aW9ucyBmb3IgR0NDLgotCi1SZWxlYXNlIDEuOTUuMSBTdW4gT2N0IDIyIDE1OjExOjM2
IEVEVCAyMDAwCi0gICAgICAgIC0gQ2hhbmdlcyB0byBnZXQgZXhwYXQgdG8gYnVpbGQgdW5kZXIg
TWljcm9zb2Z0IGNvbXBpbGVyCi0gICAgICAgIC0gUmVtb3ZlZCBhbGwgYWJvcnRzIGFuZCBpbnN0
ZWFkIHJldHVybiBhbiBVTkVYUEVDVEVEX1NUQVRFIGVycm9yLgotICAgICAgICAtIEZpeGVkIGEg
YnVnIHdoZXJlIGEgc3RyYXkgJyUnIGluIGFuIGVudGl0eSB2YWx1ZSB3b3VsZCBjYXVzZSBhbgot
ICAgICAgICAgIGFib3J0LgotICAgICAgICAtIERlZmluZWQgWE1MX1NldEVuZE5hbWVzcGFjZURl
Y2xIYW5kbGVyLiBUaGFua3MgdG8gRGFycnlsIE1pbGVzIGZvcgotICAgICAgICAgIGZpbmRpbmcg
dGhpcyBvdmVyc2lnaHQuCi0gICAgICAgIC0gQ2hhbmdlZCBkZWZhdWx0IHBhdHRlcm5zIGluIGxp
Yi9NYWtlZmlsZS5pbiB0byBmaXQgbm9uLUdOVSBtYWtlcwotICAgICAgICAgIFRoYW5rcyB0byBy
b2JpbkB1bnJhdGVkLm5ldCBmb3IgcmVwb3J0aW5nIGFuZCBwcm92aWRpbmcgYW4KLSAgICAgICAg
ICBhY2NvdW50IHRvIHRlc3Qgb24uCi0gICAgICAgIC0gVGhlIHJlZmVyZW5jZSBoYWQgdGhlIHdy
b25nIGxhYmVsIGZvciBYTUxfU2V0U3RhcnROYW1lc3BhY2VEZWNsLgotICAgICAgICAgIFJlcG9y
dGVkIGJ5IGFuIGFub255bW91cyB1c2VyLgotCi1SZWxlYXNlIDEuOTUuMCBGcmkgU2VwIDI5IDIw
MDAKLSAgICAgICAgLSBYTUxfUGFyc2VyQ3JlYXRlX01NCi0gICAgICAgICAgICAgICAgQWxsb3dz
IHlvdSB0byBzZXQgYSBtZW1vcnkgbWFuYWdlbWVudCBzdWl0ZSB0byByZXBsYWNlIHRoZQotICAg
ICAgICAgICAgICAgIHN0YW5kYXJkIG1hbGxvYyxyZWFsbG9jLCBhbmQgZnJlZS4KLSAgICAgICAg
LSBYTUxfU2V0UmV0dXJuTlNUcmlwbGV0Ci0gICAgICAgICAgICAgICAgSWYgeW91IHR1cm4gdGhp
cyBmZWF0dXJlIG9uIHdoZW4gbmFtZXNwYWNlIHByb2Nlc3NpbmcgaXMgaW4KLSAgICAgICAgICAg
ICAgICBlZmZlY3QsIHRoZW4gcXVhbGlmaWVkLCBwcmVmaXhlZCBlbGVtZW50IGFuZCBhdHRyaWJ1
dGUgbmFtZXMKLSAgICAgICAgICAgICAgICBhcmUgcmV0dXJuZWQgYXMgInVyaXxuYW1lfHByZWZp
eCIgd2hlcmUgJ3wnIGlzIHdoYXRldmVyCi0gICAgICAgICAgICAgICAgc2VwYXJhdG9yIGNoYXJh
Y3RlciBpcyB1c2VkIGluIG5hbWVzcGFjZSBwcm9jZXNzaW5nLgotICAgICAgICAtIE1lcmdlZCBp
biBmZWF0dXJlcyBmcm9tIHBlcmwtZXhwYXQKLSAgICAgICAgICAgICAgICBvIFhNTF9TZXRFbGVt
ZW50RGVjbEhhbmRsZXIKLSAgICAgICAgICAgICAgICBvIFhNTF9TZXRBdHRsaXN0RGVjbEhhbmRs
ZXIKLSAgICAgICAgICAgICAgICBvIFhNTF9TZXRYbWxEZWNsSGFuZGxlcgotICAgICAgICAgICAg
ICAgIG8gWE1MX1NldEVudGl0eURlY2xIYW5kbGVyCi0gICAgICAgICAgICAgICAgbyBTdGFydERv
Y3R5cGVEZWNsSGFuZGxlciB0YWtlcyAzIGFkZGl0aW9uYWwgcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN5c2lkLCBwdWJpZCwgaGFzX2ludGVybmFsX3N1YnNldAotICAgICAg
ICAgICAgICAgIG8gTWFueSBwYWlyZWQgaGFuZGxlciBzZXR0ZXJzIChsaWtlIFhNTF9TZXRFbGVt
ZW50SGFuZGxlcikKLSAgICAgICAgICAgICAgICAgIG5vdyBoYXZlIGNvcnJlc3BvbmRpbmcgaW5k
aXZpZHVhbCBoYW5kbGVyIHNldHRlcnMKLSAgICAgICAgICAgICAgICBvIFhNTF9HZXRJbnB1dENv
bnRleHQgZm9yIGdldHRpbmcgdGhlIGlucHV0IGNvbnRleHQgb2YKLSAgICAgICAgICAgICAgICAg
IHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uLgotICAgICAgICAtIEFkZGVkIHJlZmVyZW5jZSBt
YXRlcmlhbAotICAgICAgICAtIFBhY2thZ2VkIGludG8gYSBkaXN0cmlidXRpb24gdGhhdCBidWls
ZHMgYSBzaGFyYWJsZSBsaWJyYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL01BTklGRVNUIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9NQU5JRkVT
VApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwMjBkYzA1YjAxZjRlZDU1ZTBhYjE1
ZTE3YTNlYzJhOGUwODI0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL01BTklGRVNUCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLWFtaWdh
L2xhdW5jaC5jCi1hbWlnYS9leHBhdF82OGsuYwotYW1pZ2EvZXhwYXRfNjhrLmgKLWFtaWdhL2V4
cGF0XzY4a19oYW5kbGVyX3N0dWJzLmMKLWFtaWdhL2V4cGF0X2Jhc2UuaAotYW1pZ2EvZXhwYXRf
dmVjdG9ycy5jCi1hbWlnYS9leHBhdF9saWIuYwotYW1pZ2EvZXhwYXQueG1sCi1hbWlnYS9SRUFE
TUUudHh0Ci1hbWlnYS9NYWtlZmlsZQotYW1pZ2EvaW5jbHVkZS9wcm90by9leHBhdC5oCi1hbWln
YS9pbmNsdWRlL2xpYnJhcmllcy9leHBhdC5oCi1hbWlnYS9pbmNsdWRlL2ludGVyZmFjZXMvZXhw
YXQuaAotYW1pZ2EvaW5jbHVkZS9pbmxpbmU0L2V4cGF0LmgKLWJjYjUvUkVBRE1FLnR4dAotYmNi
NS9hbGxfcHJvamVjdHMuYnBnCi1iY2I1L2VsZW1lbnRzLmJwZgotYmNiNS9lbGVtZW50cy5icHIK
LWJjYjUvZWxlbWVudHMubWFrCi1iY2I1L2V4cGF0LmJwZgotYmNiNS9leHBhdC5icHIKLWJjYjUv
ZXhwYXQubWFrCi1iY2I1L2V4cGF0X3N0YXRpYy5icGYKLWJjYjUvZXhwYXRfc3RhdGljLmJwcgot
YmNiNS9leHBhdF9zdGF0aWMubWFrCi1iY2I1L2V4cGF0dy5icGYKLWJjYjUvZXhwYXR3LmJwcgot
YmNiNS9leHBhdHcubWFrCi1iY2I1L2V4cGF0d19zdGF0aWMuYnBmCi1iY2I1L2V4cGF0d19zdGF0
aWMuYnByCi1iY2I1L2V4cGF0d19zdGF0aWMubWFrCi1iY2I1L2xpYmV4cGF0X210ZC5kZWYKLWJj
YjUvbGliZXhwYXR3X210ZC5kZWYKLWJjYjUvbWFrZWZpbGUubWFrCi1iY2I1L291dGxpbmUuYnBm
Ci1iY2I1L291dGxpbmUuYnByCi1iY2I1L291dGxpbmUubWFrCi1iY2I1L3NldHVwLmJhdAotYmNi
NS94bWx3Zi5icGYKLWJjYjUveG1sd2YuYnByCi1iY2I1L3htbHdmLm1hawotZG9jL2V4cGF0LnBu
ZwotZG9jL3JlZmVyZW5jZS5odG1sCi1kb2Mvc3R5bGUuY3NzCi1kb2MvdmFsaWQteGh0bWwxMC5w
bmcKLWRvYy94bWx3Zi4xCi1kb2MveG1sd2Yuc2dtbAotQ01ha2VMaXN0cy50eHQKLUNNYWtlLlJF
QURNRQotQ09QWUlORwotQ2hhbmdlcwotQ29uZmlndXJlQ2hlY2tzLmNtYWtlCi1NQU5JRkVTVAot
TWFrZWZpbGUuaW4KLVJFQURNRQotY29uZmlndXJlCi1jb25maWd1cmUuaW4KLWV4cGF0X2NvbmZp
Zy5oLmluCi1leHBhdF9jb25maWcuaC5jbWFrZQotZXhwYXQucGMuaW4KLWV4cGF0LmRzdwotYWNs
b2NhbC5tNAotY29uZnRvb2xzL1ByaW50UGF0aAotY29uZnRvb2xzL2FjX2NfYmlnZW5kaWFuX2Ny
b3NzLm00Ci1jb25mdG9vbHMvZXhwYXQubTQKLWNvbmZ0b29scy9nZXQtdmVyc2lvbi5zaAotY29u
ZnRvb2xzL21raW5zdGFsbGRpcnMKLWNvbmZ0b29scy9jb25maWcuZ3Vlc3MKLWNvbmZ0b29scy9j
b25maWcuc3ViCi1jb25mdG9vbHMvaW5zdGFsbC1zaAotY29uZnRvb2xzL2x0bWFpbi5zaAotbTQv
bGlidG9vbC5tNAotbTQvbHR2ZXJzaW9uLm00Ci1tNC9sdG9wdGlvbnMubTQKLW00L2x0c3VnYXIu
bTQKLW00L2x0fm9ic29sZXRlLm00Ci1leGFtcGxlcy9lbGVtZW50cy5jCi1leGFtcGxlcy9lbGVt
ZW50cy5kc3AKLWV4YW1wbGVzL291dGxpbmUuYwotZXhhbXBsZXMvb3V0bGluZS5kc3AKLWxpYi9N
YWtlZmlsZS5NUFcKLWxpYi9hbWlnYWNvbmZpZy5oCi1saWIvYXNjaWkuaAotbGliL2FzY2lpdGFi
LmgKLWxpYi9leHBhdC5kc3AKLWxpYi9leHBhdC5oCi1saWIvZXhwYXRfZXh0ZXJuYWwuaAotbGli
L2V4cGF0X3N0YXRpYy5kc3AKLWxpYi9leHBhdHcuZHNwCi1saWIvZXhwYXR3X3N0YXRpYy5kc3AK
LWxpYi9pYXNjaWl0YWIuaAotbGliL2ludGVybmFsLmgKLWxpYi9sYXRpbjF0YWIuaAotbGliL2xp
YmV4cGF0LmRlZgotbGliL2xpYmV4cGF0dy5kZWYKLWxpYi9tYWNjb25maWcuaAotbGliL25hbWV0
YWIuaAotbGliL3V0Zjh0YWIuaAotbGliL3dpbmNvbmZpZy5oCi1saWIveG1scGFyc2UuYwotbGli
L3htbHJvbGUuYwotbGliL3htbHJvbGUuaAotbGliL3htbHRvay5jCi1saWIveG1sdG9rLmgKLWxp
Yi94bWx0b2tfaW1wbC5jCi1saWIveG1sdG9rX2ltcGwuaAotbGliL3htbHRva19ucy5jCi10ZXN0
cy9iZW5jaG1hcmsvUkVBRE1FLnR4dAotdGVzdHMvYmVuY2htYXJrL2JlbmNobWFyay5jCi10ZXN0
cy9iZW5jaG1hcmsvYmVuY2htYXJrLmRzcAotdGVzdHMvYmVuY2htYXJrL2JlbmNobWFyay5kc3cK
LXRlc3RzL1JFQURNRS50eHQKLXRlc3RzL2NoYXJkYXRhLmMKLXRlc3RzL2NoYXJkYXRhLmgKLXRl
c3RzL21pbmljaGVjay5jCi10ZXN0cy9taW5pY2hlY2suaAotdGVzdHMvcnVudGVzdHMuYwotdGVz
dHMvcnVudGVzdHNwcC5jcHAKLXRlc3RzL3htbHRlc3Quc2gKLXZtcy9SRUFETUUudm1zCi12bXMv
ZGVzY3JpcC5tbXMKLXZtcy9leHBhdF9jb25maWcuaAotd2luMzIvTUFOSUZFU1QudHh0Ci13aW4z
Mi9SRUFETUUudHh0Ci13aW4zMi9leHBhdC5pc3MKLXhtbHdmL2NvZGVwYWdlLmMKLXhtbHdmL2Nv
ZGVwYWdlLmgKLXhtbHdmL2N0LmMKLXhtbHdmL2ZpbGVtYXAuaAoteG1sd2YvcmVhZGZpbGVtYXAu
YwoteG1sd2YvdW5peGZpbGVtYXAuYwoteG1sd2Yvd2luMzJmaWxlbWFwLmMKLXhtbHdmL3htbGZp
bGUuYwoteG1sd2YveG1sZmlsZS5oCi14bWx3Zi94bWxtaW1lLmMKLXhtbHdmL3htbG1pbWUuaAot
eG1sd2YveG1sdGNoYXIuaAoteG1sd2YveG1sdXJsLmgKLXhtbHdmL3htbHdmLmMKLXhtbHdmL3ht
bHdmLmRzcAoteG1sd2YveG1sd2luMzJ1cmwuY3h4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL1JFQURNRSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMv
UkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjg4NDY3ZDFiMDQwNWQ0NzA5
M2U3NGNkMDY0YTYyYmYxZTRhODc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvZXhwYXQvZmlsZXMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgRXhwYXQsIFJlbGVhc2UgMi4xLjAKLQotVGhpcyBpcyBF
eHBhdCwgYSBDIGxpYnJhcnkgZm9yIHBhcnNpbmcgWE1MLCB3cml0dGVuIGJ5IEphbWVzIENsYXJr
LgotRXhwYXQgaXMgYSBzdHJlYW0tb3JpZW50ZWQgWE1MIHBhcnNlci4gIFRoaXMgbWVhbnMgdGhh
dCB5b3UgcmVnaXN0ZXIKLWhhbmRsZXJzIHdpdGggdGhlIHBhcnNlciBiZWZvcmUgc3RhcnRpbmcg
dGhlIHBhcnNlLiAgVGhlc2UgaGFuZGxlcnMKLWFyZSBjYWxsZWQgd2hlbiB0aGUgcGFyc2VyIGRp
c2NvdmVycyB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIGluIHRoZQotZG9jdW1lbnQgYmVpbmcg
cGFyc2VkLiAgQSBzdGFydCB0YWcgaXMgYW4gZXhhbXBsZSBvZiB0aGUga2luZCBvZgotc3RydWN0
dXJlcyBmb3Igd2hpY2ggeW91IG1heSByZWdpc3RlciBoYW5kbGVycy4KLQotV2luZG93cyB1c2Vy
cyBzaG91bGQgdXNlIHRoZSBleHBhdF93aW4zMmJpbiBwYWNrYWdlLCB3aGljaCBpbmNsdWRlcwot
Ym90aCBwcmVjb21waWxlZCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzLCBhbmQgc291cmNlIGNv
ZGUgZm9yCi1kZXZlbG9wZXJzLgotCi1FeHBhdCBpcyBmcmVlIHNvZnR3YXJlLiAgWW91IG1heSBj
b3B5LCBkaXN0cmlidXRlLCBhbmQgbW9kaWZ5IGl0IHVuZGVyCi10aGUgdGVybXMgb2YgdGhlIExp
Y2Vuc2UgY29udGFpbmVkIGluIHRoZSBmaWxlIENPUFlJTkcgZGlzdHJpYnV0ZWQKLXdpdGggdGhp
cyBwYWNrYWdlLiAgVGhpcyBsaWNlbnNlIGlzIHRoZSBzYW1lIGFzIHRoZSBNSVQvWCBDb25zb3J0
aXVtCi1saWNlbnNlLgotCi1WZXJzaW9ucyBvZiBFeHBhdCB0aGF0IGhhdmUgYW4gb2RkIG1pbm9y
IHZlcnNpb24gKHRoZSBtaWRkbGUgbnVtYmVyIGluCi10aGUgcmVsZWFzZSBhYm92ZSksIGFyZSBk
ZXZlbG9wbWVudCByZWxlYXNlcyBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQKLWFzIGJldGEgc29m
dHdhcmUuICBSZWxlYXNlcyB3aXRoIGV2ZW4gbWlub3IgdmVyc2lvbiBudW1iZXJzIGFyZQotaW50
ZW5kZWQgdG8gYmUgcHJvZHVjdGlvbiBncmFkZSBzb2Z0d2FyZS4KLQotSWYgeW91IGFyZSBidWls
ZGluZyBFeHBhdCBmcm9tIGEgY2hlY2stb3V0IGZyb20gdGhlIENWUyByZXBvc2l0b3J5LAoteW91
IG5lZWQgdG8gcnVuIGEgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIHRoZSBjb25maWd1cmUgc2NyaXB0
IHVzaW5nIHRoZQotR05VIGF1dG9jb25mIGFuZCBsaWJ0b29sIHRvb2xzLiAgVG8gZG8gdGhpcywg
eW91IG5lZWQgdG8gaGF2ZQotYXV0b2NvbmYgMi41OCBvciBuZXdlci4gUnVuIHRoZSBzY3JpcHQg
bGlrZSB0aGlzOgotCi0gICAgICAgIC4vYnVpbGRjb25mLnNoCi0KLU9uY2UgdGhpcyBoYXMgYmVl
biBkb25lLCBmb2xsb3cgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25zIGFzIGZvciBidWlsZGluZwotZnJv
bSBhIHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLVRvIGJ1aWxkIEV4cGF0IGZyb20gYSBzb3VyY2Ug
ZGlzdHJpYnV0aW9uLCB5b3UgZmlyc3QgcnVuIHRoZQotY29uZmlndXJhdGlvbiBzaGVsbCBzY3Jp
cHQgaW4gdGhlIHRvcCBsZXZlbCBkaXN0cmlidXRpb24gZGlyZWN0b3J5OgotCi0gICAgICAgIC4v
Y29uZmlndXJlCi0KLVRoZXJlIGFyZSBtYW55IG9wdGlvbnMgd2hpY2ggeW91IG1heSBwcm92aWRl
IHRvIGNvbmZpZ3VyZSAod2hpY2ggeW91Ci1jYW4gZGlzY292ZXIgYnkgcnVubmluZyBjb25maWd1
cmUgd2l0aCB0aGUgLS1oZWxwIG9wdGlvbikuICBCdXQgdGhlCi1vbmUgb2YgbW9zdCBpbnRlcmVz
dCBpcyB0aGUgb25lIHRoYXQgc2V0cyB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KLUJ5IGRl
ZmF1bHQsIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgc2V0IHRoaW5ncyB1cCB0byBpbnN0YWxs
Ci1saWJleHBhdCBpbnRvIC91c3IvbG9jYWwvbGliLCBleHBhdC5oIGludG8gL3Vzci9sb2NhbC9p
bmNsdWRlLCBhbmQKLXhtbHdmIGludG8gL3Vzci9sb2NhbC9iaW4uICBJZiwgZm9yIGV4YW1wbGUs
IHlvdSdkIHByZWZlciB0byBpbnN0YWxsCi1pbnRvIC9ob21lL21lL215c3R1ZmYvbGliLCAvaG9t
ZS9tZS9teXN0dWZmL2luY2x1ZGUsIGFuZAotL2hvbWUvbWUvbXlzdHVmZi9iaW4sIHlvdSBjYW4g
dGVsbCBjb25maWd1cmUgYWJvdXQgdGhhdCB3aXRoOgotCi0gICAgICAgIC4vY29uZmlndXJlIC0t
cHJlZml4PS9ob21lL21lL215c3R1ZmYKLSAgICAgICAgCi1Bbm90aGVyIGludGVyZXN0aW5nIG9w
dGlvbiBpcyB0byBlbmFibGUgNjQtYml0IGludGVnZXIgc3VwcG9ydCBmb3IKLWxpbmUgYW5kIGNv
bHVtbiBudW1iZXJzIGFuZCB0aGUgb3Zlci1hbGwgYnl0ZSBpbmRleDoKLQotICAgICAgICAuL2Nv
bmZpZ3VyZSBDUFBGTEFHUz0tRFhNTF9MQVJHRV9TSVpFCi0gICAgICAgIAotSG93ZXZlciwgc3Vj
aCBhIG1vZGlmaWNhdGlvbiB3b3VsZCBiZSBhIGJyZWFraW5nIGNoYW5nZSB0byB0aGUgQUJJCi1h
bmQgaXMgdGhlcmVmb3JlIG5vdCByZWNvbW1lbmRlZCBmb3IgZ2VuZXJhbCB1c2UgLSBlLmcuIGFz
IHBhcnQgb2YKLWEgTGludXggZGlzdHJpYnV0aW9uIC0gYnV0IHJhdGhlciBmb3IgYnVpbGRzIHdp
dGggc3BlY2lhbCByZXF1aXJlbWVudHMuCi0KLUFmdGVyIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBz
Y3JpcHQsIHRoZSAibWFrZSIgY29tbWFuZCB3aWxsIGJ1aWxkCi10aGluZ3MgYW5kICJtYWtlIGlu
c3RhbGwiIHdpbGwgaW5zdGFsbCB0aGluZ3MgaW50byB0aGVpciBwcm9wZXIKLWxvY2F0aW9uLiAg
SGF2ZSBhIGxvb2sgYXQgdGhlICJNYWtlZmlsZSIgdG8gbGVhcm4gYWJvdXQgYWRkaXRpb25hbAot
Im1ha2UiIG9wdGlvbnMuICBOb3RlIHRoYXQgeW91IG5lZWQgdG8gaGF2ZSB3cml0ZSBwZXJtaXNz
aW9uIGludG8KLXRoZSBkaXJlY3RvcmllcyBpbnRvIHdoaWNoIHRoaW5ncyB3aWxsIGJlIGluc3Rh
bGxlZC4KLQotSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGJ1aWxkaW5nIEV4cGF0IHRvIHByb3Zp
ZGUgZG9jdW1lbnQKLWluZm9ybWF0aW9uIGluIFVURi0xNiBlbmNvZGluZyByYXRoZXIgdGhhbiB0
aGUgZGVmYXVsdCBVVEYtOCwgZm9sbG93Ci10aGVzZSBpbnN0cnVjdGlvbnMgKGFmdGVyIGhhdmlu
ZyBydW4gIm1ha2UgZGlzdGNsZWFuIik6Ci0KLSAgICAgICAgMS4gRm9yIFVURi0xNiBvdXRwdXQg
YXMgdW5zaWduZWQgc2hvcnQgKGFuZCB2ZXJzaW9uL2Vycm9yCi0gICAgICAgICAgIHN0cmluZ3Mg
YXMgY2hhciksIHJ1bjoKLQotICAgICAgICAgICAgICAgLi9jb25maWd1cmUgQ1BQRkxBR1M9LURY
TUxfVU5JQ09ERQotCi0gICAgICAgICAgIEZvciBVVEYtMTYgb3V0cHV0IGFzIHdjaGFyX3QgKGlu
Y2wuIHZlcnNpb24vZXJyb3Igc3RyaW5ncyksCi0gICAgICAgICAgIHJ1bjoKLQotICAgICAgICAg
ICAgICAgLi9jb25maWd1cmUgQ0ZMQUdTPSItZyAtTzIgLWZzaG9ydC13Y2hhciIgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1BQRkxBR1M9LURYTUxfVU5JQ09ERV9XQ0hBUl9UCi0KLSAg
ICAgICAgMi4gRWRpdCB0aGUgTWFrZUZpbGUsIGNoYW5naW5nOgotCi0gICAgICAgICAgICAgICBM
SUJSQVJZID0gbGliZXhwYXQubGEKLQotICAgICAgICAgICB0bzoKLQotICAgICAgICAgICAgICAg
TElCUkFSWSA9IGxpYmV4cGF0dy5sYQotCi0gICAgICAgICAgIChOb3RlIHRoZSBhZGRpdGlvbmFs
ICJ3IiBpbiB0aGUgbGlicmFyeSBuYW1lLikKLQotICAgICAgICAzLiBSdW4gIm1ha2UgYnVpbGRs
aWIiICh3aGljaCBidWlsZHMgdGhlIGxpYnJhcnkgb25seSkuCi0gICAgICAgICAgIE9yLCB0byBz
YXZlIHN0ZXAgMiwgcnVuICJtYWtlIGJ1aWxkbGliIExJQlJBUlk9bGliZXhwYXR3LmxhIi4KLQot
ICAgICAgICA0LiBSdW4gIm1ha2UgaW5zdGFsbGxpYiIgKHdoaWNoIGluc3RhbGxzIHRoZSBsaWJy
YXJ5IG9ubHkpLgotICAgICAgICAgICBPciwgaWYgc3RlcCAyIHdhcyBvbWl0dGVkLCBydW4gIm1h
a2UgaW5zdGFsbGxpYiBMSUJSQVJZPWxpYmV4cGF0dy5sYSIuCi0gICAgICAgICAgIAotVXNpbmcg
REVTVERJUiBvciBJTlNUQUxMX1JPT1QgaXMgZW5hYmxlZCwgd2l0aCBJTlNUQUxMX1JPT1QgYmVp
bmcgdGhlIGRlZmF1bHQKLXZhbHVlIGZvciBERVNURElSLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIG1h
a2UgZmlsZSB1c2luZyBvbmx5IERFU1RESVIuCi1JdCB3b3JrcyBhcyBmb2xsb3dzOgotICAgJCBt
YWtlIGluc3RhbGwgREVTVERJUj0vcGF0aC90by9pbWFnZQotb3ZlcnJpZGVzIHRoZSBpbi1tYWtl
ZmlsZSBzZXQgREVTVERJUiwgd2hpbGUgYm90aAotICAgJCBJTlNUQUxMX1JPT1Q9L3BhdGgvdG8v
aW1hZ2UgbWFrZSBpbnN0YWxsCi0gICAkIG1ha2UgaW5zdGFsbCBJTlNUQUxMX1JPT1Q9L3BhdGgv
dG8vaW1hZ2UKLXVzZSBERVNURElSPSQoSU5TVEFMTF9ST09UKSwgZXZlbiBpZiBERVNURElSIGV2
ZW50dWFsbHkgaXMgZGVmaW5lZCBpbiB0aGUKLWVudmlyb25tZW50LCBiZWNhdXNlIHZhcmlhYmxl
LXNldHRpbmcgcHJpb3JpdHkgaXMKLTEpIGNvbW1hbmRsaW5lCi0yKSBpbi1tYWtlZmlsZQotMykg
ZW52aXJvbm1lbnQgIAotCi1Ob3RlOiBUaGlzIG9ubHkgYXBwbGllcyB0byB0aGUgRXhwYXQgbGli
cmFyeSBpdHNlbGYsIGJ1aWxkaW5nIFVURi0xNiB2ZXJzaW9ucwotb2YgeG1sd2YgYW5kIHRoZSB0
ZXN0cyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gICAgICAgICAKLQotTm90ZSBmb3IgU29s
YXJpcyB1c2VyczogIFRoZSAiYXIiIGNvbW1hbmQgaXMgdXN1YWxseSBsb2NhdGVkIGluCi0iL3Vz
ci9jY3MvYmluIiwgd2hpY2ggaXMgbm90IGluIHRoZSBkZWZhdWx0IFBBVEguICBZb3Ugd2lsbCBu
ZWVkIHRvCi1hZGQgdGhpcyB0byB5b3VyIHBhdGggZm9yIHRoZSAibWFrZSIgY29tbWFuZCwgYW5k
IHByb2JhYmx5IGFsc28gc3dpdGNoCi10byBHTlUgbWFrZSAodGhlICJtYWtlIiBmb3VuZCBpbiAv
dXNyL2Njcy9iaW4gZG9lcyBub3Qgc2VlbSB0byB3b3JrCi1wcm9wZXJseSAtLSBhcHBlYXJhbnRs
eSBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kIC5QSE9OWSBkaXJlY3RpdmVzKS4gIElmCi15b3UncmUg
dXNpbmcga3NoIG9yIGJhc2gsIHVzZSB0aGlzIGNvbW1hbmQgdG8gYnVpbGQ6Ci0KLSAgICAgICAg
UEFUSD0vdXNyL2Njcy9iaW46JFBBVEggbWFrZQotCi1XaGVuIHVzaW5nIEV4cGF0IHdpdGggYSBw
cm9qZWN0IHVzaW5nIGF1dG9jb25mIGZvciBjb25maWd1cmF0aW9uLCB5b3UKLWNhbiB1c2UgdGhl
IHByb2JpbmcgbWFjcm8gaW4gY29uZnRvb2xzL2V4cGF0Lm00IHRvIGRldGVybWluZSBob3cgdG8K
LWluY2x1ZGUgRXhwYXQuICBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhhdCBmaWxl
IGZvciBtb3JlCi1pbmZvcm1hdGlvbi4KLQotQSByZWZlcmVuY2UgbWFudWFsIGlzIGF2YWlsYWJs
ZSBpbiB0aGUgZmlsZSBkb2MvcmVmZXJlbmNlLmh0bWwgaW4gdGhpcwotZGlzdHJpYnV0aW9uLgot
Ci1UaGUgaG9tZXBhZ2UgZm9yIHRoaXMgcHJvamVjdCBpcyBodHRwOi8vd3d3LmxpYmV4cGF0Lm9y
Zy8uICBUaGVyZQotYXJlIGxpbmtzIHRoZXJlIHRvIGNvbm5lY3QgeW91IHRvIHRoZSBidWcgcmVw
b3J0cyBwYWdlLiAgSWYgeW91IG5lZWQKLXRvIHJlcG9ydCBhIGJ1ZyB3aGVuIHlvdSBkb24ndCBo
YXZlIGFjY2VzcyB0byBhIGJyb3dzZXIsIHlvdSBtYXkgYWxzbwotc2VuZCBhIGJ1ZyByZXBvcnQg
YnkgZW1haWwgdG8gZXhwYXQtYnVnc0BtYWlsLmxpYmV4cGF0Lm9yZy4KLQotRGlzY3Vzc2lvbiBy
ZWxhdGVkIHRvIHRoZSBkaXJlY3Rpb24gb2YgZnV0dXJlIGV4cGF0IGRldmVsb3BtZW50IHRha2Vz
Ci1wbGFjZSBvbiBleHBhdC1kaXNjdXNzQG1haWwubGliZXhwYXQub3JnLiAgQXJjaGl2ZXMgb2Yg
dGhpcyBsaXN0IGFuZAotb3RoZXIgRXhwYXQtcmVsYXRlZCBsaXN0cyBtYXkgYmUgZm91bmQgYXQ6
Ci0KLSAgICAgICAgaHR0cDovL21haWwubGliZXhwYXQub3JnL21haWxtYW4vbGlzdGluZm8vCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2ZpbGVzL2xpYi9hbWlnYWNvbmZpZy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYW1pZ2Fjb25maWcuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjNjExNTA0MDI1ZmI5YjAwY2RkODVjNzkzYjJm
YzNiNTZjZTg5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Zp
bGVzL2xpYi9hbWlnYWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lm
bmRlZiBBTUlHQUNPTkZJR19ICi0jZGVmaW5lIEFNSUdBQ09ORklHX0gKLQotLyogMTIzNCA9IExJ
TF9FTkRJQU4sIDQzMjEgPSBCSUdFTkRJQU4gKi8KLSNkZWZpbmUgQllURU9SREVSIDQzMjEKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCi0jZGVm
aW5lIEhBVkVfQkNPUFkgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNoZWNr
Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfQ0hFQ0tfSAotCi0vKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01F
TU1PVkUgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFk
ZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0KLS8qIHdoZXRoZXIgYnl0ZW9y
ZGVyIGlzIGJpZ2VuZGlhbiAqLwotI2RlZmluZSBXT1JEU19CSUdFTkRJQU4KLQotLyogRGVmaW5l
IHRvIHNwZWNpZnkgaG93IG11Y2ggY29udGV4dCB0byByZXRhaW4gYXJvdW5kIHRoZSBjdXJyZW50
IHBhcnNlCi0gICBwb2ludC4gKi8KLSNkZWZpbmUgWE1MX0NPTlRFWFRfQllURVMgMTAyNAotCi0v
KiBEZWZpbmUgdG8gbWFrZSBwYXJhbWV0ZXIgZW50aXR5IHBhcnNpbmcgZnVuY3Rpb25hbGl0eSBh
dmFpbGFibGUuICovCi0jZGVmaW5lIFhNTF9EVEQKLQotLyogRGVmaW5lIHRvIG1ha2UgWE1MIE5h
bWVzcGFjZXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICovCi0jZGVmaW5lIFhNTF9OUwotCi0j
ZW5kaWYgIC8qIEFNSUdBQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2FzY2lpLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVz
L2xpYi9hc2NpaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTA1MzBiMDliZGU2
OWQzNDJiZjg2N2QxY2E2NWY4ZTYzMTVhMzQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2FzY2lpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiAr
MCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0
d2FyZSBDZW50ZXIgTHRkCi0gICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJt
aXNzaW9uLgotKi8KLQotI2RlZmluZSBBU0NJSV9BIDB4NDEKLSNkZWZpbmUgQVNDSUlfQiAweDQy
Ci0jZGVmaW5lIEFTQ0lJX0MgMHg0MwotI2RlZmluZSBBU0NJSV9EIDB4NDQKLSNkZWZpbmUgQVND
SUlfRSAweDQ1Ci0jZGVmaW5lIEFTQ0lJX0YgMHg0NgotI2RlZmluZSBBU0NJSV9HIDB4NDcKLSNk
ZWZpbmUgQVNDSUlfSCAweDQ4Ci0jZGVmaW5lIEFTQ0lJX0kgMHg0OQotI2RlZmluZSBBU0NJSV9K
IDB4NEEKLSNkZWZpbmUgQVNDSUlfSyAweDRCCi0jZGVmaW5lIEFTQ0lJX0wgMHg0QwotI2RlZmlu
ZSBBU0NJSV9NIDB4NEQKLSNkZWZpbmUgQVNDSUlfTiAweDRFCi0jZGVmaW5lIEFTQ0lJX08gMHg0
RgotI2RlZmluZSBBU0NJSV9QIDB4NTAKLSNkZWZpbmUgQVNDSUlfUSAweDUxCi0jZGVmaW5lIEFT
Q0lJX1IgMHg1MgotI2RlZmluZSBBU0NJSV9TIDB4NTMKLSNkZWZpbmUgQVNDSUlfVCAweDU0Ci0j
ZGVmaW5lIEFTQ0lJX1UgMHg1NQotI2RlZmluZSBBU0NJSV9WIDB4NTYKLSNkZWZpbmUgQVNDSUlf
VyAweDU3Ci0jZGVmaW5lIEFTQ0lJX1ggMHg1OAotI2RlZmluZSBBU0NJSV9ZIDB4NTkKLSNkZWZp
bmUgQVNDSUlfWiAweDVBCi0KLSNkZWZpbmUgQVNDSUlfYSAweDYxCi0jZGVmaW5lIEFTQ0lJX2Ig
MHg2MgotI2RlZmluZSBBU0NJSV9jIDB4NjMKLSNkZWZpbmUgQVNDSUlfZCAweDY0Ci0jZGVmaW5l
IEFTQ0lJX2UgMHg2NQotI2RlZmluZSBBU0NJSV9mIDB4NjYKLSNkZWZpbmUgQVNDSUlfZyAweDY3
Ci0jZGVmaW5lIEFTQ0lJX2ggMHg2OAotI2RlZmluZSBBU0NJSV9pIDB4NjkKLSNkZWZpbmUgQVND
SUlfaiAweDZBCi0jZGVmaW5lIEFTQ0lJX2sgMHg2QgotI2RlZmluZSBBU0NJSV9sIDB4NkMKLSNk
ZWZpbmUgQVNDSUlfbSAweDZECi0jZGVmaW5lIEFTQ0lJX24gMHg2RQotI2RlZmluZSBBU0NJSV9v
IDB4NkYKLSNkZWZpbmUgQVNDSUlfcCAweDcwCi0jZGVmaW5lIEFTQ0lJX3EgMHg3MQotI2RlZmlu
ZSBBU0NJSV9yIDB4NzIKLSNkZWZpbmUgQVNDSUlfcyAweDczCi0jZGVmaW5lIEFTQ0lJX3QgMHg3
NAotI2RlZmluZSBBU0NJSV91IDB4NzUKLSNkZWZpbmUgQVNDSUlfdiAweDc2Ci0jZGVmaW5lIEFT
Q0lJX3cgMHg3NwotI2RlZmluZSBBU0NJSV94IDB4NzgKLSNkZWZpbmUgQVNDSUlfeSAweDc5Ci0j
ZGVmaW5lIEFTQ0lJX3ogMHg3QQotCi0jZGVmaW5lIEFTQ0lJXzAgMHgzMAotI2RlZmluZSBBU0NJ
SV8xIDB4MzEKLSNkZWZpbmUgQVNDSUlfMiAweDMyCi0jZGVmaW5lIEFTQ0lJXzMgMHgzMwotI2Rl
ZmluZSBBU0NJSV80IDB4MzQKLSNkZWZpbmUgQVNDSUlfNSAweDM1Ci0jZGVmaW5lIEFTQ0lJXzYg
MHgzNgotI2RlZmluZSBBU0NJSV83IDB4MzcKLSNkZWZpbmUgQVNDSUlfOCAweDM4Ci0jZGVmaW5l
IEFTQ0lJXzkgMHgzOQotCi0jZGVmaW5lIEFTQ0lJX1RBQiAweDA5Ci0jZGVmaW5lIEFTQ0lJX1NQ
QUNFIDB4MjAKLSNkZWZpbmUgQVNDSUlfRVhDTCAweDIxCi0jZGVmaW5lIEFTQ0lJX1FVT1QgMHgy
MgotI2RlZmluZSBBU0NJSV9BTVAgMHgyNgotI2RlZmluZSBBU0NJSV9BUE9TIDB4MjcKLSNkZWZp
bmUgQVNDSUlfTUlOVVMgMHgyRAotI2RlZmluZSBBU0NJSV9QRVJJT0QgMHgyRQotI2RlZmluZSBB
U0NJSV9DT0xPTiAweDNBCi0jZGVmaW5lIEFTQ0lJX1NFTUkgMHgzQgotI2RlZmluZSBBU0NJSV9M
VCAweDNDCi0jZGVmaW5lIEFTQ0lJX0VRVUFMUyAweDNECi0jZGVmaW5lIEFTQ0lJX0dUIDB4M0UK
LSNkZWZpbmUgQVNDSUlfTFNRQiAweDVCCi0jZGVmaW5lIEFTQ0lJX1JTUUIgMHg1RAotI2RlZmlu
ZSBBU0NJSV9VTkRFUlNDT1JFIDB4NUYKLSNkZWZpbmUgQVNDSUlfTFBBUkVOIDB4MjgKLSNkZWZp
bmUgQVNDSUlfUlBBUkVOIDB4MjkKLSNkZWZpbmUgQVNDSUlfRkYgMHgwQwotI2RlZmluZSBBU0NJ
SV9TTEFTSCAweDJGCi0jZGVmaW5lIEFTQ0lJX0hBU0ggMHgyMwotI2RlZmluZSBBU0NJSV9QSVBF
IDB4N0MKLSNkZWZpbmUgQVNDSUlfQ09NTUEgMHgyQwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYXNjaWl0
YWIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhw
YXQvZmlsZXMvbGliL2FzY2lpdGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5
YTE1YzI4Y2ExNGY4YTg5YzkwODYxYzFmNjliN2ZmNWI4MmI2M2IuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvYXNjaWl0YWIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9w
ZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZv
ciBjb3B5aW5nIHBlcm1pc3Npb24uCi0qLwotCi0vKiAweDAwICovIEJUX05PTlhNTCwgQlRfTk9O
WE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwKLS8qIDB4MDQgKi8gQlRfTk9OWE1MLCBCVF9OT05Y
TUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLAotLyogMHgwOCAqLyBCVF9OT05YTUwsIEJUX1MsIEJU
X0xGLCBCVF9OT05YTUwsCi0vKiAweDBDICovIEJUX05PTlhNTCwgQlRfQ1IsIEJUX05PTlhNTCwg
QlRfTk9OWE1MLAotLyogMHgxMCAqLyBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBC
VF9OT05YTUwsCi0vKiAweDE0ICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJU
X05PTlhNTCwKLS8qIDB4MTggKi8gQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRf
Tk9OWE1MLAotLyogMHgxQyAqLyBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9O
T05YTUwsCi0vKiAweDIwICovIEJUX1MsIEJUX0VYQ0wsIEJUX1FVT1QsIEJUX05VTSwKLS8qIDB4
MjQgKi8gQlRfT1RIRVIsIEJUX1BFUkNOVCwgQlRfQU1QLCBCVF9BUE9TLAotLyogMHgyOCAqLyBC
VF9MUEFSLCBCVF9SUEFSLCBCVF9BU1QsIEJUX1BMVVMsCi0vKiAweDJDICovIEJUX0NPTU1BLCBC
VF9NSU5VUywgQlRfTkFNRSwgQlRfU09MLAotLyogMHgzMCAqLyBCVF9ESUdJVCwgQlRfRElHSVQs
IEJUX0RJR0lULCBCVF9ESUdJVCwKLS8qIDB4MzQgKi8gQlRfRElHSVQsIEJUX0RJR0lULCBCVF9E
SUdJVCwgQlRfRElHSVQsCi0vKiAweDM4ICovIEJUX0RJR0lULCBCVF9ESUdJVCwgQlRfQ09MT04s
IEJUX1NFTUksCi0vKiAweDNDICovIEJUX0xULCBCVF9FUVVBTFMsIEJUX0dULCBCVF9RVUVTVCwK
LS8qIDB4NDAgKi8gQlRfT1RIRVIsIEJUX0hFWCwgQlRfSEVYLCBCVF9IRVgsCi0vKiAweDQ0ICov
IEJUX0hFWCwgQlRfSEVYLCBCVF9IRVgsIEJUX05NU1RSVCwKLS8qIDB4NDggKi8gQlRfTk1TVFJU
LCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAotLyogMHg0QyAqLyBCVF9OTVNUUlQs
IEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCi0vKiAweDUwICovIEJUX05NU1RSVCwg
QlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKLS8qIDB4NTQgKi8gQlRfTk1TVFJULCBC
VF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAotLyogMHg1OCAqLyBCVF9OTVNUUlQsIEJU
X05NU1RSVCwgQlRfTk1TVFJULCBCVF9MU1FCLAotLyogMHg1QyAqLyBCVF9PVEhFUiwgQlRfUlNR
QiwgQlRfT1RIRVIsIEJUX05NU1RSVCwKLS8qIDB4NjAgKi8gQlRfT1RIRVIsIEJUX0hFWCwgQlRf
SEVYLCBCVF9IRVgsCi0vKiAweDY0ICovIEJUX0hFWCwgQlRfSEVYLCBCVF9IRVgsIEJUX05NU1RS
VCwKLS8qIDB4NjggKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJU
LAotLyogMHg2QyAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQs
Ci0vKiAweDcwICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwK
LS8qIDB4NzQgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAot
LyogMHg3OCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9PVEhFUiwKLS8q
IDB4N0MgKi8gQlRfVkVSQkFSLCBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9maWxlcy9saWIvZXhwYXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2V4cGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlhMjE2ODBiZTQ2OGNhZDI4YTA1ZDJkYWVjNzExMDIzMzMwMjRlZmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvZXhwYXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNDcgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAxOTk4LCAx
OTk5LCAyMDAwIFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAotICAgU2VlIHRo
ZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KLSovCi0KLSNpZm5kZWYgRXhw
YXRfSU5DTFVERUQKLSNkZWZpbmUgRXhwYXRfSU5DTFVERUQgMQotCi0jaWZkZWYgX19WTVMKLS8q
ICAgICAgMCAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAzICAgICAgMCAgICAgICAgMSAgICAg
ICAgIDIgICAgICAgICAzCi0gICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEg
ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEgKi8KLSNkZWZpbmUgWE1MX1NldFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgWE1MX1NldFByb2Nlc3NpbmdJbnN0ckhhbmRsZXIK
LSNkZWZpbmUgWE1MX1NldFVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgICAgWE1MX1NldFVucGFy
c2VkRW50RGVjbEhhbmRsZXIKLSNkZWZpbmUgWE1MX1NldFN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRs
ZXIgICAgWE1MX1NldFN0YXJ0TmFtZXNwY0RlY2xIYW5kbGVyCi0jZGVmaW5lIFhNTF9TZXRFeHRl
cm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgIFhNTF9TZXRFeHRlcm5hbEVudFJlZkhhbmRsZXJBcmcK
LSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwu
aCIKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1zdHJ1Y3Qg
WE1MX1BhcnNlclN0cnVjdDsKLXR5cGVkZWYgc3RydWN0IFhNTF9QYXJzZXJTdHJ1Y3QgKlhNTF9Q
YXJzZXI7Ci0KLS8qIFNob3VsZCB0aGlzIGJlIGRlZmluZWQgdXNpbmcgc3RkYm9vbC5oIHdoZW4g
Qzk5IGlzIGF2YWlsYWJsZT8gKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBYTUxfQm9vbDsKLSNk
ZWZpbmUgWE1MX1RSVUUgICAoKFhNTF9Cb29sKSAxKQotI2RlZmluZSBYTUxfRkFMU0UgICgoWE1M
X0Jvb2wpIDApCi0KLS8qIFRoZSBYTUxfU3RhdHVzIGVudW0gZ2l2ZXMgdGhlIHBvc3NpYmxlIHJl
dHVybiB2YWx1ZXMgZm9yIHNldmVyYWwKLSAgIEFQSSBmdW5jdGlvbnMuICBUaGUgcHJlcHJvY2Vz
c29yICNkZWZpbmVzIGFyZSBpbmNsdWRlZCBzbyB0aGlzCi0gICBzdGFuemEgY2FuIGJlIGFkZGVk
IHRvIGNvZGUgdGhhdCBzdGlsbCBuZWVkcyB0byBzdXBwb3J0IG9sZGVyCi0gICB2ZXJzaW9ucyBv
ZiBFeHBhdCAxLjk1Lng6Ci0KLSAgICNpZm5kZWYgWE1MX1NUQVRVU19PSwotICAgI2RlZmluZSBY
TUxfU1RBVFVTX09LICAgIDEKLSAgICNkZWZpbmUgWE1MX1NUQVRVU19FUlJPUiAwCi0gICAjZW5k
aWYKLQotICAgT3RoZXJ3aXNlLCB0aGUgI2RlZmluZSBoYWNrZXJ5IGlzIHF1aXRlIHVnbHkgYW5k
IHdvdWxkIGhhdmUgYmVlbgotICAgZHJvcHBlZC4KLSovCi1lbnVtIFhNTF9TdGF0dXMgewotICBY
TUxfU1RBVFVTX0VSUk9SID0gMCwKLSNkZWZpbmUgWE1MX1NUQVRVU19FUlJPUiBYTUxfU1RBVFVT
X0VSUk9SCi0gIFhNTF9TVEFUVVNfT0sgPSAxLAotI2RlZmluZSBYTUxfU1RBVFVTX09LIFhNTF9T
VEFUVVNfT0sKLSAgWE1MX1NUQVRVU19TVVNQRU5ERUQgPSAyCi0jZGVmaW5lIFhNTF9TVEFUVVNf
U1VTUEVOREVEIFhNTF9TVEFUVVNfU1VTUEVOREVECi19OwotCi1lbnVtIFhNTF9FcnJvciB7Ci0g
IFhNTF9FUlJPUl9OT05FLAotICBYTUxfRVJST1JfTk9fTUVNT1JZLAotICBYTUxfRVJST1JfU1lO
VEFYLAotICBYTUxfRVJST1JfTk9fRUxFTUVOVFMsCi0gIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VO
LAotICBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU4sCi0gIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVIs
Ci0gIFhNTF9FUlJPUl9UQUdfTUlTTUFUQ0gsCi0gIFhNTF9FUlJPUl9EVVBMSUNBVEVfQVRUUklC
VVRFLAotICBYTUxfRVJST1JfSlVOS19BRlRFUl9ET0NfRUxFTUVOVCwKLSAgWE1MX0VSUk9SX1BB
UkFNX0VOVElUWV9SRUYsCi0gIFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZLAotICBYTUxfRVJS
T1JfUkVDVVJTSVZFX0VOVElUWV9SRUYsCi0gIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFksCi0gIFhN
TF9FUlJPUl9CQURfQ0hBUl9SRUYsCi0gIFhNTF9FUlJPUl9CSU5BUllfRU5USVRZX1JFRiwKLSAg
WE1MX0VSUk9SX0FUVFJJQlVURV9FWFRFUk5BTF9FTlRJVFlfUkVGLAotICBYTUxfRVJST1JfTUlT
UExBQ0VEX1hNTF9QSSwKLSAgWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcsCi0gIFhNTF9FUlJP
Ul9JTkNPUlJFQ1RfRU5DT0RJTkcsCi0gIFhNTF9FUlJPUl9VTkNMT1NFRF9DREFUQV9TRUNUSU9O
LAotICBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HLAotICBYTUxfRVJST1JfTk9U
X1NUQU5EQUxPTkUsCi0gIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFLAotICBYTUxfRVJST1Jf
RU5USVRZX0RFQ0xBUkVEX0lOX1BFLAotICBYTUxfRVJST1JfRkVBVFVSRV9SRVFVSVJFU19YTUxf
RFRELAotICBYTUxfRVJST1JfQ0FOVF9DSEFOR0VfRkVBVFVSRV9PTkNFX1BBUlNJTkcsCi0gIC8q
IEFkZGVkIGluIDEuOTUuNy4gKi8KLSAgWE1MX0VSUk9SX1VOQk9VTkRfUFJFRklYLAotICAvKiBB
ZGRlZCBpbiAxLjk1LjguICovCi0gIFhNTF9FUlJPUl9VTkRFQ0xBUklOR19QUkVGSVgsCi0gIFhN
TF9FUlJPUl9JTkNPTVBMRVRFX1BFLAotICBYTUxfRVJST1JfWE1MX0RFQ0wsCi0gIFhNTF9FUlJP
Ul9URVhUX0RFQ0wsCi0gIFhNTF9FUlJPUl9QVUJMSUNJRCwKLSAgWE1MX0VSUk9SX1NVU1BFTkRF
RCwKLSAgWE1MX0VSUk9SX05PVF9TVVNQRU5ERUQsCi0gIFhNTF9FUlJPUl9BQk9SVEVELAotICBY
TUxfRVJST1JfRklOSVNIRUQsCi0gIFhNTF9FUlJPUl9TVVNQRU5EX1BFLAotICAvKiBBZGRlZCBp
biAyLjAuICovCi0gIFhNTF9FUlJPUl9SRVNFUlZFRF9QUkVGSVhfWE1MLAotICBYTUxfRVJST1Jf
UkVTRVJWRURfUFJFRklYX1hNTE5TLAotICBYTUxfRVJST1JfUkVTRVJWRURfTkFNRVNQQUNFX1VS
SQotfTsKLQotZW51bSBYTUxfQ29udGVudF9UeXBlIHsKLSAgWE1MX0NUWVBFX0VNUFRZID0gMSwK
LSAgWE1MX0NUWVBFX0FOWSwKLSAgWE1MX0NUWVBFX01JWEVELAotICBYTUxfQ1RZUEVfTkFNRSwK
LSAgWE1MX0NUWVBFX0NIT0lDRSwKLSAgWE1MX0NUWVBFX1NFUQotfTsKLQotZW51bSBYTUxfQ29u
dGVudF9RdWFudCB7Ci0gIFhNTF9DUVVBTlRfTk9ORSwKLSAgWE1MX0NRVUFOVF9PUFQsCi0gIFhN
TF9DUVVBTlRfUkVQLAotICBYTUxfQ1FVQU5UX1BMVVMKLX07Ci0KLS8qIElmIHR5cGUgPT0gWE1M
X0NUWVBFX0VNUFRZIG9yIFhNTF9DVFlQRV9BTlksIHRoZW4gcXVhbnQgd2lsbCBiZQotICAgWE1M
X0NRVUFOVF9OT05FLCBhbmQgdGhlIG90aGVyIGZpZWxkcyB3aWxsIGJlIHplcm8gb3IgTlVMTC4K
LSAgIElmIHR5cGUgPT0gWE1MX0NUWVBFX01JWEVELCB0aGVuIHF1YW50IHdpbGwgYmUgTk9ORSBv
ciBSRVAgYW5kCi0gICBudW1jaGlsZHJlbiB3aWxsIGNvbnRhaW4gbnVtYmVyIG9mIGVsZW1lbnRz
IHRoYXQgbWF5IGJlIG1peGVkIGluCi0gICBhbmQgY2hpbGRyZW4gcG9pbnQgdG8gYW4gYXJyYXkg
b2YgWE1MX0NvbnRlbnQgY2VsbHMgdGhhdCB3aWxsIGJlCi0gICBhbGwgb2YgWE1MX0NUWVBFX05B
TUUgdHlwZSB3aXRoIG5vIHF1YW50aWZpY2F0aW9uLgotCi0gICBJZiB0eXBlID09IFhNTF9DVFlQ
RV9OQU1FLCB0aGVuIHRoZSBuYW1lIHBvaW50cyB0byB0aGUgbmFtZSwgYW5kCi0gICB0aGUgbnVt
Y2hpbGRyZW4gZmllbGQgd2lsbCBiZSB6ZXJvIGFuZCBjaGlsZHJlbiB3aWxsIGJlIE5VTEwuIFRo
ZQotICAgcXVhbnQgZmllbGRzIGluZGljYXRlcyBhbnkgcXVhbnRpZmllcnMgcGxhY2VkIG9uIHRo
ZSBuYW1lLgotCi0gICBDSE9JQ0UgYW5kIFNFUSB3aWxsIGhhdmUgbmFtZSBOVUxMLCB0aGUgbnVt
YmVyIG9mIGNoaWxkcmVuIGluCi0gICBudW1jaGlsZHJlbiBhbmQgY2hpbGRyZW4gd2lsbCBwb2lu
dCwgcmVjdXJzaXZlbHksIHRvIGFuIGFycmF5Ci0gICBvZiBYTUxfQ29udGVudCBjZWxscy4KLQot
ICAgVGhlIEVNUFRZLCBBTlksIGFuZCBNSVhFRCB0eXBlcyB3aWxsIG9ubHkgb2NjdXIgYXQgdG9w
IGxldmVsLgotKi8KLQotdHlwZWRlZiBzdHJ1Y3QgWE1MX2NwIFhNTF9Db250ZW50OwotCi1zdHJ1
Y3QgWE1MX2NwIHsKLSAgZW51bSBYTUxfQ29udGVudF9UeXBlICAgICAgICAgdHlwZTsKLSAgZW51
bSBYTUxfQ29udGVudF9RdWFudCAgICAgICAgcXVhbnQ7Ci0gIFhNTF9DaGFyICogICAgICAgICAg
ICAgICAgICAgIG5hbWU7Ci0gIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgIG51bWNoaWxk
cmVuOwotICBYTUxfQ29udGVudCAqICAgICAgICAgICAgICAgICBjaGlsZHJlbjsKLX07Ci0KLQot
LyogVGhpcyBpcyBjYWxsZWQgZm9yIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24uIFNlZSBhYm92ZSBm
b3IKLSAgIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlbCBhcmd1bWVudC4gSXQncyB0aGUgY2FsbGVy
J3MgcmVzcG9uc2liaWxpdHkKLSAgIHRvIGZyZWUgbW9kZWwgd2hlbiBmaW5pc2hlZCB3aXRoIGl0
LgotKi8KLXR5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX0VsZW1lbnREZWNsSGFuZGxlcikgKHZv
aWQgKnVzZXJEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYTUxfQ29udGVudCAqbW9kZWwpOwotCi1YTUxQQVJTRUFQSSh2
b2lkKQotWE1MX1NldEVsZW1lbnREZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX0VsZW1lbnREZWNsSGFuZGxlciBlbGRlY2wpOwotCi0v
KiBUaGUgQXR0bGlzdCBkZWNsYXJhdGlvbiBoYW5kbGVyIGlzIGNhbGxlZCBmb3IgKmVhY2gqIGF0
dHJpYnV0ZS4gU28KLSAgIGEgc2luZ2xlIEF0dGxpc3QgZGVjbGFyYXRpb24gd2l0aCBtdWx0aXBs
ZSBhdHRyaWJ1dGVzIGRlY2xhcmVkIHdpbGwKLSAgIGdlbmVyYXRlIG11bHRpcGxlIGNhbGxzIHRv
IHRoaXMgaGFuZGxlci4gVGhlICJkZWZhdWx0IiBwYXJhbWV0ZXIKLSAgIG1heSBiZSBOVUxMIGlu
IHRoZSBjYXNlIG9mIHRoZSAiI0lNUExJRUQiIG9yICIjUkVRVUlSRUQiCi0gICBrZXl3b3JkLiBU
aGUgImlzcmVxdWlyZWQiIHBhcmFtZXRlciB3aWxsIGJlIHRydWUgYW5kIHRoZSBkZWZhdWx0Ci0g
ICB2YWx1ZSB3aWxsIGJlIE5VTEwgaW4gdGhlIGNhc2Ugb2YgIiNSRVFVSVJFRCIuIElmICJpc3Jl
cXVpcmVkIiBpcwotICAgdHJ1ZSBhbmQgZGVmYXVsdCBpcyBub24tTlVMTCwgdGhlbiB0aGlzIGlz
IGEgIiNGSVhFRCIgZGVmYXVsdC4KLSovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9BdHRs
aXN0RGVjbEhhbmRsZXIpICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgICAgICAgICAgICAqdXNlckRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYTUxfQ2hhciAgKmVsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICAqYXR0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICAqYXR0X3R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAgKmRmbHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgIGlzcmVxdWlyZWQpOwot
Ci1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldEF0dGxpc3REZWNsSGFuZGxlcihYTUxfUGFyc2Vy
IHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0F0dGxpc3REZWNsSGFuZGxl
ciBhdHRkZWNsKTsKLQotLyogVGhlIFhNTCBkZWNsYXJhdGlvbiBoYW5kbGVyIGlzIGNhbGxlZCBm
b3IgKmJvdGgqIFhNTCBkZWNsYXJhdGlvbnMKLSAgIGFuZCB0ZXh0IGRlY2xhcmF0aW9ucy4gVGhl
IHdheSB0byBkaXN0aW5ndWlzaCBpcyB0aGF0IHRoZSB2ZXJzaW9uCi0gICBwYXJhbWV0ZXIgd2ls
bCBiZSBOVUxMIGZvciB0ZXh0IGRlY2xhcmF0aW9ucy4gVGhlIGVuY29kaW5nCi0gICBwYXJhbWV0
ZXIgbWF5IGJlIE5VTEwgZm9yIFhNTCBkZWNsYXJhdGlvbnMuIFRoZSBzdGFuZGFsb25lCi0gICBw
YXJhbWV0ZXIgd2lsbCBiZSAtMSwgMCwgb3IgMSBpbmRpY2F0aW5nIHJlc3BlY3RpdmVseSB0aGF0
IHRoZXJlCi0gICB3YXMgbm8gc3RhbmRhbG9uZSBwYXJhbWV0ZXIgaW4gdGhlIGRlY2xhcmF0aW9u
LCB0aGF0IGl0IHdhcyBnaXZlbgotICAgYXMgbm8sIG9yIHRoYXQgaXQgd2FzIGdpdmVuIGFzIHll
cy4KLSovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9YbWxEZWNsSGFuZGxlcikgKHZvaWQg
ICAgICAgICAgICp1c2VyRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHN0YW5k
YWxvbmUpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldFhtbERlY2xIYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9YbWxEZWNsSGFuZGxlciB4
bWxkZWNsKTsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHZvaWQgKigqbWFsbG9jX2Zjbikoc2l6
ZV90IHNpemUpOwotICB2b2lkICooKnJlYWxsb2NfZmNuKSh2b2lkICpwdHIsIHNpemVfdCBzaXpl
KTsKLSAgdm9pZCAoKmZyZWVfZmNuKSh2b2lkICpwdHIpOwotfSBYTUxfTWVtb3J5X0hhbmRsaW5n
X1N1aXRlOwotCi0vKiBDb25zdHJ1Y3RzIGEgbmV3IHBhcnNlcjsgZW5jb2RpbmcgaXMgdGhlIGVu
Y29kaW5nIHNwZWNpZmllZCBieSB0aGUKLSAgIGV4dGVybmFsIHByb3RvY29sIG9yIE5VTEwgaWYg
dGhlcmUgaXMgbm9uZSBzcGVjaWZpZWQuCi0qLwotWE1MUEFSU0VBUEkoWE1MX1BhcnNlcikKLVhN
TF9QYXJzZXJDcmVhdGUoY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nKTsKLQotLyogQ29uc3RydWN0
cyBhIG5ldyBwYXJzZXIgYW5kIG5hbWVzcGFjZSBwcm9jZXNzb3IuICBFbGVtZW50IHR5cGUKLSAg
IG5hbWVzIGFuZCBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBiZWxvbmcgdG8gYSBuYW1lc3BhY2Ugd2ls
bCBiZQotICAgZXhwYW5kZWQ7IHVucHJlZml4ZWQgYXR0cmlidXRlIG5hbWVzIGFyZSBuZXZlciBl
eHBhbmRlZDsgdW5wcmVmaXhlZAotICAgZWxlbWVudCB0eXBlIG5hbWVzIGFyZSBleHBhbmRlZCBv
bmx5IGlmIHRoZXJlIGlzIGEgZGVmYXVsdAotICAgbmFtZXNwYWNlLiBUaGUgZXhwYW5kZWQgbmFt
ZSBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlCi0gICBVUkksIHRoZSBuYW1l
c3BhY2Ugc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZQotICAg
bmFtZS4gIElmIHRoZSBuYW1lc3BhY2Ugc2VwYXJhdG9yIGlzICdcMCcgdGhlbiB0aGUgbmFtZXNw
YWNlIFVSSQotICAgYW5kIHRoZSBsb2NhbCBwYXJ0IHdpbGwgYmUgY29uY2F0ZW5hdGVkIHdpdGhv
dXQgYW55IHNlcGFyYXRvci4KLSAgIEl0IGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IgdG8gdXNlIHRo
ZSBzZXBhcmF0b3IgJ1wwJyB3aXRoIG5hbWVzcGFjZQotICAgdHJpcGxldHMgKHNlZSBYTUxfU2V0
UmV0dXJuTlNUcmlwbGV0KS4KLSovCi1YTUxQQVJTRUFQSShYTUxfUGFyc2VyKQotWE1MX1BhcnNl
ckNyZWF0ZU5TKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZywgWE1MX0NoYXIgbmFtZXNwYWNlU2Vw
YXJhdG9yKTsKLQotCi0vKiBDb25zdHJ1Y3RzIGEgbmV3IHBhcnNlciB1c2luZyB0aGUgbWVtb3J5
IG1hbmFnZW1lbnQgc3VpdGUgcmVmZXJyZWQgdG8KLSAgIGJ5IG1lbXN1aXRlLiBJZiBtZW1zdWl0
ZSBpcyBOVUxMLCB0aGVuIHVzZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBtZW1vcnkKLSAgIHN1aXRl
LiBJZiBuYW1lc3BhY2VTZXBhcmF0b3IgaXMgbm9uLU5VTEwgaXQgY3JlYXRlcyBhIHBhcnNlciB3
aXRoCi0gICBuYW1lc3BhY2UgcHJvY2Vzc2luZyBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZSBjaGFy
YWN0ZXIgcG9pbnRlZCBhdAotICAgd2lsbCBzZXJ2ZSBhcyB0aGUgbmFtZXNwYWNlIHNlcGFyYXRv
ci4KLQotICAgQWxsIGZ1cnRoZXIgbWVtb3J5IG9wZXJhdGlvbnMgdXNlZCBmb3IgdGhlIGNyZWF0
ZWQgcGFyc2VyIHdpbGwgY29tZSBmcm9tCi0gICB0aGUgZ2l2ZW4gc3VpdGUuCi0qLwotWE1MUEFS
U0VBUEkoWE1MX1BhcnNlcikKLVhNTF9QYXJzZXJDcmVhdGVfTU0oY29uc3QgWE1MX0NoYXIgKmVu
Y29kaW5nLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1
aXRlICptZW1zdWl0ZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWVz
cGFjZVNlcGFyYXRvcik7Ci0KLS8qIFByZXBhcmUgYSBwYXJzZXIgb2JqZWN0IHRvIGJlIHJlLXVz
ZWQuICBUaGlzIGlzIHBhcnRpY3VsYXJseQotICAgdmFsdWFibGUgd2hlbiBtZW1vcnkgYWxsb2Nh
dGlvbiBvdmVyaGVhZCBpcyBkaXNwcm9wb3J0aW9uYXRseSBoaWdoLAotICAgc3VjaCBhcyB3aGVu
IGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIGRvY3VtbmVudHMgbmVlZCB0byBiZSBwYXJzZWQuCi0g
ICBBbGwgaGFuZGxlcnMgYXJlIGNsZWFyZWQgZnJvbSB0aGUgcGFyc2VyLCBleGNlcHQgZm9yIHRo
ZQotICAgdW5rbm93bkVuY29kaW5nSGFuZGxlci4gVGhlIHBhcnNlcidzIGV4dGVybmFsIHN0YXRl
IGlzIHJlLWluaXRpYWxpemVkCi0gICBleGNlcHQgZm9yIHRoZSB2YWx1ZXMgb2YgbnMgYW5kIG5z
X3RyaXBsZXRzLgotCi0gICBBZGRlZCBpbiBFeHBhdCAxLjk1LjMuCi0qLwotWE1MUEFSU0VBUEko
WE1MX0Jvb2wpCi1YTUxfUGFyc2VyUmVzZXQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9D
aGFyICplbmNvZGluZyk7Ci0KLS8qIGF0dHMgaXMgYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlycywg
dGVybWluYXRlZCBieSAwOwotICAgbmFtZXMgYW5kIHZhbHVlcyBhcmUgMCB0ZXJtaW5hdGVkLgot
Ki8KLXR5cGVkZWYgdm9pZCAoWE1MQ0FMTCAqWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIpICh2b2lk
ICp1c2VyRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqKmF0dHMpOwotCi10eXBlZGVmIHZv
aWQgKFhNTENBTEwgKlhNTF9FbmRFbGVtZW50SGFuZGxlcikgKHZvaWQgKnVzZXJEYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hh
ciAqbmFtZSk7Ci0KLQotLyogcyBpcyBub3QgMCB0ZXJtaW5hdGVkLiAqLwotdHlwZWRlZiB2b2lk
IChYTUxDQUxMICpYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1M
X0NoYXIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsZW4pOwotCi0vKiB0YXJnZXQgYW5kIGRhdGEgYXJlIDAgdGVybWluYXRlZCAqLwot
dHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcikg
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
dXNlckRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYTUxfQ2hhciAqdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmRhdGEpOwotCi0vKiBkYXRhIGlzIDAg
dGVybWluYXRlZCAqLwotdHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfQ29tbWVudEhhbmRsZXIp
ICh2b2lkICp1c2VyRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWE1MX0NoYXIgKmRhdGEpOwotCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhN
TF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSk7Ci10eXBlZGVmIHZv
aWQgKFhNTENBTEwgKlhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyKSAodm9pZCAqdXNlckRhdGEp
OwotCi0vKiBUaGlzIGlzIGNhbGxlZCBmb3IgYW55IGNoYXJhY3RlcnMgaW4gdGhlIFhNTCBkb2N1
bWVudCBmb3Igd2hpY2gKLSAgIHRoZXJlIGlzIG5vIGFwcGxpY2FibGUgaGFuZGxlci4gIFRoaXMg
aW5jbHVkZXMgYm90aCBjaGFyYWN0ZXJzIHRoYXQKLSAgIGFyZSBwYXJ0IG9mIG1hcmt1cCB3aGlj
aCBpcyBvZiBhIGtpbmQgdGhhdCBpcyBub3QgcmVwb3J0ZWQKLSAgIChjb21tZW50cywgbWFya3Vw
IGRlY2xhcmF0aW9ucyksIG9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgcGFydCBvZiBhCi0gICBjb25z
dHJ1Y3Qgd2hpY2ggY291bGQgYmUgcmVwb3J0ZWQgYnV0IGZvciB3aGljaCBubyBoYW5kbGVyIGhh
cyBiZWVuCi0gICBzdXBwbGllZC4gVGhlIGNoYXJhY3RlcnMgYXJlIHBhc3NlZCBleGFjdGx5IGFz
IHRoZXkgd2VyZSBpbiB0aGUgWE1MCi0gICBkb2N1bWVudCBleGNlcHQgdGhhdCB0aGV5IHdpbGwg
YmUgZW5jb2RlZCBpbiBVVEYtOCBvciBVVEYtMTYuCi0gICBMaW5lIGJvdW5kYXJpZXMgYXJlIG5v
dCBub3JtYWxpemVkLiBOb3RlIHRoYXQgYSBieXRlIG9yZGVyIG1hcmsKLSAgIGNoYXJhY3RlciBp
cyBub3QgcGFzc2VkIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuIFRoZXJlIGFyZSBubwotICAgZ3Vh
cmFudGVlcyBhYm91dCBob3cgY2hhcmFjdGVycyBhcmUgZGl2aWRlZCBiZXR3ZWVuIGNhbGxzIHRv
IHRoZQotICAgZGVmYXVsdCBoYW5kbGVyOiBmb3IgZXhhbXBsZSwgYSBjb21tZW50IG1pZ2h0IGJl
IHNwbGl0IGJldHdlZW4KLSAgIG11bHRpcGxlIGNhbGxzLgotKi8KLXR5cGVkZWYgdm9pZCAoWE1M
Q0FMTCAqWE1MX0RlZmF1bHRIYW5kbGVyKSAodm9pZCAqdXNlckRhdGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKTsKLQotLyogVGhp
cyBpcyBjYWxsZWQgZm9yIHRoZSBzdGFydCBvZiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgYmVm
b3JlCi0gICBhbnkgRFREIG9yIGludGVybmFsIHN1YnNldCBpcyBwYXJzZWQuCi0qLwotdHlwZWRl
ZiB2b2lkIChYTUxDQUxMICpYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpICgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpk
b2N0eXBlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWE1MX0NoYXIgKnN5c2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHViaWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNfaW50ZXJuYWxfc3Vic2V0KTsKLQotLyogVGhp
cyBpcyBjYWxsZWQgZm9yIHRoZSBzdGFydCBvZiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiB3aGVu
IHRoZQotICAgY2xvc2luZyA+IGlzIGVuY291bnRlcmVkLCBidXQgYWZ0ZXIgcHJvY2Vzc2luZyBh
bnkgZXh0ZXJuYWwKLSAgIHN1YnNldC4KLSovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9F
bmREb2N0eXBlRGVjbEhhbmRsZXIpKHZvaWQgKnVzZXJEYXRhKTsKLQotLyogVGhpcyBpcyBjYWxs
ZWQgZm9yIGVudGl0eSBkZWNsYXJhdGlvbnMuIFRoZSBpc19wYXJhbWV0ZXJfZW50aXR5Ci0gICBh
cmd1bWVudCB3aWxsIGJlIG5vbi16ZXJvIGlmIHRoZSBlbnRpdHkgaXMgYSBwYXJhbWV0ZXIgZW50
aXR5LCB6ZXJvCi0gICBvdGhlcndpc2UuCi0KLSAgIEZvciBpbnRlcm5hbCBlbnRpdGllcyAoPCFF
TlRJVFkgZm9vICJiYXIiPiksIHZhbHVlIHdpbGwKLSAgIGJlIG5vbi1OVUxMIGFuZCBzeXN0ZW1J
ZCwgcHVibGljSUQsIGFuZCBub3RhdGlvbk5hbWUgd2lsbCBiZSBOVUxMLgotICAgVGhlIHZhbHVl
IHN0cmluZyBpcyBOT1QgbnVsLXRlcm1pbmF0ZWQ7IHRoZSBsZW5ndGggaXMgcHJvdmlkZWQgaW4K
LSAgIHRoZSB2YWx1ZV9sZW5ndGggYXJndW1lbnQuIFNpbmNlIGl0IGlzIGxlZ2FsIHRvIGhhdmUg
emVyby1sZW5ndGgKLSAgIHZhbHVlcywgZG8gbm90IHVzZSB0aGlzIGFyZ3VtZW50IHRvIHRlc3Qg
Zm9yIGludGVybmFsIGVudGl0aWVzLgotCi0gICBGb3IgZXh0ZXJuYWwgZW50aXRpZXMsIHZhbHVl
IHdpbGwgYmUgTlVMTCBhbmQgc3lzdGVtSWQgd2lsbCBiZQotICAgbm9uLU5VTEwuIFRoZSBwdWJs
aWNJZCBhcmd1bWVudCB3aWxsIGJlIE5VTEwgdW5sZXNzIGEgcHVibGljCi0gICBpZGVudGlmaWVy
IHdhcyBwcm92aWRlZC4gVGhlIG5vdGF0aW9uTmFtZSBhcmd1bWVudCB3aWxsIGhhdmUgYQotICAg
bm9uLU5VTEwgdmFsdWUgb25seSBmb3IgdW5wYXJzZWQgZW50aXR5IGRlY2xhcmF0aW9ucy4KLQot
ICAgTm90ZSB0aGF0IGlzX3BhcmFtZXRlcl9lbnRpdHkgY2FuJ3QgYmUgY2hhbmdlZCB0byBYTUxf
Qm9vbCwgc2luY2UKLSAgIHRoYXQgd291bGQgYnJlYWsgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0q
LwotdHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxfRW50aXR5RGVjbEhhbmRsZXIpICgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmVudGl0eU5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaXNfcGFyYW1ldGVyX2VudGl0eSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB2YWx1ZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYTUxfQ2hhciAqYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICpzeXN0ZW1JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICpwdWJsaWNJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICpub3RhdGlvbk5hbWUpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1M
X1NldEVudGl0eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIFhNTF9FbnRpdHlEZWNsSGFuZGxlciBoYW5kbGVyKTsKLQotLyogT0JTT0xFVEUg
LS0gT0JTT0xFVEUgLS0gT0JTT0xFVEUKLSAgIFRoaXMgaGFuZGxlciBoYXMgYmVlbiBzdXBlcmNl
ZGVkIGJ5IHRoZSBFbnRpdHlEZWNsSGFuZGxlciBhYm92ZS4KLSAgIEl0IGlzIHByb3ZpZGVkIGhl
cmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0KLSAgIFRoaXMgaXMgY2FsbGVkIGZvciBh
IGRlY2xhcmF0aW9uIG9mIGFuIHVucGFyc2VkIChOREFUQSkgZW50aXR5LgotICAgVGhlIGJhc2Ug
YXJndW1lbnQgaXMgd2hhdGV2ZXIgd2FzIHNldCBieSBYTUxfU2V0QmFzZS4gVGhlCi0gICBlbnRp
dHlOYW1lLCBzeXN0ZW1JZCBhbmQgbm90YXRpb25OYW1lIGFyZ3VtZW50cyB3aWxsIG5ldmVyIGJl
Ci0gICBOVUxMLiBUaGUgb3RoZXIgYXJndW1lbnRzIG1heSBiZS4KLSovCi10eXBlZGVmIHZvaWQg
KFhNTENBTEwgKlhNTF9VbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKSAoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICplbnRpdHlOYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVibGlj
SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAq
bm90YXRpb25OYW1lKTsKLQotLyogVGhpcyBpcyBjYWxsZWQgZm9yIGEgZGVjbGFyYXRpb24gb2Yg
bm90YXRpb24uICBUaGUgYmFzZSBhcmd1bWVudCBpcwotICAgd2hhdGV2ZXIgd2FzIHNldCBieSBY
TUxfU2V0QmFzZS4gVGhlIG5vdGF0aW9uTmFtZSB3aWxsIG5ldmVyIGJlCi0gICBOVUxMLiAgVGhl
IG90aGVyIGFyZ3VtZW50cyBjYW4gYmUuCi0qLwotdHlwZWRlZiB2b2lkIChYTUxDQUxMICpYTUxf
Tm90YXRpb25EZWNsSGFuZGxlcikgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqdXNlckRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYTUxfQ2hhciAqbm90YXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVibGljSWQpOwotCi0vKiBXaGVuIG5h
bWVzcGFjZSBwcm9jZXNzaW5nIGlzIGVuYWJsZWQsIHRoZXNlIGFyZSBjYWxsZWQgb25jZSBmb3IK
LSAgIGVhY2ggbmFtZXNwYWNlIGRlY2xhcmF0aW9uLiBUaGUgY2FsbCB0byB0aGUgc3RhcnQgYW5k
IGVuZCBlbGVtZW50Ci0gICBoYW5kbGVycyBvY2N1ciBiZXR3ZWVuIHRoZSBjYWxscyB0byB0aGUg
c3RhcnQgYW5kIGVuZCBuYW1lc3BhY2UKLSAgIGRlY2xhcmF0aW9uIGhhbmRsZXJzLiBGb3IgYW4g
eG1sbnMgYXR0cmlidXRlLCBwcmVmaXggd2lsbCBiZQotICAgTlVMTC4gIEZvciBhbiB4bWxucz0i
IiBhdHRyaWJ1dGUsIHVyaSB3aWxsIGJlIE5VTEwuCi0qLwotdHlwZWRlZiB2b2lkIChYTUxDQUxM
ICpYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnVyaSk7Ci0KLXR5cGVkZWYgdm9pZCAoWE1M
Q0FMTCAqWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSAoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpwcmVmaXgpOwotCi0vKiBUaGlzIGlzIGNhbGxl
ZCBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUsIHRoYXQgaXMsIGl0IGhhcyBhbgot
ICAgZXh0ZXJuYWwgc3Vic2V0IG9yIGEgcmVmZXJlbmNlIHRvIGEgcGFyYW1ldGVyIGVudGl0eSwg
YnV0IGRvZXMgbm90Ci0gICBoYXZlIHN0YW5kYWxvbmU9InllcyIuIElmIHRoaXMgaGFuZGxlciBy
ZXR1cm5zIFhNTF9TVEFUVVNfRVJST1IsCi0gICB0aGVuIHByb2Nlc3Npbmcgd2lsbCBub3QgY29u
dGludWUsIGFuZCB0aGUgcGFyc2VyIHdpbGwgcmV0dXJuIGEKLSAgIFhNTF9FUlJPUl9OT1RfU1RB
TkRBTE9ORSBlcnJvci4KLSAgIElmIHBhcmFtZXRlciBlbnRpdHkgcGFyc2luZyBpcyBlbmFibGVk
LCB0aGVuIGluIGFkZGl0aW9uIHRvIHRoZQotICAgY29uZGl0aW9ucyBhYm92ZSB0aGlzIGhhbmRs
ZXIgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgcmVmZXJlbmNlZAotICAgZW50aXR5IHdhcyBh
Y3R1YWxseSByZWFkLgotKi8KLXR5cGVkZWYgaW50IChYTUxDQUxMICpYTUxfTm90U3RhbmRhbG9u
ZUhhbmRsZXIpICh2b2lkICp1c2VyRGF0YSk7Ci0KLS8qIFRoaXMgaXMgY2FsbGVkIGZvciBhIHJl
ZmVyZW5jZSB0byBhbiBleHRlcm5hbCBwYXJzZWQgZ2VuZXJhbAotICAgZW50aXR5LiAgVGhlIHJl
ZmVyZW5jZWQgZW50aXR5IGlzIG5vdCBhdXRvbWF0aWNhbGx5IHBhcnNlZC4gIFRoZQotICAgYXBw
bGljYXRpb24gY2FuIHBhcnNlIGl0IGltbWVkaWF0ZWx5IG9yIGxhdGVyIHVzaW5nCi0gICBYTUxf
RXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUuCi0KLSAgIFRoZSBwYXJzZXIgYXJndW1lbnQgaXMg
dGhlIHBhcnNlciBwYXJzaW5nIHRoZSBlbnRpdHkgY29udGFpbmluZyB0aGUKLSAgIHJlZmVyZW5j
ZTsgaXQgY2FuIGJlIHBhc3NlZCBhcyB0aGUgcGFyc2VyIGFyZ3VtZW50IHRvCi0gICBYTUxfRXh0
ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUuICBUaGUgc3lzdGVtSWQgYXJndW1lbnQgaXMgdGhlCi0g
ICBzeXN0ZW0gaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gdGhlIGVudGl0eSBkZWNsYXJhdGlv
bjsgaXQgd2lsbAotICAgbm90IGJlIE5VTEwuCi0KLSAgIFRoZSBiYXNlIGFyZ3VtZW50IGlzIHRo
ZSBzeXN0ZW0gaWRlbnRpZmllciB0aGF0IHNob3VsZCBiZSB1c2VkIGFzCi0gICB0aGUgYmFzZSBm
b3IgcmVzb2x2aW5nIHN5c3RlbUlkIGlmIHN5c3RlbUlkIHdhcyByZWxhdGl2ZTsgdGhpcyBpcwot
ICAgc2V0IGJ5IFhNTF9TZXRCYXNlOyBpdCBtYXkgYmUgTlVMTC4KLQotICAgVGhlIHB1YmxpY0lk
IGFyZ3VtZW50IGlzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gdGhlCi0g
ICBlbnRpdHkgZGVjbGFyYXRpb24sIG9yIE5VTEwgaWYgbm9uZSB3YXMgc3BlY2lmaWVkOyB0aGUg
d2hpdGVzcGFjZQotICAgaW4gdGhlIHB1YmxpYyBpZGVudGlmaWVyIHdpbGwgaGF2ZSBiZWVuIG5v
cm1hbGl6ZWQgYXMgcmVxdWlyZWQgYnkKLSAgIHRoZSBYTUwgc3BlYy4KLQotICAgVGhlIGNvbnRl
eHQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBwYXJzaW5nIGNvbnRleHQgaW4gdGhlIGZvcm1hdAot
ICAgZXhwZWN0ZWQgYnkgdGhlIGNvbnRleHQgYXJndW1lbnQgdG8gWE1MX0V4dGVybmFsRW50aXR5
UGFyc2VyQ3JlYXRlOwotICAgY29udGV4dCBpcyB2YWxpZCBvbmx5IHVudGlsIHRoZSBoYW5kbGVy
IHJldHVybnMsIHNvIGlmIHRoZQotICAgcmVmZXJlbmNlZCBlbnRpdHkgaXMgdG8gYmUgcGFyc2Vk
IGxhdGVyLCBpdCBtdXN0IGJlIGNvcGllZC4KLSAgIGNvbnRleHQgaXMgTlVMTCBvbmx5IHdoZW4g
dGhlIGVudGl0eSBpcyBhIHBhcmFtZXRlciBlbnRpdHkuCi0KLSAgIFRoZSBoYW5kbGVyIHNob3Vs
ZCByZXR1cm4gWE1MX1NUQVRVU19FUlJPUiBpZiBwcm9jZXNzaW5nIHNob3VsZCBub3QKLSAgIGNv
bnRpbnVlIGJlY2F1c2Ugb2YgYSBmYXRhbCBlcnJvciBpbiB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4
dGVybmFsCi0gICBlbnRpdHkuICBJbiB0aGlzIGNhc2UgdGhlIGNhbGxpbmcgcGFyc2VyIHdpbGwg
cmV0dXJuIGFuCi0gICBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HIGVycm9yLgot
Ci0gICBOb3RlIHRoYXQgdW5saWtlIG90aGVyIGhhbmRsZXJzIHRoZSBmaXJzdCBhcmd1bWVudCBp
cyB0aGUgcGFyc2VyLAotICAgbm90IHVzZXJEYXRhLgotKi8KLXR5cGVkZWYgaW50IChYTUxDQUxM
ICpYTUxfRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSAoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKmJhc2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqc3lzdGVtSWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHVibGljSWQpOwotCi0v
KiBUaGlzIGlzIGNhbGxlZCBpbiB0d28gc2l0dWF0aW9uczoKLSAgIDEpIEFuIGVudGl0eSByZWZl
cmVuY2UgaXMgZW5jb3VudGVyZWQgZm9yIHdoaWNoIG5vIGRlY2xhcmF0aW9uCi0gICAgICBoYXMg
YmVlbiByZWFkICphbmQqIHRoaXMgaXMgbm90IGFuIGVycm9yLgotICAgMikgQW4gaW50ZXJuYWwg
ZW50aXR5IHJlZmVyZW5jZSBpcyByZWFkLCBidXQgbm90IGV4cGFuZGVkLCBiZWNhdXNlCi0gICAg
ICBYTUxfU2V0RGVmYXVsdEhhbmRsZXIgaGFzIGJlZW4gY2FsbGVkLgotICAgTm90ZTogc2tpcHBl
ZCBwYXJhbWV0ZXIgZW50aXRpZXMgaW4gZGVjbGFyYXRpb25zIGFuZCBza2lwcGVkIGdlbmVyYWwK
LSAgICAgICAgIGVudGl0aWVzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgY2Fubm90IGJlIHJlcG9ydGVk
LCBiZWNhdXNlCi0gICAgICAgICB0aGUgZXZlbnQgd291bGQgYmUgb3V0IG9mIHN5bmMgd2l0aCB0
aGUgcmVwb3J0aW5nIG9mIHRoZQotICAgICAgICAgZGVjbGFyYXRpb25zIG9yIGF0dHJpYnV0ZSB2
YWx1ZXMKLSovCi10eXBlZGVmIHZvaWQgKFhNTENBTEwgKlhNTF9Ta2lwcGVkRW50aXR5SGFuZGxl
cikgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqZW50
aXR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc19wYXJh
bWV0ZXJfZW50aXR5KTsKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgZmlsbGVkIGluIGJ5IHRoZSBY
TUxfVW5rbm93bkVuY29kaW5nSGFuZGxlciB0bwotICAgcHJvdmlkZSBpbmZvcm1hdGlvbiB0byB0
aGUgcGFyc2VyIGFib3V0IGVuY29kaW5ncyB0aGF0IGFyZSB1bmtub3duCi0gICB0byB0aGUgcGFy
c2VyLgotCi0gICBUaGUgbWFwW2JdIG1lbWJlciBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCBieXRl
IHNlcXVlbmNlcyB3aG9zZQotICAgZmlyc3QgYnl0ZSBpcyBiLgotCi0gICBJZiBtYXBbYl0gaXMg
YyB3aGVyZSBjIGlzID49IDAsIHRoZW4gYiBieSBpdHNlbGYgZW5jb2RlcyB0aGUKLSAgIFVuaWNv
ZGUgc2NhbGFyIHZhbHVlIGMuCi0KLSAgIElmIG1hcFtiXSBpcyAtMSwgdGhlbiB0aGUgYnl0ZSBz
ZXF1ZW5jZSBpcyBtYWxmb3JtZWQuCi0KLSAgIElmIG1hcFtiXSBpcyAtbiwgd2hlcmUgbiA+PSAy
LCB0aGVuIGIgaXMgdGhlIGZpcnN0IGJ5dGUgb2YgYW4KLSAgIG4tYnl0ZSBzZXF1ZW5jZSB0aGF0
IGVuY29kZXMgYSBzaW5nbGUgVW5pY29kZSBzY2FsYXIgdmFsdWUuCi0KLSAgIFRoZSBkYXRhIG1l
bWJlciB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNvbnZlcnQK
LSAgIGZ1bmN0aW9uLgotCi0gICBUaGUgY29udmVydCBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZl
cnQgbXVsdGlieXRlIHNlcXVlbmNlczsgcyB3aWxsCi0gICBwb2ludCB0byBhIG4tYnl0ZSBzZXF1
ZW5jZSB3aGVyZSBtYXBbKHVuc2lnbmVkIGNoYXIpKnNdID09IC1uLiAgVGhlCi0gICBjb252ZXJ0
IGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZSBVbmljb2RlIHNjYWxhciB2YWx1ZSByZXByZXNlbnRl
ZAotICAgYnkgdGhpcyBieXRlIHNlcXVlbmNlIG9yIC0xIGlmIHRoZSBieXRlIHNlcXVlbmNlIGlz
IG1hbGZvcm1lZC4KLQotICAgVGhlIGNvbnZlcnQgZnVuY3Rpb24gbWF5IGJlIE5VTEwgaWYgdGhl
IGVuY29kaW5nIGlzIGEgc2luZ2xlLWJ5dGUKLSAgIGVuY29kaW5nLCB0aGF0IGlzIGlmIG1hcFti
XSA+PSAtMSBmb3IgYWxsIGJ5dGVzIGIuCi0KLSAgIFdoZW4gdGhlIHBhcnNlciBpcyBmaW5pc2hl
ZCB3aXRoIHRoZSBlbmNvZGluZywgdGhlbiBpZiByZWxlYXNlIGlzCi0gICBub3QgTlVMTCwgaXQg
d2lsbCBjYWxsIHJlbGVhc2UgcGFzc2luZyBpdCB0aGUgZGF0YSBtZW1iZXI7IG9uY2UKLSAgIHJl
bGVhc2UgaGFzIGJlZW4gY2FsbGVkLCB0aGUgY29udmVydCBmdW5jdGlvbiB3aWxsIG5vdCBiZSBj
YWxsZWQKLSAgIGFnYWluLgotCi0gICBFeHBhdCBwbGFjZXMgY2VydGFpbiByZXN0cmljdGlvbnMg
b24gdGhlIGVuY29kaW5ncyB0aGF0IGFyZSBzdXBwb3J0ZWQKLSAgIHVzaW5nIHRoaXMgbWVjaGFu
aXNtLgotCi0gICAxLiBFdmVyeSBBU0NJSSBjaGFyYWN0ZXIgdGhhdCBjYW4gYXBwZWFyIGluIGEg
d2VsbC1mb3JtZWQgWE1MIGRvY3VtZW50LAotICAgICAgb3RoZXIgdGhhbiB0aGUgY2hhcmFjdGVy
cwotCi0gICAgICAkQFxeYHt9fgotCi0gICAgICBtdXN0IGJlIHJlcHJlc2VudGVkIGJ5IGEgc2lu
Z2xlIGJ5dGUsIGFuZCB0aGF0IGJ5dGUgbXVzdCBiZSB0aGUKLSAgICAgIHNhbWUgYnl0ZSB0aGF0
IHJlcHJlc2VudHMgdGhhdCBjaGFyYWN0ZXIgaW4gQVNDSUkuCi0KLSAgIDIuIE5vIGNoYXJhY3Rl
ciBtYXkgcmVxdWlyZSBtb3JlIHRoYW4gNCBieXRlcyB0byBlbmNvZGUuCi0KLSAgIDMuIEFsbCBj
aGFyYWN0ZXJzIGVuY29kZWQgbXVzdCBoYXZlIFVuaWNvZGUgc2NhbGFyIHZhbHVlcyA8PQotICAg
ICAgMHhGRkZGLCAoaS5lLiwgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGVuY29kZWQgYnkgc3Vy
cm9nYXRlcyBpbgotICAgICAgVVRGLTE2IGFyZSAgbm90IGFsbG93ZWQpLiAgTm90ZSB0aGF0IHRo
aXMgcmVzdHJpY3Rpb24gZG9lc24ndAotICAgICAgYXBwbHkgdG8gdGhlIGJ1aWx0LWluIHN1cHBv
cnQgZm9yIFVURi04IGFuZCBVVEYtMTYuCi0KLSAgIDQuIE5vIFVuaWNvZGUgY2hhcmFjdGVyIG1h
eSBiZSBlbmNvZGVkIGJ5IG1vcmUgdGhhbiBvbmUgZGlzdGluY3QKLSAgICAgIHNlcXVlbmNlIG9m
IGJ5dGVzLgotKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50IG1hcFsyNTZdOwotICB2b2lkICpk
YXRhOwotICBpbnQgKFhNTENBTEwgKmNvbnZlcnQpKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKnMp
OwotICB2b2lkIChYTUxDQUxMICpyZWxlYXNlKSh2b2lkICpkYXRhKTsKLX0gWE1MX0VuY29kaW5n
OwotCi0vKiBUaGlzIGlzIGNhbGxlZCBmb3IgYW4gZW5jb2RpbmcgdGhhdCBpcyB1bmtub3duIHRv
IHRoZSBwYXJzZXIuCi0KLSAgIFRoZSBlbmNvZGluZ0hhbmRsZXJEYXRhIGFyZ3VtZW50IGlzIHRo
YXQgd2hpY2ggd2FzIHBhc3NlZCBhcyB0aGUKLSAgIHNlY29uZCBhcmd1bWVudCB0byBYTUxfU2V0
VW5rbm93bkVuY29kaW5nSGFuZGxlci4KLQotICAgVGhlIG5hbWUgYXJndW1lbnQgZ2l2ZXMgdGhl
IG5hbWUgb2YgdGhlIGVuY29kaW5nIGFzIHNwZWNpZmllZCBpbgotICAgdGhlIGVuY29kaW5nIGRl
Y2xhcmF0aW9uLgotCi0gICBJZiB0aGUgY2FsbGJhY2sgY2FuIHByb3ZpZGUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGVuY29kaW5nLCBpdCBtdXN0Ci0gICBmaWxsIGluIHRoZSBYTUxfRW5jb2Rpbmcg
c3RydWN0dXJlLCBhbmQgcmV0dXJuIFhNTF9TVEFUVVNfT0suCi0gICBPdGhlcndpc2UgaXQgbXVz
dCByZXR1cm4gWE1MX1NUQVRVU19FUlJPUi4KLQotICAgSWYgaW5mbyBkb2VzIG5vdCBkZXNjcmli
ZSBhIHN1aXRhYmxlIGVuY29kaW5nLCB0aGVuIHRoZSBwYXJzZXIgd2lsbAotICAgcmV0dXJuIGFu
IFhNTF9VTktOT1dOX0VOQ09ESU5HIGVycm9yLgotKi8KLXR5cGVkZWYgaW50IChYTUxDQUxMICpY
TUxfVW5rbm93bkVuY29kaW5nSGFuZGxlcikgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqZW5jb2RpbmdIYW5kbGVyRGF0YSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWE1MX0VuY29kaW5nICppbmZvKTsKLQotWE1MUEFSU0VBUEkodm9p
ZCkKLVhNTF9TZXRFbGVtZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAg
ICAgICAgICAgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciBzdGFydCwKLSAgICAgICAgICAgICAg
ICAgICAgICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgZW5kKTsKLQotWE1MUEFSU0VBUEkodm9pZCkK
LVhNTF9TZXRTdGFydEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgaGFuZGxlcik7Ci0KLVhN
TFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0RW5kRWxlbWVudEhhbmRsZXIoWE1MX1BhcnNlciBwYXJz
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZEVsZW1lbnRIYW5kbGVyIGhhbmRs
ZXIpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKFhN
TF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DaGFyYWN0
ZXJEYXRhSGFuZGxlciBoYW5kbGVyKTsKLQotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIg
aGFuZGxlcik7Ci1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldENvbW1lbnRIYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9Db21tZW50SGFuZGxlciBo
YW5kbGVyKTsKLQotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRDZGF0YVNlY3Rpb25IYW5kbGVy
KFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0
Q2RhdGFTZWN0aW9uSGFuZGxlciBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFhN
TF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVyIGVuZCk7Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxf
U2V0U3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIHN0YXJ0
KTsKLQotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRFbmRDZGF0YVNlY3Rpb25IYW5kbGVyKFhN
TF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZENk
YXRhU2VjdGlvbkhhbmRsZXIgZW5kKTsKLQotLyogVGhpcyBzZXRzIHRoZSBkZWZhdWx0IGhhbmRs
ZXIgYW5kIGFsc28gaW5oaWJpdHMgZXhwYW5zaW9uIG9mCi0gICBpbnRlcm5hbCBlbnRpdGllcy4g
VGhlc2UgZW50aXR5IHJlZmVyZW5jZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICBkZWZhdWx0
IGhhbmRsZXIsIG9yIHRvIHRoZSBza2lwcGVkIGVudGl0eSBoYW5kbGVyLCBpZiBvbmUgaXMgc2V0
LgotKi8KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0RGVmYXVsdEhhbmRsZXIoWE1MX1BhcnNl
ciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgWE1MX0RlZmF1bHRIYW5kbGVyIGhhbmRs
ZXIpOwotCi0vKiBUaGlzIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgZG9lcyBub3QgaW5o
aWJpdCBleHBhbnNpb24gb2YKLSAgIGludGVybmFsIGVudGl0aWVzLiAgVGhlIGVudGl0eSByZWZl
cmVuY2Ugd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZQotICAgZGVmYXVsdCBoYW5kbGVyLgotKi8K
LVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0RGVmYXVsdEhhbmRsZXJFeHBhbmQoWE1MX1BhcnNl
ciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0RlZmF1bHRIYW5kbGVy
IGhhbmRsZXIpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldERvY3R5cGVEZWNsSGFuZGxl
cihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0
RG9jdHlwZURlY2xIYW5kbGVyIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxf
RW5kRG9jdHlwZURlY2xIYW5kbGVyIGVuZCk7Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0
U3RhcnREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIHN0YXJ0KTsKLQot
WE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRFbmREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNl
ciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmREb2N0eXBlRGVj
bEhhbmRsZXIgZW5kKTsKLQotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRVbnBhcnNlZEVudGl0
eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgaGFuZGxlcik7Ci0KLVhNTFBB
UlNFQVBJKHZvaWQpCi1YTUxfU2V0Tm90YXRpb25EZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIGhh
bmRsZXIpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldE5hbWVzcGFjZURlY2xIYW5kbGVy
KFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFy
dE5hbWVzcGFjZURlY2xIYW5kbGVyIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlciBlbmQpOwotCi1YTUxQQVJTRUFQSSh2b2lkKQot
WE1MX1NldFN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxl
ciBzdGFydCk7Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0RW5kTmFtZXNwYWNlRGVjbEhh
bmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyIGVuZCk7Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1Y
TUxfU2V0Tm90U3RhbmRhbG9uZUhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWE1MX05vdFN0YW5kYWxvbmVIYW5kbGVyIGhhbmRsZXIpOwotCi1Y
TUxQQVJTRUFQSSh2b2lkKQotWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihYTUxfUGFy
c2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0V4dGVybmFs
RW50aXR5UmVmSGFuZGxlciBoYW5kbGVyKTsKLQotLyogSWYgYSBub24tTlVMTCB2YWx1ZSBmb3Ig
YXJnIGlzIHNwZWNpZmllZCBoZXJlLCB0aGVuIGl0IHdpbGwgYmUKLSAgIHBhc3NlZCBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4dGVybmFsIGVudGl0eSByZWYgaGFuZGxlcgotICAgaW5z
dGVhZCBvZiB0aGUgcGFyc2VyIG9iamVjdC4KLSovCi1YTUxQQVJTRUFQSSh2b2lkKQotWE1MX1Nl
dEV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyhYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKLQotWE1MUEFSU0VBUEkodm9p
ZCkKLVhNTF9TZXRTa2lwcGVkRW50aXR5SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfU2tpcHBlZEVudGl0eUhhbmRsZXIgaGFuZGxlcik7
Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihYTUxf
UGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Vbmtub3du
RW5jb2RpbmdIYW5kbGVyIGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICplbmNvZGluZ0hhbmRsZXJEYXRhKTsKLQotLyogVGhpcyBjYW4gYmUgY2FsbGVkIHdpdGhp
biBhIGhhbmRsZXIgZm9yIGEgc3RhcnQgZWxlbWVudCwgZW5kCi0gICBlbGVtZW50LCBwcm9jZXNz
aW5nIGluc3RydWN0aW9uIG9yIGNoYXJhY3RlciBkYXRhLiAgSXQgY2F1c2VzIHRoZQotICAgY29y
cmVzcG9uZGluZyBtYXJrdXAgdG8gYmUgcGFzc2VkIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCi0q
LwotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9EZWZhdWx0Q3VycmVudChYTUxfUGFyc2VyIHBhcnNl
cik7Ci0KLS8qIElmIGRvX25zdCBpcyBub24temVybywgYW5kIG5hbWVzcGFjZSBwcm9jZXNzaW5n
IGlzIGluIGVmZmVjdCwgYW5kCi0gICBhIG5hbWUgaGFzIGEgcHJlZml4IChpLmUuIGFuIGV4cGxp
Y2l0IG5hbWVzcGFjZSBxdWFsaWZpZXIpIHRoZW4KLSAgIHRoYXQgbmFtZSBpcyByZXR1cm5lZCBh
cyBhIHRyaXBsZXQgaW4gYSBzaW5nbGUgc3RyaW5nIHNlcGFyYXRlZCBieQotICAgdGhlIHNlcGFy
YXRvciBjaGFyYWN0ZXIgc3BlY2lmaWVkIHdoZW4gdGhlIHBhcnNlciB3YXMgY3JlYXRlZDogVVJJ
Ci0gICArIHNlcCArIGxvY2FsX25hbWUgKyBzZXAgKyBwcmVmaXguCi0KLSAgIElmIGRvX25zdCBp
cyB6ZXJvLCB0aGVuIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCBpbiB0aGUKLSAg
IGRlZmF1bHQgbWFubmVyIChVUkkgKyBzZXAgKyBsb2NhbF9uYW1lKSB3aGV0aGVyIG9yIG5vdCB0
aGUgbmFtZQotICAgaGFzIGEgcHJlZml4LgotCi0gICBOb3RlOiBDYWxsaW5nIFhNTF9TZXRSZXR1
cm5OU1RyaXBsZXQgYWZ0ZXIgWE1MX1BhcnNlIG9yCi0gICAgIFhNTF9QYXJzZUJ1ZmZlciBoYXMg
bm8gZWZmZWN0LgotKi8KLQotWE1MUEFSU0VBUEkodm9pZCkKLVhNTF9TZXRSZXR1cm5OU1RyaXBs
ZXQoWE1MX1BhcnNlciBwYXJzZXIsIGludCBkb19uc3QpOwotCi0vKiBUaGlzIHZhbHVlIGlzIHBh
c3NlZCBhcyB0aGUgdXNlckRhdGEgYXJndW1lbnQgdG8gY2FsbGJhY2tzLiAqLwotWE1MUEFSU0VB
UEkodm9pZCkKLVhNTF9TZXRVc2VyRGF0YShYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqdXNlckRh
dGEpOwotCi0vKiBSZXR1cm5zIHRoZSBsYXN0IHZhbHVlIHNldCBieSBYTUxfU2V0VXNlckRhdGEg
b3IgTlVMTC4gKi8KLSNkZWZpbmUgWE1MX0dldFVzZXJEYXRhKHBhcnNlcikgKCoodm9pZCAqKiko
cGFyc2VyKSkKLQotLyogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHN1cHBseWluZyBhbiBlbmNvZGlu
ZyBhcmd1bWVudCB0bwotICAgWE1MX1BhcnNlckNyZWF0ZS4gT24gc3VjY2VzcyBYTUxfU2V0RW5j
b2RpbmcgcmV0dXJucyBub24temVybywKLSAgIHplcm8gb3RoZXJ3aXNlLgotICAgTm90ZTogQ2Fs
bGluZyBYTUxfU2V0RW5jb2RpbmcgYWZ0ZXIgWE1MX1BhcnNlIG9yIFhNTF9QYXJzZUJ1ZmZlcgot
ICAgICBoYXMgbm8gZWZmZWN0IGFuZCByZXR1cm5zIFhNTF9TVEFUVVNfRVJST1IuCi0qLwotWE1M
UEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQotWE1MX1NldEVuY29kaW5nKFhNTF9QYXJzZXIgcGFy
c2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmcpOwotCi0vKiBJZiB0aGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCwgdGhlbiB0aGUgcGFyc2VyIHdpbGwgYmUgcGFzc2VkIGFzIHRoZQotICAgZmlyc3Qg
YXJndW1lbnQgdG8gY2FsbGJhY2tzIGluc3RlYWQgb2YgdXNlckRhdGEuICBUaGUgdXNlckRhdGEg
d2lsbAotICAgc3RpbGwgYmUgYWNjZXNzaWJsZSB1c2luZyBYTUxfR2V0VXNlckRhdGEuCi0qLwot
WE1MUEFSU0VBUEkodm9pZCkKLVhNTF9Vc2VQYXJzZXJBc0hhbmRsZXJBcmcoWE1MX1BhcnNlciBw
YXJzZXIpOwotCi0vKiBJZiB1c2VEVEQgPT0gWE1MX1RSVUUgaXMgcGFzc2VkIHRvIHRoaXMgZnVu
Y3Rpb24sIHRoZW4gdGhlIHBhcnNlcgotICAgd2lsbCBhc3N1bWUgdGhhdCB0aGVyZSBpcyBhbiBl
eHRlcm5hbCBzdWJzZXQsIGV2ZW4gaWYgbm9uZSBpcwotICAgc3BlY2lmaWVkIGluIHRoZSBkb2N1
bWVudC4gSW4gc3VjaCBhIGNhc2UgdGhlIHBhcnNlciB3aWxsIGNhbGwgdGhlCi0gICBleHRlcm5h
bEVudGl0eVJlZkhhbmRsZXIgd2l0aCBhIHZhbHVlIG9mIE5VTEwgZm9yIHRoZSBzeXN0ZW1JZAot
ICAgYXJndW1lbnQgKHRoZSBwdWJsaWNJZCBhbmQgY29udGV4dCBhcmd1bWVudHMgd2lsbCBiZSBO
VUxMIGFzIHdlbGwpLgotICAgTm90ZTogRm9yIHRoZSBwdXJwb3NlIG9mIGNoZWNraW5nIFdGQzog
RW50aXR5IERlY2xhcmVkLCBwYXNzaW5nCi0gICAgIHVzZURURCA9PSBYTUxfVFJVRSB3aWxsIG1h
a2UgdGhlIHBhcnNlciBiZWhhdmUgYXMgaWYgdGhlIGRvY3VtZW50Ci0gICAgIGhhZCBhIERURCB3
aXRoIGFuIGV4dGVybmFsIHN1YnNldC4KLSAgIE5vdGU6IElmIHRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkLCB0aGVuIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZQotICAgICB0aGUgZmlyc3QgY2FsbCB0
byBYTUxfUGFyc2Ugb3IgWE1MX1BhcnNlQnVmZmVyLCBzaW5jZSBpdCB3aWxsCi0gICAgIGhhdmUg
bm8gZWZmZWN0IGFmdGVyIHRoYXQuICBSZXR1cm5zCi0gICAgIFhNTF9FUlJPUl9DQU5UX0NIQU5H
RV9GRUFUVVJFX09OQ0VfUEFSU0lORy4KLSAgIE5vdGU6IElmIHRoZSBkb2N1bWVudCBkb2VzIG5v
dCBoYXZlIGEgRE9DVFlQRSBkZWNsYXJhdGlvbiBhdCBhbGwsCi0gICAgIHRoZW4gc3RhcnREb2N0
eXBlRGVjbEhhbmRsZXIgYW5kIGVuZERvY3R5cGVEZWNsSGFuZGxlciB3aWxsIG5vdAotICAgICBi
ZSBjYWxsZWQsIGRlc3BpdGUgYW4gZXh0ZXJuYWwgc3Vic2V0IGJlaW5nIHBhcnNlZC4KLSAgIE5v
dGU6IElmIFhNTF9EVEQgaXMgbm90IGRlZmluZWQgd2hlbiBFeHBhdCBpcyBjb21waWxlZCwgcmV0
dXJucwotICAgICBYTUxfRVJST1JfRkVBVFVSRV9SRVFVSVJFU19YTUxfRFRELgotKi8KLVhNTFBB
UlNFQVBJKGVudW0gWE1MX0Vycm9yKQotWE1MX1VzZUZvcmVpZ25EVEQoWE1MX1BhcnNlciBwYXJz
ZXIsIFhNTF9Cb29sIHVzZURURCk7Ci0KLQotLyogU2V0cyB0aGUgYmFzZSB0byBiZSB1c2VkIGZv
ciByZXNvbHZpbmcgcmVsYXRpdmUgVVJJcyBpbiBzeXN0ZW0KLSAgIGlkZW50aWZpZXJzIGluIGRl
Y2xhcmF0aW9ucy4gIFJlc29sdmluZyByZWxhdGl2ZSBpZGVudGlmaWVycyBpcwotICAgbGVmdCB0
byB0aGUgYXBwbGljYXRpb246IHRoaXMgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBhcyB0
aGUKLSAgIGJhc2UgYXJndW1lbnQgdG8gdGhlIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIs
Ci0gICBYTUxfTm90YXRpb25EZWNsSGFuZGxlciBhbmQgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhh
bmRsZXIuIFRoZSBiYXNlCi0gICBhcmd1bWVudCB3aWxsIGJlIGNvcGllZC4gIFJldHVybnMgWE1M
X1NUQVRVU19FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LAotICAgWE1MX1NUQVRVU19PSyBvdGhlcndp
c2UuCi0qLwotWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQotWE1MX1NldEJhc2UoWE1MX1Bh
cnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpiYXNlKTsKLQotWE1MUEFSU0VBUEkoY29uc3Qg
WE1MX0NoYXIgKikKLVhNTF9HZXRCYXNlKFhNTF9QYXJzZXIgcGFyc2VyKTsKLQotLyogUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUvdmFsdWUgcGFpcnMgcGFzc2VkIGluIGxhc3Qg
Y2FsbAotICAgdG8gdGhlIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIHRoYXQgd2VyZSBzcGVjaWZp
ZWQgaW4gdGhlIHN0YXJ0LXRhZwotICAgcmF0aGVyIHRoYW4gZGVmYXVsdGVkLiBFYWNoIGF0dHJp
YnV0ZS92YWx1ZSBwYWlyIGNvdW50cyBhcyAyOyB0aHVzCi0gICB0aGlzIGNvcnJlc3BvbmRkcyB0
byBhbiBpbmRleCBpbnRvIHRoZSBhdHRzIGFycmF5IHBhc3NlZCB0byB0aGUKLSAgIFhNTF9TdGFy
dEVsZW1lbnRIYW5kbGVyLgotKi8KLVhNTFBBUlNFQVBJKGludCkKLVhNTF9HZXRTcGVjaWZpZWRB
dHRyaWJ1dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcik7Ci0KLS8qIFJldHVybnMgdGhlIGluZGV4
IG9mIHRoZSBJRCBhdHRyaWJ1dGUgcGFzc2VkIGluIHRoZSBsYXN0IGNhbGwgdG8KLSAgIFhNTF9T
dGFydEVsZW1lbnRIYW5kbGVyLCBvciAtMSBpZiB0aGVyZSBpcyBubyBJRCBhdHRyaWJ1dGUuICBF
YWNoCi0gICBhdHRyaWJ1dGUvdmFsdWUgcGFpciBjb3VudHMgYXMgMjsgdGh1cyB0aGlzIGNvcnJl
c3BvbmRkcyB0byBhbgotICAgaW5kZXggaW50byB0aGUgYXR0cyBhcnJheSBwYXNzZWQgdG8gdGhl
IFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyLgotKi8KLVhNTFBBUlNFQVBJKGludCkKLVhNTF9HZXRJ
ZEF0dHJpYnV0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKTsKLQotI2lmZGVmIFhNTF9BVFRSX0lO
Rk8KLS8qIFNvdXJjZSBmaWxlIGJ5dGUgb2Zmc2V0cyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgb2Yg
YXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuCi0gICBUaGUgdmFsdWUgaW5kaWNlcyBhcmUgZXhj
bHVzaXZlIG9mIHN1cnJvdW5kaW5nIHF1b3RlczsgdGh1cyBpbiBhIFVURi04IHNvdXJjZQotICAg
ZmlsZSBhbiBhdHRyaWJ1dGUgdmFsdWUgb2YgImJsYWgiIHdpbGwgeWllbGQ6Ci0gICBpbmZvLT52
YWx1ZUVuZCAtIGluZm8tPnZhbHVlU3RhcnQgPSA0IGJ5dGVzLgotKi8KLXR5cGVkZWYgc3RydWN0
IHsKLSAgWE1MX0luZGV4ICBuYW1lU3RhcnQ7ICAvKiBPZmZzZXQgdG8gYmVnaW5uaW5nIG9mIHRo
ZSBhdHRyaWJ1dGUgbmFtZS4gKi8KLSAgWE1MX0luZGV4ICBuYW1lRW5kOyAgICAvKiBPZmZzZXQg
YWZ0ZXIgdGhlIGF0dHJpYnV0ZSBuYW1lJ3MgbGFzdCBieXRlLiAqLwotICBYTUxfSW5kZXggIHZh
bHVlU3RhcnQ7IC8qIE9mZnNldCB0byBiZWdpbm5pbmcgb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4g
Ki8KLSAgWE1MX0luZGV4ICB2YWx1ZUVuZDsgICAvKiBPZmZzZXQgYWZ0ZXIgdGhlIGF0dHJpYnV0
ZSB2YWx1ZSdzIGxhc3QgYnl0ZS4gKi8KLX0gWE1MX0F0dHJJbmZvOwotCi0vKiBSZXR1cm5zIGFu
IGFycmF5IG9mIFhNTF9BdHRySW5mbyBzdHJ1Y3R1cmVzIGZvciB0aGUgYXR0cmlidXRlL3ZhbHVl
IHBhaXJzCi0gICBwYXNzZWQgaW4gbGFzdCBjYWxsIHRvIHRoZSBYTUxfU3RhcnRFbGVtZW50SGFu
ZGxlciB0aGF0IHdlcmUgc3BlY2lmaWVkCi0gICBpbiB0aGUgc3RhcnQtdGFnIHJhdGhlciB0aGFu
IGRlZmF1bHRlZC4gRWFjaCBhdHRyaWJ1dGUvdmFsdWUgcGFpciBjb3VudHMKLSAgIGFzIDE7IHRo
dXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheSBpcwotICAgWE1MX0dldFNwZWNp
ZmllZEF0dHJpYnV0ZUNvdW50KHBhcnNlcikgLyAyLgotKi8KLVhNTFBBUlNFQVBJKGNvbnN0IFhN
TF9BdHRySW5mbyAqKQotWE1MX0dldEF0dHJpYnV0ZUluZm8oWE1MX1BhcnNlciBwYXJzZXIpOwot
I2VuZGlmCi0KLS8qIFBhcnNlcyBzb21lIGlucHV0LiBSZXR1cm5zIFhNTF9TVEFUVVNfRVJST1Ig
aWYgYSBmYXRhbCBlcnJvciBpcwotICAgZGV0ZWN0ZWQuICBUaGUgbGFzdCBjYWxsIHRvIFhNTF9Q
YXJzZSBtdXN0IGhhdmUgaXNGaW5hbCB0cnVlOyBsZW4KLSAgIG1heSBiZSB6ZXJvIGZvciB0aGlz
IGNhbGwgKG9yIGFueSBvdGhlcikuCi0KLSAgIFRob3VnaCB0aGUgcmV0dXJuIHZhbHVlcyBmb3Ig
dGhlc2UgZnVuY3Rpb25zIGhhcyBhbHdheXMgYmVlbgotICAgZGVzY3JpYmVkIGFzIGEgQm9vbGVh
biB2YWx1ZSwgdGhlIGltcGxlbWVudGF0aW9uLCBhdCBsZWFzdCBmb3IgdGhlCi0gICAxLjk1Lngg
c2VyaWVzLCBoYXMgYWx3YXlzIHJldHVybmVkIGV4YWN0bHkgb25lIG9mIHRoZSBYTUxfU3RhdHVz
Ci0gICB2YWx1ZXMuCi0qLwotWE1MUEFSU0VBUEkoZW51bSBYTUxfU3RhdHVzKQotWE1MX1BhcnNl
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQgaXNGaW5hbCk7
Ci0KLVhNTFBBUlNFQVBJKHZvaWQgKikKLVhNTF9HZXRCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIs
IGludCBsZW4pOwotCi1YTUxQQVJTRUFQSShlbnVtIFhNTF9TdGF0dXMpCi1YTUxfUGFyc2VCdWZm
ZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4sIGludCBpc0ZpbmFsKTsKLQotLyogU3RvcHMg
cGFyc2luZywgY2F1c2luZyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZmZXIoKSB0byByZXR1
cm4uCi0gICBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGNhbGwtYmFjayBoYW5kbGVyLCBl
eGNlcHQgd2hlbiBhYm9ydGluZwotICAgKHJlc3VtYWJsZSA9IDApIGFuIGFscmVhZHkgc3VzcGVu
ZGVkIHBhcnNlci4gU29tZSBjYWxsLWJhY2tzIG1heQotICAgc3RpbGwgZm9sbG93IGJlY2F1c2Ug
dGhleSB3b3VsZCBvdGhlcndpc2UgZ2V0IGxvc3QuIEV4YW1wbGVzOgotICAgLSBlbmRFbGVtZW50
SGFuZGxlcigpIGZvciBlbXB0eSBlbGVtZW50cyB3aGVuIHN0b3BwZWQgaW4KLSAgICAgc3RhcnRF
bGVtZW50SGFuZGxlcigpLCAKLSAgIC0gZW5kTmFtZVNwYWNlRGVjbEhhbmRsZXIoKSB3aGVuIHN0
b3BwZWQgaW4gZW5kRWxlbWVudEhhbmRsZXIoKSwgCi0gICBhbmQgcG9zc2libHkgb3RoZXJzLgot
Ci0gICBDYW4gYmUgY2FsbGVkIGZyb20gbW9zdCBoYW5kbGVycywgaW5jbHVkaW5nIERURCByZWxh
dGVkIGNhbGwtYmFja3MsCi0gICBleGNlcHQgd2hlbiBwYXJzaW5nIGFuIGV4dGVybmFsIHBhcmFt
ZXRlciBlbnRpdHkgYW5kIHJlc3VtYWJsZSAhPSAwLgotICAgUmV0dXJucyBYTUxfU1RBVFVTX09L
IHdoZW4gc3VjY2Vzc2Z1bCwgWE1MX1NUQVRVU19FUlJPUiBvdGhlcndpc2UuCi0gICBQb3NzaWJs
ZSBlcnJvciBjb2RlczogCi0gICAtIFhNTF9FUlJPUl9TVVNQRU5ERUQ6IHdoZW4gc3VzcGVuZGlu
ZyBhbiBhbHJlYWR5IHN1c3BlbmRlZCBwYXJzZXIuCi0gICAtIFhNTF9FUlJPUl9GSU5JU0hFRDog
d2hlbiB0aGUgcGFyc2VyIGhhcyBhbHJlYWR5IGZpbmlzaGVkLgotICAgLSBYTUxfRVJST1JfU1VT
UEVORF9QRTogd2hlbiBzdXNwZW5kaW5nIHdoaWxlIHBhcnNpbmcgYW4gZXh0ZXJuYWwgUEUuCi0K
LSAgIFdoZW4gcmVzdW1hYmxlICE9IDAgKHRydWUpIHRoZW4gcGFyc2luZyBpcyBzdXNwZW5kZWQs
IHRoYXQgaXMsIAotICAgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZlcigpIHJldHVybiBY
TUxfU1RBVFVTX1NVU1BFTkRFRC4gCi0gICBPdGhlcndpc2UsIHBhcnNpbmcgaXMgYWJvcnRlZCwg
dGhhdCBpcywgWE1MX1BhcnNlKCkgYW5kIFhNTF9QYXJzZUJ1ZmZlcigpCi0gICByZXR1cm4gWE1M
X1NUQVRVU19FUlJPUiB3aXRoIGVycm9yIGNvZGUgWE1MX0VSUk9SX0FCT1JURUQuCi0KLSAgICpO
b3RlKjoKLSAgIFRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHBhcnNlciBpbnN0
YW5jZSBvbmx5LCB0aGF0IGlzLCBpZgotICAgdGhlcmUgaXMgYSBwYXJlbnQgcGFyc2VyIHRoZW4g
aXQgd2lsbCBjb250aW51ZSBwYXJzaW5nIHdoZW4gdGhlCi0gICBleHRlcm5hbEVudGl0eVJlZkhh
bmRsZXIoKSByZXR1cm5zLiBJdCBpcyB1cCB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YKLSAgIHRo
ZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoKSB0byBjYWxsIFhNTF9TdG9wUGFyc2VyKCkgb24g
dGhlIHBhcmVudAotICAgcGFyc2VyIChyZWN1cnNpdmVseSksIGlmIG9uZSB3YW50cyB0byBzdG9w
IHBhcnNpbmcgYWx0b2dldGhlci4KLQotICAgV2hlbiBzdXNwZW5kZWQsIHBhcnNpbmcgY2FuIGJl
IHJlc3VtZWQgYnkgY2FsbGluZyBYTUxfUmVzdW1lUGFyc2VyKCkuIAotKi8KLVhNTFBBUlNFQVBJ
KGVudW0gWE1MX1N0YXR1cykKLVhNTF9TdG9wUGFyc2VyKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxf
Qm9vbCByZXN1bWFibGUpOwotCi0vKiBSZXN1bWVzIHBhcnNpbmcgYWZ0ZXIgaXQgaGFzIGJlZW4g
c3VzcGVuZGVkIHdpdGggWE1MX1N0b3BQYXJzZXIoKS4KLSAgIE11c3Qgbm90IGJlIGNhbGxlZCBm
cm9tIHdpdGhpbiBhIGhhbmRsZXIgY2FsbC1iYWNrLiBSZXR1cm5zIHNhbWUKLSAgIHN0YXR1cyBj
b2RlcyBhcyBYTUxfUGFyc2UoKSBvciBYTUxfUGFyc2VCdWZmZXIoKS4KLSAgIEFkZGl0aW9uYWwg
ZXJyb3IgY29kZSBYTUxfRVJST1JfTk9UX1NVU1BFTkRFRCBwb3NzaWJsZS4gICAKLQotICAgKk5v
dGUqOgotICAgVGhpcyBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgbW9zdCBkZWVwbHkgbmVzdGVkIGNo
aWxkIHBhcnNlciBpbnN0YW5jZQotICAgZmlyc3QsIGFuZCBvbiBpdHMgcGFyZW50IHBhcnNlciBv
bmx5IGFmdGVyIHRoZSBjaGlsZCBwYXJzZXIgaGFzIGZpbmlzaGVkLAotICAgdG8gYmUgYXBwbGll
ZCByZWN1cnNpdmVseSB1bnRpbCB0aGUgZG9jdW1lbnQgZW50aXR5J3MgcGFyc2VyIGlzIHJlc3Rh
cnRlZC4KLSAgIFRoYXQgaXMsIHRoZSBwYXJlbnQgcGFyc2VyIHdpbGwgbm90IHJlc3VtZSBieSBp
dHNlbGYgYW5kIGl0IGlzIHVwIHRvIHRoZQotICAgYXBwbGljYXRpb24gdG8gY2FsbCBYTUxfUmVz
dW1lUGFyc2VyKCkgb24gaXQgYXQgdGhlIGFwcHJvcHJpYXRlIG1vbWVudC4KLSovCi1YTUxQQVJT
RUFQSShlbnVtIFhNTF9TdGF0dXMpCi1YTUxfUmVzdW1lUGFyc2VyKFhNTF9QYXJzZXIgcGFyc2Vy
KTsKLQotZW51bSBYTUxfUGFyc2luZyB7Ci0gIFhNTF9JTklUSUFMSVpFRCwKLSAgWE1MX1BBUlNJ
TkcsCi0gIFhNTF9GSU5JU0hFRCwKLSAgWE1MX1NVU1BFTkRFRAotfTsKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICBlbnVtIFhNTF9QYXJzaW5nIHBhcnNpbmc7Ci0gIFhNTF9Cb29sIGZpbmFsQnVmZmVy
OwotfSBYTUxfUGFyc2luZ1N0YXR1czsKLQotLyogUmV0dXJucyBzdGF0dXMgb2YgcGFyc2VyIHdp
dGggcmVzcGVjdCB0byBiZWluZyBpbml0aWFsaXplZCwgcGFyc2luZywKLSAgIGZpbmlzaGVkLCBv
ciBzdXNwZW5kZWQgYW5kIHByb2Nlc3NpbmcgdGhlIGZpbmFsIGJ1ZmZlci4KLSAgIFhYWCBYTUxf
UGFyc2UoKSBhbmQgWE1MX1BhcnNlQnVmZmVyKCkgc2hvdWxkIHJldHVybiBYTUxfUGFyc2luZ1N0
YXR1cywKLSAgIFhYWCB3aXRoIFhNTF9GSU5JU0hFRF9PSyBvciBYTUxfRklOSVNIRURfRVJST1Ig
cmVwbGFjaW5nIFhNTF9GSU5JU0hFRAotKi8KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfR2V0UGFy
c2luZ1N0YXR1cyhYTUxfUGFyc2VyIHBhcnNlciwgWE1MX1BhcnNpbmdTdGF0dXMgKnN0YXR1cyk7
Ci0KLS8qIENyZWF0ZXMgYW4gWE1MX1BhcnNlciBvYmplY3QgdGhhdCBjYW4gcGFyc2UgYW4gZXh0
ZXJuYWwgZ2VuZXJhbAotICAgZW50aXR5OyBjb250ZXh0IGlzIGEgJ1wwJy10ZXJtaW5hdGVkIHN0
cmluZyBzcGVjaWZ5aW5nIHRoZSBwYXJzZQotICAgY29udGV4dDsgZW5jb2RpbmcgaXMgYSAnXDAn
LXRlcm1pbmF0ZWQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZgotICAgdGhlIGV4dGVybmFsbHkg
c3BlY2lmaWVkIGVuY29kaW5nLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vCi0gICBleHRlcm5hbGx5
IHNwZWNpZmllZCBlbmNvZGluZy4gIFRoZSBjb250ZXh0IHN0cmluZyBjb25zaXN0cyBvZiBhCi0g
ICBzZXF1ZW5jZSBvZiB0b2tlbnMgc2VwYXJhdGVkIGJ5IGZvcm1mZWVkcyAoXGYpOyBhIHRva2Vu
IGNvbnNpc3RpbmcKLSAgIG9mIGEgbmFtZSBzcGVjaWZpZXMgdGhhdCB0aGUgZ2VuZXJhbCBlbnRp
dHkgb2YgdGhlIG5hbWUgaXMgb3BlbjsgYQotICAgdG9rZW4gb2YgdGhlIGZvcm0gcHJlZml4PXVy
aSBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSBmb3IgYQotICAgcGFydGljdWxhciBwcmVmaXg7IGEg
dG9rZW4gb2YgdGhlIGZvcm0gPXVyaSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQKLSAgIG5hbWVzcGFj
ZS4gIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwg
dG8KLSAgIGFuIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBzbyBsb25nZXIgYXMgdGhlIHBhcnNl
ciBoYXMgbm90IHlldAotICAgYmVlbiBmcmVlZC4gIFRoZSBuZXcgcGFyc2VyIGlzIGNvbXBsZXRl
bHkgaW5kZXBlbmRlbnQgYW5kIG1heQotICAgc2FmZWx5IGJlIHVzZWQgaW4gYSBzZXBhcmF0ZSB0
aHJlYWQuICBUaGUgaGFuZGxlcnMgYW5kIHVzZXJEYXRhIGFyZQotICAgaW5pdGlhbGl6ZWQgZnJv
bSB0aGUgcGFyc2VyIGFyZ3VtZW50LiAgUmV0dXJucyBOVUxMIGlmIG91dCBvZiBtZW1vcnkuCi0g
ICBPdGhlcndpc2UgcmV0dXJucyBhIG5ldyBYTUxfUGFyc2VyIG9iamVjdC4KLSovCi1YTUxQQVJT
RUFQSShYTUxfUGFyc2VyKQotWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKFhNTF9QYXJz
ZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFy
ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFy
ICplbmNvZGluZyk7Ci0KLWVudW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyB7Ci0gIFhNTF9QQVJB
TV9FTlRJVFlfUEFSU0lOR19ORVZFUiwKLSAgWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX1VOTEVT
U19TVEFOREFMT05FLAotICBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxXQVlTCi19OwotCi0v
KiBDb250cm9scyBwYXJzaW5nIG9mIHBhcmFtZXRlciBlbnRpdGllcyAoaW5jbHVkaW5nIHRoZSBl
eHRlcm5hbCBEVEQKLSAgIHN1YnNldCkuIElmIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGVudGl0aWVz
IGlzIGVuYWJsZWQsIHRoZW4KLSAgIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgcGFyYW1ldGVyIGVu
dGl0aWVzIChpbmNsdWRpbmcgdGhlIGV4dGVybmFsCi0gICBEVEQgc3Vic2V0KSB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgaGFuZGxlciBzZXQgd2l0aAotICAgWE1MX1NldEV4dGVybmFsRW50aXR5UmVm
SGFuZGxlci4gIFRoZSBjb250ZXh0IHBhc3NlZCB3aWxsIGJlIDAuCi0KLSAgIFVubGlrZSBleHRl
cm5hbCBnZW5lcmFsIGVudGl0aWVzLCBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMgY2FuCi0g
ICBvbmx5IGJlIHBhcnNlZCBzeW5jaHJvbm91c2x5LiAgSWYgdGhlIGV4dGVybmFsIHBhcmFtZXRl
ciBlbnRpdHkgaXMKLSAgIHRvIGJlIHBhcnNlZCwgaXQgbXVzdCBiZSBwYXJzZWQgZHVyaW5nIHRo
ZSBjYWxsIHRvIHRoZSBleHRlcm5hbAotICAgZW50aXR5IHJlZiBoYW5kbGVyOiB0aGUgY29tcGxl
dGUgc2VxdWVuY2Ugb2YKLSAgIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSwgWE1MX1Bh
cnNlL1hNTF9QYXJzZUJ1ZmZlciBhbmQKLSAgIFhNTF9QYXJzZXJGcmVlIGNhbGxzIG11c3QgYmUg
bWFkZSBkdXJpbmcgdGhpcyBjYWxsLiAgQWZ0ZXIKLSAgIFhNTF9FeHRlcm5hbEVudGl0eVBhcnNl
ckNyZWF0ZSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRlIHRoZSBwYXJzZXIKLSAgIGZvciB0aGUg
ZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eSAoY29udGV4dCBtdXN0IGJlIDAgZm9yIHRoaXMKLSAg
IGNhbGwpLCBpdCBpcyBpbGxlZ2FsIHRvIG1ha2UgYW55IGNhbGxzIG9uIHRoZSBvbGQgcGFyc2Vy
IHVudGlsCi0gICBYTUxfUGFyc2VyRnJlZSBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIG5ld2x5IGNy
ZWF0ZWQgcGFyc2VyLgotICAgSWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91
dCBzdXBwb3J0IGZvciBwYXJhbWV0ZXIKLSAgIGVudGl0eSBwYXJzaW5nIChpZSB3aXRob3V0IFhN
TF9EVEQgYmVpbmcgZGVmaW5lZCksIHRoZW4KLSAgIFhNTF9TZXRQYXJhbUVudGl0eVBhcnNpbmcg
d2lsbCByZXR1cm4gMCBpZiBwYXJzaW5nIG9mIHBhcmFtZXRlcgotICAgZW50aXRpZXMgaXMgcmVx
dWVzdGVkOyBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gbm9uLXplcm8uCi0gICBOb3RlOiBJZiBY
TUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nIGlzIGNhbGxlZCBhZnRlciBYTUxfUGFyc2Ugb3IKLSAg
ICAgIFhNTF9QYXJzZUJ1ZmZlciwgdGhlbiBpdCBoYXMgbm8gZWZmZWN0IGFuZCB3aWxsIGFsd2F5
cyByZXR1cm4gMC4KLSovCi1YTUxQQVJTRUFQSShpbnQpCi1YTUxfU2V0UGFyYW1FbnRpdHlQYXJz
aW5nKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIFhN
TF9QYXJhbUVudGl0eVBhcnNpbmcgcGFyc2luZyk7Ci0KLS8qIFNldHMgdGhlIGhhc2ggc2FsdCB0
byB1c2UgZm9yIGludGVybmFsIGhhc2ggY2FsY3VsYXRpb25zLgotICAgSGVscHMgaW4gcHJldmVu
dGluZyBEb1MgYXR0YWNrcyBiYXNlZCBvbiBwcmVkaWN0aW5nIGhhc2gKLSAgIGZ1bmN0aW9uIGJl
aGF2aW9yLiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBwYXJzaW5nIGlzIHN0YXJ0ZWQuCi0g
ICBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCB3aGVuIGNhbGxlZCBhZnRlciBwYXJzaW5nIGhh
cyBzdGFydGVkLgotKi8KLVhNTFBBUlNFQVBJKGludCkKLVhNTF9TZXRIYXNoU2FsdChYTUxfUGFy
c2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGhhc2hfc2FsdCk7Ci0K
LS8qIElmIFhNTF9QYXJzZSBvciBYTUxfUGFyc2VCdWZmZXIgaGF2ZSByZXR1cm5lZCBYTUxfU1RB
VFVTX0VSUk9SLCB0aGVuCi0gICBYTUxfR2V0RXJyb3JDb2RlIHJldHVybnMgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGVycm9yLgotKi8KLVhNTFBBUlNFQVBJKGVudW0gWE1MX0Vycm9yKQotWE1MX0dl
dEVycm9yQ29kZShYTUxfUGFyc2VyIHBhcnNlcik7Ci0KLS8qIFRoZXNlIGZ1bmN0aW9ucyByZXR1
cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFyc2UKLSAgIGxvY2F0aW9uLiAgVGhl
eSBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNhbGxiYWNrIGNhbGxlZCB0byByZXBvcnQKLSAgIHNv
bWUgcGFyc2UgZXZlbnQ7IGluIHRoaXMgY2FzZSB0aGUgbG9jYXRpb24gaXMgdGhlIGxvY2F0aW9u
IG9mIHRoZQotICAgZmlyc3Qgb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBnZW5l
cmF0ZWQgdGhlIGV2ZW50LiAgV2hlbgotICAgY2FsbGVkIGZyb20gY2FsbGJhY2tzIGdlbmVyYXRl
ZCBieSBkZWNsYXJhdGlvbnMgaW4gdGhlIGRvY3VtZW50Ci0gICBwcm9sb2d1ZSwgdGhlIGxvY2F0
aW9uIGlkZW50aWZpZWQgaXNuJ3QgYXMgbmVhdGx5IGRlZmluZWQsIGJ1dCB3aWxsCi0gICBiZSB3
aXRoaW4gdGhlIHJlbGV2YW50IG1hcmt1cC4gIFdoZW4gY2FsbGVkIG91dHNpZGUgb2YgdGhlIGNh
bGxiYWNrCi0gICBmdW5jdGlvbnMsIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgd2lsbCBiZSBqdXN0
IHBhc3QgdGhlIGxhc3QgcGFyc2UKLSAgIGV2ZW50IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhl
cmUgd2FzIGFuIGFzc29jaWF0ZWQgY2FsbGJhY2spLgotICAgCi0gICBUaGV5IG1heSBhbHNvIGJl
IGNhbGxlZCBhZnRlciByZXR1cm5pbmcgZnJvbSBhIGNhbGwgdG8gWE1MX1BhcnNlCi0gICBvciBY
TUxfUGFyc2VCdWZmZXIuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIFhNTF9TVEFUVVNfRVJST1Ig
dGhlbgotICAgdGhlIGxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGF0
IHdoaWNoIHRoZSBlcnJvcgotICAgd2FzIGRldGVjdGVkOyBvdGhlcndpc2UgdGhlIGxvY2F0aW9u
IGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdAotICAgcGFyc2UgZXZlbnQsIGFzIGRlc2NyaWJl
ZCBhYm92ZS4KLSovCi1YTUxQQVJTRUFQSShYTUxfU2l6ZSkgWE1MX0dldEN1cnJlbnRMaW5lTnVt
YmVyKFhNTF9QYXJzZXIgcGFyc2VyKTsKLVhNTFBBUlNFQVBJKFhNTF9TaXplKSBYTUxfR2V0Q3Vy
cmVudENvbHVtbk51bWJlcihYTUxfUGFyc2VyIHBhcnNlcik7Ci1YTUxQQVJTRUFQSShYTUxfSW5k
ZXgpIFhNTF9HZXRDdXJyZW50Qnl0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKTsKLQotLyogUmV0
dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGN1cnJlbnQgZXZlbnQuCi0gICBSZXR1cm5z
IDAgaWYgdGhlIGV2ZW50IGlzIGluIGFuIGludGVybmFsIGVudGl0eS4KLSovCi1YTUxQQVJTRUFQ
SShpbnQpCi1YTUxfR2V0Q3VycmVudEJ5dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcik7Ci0KLS8q
IElmIFhNTF9DT05URVhUX0JZVEVTIGlzIGRlZmluZWQsIHJldHVybnMgdGhlIGlucHV0IGJ1ZmZl
ciwgc2V0cwotICAgdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBvZmZzZXQgdG8gdGhlIG9mZnNl
dCB3aXRoaW4gdGhpcyBidWZmZXIKLSAgIG9mIHRoZSBjdXJyZW50IHBhcnNlIHBvc2l0aW9uLCBh
bmQgc2V0cyB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHNpemUKLSAgIHRvIHRoZSBzaXplIG9m
IHRoaXMgYnVmZmVyICh0aGUgbnVtYmVyIG9mIGlucHV0IGJ5dGVzKS4gT3RoZXJ3aXNlCi0gICBy
ZXR1cm5zIGEgTlVMTCBwb2ludGVyLiBBbHNvIHJldHVybnMgYSBOVUxMIHBvaW50ZXIgaWYgYSBw
YXJzZSBpc24ndAotICAgYWN0aXZlLgotCi0gICBOT1RFOiBUaGUgY2hhcmFjdGVyIHBvaW50ZXIg
cmV0dXJuZWQgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUKLSAgIHRoZSBoYW5kbGVyIHRoYXQg
bWFrZXMgdGhlIGNhbGwuCi0qLwotWE1MUEFSU0VBUEkoY29uc3QgY2hhciAqKQotWE1MX0dldElu
cHV0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgaW50ICpv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGludCAqc2l6ZSk7Ci0KLS8qIEZvciBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zLiAqLwotI2RlZmluZSBYTUxf
R2V0RXJyb3JMaW5lTnVtYmVyICAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyCi0jZGVmaW5lIFhN
TF9HZXRFcnJvckNvbHVtbk51bWJlciBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcgotI2RlZmlu
ZSBYTUxfR2V0RXJyb3JCeXRlSW5kZXggICAgWE1MX0dldEN1cnJlbnRCeXRlSW5kZXgKLQotLyog
RnJlZXMgdGhlIGNvbnRlbnQgbW9kZWwgcGFzc2VkIHRvIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9u
IGhhbmRsZXIgKi8KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfRnJlZUNvbnRlbnRNb2RlbChYTUxf
UGFyc2VyIHBhcnNlciwgWE1MX0NvbnRlbnQgKm1vZGVsKTsKLQotLyogRXhwb3NpbmcgdGhlIG1l
bW9yeSBoYW5kbGluZyBmdW5jdGlvbnMgdXNlZCBpbiBFeHBhdCAqLwotWE1MUEFSU0VBUEkodm9p
ZCAqKQotWE1MX01lbU1hbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgc2l6ZV90IHNpemUpOwotCi1Y
TUxQQVJTRUFQSSh2b2lkICopCi1YTUxfTWVtUmVhbGxvYyhYTUxfUGFyc2VyIHBhcnNlciwgdm9p
ZCAqcHRyLCBzaXplX3Qgc2l6ZSk7Ci0KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfTWVtRnJlZShY
TUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqcHRyKTsKLQotLyogRnJlZXMgbWVtb3J5IHVzZWQgYnkg
dGhlIHBhcnNlci4gKi8KLVhNTFBBUlNFQVBJKHZvaWQpCi1YTUxfUGFyc2VyRnJlZShYTUxfUGFy
c2VyIHBhcnNlcik7Ci0KLS8qIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3Iu
ICovCi1YTUxQQVJTRUFQSShjb25zdCBYTUxfTENoYXIgKikKLVhNTF9FcnJvclN0cmluZyhlbnVt
IFhNTF9FcnJvciBjb2RlKTsKLQotLyogUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZl
cnNpb24gbnVtYmVyIG9mIHRoaXMgZXhwYXQgKi8KLVhNTFBBUlNFQVBJKGNvbnN0IFhNTF9MQ2hh
ciAqKQotWE1MX0V4cGF0VmVyc2lvbih2b2lkKTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBpbnQg
bWFqb3I7Ci0gIGludCBtaW5vcjsKLSAgaW50IG1pY3JvOwotfSBYTUxfRXhwYXRfVmVyc2lvbjsK
LQotLyogUmV0dXJuIGFuIFhNTF9FeHBhdF9WZXJzaW9uIHN0cnVjdHVyZSBjb250YWluaW5nIG51
bWVyaWMgdmVyc2lvbgotICAgbnVtYmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHZlcnNpb24gb2Yg
ZXhwYXQuCi0qLwotWE1MUEFSU0VBUEkoWE1MX0V4cGF0X1ZlcnNpb24pCi1YTUxfRXhwYXRWZXJz
aW9uSW5mbyh2b2lkKTsKLQotLyogQWRkZWQgaW4gRXhwYXQgMS45NS41LiAqLwotZW51bSBYTUxf
RmVhdHVyZUVudW0gewotICBYTUxfRkVBVFVSRV9FTkQgPSAwLAotICBYTUxfRkVBVFVSRV9VTklD
T0RFLAotICBYTUxfRkVBVFVSRV9VTklDT0RFX1dDSEFSX1QsCi0gIFhNTF9GRUFUVVJFX0RURCwK
LSAgWE1MX0ZFQVRVUkVfQ09OVEVYVF9CWVRFUywKLSAgWE1MX0ZFQVRVUkVfTUlOX1NJWkUsCi0g
IFhNTF9GRUFUVVJFX1NJWkVPRl9YTUxfQ0hBUiwKLSAgWE1MX0ZFQVRVUkVfU0laRU9GX1hNTF9M
Q0hBUiwKLSAgWE1MX0ZFQVRVUkVfTlMsCi0gIFhNTF9GRUFUVVJFX0xBUkdFX1NJWkUsCi0gIFhN
TF9GRUFUVVJFX0FUVFJfSU5GTwotICAvKiBBZGRpdGlvbmFsIGZlYXR1cmVzIG11c3QgYmUgYWRk
ZWQgdG8gdGhlIGVuZCBvZiB0aGlzIGVudW0uICovCi19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0g
IGVudW0gWE1MX0ZlYXR1cmVFbnVtICBmZWF0dXJlOwotICBjb25zdCBYTUxfTENoYXIgICAgICAg
Km5hbWU7Ci0gIGxvbmcgaW50ICAgICAgICAgICAgICB2YWx1ZTsKLX0gWE1MX0ZlYXR1cmU7Ci0K
LVhNTFBBUlNFQVBJKGNvbnN0IFhNTF9GZWF0dXJlICopCi1YTUxfR2V0RmVhdHVyZUxpc3Qodm9p
ZCk7Ci0KLQotLyogRXhwYXQgZm9sbG93cyB0aGUgR05VL0xpbnV4IGNvbnZlbnRpb24gb2Ygb2Rk
IG51bWJlciBtaW5vciB2ZXJzaW9uIGZvcgotICAgYmV0YS9kZXZlbG9wbWVudCByZWxlYXNlcyBh
bmQgZXZlbiBudW1iZXIgbWlub3IgdmVyc2lvbiBmb3Igc3RhYmxlCi0gICByZWxlYXNlcy4gTWlj
cm8gaXMgYnVtcGVkIHdpdGggZWFjaCByZWxlYXNlLCBhbmQgc2V0IHRvIDAgd2l0aCBlYWNoCi0g
ICBjaGFuZ2UgdG8gbWFqb3Igb3IgbWlub3IgdmVyc2lvbi4KLSovCi0jZGVmaW5lIFhNTF9NQUpP
Ul9WRVJTSU9OIDIKLSNkZWZpbmUgWE1MX01JTk9SX1ZFUlNJT04gMQotI2RlZmluZSBYTUxfTUlD
Uk9fVkVSU0lPTiAwCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAv
KiBub3QgRXhwYXRfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2V4cGF0X2NvbmZpZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvZXhwYXRfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1
OTcxZWY3MjQxNzlmZWM1NThjYmMzYjViYThkODAyZGE2Nzk4ZjAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvZXhwYXRfY29uZmlnLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLy8gTm8gY29weXJpZ2h0IG5vdGljZTsgdGhpcyBm
aWxlIGJhc2VkIG9uIGF1dG9nZW5lcmF0ZWQgaGVhZGVyCi0KLSNpZm5kZWYgVEhJUkRfUEFSVFlf
RVhQQVRfVjJfMF8xX1NPVVJDRV9MSUJfRVhQQVRfQ09ORklHX0hfXwotI2RlZmluZSBUSElSRF9Q
QVJUWV9FWFBBVF9WMl8wXzFfU09VUkNFX0xJQl9FWFBBVF9DT05GSUdfSF9fCi0KLS8qIGV4cGF0
X2NvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gZXhwYXRfY29uZmlnLmguaW4gYnkgY29uZmlndXJl
LiAgKi8KLS8qIGV4cGF0X2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmlu
IGJ5IGF1dG9oZWFkZXIuICAqLwotCi0vKiAxMjM0ID0gTElMX0VORElBTiwgNDMyMSA9IEJJR0VO
RElBTiAqLwotI2RlZmluZSBCWVRFT1JERVIgMTIzNAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGJjb3B5JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9CQ09QWSAxCi0KLS8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCi0j
ZGVmaW5lIEhBVkVfRExGQ05fSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRkNOVExfSCAxCi0KLS8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLiAqLwotI2Rl
ZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEK
LQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1tb3ZlJyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQotCi0v
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgYG1tYXAnIHN5c3RlbSBjYWxsLiAq
LwotI2RlZmluZSBIQVZFX01NQVAgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi0KLS8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwot
I2RlZmluZSBIQVZFX1NURExJQl9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi0K
LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAq
LwotI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1BBUkFN
X0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRl
ciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFW
RV9TWVNfVFlQRVNfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3Rk
Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKLQotLyogRGVmaW5l
IHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVk
IGxpYnJhcmllcy4KLSAgICovCi0jZGVmaW5lIExUX09CSkRJUiAiLmxpYnMvIgotCi0vKiBEZWZp
bmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91
bGQgYmUgc2VudC4gKi8KLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImV4cGF0LWJ1Z3NAbGli
ZXhwYXQub3JnIgotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2Uu
ICovCi0jZGVmaW5lIFBBQ0tBR0VfTkFNRSAiZXhwYXQiCi0KLS8qIERlZmluZSB0byB0aGUgZnVs
bCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9T
VFJJTkcgImV4cGF0IDIuMS4wIgotCi0vKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQg
bmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZXhwYXQi
Ci0KLS8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCi0jZGVm
aW5lIFBBQ0tBR0VfVVJMICIiCi0KLS8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBh
Y2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMi4xLjAiCi0KLS8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwotI2RlZmluZSBTVERD
X0hFQURFUlMgMQotCi0vKiB3aGV0aGVyIGJ5dGVvcmRlciBpcyBiaWdlbmRpYW4gKi8KLS8qICN1
bmRlZiBXT1JEU19CSUdFTkRJQU4gKi8KLQotLyogRGVmaW5lIHRvIHNwZWNpZnkgaG93IG11Y2gg
Y29udGV4dCB0byByZXRhaW4gYXJvdW5kIHRoZSBjdXJyZW50IHBhcnNlCi0gICBwb2ludC4gKi8K
LSNkZWZpbmUgWE1MX0NPTlRFWFRfQllURVMgMTAyNAotCi0vKiBEZWZpbmUgdG8gbWFrZSBwYXJh
bWV0ZXIgZW50aXR5IHBhcnNpbmcgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICovCi0jZGVmaW5l
IFhNTF9EVEQgMQotCi0vKiBEZWZpbmUgdG8gbWFrZSBYTUwgTmFtZXNwYWNlcyBmdW5jdGlvbmFs
aXR5IGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgWE1MX05TIDEKLQotLyogRGVmaW5lIHRvIF9fRlVO
Q1RJT05fXyBvciAiIiBpZiBgX19mdW5jX18nIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAq
LwotLyogI3VuZGVmIF9fZnVuY19fICovCi0KLS8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3Qn
IGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLwotLyogI3VuZGVmIGNvbnN0ICovCi0KLS8q
IERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAq
LwotLyogI3VuZGVmIG9mZl90ICovCi0KLS8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8
c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KLS8qICN1bmRlZiBzaXplX3QgKi8KLQot
I2VuZGlmICAvLyBUSElSRF9QQVJUWV9FWFBBVF9WMl8wXzFfU09VUkNFX0xJQl9FWFBBVF9DT05G
SUdfSF9fCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdF9leHRlcm5hbC5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvZXhwYXRf
ZXh0ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwMzI4NGVhMjY1YmM2
MmJiYWUxNWUyOWU0OGY3YjBkZjRjZWYwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdF9leHRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTE1ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9w
ZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZv
ciBjb3B5aW5nIHBlcm1pc3Npb24uCi0qLwotCi0jaWZuZGVmIEV4cGF0X0V4dGVybmFsX0lOQ0xV
REVECi0jZGVmaW5lIEV4cGF0X0V4dGVybmFsX0lOQ0xVREVEIDEKLQotLyogRXh0ZXJuYWwgQVBJ
IGRlZmluaXRpb25zICovCi0KLSNpZiBkZWZpbmVkKF9NU0NfRVhURU5TSU9OUykgJiYgIWRlZmlu
ZWQoX19CRU9TX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0jZGVmaW5lIFhNTF9VU0VfTVND
X0VYVEVOU0lPTlMgMQotI2VuZGlmCi0KLS8qIEV4cGF0IHRyaWVzIHZlcnkgaGFyZCB0byBtYWtl
IHRoZSBBUEkgYm91bmRhcnkgdmVyeSBzcGVjaWZpY2FsbHkKLSAgIGRlZmluZWQuICBUaGVyZSBh
cmUgdHdvIG1hY3JvcyBkZWZpbmVkIHRvIGNvbnRyb2wgdGhpcyBib3VuZGFyeTsKLSAgIGVhY2gg
b2YgdGhlc2UgY2FuIGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGhlYWRlciB0bwot
ICAgYWNoaWV2ZSBzb21lIGRpZmZlcmVudCBiZWhhdmlvciwgYnV0IGRvaW5nIHNvIGl0IG5vdCBy
ZWNvbW1lbmRlZCBvcgotICAgdGVzdGVkIGZyZXF1ZW50bHkuCi0KLSAgIFhNTENBTEwgICAgLSBU
aGUgY2FsbGluZyBjb252ZW50aW9uIHRvIHVzZSBmb3IgYWxsIGNhbGxzIGFjcm9zcyB0aGUKLSAg
ICAgICAgICAgICAgICAibGlicmFyeSBib3VuZGFyeS4iICBUaGlzIHdpbGwgZGVmYXVsdCB0byBj
ZGVjbCwgYW5kCi0gICAgICAgICAgICAgICAgdHJ5IHJlYWxseSBoYXJkIHRvIHRlbGwgdGhlIGNv
bXBpbGVyIHRoYXQncyB3aGF0IHdlCi0gICAgICAgICAgICAgICAgd2FudC4KLQotICAgWE1MSU1Q
T1JUICAtIFdoYXRldmVyIG1hZ2ljIGlzIG5lZWRlZCB0byBub3RlIHRoYXQgYSBmdW5jdGlvbiBp
cwotICAgICAgICAgICAgICAgIHRvIGJlIGltcG9ydGVkIGZyb20gYSBkeW5hbWljYWxseSBsb2Fk
ZWQgbGlicmFyeQotICAgICAgICAgICAgICAgICguZGxsLCAuc28sIG9yIC5zbCwgZGVwZW5kaW5n
IG9uIHlvdXIgcGxhdGZvcm0pLgotCi0gICBUaGUgWE1MQ0FMTCBtYWNybyB3YXMgYWRkZWQgaW4g
RXhwYXQgMS45NS43LiAgVGhlIG9ubHkgb25lIHdoaWNoIGlzCi0gICBleHBlY3RlZCB0byBiZSBk
aXJlY3RseSB1c2VmdWwgaW4gY2xpZW50IGNvZGUgaXMgWE1MQ0FMTC4KLQotICAgTm90ZSB0aGF0
IG9uIGF0IGxlYXN0IHNvbWUgVW5peCB2ZXJzaW9ucywgdGhlIEV4cGF0IGxpYnJhcnkgbXVzdCBi
ZQotICAgY29tcGlsZWQgd2l0aCB0aGUgY2RlY2wgY2FsbGluZyBjb252ZW50aW9uIGFzIHRoZSBk
ZWZhdWx0IHNpbmNlCi0gICBzeXN0ZW0gaGVhZGVycyBtYXkgYXNzdW1lIHRoZSBjZGVjbCBjb252
ZW50aW9uLgotKi8KLSNpZm5kZWYgWE1MQ0FMTAotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jZGVm
aW5lIFhNTENBTEwgX19jZGVjbAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChf
X2kzODYpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0jZGVmaW5lIFhNTENBTEwgX19h
dHRyaWJ1dGVfXygoY2RlY2wpKQotI2Vsc2UKLS8qIEZvciBhbnkgcGxhdGZvcm0gd2hpY2ggdXNl
cyB0aGlzIGRlZmluaXRpb24gYW5kIHN1cHBvcnRzIG1vcmUgdGhhbgotICAgb25lIGNhbGxpbmcg
Y29udmVudGlvbiwgd2UgbmVlZCB0byBleHRlbmQgdGhpcyBkZWZpbml0aW9uIHRvCi0gICBkZWNs
YXJlIHRoZSBjb252ZW50aW9uIHVzZWQgb24gdGhhdCBwbGF0Zm9ybSwgaWYgaXQncyBwb3NzaWJs
ZSB0bwotICAgZG8gc28uCi0KLSAgIElmIHRoaXMgaXMgdGhlIGNhc2UgZm9yIHlvdXIgcGxhdGZv
cm0sIHBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydAotICAgd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cg
dG8gaWRlbnRpZnkgeW91ciBwbGF0Zm9ybSB2aWEgdGhlIEMKLSAgIHByZS1wcm9jZXNzb3IgYW5k
IGhvdyB0byBzcGVjaWZ5IHRoZSBzYW1lIGNhbGxpbmcgY29udmVudGlvbiBhcyB0aGUKLSAgIHBs
YXRmb3JtJ3MgbWFsbG9jKCkgaW1wbGVtZW50YXRpb24uCi0qLwotI2RlZmluZSBYTUxDQUxMCi0j
ZW5kaWYKLSNlbmRpZiAgLyogbm90IGRlZmluZWQgWE1MQ0FMTCAqLwotCi0KLSNpZiAhZGVmaW5l
ZChYTUxfU1RBVElDKSAmJiAhZGVmaW5lZChYTUxJTVBPUlQpCi0jaWZuZGVmIFhNTF9CVUlMRElO
R19FWFBBVAotLyogdXNpbmcgRXhwYXQgZnJvbSBhbiBhcHBsaWNhdGlvbiAqLwotCi0jaWZkZWYg
WE1MX1VTRV9NU0NfRVhURU5TSU9OUwotI2RlZmluZSBYTUxJTVBPUlQgX19kZWNsc3BlYyhkbGxp
bXBvcnQpCi0jZW5kaWYKLQotI2VuZGlmCi0jZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTF9TVEFU
SUMgKi8KLQotCi0vKiBJZiB3ZSBkaWRuJ3QgZGVmaW5lIGl0IGFib3ZlLCBkZWZpbmUgaXQgYXdh
eTogKi8KLSNpZm5kZWYgWE1MSU1QT1JUCi0jZGVmaW5lIFhNTElNUE9SVAotI2VuZGlmCi0KLQot
I2RlZmluZSBYTUxQQVJTRUFQSSh0eXBlKSBYTUxJTVBPUlQgdHlwZSBYTUxDQUxMCi0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmZGVmIFhNTF9VTklDT0RF
X1dDSEFSX1QKLSNkZWZpbmUgWE1MX1VOSUNPREUKLSNlbmRpZgotCi0jaWZkZWYgWE1MX1VOSUNP
REUgICAgIC8qIEluZm9ybWF0aW9uIGlzIFVURi0xNiBlbmNvZGVkLiAqLwotI2lmZGVmIFhNTF9V
TklDT0RFX1dDSEFSX1QKLXR5cGVkZWYgd2NoYXJfdCBYTUxfQ2hhcjsKLXR5cGVkZWYgd2NoYXJf
dCBYTUxfTENoYXI7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTUxfQ2hhcjsKLXR5
cGVkZWYgY2hhciBYTUxfTENoYXI7Ci0jZW5kaWYgLyogWE1MX1VOSUNPREVfV0NIQVJfVCAqLwot
I2Vsc2UgICAgICAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbiBpcyBVVEYtOCBlbmNvZGVkLiAq
LwotdHlwZWRlZiBjaGFyIFhNTF9DaGFyOwotdHlwZWRlZiBjaGFyIFhNTF9MQ2hhcjsKLSNlbmRp
ZiAvKiBYTUxfVU5JQ09ERSAqLwotCi0jaWZkZWYgWE1MX0xBUkdFX1NJWkUgIC8qIFVzZSBsYXJn
ZSBpbnRlZ2VycyBmb3IgZmlsZS9zdHJlYW0gcG9zaXRpb25zLiAqLwotI2lmIGRlZmluZWQoWE1M
X1VTRV9NU0NfRVhURU5TSU9OUykgJiYgX01TQ19WRVIgPCAxNDAwCi10eXBlZGVmIF9faW50NjQg
WE1MX0luZGV4OyAKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBYTUxfU2l6ZTsKLSNlbHNlCi10
eXBlZGVmIGxvbmcgbG9uZyBYTUxfSW5kZXg7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBY
TUxfU2l6ZTsKLSNlbmRpZgotI2Vsc2UKLXR5cGVkZWYgbG9uZyBYTUxfSW5kZXg7Ci10eXBlZGVm
IHVuc2lnbmVkIGxvbmcgWE1MX1NpemU7Ci0jZW5kaWYgLyogWE1MX0xBUkdFX1NJWkUgKi8KLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIG5vdCBFeHBhdF9FeHRl
cm5hbF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvaWFzY2lpdGFiLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9p
YXNjaWl0YWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRhMWQ1Y2NjOWE1OWJl
NzAyMWJkNTNkNGM3NzgzZmI5YTYxNmRhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9pYXNjaWl0YWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3
ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNv
ZnR3YXJlIENlbnRlciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBl
cm1pc3Npb24uCi0qLwotCi0vKiBMaWtlIGFzY2lpdGFiLmgsIGV4Y2VwdCB0aGF0IDB4RCBoYXMg
Y29kZSBCVF9TIHJhdGhlciB0aGFuIEJUX0NSICovCi0vKiAweDAwICovIEJUX05PTlhNTCwgQlRf
Tk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwKLS8qIDB4MDQgKi8gQlRfTk9OWE1MLCBCVF9O
T05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLAotLyogMHgwOCAqLyBCVF9OT05YTUwsIEJUX1Ms
IEJUX0xGLCBCVF9OT05YTUwsCi0vKiAweDBDICovIEJUX05PTlhNTCwgQlRfUywgQlRfTk9OWE1M
LCBCVF9OT05YTUwsCi0vKiAweDEwICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUws
IEJUX05PTlhNTCwKLS8qIDB4MTQgKi8gQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJUX05PTlhNTCwg
QlRfTk9OWE1MLAotLyogMHgxOCAqLyBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBC
VF9OT05YTUwsCi0vKiAweDFDICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsIEJU
X05PTlhNTCwKLS8qIDB4MjAgKi8gQlRfUywgQlRfRVhDTCwgQlRfUVVPVCwgQlRfTlVNLAotLyog
MHgyNCAqLyBCVF9PVEhFUiwgQlRfUEVSQ05ULCBCVF9BTVAsIEJUX0FQT1MsCi0vKiAweDI4ICov
IEJUX0xQQVIsIEJUX1JQQVIsIEJUX0FTVCwgQlRfUExVUywKLS8qIDB4MkMgKi8gQlRfQ09NTUEs
IEJUX01JTlVTLCBCVF9OQU1FLCBCVF9TT0wsCi0vKiAweDMwICovIEJUX0RJR0lULCBCVF9ESUdJ
VCwgQlRfRElHSVQsIEJUX0RJR0lULAotLyogMHgzNCAqLyBCVF9ESUdJVCwgQlRfRElHSVQsIEJU
X0RJR0lULCBCVF9ESUdJVCwKLS8qIDB4MzggKi8gQlRfRElHSVQsIEJUX0RJR0lULCBCVF9DT0xP
TiwgQlRfU0VNSSwKLS8qIDB4M0MgKi8gQlRfTFQsIEJUX0VRVUFMUywgQlRfR1QsIEJUX1FVRVNU
LAotLyogMHg0MCAqLyBCVF9PVEhFUiwgQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwKLS8qIDB4NDQg
Ki8gQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwgQlRfTk1TVFJULAotLyogMHg0OCAqLyBCVF9OTVNU
UlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCi0vKiAweDRDICovIEJUX05NU1RS
VCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKLS8qIDB4NTAgKi8gQlRfTk1TVFJU
LCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAotLyogMHg1NCAqLyBCVF9OTVNUUlQs
IEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCi0vKiAweDU4ICovIEJUX05NU1RSVCwg
QlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX0xTUUIsCi0vKiAweDVDICovIEJUX09USEVSLCBCVF9S
U1FCLCBCVF9PVEhFUiwgQlRfTk1TVFJULAotLyogMHg2MCAqLyBCVF9PVEhFUiwgQlRfSEVYLCBC
VF9IRVgsIEJUX0hFWCwKLS8qIDB4NjQgKi8gQlRfSEVYLCBCVF9IRVgsIEJUX0hFWCwgQlRfTk1T
VFJULAotLyogMHg2OCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNU
UlQsCi0vKiAweDZDICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RS
VCwKLS8qIDB4NzAgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJU
LAotLyogMHg3NCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQs
Ci0vKiAweDc4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX09USEVSLAot
LyogMHg3QyAqLyBCVF9WRVJCQVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi9pbnRlcm5hbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvaW50ZXJuYWwuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZGQ1NDU0ODMxZGEyYjRlOGYzYTg0MDZhMmE3YzcyY2M3OWM2NTM5
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9p
bnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogaW50ZXJuYWwuaAot
Ci0gICBJbnRlcm5hbCBkZWZpbml0aW9ucyB1c2VkIGJ5IEV4cGF0LiAgVGhpcyBpcyBub3QgbmVl
ZGVkIHRvIGNvbXBpbGUKLSAgIGNsaWVudCBjb2RlLgotCi0gICBUaGUgZm9sbG93aW5nIGNhbGxp
bmcgY29udmVudGlvbiBtYWNyb3MgYXJlIGRlZmluZWQgZm9yIGZyZXF1ZW50bHkKLSAgIGNhbGxl
ZCBmdW5jdGlvbnM6Ci0KLSAgIEZBU1RDQUxMICAgIC0gVXNlZCBmb3IgdGhvc2UgaW50ZXJuYWwg
ZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIHNpbXBsZQotICAgICAgICAgICAgICAgICBib2R5IGFuZCBh
IGxvdyBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCBsb2NhbCB2YXJpYWJsZXMuCi0KLSAgIFBUUkNB
TEwgICAgIC0gVXNlZCBmb3IgZnVuY3Rpb25zIGNhbGxlZCB0aG91Z2ggZnVuY3Rpb24gcG9pbnRl
cnMuCi0KLSAgIFBUUkZBU1RDQUxMIC0gTGlrZSBQVFJDQUxMLCBidXQgZm9yIGxvdyBudW1iZXIg
b2YgYXJndW1lbnRzLgotCi0gICBpbmxpbmUgICAgICAtIFVzZWQgZm9yIHNlbGVjdGVkIGludGVy
bmFsIGZ1bmN0aW9ucyBmb3Igd2hpY2ggaW5saW5pbmcKLSAgICAgICAgICAgICAgICAgbWF5IGlt
cHJvdmUgcGVyZm9ybWFuY2Ugb24gc29tZSBwbGF0Zm9ybXMuCi0KLSAgIE5vdGU6IFVzZSBvZiB0
aGVzZSBtYWNyb3MgaXMgYmFzZWQgb24ganVkZ2VtZW50LCBub3QgaGFyZCBydWxlcywKLSAgICAg
ICAgIGFuZCB0aGVyZWZvcmUgc3ViamVjdCB0byBjaGFuZ2UuCi0qLwotCi0jaWYgZGVmaW5lZChf
X0dOVUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCi0v
KiBXZSdsbCB1c2UgdGhpcyB2ZXJzaW9uIGJ5IGRlZmF1bHQgb25seSB3aGVyZSB3ZSBrbm93IGl0
IGhlbHBzLgotCi0gICByZWdwYXJtKCkgZ2VuZXJhdGVzIHdhcm5pbmdzIG9uIFNvbGFyaXMgYm94
ZXMuICAgU2VlIFNGIGJ1ZyAjNjkyODc4LgotCi0gICBJbnN0YWJpbGl0eSByZXBvcnRlZCB3aXRo
IGVnY3Mgb24gYSBSZWRIYXQgTGludXggNy4zLgotICAgTGV0J3MgY29tbWVudCBvdXQ6Ci0gICAj
ZGVmaW5lIEZBU1RDQUxMIF9fYXR0cmlidXRlX18oKHN0ZGNhbGwsIHJlZ3Bhcm0oMykpKQotICAg
YW5kIGxldCdzIHRyeSB0aGlzOgotKi8KLSNkZWZpbmUgRkFTVENBTEwgX19hdHRyaWJ1dGVfXygo
cmVncGFybSgzKSkpCi0jZGVmaW5lIFBUUkZBU1RDQUxMIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o
MykpKQotI2VuZGlmCi0KLS8qIFVzaW5nIF9fZmFzdGNhbGwgc2VlbXMgdG8gaGF2ZSBhbiB1bmV4
cGVjdGVkIG5lZ2F0aXZlIGVmZmVjdCB1bmRlcgotICAgTVMgVkMrKywgZXNwZWNpYWxseSBmb3Ig
ZnVuY3Rpb24gcG9pbnRlcnMsIHNvIHdlIHdvbid0IHVzZSBpdCBmb3IKLSAgIG5vdyBvbiB0aGF0
IHBsYXRmb3JtLiBJdCBtYXkgYmUgcmVjb25zaWRlcmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlCi0g
ICBpZiBpdCBjYW4gYmUgbWFkZSBtb3JlIGVmZmVjdGl2ZS4KLSAgIExpa2VseSByZWFzb246IF9f
ZmFzdGNhbGwgb24gV2luZG93cyBpcyBsaWtlIHN0ZGNhbGwsIHRoZXJlZm9yZQotICAgdGhlIGNv
bXBpbGVyIGNhbm5vdCBwZXJmb3JtIHN0YWNrIG9wdGltaXphdGlvbnMgZm9yIGNhbGwgY2x1c3Rl
cnMuCi0qLwotCi0vKiBNYWtlIHN1cmUgYWxsIG9mIHRoZXNlIGFyZSBkZWZpbmVkIGlmIHRoZXkg
YXJlbid0IGFscmVhZHkuICovCi0KLSNpZm5kZWYgRkFTVENBTEwKLSNkZWZpbmUgRkFTVENBTEwK
LSNlbmRpZgotCi0jaWZuZGVmIFBUUkNBTEwKLSNkZWZpbmUgUFRSQ0FMTAotI2VuZGlmCi0KLSNp
Zm5kZWYgUFRSRkFTVENBTEwKLSNkZWZpbmUgUFRSRkFTVENBTEwKLSNlbmRpZgotCi0jaWZuZGVm
IFhNTF9NSU5fU0laRQotI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVmaW5lZChpbmxp
bmUpCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZW5kaWYgLyog
X19HTlVDX18gKi8KLSNlbmRpZgotI2VuZGlmIC8qIFhNTF9NSU5fU0laRSAqLwotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSNkZWZpbmUgaW5saW5lIGlubGluZQotI2Vsc2UKLSNpZm5kZWYgaW5saW5l
Ci0jZGVmaW5lIGlubGluZQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL2xhdGlu
MXRhYi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9l
eHBhdC9maWxlcy9saWIvbGF0aW4xdGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDUzYzI1ZDc2YjI2ODEzNjAwNzc2NDBlZTMyZDA3ZjFhN2FhYTNhZTcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGF0aW4xdGFiLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhh
aSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCi0gICBTZWUgdGhlIGZpbGUgQ09QWUlO
RyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgotKi8KLQotLyogMHg4MCAqLyBCVF9PVEhFUiwgQlRf
T1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKLS8qIDB4ODQgKi8gQlRfT1RIRVIsIEJUX09USEVS
LCBCVF9PVEhFUiwgQlRfT1RIRVIsCi0vKiAweDg4ICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRf
T1RIRVIsIEJUX09USEVSLAotLyogMHg4QyAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVS
LCBCVF9PVEhFUiwKLS8qIDB4OTAgKi8gQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRf
T1RIRVIsCi0vKiAweDk0ICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVS
LAotLyogMHg5OCAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKLS8q
IDB4OUMgKi8gQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCi0vKiAweEEw
ICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLAotLyogMHhBNCAqLyBC
VF9PVEhFUiwgQlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKLS8qIDB4QTggKi8gQlRfT1RI
RVIsIEJUX09USEVSLCBCVF9OTVNUUlQsIEJUX09USEVSLAotLyogMHhBQyAqLyBCVF9PVEhFUiwg
QlRfT1RIRVIsIEJUX09USEVSLCBCVF9PVEhFUiwKLS8qIDB4QjAgKi8gQlRfT1RIRVIsIEJUX09U
SEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIsCi0vKiAweEI0ICovIEJUX09USEVSLCBCVF9OTVNUUlQs
IEJUX09USEVSLCBCVF9OQU1FLAotLyogMHhCOCAqLyBCVF9PVEhFUiwgQlRfT1RIRVIsIEJUX05N
U1RSVCwgQlRfT1RIRVIsCi0vKiAweEJDICovIEJUX09USEVSLCBCVF9PVEhFUiwgQlRfT1RIRVIs
IEJUX09USEVSLAotLyogMHhDMCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBC
VF9OTVNUUlQsCi0vKiAweEM0ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJU
X05NU1RSVCwKLS8qIDB4QzggKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRf
Tk1TVFJULAotLyogMHhDQyAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9O
TVNUUlQsCi0vKiAweEQwICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05N
U1RSVCwKLS8qIDB4RDQgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfT1RI
RVIsCi0vKiAweEQ4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RS
VCwKLS8qIDB4REMgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJU
LAotLyogMHhFMCAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQs
Ci0vKiAweEU0ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwK
LS8qIDB4RTggKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULAot
LyogMHhFQyAqLyBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsCi0v
KiAweEYwICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKLS8q
IDB4RjQgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfT1RIRVIsCi0vKiAw
eEY4ICovIEJUX05NU1RSVCwgQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwKLS8qIDB4
RkMgKi8gQlRfTk1TVFJULCBCVF9OTVNUUlQsIEJUX05NU1RSVCwgQlRfTk1TVFJULApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9maWxlcy9saWIvbGliZXhwYXQuZGVmIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbGliZXhwYXQuZGVmCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzOTIwYmJjZjkwMTY0Y2RmOWQxNWNkODQ1NzA2M2UyNmQwYjI4
YmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGli
L2xpYmV4cGF0LmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTsgREVGIGZpbGUg
Zm9yIE1TIFZDKysKLQotTElCUkFSWQotRVhQT1JUUwotICBYTUxfRGVmYXVsdEN1cnJlbnQgQDEK
LSAgWE1MX0Vycm9yU3RyaW5nIEAyCi0gIFhNTF9FeHBhdFZlcnNpb24gQDMKLSAgWE1MX0V4cGF0
VmVyc2lvbkluZm8gQDQKLSAgWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlIEA1Ci0gIFhN
TF9HZXRCYXNlIEA2Ci0gIFhNTF9HZXRCdWZmZXIgQDcKLSAgWE1MX0dldEN1cnJlbnRCeXRlQ291
bnQgQDgKLSAgWE1MX0dldEN1cnJlbnRCeXRlSW5kZXggQDkKLSAgWE1MX0dldEN1cnJlbnRDb2x1
bW5OdW1iZXIgQDEwCi0gIFhNTF9HZXRDdXJyZW50TGluZU51bWJlciBAMTEKLSAgWE1MX0dldEVy
cm9yQ29kZSBAMTIKLSAgWE1MX0dldElkQXR0cmlidXRlSW5kZXggQDEzCi0gIFhNTF9HZXRJbnB1
dENvbnRleHQgQDE0Ci0gIFhNTF9HZXRTcGVjaWZpZWRBdHRyaWJ1dGVDb3VudCBAMTUKLSAgWE1M
X1BhcnNlIEAxNgotICBYTUxfUGFyc2VCdWZmZXIgQDE3Ci0gIFhNTF9QYXJzZXJDcmVhdGUgQDE4
Ci0gIFhNTF9QYXJzZXJDcmVhdGVOUyBAMTkKLSAgWE1MX1BhcnNlckNyZWF0ZV9NTSBAMjAKLSAg
WE1MX1BhcnNlckZyZWUgQDIxCi0gIFhNTF9TZXRBdHRsaXN0RGVjbEhhbmRsZXIgQDIyCi0gIFhN
TF9TZXRCYXNlIEAyMwotICBYTUxfU2V0Q2RhdGFTZWN0aW9uSGFuZGxlciBAMjQKLSAgWE1MX1Nl
dENoYXJhY3RlckRhdGFIYW5kbGVyIEAyNQotICBYTUxfU2V0Q29tbWVudEhhbmRsZXIgQDI2Ci0g
IFhNTF9TZXREZWZhdWx0SGFuZGxlciBAMjcKLSAgWE1MX1NldERlZmF1bHRIYW5kbGVyRXhwYW5k
IEAyOAotICBYTUxfU2V0RG9jdHlwZURlY2xIYW5kbGVyIEAyOQotICBYTUxfU2V0RWxlbWVudERl
Y2xIYW5kbGVyIEAzMAotICBYTUxfU2V0RWxlbWVudEhhbmRsZXIgQDMxCi0gIFhNTF9TZXRFbmNv
ZGluZyBAMzIKLSAgWE1MX1NldEVuZENkYXRhU2VjdGlvbkhhbmRsZXIgQDMzCi0gIFhNTF9TZXRF
bmREb2N0eXBlRGVjbEhhbmRsZXIgQDM0Ci0gIFhNTF9TZXRFbmRFbGVtZW50SGFuZGxlciBAMzUK
LSAgWE1MX1NldEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyIEAzNgotICBYTUxfU2V0RW50aXR5RGVj
bEhhbmRsZXIgQDM3Ci0gIFhNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgQDM4Ci0gIFhN
TF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcgQDM5Ci0gIFhNTF9TZXROYW1lc3BhY2VE
ZWNsSGFuZGxlciBANDAKLSAgWE1MX1NldE5vdFN0YW5kYWxvbmVIYW5kbGVyIEA0MQotICBYTUxf
U2V0Tm90YXRpb25EZWNsSGFuZGxlciBANDIKLSAgWE1MX1NldFBhcmFtRW50aXR5UGFyc2luZyBA
NDMKLSAgWE1MX1NldFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgQDQ0Ci0gIFhNTF9TZXRS
ZXR1cm5OU1RyaXBsZXQgQDQ1Ci0gIFhNTF9TZXRTdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgQDQ2
Ci0gIFhNTF9TZXRTdGFydERvY3R5cGVEZWNsSGFuZGxlciBANDcKLSAgWE1MX1NldFN0YXJ0RWxl
bWVudEhhbmRsZXIgQDQ4Ci0gIFhNTF9TZXRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyIEA0OQot
ICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlciBANTAKLSAgWE1MX1NldFVucGFyc2VkRW50
aXR5RGVjbEhhbmRsZXIgQDUxCi0gIFhNTF9TZXRVc2VyRGF0YSBANTIKLSAgWE1MX1NldFhtbERl
Y2xIYW5kbGVyIEA1MwotICBYTUxfVXNlUGFyc2VyQXNIYW5kbGVyQXJnIEA1NAotOyBhZGRlZCB3
aXRoIHZlcnNpb24gMS45NS4zCi0gIFhNTF9QYXJzZXJSZXNldCBANTUKLSAgWE1MX1NldFNraXBw
ZWRFbnRpdHlIYW5kbGVyIEA1NgotOyBhZGRlZCB3aXRoIHZlcnNpb24gMS45NS41Ci0gIFhNTF9H
ZXRGZWF0dXJlTGlzdCBANTcKLSAgWE1MX1VzZUZvcmVpZ25EVEQgQDU4Ci07IGFkZGVkIHdpdGgg
dmVyc2lvbiAxLjk1LjYKLSAgWE1MX0ZyZWVDb250ZW50TW9kZWwgQDU5Ci0gIFhNTF9NZW1NYWxs
b2MgQDYwCi0gIFhNTF9NZW1SZWFsbG9jIEA2MQotICBYTUxfTWVtRnJlZSBANjIKLTsgYWRkZWQg
d2l0aCB2ZXJzaW9uIDEuOTUuOAotICBYTUxfU3RvcFBhcnNlciBANjMKLSAgWE1MX1Jlc3VtZVBh
cnNlciBANjQKLSAgWE1MX0dldFBhcnNpbmdTdGF0dXMgQDY1CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9s
aWJleHBhdHcuZGVmIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9maWxlcy9saWIvbGliZXhwYXR3LmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzkyMGJiY2Y5MDE2NGNkZjlkMTVjZDg0NTcwNjNlMjZkMGIyOGJiNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9saWJleHBhdHcu
ZGVmCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotOyBERUYgZmlsZSBmb3IgTVMgVkMr
KwotCi1MSUJSQVJZCi1FWFBPUlRTCi0gIFhNTF9EZWZhdWx0Q3VycmVudCBAMQotICBYTUxfRXJy
b3JTdHJpbmcgQDIKLSAgWE1MX0V4cGF0VmVyc2lvbiBAMwotICBYTUxfRXhwYXRWZXJzaW9uSW5m
byBANAotICBYTUxfRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUgQDUKLSAgWE1MX0dldEJhc2Ug
QDYKLSAgWE1MX0dldEJ1ZmZlciBANwotICBYTUxfR2V0Q3VycmVudEJ5dGVDb3VudCBAOAotICBY
TUxfR2V0Q3VycmVudEJ5dGVJbmRleCBAOQotICBYTUxfR2V0Q3VycmVudENvbHVtbk51bWJlciBA
MTAKLSAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyIEAxMQotICBYTUxfR2V0RXJyb3JDb2RlIEAx
MgotICBYTUxfR2V0SWRBdHRyaWJ1dGVJbmRleCBAMTMKLSAgWE1MX0dldElucHV0Q29udGV4dCBA
MTQKLSAgWE1MX0dldFNwZWNpZmllZEF0dHJpYnV0ZUNvdW50IEAxNQotICBYTUxfUGFyc2UgQDE2
Ci0gIFhNTF9QYXJzZUJ1ZmZlciBAMTcKLSAgWE1MX1BhcnNlckNyZWF0ZSBAMTgKLSAgWE1MX1Bh
cnNlckNyZWF0ZU5TIEAxOQotICBYTUxfUGFyc2VyQ3JlYXRlX01NIEAyMAotICBYTUxfUGFyc2Vy
RnJlZSBAMjEKLSAgWE1MX1NldEF0dGxpc3REZWNsSGFuZGxlciBAMjIKLSAgWE1MX1NldEJhc2Ug
QDIzCi0gIFhNTF9TZXRDZGF0YVNlY3Rpb25IYW5kbGVyIEAyNAotICBYTUxfU2V0Q2hhcmFjdGVy
RGF0YUhhbmRsZXIgQDI1Ci0gIFhNTF9TZXRDb21tZW50SGFuZGxlciBAMjYKLSAgWE1MX1NldERl
ZmF1bHRIYW5kbGVyIEAyNwotICBYTUxfU2V0RGVmYXVsdEhhbmRsZXJFeHBhbmQgQDI4Ci0gIFhN
TF9TZXREb2N0eXBlRGVjbEhhbmRsZXIgQDI5Ci0gIFhNTF9TZXRFbGVtZW50RGVjbEhhbmRsZXIg
QDMwCi0gIFhNTF9TZXRFbGVtZW50SGFuZGxlciBAMzEKLSAgWE1MX1NldEVuY29kaW5nIEAzMgot
ICBYTUxfU2V0RW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBAMzMKLSAgWE1MX1NldEVuZERvY3R5cGVE
ZWNsSGFuZGxlciBAMzQKLSAgWE1MX1NldEVuZEVsZW1lbnRIYW5kbGVyIEAzNQotICBYTUxfU2V0
RW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgQDM2Ci0gIFhNTF9TZXRFbnRpdHlEZWNsSGFuZGxlciBA
MzcKLSAgWE1MX1NldEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBAMzgKLSAgWE1MX1NldEV4dGVy
bmFsRW50aXR5UmVmSGFuZGxlckFyZyBAMzkKLSAgWE1MX1NldE5hbWVzcGFjZURlY2xIYW5kbGVy
IEA0MAotICBYTUxfU2V0Tm90U3RhbmRhbG9uZUhhbmRsZXIgQDQxCi0gIFhNTF9TZXROb3RhdGlv
bkRlY2xIYW5kbGVyIEA0MgotICBYTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nIEA0MwotICBYTUxf
U2V0UHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciBANDQKLSAgWE1MX1NldFJldHVybk5TVHJp
cGxldCBANDUKLSAgWE1MX1NldFN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciBANDYKLSAgWE1MX1Nl
dFN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIEA0NwotICBYTUxfU2V0U3RhcnRFbGVtZW50SGFuZGxl
ciBANDgKLSAgWE1MX1NldFN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgQDQ5Ci0gIFhNTF9TZXRV
bmtub3duRW5jb2RpbmdIYW5kbGVyIEA1MAotICBYTUxfU2V0VW5wYXJzZWRFbnRpdHlEZWNsSGFu
ZGxlciBANTEKLSAgWE1MX1NldFVzZXJEYXRhIEA1MgotICBYTUxfU2V0WG1sRGVjbEhhbmRsZXIg
QDUzCi0gIFhNTF9Vc2VQYXJzZXJBc0hhbmRsZXJBcmcgQDU0Ci07IGFkZGVkIHdpdGggdmVyc2lv
biAxLjk1LjMKLSAgWE1MX1BhcnNlclJlc2V0IEA1NQotICBYTUxfU2V0U2tpcHBlZEVudGl0eUhh
bmRsZXIgQDU2Ci07IGFkZGVkIHdpdGggdmVyc2lvbiAxLjk1LjUKLSAgWE1MX0dldEZlYXR1cmVM
aXN0IEA1NwotICBYTUxfVXNlRm9yZWlnbkRURCBANTgKLTsgYWRkZWQgd2l0aCB2ZXJzaW9uIDEu
OTUuNgotICBYTUxfRnJlZUNvbnRlbnRNb2RlbCBANTkKLSAgWE1MX01lbU1hbGxvYyBANjAKLSAg
WE1MX01lbVJlYWxsb2MgQDYxCi0gIFhNTF9NZW1GcmVlIEA2MgotOyBhZGRlZCB3aXRoIHZlcnNp
b24gMS45NS44Ci0gIFhNTF9TdG9wUGFyc2VyIEA2MwotICBYTUxfUmVzdW1lUGFyc2VyIEA2NAot
ICBYTUxfR2V0UGFyc2luZ1N0YXR1cyBANjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL21hY2NvbmZpZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvbWFjY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MjVj
YWFmNTRhMmUyZTJlOWQ1M2Y1NDk2OTZkZTM1NGZjMWZmNTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbWFjY29uZmlnLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MyArMCwwIEBACi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoqIENvcHlyaWdodCAyMDAwLCBDbGFyayBD
b29wZXIKLSoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKgotKiogVGhpcyBpcyBmcmVlIHNvZnR3
YXJlLiBZb3UgYXJlIHBlcm1pdHRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBtb2RpZnkKLSoq
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUL1ggbGljZW5zZSAoY29udGFpbmVkIGluIHRo
ZSBDT1BZSU5HIGZpbGUKLSoqIHdpdGggdGhpcyBkaXN0cmlidXRpb24uKQotKioKLSovCi0KLSNp
Zm5kZWYgTUFDQ09ORklHX0gKLSNkZWZpbmUgTUFDQ09ORklHX0gKLQotCi0vKiAxMjM0ID0gTElM
X0VORElBTiwgNDMyMSA9IEJJR0VORElBTiAqLwotI2RlZmluZSBCWVRFT1JERVIgIDQzMjEKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCi0jdW5k
ZWYgSEFWRV9CQ09QWQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUn
IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUKLQotLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gKi8KLSN1bmRlZiBIQVZFX01N
QVAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZp
bGUuICovCi0jdW5kZWYgSEFWRV9VTklTVERfSAotCi0vKiB3aGV0aGVyIGJ5dGVvcmRlciBpcyBi
aWdlbmRpYW4gKi8KLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOCi0KLS8qIERlZmluZSB0byBzcGVj
aWZ5IGhvdyBtdWNoIGNvbnRleHQgdG8gcmV0YWluIGFyb3VuZCB0aGUgY3VycmVudCBwYXJzZQot
ICAgcG9pbnQuICovCi0jdW5kZWYgWE1MX0NPTlRFWFRfQllURVMKLQotLyogRGVmaW5lIHRvIG1h
a2UgcGFyYW1ldGVyIGVudGl0eSBwYXJzaW5nIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlLiAqLwot
I2RlZmluZSBYTUxfRFRECi0KLS8qIERlZmluZSB0byBtYWtlIFhNTCBOYW1lc3BhY2VzIGZ1bmN0
aW9uYWxpdHkgYXZhaWxhYmxlLiAqLwotI2RlZmluZSBYTUxfTlMKLQotLyogRGVmaW5lIHRvIGVt
cHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCi0jdW5kZWYgY29u
c3QKLQotLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmlu
ZS4gKi8KLSNkZWZpbmUgb2ZmX3QgIGxvbmcKLQotLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYg
PHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jdW5kZWYgc2l6ZV90Ci0KLQotI2Vu
ZGlmIC8qIGlmbmRlZiBNQUNDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvbmFtZXRhYi5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9m
aWxlcy9saWIvbmFtZXRhYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDVlNjJj
NzdhNmM2MjRhNjgyOGRkM2Y0ZTI1YmE4ZmU4NDFlN2EwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL25hbWV0YWIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE1MCArMCwwIEBACi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbmFtaW5nQml0bWFwW10gPSB7
Ci0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotMHgwMDAw
MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLTB4RkZGRkZGRkYsIDB4
RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0weEZGRkZGRkZGLCAweEZGRkZGRkZG
LCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotMHgwMDAwMDAwMCwgMHgwNDAwMDAwMCwgMHg4N0ZG
RkZGRSwgMHgwN0ZGRkZGRSwKLTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4RkY3RkZGRkYsIDB4
RkY3RkZGRkYsCi0weEZGRkZGRkZGLCAweDdGRjNGRkZGLCAweEZGRkZGREZFLCAweDdGRkZGRkZG
LAotMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRTAwRiwgMHhGQzMxRkZGRiwKLTB4MDBG
RkZGRkYsIDB4MDAwMDAwMDAsIDB4RkZGRjAwMDAsIDB4RkZGRkZGRkYsCi0weEZGRkZGRkZGLCAw
eEY4MDAwMUZGLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLAotMHgwMDAwMDAwMCwgMHgwMDAwMDAw
MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLTB4RkZGRkQ3NDAsIDB4RkZGRkZGRkIsIDB4NTQ3
RjdGRkYsIDB4MDAwRkZGRkQsCi0weEZGRkZERkZFLCAweEZGRkZGRkZGLCAweERGRkVGRkZGLCAw
eEZGRkZGRkZGLAotMHhGRkZGMDAwMywgMHhGRkZGRkZGRiwgMHhGRkZGMTk5RiwgMHgwMzNGQ0ZG
RiwKLTB4MDAwMDAwMDAsIDB4RkZGRTAwMDAsIDB4MDI3RkZGRkYsIDB4RkZGRkZGRkUsCi0weDAw
MDAwMDdGLCAweDAwMDAwMDAwLCAweEZGRkYwMDAwLCAweDAwMDcwN0ZGLAotMHgwMDAwMDAwMCwg
MHgwN0ZGRkZGRSwgMHgwMDAwMDdGRSwgMHhGRkZFMDAwMCwKLTB4RkZGRkZGRkYsIDB4N0NGRkZG
RkYsIDB4MDAyRjdGRkYsIDB4MDAwMDAwNjAsCi0weEZGRkZGRkUwLCAweDIzRkZGRkZGLCAweEZG
MDAwMDAwLCAweDAwMDAwMDAzLAotMHhGRkY5OUZFMCwgMHgwM0M1RkRGRiwgMHhCMDAwMDAwMCwg
MHgwMDAzMDAwMywKLTB4RkZGOTg3RTAsIDB4MDM2REZERkYsIDB4NUUwMDAwMDAsIDB4MDAxQzAw
MDAsCi0weEZGRkJBRkUwLCAweDIzRURGREZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxLAotMHhG
RkY5OUZFMCwgMHgyM0NERkRGRiwgMHhCMDAwMDAwMCwgMHgwMDAwMDAwMywKLTB4RDYzREM3RTAs
IDB4MDNCRkM3MTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0weEZGRkRERkUwLCAweDAzRUZG
REZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzLAotMHhGRkZEREZFMCwgMHgwM0VGRkRGRiwgMHg0
MDAwMDAwMCwgMHgwMDAwMDAwMywKLTB4RkZGRERGRTAsIDB4MDNGRkZERkYsIDB4MDAwMDAwMDAs
IDB4MDAwMDAwMDMsCi0weDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAw
MDAwLAotMHhGRkZGRkZGRSwgMHgwMDBEN0ZGRiwgMHgwMDAwMDAzRiwgMHgwMDAwMDAwMCwKLTB4
RkVGMDI1OTYsIDB4MjAwRDZDQUUsIDB4MDAwMDAwMUYsIDB4MDAwMDAwMDAsCi0weDAwMDAwMDAw
LCAweDAwMDAwMDAwLCAweEZGRkZGRUZGLCAweDAwMDAwM0ZGLAotMHgwMDAwMDAwMCwgMHgwMDAw
MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4
MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLCAweEZGRkZGRkZGLCAweEZGRkYwMDNG
LCAweDAwN0ZGRkZGLAotMHgwMDA3REFFRCwgMHg1MDAwMDAwMCwgMHg4MjMxNTAwMSwgMHgwMDJD
NjJBQiwKLTB4NDAwMDAwMDAsIDB4RjU4MEM5MDAsIDB4MDAwMDAwMDcsIDB4MDIwMTA4MDAsCi0w
eEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotMHgwRkZGRkZG
RiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHgwM0ZGRkZGRiwKLTB4M0YzRkZGRkYsIDB4RkZG
RkZGRkYsIDB4QUFGRjNGM0YsIDB4M0ZGRkZGRkYsCi0weEZGRkZGRkZGLCAweDVGREZGRkZGLCAw
eDBGQ0YxRkRDLCAweDFGREMxRkZGLAotMHgwMDAwMDAwMCwgMHgwMDAwNEM0MCwgMHgwMDAwMDAw
MCwgMHgwMDAwMDAwMCwKLTB4MDAwMDAwMDcsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAw
MDAwMDAsCi0weDAwMDAwMDgwLCAweDAwMDAwM0ZFLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAot
MHgwMDFGRkZGRiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRiwgMHgwN0ZGRkZGRiwKLTB4RkZGRkZG
RTAsIDB4MDAwMDFGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0weDAwMDAwMDAwLCAweDAw
MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwg
MHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKLTB4RkZGRkZGRkYsIDB4MDAwMDAwM0YsIDB4MDAwMDAw
MDAsIDB4MDAwMDAwMDAsCi0weEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZG
RkZGRkZGLAotMHhGRkZGRkZGRiwgMHgwMDAwMDAwRiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwK
LTB4MDAwMDAwMDAsIDB4MDdGRjYwMDAsIDB4ODdGRkZGRkUsIDB4MDdGRkZGRkUsCi0weDAwMDAw
MDAwLCAweDAwODAwMDAwLCAweEZGN0ZGRkZGLCAweEZGN0ZGRkZGLAotMHgwMEZGRkZGRiwgMHgw
MDAwMDAwMCwgMHhGRkZGMDAwMCwgMHhGRkZGRkZGRiwKLTB4RkZGRkZGRkYsIDB4RjgwMDAxRkYs
IDB4MDAwMzAwMDMsIDB4MDAwMDAwMDAsCi0weEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAw
MDNGLCAweDAwMDAwMDAzLAotMHhGRkZGRDdDMCwgMHhGRkZGRkZGQiwgMHg1NDdGN0ZGRiwgMHgw
MDBGRkZGRCwKLTB4RkZGRkRGRkUsIDB4RkZGRkZGRkYsIDB4REZGRUZGRkYsIDB4RkZGRkZGRkYs
Ci0weEZGRkYwMDdCLCAweEZGRkZGRkZGLCAweEZGRkYxOTlGLCAweDAzM0ZDRkZGLAotMHgwMDAw
MDAwMCwgMHhGRkZFMDAwMCwgMHgwMjdGRkZGRiwgMHhGRkZGRkZGRSwKLTB4RkZGRTAwN0YsIDB4
QkJGRkZGRkIsIDB4RkZGRjAwMTYsIDB4MDAwNzA3RkYsCi0weDAwMDAwMDAwLCAweDA3RkZGRkZF
LCAweDAwMDdGRkZGLCAweEZGRkYwM0ZGLAotMHhGRkZGRkZGRiwgMHg3Q0ZGRkZGRiwgMHhGRkVG
N0ZGRiwgMHgwM0ZGM0RGRiwKLTB4RkZGRkZGRUUsIDB4RjNGRkZGRkYsIDB4RkYxRTNGRkYsIDB4
MDAwMEZGQ0YsCi0weEZGRjk5RkVFLCAweEQzQzVGREZGLCAweEIwODAzOTlGLCAweDAwMDNGRkNG
LAotMHhGRkY5ODdFNCwgMHhEMzZERkRGRiwgMHg1RTAwMzk4NywgMHgwMDFGRkZDMCwKLTB4RkZG
QkFGRUUsIDB4RjNFREZERkYsIDB4MDAwMDNCQkYsIDB4MDAwMEZGQzEsCi0weEZGRjk5RkVFLCAw
eEYzQ0RGREZGLCAweEIwQzAzOThGLCAweDAwMDBGRkMzLAotMHhENjNEQzdFQywgMHhDM0JGQzcx
OCwgMHgwMDgwM0RDNywgMHgwMDAwRkY4MCwKLTB4RkZGRERGRUUsIDB4QzNFRkZERkYsIDB4MDA2
MDNEREYsIDB4MDAwMEZGQzMsCi0weEZGRkRERkVDLCAweEMzRUZGREZGLCAweDQwNjAzRERGLCAw
eDAwMDBGRkMzLAotMHhGRkZEREZFQywgMHhDM0ZGRkRGRiwgMHgwMDgwM0RDRiwgMHgwMDAwRkZD
MywKLTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0weEZG
RkZGRkZFLCAweDA3RkY3RkZGLCAweDAzRkY3RkZGLCAweDAwMDAwMDAwLAotMHhGRUYwMjU5Niwg
MHgzQkZGNkNBRSwgMHgwM0ZGM0Y1RiwgMHgwMDAwMDAwMCwKLTB4MDMwMDAwMDAsIDB4QzJBMDAz
RkYsIDB4RkZGRkZFRkYsIDB4RkZGRTAzRkYsCi0weEZFQkYwRkRGLCAweDAyRkUzRkZGLCAweDAw
MDAwMDAwLCAweDAwMDAwMDAwLAotMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwg
MHgwMDAwMDAwMCwKLTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MUZGRjAwMDAsIDB4MDAwMDAw
MDIsCi0weDAwMDAwMEEwLCAweDAwM0VGRkZFLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGLAotMHg2
NjFGRkZGRiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRiwgMHg3N0ZGRkZGRiwKLX07Ci1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBubXN0cnRQYWdlc1tdID0gewotMHgwMiwgMHgwMywgMHgwNCwg
MHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwMCwKLTB4MDAsIDB4MDksIDB4MEEsIDB4MEIsIDB4
MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0weDEwLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwg
MHgxMywKLTB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0w
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgxNSwgMHgx
NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAot
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwK
LTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MTcsCi0weDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
Ci0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDE4LAotMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmFtZVBhZ2VzW10gPSB7
Ci0weDE5LCAweDAzLCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDAwLAotMHgwMCwg
MHgxRiwgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwKLTB4MTAsIDB4MTEsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDEyLCAweDEzLAotMHgyNiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0weDI3LCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0weDAx
LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAxLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgxNywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0weDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwKLTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MTgsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi91dGY4
dGFiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi91dGY4dGFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdi
YjNlNzc2MDNmYTc1N2EwYjIxMGI4NTM4NTk2MzkyYTZkZGMyNTcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvdXRmOHRhYi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzcgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3Bl
biBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAotICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9y
IGNvcHlpbmcgcGVybWlzc2lvbi4KLSovCi0KLQotLyogMHg4MCAqLyBCVF9UUkFJTCwgQlRfVFJB
SUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKLS8qIDB4ODQgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBC
VF9UUkFJTCwgQlRfVFJBSUwsCi0vKiAweDg4ICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJB
SUwsIEJUX1RSQUlMLAotLyogMHg4QyAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBC
VF9UUkFJTCwKLS8qIDB4OTAgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJB
SUwsCi0vKiAweDk0ICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAot
LyogMHg5OCAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKLS8qIDB4
OUMgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCi0vKiAweEEwICov
IEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAotLyogMHhBNCAqLyBCVF9U
UkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9UUkFJTCwKLS8qIDB4QTggKi8gQlRfVFJBSUws
IEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUwsCi0vKiAweEFDICovIEJUX1RSQUlMLCBCVF9U
UkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLAotLyogMHhCMCAqLyBCVF9UUkFJTCwgQlRfVFJBSUws
IEJUX1RSQUlMLCBCVF9UUkFJTCwKLS8qIDB4QjQgKi8gQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9U
UkFJTCwgQlRfVFJBSUwsCi0vKiAweEI4ICovIEJUX1RSQUlMLCBCVF9UUkFJTCwgQlRfVFJBSUws
IEJUX1RSQUlMLAotLyogMHhCQyAqLyBCVF9UUkFJTCwgQlRfVFJBSUwsIEJUX1RSQUlMLCBCVF9U
UkFJTCwKLS8qIDB4QzAgKi8gQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIs
Ci0vKiAweEM0ICovIEJUX0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xFQUQyLAotLyog
MHhDOCAqLyBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwKLS8qIDB4Q0Mg
Ki8gQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsCi0vKiAweEQwICovIEJU
X0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsIEJUX0xFQUQyLAotLyogMHhENCAqLyBCVF9MRUFE
MiwgQlRfTEVBRDIsIEJUX0xFQUQyLCBCVF9MRUFEMiwKLS8qIDB4RDggKi8gQlRfTEVBRDIsIEJU
X0xFQUQyLCBCVF9MRUFEMiwgQlRfTEVBRDIsCi0vKiAweERDICovIEJUX0xFQUQyLCBCVF9MRUFE
MiwgQlRfTEVBRDIsIEJUX0xFQUQyLAotLyogMHhFMCAqLyBCVF9MRUFEMywgQlRfTEVBRDMsIEJU
X0xFQUQzLCBCVF9MRUFEMywKLS8qIDB4RTQgKi8gQlRfTEVBRDMsIEJUX0xFQUQzLCBCVF9MRUFE
MywgQlRfTEVBRDMsCi0vKiAweEU4ICovIEJUX0xFQUQzLCBCVF9MRUFEMywgQlRfTEVBRDMsIEJU
X0xFQUQzLAotLyogMHhFQyAqLyBCVF9MRUFEMywgQlRfTEVBRDMsIEJUX0xFQUQzLCBCVF9MRUFE
MywKLS8qIDB4RjAgKi8gQlRfTEVBRDQsIEJUX0xFQUQ0LCBCVF9MRUFENCwgQlRfTEVBRDQsCi0v
KiAweEY0ICovIEJUX0xFQUQ0LCBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLAotLyog
MHhGOCAqLyBCVF9OT05YTUwsIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9OT05YTUwsCi0vKiAw
eEZDICovIEJUX05PTlhNTCwgQlRfTk9OWE1MLCBCVF9NQUxGT1JNLCBCVF9NQUxGT1JNLApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9l
eHBhdC9maWxlcy9saWIvd2luY29uZmlnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi93aW5jb25maWcuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMGYxNmJhNWI5Y2Y0NjI3NmJlMzMyMmIxMzdiNmEwNTk3OGU4
ZjljNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xp
Yi93aW5jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
KiogQ29weXJpZ2h0IDIwMDAsIENsYXJrIENvb3BlcgotKiogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSoqCi0qKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBhcmUgcGVybWl0dGVkIHRvIGNvcHks
IGRpc3RyaWJ1dGUsIG9yIG1vZGlmeQotKiogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQv
WCBsaWNlbnNlIChjb250YWluZWQgaW4gdGhlIENPUFlJTkcgZmlsZQotKiogd2l0aCB0aGlzIGRp
c3RyaWJ1dGlvbi4pCi0qLwotCi0jaWZuZGVmIFdJTkNPTkZJR19ICi0jZGVmaW5lIFdJTkNPTkZJ
R19ICi0KLSNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2RlZmluZSBXSU4zMl9MRUFOX0FO
RF9NRUFOCi0jZW5kaWYKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jdW5kZWYgV0lOMzJfTEVBTl9B
TkRfTUVBTgotCi0jaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNk
ZWZpbmUgWE1MX05TIDEKLSNkZWZpbmUgWE1MX0RURCAxCi0jZGVmaW5lIFhNTF9DT05URVhUX0JZ
VEVTIDEwMjQKLQotLyogd2Ugd2lsbCBhc3N1bWUgYWxsIFdpbmRvd3MgcGxhdGZvcm1zIGFyZSBs
aXR0bGUgZW5kaWFuICovCi0jZGVmaW5lIEJZVEVPUkRFUiAxMjM0Ci0KLS8qIFdpbmRvd3MgaGFz
IG1lbW1vdmUoKSBhdmFpbGFibGUuICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRQotCi0jZW5kaWYg
LyogbmRlZiBXSU5DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIvd2luY29uZmlnLmgub3Jp
Z2luYWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4
cGF0L2ZpbGVzL2xpYi93aW5jb25maWcuaC5vcmlnaW5hbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzFiNzkxZDYyZDBkMGM5NDY1NmY4ZmYyZjkxMjgyMjIxN2UwYzkwNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi93aW5jb25maWcu
aC5vcmlnaW5hbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiog
Q29weXJpZ2h0IDIwMDAsIENsYXJrIENvb3BlcgotKiogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoq
Ci0qKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUuIFlvdSBhcmUgcGVybWl0dGVkIHRvIGNvcHksIGRp
c3RyaWJ1dGUsIG9yIG1vZGlmeQotKiogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQvWCBs
aWNlbnNlIChjb250YWluZWQgaW4gdGhlIENPUFlJTkcgZmlsZQotKiogd2l0aCB0aGlzIGRpc3Ry
aWJ1dGlvbi4pCi0qLwotCi0jaWZuZGVmIFdJTkNPTkZJR19ICi0jZGVmaW5lIFdJTkNPTkZJR19I
Ci0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSN1
bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0KLSNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLQotI2RlZmluZSBYTUxfTlMgMQotI2RlZmluZSBYTUxfRFREIDEKLSNkZWZp
bmUgWE1MX0NPTlRFWFRfQllURVMgMTAyNAotCi0vKiB3ZSB3aWxsIGFzc3VtZSBhbGwgV2luZG93
cyBwbGF0Zm9ybXMgYXJlIGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUgQllURU9SREVSIDEyMzQK
LQotLyogV2luZG93cyBoYXMgbWVtbW92ZSgpIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgSEFWRV9N
RU1NT1ZFCi0KLSNlbmRpZiAvKiBuZGVmIFdJTkNPTkZJR19IICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xp
Yi94bWxwYXJzZS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9leHBhdC9maWxlcy9saWIveG1scGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWRlN2I1YmI2NjczZWVkM2ZlY2JlODMwNTZkYTNhOTA2Y2RhZmU0MS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxwYXJzZS5jCisr
KyAvZGV2L251bGwKQEAgLTEsNjQyMiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5
OTksIDIwMDAgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCi0gICBTZWUgdGhl
IGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgotKi8KLQotI2luY2x1ZGUgPHN0
ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNl
dCgpLCBtZW1jcHkoKSAqLwotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5o
PiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCi0jaW5jbHVkZSA8dGltZS5oPiAg
ICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCi0KLSNkZWZpbmUgWE1MX0JVSUxESU5H
X0VYUEFUIDEKLQotI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCi0jaW5jbHVkZSAid2luY29uZmln
LmgiCi0jZWxpZiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCi0jaW5jbHVkZSAibWFjY29uZmlnLmgi
Ci0jZWxpZiBkZWZpbmVkKF9fYW1pZ2Fvc19fKQotI2luY2x1ZGUgImFtaWdhY29uZmlnLmgiCi0j
ZWxpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKQotI2luY2x1ZGUgIndhdGNvbWNvbmZpZy5oIgotI2Vs
aWYgZGVmaW5lZChIQVZFX0VYUEFUX0NPTkZJR19IKQotI2luY2x1ZGUgPGV4cGF0X2NvbmZpZy5o
PgotI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KLQotI2luY2x1ZGUgImFzY2lp
LmgiCi0jaW5jbHVkZSAiZXhwYXQuaCIKLQotI2lmZGVmIFhNTF9VTklDT0RFCi0jZGVmaW5lIFhN
TF9FTkNPREVfTUFYIFhNTF9VVEYxNl9FTkNPREVfTUFYCi0jZGVmaW5lIFhtbENvbnZlcnQgWG1s
VXRmMTZDb252ZXJ0Ci0jZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmcgWG1sR2V0VXRmMTZJ
bnRlcm5hbEVuY29kaW5nCi0jZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmdOUyBYbWxHZXRV
dGYxNkludGVybmFsRW5jb2RpbmdOUwotI2RlZmluZSBYbWxFbmNvZGUgWG1sVXRmMTZFbmNvZGUK
LS8qIFVzaW5nIHBvaW50ZXIgc3VidHJhY3Rpb24gdG8gY29udmVydCB0byBpbnRlZ2VyIHR5cGUu
ICovCi0jZGVmaW5lIE1VU1RfQ09OVkVSVChlbmMsIHMpICghKGVuYyktPmlzVXRmMTYgfHwgKCgo
Y2hhciAqKShzKSAtIChjaGFyICopTlVMTCkgJiAxKSkKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
SUNIQVI7Ci0jZWxzZQotI2RlZmluZSBYTUxfRU5DT0RFX01BWCBYTUxfVVRGOF9FTkNPREVfTUFY
Ci0jZGVmaW5lIFhtbENvbnZlcnQgWG1sVXRmOENvbnZlcnQKLSNkZWZpbmUgWG1sR2V0SW50ZXJu
YWxFbmNvZGluZyBYbWxHZXRVdGY4SW50ZXJuYWxFbmNvZGluZwotI2RlZmluZSBYbWxHZXRJbnRl
cm5hbEVuY29kaW5nTlMgWG1sR2V0VXRmOEludGVybmFsRW5jb2RpbmdOUwotI2RlZmluZSBYbWxF
bmNvZGUgWG1sVXRmOEVuY29kZQotI2RlZmluZSBNVVNUX0NPTlZFUlQoZW5jLCBzKSAoIShlbmMp
LT5pc1V0ZjgpCi10eXBlZGVmIGNoYXIgSUNIQVI7Ci0jZW5kaWYKLQotCi0jaWZuZGVmIFhNTF9O
UwotCi0jZGVmaW5lIFhtbEluaXRFbmNvZGluZ05TIFhtbEluaXRFbmNvZGluZwotI2RlZmluZSBY
bWxJbml0VW5rbm93bkVuY29kaW5nTlMgWG1sSW5pdFVua25vd25FbmNvZGluZwotI3VuZGVmIFht
bEdldEludGVybmFsRW5jb2RpbmdOUwotI2RlZmluZSBYbWxHZXRJbnRlcm5hbEVuY29kaW5nTlMg
WG1sR2V0SW50ZXJuYWxFbmNvZGluZwotI2RlZmluZSBYbWxQYXJzZVhtbERlY2xOUyBYbWxQYXJz
ZVhtbERlY2wKLQotI2VuZGlmCi0KLSNpZmRlZiBYTUxfVU5JQ09ERQotCi0jaWZkZWYgWE1MX1VO
SUNPREVfV0NIQVJfVAotI2RlZmluZSBYTUxfVCh4KSAoY29uc3Qgd2NoYXJfdCl4Ci0jZGVmaW5l
IFhNTF9MKHgpIEwgIyMgeAotI2Vsc2UKLSNkZWZpbmUgWE1MX1QoeCkgKGNvbnN0IHVuc2lnbmVk
IHNob3J0KXgKLSNkZWZpbmUgWE1MX0woeCkgeAotI2VuZGlmCi0KLSNlbHNlCi0KLSNkZWZpbmUg
WE1MX1QoeCkgeAotI2RlZmluZSBYTUxfTCh4KSB4Ci0KLSNlbmRpZgotCi0vKiBSb3VuZCB1cCBu
IHRvIGJlIGEgbXVsdGlwbGUgb2Ygc3osIHdoZXJlIHN6IGlzIGEgcG93ZXIgb2YgMi4gKi8KLSNk
ZWZpbmUgUk9VTkRfVVAobiwgc3opICgoKG4pICsgKChzeikgLSAxKSkgJiB+KChzeikgLSAxKSkK
LQotLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW1vdmUoKSBkb2Vzbid0IGV4aXN0LiAqLwot
I2lmbmRlZiBIQVZFX01FTU1PVkUKLSNpZmRlZiBIQVZFX0JDT1BZCi0jZGVmaW5lIG1lbW1vdmUo
ZCxzLGwpIGJjb3B5KChzKSwoZCksKGwpKQotI2Vsc2UKLSNlcnJvciBtZW1tb3ZlIGRvZXMgbm90
IGV4aXN0IG9uIHRoaXMgcGxhdGZvcm0sIG5vciBpcyBhIHN1YnN0aXR1dGUgYXZhaWxhYmxlCi0j
ZW5kaWYgLyogSEFWRV9CQ09QWSAqLwotI2VuZGlmIC8qIEhBVkVfTUVNTU9WRSAqLwotCi0jaW5j
bHVkZSAiaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJ4bWx0b2suaCIKLSNpbmNsdWRlICJ4bWxyb2xl
LmgiCi0KLXR5cGVkZWYgY29uc3QgWE1MX0NoYXIgKktFWTsKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICBLRVkgbmFtZTsKLX0gTkFNRUQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgTkFNRUQgKip2Owot
ICB1bnNpZ25lZCBjaGFyIHBvd2VyOwotICBzaXplX3Qgc2l6ZTsKLSAgc2l6ZV90IHVzZWQ7Ci0g
IGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbTsKLX0gSEFTSF9UQUJMRTsKLQot
LyogQmFzaWMgY2hhcmFjdGVyIGhhc2ggYWxnb3JpdGhtLCB0YWtlbiBmcm9tIFB5dGhvbidzIHN0
cmluZyBoYXNoOgotICAgaCA9IGggKiAxMDAwMDAzIF4gY2hhcmFjdGVyLCB0aGUgY29uc3RhbnQg
YmVpbmcgYSBwcmltZSBudW1iZXIuCi0KLSovCi0jaWZkZWYgWE1MX1VOSUNPREUKLSNkZWZpbmUg
Q0hBUl9IQVNIKGgsIGMpIFwKLSAgKCgoaCkgKiAweEY0MjQzKSBeICh1bnNpZ25lZCBzaG9ydCko
YykpCi0jZWxzZQotI2RlZmluZSBDSEFSX0hBU0goaCwgYykgXAotICAoKChoKSAqIDB4RjQyNDMp
IF4gKHVuc2lnbmVkIGNoYXIpKGMpKQotI2VuZGlmCi0KLS8qIEZvciBwcm9iaW5nIChhZnRlciBh
IGNvbGxpc2lvbikgd2UgbmVlZCBhIHN0ZXAgc2l6ZSByZWxhdGl2ZSBwcmltZQotICAgdG8gdGhl
IGhhc2ggdGFibGUgc2l6ZSwgd2hpY2ggaXMgYSBwb3dlciBvZiAyLiBXZSB1c2UgZG91YmxlLWhh
c2hpbmcsCi0gICBzaW5jZSB3ZSBjYW4gY2FsY3VsYXRlIGEgc2Vjb25kIGhhc2ggdmFsdWUgY2hl
YXBseSBieSB0YWtpbmcgdGhvc2UgYml0cwotICAgb2YgdGhlIGZpcnN0IGhhc2ggdmFsdWUgdGhh
dCB3ZXJlIGRpc2NhcmRlZCAobWFza2VkIG91dCkgd2hlbiB0aGUgdGFibGUKLSAgIGluZGV4IHdh
cyBjYWxjdWxhdGVkOiBpbmRleCA9IGhhc2ggJiBtYXNrLCB3aGVyZSBtYXNrID0gdGFibGUtPnNp
emUgLSAxLgotICAgV2UgbGltaXQgdGhlIG1heGltdW0gc3RlcCBzaXplIHRvIHRhYmxlLT5zaXpl
IC8gNCAobWFzayA+PiAyKSBhbmQgbWFrZQotICAgaXQgb2RkLCBzaW5jZSBvZGQgbnVtYmVycyBh
cmUgYWx3YXlzIHJlbGF0aXZlIHByaW1lIHRvIGEgcG93ZXIgb2YgMi4KLSovCi0jZGVmaW5lIFNF
Q09ORF9IQVNIKGhhc2gsIG1hc2ssIHBvd2VyKSBcCi0gICgoKChoYXNoKSAmIH4obWFzaykpID4+
ICgocG93ZXIpIC0gMSkpICYgKChtYXNrKSA+PiAyKSkKLSNkZWZpbmUgUFJPQkVfU1RFUChoYXNo
LCBtYXNrLCBwb3dlcikgXAotICAoKHVuc2lnbmVkIGNoYXIpKChTRUNPTkRfSEFTSChoYXNoLCBt
YXNrLCBwb3dlcikpIHwgMSkpCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgTkFNRUQgKipwOwotICBO
QU1FRCAqKmVuZDsKLX0gSEFTSF9UQUJMRV9JVEVSOwotCi0jZGVmaW5lIElOSVRfVEFHX0JVRl9T
SVpFIDMyICAvKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKFhNTF9DaGFyKSAqLwotI2Rl
ZmluZSBJTklUX0RBVEFfQlVGX1NJWkUgMTAyNAotI2RlZmluZSBJTklUX0FUVFNfU0laRSAxNgot
I2RlZmluZSBJTklUX0FUVFNfVkVSU0lPTiAweEZGRkZGRkZGCi0jZGVmaW5lIElOSVRfQkxPQ0tf
U0laRSAxMDI0Ci0jZGVmaW5lIElOSVRfQlVGRkVSX1NJWkUgMTAyNAotCi0jZGVmaW5lIEVYUEFO
RF9TUEFSRSAyNAotCi10eXBlZGVmIHN0cnVjdCBiaW5kaW5nIHsKLSAgc3RydWN0IHByZWZpeCAq
cHJlZml4OwotICBzdHJ1Y3QgYmluZGluZyAqbmV4dFRhZ0JpbmRpbmc7Ci0gIHN0cnVjdCBiaW5k
aW5nICpwcmV2UHJlZml4QmluZGluZzsKLSAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9pZCAqYXR0
SWQ7Ci0gIFhNTF9DaGFyICp1cmk7Ci0gIGludCB1cmlMZW47Ci0gIGludCB1cmlBbGxvYzsKLX0g
QklORElORzsKLQotdHlwZWRlZiBzdHJ1Y3QgcHJlZml4IHsKLSAgY29uc3QgWE1MX0NoYXIgKm5h
bWU7Ci0gIEJJTkRJTkcgKmJpbmRpbmc7Ci19IFBSRUZJWDsKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICBjb25zdCBYTUxfQ2hhciAqc3RyOwotICBjb25zdCBYTUxfQ2hhciAqbG9jYWxQYXJ0OwotICBj
b25zdCBYTUxfQ2hhciAqcHJlZml4OwotICBpbnQgc3RyTGVuOwotICBpbnQgdXJpTGVuOwotICBp
bnQgcHJlZml4TGVuOwotfSBUQUdfTkFNRTsKLQotLyogVEFHIHJlcHJlc2VudHMgYW4gb3BlbiBl
bGVtZW50LgotICAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaXMgc3RvcmVkIGluIGJvdGggdGhl
IGRvY3VtZW50IGFuZCBBUEkKLSAgIGVuY29kaW5ncy4gIFRoZSBtZW1vcnkgYnVmZmVyICdidWYn
IGlzIGEgc2VwYXJhdGVseS1hbGxvY2F0ZWQKLSAgIG1lbW9yeSBhcmVhIHdoaWNoIHN0b3JlcyB0
aGUgbmFtZS4gIER1cmluZyB0aGUgWE1MX1BhcnNlKCkvCi0gICBYTUxQYXJzZUJ1ZmZlcigpIHdo
ZW4gdGhlIGVsZW1lbnQgaXMgb3BlbiwgdGhlIG1lbW9yeSBmb3IgdGhlICdyYXcnCi0gICB2ZXJz
aW9uIG9mIHRoZSBuYW1lIChpbiB0aGUgZG9jdW1lbnQgZW5jb2RpbmcpIGlzIHNoYXJlZCB3aXRo
IHRoZQotICAgZG9jdW1lbnQgYnVmZmVyLiAgSWYgdGhlIGVsZW1lbnQgaXMgb3BlbiBhY3Jvc3Mg
Y2FsbHMgdG8KLSAgIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpLCB0aGUgYnVmZmVyIGlz
IHJlLWFsbG9jYXRlZCB0bwotICAgY29udGFpbiB0aGUgJ3JhdycgbmFtZSBhcyB3ZWxsLgotCi0g
ICBBIHBhcnNlciByZS11c2VzIHRoZXNlIHN0cnVjdHVyZXMsIG1haW50YWluaW5nIGEgbGlzdCBv
ZiBhbGxvY2F0ZWQKLSAgIFRBRyBvYmplY3RzIGluIGEgZnJlZSBsaXN0LgotKi8KLXR5cGVkZWYg
c3RydWN0IHRhZyB7Ci0gIHN0cnVjdCB0YWcgKnBhcmVudDsgICAgICAgICAgIC8qIHBhcmVudCBv
ZiB0aGlzIGVsZW1lbnQgKi8KLSAgY29uc3QgY2hhciAqcmF3TmFtZTsgICAgICAgICAgLyogdGFn
TmFtZSBpbiB0aGUgb3JpZ2luYWwgZW5jb2RpbmcgKi8KLSAgaW50IHJhd05hbWVMZW5ndGg7Ci0g
IFRBR19OQU1FIG5hbWU7ICAgICAgICAgICAgICAgIC8qIHRhZ05hbWUgaW4gdGhlIEFQSSBlbmNv
ZGluZyAqLwotICBjaGFyICpidWY7ICAgICAgICAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIG5h
bWUgY29tcG9uZW50cyAqLwotICBjaGFyICpidWZFbmQ7ICAgICAgICAgICAgICAgICAvKiBlbmQg
b2YgdGhlIGJ1ZmZlciAqLwotICBCSU5ESU5HICpiaW5kaW5nczsKLX0gVEFHOwotCi10eXBlZGVm
IHN0cnVjdCB7Ci0gIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICBjb25zdCBYTUxfQ2hhciAqdGV4
dFB0cjsKLSAgaW50IHRleHRMZW47ICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGluIFhNTF9D
aGFycyAqLwotICBpbnQgcHJvY2Vzc2VkOyAgICAgICAgICAgICAgICAvKiAjIG9mIHByb2Nlc3Nl
ZCBieXRlcyAtIHdoZW4gc3VzcGVuZGVkICovCi0gIGNvbnN0IFhNTF9DaGFyICpzeXN0ZW1JZDsK
LSAgY29uc3QgWE1MX0NoYXIgKmJhc2U7Ci0gIGNvbnN0IFhNTF9DaGFyICpwdWJsaWNJZDsKLSAg
Y29uc3QgWE1MX0NoYXIgKm5vdGF0aW9uOwotICBYTUxfQm9vbCBvcGVuOwotICBYTUxfQm9vbCBp
c19wYXJhbTsKLSAgWE1MX0Jvb2wgaXNfaW50ZXJuYWw7IC8qIHRydWUgaWYgZGVjbGFyZWQgaW4g
aW50ZXJuYWwgc3Vic2V0IG91dHNpZGUgUEUgKi8KLX0gRU5USVRZOwotCi10eXBlZGVmIHN0cnVj
dCB7Ci0gIGVudW0gWE1MX0NvbnRlbnRfVHlwZSAgICAgICAgIHR5cGU7Ci0gIGVudW0gWE1MX0Nv
bnRlbnRfUXVhbnQgICAgICAgIHF1YW50OwotICBjb25zdCBYTUxfQ2hhciAqICAgICAgICAgICAg
ICBuYW1lOwotICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGNoaWxkOwotICBp
bnQgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Y2hpbGQ7Ci0gIGludCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkY250OwotICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0c2liOwotfSBDT05URU5UX1NDQUZGT0xEOwotCi0jZGVmaW5lIElOSVRfU0NBRkZPTERf
RUxFTUVOVFMgMzIKLQotdHlwZWRlZiBzdHJ1Y3QgYmxvY2sgewotICBzdHJ1Y3QgYmxvY2sgKm5l
eHQ7Ci0gIGludCBzaXplOwotICBYTUxfQ2hhciBzWzFdOwotfSBCTE9DSzsKLQotdHlwZWRlZiBz
dHJ1Y3QgewotICBCTE9DSyAqYmxvY2tzOwotICBCTE9DSyAqZnJlZUJsb2NrczsKLSAgY29uc3Qg
WE1MX0NoYXIgKmVuZDsKLSAgWE1MX0NoYXIgKnB0cjsKLSAgWE1MX0NoYXIgKnN0YXJ0OwotICBj
b25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptZW07Ci19IFNUUklOR19QT09MOwotCi0v
KiBUaGUgWE1MX0NoYXIgYmVmb3JlIHRoZSBuYW1lIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIKLSAgIGFuIGF0dHJpYnV0ZSBoYXMgYmVlbiBzcGVjaWZpZWQuICovCi10eXBlZGVmIHN0cnVj
dCBhdHRyaWJ1dGVfaWQgewotICBYTUxfQ2hhciAqbmFtZTsKLSAgUFJFRklYICpwcmVmaXg7Ci0g
IFhNTF9Cb29sIG1heWJlVG9rZW5pemVkOwotICBYTUxfQm9vbCB4bWxuczsKLX0gQVRUUklCVVRF
X0lEOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IEFUVFJJQlVURV9JRCAqaWQ7Ci0gIFhN
TF9Cb29sIGlzQ2RhdGE7Ci0gIGNvbnN0IFhNTF9DaGFyICp2YWx1ZTsKLX0gREVGQVVMVF9BVFRS
SUJVVEU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwotICB1
bnNpZ25lZCBsb25nIGhhc2g7Ci0gIGNvbnN0IFhNTF9DaGFyICp1cmlOYW1lOwotfSBOU19BVFQ7
Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0gIFBSRUZJWCAq
cHJlZml4OwotICBjb25zdCBBVFRSSUJVVEVfSUQgKmlkQXR0OwotICBpbnQgbkRlZmF1bHRBdHRz
OwotICBpbnQgYWxsb2NEZWZhdWx0QXR0czsKLSAgREVGQVVMVF9BVFRSSUJVVEUgKmRlZmF1bHRB
dHRzOwotfSBFTEVNRU5UX1RZUEU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgSEFTSF9UQUJMRSBn
ZW5lcmFsRW50aXRpZXM7Ci0gIEhBU0hfVEFCTEUgZWxlbWVudFR5cGVzOwotICBIQVNIX1RBQkxF
IGF0dHJpYnV0ZUlkczsKLSAgSEFTSF9UQUJMRSBwcmVmaXhlczsKLSAgU1RSSU5HX1BPT0wgcG9v
bDsKLSAgU1RSSU5HX1BPT0wgZW50aXR5VmFsdWVQb29sOwotICAvKiBmYWxzZSBvbmNlIGEgcGFy
YW1ldGVyIGVudGl0eSByZWZlcmVuY2UgaGFzIGJlZW4gc2tpcHBlZCAqLwotICBYTUxfQm9vbCBr
ZWVwUHJvY2Vzc2luZzsKLSAgLyogdHJ1ZSBvbmNlIGFuIGludGVybmFsIG9yIGV4dGVybmFsIFBF
IHJlZmVyZW5jZSBoYXMgYmVlbiBlbmNvdW50ZXJlZDsKLSAgICAgdGhpcyBpbmNsdWRlcyB0aGUg
cmVmZXJlbmNlIHRvIGFuIGV4dGVybmFsIHN1YnNldCAqLwotICBYTUxfQm9vbCBoYXNQYXJhbUVu
dGl0eVJlZnM7Ci0gIFhNTF9Cb29sIHN0YW5kYWxvbmU7Ci0jaWZkZWYgWE1MX0RURAotICAvKiBp
bmRpY2F0ZXMgaWYgZXh0ZXJuYWwgUEUgaGFzIGJlZW4gcmVhZCAqLwotICBYTUxfQm9vbCBwYXJh
bUVudGl0eVJlYWQ7Ci0gIEhBU0hfVEFCTEUgcGFyYW1FbnRpdGllczsKLSNlbmRpZiAvKiBYTUxf
RFREICovCi0gIFBSRUZJWCBkZWZhdWx0UHJlZml4OwotICAvKiA9PT0gc2NhZmZvbGRpbmcgZm9y
IGJ1aWxkaW5nIGNvbnRlbnQgbW9kZWwgPT09ICovCi0gIFhNTF9Cb29sIGluX2VsZGVjbDsKLSAg
Q09OVEVOVF9TQ0FGRk9MRCAqc2NhZmZvbGQ7Ci0gIHVuc2lnbmVkIGNvbnRlbnRTdHJpbmdMZW47
Ci0gIHVuc2lnbmVkIHNjYWZmU2l6ZTsKLSAgdW5zaWduZWQgc2NhZmZDb3VudDsKLSAgaW50IHNj
YWZmTGV2ZWw7Ci0gIGludCAqc2NhZmZJbmRleDsKLX0gRFREOwotCi10eXBlZGVmIHN0cnVjdCBv
cGVuX2ludGVybmFsX2VudGl0eSB7Ci0gIGNvbnN0IGNoYXIgKmludGVybmFsRXZlbnRQdHI7Ci0g
IGNvbnN0IGNoYXIgKmludGVybmFsRXZlbnRFbmRQdHI7Ci0gIHN0cnVjdCBvcGVuX2ludGVybmFs
X2VudGl0eSAqbmV4dDsKLSAgRU5USVRZICplbnRpdHk7Ci0gIGludCBzdGFydFRhZ0xldmVsOwot
ICBYTUxfQm9vbCBiZXR3ZWVuRGVjbDsgLyogV0ZDOiBQRSBCZXR3ZWVuIERlY2xhcmF0aW9ucyAq
LwotfSBPUEVOX0lOVEVSTkFMX0VOVElUWTsKLQotdHlwZWRlZiBlbnVtIFhNTF9FcnJvciBQVFJD
QUxMIFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cik7Ci0KLXN0YXRpYyBQ
cm9jZXNzb3IgcHJvbG9nUHJvY2Vzc29yOwotc3RhdGljIFByb2Nlc3NvciBwcm9sb2dJbml0UHJv
Y2Vzc29yOwotc3RhdGljIFByb2Nlc3NvciBjb250ZW50UHJvY2Vzc29yOwotc3RhdGljIFByb2Nl
c3NvciBjZGF0YVNlY3Rpb25Qcm9jZXNzb3I7Ci0jaWZkZWYgWE1MX0RURAotc3RhdGljIFByb2Nl
c3NvciBpZ25vcmVTZWN0aW9uUHJvY2Vzc29yOwotc3RhdGljIFByb2Nlc3NvciBleHRlcm5hbFBh
ckVudFByb2Nlc3NvcjsKLXN0YXRpYyBQcm9jZXNzb3IgZXh0ZXJuYWxQYXJFbnRJbml0UHJvY2Vz
c29yOwotc3RhdGljIFByb2Nlc3NvciBlbnRpdHlWYWx1ZVByb2Nlc3NvcjsKLXN0YXRpYyBQcm9j
ZXNzb3IgZW50aXR5VmFsdWVJbml0UHJvY2Vzc29yOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLXN0
YXRpYyBQcm9jZXNzb3IgZXBpbG9nUHJvY2Vzc29yOwotc3RhdGljIFByb2Nlc3NvciBlcnJvclBy
b2Nlc3NvcjsKLXN0YXRpYyBQcm9jZXNzb3IgZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yOwot
c3RhdGljIFByb2Nlc3NvciBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IyOwotc3RhdGljIFBy
b2Nlc3NvciBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzOwotc3RhdGljIFByb2Nlc3NvciBl
eHRlcm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIGludGVybmFs
RW50aXR5UHJvY2Vzc29yOwotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWhhbmRsZVVua25vd25F
bmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSk7
Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLXByb2Nlc3NYbWxEZWNsKFhNTF9QYXJzZXIgcGFyc2Vy
LCBpbnQgaXNHZW5lcmFsVGV4dEVudGl0eSwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMs
IGNvbnN0IGNoYXIgKm5leHQpOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1pbml0aWFsaXplRW5j
b2RpbmcoWE1MX1BhcnNlciBwYXJzZXIpOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb1Byb2xv
ZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcywK
LSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgaW50IHRvaywgY29uc3QgY2hhciAqbmV4dCwgY29u
c3QgY2hhciAqKm5leHRQdHIsCi0gICAgICAgICBYTUxfQm9vbCBoYXZlTW9yZSk7Ci1zdGF0aWMg
ZW51bSBYTUxfRXJyb3IKLXByb2Nlc3NJbnRlcm5hbEVudGl0eShYTUxfUGFyc2VyIHBhcnNlciwg
RU5USVRZICplbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgWE1MX0Jvb2wgYmV0d2VlbkRl
Y2wpOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb0NvbnRlbnQoWE1MX1BhcnNlciBwYXJzZXIs
IGludCBzdGFydFRhZ0xldmVsLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgIGNvbnN0
IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKiplbmRQdHIsCi0gICAg
ICAgICAgWE1MX0Jvb2wgaGF2ZU1vcmUpOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb0NkYXRh
U2VjdGlvbihYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAq
KnN0YXJ0UHRyLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoq
bmV4dFB0ciwgWE1MX0Jvb2wgaGF2ZU1vcmUpOwotI2lmZGVmIFhNTF9EVEQKLXN0YXRpYyBlbnVt
IFhNTF9FcnJvcgotZG9JZ25vcmVTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNP
RElORyAqLCBjb25zdCBjaGFyICoqc3RhcnRQdHIsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFB0ciwgWE1MX0Jvb2wgaGF2ZU1vcmUpOwotI2VuZGlm
IC8qIFhNTF9EVEQgKi8KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1zdG9yZUF0dHMoWE1MX1Bh
cnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIgKnMsCi0gICAgICAgICAg
VEFHX05BTUUgKnRhZ05hbWVQdHIsIEJJTkRJTkcgKipiaW5kaW5nc1B0cik7Ci1zdGF0aWMgZW51
bSBYTUxfRXJyb3IKLWFkZEJpbmRpbmcoWE1MX1BhcnNlciBwYXJzZXIsIFBSRUZJWCAqcHJlZml4
LCBjb25zdCBBVFRSSUJVVEVfSUQgKmF0dElkLAotICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAq
dXJpLCBCSU5ESU5HICoqYmluZGluZ3NQdHIpOwotc3RhdGljIGludAotZGVmaW5lQXR0cmlidXRl
KEVMRU1FTlRfVFlQRSAqdHlwZSwgQVRUUklCVVRFX0lEICosIFhNTF9Cb29sIGlzQ2RhdGEsCi0g
ICAgICAgICAgICAgICAgWE1MX0Jvb2wgaXNJZCwgY29uc3QgWE1MX0NoYXIgKmRmbHRWYWx1ZSwg
WE1MX1BhcnNlciBwYXJzZXIpOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1zdG9yZUF0dHJpYnV0
ZVZhbHVlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqLCBYTUxfQm9vbCBpc0Nk
YXRhLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgU1RS
SU5HX1BPT0wgKik7Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWFwcGVuZEF0dHJpYnV0ZVZhbHVl
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqLCBYTUxfQm9vbCBpc0NkYXRhLAot
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIFNUUklOR19Q
T09MICopOwotc3RhdGljIEFUVFJJQlVURV9JRCAqCi1nZXRBdHRyaWJ1dGVJZChYTUxfUGFyc2Vy
IHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAg
ICAgICAgICBjb25zdCBjaGFyICplbmQpOwotc3RhdGljIGludAotc2V0RWxlbWVudFR5cGVQcmVm
aXgoWE1MX1BhcnNlciBwYXJzZXIsIEVMRU1FTlRfVFlQRSAqKTsKLXN0YXRpYyBlbnVtIFhNTF9F
cnJvcgotc3RvcmVFbnRpdHlWYWx1ZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcg
KmVuYywgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCk7Ci1zdGF0aWMgaW50Ci1yZXBvcnRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCk7Ci1zdGF0aWMgaW50Ci1yZXBvcnRD
b21tZW50KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpzdGFydCwKLSAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKTsKLXN0YXRpYyB2b2lkCi1y
ZXBvcnREZWZhdWx0KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25z
dCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKTsKLQotc3RhdGlj
IGNvbnN0IFhNTF9DaGFyICogZ2V0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlcik7Ci1zdGF0aWMg
WE1MX0Jvb2wKLXNldENvbnRleHQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpj
b250ZXh0KTsKLQotc3RhdGljIHZvaWQgRkFTVENBTEwgbm9ybWFsaXplUHVibGljSWQoWE1MX0No
YXIgKnMpOwotCi1zdGF0aWMgRFREICogZHRkQ3JlYXRlKGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxp
bmdfU3VpdGUgKm1zKTsKLS8qIGRvIG5vdCBjYWxsIGlmIHBhcmVudFBhcnNlciAhPSBOVUxMICov
Ci1zdGF0aWMgdm9pZCBkdGRSZXNldChEVEQgKnAsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdf
U3VpdGUgKm1zKTsKLXN0YXRpYyB2b2lkCi1kdGREZXN0cm95KERURCAqcCwgWE1MX0Jvb2wgaXNE
b2NFbnRpdHksIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKTsKLXN0YXRpYyBp
bnQKLWR0ZENvcHkoWE1MX1BhcnNlciBvbGRQYXJzZXIsCi0gICAgICAgIERURCAqbmV3RHRkLCBj
b25zdCBEVEQgKm9sZER0ZCwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOwot
c3RhdGljIGludAotY29weUVudGl0eVRhYmxlKFhNTF9QYXJzZXIgb2xkUGFyc2VyLAotICAgICAg
ICAgICAgICAgIEhBU0hfVEFCTEUgKiwgU1RSSU5HX1BPT0wgKiwgY29uc3QgSEFTSF9UQUJMRSAq
KTsKLXN0YXRpYyBOQU1FRCAqCi1sb29rdXAoWE1MX1BhcnNlciBwYXJzZXIsIEhBU0hfVEFCTEUg
KnRhYmxlLCBLRVkgbmFtZSwgc2l6ZV90IGNyZWF0ZVNpemUpOwotc3RhdGljIHZvaWQgRkFTVENB
TEwKLWhhc2hUYWJsZUluaXQoSEFTSF9UQUJMRSAqLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5n
X1N1aXRlICptcyk7Ci1zdGF0aWMgdm9pZCBGQVNUQ0FMTCBoYXNoVGFibGVDbGVhcihIQVNIX1RB
QkxFICopOwotc3RhdGljIHZvaWQgRkFTVENBTEwgaGFzaFRhYmxlRGVzdHJveShIQVNIX1RBQkxF
ICopOwotc3RhdGljIHZvaWQgRkFTVENBTEwKLWhhc2hUYWJsZUl0ZXJJbml0KEhBU0hfVEFCTEVf
SVRFUiAqLCBjb25zdCBIQVNIX1RBQkxFICopOwotc3RhdGljIE5BTUVEICogRkFTVENBTEwgaGFz
aFRhYmxlSXRlck5leHQoSEFTSF9UQUJMRV9JVEVSICopOwotCi1zdGF0aWMgdm9pZCBGQVNUQ0FM
TAotcG9vbEluaXQoU1RSSU5HX1BPT0wgKiwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0
ZSAqbXMpOwotc3RhdGljIHZvaWQgRkFTVENBTEwgcG9vbENsZWFyKFNUUklOR19QT09MICopOwot
c3RhdGljIHZvaWQgRkFTVENBTEwgcG9vbERlc3Ryb3koU1RSSU5HX1BPT0wgKik7Ci1zdGF0aWMg
WE1MX0NoYXIgKgotcG9vbEFwcGVuZChTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgRU5DT0RJTkcg
KmVuYywKLSAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQpOwotc3Rh
dGljIFhNTF9DaGFyICoKLXBvb2xTdG9yZVN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3Qg
RU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNo
YXIgKmVuZCk7Ci1zdGF0aWMgWE1MX0Jvb2wgRkFTVENBTEwgcG9vbEdyb3coU1RSSU5HX1BPT0wg
KnBvb2wpOwotc3RhdGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKLXBvb2xDb3B5U3RyaW5n
KFNUUklOR19QT09MICpwb29sLCBjb25zdCBYTUxfQ2hhciAqcyk7Ci1zdGF0aWMgY29uc3QgWE1M
X0NoYXIgKgotcG9vbENvcHlTdHJpbmdOKFNUUklOR19QT09MICpwb29sLCBjb25zdCBYTUxfQ2hh
ciAqcywgaW50IG4pOwotc3RhdGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKLXBvb2xBcHBl
bmRTdHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzKTsKLQotc3RhdGlj
IGludCBGQVNUQ0FMTCBuZXh0U2NhZmZvbGRQYXJ0KFhNTF9QYXJzZXIgcGFyc2VyKTsKLXN0YXRp
YyBYTUxfQ29udGVudCAqIGJ1aWxkX21vZGVsKFhNTF9QYXJzZXIgcGFyc2VyKTsKLXN0YXRpYyBF
TEVNRU5UX1RZUEUgKgotZ2V0RWxlbWVudFR5cGUoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVO
Q09ESU5HICplbmMsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIg
KmVuZCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdlbmVyYXRlX2hhc2hfc2VjcmV0X3NhbHQo
dm9pZCk7Ci1zdGF0aWMgWE1MX0Jvb2wgc3RhcnRQYXJzaW5nKFhNTF9QYXJzZXIgcGFyc2VyKTsK
LQotc3RhdGljIFhNTF9QYXJzZXIKLXBhcnNlckNyZWF0ZShjb25zdCBYTUxfQ2hhciAqZW5jb2Rp
bmdOYW1lLAotICAgICAgICAgICAgIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1l
bXN1aXRlLAotICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lU2VwLAotICAgICAgICAg
ICAgIERURCAqZHRkKTsKLQotc3RhdGljIHZvaWQKLXBhcnNlckluaXQoWE1MX1BhcnNlciBwYXJz
ZXIsIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpOwotCi0jZGVmaW5lIHBvb2xTdGFydChw
b29sKSAoKHBvb2wpLT5zdGFydCkKLSNkZWZpbmUgcG9vbEVuZChwb29sKSAoKHBvb2wpLT5wdHIp
Ci0jZGVmaW5lIHBvb2xMZW5ndGgocG9vbCkgKChwb29sKS0+cHRyIC0gKHBvb2wpLT5zdGFydCkK
LSNkZWZpbmUgcG9vbENob3AocG9vbCkgKCh2b2lkKS0tKHBvb2wtPnB0cikpCi0jZGVmaW5lIHBv
b2xMYXN0Q2hhcihwb29sKSAoKChwb29sKS0+cHRyKVstMV0pCi0jZGVmaW5lIHBvb2xEaXNjYXJk
KHBvb2wpICgocG9vbCktPnB0ciA9IChwb29sKS0+c3RhcnQpCi0jZGVmaW5lIHBvb2xGaW5pc2go
cG9vbCkgKChwb29sKS0+c3RhcnQgPSAocG9vbCktPnB0cikKLSNkZWZpbmUgcG9vbEFwcGVuZENo
YXIocG9vbCwgYykgXAotICAoKChwb29sKS0+cHRyID09IChwb29sKS0+ZW5kICYmICFwb29sR3Jv
dyhwb29sKSkgXAotICAgPyAwIFwKLSAgIDogKCgqKChwb29sKS0+cHRyKSsrID0gYyksIDEpKQot
Ci1zdHJ1Y3QgWE1MX1BhcnNlclN0cnVjdCB7Ci0gIC8qIFRoZSBmaXJzdCBtZW1iZXIgbXVzdCBi
ZSB1c2VyRGF0YSBzbyB0aGF0IHRoZSBYTUxfR2V0VXNlckRhdGEKLSAgICAgbWFjcm8gd29ya3Mu
ICovCi0gIHZvaWQgKm1fdXNlckRhdGE7Ci0gIHZvaWQgKm1faGFuZGxlckFyZzsKLSAgY2hhciAq
bV9idWZmZXI7Ci0gIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgbV9tZW07Ci0gIC8q
IGZpcnN0IGNoYXJhY3RlciB0byBiZSBwYXJzZWQgKi8KLSAgY29uc3QgY2hhciAqbV9idWZmZXJQ
dHI7Ci0gIC8qIHBhc3QgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgcGFyc2VkICovCi0gIGNoYXIgKm1f
YnVmZmVyRW5kOwotICAvKiBhbGxvY2F0ZWQgZW5kIG9mIGJ1ZmZlciAqLwotICBjb25zdCBjaGFy
ICptX2J1ZmZlckxpbTsKLSAgWE1MX0luZGV4IG1fcGFyc2VFbmRCeXRlSW5kZXg7Ci0gIGNvbnN0
IGNoYXIgKm1fcGFyc2VFbmRQdHI7Ci0gIFhNTF9DaGFyICptX2RhdGFCdWY7Ci0gIFhNTF9DaGFy
ICptX2RhdGFCdWZFbmQ7Ci0gIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIG1fc3RhcnRFbGVtZW50
SGFuZGxlcjsKLSAgWE1MX0VuZEVsZW1lbnRIYW5kbGVyIG1fZW5kRWxlbWVudEhhbmRsZXI7Ci0g
IFhNTF9DaGFyYWN0ZXJEYXRhSGFuZGxlciBtX2NoYXJhY3RlckRhdGFIYW5kbGVyOwotICBYTUxf
UHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciBtX3Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRs
ZXI7Ci0gIFhNTF9Db21tZW50SGFuZGxlciBtX2NvbW1lbnRIYW5kbGVyOwotICBYTUxfU3RhcnRD
ZGF0YVNlY3Rpb25IYW5kbGVyIG1fc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyOwotICBYTUxfRW5k
Q2RhdGFTZWN0aW9uSGFuZGxlciBtX2VuZENkYXRhU2VjdGlvbkhhbmRsZXI7Ci0gIFhNTF9EZWZh
dWx0SGFuZGxlciBtX2RlZmF1bHRIYW5kbGVyOwotICBYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRs
ZXIgbV9zdGFydERvY3R5cGVEZWNsSGFuZGxlcjsKLSAgWE1MX0VuZERvY3R5cGVEZWNsSGFuZGxl
ciBtX2VuZERvY3R5cGVEZWNsSGFuZGxlcjsKLSAgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRs
ZXIgbV91bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyOwotICBYTUxfTm90YXRpb25EZWNsSGFuZGxl
ciBtX25vdGF0aW9uRGVjbEhhbmRsZXI7Ci0gIFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVy
IG1fc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcjsKLSAgWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5k
bGVyIG1fZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXI7Ci0gIFhNTF9Ob3RTdGFuZGFsb25lSGFuZGxl
ciBtX25vdFN0YW5kYWxvbmVIYW5kbGVyOwotICBYTUxfRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVy
IG1fZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyOwotICBYTUxfUGFyc2VyIG1fZXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyQXJnOwotICBYTUxfU2tpcHBlZEVudGl0eUhhbmRsZXIgbV9za2lwcGVkRW50
aXR5SGFuZGxlcjsKLSAgWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIgbV91bmtub3duRW5jb2Rp
bmdIYW5kbGVyOwotICBYTUxfRWxlbWVudERlY2xIYW5kbGVyIG1fZWxlbWVudERlY2xIYW5kbGVy
OwotICBYTUxfQXR0bGlzdERlY2xIYW5kbGVyIG1fYXR0bGlzdERlY2xIYW5kbGVyOwotICBYTUxf
RW50aXR5RGVjbEhhbmRsZXIgbV9lbnRpdHlEZWNsSGFuZGxlcjsKLSAgWE1MX1htbERlY2xIYW5k
bGVyIG1feG1sRGVjbEhhbmRsZXI7Ci0gIGNvbnN0IEVOQ09ESU5HICptX2VuY29kaW5nOwotICBJ
TklUX0VOQ09ESU5HIG1faW5pdEVuY29kaW5nOwotICBjb25zdCBFTkNPRElORyAqbV9pbnRlcm5h
bEVuY29kaW5nOwotICBjb25zdCBYTUxfQ2hhciAqbV9wcm90b2NvbEVuY29kaW5nTmFtZTsKLSAg
WE1MX0Jvb2wgbV9uczsKLSAgWE1MX0Jvb2wgbV9uc190cmlwbGV0czsKLSAgdm9pZCAqbV91bmtu
b3duRW5jb2RpbmdNZW07Ci0gIHZvaWQgKm1fdW5rbm93bkVuY29kaW5nRGF0YTsKLSAgdm9pZCAq
bV91bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YTsKLSAgdm9pZCAoWE1MQ0FMTCAqbV91bmtub3du
RW5jb2RpbmdSZWxlYXNlKSh2b2lkICopOwotICBQUk9MT0dfU1RBVEUgbV9wcm9sb2dTdGF0ZTsK
LSAgUHJvY2Vzc29yICptX3Byb2Nlc3NvcjsKLSAgZW51bSBYTUxfRXJyb3IgbV9lcnJvckNvZGU7
Ci0gIGNvbnN0IGNoYXIgKm1fZXZlbnRQdHI7Ci0gIGNvbnN0IGNoYXIgKm1fZXZlbnRFbmRQdHI7
Ci0gIGNvbnN0IGNoYXIgKm1fcG9zaXRpb25QdHI7Ci0gIE9QRU5fSU5URVJOQUxfRU5USVRZICpt
X29wZW5JbnRlcm5hbEVudGl0aWVzOwotICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqbV9mcmVlSW50
ZXJuYWxFbnRpdGllczsKLSAgWE1MX0Jvb2wgbV9kZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGll
czsKLSAgaW50IG1fdGFnTGV2ZWw7Ci0gIEVOVElUWSAqbV9kZWNsRW50aXR5OwotICBjb25zdCBY
TUxfQ2hhciAqbV9kb2N0eXBlTmFtZTsKLSAgY29uc3QgWE1MX0NoYXIgKm1fZG9jdHlwZVN5c2lk
OwotICBjb25zdCBYTUxfQ2hhciAqbV9kb2N0eXBlUHViaWQ7Ci0gIGNvbnN0IFhNTF9DaGFyICpt
X2RlY2xBdHRyaWJ1dGVUeXBlOwotICBjb25zdCBYTUxfQ2hhciAqbV9kZWNsTm90YXRpb25OYW1l
OwotICBjb25zdCBYTUxfQ2hhciAqbV9kZWNsTm90YXRpb25QdWJsaWNJZDsKLSAgRUxFTUVOVF9U
WVBFICptX2RlY2xFbGVtZW50VHlwZTsKLSAgQVRUUklCVVRFX0lEICptX2RlY2xBdHRyaWJ1dGVJ
ZDsKLSAgWE1MX0Jvb2wgbV9kZWNsQXR0cmlidXRlSXNDZGF0YTsKLSAgWE1MX0Jvb2wgbV9kZWNs
QXR0cmlidXRlSXNJZDsKLSAgRFREICptX2R0ZDsKLSAgY29uc3QgWE1MX0NoYXIgKm1fY3VyQmFz
ZTsKLSAgVEFHICptX3RhZ1N0YWNrOwotICBUQUcgKm1fZnJlZVRhZ0xpc3Q7Ci0gIEJJTkRJTkcg
Km1faW5oZXJpdGVkQmluZGluZ3M7Ci0gIEJJTkRJTkcgKm1fZnJlZUJpbmRpbmdMaXN0OwotICBp
bnQgbV9hdHRzU2l6ZTsKLSAgaW50IG1fblNwZWNpZmllZEF0dHM7Ci0gIGludCBtX2lkQXR0SW5k
ZXg7Ci0gIEFUVFJJQlVURSAqbV9hdHRzOwotICBOU19BVFQgKm1fbnNBdHRzOwotICB1bnNpZ25l
ZCBsb25nIG1fbnNBdHRzVmVyc2lvbjsKLSAgdW5zaWduZWQgY2hhciBtX25zQXR0c1Bvd2VyOwot
I2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgWE1MX0F0dHJJbmZvICptX2F0dEluZm87Ci0jZW5kaWYK
LSAgUE9TSVRJT04gbV9wb3NpdGlvbjsKLSAgU1RSSU5HX1BPT0wgbV90ZW1wUG9vbDsKLSAgU1RS
SU5HX1BPT0wgbV90ZW1wMlBvb2w7Ci0gIGNoYXIgKm1fZ3JvdXBDb25uZWN0b3I7Ci0gIHVuc2ln
bmVkIGludCBtX2dyb3VwU2l6ZTsKLSAgWE1MX0NoYXIgbV9uYW1lc3BhY2VTZXBhcmF0b3I7Ci0g
IFhNTF9QYXJzZXIgbV9wYXJlbnRQYXJzZXI7Ci0gIFhNTF9QYXJzaW5nU3RhdHVzIG1fcGFyc2lu
Z1N0YXR1czsKLSNpZmRlZiBYTUxfRFRECi0gIFhNTF9Cb29sIG1faXNQYXJhbUVudGl0eTsKLSAg
WE1MX0Jvb2wgbV91c2VGb3JlaWduRFREOwotICBlbnVtIFhNTF9QYXJhbUVudGl0eVBhcnNpbmcg
bV9wYXJhbUVudGl0eVBhcnNpbmc7Ci0jZW5kaWYKLSAgdW5zaWduZWQgbG9uZyBtX2hhc2hfc2Vj
cmV0X3NhbHQ7Ci19OwotCi0jZGVmaW5lIE1BTExPQyhzKSAocGFyc2VyLT5tX21lbS5tYWxsb2Nf
ZmNuKChzKSkpCi0jZGVmaW5lIFJFQUxMT0MocCxzKSAocGFyc2VyLT5tX21lbS5yZWFsbG9jX2Zj
bigocCksKHMpKSkKLSNkZWZpbmUgRlJFRShwKSAocGFyc2VyLT5tX21lbS5mcmVlX2ZjbigocCkp
KQotCi0jZGVmaW5lIHVzZXJEYXRhIChwYXJzZXItPm1fdXNlckRhdGEpCi0jZGVmaW5lIGhhbmRs
ZXJBcmcgKHBhcnNlci0+bV9oYW5kbGVyQXJnKQotI2RlZmluZSBzdGFydEVsZW1lbnRIYW5kbGVy
IChwYXJzZXItPm1fc3RhcnRFbGVtZW50SGFuZGxlcikKLSNkZWZpbmUgZW5kRWxlbWVudEhhbmRs
ZXIgKHBhcnNlci0+bV9lbmRFbGVtZW50SGFuZGxlcikKLSNkZWZpbmUgY2hhcmFjdGVyRGF0YUhh
bmRsZXIgKHBhcnNlci0+bV9jaGFyYWN0ZXJEYXRhSGFuZGxlcikKLSNkZWZpbmUgcHJvY2Vzc2lu
Z0luc3RydWN0aW9uSGFuZGxlciBcCi0gICAgICAgIChwYXJzZXItPm1fcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlcikKLSNkZWZpbmUgY29tbWVudEhhbmRsZXIgKHBhcnNlci0+bV9jb21tZW50
SGFuZGxlcikKLSNkZWZpbmUgc3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIFwKLSAgICAgICAgKHBh
cnNlci0+bV9zdGFydENkYXRhU2VjdGlvbkhhbmRsZXIpCi0jZGVmaW5lIGVuZENkYXRhU2VjdGlv
bkhhbmRsZXIgKHBhcnNlci0+bV9lbmRDZGF0YVNlY3Rpb25IYW5kbGVyKQotI2RlZmluZSBkZWZh
dWx0SGFuZGxlciAocGFyc2VyLT5tX2RlZmF1bHRIYW5kbGVyKQotI2RlZmluZSBzdGFydERvY3R5
cGVEZWNsSGFuZGxlciAocGFyc2VyLT5tX3N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKQotI2RlZmlu
ZSBlbmREb2N0eXBlRGVjbEhhbmRsZXIgKHBhcnNlci0+bV9lbmREb2N0eXBlRGVjbEhhbmRsZXIp
Ci0jZGVmaW5lIHVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgXAotICAgICAgICAocGFyc2VyLT5t
X3VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIpCi0jZGVmaW5lIG5vdGF0aW9uRGVjbEhhbmRsZXIg
KHBhcnNlci0+bV9ub3RhdGlvbkRlY2xIYW5kbGVyKQotI2RlZmluZSBzdGFydE5hbWVzcGFjZURl
Y2xIYW5kbGVyIFwKLSAgICAgICAgKHBhcnNlci0+bV9zdGFydE5hbWVzcGFjZURlY2xIYW5kbGVy
KQotI2RlZmluZSBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciAocGFyc2VyLT5tX2VuZE5hbWVzcGFj
ZURlY2xIYW5kbGVyKQotI2RlZmluZSBub3RTdGFuZGFsb25lSGFuZGxlciAocGFyc2VyLT5tX25v
dFN0YW5kYWxvbmVIYW5kbGVyKQotI2RlZmluZSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgXAot
ICAgICAgICAocGFyc2VyLT5tX2V4dGVybmFsRW50aXR5UmVmSGFuZGxlcikKLSNkZWZpbmUgZXh0
ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnIFwKLSAgICAgICAgKHBhcnNlci0+bV9leHRlcm5hbEVu
dGl0eVJlZkhhbmRsZXJBcmcpCi0jZGVmaW5lIGludGVybmFsRW50aXR5UmVmSGFuZGxlciBcCi0g
ICAgICAgIChwYXJzZXItPm1faW50ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKQotI2RlZmluZSBza2lw
cGVkRW50aXR5SGFuZGxlciAocGFyc2VyLT5tX3NraXBwZWRFbnRpdHlIYW5kbGVyKQotI2RlZmlu
ZSB1bmtub3duRW5jb2RpbmdIYW5kbGVyIChwYXJzZXItPm1fdW5rbm93bkVuY29kaW5nSGFuZGxl
cikKLSNkZWZpbmUgZWxlbWVudERlY2xIYW5kbGVyIChwYXJzZXItPm1fZWxlbWVudERlY2xIYW5k
bGVyKQotI2RlZmluZSBhdHRsaXN0RGVjbEhhbmRsZXIgKHBhcnNlci0+bV9hdHRsaXN0RGVjbEhh
bmRsZXIpCi0jZGVmaW5lIGVudGl0eURlY2xIYW5kbGVyIChwYXJzZXItPm1fZW50aXR5RGVjbEhh
bmRsZXIpCi0jZGVmaW5lIHhtbERlY2xIYW5kbGVyIChwYXJzZXItPm1feG1sRGVjbEhhbmRsZXIp
Ci0jZGVmaW5lIGVuY29kaW5nIChwYXJzZXItPm1fZW5jb2RpbmcpCi0jZGVmaW5lIGluaXRFbmNv
ZGluZyAocGFyc2VyLT5tX2luaXRFbmNvZGluZykKLSNkZWZpbmUgaW50ZXJuYWxFbmNvZGluZyAo
cGFyc2VyLT5tX2ludGVybmFsRW5jb2RpbmcpCi0jZGVmaW5lIHVua25vd25FbmNvZGluZ01lbSAo
cGFyc2VyLT5tX3Vua25vd25FbmNvZGluZ01lbSkKLSNkZWZpbmUgdW5rbm93bkVuY29kaW5nRGF0
YSAocGFyc2VyLT5tX3Vua25vd25FbmNvZGluZ0RhdGEpCi0jZGVmaW5lIHVua25vd25FbmNvZGlu
Z0hhbmRsZXJEYXRhIFwKLSAgKHBhcnNlci0+bV91bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YSkK
LSNkZWZpbmUgdW5rbm93bkVuY29kaW5nUmVsZWFzZSAocGFyc2VyLT5tX3Vua25vd25FbmNvZGlu
Z1JlbGVhc2UpCi0jZGVmaW5lIHByb3RvY29sRW5jb2RpbmdOYW1lIChwYXJzZXItPm1fcHJvdG9j
b2xFbmNvZGluZ05hbWUpCi0jZGVmaW5lIG5zIChwYXJzZXItPm1fbnMpCi0jZGVmaW5lIG5zX3Ry
aXBsZXRzIChwYXJzZXItPm1fbnNfdHJpcGxldHMpCi0jZGVmaW5lIHByb2xvZ1N0YXRlIChwYXJz
ZXItPm1fcHJvbG9nU3RhdGUpCi0jZGVmaW5lIHByb2Nlc3NvciAocGFyc2VyLT5tX3Byb2Nlc3Nv
cikKLSNkZWZpbmUgZXJyb3JDb2RlIChwYXJzZXItPm1fZXJyb3JDb2RlKQotI2RlZmluZSBldmVu
dFB0ciAocGFyc2VyLT5tX2V2ZW50UHRyKQotI2RlZmluZSBldmVudEVuZFB0ciAocGFyc2VyLT5t
X2V2ZW50RW5kUHRyKQotI2RlZmluZSBwb3NpdGlvblB0ciAocGFyc2VyLT5tX3Bvc2l0aW9uUHRy
KQotI2RlZmluZSBwb3NpdGlvbiAocGFyc2VyLT5tX3Bvc2l0aW9uKQotI2RlZmluZSBvcGVuSW50
ZXJuYWxFbnRpdGllcyAocGFyc2VyLT5tX29wZW5JbnRlcm5hbEVudGl0aWVzKQotI2RlZmluZSBm
cmVlSW50ZXJuYWxFbnRpdGllcyAocGFyc2VyLT5tX2ZyZWVJbnRlcm5hbEVudGl0aWVzKQotI2Rl
ZmluZSBkZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcyBcCi0gICAgICAgIChwYXJzZXItPm1f
ZGVmYXVsdEV4cGFuZEludGVybmFsRW50aXRpZXMpCi0jZGVmaW5lIHRhZ0xldmVsIChwYXJzZXIt
Pm1fdGFnTGV2ZWwpCi0jZGVmaW5lIGJ1ZmZlciAocGFyc2VyLT5tX2J1ZmZlcikKLSNkZWZpbmUg
YnVmZmVyUHRyIChwYXJzZXItPm1fYnVmZmVyUHRyKQotI2RlZmluZSBidWZmZXJFbmQgKHBhcnNl
ci0+bV9idWZmZXJFbmQpCi0jZGVmaW5lIHBhcnNlRW5kQnl0ZUluZGV4IChwYXJzZXItPm1fcGFy
c2VFbmRCeXRlSW5kZXgpCi0jZGVmaW5lIHBhcnNlRW5kUHRyIChwYXJzZXItPm1fcGFyc2VFbmRQ
dHIpCi0jZGVmaW5lIGJ1ZmZlckxpbSAocGFyc2VyLT5tX2J1ZmZlckxpbSkKLSNkZWZpbmUgZGF0
YUJ1ZiAocGFyc2VyLT5tX2RhdGFCdWYpCi0jZGVmaW5lIGRhdGFCdWZFbmQgKHBhcnNlci0+bV9k
YXRhQnVmRW5kKQotI2RlZmluZSBfZHRkIChwYXJzZXItPm1fZHRkKQotI2RlZmluZSBjdXJCYXNl
IChwYXJzZXItPm1fY3VyQmFzZSkKLSNkZWZpbmUgZGVjbEVudGl0eSAocGFyc2VyLT5tX2RlY2xF
bnRpdHkpCi0jZGVmaW5lIGRvY3R5cGVOYW1lIChwYXJzZXItPm1fZG9jdHlwZU5hbWUpCi0jZGVm
aW5lIGRvY3R5cGVTeXNpZCAocGFyc2VyLT5tX2RvY3R5cGVTeXNpZCkKLSNkZWZpbmUgZG9jdHlw
ZVB1YmlkIChwYXJzZXItPm1fZG9jdHlwZVB1YmlkKQotI2RlZmluZSBkZWNsQXR0cmlidXRlVHlw
ZSAocGFyc2VyLT5tX2RlY2xBdHRyaWJ1dGVUeXBlKQotI2RlZmluZSBkZWNsTm90YXRpb25OYW1l
IChwYXJzZXItPm1fZGVjbE5vdGF0aW9uTmFtZSkKLSNkZWZpbmUgZGVjbE5vdGF0aW9uUHVibGlj
SWQgKHBhcnNlci0+bV9kZWNsTm90YXRpb25QdWJsaWNJZCkKLSNkZWZpbmUgZGVjbEVsZW1lbnRU
eXBlIChwYXJzZXItPm1fZGVjbEVsZW1lbnRUeXBlKQotI2RlZmluZSBkZWNsQXR0cmlidXRlSWQg
KHBhcnNlci0+bV9kZWNsQXR0cmlidXRlSWQpCi0jZGVmaW5lIGRlY2xBdHRyaWJ1dGVJc0NkYXRh
IChwYXJzZXItPm1fZGVjbEF0dHJpYnV0ZUlzQ2RhdGEpCi0jZGVmaW5lIGRlY2xBdHRyaWJ1dGVJ
c0lkIChwYXJzZXItPm1fZGVjbEF0dHJpYnV0ZUlzSWQpCi0jZGVmaW5lIGZyZWVUYWdMaXN0IChw
YXJzZXItPm1fZnJlZVRhZ0xpc3QpCi0jZGVmaW5lIGZyZWVCaW5kaW5nTGlzdCAocGFyc2VyLT5t
X2ZyZWVCaW5kaW5nTGlzdCkKLSNkZWZpbmUgaW5oZXJpdGVkQmluZGluZ3MgKHBhcnNlci0+bV9p
bmhlcml0ZWRCaW5kaW5ncykKLSNkZWZpbmUgdGFnU3RhY2sgKHBhcnNlci0+bV90YWdTdGFjaykK
LSNkZWZpbmUgYXR0cyAocGFyc2VyLT5tX2F0dHMpCi0jZGVmaW5lIGF0dHNTaXplIChwYXJzZXIt
Pm1fYXR0c1NpemUpCi0jZGVmaW5lIG5TcGVjaWZpZWRBdHRzIChwYXJzZXItPm1fblNwZWNpZmll
ZEF0dHMpCi0jZGVmaW5lIGlkQXR0SW5kZXggKHBhcnNlci0+bV9pZEF0dEluZGV4KQotI2RlZmlu
ZSBuc0F0dHMgKHBhcnNlci0+bV9uc0F0dHMpCi0jZGVmaW5lIG5zQXR0c1ZlcnNpb24gKHBhcnNl
ci0+bV9uc0F0dHNWZXJzaW9uKQotI2RlZmluZSBuc0F0dHNQb3dlciAocGFyc2VyLT5tX25zQXR0
c1Bvd2VyKQotI2RlZmluZSBhdHRJbmZvIChwYXJzZXItPm1fYXR0SW5mbykKLSNkZWZpbmUgdGVt
cFBvb2wgKHBhcnNlci0+bV90ZW1wUG9vbCkKLSNkZWZpbmUgdGVtcDJQb29sIChwYXJzZXItPm1f
dGVtcDJQb29sKQotI2RlZmluZSBncm91cENvbm5lY3RvciAocGFyc2VyLT5tX2dyb3VwQ29ubmVj
dG9yKQotI2RlZmluZSBncm91cFNpemUgKHBhcnNlci0+bV9ncm91cFNpemUpCi0jZGVmaW5lIG5h
bWVzcGFjZVNlcGFyYXRvciAocGFyc2VyLT5tX25hbWVzcGFjZVNlcGFyYXRvcikKLSNkZWZpbmUg
cGFyZW50UGFyc2VyIChwYXJzZXItPm1fcGFyZW50UGFyc2VyKQotI2RlZmluZSBwc19wYXJzaW5n
IChwYXJzZXItPm1fcGFyc2luZ1N0YXR1cy5wYXJzaW5nKQotI2RlZmluZSBwc19maW5hbEJ1ZmZl
ciAocGFyc2VyLT5tX3BhcnNpbmdTdGF0dXMuZmluYWxCdWZmZXIpCi0jaWZkZWYgWE1MX0RURAot
I2RlZmluZSBpc1BhcmFtRW50aXR5IChwYXJzZXItPm1faXNQYXJhbUVudGl0eSkKLSNkZWZpbmUg
dXNlRm9yZWlnbkRURCAocGFyc2VyLT5tX3VzZUZvcmVpZ25EVEQpCi0jZGVmaW5lIHBhcmFtRW50
aXR5UGFyc2luZyAocGFyc2VyLT5tX3BhcmFtRW50aXR5UGFyc2luZykKLSNlbmRpZiAvKiBYTUxf
RFREICovCi0jZGVmaW5lIGhhc2hfc2VjcmV0X3NhbHQgKHBhcnNlci0+bV9oYXNoX3NlY3JldF9z
YWx0KQotCi1YTUxfUGFyc2VyIFhNTENBTEwKLVhNTF9QYXJzZXJDcmVhdGUoY29uc3QgWE1MX0No
YXIgKmVuY29kaW5nTmFtZSkKLXsKLSAgcmV0dXJuIFhNTF9QYXJzZXJDcmVhdGVfTU0oZW5jb2Rp
bmdOYW1lLCBOVUxMLCBOVUxMKTsKLX0KLQotWE1MX1BhcnNlciBYTUxDQUxMCi1YTUxfUGFyc2Vy
Q3JlYXRlTlMoY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFtZSwgWE1MX0NoYXIgbnNTZXApCi17
Ci0gIFhNTF9DaGFyIHRtcFsyXTsKLSAgKnRtcCA9IG5zU2VwOwotICByZXR1cm4gWE1MX1BhcnNl
ckNyZWF0ZV9NTShlbmNvZGluZ05hbWUsIE5VTEwsIHRtcCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBY
TUxfQ2hhciBpbXBsaWNpdENvbnRleHRbXSA9IHsKLSAgQVNDSUlfeCwgQVNDSUlfbSwgQVNDSUlf
bCwgQVNDSUlfRVFVQUxTLCBBU0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBBU0NJSV9wLAotICBB
U0NJSV9DT0xPTiwgQVNDSUlfU0xBU0gsIEFTQ0lJX1NMQVNILCBBU0NJSV93LCBBU0NJSV93LCBB
U0NJSV93LAotICBBU0NJSV9QRVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwg
QVNDSUlfbywgQVNDSUlfciwgQVNDSUlfZywKLSAgQVNDSUlfU0xBU0gsIEFTQ0lJX1gsIEFTQ0lJ
X00sIEFTQ0lJX0wsIEFTQ0lJX1NMQVNILCBBU0NJSV8xLCBBU0NJSV85LAotICBBU0NJSV85LCBB
U0NJSV84LCBBU0NJSV9TTEFTSCwgQVNDSUlfbiwgQVNDSUlfYSwgQVNDSUlfbSwgQVNDSUlfZSwK
LSAgQVNDSUlfcywgQVNDSUlfcCwgQVNDSUlfYSwgQVNDSUlfYywgQVNDSUlfZSwgJ1wwJwotfTsK
LQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWdlbmVyYXRlX2hhc2hfc2VjcmV0X3NhbHQodm9pZCkK
LXsKLSAgdW5zaWduZWQgaW50IHNlZWQgPSB0aW1lKE5VTEwpICUgVUlOVF9NQVg7Ci0gIHNyYW5k
KHNlZWQpOwotICByZXR1cm4gcmFuZCgpOwotfQotCi1zdGF0aWMgWE1MX0Jvb2wgIC8qIG9ubHkg
dmFsaWQgZm9yIHJvb3QgcGFyc2VyICovCi1zdGFydFBhcnNpbmcoWE1MX1BhcnNlciBwYXJzZXIp
Ci17Ci0gICAgLyogaGFzaCBmdW5jdGlvbnMgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgc2V0
Q29udGV4dCgpIGlzIGNhbGxlZCAqLwotICAgIGlmIChoYXNoX3NlY3JldF9zYWx0ID09IDApCi0g
ICAgICBoYXNoX3NlY3JldF9zYWx0ID0gZ2VuZXJhdGVfaGFzaF9zZWNyZXRfc2FsdCgpOwotICAg
IGlmIChucykgewotICAgICAgLyogaW1wbGljaXQgY29udGV4dCBvbmx5IHNldCBmb3Igcm9vdCBw
YXJzZXIsIHNpbmNlIGNoaWxkCi0gICAgICAgICBwYXJzZXJzIChpLmUuIGV4dGVybmFsIGVudGl0
eSBwYXJzZXJzKSB3aWxsIGluaGVyaXQgaXQKLSAgICAgICovCi0gICAgICByZXR1cm4gc2V0Q29u
dGV4dChwYXJzZXIsIGltcGxpY2l0Q29udGV4dCk7Ci0gICAgfQotICAgIHJldHVybiBYTUxfVFJV
RTsKLX0KLQotWE1MX1BhcnNlciBYTUxDQUxMCi1YTUxfUGFyc2VyQ3JlYXRlX01NKGNvbnN0IFhN
TF9DaGFyICplbmNvZGluZ05hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9NZW1v
cnlfSGFuZGxpbmdfU3VpdGUgKm1lbXN1aXRlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBY
TUxfQ2hhciAqbmFtZVNlcCkKLXsKLSAgcmV0dXJuIHBhcnNlckNyZWF0ZShlbmNvZGluZ05hbWUs
IG1lbXN1aXRlLCBuYW1lU2VwLCBOVUxMKTsKLX0KLQotc3RhdGljIFhNTF9QYXJzZXIKLXBhcnNl
ckNyZWF0ZShjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lLAotICAgICAgICAgICAgIGNvbnN0
IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1lbXN1aXRlLAotICAgICAgICAgICAgIGNvbnN0
IFhNTF9DaGFyICpuYW1lU2VwLAotICAgICAgICAgICAgIERURCAqZHRkKQotewotICBYTUxfUGFy
c2VyIHBhcnNlcjsKLQotICBpZiAobWVtc3VpdGUpIHsKLSAgICBYTUxfTWVtb3J5X0hhbmRsaW5n
X1N1aXRlICptdGVtcDsKLSAgICBwYXJzZXIgPSAoWE1MX1BhcnNlcikKLSAgICAgIG1lbXN1aXRl
LT5tYWxsb2NfZmNuKHNpemVvZihzdHJ1Y3QgWE1MX1BhcnNlclN0cnVjdCkpOwotICAgIGlmIChw
YXJzZXIgIT0gTlVMTCkgewotICAgICAgbXRlbXAgPSAoWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0
ZSAqKSYocGFyc2VyLT5tX21lbSk7Ci0gICAgICBtdGVtcC0+bWFsbG9jX2ZjbiA9IG1lbXN1aXRl
LT5tYWxsb2NfZmNuOwotICAgICAgbXRlbXAtPnJlYWxsb2NfZmNuID0gbWVtc3VpdGUtPnJlYWxs
b2NfZmNuOwotICAgICAgbXRlbXAtPmZyZWVfZmNuID0gbWVtc3VpdGUtPmZyZWVfZmNuOwotICAg
IH0KLSAgfQotICBlbHNlIHsKLSAgICBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptdGVtcDsK
LSAgICBwYXJzZXIgPSAoWE1MX1BhcnNlciltYWxsb2Moc2l6ZW9mKHN0cnVjdCBYTUxfUGFyc2Vy
U3RydWN0KSk7Ci0gICAgaWYgKHBhcnNlciAhPSBOVUxMKSB7Ci0gICAgICBtdGVtcCA9IChYTUxf
TWVtb3J5X0hhbmRsaW5nX1N1aXRlICopJihwYXJzZXItPm1fbWVtKTsKLSAgICAgIG10ZW1wLT5t
YWxsb2NfZmNuID0gbWFsbG9jOwotICAgICAgbXRlbXAtPnJlYWxsb2NfZmNuID0gcmVhbGxvYzsK
LSAgICAgIG10ZW1wLT5mcmVlX2ZjbiA9IGZyZWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFwYXJz
ZXIpCi0gICAgcmV0dXJuIHBhcnNlcjsKLQotICBidWZmZXIgPSBOVUxMOwotICBidWZmZXJMaW0g
PSBOVUxMOwotCi0gIGF0dHNTaXplID0gSU5JVF9BVFRTX1NJWkU7Ci0gIGF0dHMgPSAoQVRUUklC
VVRFICopTUFMTE9DKGF0dHNTaXplICogc2l6ZW9mKEFUVFJJQlVURSkpOwotICBpZiAoYXR0cyA9
PSBOVUxMKSB7Ci0gICAgRlJFRShwYXJzZXIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0jaWZk
ZWYgWE1MX0FUVFJfSU5GTwotICBhdHRJbmZvID0gKFhNTF9BdHRySW5mbyopTUFMTE9DKGF0dHNT
aXplICogc2l6ZW9mKFhNTF9BdHRySW5mbykpOwotICBpZiAoYXR0SW5mbyA9PSBOVUxMKSB7Ci0g
ICAgRlJFRShhdHRzKTsKLSAgICBGUkVFKHBhcnNlcik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0K
LSNlbmRpZgotICBkYXRhQnVmID0gKFhNTF9DaGFyICopTUFMTE9DKElOSVRfREFUQV9CVUZfU0la
RSAqIHNpemVvZihYTUxfQ2hhcikpOwotICBpZiAoZGF0YUJ1ZiA9PSBOVUxMKSB7Ci0gICAgRlJF
RShhdHRzKTsKLSNpZmRlZiBYTUxfQVRUUl9JTkZPCi0gICAgRlJFRShhdHRJbmZvKTsKLSNlbmRp
ZgotICAgIEZSRUUocGFyc2VyKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBkYXRhQnVmRW5k
ID0gZGF0YUJ1ZiArIElOSVRfREFUQV9CVUZfU0laRTsKLQotICBpZiAoZHRkKQotICAgIF9kdGQg
PSBkdGQ7Ci0gIGVsc2UgewotICAgIF9kdGQgPSBkdGRDcmVhdGUoJnBhcnNlci0+bV9tZW0pOwot
ICAgIGlmIChfZHRkID09IE5VTEwpIHsKLSAgICAgIEZSRUUoZGF0YUJ1Zik7Ci0gICAgICBGUkVF
KGF0dHMpOwotI2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgICAgIEZSRUUoYXR0SW5mbyk7Ci0jZW5k
aWYKLSAgICAgIEZSRUUocGFyc2VyKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQot
Ci0gIGZyZWVCaW5kaW5nTGlzdCA9IE5VTEw7Ci0gIGZyZWVUYWdMaXN0ID0gTlVMTDsKLSAgZnJl
ZUludGVybmFsRW50aXRpZXMgPSBOVUxMOwotCi0gIGdyb3VwU2l6ZSA9IDA7Ci0gIGdyb3VwQ29u
bmVjdG9yID0gTlVMTDsKLQotICB1bmtub3duRW5jb2RpbmdIYW5kbGVyID0gTlVMTDsKLSAgdW5r
bm93bkVuY29kaW5nSGFuZGxlckRhdGEgPSBOVUxMOwotCi0gIG5hbWVzcGFjZVNlcGFyYXRvciA9
IEFTQ0lJX0VYQ0w7Ci0gIG5zID0gWE1MX0ZBTFNFOwotICBuc190cmlwbGV0cyA9IFhNTF9GQUxT
RTsKLQotICBuc0F0dHMgPSBOVUxMOwotICBuc0F0dHNWZXJzaW9uID0gMDsKLSAgbnNBdHRzUG93
ZXIgPSAwOwotCi0gIHBvb2xJbml0KCZ0ZW1wUG9vbCwgJihwYXJzZXItPm1fbWVtKSk7Ci0gIHBv
b2xJbml0KCZ0ZW1wMlBvb2wsICYocGFyc2VyLT5tX21lbSkpOwotICBwYXJzZXJJbml0KHBhcnNl
ciwgZW5jb2RpbmdOYW1lKTsKLQotICBpZiAoZW5jb2RpbmdOYW1lICYmICFwcm90b2NvbEVuY29k
aW5nTmFtZSkgewotICAgIFhNTF9QYXJzZXJGcmVlKHBhcnNlcik7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLQotICBpZiAobmFtZVNlcCkgewotICAgIG5zID0gWE1MX1RSVUU7Ci0gICAgaW50ZXJu
YWxFbmNvZGluZyA9IFhtbEdldEludGVybmFsRW5jb2RpbmdOUygpOwotICAgIG5hbWVzcGFjZVNl
cGFyYXRvciA9ICpuYW1lU2VwOwotICB9Ci0gIGVsc2UgewotICAgIGludGVybmFsRW5jb2Rpbmcg
PSBYbWxHZXRJbnRlcm5hbEVuY29kaW5nKCk7Ci0gIH0KLQotICByZXR1cm4gcGFyc2VyOwotfQot
Ci1zdGF0aWMgdm9pZAotcGFyc2VySW5pdChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0No
YXIgKmVuY29kaW5nTmFtZSkKLXsKLSAgcHJvY2Vzc29yID0gcHJvbG9nSW5pdFByb2Nlc3NvcjsK
LSAgWG1sUHJvbG9nU3RhdGVJbml0KCZwcm9sb2dTdGF0ZSk7Ci0gIHByb3RvY29sRW5jb2RpbmdO
YW1lID0gKGVuY29kaW5nTmFtZSAhPSBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8g
cG9vbENvcHlTdHJpbmcoJnRlbXBQb29sLCBlbmNvZGluZ05hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIDogTlVMTCk7Ci0gIGN1ckJhc2UgPSBOVUxMOwotICBYbWxJbml0RW5jb2Rpbmco
JmluaXRFbmNvZGluZywgJmVuY29kaW5nLCAwKTsKLSAgdXNlckRhdGEgPSBOVUxMOwotICBoYW5k
bGVyQXJnID0gTlVMTDsKLSAgc3RhcnRFbGVtZW50SGFuZGxlciA9IE5VTEw7Ci0gIGVuZEVsZW1l
bnRIYW5kbGVyID0gTlVMTDsKLSAgY2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBOVUxMOwotICBwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gTlVMTDsKLSAgY29tbWVudEhhbmRsZXIgPSBOVUxM
OwotICBzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBOVUxMOwotICBlbmRDZGF0YVNlY3Rpb25I
YW5kbGVyID0gTlVMTDsKLSAgZGVmYXVsdEhhbmRsZXIgPSBOVUxMOwotICBzdGFydERvY3R5cGVE
ZWNsSGFuZGxlciA9IE5VTEw7Ci0gIGVuZERvY3R5cGVEZWNsSGFuZGxlciA9IE5VTEw7Ci0gIHVu
cGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgPSBOVUxMOwotICBub3RhdGlvbkRlY2xIYW5kbGVyID0g
TlVMTDsKLSAgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IE5VTEw7Ci0gIGVuZE5hbWVzcGFj
ZURlY2xIYW5kbGVyID0gTlVMTDsKLSAgbm90U3RhbmRhbG9uZUhhbmRsZXIgPSBOVUxMOwotICBl
eHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgPSBOVUxMOwotICBleHRlcm5hbEVudGl0eVJlZkhhbmRs
ZXJBcmcgPSBwYXJzZXI7Ci0gIHNraXBwZWRFbnRpdHlIYW5kbGVyID0gTlVMTDsKLSAgZWxlbWVu
dERlY2xIYW5kbGVyID0gTlVMTDsKLSAgYXR0bGlzdERlY2xIYW5kbGVyID0gTlVMTDsKLSAgZW50
aXR5RGVjbEhhbmRsZXIgPSBOVUxMOwotICB4bWxEZWNsSGFuZGxlciA9IE5VTEw7Ci0gIGJ1ZmZl
clB0ciA9IGJ1ZmZlcjsKLSAgYnVmZmVyRW5kID0gYnVmZmVyOwotICBwYXJzZUVuZEJ5dGVJbmRl
eCA9IDA7Ci0gIHBhcnNlRW5kUHRyID0gTlVMTDsKLSAgZGVjbEVsZW1lbnRUeXBlID0gTlVMTDsK
LSAgZGVjbEF0dHJpYnV0ZUlkID0gTlVMTDsKLSAgZGVjbEVudGl0eSA9IE5VTEw7Ci0gIGRvY3R5
cGVOYW1lID0gTlVMTDsKLSAgZG9jdHlwZVN5c2lkID0gTlVMTDsKLSAgZG9jdHlwZVB1YmlkID0g
TlVMTDsKLSAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBOVUxMOwotICBkZWNsTm90YXRpb25OYW1lID0g
TlVMTDsKLSAgZGVjbE5vdGF0aW9uUHVibGljSWQgPSBOVUxMOwotICBkZWNsQXR0cmlidXRlSXND
ZGF0YSA9IFhNTF9GQUxTRTsKLSAgZGVjbEF0dHJpYnV0ZUlzSWQgPSBYTUxfRkFMU0U7Ci0gIG1l
bXNldCgmcG9zaXRpb24sIDAsIHNpemVvZihQT1NJVElPTikpOwotICBlcnJvckNvZGUgPSBYTUxf
RVJST1JfTk9ORTsKLSAgZXZlbnRQdHIgPSBOVUxMOwotICBldmVudEVuZFB0ciA9IE5VTEw7Ci0g
IHBvc2l0aW9uUHRyID0gTlVMTDsKLSAgb3BlbkludGVybmFsRW50aXRpZXMgPSBOVUxMOwotICBk
ZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcyA9IFhNTF9UUlVFOwotICB0YWdMZXZlbCA9IDA7
Ci0gIHRhZ1N0YWNrID0gTlVMTDsKLSAgaW5oZXJpdGVkQmluZGluZ3MgPSBOVUxMOwotICBuU3Bl
Y2lmaWVkQXR0cyA9IDA7Ci0gIHVua25vd25FbmNvZGluZ01lbSA9IE5VTEw7Ci0gIHVua25vd25F
bmNvZGluZ1JlbGVhc2UgPSBOVUxMOwotICB1bmtub3duRW5jb2RpbmdEYXRhID0gTlVMTDsKLSAg
cGFyZW50UGFyc2VyID0gTlVMTDsKLSAgcHNfcGFyc2luZyA9IFhNTF9JTklUSUFMSVpFRDsKLSNp
ZmRlZiBYTUxfRFRECi0gIGlzUGFyYW1FbnRpdHkgPSBYTUxfRkFMU0U7Ci0gIHVzZUZvcmVpZ25E
VEQgPSBYTUxfRkFMU0U7Ci0gIHBhcmFtRW50aXR5UGFyc2luZyA9IFhNTF9QQVJBTV9FTlRJVFlf
UEFSU0lOR19ORVZFUjsKLSNlbmRpZgotICBoYXNoX3NlY3JldF9zYWx0ID0gMDsKLX0KLQotLyog
bW92ZXMgbGlzdCBvZiBiaW5kaW5ncyB0byBmcmVlQmluZGluZ0xpc3QgKi8KLXN0YXRpYyB2b2lk
IEZBU1RDQUxMCi1tb3ZlVG9GcmVlQmluZGluZ0xpc3QoWE1MX1BhcnNlciBwYXJzZXIsIEJJTkRJ
TkcgKmJpbmRpbmdzKQotewotICB3aGlsZSAoYmluZGluZ3MpIHsKLSAgICBCSU5ESU5HICpiID0g
YmluZGluZ3M7Ci0gICAgYmluZGluZ3MgPSBiaW5kaW5ncy0+bmV4dFRhZ0JpbmRpbmc7Ci0gICAg
Yi0+bmV4dFRhZ0JpbmRpbmcgPSBmcmVlQmluZGluZ0xpc3Q7Ci0gICAgZnJlZUJpbmRpbmdMaXN0
ID0gYjsKLSAgfQotfQotCi1YTUxfQm9vbCBYTUxDQUxMCi1YTUxfUGFyc2VyUmVzZXQoWE1MX1Bh
cnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpCi17Ci0gIFRBRyAqdFN0
azsKLSAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKm9wZW5FbnRpdHlMaXN0OwotICBpZiAocGFyZW50
UGFyc2VyKQotICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gIC8qIG1vdmUgdGFnU3RhY2sgdG8gZnJl
ZVRhZ0xpc3QgKi8KLSAgdFN0ayA9IHRhZ1N0YWNrOwotICB3aGlsZSAodFN0aykgewotICAgIFRB
RyAqdGFnID0gdFN0azsKLSAgICB0U3RrID0gdFN0ay0+cGFyZW50OwotICAgIHRhZy0+cGFyZW50
ID0gZnJlZVRhZ0xpc3Q7Ci0gICAgbW92ZVRvRnJlZUJpbmRpbmdMaXN0KHBhcnNlciwgdGFnLT5i
aW5kaW5ncyk7Ci0gICAgdGFnLT5iaW5kaW5ncyA9IE5VTEw7Ci0gICAgZnJlZVRhZ0xpc3QgPSB0
YWc7Ci0gIH0KLSAgLyogbW92ZSBvcGVuSW50ZXJuYWxFbnRpdGllcyB0byBmcmVlSW50ZXJuYWxF
bnRpdGllcyAqLwotICBvcGVuRW50aXR5TGlzdCA9IG9wZW5JbnRlcm5hbEVudGl0aWVzOwotICB3
aGlsZSAob3BlbkVudGl0eUxpc3QpIHsKLSAgICBPUEVOX0lOVEVSTkFMX0VOVElUWSAqb3BlbkVu
dGl0eSA9IG9wZW5FbnRpdHlMaXN0OwotICAgIG9wZW5FbnRpdHlMaXN0ID0gb3BlbkVudGl0eS0+
bmV4dDsKLSAgICBvcGVuRW50aXR5LT5uZXh0ID0gZnJlZUludGVybmFsRW50aXRpZXM7Ci0gICAg
ZnJlZUludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5OwotICB9Ci0gIG1vdmVUb0ZyZWVCaW5k
aW5nTGlzdChwYXJzZXIsIGluaGVyaXRlZEJpbmRpbmdzKTsKLSAgRlJFRSh1bmtub3duRW5jb2Rp
bmdNZW0pOwotICBpZiAodW5rbm93bkVuY29kaW5nUmVsZWFzZSkKLSAgICB1bmtub3duRW5jb2Rp
bmdSZWxlYXNlKHVua25vd25FbmNvZGluZ0RhdGEpOwotICBwb29sQ2xlYXIoJnRlbXBQb29sKTsK
LSAgcG9vbENsZWFyKCZ0ZW1wMlBvb2wpOwotICBwYXJzZXJJbml0KHBhcnNlciwgZW5jb2RpbmdO
YW1lKTsKLSAgZHRkUmVzZXQoX2R0ZCwgJnBhcnNlci0+bV9tZW0pOwotICByZXR1cm4gWE1MX1RS
VUU7Ci19Ci0KLWVudW0gWE1MX1N0YXR1cyBYTUxDQUxMCi1YTUxfU2V0RW5jb2RpbmcoWE1MX1Bh
cnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUpCi17Ci0gIC8qIEJsb2Nr
IGFmdGVyIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNhbGxlZC4KLSAg
ICAgWFhYIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUgY2FsbGVyIHRvIGRldGVybWluZSB3aGljaCBv
ZiB0aGUKLSAgICAgWFhYIHBvc3NpYmxlIGVycm9yIGNhc2VzIGNhdXNlZCB0aGUgWE1MX1NUQVRV
U19FUlJPUiByZXR1cm4uCi0gICovCi0gIGlmIChwc19wYXJzaW5nID09IFhNTF9QQVJTSU5HIHx8
IHBzX3BhcnNpbmcgPT0gWE1MX1NVU1BFTkRFRCkKLSAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJP
UjsKLSAgaWYgKGVuY29kaW5nTmFtZSA9PSBOVUxMKQotICAgIHByb3RvY29sRW5jb2RpbmdOYW1l
ID0gTlVMTDsKLSAgZWxzZSB7Ci0gICAgcHJvdG9jb2xFbmNvZGluZ05hbWUgPSBwb29sQ29weVN0
cmluZygmdGVtcFBvb2wsIGVuY29kaW5nTmFtZSk7Ci0gICAgaWYgKCFwcm90b2NvbEVuY29kaW5n
TmFtZSkKLSAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICB9Ci0gIHJldHVybiBYTUxf
U1RBVFVTX09LOwotfQotCi1YTUxfUGFyc2VyIFhNTENBTEwKLVhNTF9FeHRlcm5hbEVudGl0eVBh
cnNlckNyZWF0ZShYTUxfUGFyc2VyIG9sZFBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYTUxfQ2hhciAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQotewotICBYTUxfUGFyc2VyIHBh
cnNlciA9IG9sZFBhcnNlcjsKLSAgRFREICpuZXdEdGQgPSBOVUxMOwotICBEVEQgKm9sZER0ZCA9
IF9kdGQ7Ci0gIFhNTF9TdGFydEVsZW1lbnRIYW5kbGVyIG9sZFN0YXJ0RWxlbWVudEhhbmRsZXIg
PSBzdGFydEVsZW1lbnRIYW5kbGVyOwotICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgb2xkRW5kRWxl
bWVudEhhbmRsZXIgPSBlbmRFbGVtZW50SGFuZGxlcjsKLSAgWE1MX0NoYXJhY3RlckRhdGFIYW5k
bGVyIG9sZENoYXJhY3RlckRhdGFIYW5kbGVyID0gY2hhcmFjdGVyRGF0YUhhbmRsZXI7Ci0gIFhN
TF9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyIG9sZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhh
bmRsZXIKLSAgICAgID0gcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKLSAgWE1MX0NvbW1l
bnRIYW5kbGVyIG9sZENvbW1lbnRIYW5kbGVyID0gY29tbWVudEhhbmRsZXI7Ci0gIFhNTF9TdGFy
dENkYXRhU2VjdGlvbkhhbmRsZXIgb2xkU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyCi0gICAgICA9
IHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlcjsKLSAgWE1MX0VuZENkYXRhU2VjdGlvbkhhbmRsZXIg
b2xkRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcgotICAgICAgPSBlbmRDZGF0YVNlY3Rpb25IYW5kbGVy
OwotICBYTUxfRGVmYXVsdEhhbmRsZXIgb2xkRGVmYXVsdEhhbmRsZXIgPSBkZWZhdWx0SGFuZGxl
cjsKLSAgWE1MX1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIgb2xkVW5wYXJzZWRFbnRpdHlEZWNs
SGFuZGxlcgotICAgICAgPSB1bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyOwotICBYTUxfTm90YXRp
b25EZWNsSGFuZGxlciBvbGROb3RhdGlvbkRlY2xIYW5kbGVyID0gbm90YXRpb25EZWNsSGFuZGxl
cjsKLSAgWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgb2xkU3RhcnROYW1lc3BhY2VEZWNs
SGFuZGxlcgotICAgICAgPSBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyOwotICBYTUxfRW5kTmFt
ZXNwYWNlRGVjbEhhbmRsZXIgb2xkRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIKLSAgICAgID0gZW5k
TmFtZXNwYWNlRGVjbEhhbmRsZXI7Ci0gIFhNTF9Ob3RTdGFuZGFsb25lSGFuZGxlciBvbGROb3RT
dGFuZGFsb25lSGFuZGxlciA9IG5vdFN0YW5kYWxvbmVIYW5kbGVyOwotICBYTUxfRXh0ZXJuYWxF
bnRpdHlSZWZIYW5kbGVyIG9sZEV4dGVybmFsRW50aXR5UmVmSGFuZGxlcgotICAgICAgPSBleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXI7Ci0gIFhNTF9Ta2lwcGVkRW50aXR5SGFuZGxlciBvbGRTa2lw
cGVkRW50aXR5SGFuZGxlciA9IHNraXBwZWRFbnRpdHlIYW5kbGVyOwotICBYTUxfVW5rbm93bkVu
Y29kaW5nSGFuZGxlciBvbGRVbmtub3duRW5jb2RpbmdIYW5kbGVyCi0gICAgICA9IHVua25vd25F
bmNvZGluZ0hhbmRsZXI7Ci0gIFhNTF9FbGVtZW50RGVjbEhhbmRsZXIgb2xkRWxlbWVudERlY2xI
YW5kbGVyID0gZWxlbWVudERlY2xIYW5kbGVyOwotICBYTUxfQXR0bGlzdERlY2xIYW5kbGVyIG9s
ZEF0dGxpc3REZWNsSGFuZGxlciA9IGF0dGxpc3REZWNsSGFuZGxlcjsKLSAgWE1MX0VudGl0eURl
Y2xIYW5kbGVyIG9sZEVudGl0eURlY2xIYW5kbGVyID0gZW50aXR5RGVjbEhhbmRsZXI7Ci0gIFhN
TF9YbWxEZWNsSGFuZGxlciBvbGRYbWxEZWNsSGFuZGxlciA9IHhtbERlY2xIYW5kbGVyOwotICBF
TEVNRU5UX1RZUEUgKiBvbGREZWNsRWxlbWVudFR5cGUgPSBkZWNsRWxlbWVudFR5cGU7Ci0KLSAg
dm9pZCAqb2xkVXNlckRhdGEgPSB1c2VyRGF0YTsKLSAgdm9pZCAqb2xkSGFuZGxlckFyZyA9IGhh
bmRsZXJBcmc7Ci0gIFhNTF9Cb29sIG9sZERlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0g
ZGVmYXVsdEV4cGFuZEludGVybmFsRW50aXRpZXM7Ci0gIFhNTF9QYXJzZXIgb2xkRXh0ZXJuYWxF
bnRpdHlSZWZIYW5kbGVyQXJnID0gZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnOwotI2lmZGVm
IFhNTF9EVEQKLSAgZW51bSBYTUxfUGFyYW1FbnRpdHlQYXJzaW5nIG9sZFBhcmFtRW50aXR5UGFy
c2luZyA9IHBhcmFtRW50aXR5UGFyc2luZzsKLSAgaW50IG9sZEluRW50aXR5VmFsdWUgPSBwcm9s
b2dTdGF0ZS5pbkVudGl0eVZhbHVlOwotI2VuZGlmCi0gIFhNTF9Cb29sIG9sZG5zX3RyaXBsZXRz
ID0gbnNfdHJpcGxldHM7Ci0gIC8qIE5vdGUgdGhhdCB0aGUgbmV3IHBhcnNlciBzaGFyZXMgdGhl
IHNhbWUgaGFzaCBzZWNyZXQgYXMgdGhlIG9sZAotICAgICBwYXJzZXIsIHNvIHRoYXQgZHRkQ29w
eSBhbmQgY29weUVudGl0eVRhYmxlIGNhbiBsb29rdXAgdmFsdWVzCi0gICAgIGZyb20gaGFzaCB0
YWJsZXMgYXNzb2NpYXRlZCB3aXRoIGVpdGhlciBwYXJzZXIgd2l0aG91dCB1cyBoYXZpbmcKLSAg
ICAgdG8gd29ycnkgd2hpY2ggaGFzaCBzZWNyZXRzIGVhY2ggdGFibGUgaGFzLgotICAqLwotICB1
bnNpZ25lZCBsb25nIG9sZGhhc2hfc2VjcmV0X3NhbHQgPSBoYXNoX3NlY3JldF9zYWx0OwotCi0j
aWZkZWYgWE1MX0RURAotICBpZiAoIWNvbnRleHQpCi0gICAgbmV3RHRkID0gb2xkRHRkOwotI2Vu
ZGlmIC8qIFhNTF9EVEQgKi8KLQotICAvKiBOb3RlIHRoYXQgdGhlIG1hZ2ljYWwgdXNlcyBvZiB0
aGUgcHJlLXByb2Nlc3NvciB0byBtYWtlIGZpZWxkCi0gICAgIGFjY2VzcyBsb29rIG1vcmUgbGlr
ZSBDKysgcmVxdWlyZSB0aGF0IGBwYXJzZXInIGJlIG92ZXJ3cml0dGVuCi0gICAgIGhlcmUuICBU
aGlzIG1ha2VzIHRoaXMgZnVuY3Rpb24gbW9yZSBwYWluZnVsIHRvIGZvbGxvdyB0aGFuIGl0Ci0g
ICAgIHdvdWxkIGJlIG90aGVyd2lzZS4KLSAgKi8KLSAgaWYgKG5zKSB7Ci0gICAgWE1MX0NoYXIg
dG1wWzJdOwotICAgICp0bXAgPSBuYW1lc3BhY2VTZXBhcmF0b3I7Ci0gICAgcGFyc2VyID0gcGFy
c2VyQ3JlYXRlKGVuY29kaW5nTmFtZSwgJnBhcnNlci0+bV9tZW0sIHRtcCwgbmV3RHRkKTsKLSAg
fQotICBlbHNlIHsKLSAgICBwYXJzZXIgPSBwYXJzZXJDcmVhdGUoZW5jb2RpbmdOYW1lLCAmcGFy
c2VyLT5tX21lbSwgTlVMTCwgbmV3RHRkKTsKLSAgfQotCi0gIGlmICghcGFyc2VyKQotICAgIHJl
dHVybiBOVUxMOwotCi0gIHN0YXJ0RWxlbWVudEhhbmRsZXIgPSBvbGRTdGFydEVsZW1lbnRIYW5k
bGVyOwotICBlbmRFbGVtZW50SGFuZGxlciA9IG9sZEVuZEVsZW1lbnRIYW5kbGVyOwotICBjaGFy
YWN0ZXJEYXRhSGFuZGxlciA9IG9sZENoYXJhY3RlckRhdGFIYW5kbGVyOwotICBwcm9jZXNzaW5n
SW5zdHJ1Y3Rpb25IYW5kbGVyID0gb2xkUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKLSAg
Y29tbWVudEhhbmRsZXIgPSBvbGRDb21tZW50SGFuZGxlcjsKLSAgc3RhcnRDZGF0YVNlY3Rpb25I
YW5kbGVyID0gb2xkU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyOwotICBlbmRDZGF0YVNlY3Rpb25I
YW5kbGVyID0gb2xkRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcjsKLSAgZGVmYXVsdEhhbmRsZXIgPSBv
bGREZWZhdWx0SGFuZGxlcjsKLSAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciA9IG9sZFVucGFy
c2VkRW50aXR5RGVjbEhhbmRsZXI7Ci0gIG5vdGF0aW9uRGVjbEhhbmRsZXIgPSBvbGROb3RhdGlv
bkRlY2xIYW5kbGVyOwotICBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gb2xkU3RhcnROYW1l
c3BhY2VEZWNsSGFuZGxlcjsKLSAgZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBvbGRFbmROYW1l
c3BhY2VEZWNsSGFuZGxlcjsKLSAgbm90U3RhbmRhbG9uZUhhbmRsZXIgPSBvbGROb3RTdGFuZGFs
b25lSGFuZGxlcjsKLSAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyID0gb2xkRXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyOwotICBza2lwcGVkRW50aXR5SGFuZGxlciA9IG9sZFNraXBwZWRFbnRpdHlI
YW5kbGVyOwotICB1bmtub3duRW5jb2RpbmdIYW5kbGVyID0gb2xkVW5rbm93bkVuY29kaW5nSGFu
ZGxlcjsKLSAgZWxlbWVudERlY2xIYW5kbGVyID0gb2xkRWxlbWVudERlY2xIYW5kbGVyOwotICBh
dHRsaXN0RGVjbEhhbmRsZXIgPSBvbGRBdHRsaXN0RGVjbEhhbmRsZXI7Ci0gIGVudGl0eURlY2xI
YW5kbGVyID0gb2xkRW50aXR5RGVjbEhhbmRsZXI7Ci0gIHhtbERlY2xIYW5kbGVyID0gb2xkWG1s
RGVjbEhhbmRsZXI7Ci0gIGRlY2xFbGVtZW50VHlwZSA9IG9sZERlY2xFbGVtZW50VHlwZTsKLSAg
dXNlckRhdGEgPSBvbGRVc2VyRGF0YTsKLSAgaWYgKG9sZFVzZXJEYXRhID09IG9sZEhhbmRsZXJB
cmcpCi0gICAgaGFuZGxlckFyZyA9IHVzZXJEYXRhOwotICBlbHNlCi0gICAgaGFuZGxlckFyZyA9
IHBhcnNlcjsKLSAgaWYgKG9sZEV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyAhPSBvbGRQYXJz
ZXIpCi0gICAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnID0gb2xkRXh0ZXJuYWxFbnRpdHlS
ZWZIYW5kbGVyQXJnOwotICBkZWZhdWx0RXhwYW5kSW50ZXJuYWxFbnRpdGllcyA9IG9sZERlZmF1
bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzOwotICBuc190cmlwbGV0cyA9IG9sZG5zX3RyaXBsZXRz
OwotICBoYXNoX3NlY3JldF9zYWx0ID0gb2xkaGFzaF9zZWNyZXRfc2FsdDsKLSAgcGFyZW50UGFy
c2VyID0gb2xkUGFyc2VyOwotI2lmZGVmIFhNTF9EVEQKLSAgcGFyYW1FbnRpdHlQYXJzaW5nID0g
b2xkUGFyYW1FbnRpdHlQYXJzaW5nOwotICBwcm9sb2dTdGF0ZS5pbkVudGl0eVZhbHVlID0gb2xk
SW5FbnRpdHlWYWx1ZTsKLSAgaWYgKGNvbnRleHQpIHsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0g
ICAgaWYgKCFkdGRDb3B5KG9sZFBhcnNlciwgX2R0ZCwgb2xkRHRkLCAmcGFyc2VyLT5tX21lbSkK
LSAgICAgIHx8ICFzZXRDb250ZXh0KHBhcnNlciwgY29udGV4dCkpIHsKLSAgICAgIFhNTF9QYXJz
ZXJGcmVlKHBhcnNlcik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcHJvY2Vzc29y
ID0gZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yOwotI2lmZGVmIFhNTF9EVEQKLSAgfQotICBl
bHNlIHsKLSAgICAvKiBUaGUgRFREIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgX2R0ZCBpcyBzaGFy
ZWQgYmV0d2VlbiB0aGUgZG9jdW1lbnQncwotICAgICAgIHJvb3QgcGFyc2VyIGFuZCBleHRlcm5h
bCBQRSBwYXJzZXJzLCB0aGVyZWZvcmUgb25lIGRvZXMgbm90IG5lZWQgdG8KLSAgICAgICBjYWxs
IHNldENvbnRleHQuIEluIGFkZGl0aW9uLCBvbmUgYWxzbyAqbXVzdCogbm90IGNhbGwgc2V0Q29u
dGV4dCwKLSAgICAgICBiZWNhdXNlIHRoaXMgd291bGQgb3ZlcndyaXRlIGV4aXN0aW5nIHByZWZp
eC0+YmluZGluZyBwb2ludGVycyBpbgotICAgICAgIF9kdGQgd2l0aCBvbmVzIHRoYXQgZ2V0IGRl
c3Ryb3llZCB3aXRoIHRoZSBleHRlcm5hbCBQRSBwYXJzZXIuCi0gICAgICAgVGhpcyB3b3VsZCBs
ZWF2ZSB0aG9zZSBwcmVmaXhlcyB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzLgotICAgICovCi0gICAg
aXNQYXJhbUVudGl0eSA9IFhNTF9UUlVFOwotICAgIFhtbFByb2xvZ1N0YXRlSW5pdEV4dGVybmFs
RW50aXR5KCZwcm9sb2dTdGF0ZSk7Ci0gICAgcHJvY2Vzc29yID0gZXh0ZXJuYWxQYXJFbnRJbml0
UHJvY2Vzc29yOwotICB9Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICByZXR1cm4gcGFyc2VyOwot
fQotCi1zdGF0aWMgdm9pZCBGQVNUQ0FMTAotZGVzdHJveUJpbmRpbmdzKEJJTkRJTkcgKmJpbmRp
bmdzLCBYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgZm9yICg7OykgewotICAgIEJJTkRJTkcgKmIg
PSBiaW5kaW5nczsKLSAgICBpZiAoIWIpCi0gICAgICBicmVhazsKLSAgICBiaW5kaW5ncyA9IGIt
Pm5leHRUYWdCaW5kaW5nOwotICAgIEZSRUUoYi0+dXJpKTsKLSAgICBGUkVFKGIpOwotICB9Ci19
Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1BhcnNlckZyZWUoWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0g
IFRBRyAqdGFnTGlzdDsKLSAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKmVudGl0eUxpc3Q7Ci0gIGlm
IChwYXJzZXIgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIC8qIGZyZWUgdGFnU3RhY2sgYW5kIGZy
ZWVUYWdMaXN0ICovCi0gIHRhZ0xpc3QgPSB0YWdTdGFjazsKLSAgZm9yICg7OykgewotICAgIFRB
RyAqcDsKLSAgICBpZiAodGFnTGlzdCA9PSBOVUxMKSB7Ci0gICAgICBpZiAoZnJlZVRhZ0xpc3Qg
PT0gTlVMTCkKLSAgICAgICAgYnJlYWs7Ci0gICAgICB0YWdMaXN0ID0gZnJlZVRhZ0xpc3Q7Ci0g
ICAgICBmcmVlVGFnTGlzdCA9IE5VTEw7Ci0gICAgfQotICAgIHAgPSB0YWdMaXN0OwotICAgIHRh
Z0xpc3QgPSB0YWdMaXN0LT5wYXJlbnQ7Ci0gICAgRlJFRShwLT5idWYpOwotICAgIGRlc3Ryb3lC
aW5kaW5ncyhwLT5iaW5kaW5ncywgcGFyc2VyKTsKLSAgICBGUkVFKHApOwotICB9Ci0gIC8qIGZy
ZWUgb3BlbkludGVybmFsRW50aXRpZXMgYW5kIGZyZWVJbnRlcm5hbEVudGl0aWVzICovCi0gIGVu
dGl0eUxpc3QgPSBvcGVuSW50ZXJuYWxFbnRpdGllczsKLSAgZm9yICg7OykgewotICAgIE9QRU5f
SU5URVJOQUxfRU5USVRZICpvcGVuRW50aXR5OwotICAgIGlmIChlbnRpdHlMaXN0ID09IE5VTEwp
IHsKLSAgICAgIGlmIChmcmVlSW50ZXJuYWxFbnRpdGllcyA9PSBOVUxMKQotICAgICAgICBicmVh
azsKLSAgICAgIGVudGl0eUxpc3QgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsKLSAgICAgIGZyZWVJ
bnRlcm5hbEVudGl0aWVzID0gTlVMTDsKLSAgICB9Ci0gICAgb3BlbkVudGl0eSA9IGVudGl0eUxp
c3Q7Ci0gICAgZW50aXR5TGlzdCA9IGVudGl0eUxpc3QtPm5leHQ7Ci0gICAgRlJFRShvcGVuRW50
aXR5KTsKLSAgfQotCi0gIGRlc3Ryb3lCaW5kaW5ncyhmcmVlQmluZGluZ0xpc3QsIHBhcnNlcik7
Ci0gIGRlc3Ryb3lCaW5kaW5ncyhpbmhlcml0ZWRCaW5kaW5ncywgcGFyc2VyKTsKLSAgcG9vbERl
c3Ryb3koJnRlbXBQb29sKTsKLSAgcG9vbERlc3Ryb3koJnRlbXAyUG9vbCk7Ci0jaWZkZWYgWE1M
X0RURAotICAvKiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXR5IHBhcnNlcnMgc2hhcmUgdGhlIERU
RCBzdHJ1Y3R1cmUKLSAgICAgcGFyc2VyLT5tX2R0ZCB3aXRoIHRoZSByb290IHBhcnNlciwgc28g
d2UgbXVzdCBub3QgZGVzdHJveSBpdAotICAqLwotICBpZiAoIWlzUGFyYW1FbnRpdHkgJiYgX2R0
ZCkKLSNlbHNlCi0gIGlmIChfZHRkKQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICBkdGREZXN0
cm95KF9kdGQsIChYTUxfQm9vbCkhcGFyZW50UGFyc2VyLCAmcGFyc2VyLT5tX21lbSk7Ci0gIEZS
RUUoKHZvaWQgKilhdHRzKTsKLSNpZmRlZiBYTUxfQVRUUl9JTkZPCi0gIEZSRUUoKHZvaWQgKilh
dHRJbmZvKTsKLSNlbmRpZgotICBGUkVFKGdyb3VwQ29ubmVjdG9yKTsKLSAgRlJFRShidWZmZXIp
OwotICBGUkVFKGRhdGFCdWYpOwotICBGUkVFKG5zQXR0cyk7Ci0gIEZSRUUodW5rbm93bkVuY29k
aW5nTWVtKTsKLSAgaWYgKHVua25vd25FbmNvZGluZ1JlbGVhc2UpCi0gICAgdW5rbm93bkVuY29k
aW5nUmVsZWFzZSh1bmtub3duRW5jb2RpbmdEYXRhKTsKLSAgRlJFRShwYXJzZXIpOwotfQotCi12
b2lkIFhNTENBTEwKLVhNTF9Vc2VQYXJzZXJBc0hhbmRsZXJBcmcoWE1MX1BhcnNlciBwYXJzZXIp
Ci17Ci0gIGhhbmRsZXJBcmcgPSBwYXJzZXI7Ci19Ci0KLWVudW0gWE1MX0Vycm9yIFhNTENBTEwK
LVhNTF9Vc2VGb3JlaWduRFREKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQm9vbCB1c2VEVEQpCi17
Ci0jaWZkZWYgWE1MX0RURAotICAvKiBibG9jayBhZnRlciBYTUxfUGFyc2UoKS9YTUxfUGFyc2VC
dWZmZXIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KLSAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX1BBUlNJ
TkcgfHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQotICAgIHJldHVybiBYTUxfRVJST1Jf
Q0FOVF9DSEFOR0VfRkVBVFVSRV9PTkNFX1BBUlNJTkc7Ci0gIHVzZUZvcmVpZ25EVEQgPSB1c2VE
VEQ7Ci0gIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSNlbHNlCi0gIHJldHVybiBYTUxfRVJST1Jf
RkVBVFVSRV9SRVFVSVJFU19YTUxfRFREOwotI2VuZGlmCi19Ci0KLXZvaWQgWE1MQ0FMTAotWE1M
X1NldFJldHVybk5TVHJpcGxldChYTUxfUGFyc2VyIHBhcnNlciwgaW50IGRvX25zdCkKLXsKLSAg
LyogYmxvY2sgYWZ0ZXIgWE1MX1BhcnNlKCkvWE1MX1BhcnNlQnVmZmVyKCkgaGFzIGJlZW4gY2Fs
bGVkICovCi0gIGlmIChwc19wYXJzaW5nID09IFhNTF9QQVJTSU5HIHx8IHBzX3BhcnNpbmcgPT0g
WE1MX1NVU1BFTkRFRCkKLSAgICByZXR1cm47Ci0gIG5zX3RyaXBsZXRzID0gZG9fbnN0ID8gWE1M
X1RSVUUgOiBYTUxfRkFMU0U7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldFVzZXJEYXRhKFhN
TF9QYXJzZXIgcGFyc2VyLCB2b2lkICpwKQotewotICBpZiAoaGFuZGxlckFyZyA9PSB1c2VyRGF0
YSkKLSAgICBoYW5kbGVyQXJnID0gdXNlckRhdGEgPSBwOwotICBlbHNlCi0gICAgdXNlckRhdGEg
PSBwOwotfQotCi1lbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAotWE1MX1NldEJhc2UoWE1MX1BhcnNl
ciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpwKQotewotICBpZiAocCkgewotICAgIHAgPSBwb29s
Q29weVN0cmluZygmX2R0ZC0+cG9vbCwgcCk7Ci0gICAgaWYgKCFwKQotICAgICAgcmV0dXJuIFhN
TF9TVEFUVVNfRVJST1I7Ci0gICAgY3VyQmFzZSA9IHA7Ci0gIH0KLSAgZWxzZQotICAgIGN1ckJh
c2UgPSBOVUxMOwotICByZXR1cm4gWE1MX1NUQVRVU19PSzsKLX0KLQotY29uc3QgWE1MX0NoYXIg
KiBYTUxDQUxMCi1YTUxfR2V0QmFzZShYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgcmV0dXJuIGN1
ckJhc2U7Ci19Ci0KLWludCBYTUxDQUxMCi1YTUxfR2V0U3BlY2lmaWVkQXR0cmlidXRlQ291bnQo
WE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIHJldHVybiBuU3BlY2lmaWVkQXR0czsKLX0KLQotaW50
IFhNTENBTEwKLVhNTF9HZXRJZEF0dHJpYnV0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKQotewot
ICByZXR1cm4gaWRBdHRJbmRleDsKLX0KLQotI2lmZGVmIFhNTF9BVFRSX0lORk8KLWNvbnN0IFhN
TF9BdHRySW5mbyAqIFhNTENBTEwKLVhNTF9HZXRBdHRyaWJ1dGVJbmZvKFhNTF9QYXJzZXIgcGFy
c2VyKQotewotICByZXR1cm4gYXR0SW5mbzsKLX0KLSNlbmRpZgotCi12b2lkIFhNTENBTEwKLVhN
TF9TZXRFbGVtZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAg
ICAgICBYTUxfU3RhcnRFbGVtZW50SGFuZGxlciBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAg
ICBYTUxfRW5kRWxlbWVudEhhbmRsZXIgZW5kKQotewotICBzdGFydEVsZW1lbnRIYW5kbGVyID0g
c3RhcnQ7Ci0gIGVuZEVsZW1lbnRIYW5kbGVyID0gZW5kOwotfQotCi12b2lkIFhNTENBTEwKLVhN
TF9TZXRTdGFydEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgc3RhcnQpIHsKLSAgc3RhcnRF
bGVtZW50SGFuZGxlciA9IHN0YXJ0OwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRFbmRFbGVt
ZW50SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBY
TUxfRW5kRWxlbWVudEhhbmRsZXIgZW5kKSB7Ci0gIGVuZEVsZW1lbnRIYW5kbGVyID0gZW5kOwot
fQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihYTUxfUGFyc2Vy
IHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhh
bmRsZXIgaGFuZGxlcikKLXsKLSAgY2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBoYW5kbGVyOwotfQot
Ci12b2lkIFhNTENBTEwKLVhNTF9TZXRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1By
b2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgaGFuZGxlcikKLXsKLSAgcHJvY2Vzc2luZ0luc3Ry
dWN0aW9uSGFuZGxlciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldENvbW1l
bnRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9D
b21tZW50SGFuZGxlciBoYW5kbGVyKQotewotICBjb21tZW50SGFuZGxlciA9IGhhbmRsZXI7Ci19
Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldENkYXRhU2VjdGlvbkhhbmRsZXIoWE1MX1BhcnNlciBw
YXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25I
YW5kbGVyIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZENkYXRhU2Vj
dGlvbkhhbmRsZXIgZW5kKQotewotICBzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBzdGFydDsK
LSAgZW5kQ2RhdGFTZWN0aW9uSGFuZGxlciA9IGVuZDsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxf
U2V0U3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyIHN0YXJ0
KSB7Ci0gIHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciA9IHN0YXJ0OwotfQotCi12b2lkIFhNTENB
TEwKLVhNTF9TZXRFbmRDZGF0YVNlY3Rpb25IYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZENkYXRhU2VjdGlvbkhhbmRsZXIgZW5k
KSB7Ci0gIGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBlbmQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAot
WE1MX1NldERlZmF1bHRIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAg
ICAgICAgIFhNTF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKQotewotICBkZWZhdWx0SGFuZGxlciA9
IGhhbmRsZXI7Ci0gIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gWE1MX0ZBTFNFOwot
fQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXREZWZhdWx0SGFuZGxlckV4cGFuZChYTUxfUGFyc2Vy
IHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRGVmYXVsdEhhbmRsZXIg
aGFuZGxlcikKLXsKLSAgZGVmYXVsdEhhbmRsZXIgPSBoYW5kbGVyOwotICBkZWZhdWx0RXhwYW5k
SW50ZXJuYWxFbnRpdGllcyA9IFhNTF9UUlVFOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRE
b2N0eXBlRGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlciBzdGFydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgWE1MX0VuZERvY3R5cGVEZWNsSGFuZGxlciBlbmQpCi17Ci0gIHN0YXJ0RG9j
dHlwZURlY2xIYW5kbGVyID0gc3RhcnQ7Ci0gIGVuZERvY3R5cGVEZWNsSGFuZGxlciA9IGVuZDsK
LX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0U3RhcnREb2N0eXBlRGVjbEhhbmRsZXIoWE1MX1Bh
cnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9j
dHlwZURlY2xIYW5kbGVyIHN0YXJ0KSB7Ci0gIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyID0gc3Rh
cnQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEVuZERvY3R5cGVEZWNsSGFuZGxlcihYTUxf
UGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZERvY3R5
cGVEZWNsSGFuZGxlciBlbmQpIHsKLSAgZW5kRG9jdHlwZURlY2xIYW5kbGVyID0gZW5kOwotfQot
Ci12b2lkIFhNTENBTEwKLVhNTF9TZXRVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKFhNTF9QYXJz
ZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1VucGFyc2Vk
RW50aXR5RGVjbEhhbmRsZXIgaGFuZGxlcikKLXsKLSAgdW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxl
ciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldE5vdGF0aW9uRGVjbEhhbmRs
ZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfTm90
YXRpb25EZWNsSGFuZGxlciBoYW5kbGVyKQotewotICBub3RhdGlvbkRlY2xIYW5kbGVyID0gaGFu
ZGxlcjsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1M
X1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0TmFt
ZXNwYWNlRGVjbEhhbmRsZXIgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1M
X0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyIGVuZCkKLXsKLSAgc3RhcnROYW1lc3BhY2VEZWNsSGFu
ZGxlciA9IHN0YXJ0OwotICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGVuZDsKLX0KLQotdm9p
ZCBYTUxDQUxMCi1YTUxfU2V0U3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBh
cnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydE5hbWVzcGFj
ZURlY2xIYW5kbGVyIHN0YXJ0KSB7Ci0gIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBzdGFy
dDsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0RW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIoWE1M
X1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VuZE5h
bWVzcGFjZURlY2xIYW5kbGVyIGVuZCkgewotICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGVu
ZDsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0Tm90U3RhbmRhbG9uZUhhbmRsZXIoWE1MX1Bh
cnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX05vdFN0YW5kYWxv
bmVIYW5kbGVyIGhhbmRsZXIpCi17Ci0gIG5vdFN0YW5kYWxvbmVIYW5kbGVyID0gaGFuZGxlcjsK
LX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRXh0ZXJu
YWxFbnRpdHlSZWZIYW5kbGVyIGhhbmRsZXIpCi17Ci0gIGV4dGVybmFsRW50aXR5UmVmSGFuZGxl
ciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEV4dGVybmFsRW50aXR5UmVm
SGFuZGxlckFyZyhYTUxfUGFyc2VyIHBhcnNlciwgdm9pZCAqYXJnKQotewotICBpZiAoYXJnKQot
ICAgIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IChYTUxfUGFyc2VyKWFyZzsKLSAgZWxz
ZQotICAgIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IHBhcnNlcjsKLX0KLQotdm9pZCBY
TUxDQUxMCi1YTUxfU2V0U2tpcHBlZEVudGl0eUhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1NraXBwZWRFbnRpdHlIYW5kbGVyIGhhbmRs
ZXIpCi17Ci0gIHNraXBwZWRFbnRpdHlIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQotdm9pZCBYTUxD
QUxMCi1YTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyIGhh
bmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQotewotICB1
bmtub3duRW5jb2RpbmdIYW5kbGVyID0gaGFuZGxlcjsKLSAgdW5rbm93bkVuY29kaW5nSGFuZGxl
ckRhdGEgPSBkYXRhOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRFbGVtZW50RGVjbEhhbmRs
ZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbGVt
ZW50RGVjbEhhbmRsZXIgZWxkZWNsKQotewotICBlbGVtZW50RGVjbEhhbmRsZXIgPSBlbGRlY2w7
Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEF0dGxpc3REZWNsSGFuZGxlcihYTUxfUGFyc2Vy
IHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0F0dGxpc3REZWNsSGFuZGxl
ciBhdHRkZWNsKQotewotICBhdHRsaXN0RGVjbEhhbmRsZXIgPSBhdHRkZWNsOwotfQotCi12b2lk
IFhNTENBTEwKLVhNTF9TZXRFbnRpdHlEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW50aXR5RGVjbEhhbmRsZXIgaGFuZGxlcikKLXsK
LSAgZW50aXR5RGVjbEhhbmRsZXIgPSBoYW5kbGVyOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9T
ZXRYbWxEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAg
ICBYTUxfWG1sRGVjbEhhbmRsZXIgaGFuZGxlcikgewotICB4bWxEZWNsSGFuZGxlciA9IGhhbmRs
ZXI7Ci19Ci0KLWludCBYTUxDQUxMCi1YTUxfU2V0UGFyYW1FbnRpdHlQYXJzaW5nKFhNTF9QYXJz
ZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIFhNTF9QYXJhbUVudGl0
eVBhcnNpbmcgcGVQYXJzaW5nKQotewotICAvKiBibG9jayBhZnRlciBYTUxfUGFyc2UoKS9YTUxf
UGFyc2VCdWZmZXIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KLSAgaWYgKHBzX3BhcnNpbmcgPT0gWE1M
X1BBUlNJTkcgfHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQotICAgIHJldHVybiAwOwot
I2lmZGVmIFhNTF9EVEQKLSAgcGFyYW1FbnRpdHlQYXJzaW5nID0gcGVQYXJzaW5nOwotICByZXR1
cm4gMTsKLSNlbHNlCi0gIHJldHVybiBwZVBhcnNpbmcgPT0gWE1MX1BBUkFNX0VOVElUWV9QQVJT
SU5HX05FVkVSOwotI2VuZGlmCi19Ci0KLWludCBYTUxDQUxMCi1YTUxfU2V0SGFzaFNhbHQoWE1M
X1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBoYXNoX3NhbHQp
Ci17Ci0gIC8qIGJsb2NrIGFmdGVyIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBi
ZWVuIGNhbGxlZCAqLwotICBpZiAocHNfcGFyc2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJz
aW5nID09IFhNTF9TVVNQRU5ERUQpCi0gICAgcmV0dXJuIDA7Ci0gIGhhc2hfc2VjcmV0X3NhbHQg
PSBoYXNoX3NhbHQ7Ci0gIHJldHVybiAxOwotfQotCi1lbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAot
WE1MX1BhcnNlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQg
aXNGaW5hbCkKLXsKLSAgc3dpdGNoIChwc19wYXJzaW5nKSB7Ci0gIGNhc2UgWE1MX1NVU1BFTkRF
RDoKLSAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVOREVEOwotICAgIHJldHVybiBYTUxf
U1RBVFVTX0VSUk9SOwotICBjYXNlIFhNTF9GSU5JU0hFRDoKLSAgICBlcnJvckNvZGUgPSBYTUxf
RVJST1JfRklOSVNIRUQ7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Ci0gIGNhc2UgWE1M
X0lOSVRJQUxJWkVEOgotICAgIGlmIChwYXJlbnRQYXJzZXIgPT0gTlVMTCAmJiAhc3RhcnRQYXJz
aW5nKHBhcnNlcikpIHsKLSAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0g
ICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgICB9Ci0gIGRlZmF1bHQ6Ci0gICAgcHNf
cGFyc2luZyA9IFhNTF9QQVJTSU5HOwotICB9Ci0KLSAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgcHNf
ZmluYWxCdWZmZXIgPSAoWE1MX0Jvb2wpaXNGaW5hbDsKLSAgICBpZiAoIWlzRmluYWwpCi0gICAg
ICByZXR1cm4gWE1MX1NUQVRVU19PSzsKLSAgICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKLSAg
ICBwYXJzZUVuZFB0ciA9IGJ1ZmZlckVuZDsKLQotICAgIC8qIElmIGRhdGEgYXJlIGxlZnQgb3Zl
ciBmcm9tIGxhc3QgYnVmZmVyLCBhbmQgd2Ugbm93IGtub3cgdGhhdCB0aGVzZQotICAgICAgIGRh
dGEgYXJlIHRoZSBmaW5hbCBjaHVuayBvZiBpbnB1dCwgdGhlbiB3ZSBoYXZlIHRvIGNoZWNrIHRo
ZW0gYWdhaW4KLSAgICAgICB0byBkZXRlY3QgZXJyb3JzIGJhc2VkIG9uIHRoYXQgZmFjdC4KLSAg
ICAqLwotICAgIGVycm9yQ29kZSA9IHByb2Nlc3NvcihwYXJzZXIsIGJ1ZmZlclB0ciwgcGFyc2VF
bmRQdHIsICZidWZmZXJQdHIpOwotCi0gICAgaWYgKGVycm9yQ29kZSA9PSBYTUxfRVJST1JfTk9O
RSkgewotICAgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7Ci0gICAgICBjYXNlIFhNTF9TVVNQRU5E
RUQ6Ci0gICAgICAgIFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgYnVm
ZmVyUHRyLCAmcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKLSAg
ICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfU1VTUEVOREVEOwotICAgICAgY2FzZSBYTUxfSU5JVElB
TElaRUQ6Ci0gICAgICBjYXNlIFhNTF9QQVJTSU5HOgotICAgICAgICBwc19wYXJzaW5nID0gWE1M
X0ZJTklTSEVEOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBYTUxfU1RBVFVTX09LOwotICAgICAgfQotICAgIH0KLSAgICBldmVudEVu
ZFB0ciA9IGV2ZW50UHRyOwotICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vzc29yOwotICAgIHJl
dHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICB9Ci0jaWZuZGVmIFhNTF9DT05URVhUX0JZVEVTCi0g
IGVsc2UgaWYgKGJ1ZmZlclB0ciA9PSBidWZmZXJFbmQpIHsKLSAgICBjb25zdCBjaGFyICplbmQ7
Ci0gICAgaW50IG5MZWZ0T3ZlcjsKLSAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7Ci0gICAgcGFy
c2VFbmRCeXRlSW5kZXggKz0gbGVuOwotICAgIHBvc2l0aW9uUHRyID0gczsKLSAgICBwc19maW5h
bEJ1ZmZlciA9IChYTUxfQm9vbClpc0ZpbmFsOwotCi0gICAgZXJyb3JDb2RlID0gcHJvY2Vzc29y
KHBhcnNlciwgcywgcGFyc2VFbmRQdHIgPSBzICsgbGVuLCAmZW5kKTsKLQotICAgIGlmIChlcnJv
ckNvZGUgIT0gWE1MX0VSUk9SX05PTkUpIHsKLSAgICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7
Ci0gICAgICBwcm9jZXNzb3IgPSBlcnJvclByb2Nlc3NvcjsKLSAgICAgIHJldHVybiBYTUxfU1RB
VFVTX0VSUk9SOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHN3aXRjaCAocHNfcGFyc2luZykg
ewotICAgICAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgICAgICByZXN1bHQgPSBYTUxfU1RBVFVT
X1NVU1BFTkRFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoK
LSAgICAgIGNhc2UgWE1MX1BBUlNJTkc6Ci0gICAgICAgIGlmIChpc0ZpbmFsKSB7Ci0gICAgICAg
ICAgcHNfcGFyc2luZyA9IFhNTF9GSU5JU0hFRDsKLSAgICAgICAgICByZXR1cm4gWE1MX1NUQVRV
U19PSzsKLSAgICAgICAgfQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXN1bHQgPSBYTUxfU1RBVFVTX09LOwotICAgICAgfQotICAgIH0KLQotICAg
IFhtbFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgZW5kLCAmcG9zaXRpb24p
OwotICAgIG5MZWZ0T3ZlciA9IHMgKyBsZW4gLSBlbmQ7Ci0gICAgaWYgKG5MZWZ0T3Zlcikgewot
ICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IG5MZWZ0T3ZlciA+IGJ1ZmZlckxpbSAtIGJ1ZmZl
cikgewotICAgICAgICAvKiBGSVhNRSBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93ICovCi0gICAgICAg
IGNoYXIgKnRlbXA7Ci0gICAgICAgIHRlbXAgPSAoYnVmZmVyID09IE5VTEwKLSAgICAgICAgICAg
ICAgICA/IChjaGFyICopTUFMTE9DKGxlbiAqIDIpCi0gICAgICAgICAgICAgICAgOiAoY2hhciAq
KVJFQUxMT0MoYnVmZmVyLCBsZW4gKiAyKSk7Ci0gICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsK
LSAgICAgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgIGV2
ZW50UHRyID0gZXZlbnRFbmRQdHIgPSBOVUxMOwotICAgICAgICAgIHByb2Nlc3NvciA9IGVycm9y
UHJvY2Vzc29yOwotICAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICAgICAgICB9
Ci0gICAgICAgIGJ1ZmZlciA9IHRlbXA7Ci0gICAgICAgIGJ1ZmZlckxpbSA9IGJ1ZmZlciArIGxl
biAqIDI7Ci0gICAgICB9Ci0gICAgICBtZW1jcHkoYnVmZmVyLCBlbmQsIG5MZWZ0T3Zlcik7Ci0g
ICAgfQotICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlcjsKLSAgICBidWZmZXJFbmQgPSBidWZmZXIgKyBu
TGVmdE92ZXI7Ci0gICAgcG9zaXRpb25QdHIgPSBidWZmZXJQdHI7Ci0gICAgcGFyc2VFbmRQdHIg
PSBidWZmZXJFbmQ7Ci0gICAgZXZlbnRQdHIgPSBidWZmZXJQdHI7Ci0gICAgZXZlbnRFbmRQdHIg
PSBidWZmZXJQdHI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotI2VuZGlmICAvKiBub3QgZGVm
aW5lZCBYTUxfQ09OVEVYVF9CWVRFUyAqLwotICBlbHNlIHsKLSAgICB2b2lkICpidWZmID0gWE1M
X0dldEJ1ZmZlcihwYXJzZXIsIGxlbik7Ci0gICAgaWYgKGJ1ZmYgPT0gTlVMTCkKLSAgICAgIHJl
dHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICAgIGVsc2UgewotICAgICAgbWVtY3B5KGJ1ZmYsIHMs
IGxlbik7Ci0gICAgICByZXR1cm4gWE1MX1BhcnNlQnVmZmVyKHBhcnNlciwgbGVuLCBpc0ZpbmFs
KTsKLSAgICB9Ci0gIH0KLX0KLQotZW51bSBYTUxfU3RhdHVzIFhNTENBTEwKLVhNTF9QYXJzZUJ1
ZmZlcihYTUxfUGFyc2VyIHBhcnNlciwgaW50IGxlbiwgaW50IGlzRmluYWwpCi17Ci0gIGNvbnN0
IGNoYXIgKnN0YXJ0OwotICBlbnVtIFhNTF9TdGF0dXMgcmVzdWx0ID0gWE1MX1NUQVRVU19PSzsK
LQotICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgIGVy
cm9yQ29kZSA9IFhNTF9FUlJPUl9TVVNQRU5ERUQ7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJS
T1I7Ci0gIGNhc2UgWE1MX0ZJTklTSEVEOgotICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9GSU5J
U0hFRDsKLSAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgY2FzZSBYTUxfSU5JVElBTEla
RUQ6Ci0gICAgaWYgKHBhcmVudFBhcnNlciA9PSBOVUxMICYmICFzdGFydFBhcnNpbmcocGFyc2Vy
KSkgewotICAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIHJldHVy
biBYTUxfU1RBVFVTX0VSUk9SOwotICAgIH0KLSAgZGVmYXVsdDoKLSAgICBwc19wYXJzaW5nID0g
WE1MX1BBUlNJTkc7Ci0gIH0KLQotICBzdGFydCA9IGJ1ZmZlclB0cjsKLSAgcG9zaXRpb25QdHIg
PSBzdGFydDsKLSAgYnVmZmVyRW5kICs9IGxlbjsKLSAgcGFyc2VFbmRQdHIgPSBidWZmZXJFbmQ7
Ci0gIHBhcnNlRW5kQnl0ZUluZGV4ICs9IGxlbjsKLSAgcHNfZmluYWxCdWZmZXIgPSAoWE1MX0Jv
b2wpaXNGaW5hbDsKLQotICBlcnJvckNvZGUgPSBwcm9jZXNzb3IocGFyc2VyLCBzdGFydCwgcGFy
c2VFbmRQdHIsICZidWZmZXJQdHIpOwotCi0gIGlmIChlcnJvckNvZGUgIT0gWE1MX0VSUk9SX05P
TkUpIHsKLSAgICBldmVudEVuZFB0ciA9IGV2ZW50UHRyOwotICAgIHByb2Nlc3NvciA9IGVycm9y
UHJvY2Vzc29yOwotICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICB9Ci0gIGVsc2Ugewot
ICAgIHN3aXRjaCAocHNfcGFyc2luZykgewotICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAg
IHJlc3VsdCA9IFhNTF9TVEFUVVNfU1VTUEVOREVEOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBY
TUxfSU5JVElBTElaRUQ6Ci0gICAgY2FzZSBYTUxfUEFSU0lORzoKLSAgICAgIGlmIChpc0ZpbmFs
KSB7Ci0gICAgICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDogOyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8K
LSAgICB9Ci0gIH0KLQotICBYbWxVcGRhdGVQb3NpdGlvbihlbmNvZGluZywgcG9zaXRpb25QdHIs
IGJ1ZmZlclB0ciwgJnBvc2l0aW9uKTsKLSAgcG9zaXRpb25QdHIgPSBidWZmZXJQdHI7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgKiBYTUxDQUxMCi1YTUxfR2V0QnVmZmVyKFhNTF9QYXJz
ZXIgcGFyc2VyLCBpbnQgbGVuKQotewotLyogQkVHSU4gTU9aSUxMQSBDSEFOR0UgKHNhbml0eSBj
aGVjayBsZW4pICovCi0gIGlmIChsZW4gPCAwKSB7Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9S
X05PX01FTU9SWTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotLyogRU5EIE1PWklMTEEgQ0hBTkdF
ICovCi0gIHN3aXRjaCAocHNfcGFyc2luZykgewotICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAg
ZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRFRDsKLSAgICByZXR1cm4gTlVMTDsKLSAgY2Fz
ZSBYTUxfRklOSVNIRUQ6Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX0ZJTklTSEVEOwotICAg
IHJldHVybiBOVUxMOwotICBkZWZhdWx0OiA7Ci0gIH0KLQotICBpZiAobGVuID4gYnVmZmVyTGlt
IC0gYnVmZmVyRW5kKSB7Ci0gICAgaW50IG5lZWRlZFNpemUgPSBsZW4gKyAoaW50KShidWZmZXJF
bmQgLSBidWZmZXJQdHIpOwotLyogQkVHSU4gTU9aSUxMQSBDSEFOR0UgKHNhbml0eSBjaGVjayBu
ZWVkZWRTaXplKSAqLwotICAgIGlmIChuZWVkZWRTaXplIDwgMCkgewotICAgICAgZXJyb3JDb2Rl
ID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLS8qIEVO
RCBNT1pJTExBIENIQU5HRSAqLwotI2lmZGVmIFhNTF9DT05URVhUX0JZVEVTCi0gICAgaW50IGtl
ZXAgPSAoaW50KShidWZmZXJQdHIgLSBidWZmZXIpOwotCi0gICAgaWYgKGtlZXAgPiBYTUxfQ09O
VEVYVF9CWVRFUykKLSAgICAgIGtlZXAgPSBYTUxfQ09OVEVYVF9CWVRFUzsKLSAgICBuZWVkZWRT
aXplICs9IGtlZXA7Ci0jZW5kaWYgIC8qIGRlZmluZWQgWE1MX0NPTlRFWFRfQllURVMgKi8KLSAg
ICBpZiAobmVlZGVkU2l6ZSAgPD0gYnVmZmVyTGltIC0gYnVmZmVyKSB7Ci0jaWZkZWYgWE1MX0NP
TlRFWFRfQllURVMKLSAgICAgIGlmIChrZWVwIDwgYnVmZmVyUHRyIC0gYnVmZmVyKSB7Ci0gICAg
ICAgIGludCBvZmZzZXQgPSAoaW50KShidWZmZXJQdHIgLSBidWZmZXIpIC0ga2VlcDsKLSAgICAg
ICAgbWVtbW92ZShidWZmZXIsICZidWZmZXJbb2Zmc2V0XSwgYnVmZmVyRW5kIC0gYnVmZmVyUHRy
ICsga2VlcCk7Ci0gICAgICAgIGJ1ZmZlckVuZCAtPSBvZmZzZXQ7Ci0gICAgICAgIGJ1ZmZlclB0
ciAtPSBvZmZzZXQ7Ci0gICAgICB9Ci0jZWxzZQotICAgICAgbWVtbW92ZShidWZmZXIsIGJ1ZmZl
clB0ciwgYnVmZmVyRW5kIC0gYnVmZmVyUHRyKTsKLSAgICAgIGJ1ZmZlckVuZCA9IGJ1ZmZlciAr
IChidWZmZXJFbmQgLSBidWZmZXJQdHIpOwotICAgICAgYnVmZmVyUHRyID0gYnVmZmVyOwotI2Vu
ZGlmICAvKiBub3QgZGVmaW5lZCBYTUxfQ09OVEVYVF9CWVRFUyAqLwotICAgIH0KLSAgICBlbHNl
IHsKLSAgICAgIGNoYXIgKm5ld0J1ZjsKLSAgICAgIGludCBidWZmZXJTaXplID0gKGludCkoYnVm
ZmVyTGltIC0gYnVmZmVyUHRyKTsKLSAgICAgIGlmIChidWZmZXJTaXplID09IDApCi0gICAgICAg
IGJ1ZmZlclNpemUgPSBJTklUX0JVRkZFUl9TSVpFOwotICAgICAgZG8gewotICAgICAgICBidWZm
ZXJTaXplICo9IDI7Ci0vKiBCRUdJTiBNT1pJTExBIENIQU5HRSAocHJldmVudCBpbmZpbml0ZSBs
b29wIG9uIG92ZXJmbG93KSAqLwotICAgICAgfSB3aGlsZSAoYnVmZmVyU2l6ZSA8IG5lZWRlZFNp
emUgJiYgYnVmZmVyU2l6ZSA+IDApOwotLyogRU5EIE1PWklMTEEgQ0hBTkdFICovCi0vKiBCRUdJ
TiBNT1pJTExBIENIQU5HRSAoc2FuaXR5IGNoZWNrIGJ1ZmZlclNpemUpICovCi0gICAgICBpZiAo
YnVmZmVyU2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1P
Ulk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotLyogRU5EIE1PWklMTEEgQ0hBTkdF
ICovCi0gICAgICBuZXdCdWYgPSAoY2hhciAqKU1BTExPQyhidWZmZXJTaXplKTsKLSAgICAgIGlm
IChuZXdCdWYgPT0gMCkgewotICAgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZ
OwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJ1ZmZlckxpbSA9IG5ld0J1
ZiArIGJ1ZmZlclNpemU7Ci0jaWZkZWYgWE1MX0NPTlRFWFRfQllURVMKLSAgICAgIGlmIChidWZm
ZXJQdHIpIHsKLSAgICAgICAgaW50IGtlZXAgPSAoaW50KShidWZmZXJQdHIgLSBidWZmZXIpOwot
ICAgICAgICBpZiAoa2VlcCA+IFhNTF9DT05URVhUX0JZVEVTKQotICAgICAgICAgIGtlZXAgPSBY
TUxfQ09OVEVYVF9CWVRFUzsKLSAgICAgICAgbWVtY3B5KG5ld0J1ZiwgJmJ1ZmZlclB0clsta2Vl
cF0sIGJ1ZmZlckVuZCAtIGJ1ZmZlclB0ciArIGtlZXApOwotICAgICAgICBGUkVFKGJ1ZmZlcik7
Ci0gICAgICAgIGJ1ZmZlciA9IG5ld0J1ZjsKLSAgICAgICAgYnVmZmVyRW5kID0gYnVmZmVyICsg
KGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cikgKyBrZWVwOwotICAgICAgICBidWZmZXJQdHIgPSBidWZm
ZXIgKyBrZWVwOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGJ1ZmZlckVuZCA9IG5l
d0J1ZiArIChidWZmZXJFbmQgLSBidWZmZXJQdHIpOwotICAgICAgICBidWZmZXJQdHIgPSBidWZm
ZXIgPSBuZXdCdWY7Ci0gICAgICB9Ci0jZWxzZQotICAgICAgaWYgKGJ1ZmZlclB0cikgewotICAg
ICAgICBtZW1jcHkobmV3QnVmLCBidWZmZXJQdHIsIGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7Ci0g
ICAgICAgIEZSRUUoYnVmZmVyKTsKLSAgICAgIH0KLSAgICAgIGJ1ZmZlckVuZCA9IG5ld0J1ZiAr
IChidWZmZXJFbmQgLSBidWZmZXJQdHIpOwotICAgICAgYnVmZmVyUHRyID0gYnVmZmVyID0gbmV3
QnVmOwotI2VuZGlmICAvKiBub3QgZGVmaW5lZCBYTUxfQ09OVEVYVF9CWVRFUyAqLwotICAgIH0K
LSAgICBldmVudFB0ciA9IGV2ZW50RW5kUHRyID0gTlVMTDsKLSAgICBwb3NpdGlvblB0ciA9IE5V
TEw7Ci0gIH0KLSAgcmV0dXJuIGJ1ZmZlckVuZDsKLX0KLQotZW51bSBYTUxfU3RhdHVzIFhNTENB
TEwKLVhNTF9TdG9wUGFyc2VyKFhNTF9QYXJzZXIgcGFyc2VyLCBYTUxfQm9vbCByZXN1bWFibGUp
Ci17Ci0gIHN3aXRjaCAocHNfcGFyc2luZykgewotICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAg
aWYgKHJlc3VtYWJsZSkgewotICAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRFRDsK
LSAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICAgIH0KLSAgICBwc19wYXJzaW5nID0g
WE1MX0ZJTklTSEVEOwotICAgIGJyZWFrOwotICBjYXNlIFhNTF9GSU5JU0hFRDoKLSAgICBlcnJv
ckNvZGUgPSBYTUxfRVJST1JfRklOSVNIRUQ7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7
Ci0gIGRlZmF1bHQ6Ci0gICAgaWYgKHJlc3VtYWJsZSkgewotI2lmZGVmIFhNTF9EVEQKLSAgICAg
IGlmIChpc1BhcmFtRW50aXR5KSB7Ci0gICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9TVVNQ
RU5EX1BFOwotICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgICAgIH0KLSNlbmRp
ZgotICAgICAgcHNfcGFyc2luZyA9IFhNTF9TVVNQRU5ERUQ7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7Ci0gIH0KLSAgcmV0dXJuIFhNTF9TVEFUVVNf
T0s7Ci19Ci0KLWVudW0gWE1MX1N0YXR1cyBYTUxDQUxMCi1YTUxfUmVzdW1lUGFyc2VyKFhNTF9Q
YXJzZXIgcGFyc2VyKQotewotICBlbnVtIFhNTF9TdGF0dXMgcmVzdWx0ID0gWE1MX1NUQVRVU19P
SzsKLQotICBpZiAocHNfcGFyc2luZyAhPSBYTUxfU1VTUEVOREVEKSB7Ci0gICAgZXJyb3JDb2Rl
ID0gWE1MX0VSUk9SX05PVF9TVVNQRU5ERUQ7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7
Ci0gIH0KLSAgcHNfcGFyc2luZyA9IFhNTF9QQVJTSU5HOwotCi0gIGVycm9yQ29kZSA9IHByb2Nl
c3NvcihwYXJzZXIsIGJ1ZmZlclB0ciwgcGFyc2VFbmRQdHIsICZidWZmZXJQdHIpOwotCi0gIGlm
IChlcnJvckNvZGUgIT0gWE1MX0VSUk9SX05PTkUpIHsKLSAgICBldmVudEVuZFB0ciA9IGV2ZW50
UHRyOwotICAgIHByb2Nlc3NvciA9IGVycm9yUHJvY2Vzc29yOwotICAgIHJldHVybiBYTUxfU1RB
VFVTX0VSUk9SOwotICB9Ci0gIGVsc2UgewotICAgIHN3aXRjaCAocHNfcGFyc2luZykgewotICAg
IGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAgIHJlc3VsdCA9IFhNTF9TVEFUVVNfU1VTUEVOREVE
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfSU5JVElBTElaRUQ6Ci0gICAgY2FzZSBYTUxf
UEFSU0lORzoKLSAgICAgIGlmIChwc19maW5hbEJ1ZmZlcikgewotICAgICAgICBwc19wYXJzaW5n
ID0gWE1MX0ZJTklTSEVEOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIGRl
ZmF1bHQ6IDsKLSAgICB9Ci0gIH0KLQotICBYbWxVcGRhdGVQb3NpdGlvbihlbmNvZGluZywgcG9z
aXRpb25QdHIsIGJ1ZmZlclB0ciwgJnBvc2l0aW9uKTsKLSAgcG9zaXRpb25QdHIgPSBidWZmZXJQ
dHI7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX0dldFBhcnNpbmdT
dGF0dXMoWE1MX1BhcnNlciBwYXJzZXIsIFhNTF9QYXJzaW5nU3RhdHVzICpzdGF0dXMpCi17Ci0g
IGFzc2VydChzdGF0dXMgIT0gTlVMTCk7Ci0gICpzdGF0dXMgPSBwYXJzZXItPm1fcGFyc2luZ1N0
YXR1czsKLX0KLQotZW51bSBYTUxfRXJyb3IgWE1MQ0FMTAotWE1MX0dldEVycm9yQ29kZShYTUxf
UGFyc2VyIHBhcnNlcikKLXsKLSAgcmV0dXJuIGVycm9yQ29kZTsKLX0KLQotWE1MX0luZGV4IFhN
TENBTEwKLVhNTF9HZXRDdXJyZW50Qnl0ZUluZGV4KFhNTF9QYXJzZXIgcGFyc2VyKQotewotICBp
ZiAoZXZlbnRQdHIpCi0gICAgcmV0dXJuIHBhcnNlRW5kQnl0ZUluZGV4IC0gKHBhcnNlRW5kUHRy
IC0gZXZlbnRQdHIpOwotICByZXR1cm4gLTE7Ci19Ci0KLWludCBYTUxDQUxMCi1YTUxfR2V0Q3Vy
cmVudEJ5dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgaWYgKGV2ZW50RW5kUHRyICYm
IGV2ZW50UHRyKQotICAgIHJldHVybiAoaW50KShldmVudEVuZFB0ciAtIGV2ZW50UHRyKTsKLSAg
cmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIgKiBYTUxDQUxMCi1YTUxfR2V0SW5wdXRDb250ZXh0
KFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgKm9mZnNldCwgaW50ICpzaXplKQotewotI2lmZGVmIFhN
TF9DT05URVhUX0JZVEVTCi0gIGlmIChldmVudFB0ciAmJiBidWZmZXIpIHsKLSAgICAqb2Zmc2V0
ID0gKGludCkoZXZlbnRQdHIgLSBidWZmZXIpOwotICAgICpzaXplICAgPSAoaW50KShidWZmZXJF
bmQgLSBidWZmZXIpOwotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLSNlbmRpZiAvKiBkZWZpbmVk
IFhNTF9DT05URVhUX0JZVEVTICovCi0gIHJldHVybiAoY2hhciAqKSAwOwotfQotCi1YTUxfU2l6
ZSBYTUxDQUxMCi1YTUxfR2V0Q3VycmVudExpbmVOdW1iZXIoWE1MX1BhcnNlciBwYXJzZXIpCi17
Ci0gIGlmIChldmVudFB0ciAmJiBldmVudFB0ciA+PSBwb3NpdGlvblB0cikgewotICAgIFhtbFVw
ZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgZXZlbnRQdHIsICZwb3NpdGlvbik7
Ci0gICAgcG9zaXRpb25QdHIgPSBldmVudFB0cjsKLSAgfQotICByZXR1cm4gcG9zaXRpb24ubGlu
ZU51bWJlciArIDE7Ci19Ci0KLVhNTF9TaXplIFhNTENBTEwKLVhNTF9HZXRDdXJyZW50Q29sdW1u
TnVtYmVyKFhNTF9QYXJzZXIgcGFyc2VyKQotewotICBpZiAoZXZlbnRQdHIgJiYgZXZlbnRQdHIg
Pj0gcG9zaXRpb25QdHIpIHsKLSAgICBYbWxVcGRhdGVQb3NpdGlvbihlbmNvZGluZywgcG9zaXRp
b25QdHIsIGV2ZW50UHRyLCAmcG9zaXRpb24pOwotICAgIHBvc2l0aW9uUHRyID0gZXZlbnRQdHI7
Ci0gIH0KLSAgcmV0dXJuIHBvc2l0aW9uLmNvbHVtbk51bWJlcjsKLX0KLQotdm9pZCBYTUxDQUxM
Ci1YTUxfRnJlZUNvbnRlbnRNb2RlbChYTUxfUGFyc2VyIHBhcnNlciwgWE1MX0NvbnRlbnQgKm1v
ZGVsKQotewotICBGUkVFKG1vZGVsKTsKLX0KLQotdm9pZCAqIFhNTENBTEwKLVhNTF9NZW1NYWxs
b2MoWE1MX1BhcnNlciBwYXJzZXIsIHNpemVfdCBzaXplKQotewotICByZXR1cm4gTUFMTE9DKHNp
emUpOwotfQotCi12b2lkICogWE1MQ0FMTAotWE1MX01lbVJlYWxsb2MoWE1MX1BhcnNlciBwYXJz
ZXIsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCi17Ci0gIHJldHVybiBSRUFMTE9DKHB0ciwgc2l6
ZSk7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX01lbUZyZWUoWE1MX1BhcnNlciBwYXJzZXIsIHZv
aWQgKnB0cikKLXsKLSAgRlJFRShwdHIpOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9EZWZhdWx0
Q3VycmVudChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgaWYgKGRlZmF1bHRIYW5kbGVyKSB7Ci0g
ICAgaWYgKG9wZW5JbnRlcm5hbEVudGl0aWVzKQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIs
Ci0gICAgICAgICAgICAgICAgICAgIGludGVybmFsRW5jb2RpbmcsCi0gICAgICAgICAgICAgICAg
ICAgIG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyLAotICAgICAgICAgICAg
ICAgICAgICBvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVuZFB0cik7Ci0gICAg
ZWxzZQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuY29kaW5nLCBldmVudFB0ciwgZXZl
bnRFbmRQdHIpOwotICB9Ci19Ci0KLWNvbnN0IFhNTF9MQ2hhciAqIFhNTENBTEwKLVhNTF9FcnJv
clN0cmluZyhlbnVtIFhNTF9FcnJvciBjb2RlKQotewotICBzdGF0aWMgY29uc3QgWE1MX0xDaGFy
KiBjb25zdCBtZXNzYWdlW10gPSB7Ci0gICAgMCwKLSAgICBYTUxfTCgib3V0IG9mIG1lbW9yeSIp
LAotICAgIFhNTF9MKCJzeW50YXggZXJyb3IiKSwKLSAgICBYTUxfTCgibm8gZWxlbWVudCBmb3Vu
ZCIpLAotICAgIFhNTF9MKCJub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pIiksCi0gICAg
WE1MX0woInVuY2xvc2VkIHRva2VuIiksCi0gICAgWE1MX0woInBhcnRpYWwgY2hhcmFjdGVyIiks
Ci0gICAgWE1MX0woIm1pc21hdGNoZWQgdGFnIiksCi0gICAgWE1MX0woImR1cGxpY2F0ZSBhdHRy
aWJ1dGUiKSwKLSAgICBYTUxfTCgianVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50IiksCi0gICAg
WE1MX0woImlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UiKSwKLSAgICBYTUxfTCgi
dW5kZWZpbmVkIGVudGl0eSIpLAotICAgIFhNTF9MKCJyZWN1cnNpdmUgZW50aXR5IHJlZmVyZW5j
ZSIpLAotICAgIFhNTF9MKCJhc3luY2hyb25vdXMgZW50aXR5IiksCi0gICAgWE1MX0woInJlZmVy
ZW5jZSB0byBpbnZhbGlkIGNoYXJhY3RlciBudW1iZXIiKSwKLSAgICBYTUxfTCgicmVmZXJlbmNl
IHRvIGJpbmFyeSBlbnRpdHkiKSwKLSAgICBYTUxfTCgicmVmZXJlbmNlIHRvIGV4dGVybmFsIGVu
dGl0eSBpbiBhdHRyaWJ1dGUiKSwKLSAgICBYTUxfTCgiWE1MIG9yIHRleHQgZGVjbGFyYXRpb24g
bm90IGF0IHN0YXJ0IG9mIGVudGl0eSIpLAotICAgIFhNTF9MKCJ1bmtub3duIGVuY29kaW5nIiks
Ci0gICAgWE1MX0woImVuY29kaW5nIHNwZWNpZmllZCBpbiBYTUwgZGVjbGFyYXRpb24gaXMgaW5j
b3JyZWN0IiksCi0gICAgWE1MX0woInVuY2xvc2VkIENEQVRBIHNlY3Rpb24iKSwKLSAgICBYTUxf
TCgiZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlIiksCi0gICAg
WE1MX0woImRvY3VtZW50IGlzIG5vdCBzdGFuZGFsb25lIiksCi0gICAgWE1MX0woInVuZXhwZWN0
ZWQgcGFyc2VyIHN0YXRlIC0gcGxlYXNlIHNlbmQgYSBidWcgcmVwb3J0IiksCi0gICAgWE1MX0wo
ImVudGl0eSBkZWNsYXJlZCBpbiBwYXJhbWV0ZXIgZW50aXR5IiksCi0gICAgWE1MX0woInJlcXVl
c3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdCIpLAotICAgIFhN
TF9MKCJjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1biIpLAotICAg
IFhNTF9MKCJ1bmJvdW5kIHByZWZpeCIpLAotICAgIFhNTF9MKCJtdXN0IG5vdCB1bmRlY2xhcmUg
cHJlZml4IiksCi0gICAgWE1MX0woImluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRp
dHkiKSwKLSAgICBYTUxfTCgiWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZCIpLAotICAg
IFhNTF9MKCJ0ZXh0IGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZCIpLAotICAgIFhNTF9MKCJp
bGxlZ2FsIGNoYXJhY3RlcihzKSBpbiBwdWJsaWMgaWQiKSwKLSAgICBYTUxfTCgicGFyc2VyIHN1
c3BlbmRlZCIpLAotICAgIFhNTF9MKCJwYXJzZXIgbm90IHN1c3BlbmRlZCIpLAotICAgIFhNTF9M
KCJwYXJzaW5nIGFib3J0ZWQiKSwKLSAgICBYTUxfTCgicGFyc2luZyBmaW5pc2hlZCIpLAotICAg
IFhNTF9MKCJjYW5ub3Qgc3VzcGVuZCBpbiBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXR5IiksCi0g
ICAgWE1MX0woInJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9y
IGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUiKSwKLSAgICBYTUxfTCgicmVzZXJ2ZWQg
cHJlZml4ICh4bWxucykgbXVzdCBub3QgYmUgZGVjbGFyZWQgb3IgdW5kZWNsYXJlZCIpLAotICAg
IFhNTF9MKCJwcmVmaXggbXVzdCBub3QgYmUgYm91bmQgdG8gb25lIG9mIHRoZSByZXNlcnZlZCBu
YW1lc3BhY2UgbmFtZXMiKQotICB9OwotICBpZiAoY29kZSA+IDAgJiYgY29kZSA8IHNpemVvZiht
ZXNzYWdlKS9zaXplb2YobWVzc2FnZVswXSkpCi0gICAgcmV0dXJuIG1lc3NhZ2VbY29kZV07Ci0g
IHJldHVybiBOVUxMOwotfQotCi1jb25zdCBYTUxfTENoYXIgKiBYTUxDQUxMCi1YTUxfRXhwYXRW
ZXJzaW9uKHZvaWQpIHsKLQotICAvKiBWMSBpcyB1c2VkIHRvIHN0cmluZy1pemUgdGhlIHZlcnNp
b24gbnVtYmVyLiBIb3dldmVyLCBpdCB3b3VsZAotICAgICBzdHJpbmctaXplIHRoZSBhY3R1YWwg
dmVyc2lvbiBtYWNybyAqbmFtZXMqIHVubGVzcyB3ZSBnZXQgdGhlbQotICAgICBzdWJzdGl0dXRl
ZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIFYxLiBDUFAgaXMgZGVmaW5lZCB0byBleHBhbmQKLSAg
ICAgYSBtYWNybywgdGhlbiByZXNjYW4gZm9yIG1vcmUgZXhwYW5zaW9ucy4gVGh1cywgd2UgdXNl
IFYyIHRvIGV4cGFuZAotICAgICB0aGUgdmVyc2lvbiBtYWNyb3MsIHRoZW4gQ1BQIHdpbGwgZXhw
YW5kIHRoZSByZXN1bHRpbmcgVjEoKSBtYWNybwotICAgICB3aXRoIHRoZSBjb3JyZWN0IG51bWVy
YWxzLiAqLwotICAvKiAjIyMgSSdtIGFzc3VtaW5nIGNwcCBpcyBwb3J0YWJsZSBpbiB0aGlzIHJl
c3BlY3QuLi4gKi8KLQotI2RlZmluZSBWMShhLGIsYykgWE1MX0woI2EpWE1MX0woIi4iKVhNTF9M
KCNiKVhNTF9MKCIuIilYTUxfTCgjYykKLSNkZWZpbmUgVjIoYSxiLGMpIFhNTF9MKCJleHBhdF8i
KVYxKGEsYixjKQotCi0gIHJldHVybiBWMihYTUxfTUFKT1JfVkVSU0lPTiwgWE1MX01JTk9SX1ZF
UlNJT04sIFhNTF9NSUNST19WRVJTSU9OKTsKLQotI3VuZGVmIFYxCi0jdW5kZWYgVjIKLX0KLQot
WE1MX0V4cGF0X1ZlcnNpb24gWE1MQ0FMTAotWE1MX0V4cGF0VmVyc2lvbkluZm8odm9pZCkKLXsK
LSAgWE1MX0V4cGF0X1ZlcnNpb24gdmVyc2lvbjsKLQotICB2ZXJzaW9uLm1ham9yID0gWE1MX01B
Sk9SX1ZFUlNJT047Ci0gIHZlcnNpb24ubWlub3IgPSBYTUxfTUlOT1JfVkVSU0lPTjsKLSAgdmVy
c2lvbi5taWNybyA9IFhNTF9NSUNST19WRVJTSU9OOwotCi0gIHJldHVybiB2ZXJzaW9uOwotfQot
Ci1jb25zdCBYTUxfRmVhdHVyZSAqIFhNTENBTEwKLVhNTF9HZXRGZWF0dXJlTGlzdCh2b2lkKQot
ewotICBzdGF0aWMgY29uc3QgWE1MX0ZlYXR1cmUgZmVhdHVyZXNbXSA9IHsKLSAgICB7WE1MX0ZF
QVRVUkVfU0laRU9GX1hNTF9DSEFSLCAgWE1MX0woInNpemVvZihYTUxfQ2hhcikiKSwKLSAgICAg
c2l6ZW9mKFhNTF9DaGFyKX0sCi0gICAge1hNTF9GRUFUVVJFX1NJWkVPRl9YTUxfTENIQVIsIFhN
TF9MKCJzaXplb2YoWE1MX0xDaGFyKSIpLAotICAgICBzaXplb2YoWE1MX0xDaGFyKX0sCi0jaWZk
ZWYgWE1MX1VOSUNPREUKLSAgICB7WE1MX0ZFQVRVUkVfVU5JQ09ERSwgICAgICAgICAgWE1MX0wo
IlhNTF9VTklDT0RFIiksIDB9LAotI2VuZGlmCi0jaWZkZWYgWE1MX1VOSUNPREVfV0NIQVJfVAot
ICAgIHtYTUxfRkVBVFVSRV9VTklDT0RFX1dDSEFSX1QsICBYTUxfTCgiWE1MX1VOSUNPREVfV0NI
QVJfVCIpLCAwfSwKLSNlbmRpZgotI2lmZGVmIFhNTF9EVEQKLSAgICB7WE1MX0ZFQVRVUkVfRFRE
LCAgICAgICAgICAgICAgWE1MX0woIlhNTF9EVEQiKSwgMH0sCi0jZW5kaWYKLSNpZmRlZiBYTUxf
Q09OVEVYVF9CWVRFUwotICAgIHtYTUxfRkVBVFVSRV9DT05URVhUX0JZVEVTLCAgICBYTUxfTCgi
WE1MX0NPTlRFWFRfQllURVMiKSwKLSAgICAgWE1MX0NPTlRFWFRfQllURVN9LAotI2VuZGlmCi0j
aWZkZWYgWE1MX01JTl9TSVpFCi0gICAge1hNTF9GRUFUVVJFX01JTl9TSVpFLCAgICAgICAgIFhN
TF9MKCJYTUxfTUlOX1NJWkUiKSwgMH0sCi0jZW5kaWYKLSNpZmRlZiBYTUxfTlMKLSAgICB7WE1M
X0ZFQVRVUkVfTlMsICAgICAgICAgICAgICAgWE1MX0woIlhNTF9OUyIpLCAwfSwKLSNlbmRpZgot
I2lmZGVmIFhNTF9MQVJHRV9TSVpFCi0gICAge1hNTF9GRUFUVVJFX0xBUkdFX1NJWkUsICAgICAg
IFhNTF9MKCJYTUxfTEFSR0VfU0laRSIpLCAwfSwKLSNlbmRpZgotI2lmZGVmIFhNTF9BVFRSX0lO
Rk8KLSAgICB7WE1MX0ZFQVRVUkVfQVRUUl9JTkZPLCAgICAgICAgWE1MX0woIlhNTF9BVFRSX0lO
Rk8iKSwgMH0sCi0jZW5kaWYKLSAgICB7WE1MX0ZFQVRVUkVfRU5ELCAgICAgICAgICAgICAgTlVM
TCwgMH0KLSAgfTsKLQotICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLS8qIEluaXRpYWxseSB0YWct
PnJhd05hbWUgYWx3YXlzIHBvaW50cyBpbnRvIHRoZSBwYXJzZSBidWZmZXI7Ci0gICBmb3IgdGhv
c2UgVEFHIGluc3RhbmNlcyBvcGVuZWQgd2hpbGUgdGhlIGN1cnJlbnQgcGFyc2UgYnVmZmVyIHdh
cwotICAgcHJvY2Vzc2VkLCBhbmQgbm90IHlldCBjbG9zZWQsIHdlIG5lZWQgdG8gc3RvcmUgdGFn
LT5yYXdOYW1lIGluIGEgbW9yZQotICAgcGVybWFuZW50IGxvY2F0aW9uLCBzaW5jZSB0aGUgcGFy
c2UgYnVmZmVyIGlzIGFib3V0IHRvIGJlIGRpc2NhcmRlZC4KLSovCi1zdGF0aWMgWE1MX0Jvb2wK
LXN0b3JlUmF3TmFtZXMoWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIFRBRyAqdGFnID0gdGFnU3Rh
Y2s7Ci0gIHdoaWxlICh0YWcpIHsKLSAgICBpbnQgYnVmU2l6ZTsKLSAgICBpbnQgbmFtZUxlbiA9
IHNpemVvZihYTUxfQ2hhcikgKiAodGFnLT5uYW1lLnN0ckxlbiArIDEpOwotICAgIGNoYXIgKnJh
d05hbWVCdWYgPSB0YWctPmJ1ZiArIG5hbWVMZW47Ci0gICAgLyogU3RvcCBpZiBhbHJlYWR5IHN0
b3JlZC4gIFNpbmNlIHRhZ1N0YWNrIGlzIGEgc3RhY2ssIHdlIGNhbiBzdG9wCi0gICAgICAgYXQg
dGhlIGZpcnN0IGVudHJ5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQ7IGV2ZXJ5dGhpbmcK
LSAgICAgICBiZWxvdyBpdCBpbiB0aGUgc3RhY2sgaXMgYWxyZWFkeSBiZWVuIGFjY291bnRlZCBm
b3IgaW4gYQotICAgICAgIHByZXZpb3VzIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICAqLwot
ICAgIGlmICh0YWctPnJhd05hbWUgPT0gcmF3TmFtZUJ1ZikKLSAgICAgIGJyZWFrOwotICAgIC8q
IEZvciByZS11c2UgcHVycG9zZXMgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUKLSAgICAgICBz
aXplIG9mIHRhZy0+YnVmIGlzIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKFhNTF9DaGFyKS4KLSAgICAq
LwotICAgIGJ1ZlNpemUgPSBuYW1lTGVuICsgUk9VTkRfVVAodGFnLT5yYXdOYW1lTGVuZ3RoLCBz
aXplb2YoWE1MX0NoYXIpKTsKLSAgICBpZiAoYnVmU2l6ZSA+IHRhZy0+YnVmRW5kIC0gdGFnLT5i
dWYpIHsKLSAgICAgIGNoYXIgKnRlbXAgPSAoY2hhciAqKVJFQUxMT0ModGFnLT5idWYsIGJ1ZlNp
emUpOwotICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsK
LSAgICAgIC8qIGlmIHRhZy0+bmFtZS5zdHIgcG9pbnRzIHRvIHRhZy0+YnVmIChvbmx5IHdoZW4g
bmFtZXNwYWNlCi0gICAgICAgICBwcm9jZXNzaW5nIGlzIG9mZikgdGhlbiB3ZSBoYXZlIHRvIHVw
ZGF0ZSBpdAotICAgICAgKi8KLSAgICAgIGlmICh0YWctPm5hbWUuc3RyID09IChYTUxfQ2hhciAq
KXRhZy0+YnVmKQotICAgICAgICB0YWctPm5hbWUuc3RyID0gKFhNTF9DaGFyICopdGVtcDsKLSAg
ICAgIC8qIGlmIHRhZy0+bmFtZS5sb2NhbFBhcnQgaXMgc2V0ICh3aGVuIG5hbWVzcGFjZSBwcm9j
ZXNzaW5nIGlzIG9uKQotICAgICAgICAgdGhlbiB1cGRhdGUgaXQgYXMgd2VsbCwgc2luY2UgaXQg
d2lsbCBhbHdheXMgcG9pbnQgaW50byB0YWctPmJ1ZgotICAgICAgKi8KLSAgICAgIGlmICh0YWct
Pm5hbWUubG9jYWxQYXJ0KQotICAgICAgICB0YWctPm5hbWUubG9jYWxQYXJ0ID0gKFhNTF9DaGFy
ICopdGVtcCArICh0YWctPm5hbWUubG9jYWxQYXJ0IC0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhNTF9DaGFyICopdGFnLT5idWYpOwotICAgICAg
dGFnLT5idWYgPSB0ZW1wOwotICAgICAgdGFnLT5idWZFbmQgPSB0ZW1wICsgYnVmU2l6ZTsKLSAg
ICAgIHJhd05hbWVCdWYgPSB0ZW1wICsgbmFtZUxlbjsKLSAgICB9Ci0gICAgbWVtY3B5KHJhd05h
bWVCdWYsIHRhZy0+cmF3TmFtZSwgdGFnLT5yYXdOYW1lTGVuZ3RoKTsKLSAgICB0YWctPnJhd05h
bWUgPSByYXdOYW1lQnVmOwotICAgIHRhZyA9IHRhZy0+cGFyZW50OwotICB9Ci0gIHJldHVybiBY
TUxfVFJVRTsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWNvbnRlbnRQcm9j
ZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0
YXJ0LAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKiplbmRQdHIpCi17Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGRvQ29u
dGVudChwYXJzZXIsIDAsIGVuY29kaW5nLCBzdGFydCwgZW5kLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kUHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKLSAg
aWYgKHJlc3VsdCA9PSBYTUxfRVJST1JfTk9ORSkgewotICAgIGlmICghc3RvcmVSYXdOYW1lcyhw
YXJzZXIpKQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gIH0KLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWV4dGVybmFsRW50
aXR5SW5pdFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
KmVuZFB0cikKLXsKLSAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gaW5pdGlhbGl6ZUVuY29kaW5n
KHBhcnNlcik7Ci0gIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCi0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgcHJvY2Vzc29yID0gZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yMjsKLSAgcmV0
dXJuIGV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjIocGFyc2VyLCBzdGFydCwgZW5kLCBlbmRQ
dHIpOwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAotZXh0ZXJuYWxFbnRpdHlJ
bml0UHJvY2Vzc29yMihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
KmVuZFB0cikKLXsKLSAgY29uc3QgY2hhciAqbmV4dCA9IHN0YXJ0OyAvKiBYbWxDb250ZW50VG9r
IGRvZXNuJ3QgYWx3YXlzIHNldCB0aGUgbGFzdCBhcmcgKi8KLSAgaW50IHRvayA9IFhtbENvbnRl
bnRUb2soZW5jb2RpbmcsIHN0YXJ0LCBlbmQsICZuZXh0KTsKLSAgc3dpdGNoICh0b2spIHsKLSAg
Y2FzZSBYTUxfVE9LX0JPTToKLSAgICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgYnVm
ZmVyLCB0aGlzIHdvdWxkIGNhdXNlIHRoZSBuZXh0IHN0YWdlLAotICAgICAgIGkuZS4gZXh0ZXJu
YWxFbnRpdHlJbml0UHJvY2Vzc29yMywgdG8gcGFzcyBjb250cm9sIGRpcmVjdGx5IHRvCi0gICAg
ICAgZG9Db250ZW50IChieSBkZXRlY3RpbmcgWE1MX1RPS19OT05FKSB3aXRob3V0IHByb2Nlc3Np
bmcgYW55IHhtbCB0ZXh0Ci0gICAgICAgZGVjbGFyYXRpb24gLSBjYXVzaW5nIHRoZSBlcnJvciBY
TUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSSBpbiBkb0NvbnRlbnQuCi0gICAgKi8KLSAgICBpZiAo
bmV4dCA9PSBlbmQgJiYgIXBzX2ZpbmFsQnVmZmVyKSB7Ci0gICAgICAqZW5kUHRyID0gbmV4dDsK
LSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICB9Ci0gICAgc3RhcnQgPSBuZXh0Owot
ICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKLSAgICBpZiAoIXBzX2ZpbmFsQnVm
ZmVyKSB7Ci0gICAgICAqZW5kUHRyID0gc3RhcnQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7Ci0gICAgfQotICAgIGV2ZW50UHRyID0gc3RhcnQ7Ci0gICAgcmV0dXJuIFhNTF9FUlJPUl9V
TkNMT1NFRF9UT0tFTjsKLSAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKLSAgICBpZiAoIXBz
X2ZpbmFsQnVmZmVyKSB7Ci0gICAgICAqZW5kUHRyID0gc3RhcnQ7Ci0gICAgICByZXR1cm4gWE1M
X0VSUk9SX05PTkU7Ci0gICAgfQotICAgIGV2ZW50UHRyID0gc3RhcnQ7Ci0gICAgcmV0dXJuIFhN
TF9FUlJPUl9QQVJUSUFMX0NIQVI7Ci0gIH0KLSAgcHJvY2Vzc29yID0gZXh0ZXJuYWxFbnRpdHlJ
bml0UHJvY2Vzc29yMzsKLSAgcmV0dXJuIGV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjMocGFy
c2VyLCBzdGFydCwgZW5kLCBlbmRQdHIpOwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAotZXh0ZXJuYWxFbnRpdHlJbml0UHJvY2Vzc29yMyhYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikKLXsKLSAgaW50IHRvazsKLSAgY29uc3QgY2hh
ciAqbmV4dCA9IHN0YXJ0OyAvKiBYbWxDb250ZW50VG9rIGRvZXNuJ3QgYWx3YXlzIHNldCB0aGUg
bGFzdCBhcmcgKi8KLSAgZXZlbnRQdHIgPSBzdGFydDsKLSAgdG9rID0gWG1sQ29udGVudFRvayhl
bmNvZGluZywgc3RhcnQsIGVuZCwgJm5leHQpOwotICBldmVudEVuZFB0ciA9IG5leHQ7Ci0KLSAg
c3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1hNTF9ERUNMOgotICAgIHsKLSAgICAgIGVu
dW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICAgIHJlc3VsdCA9IHByb2Nlc3NYbWxEZWNsKHBhcnNl
ciwgMSwgc3RhcnQsIG5leHQpOwotICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIHN3aXRjaCAocHNfcGFyc2luZykgewotICAg
ICAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgICAgICAqZW5kUHRyID0gbmV4dDsKLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgY2FzZSBYTUxfRklOSVNIRUQ6Ci0gICAgICAg
IHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0YXJ0
ID0gbmV4dDsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgWE1MX1RPS19QQVJU
SUFMOgotICAgIGlmICghcHNfZmluYWxCdWZmZXIpIHsKLSAgICAgICplbmRQdHIgPSBzdGFydDsK
LSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICB9Ci0gICAgcmV0dXJuIFhNTF9FUlJP
Ul9VTkNMT1NFRF9UT0tFTjsKLSAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKLSAgICBpZiAo
IXBzX2ZpbmFsQnVmZmVyKSB7Ci0gICAgICAqZW5kUHRyID0gc3RhcnQ7Ci0gICAgICByZXR1cm4g
WE1MX0VSUk9SX05PTkU7Ci0gICAgfQotICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFS
OwotICB9Ci0gIHByb2Nlc3NvciA9IGV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvcjsKLSAg
dGFnTGV2ZWwgPSAxOwotICByZXR1cm4gZXh0ZXJuYWxFbnRpdHlDb250ZW50UHJvY2Vzc29yKHBh
cnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBU
UkNBTEwKLWV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuZFB0cikKLXsKLSAgZW51bSBYTUxfRXJy
b3IgcmVzdWx0ID0gZG9Db250ZW50KHBhcnNlciwgMSwgZW5jb2RpbmcsIHN0YXJ0LCBlbmQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQdHIsIChYTUxfQm9vbCkhcHNf
ZmluYWxCdWZmZXIpOwotICBpZiAocmVzdWx0ID09IFhNTF9FUlJPUl9OT05FKSB7Ci0gICAgaWYg
KCFzdG9yZVJhd05hbWVzKHBhcnNlcikpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWRv
Q29udGVudChYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICBpbnQgc3RhcnRUYWdMZXZlbCwK
LSAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgIGNvbnN0IGNoYXIgKnMs
Ci0gICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0
UHRyLAotICAgICAgICAgIFhNTF9Cb29sIGhhdmVNb3JlKQotewotICAvKiBzYXZlIG9uZSBsZXZl
bCBvZiBpbmRpcmVjdGlvbiAqLwotICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOwotCi0gIGNvbnN0
IGNoYXIgKipldmVudFBQOwotICBjb25zdCBjaGFyICoqZXZlbnRFbmRQUDsKLSAgaWYgKGVuYyA9
PSBlbmNvZGluZykgewotICAgIGV2ZW50UFAgPSAmZXZlbnRQdHI7Ci0gICAgZXZlbnRFbmRQUCA9
ICZldmVudEVuZFB0cjsKLSAgfQotICBlbHNlIHsKLSAgICBldmVudFBQID0gJihvcGVuSW50ZXJu
YWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudFB0cik7Ci0gICAgZXZlbnRFbmRQUCA9ICYob3Blbklu
dGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRFbmRQdHIpOwotICB9Ci0gICpldmVudFBQID0g
czsKLQotICBmb3IgKDs7KSB7Ci0gICAgY29uc3QgY2hhciAqbmV4dCA9IHM7IC8qIFhtbENvbnRl
bnRUb2sgZG9lc24ndCBhbHdheXMgc2V0IHRoZSBsYXN0IGFyZyAqLwotICAgIGludCB0b2sgPSBY
bWxDb250ZW50VG9rKGVuYywgcywgZW5kLCAmbmV4dCk7Ci0gICAgKmV2ZW50RW5kUFAgPSBuZXh0
OwotICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgY2FzZSBYTUxfVE9LX1RSQUlMSU5HX0NSOgotICAg
ICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgKmV2ZW50RW5kUFAgPSBlbmQ7Ci0gICAg
ICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKLSAgICAgICAgWE1MX0NoYXIgYyA9IDB4QTsK
LSAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgJmMsIDEpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAgIHJlcG9ydERlZmF1bHQo
cGFyc2VyLCBlbmMsIHMsIGVuZCk7Ci0gICAgICAvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUg
ZmluYWwgYnVmZmVyLCBzaG91bGQgd2UgY2hlY2sgZm9yCi0gICAgICAgICBYTUxfU1VTUEVOREVE
LCBYTUxfRklOSVNIRUQ/Ci0gICAgICAqLwotICAgICAgaWYgKHN0YXJ0VGFnTGV2ZWwgPT0gMCkK
LSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19FTEVNRU5UUzsKLSAgICAgIGlmICh0YWdMZXZl
bCAhPSBzdGFydFRhZ0xldmVsKQotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0FTWU5DX0VOVElU
WTsKLSAgICAgICpuZXh0UHRyID0gZW5kOwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwot
ICAgIGNhc2UgWE1MX1RPS19OT05FOgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpu
ZXh0UHRyID0gczsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAg
ICAgaWYgKHN0YXJ0VGFnTGV2ZWwgPiAwKSB7Ci0gICAgICAgIGlmICh0YWdMZXZlbCAhPSBzdGFy
dFRhZ0xldmVsKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQVNZTkNfRU5USVRZOwotICAg
ICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fRUxFTUVOVFM7Ci0gICAgY2FzZSBYTUxfVE9L
X0lOVkFMSUQ6Ci0gICAgICAqZXZlbnRQUCA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9S
X0lOVkFMSURfVE9LRU47Ci0gICAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gICAgICBpZiAoaGF2
ZU1vcmUpIHsKLSAgICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PTkU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOwot
ICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgICBpZiAoaGF2ZU1vcmUpIHsKLSAg
ICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKLSAgICBjYXNlIFhNTF9U
T0tfRU5USVRZX1JFRjoKLSAgICAgIHsKLSAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0g
ICAgICAgIEVOVElUWSAqZW50aXR5OwotICAgICAgICBYTUxfQ2hhciBjaCA9IChYTUxfQ2hhcikg
WG1sUHJlZGVmaW5lZEVudGl0eU5hbWUoZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1Bl
ckNoYXIpOwotICAgICAgICBpZiAoY2gpIHsKLSAgICAgICAgICBpZiAoY2hhcmFjdGVyRGF0YUhh
bmRsZXIpCi0gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCAmY2gs
IDEpOwotICAgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgICAgcmVw
b3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJD
aGFyKTsKLSAgICAgICAgaWYgKCFuYW1lKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOwotICAgICAgICBlbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+
Z2VuZXJhbEVudGl0aWVzLCBuYW1lLCAwKTsKLSAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9v
bCk7Ci0gICAgICAgIC8qIEZpcnN0LCBkZXRlcm1pbmUgaWYgYSBjaGVjayBmb3IgYW4gZXhpc3Rp
bmcgZGVjbGFyYXRpb24gaXMgbmVlZGVkOwotICAgICAgICAgICBpZiB5ZXMsIGNoZWNrIHRoYXQg
dGhlIGVudGl0eSBleGlzdHMsIGFuZCB0aGF0IGl0IGlzIGludGVybmFsLAotICAgICAgICAgICBv
dGhlcndpc2UgY2FsbCB0aGUgc2tpcHBlZCBlbnRpdHkgb3IgZGVmYXVsdCBoYW5kbGVyLgotICAg
ICAgICAqLwotICAgICAgICBpZiAoIWR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzIHx8IGR0ZC0+c3Rh
bmRhbG9uZSkgewotICAgICAgICAgIGlmICghZW50aXR5KQotICAgICAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9VTkRFRklORURfRU5USVRZOwotICAgICAgICAgIGVsc2UgaWYgKCFlbnRpdHktPmlz
X2ludGVybmFsKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FTlRJVFlfREVDTEFSRURf
SU5fUEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIWVudGl0eSkgewotICAgICAgICAg
IGlmIChza2lwcGVkRW50aXR5SGFuZGxlcikKLSAgICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5k
bGVyKGhhbmRsZXJBcmcsIG5hbWUsIDApOwotICAgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5k
bGVyKQotICAgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudGl0eS0+b3BlbikKLSAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGOwotICAgICAgICBp
ZiAoZW50aXR5LT5ub3RhdGlvbikKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0JJTkFSWV9F
TlRJVFlfUkVGOwotICAgICAgICBpZiAoZW50aXR5LT50ZXh0UHRyKSB7Ci0gICAgICAgICAgZW51
bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAgICAgIGlmICghZGVmYXVsdEV4cGFuZEludGVybmFs
RW50aXRpZXMpIHsKLSAgICAgICAgICAgIGlmIChza2lwcGVkRW50aXR5SGFuZGxlcikKLSAgICAg
ICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFyZywgZW50aXR5LT5uYW1lLCAw
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgICAgICBy
ZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBwcm9jZXNzSW50ZXJuYWxFbnRpdHkocGFy
c2VyLCBlbnRpdHksIFhNTF9GQUxTRSk7Ci0gICAgICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJS
T1JfTk9ORSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSB7Ci0gICAgICAgICAgY29uc3QgWE1M
X0NoYXIgKmNvbnRleHQ7Ci0gICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX1RSVUU7Ci0gICAg
ICAgICAgY29udGV4dCA9IGdldENvbnRleHQocGFyc2VyKTsKLSAgICAgICAgICBlbnRpdHktPm9w
ZW4gPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgaWYgKCFleHRlcm5hbEVudGl0eVJl
ZkhhbmRsZXIoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW50aXR5LT5iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW50aXR5LT5wdWJsaWNJZCkpCi0gICAgICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORzsKLSAgICAgICAgICBwb29sRGlzY2FyZCgm
dGVtcFBvb2wpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQot
ICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICBjYXNlIFhNTF9UT0tfU1RBUlRfVEFHX05PX0FUVFM6Ci0gICAg
ICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIFhNTF9UT0tfU1RBUlRfVEFHX1dJVEhfQVRU
UzoKLSAgICAgIHsKLSAgICAgICAgVEFHICp0YWc7Ci0gICAgICAgIGVudW0gWE1MX0Vycm9yIHJl
c3VsdDsKLSAgICAgICAgWE1MX0NoYXIgKnRvUHRyOwotICAgICAgICBpZiAoZnJlZVRhZ0xpc3Qp
IHsKLSAgICAgICAgICB0YWcgPSBmcmVlVGFnTGlzdDsKLSAgICAgICAgICBmcmVlVGFnTGlzdCA9
IGZyZWVUYWdMaXN0LT5wYXJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgdGFnID0gKFRBRyAqKU1BTExPQyhzaXplb2YoVEFHKSk7Ci0gICAgICAgICAgaWYgKCF0YWcp
Ci0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICB0YWct
PmJ1ZiA9IChjaGFyICopTUFMTE9DKElOSVRfVEFHX0JVRl9TSVpFKTsKLSAgICAgICAgICBpZiAo
IXRhZy0+YnVmKSB7Ci0gICAgICAgICAgICBGUkVFKHRhZyk7Ci0gICAgICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGFnLT5idWZFbmQg
PSB0YWctPmJ1ZiArIElOSVRfVEFHX0JVRl9TSVpFOwotICAgICAgICB9Ci0gICAgICAgIHRhZy0+
YmluZGluZ3MgPSBOVUxMOwotICAgICAgICB0YWctPnBhcmVudCA9IHRhZ1N0YWNrOwotICAgICAg
ICB0YWdTdGFjayA9IHRhZzsKLSAgICAgICAgdGFnLT5uYW1lLmxvY2FsUGFydCA9IE5VTEw7Ci0g
ICAgICAgIHRhZy0+bmFtZS5wcmVmaXggPSBOVUxMOwotICAgICAgICB0YWctPnJhd05hbWUgPSBz
ICsgZW5jLT5taW5CeXRlc1BlckNoYXI7Ci0gICAgICAgIHRhZy0+cmF3TmFtZUxlbmd0aCA9IFht
bE5hbWVMZW5ndGgoZW5jLCB0YWctPnJhd05hbWUpOwotICAgICAgICArK3RhZ0xldmVsOwotICAg
ICAgICB7Ci0gICAgICAgICAgY29uc3QgY2hhciAqcmF3TmFtZUVuZCA9IHRhZy0+cmF3TmFtZSAr
IHRhZy0+cmF3TmFtZUxlbmd0aDsKLSAgICAgICAgICBjb25zdCBjaGFyICpmcm9tUHRyID0gdGFn
LT5yYXdOYW1lOwotICAgICAgICAgIHRvUHRyID0gKFhNTF9DaGFyICopdGFnLT5idWY7Ci0gICAg
ICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaW50IGJ1ZlNpemU7Ci0gICAgICAgICAgICBp
bnQgY29udkxlbjsKLSAgICAgICAgICAgIFhtbENvbnZlcnQoZW5jLAotICAgICAgICAgICAgICAg
ICAgICAgICAmZnJvbVB0ciwgcmF3TmFtZUVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgKElD
SEFSICoqKSZ0b1B0ciwgKElDSEFSICopdGFnLT5idWZFbmQgLSAxKTsKLSAgICAgICAgICAgIGNv
bnZMZW4gPSAoaW50KSh0b1B0ciAtIChYTUxfQ2hhciAqKXRhZy0+YnVmKTsKLSAgICAgICAgICAg
IGlmIChmcm9tUHRyID09IHJhd05hbWVFbmQpIHsKLSAgICAgICAgICAgICAgdGFnLT5uYW1lLnN0
ckxlbiA9IGNvbnZMZW47Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnVmU2l6ZSA9IChpbnQpKHRhZy0+YnVmRW5kIC0gdGFnLT5idWYpIDw8IDE7Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNoYXIgKnRlbXAgPSAoY2hhciAqKVJFQUxMT0Mo
dGFnLT5idWYsIGJ1ZlNpemUpOwotICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAg
ICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgICAgICB0
YWctPmJ1ZiA9IHRlbXA7Ci0gICAgICAgICAgICAgIHRhZy0+YnVmRW5kID0gdGVtcCArIGJ1ZlNp
emU7Ci0gICAgICAgICAgICAgIHRvUHRyID0gKFhNTF9DaGFyICopdGVtcCArIGNvbnZMZW47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRhZy0+bmFtZS5z
dHIgPSAoWE1MX0NoYXIgKil0YWctPmJ1ZjsKLSAgICAgICAgKnRvUHRyID0gWE1MX1QoJ1wwJyk7
Ci0gICAgICAgIHJlc3VsdCA9IHN0b3JlQXR0cyhwYXJzZXIsIGVuYywgcywgJih0YWctPm5hbWUp
LCAmKHRhZy0+YmluZGluZ3MpKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICBpZiAoc3RhcnRFbGVtZW50SGFuZGxlcikKLSAgICAgICAgICBz
dGFydEVsZW1lbnRIYW5kbGVyKGhhbmRsZXJBcmcsIHRhZy0+bmFtZS5zdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3QgWE1MX0NoYXIgKiopYXR0cyk7Ci0gICAgICAgIGVs
c2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBl
bmMsIHMsIG5leHQpOwotICAgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgY2FzZSBYTUxfVE9LX0VNUFRZX0VMRU1FTlRfTk9fQVRUUzoKLSAg
ICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgWE1MX1RPS19FTVBUWV9FTEVNRU5UX1dJ
VEhfQVRUUzoKLSAgICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqcmF3TmFtZSA9IHMgKyBlbmMt
Pm1pbkJ5dGVzUGVyQ2hhcjsKLSAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAg
ICBCSU5ESU5HICpiaW5kaW5ncyA9IE5VTEw7Ci0gICAgICAgIFhNTF9Cb29sIG5vRWxtSGFuZGxl
cnMgPSBYTUxfVFJVRTsKLSAgICAgICAgVEFHX05BTUUgbmFtZTsKLSAgICAgICAgbmFtZS5zdHIg
PSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMsIHJhd05hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWUgKyBYbWxOYW1lTGVuZ3RoKGVuYywgcmF3TmFt
ZSkpOwotICAgICAgICBpZiAoIW5hbWUuc3RyKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fTUVNT1JZOwotICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIHJlc3Vs
dCA9IHN0b3JlQXR0cyhwYXJzZXIsIGVuYywgcywgJm5hbWUsICZiaW5kaW5ncyk7Ci0gICAgICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcG9vbEZpbmlz
aCgmdGVtcFBvb2wpOwotICAgICAgICBpZiAoc3RhcnRFbGVtZW50SGFuZGxlcikgewotICAgICAg
ICAgIHN0YXJ0RWxlbWVudEhhbmRsZXIoaGFuZGxlckFyZywgbmFtZS5zdHIsIChjb25zdCBYTUxf
Q2hhciAqKilhdHRzKTsKLSAgICAgICAgICBub0VsbUhhbmRsZXJzID0gWE1MX0ZBTFNFOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChlbmRFbGVtZW50SGFuZGxlcikgewotICAgICAgICAgIGlmIChz
dGFydEVsZW1lbnRIYW5kbGVyKQotICAgICAgICAgICAgKmV2ZW50UFAgPSAqZXZlbnRFbmRQUDsK
LSAgICAgICAgICBlbmRFbGVtZW50SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLnN0cik7Ci0gICAg
ICAgICAgbm9FbG1IYW5kbGVycyA9IFhNTF9GQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bm9FbG1IYW5kbGVycyAmJiBkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICByZXBvcnREZWZhdWx0
KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0g
ICAgICAgIHdoaWxlIChiaW5kaW5ncykgewotICAgICAgICAgIEJJTkRJTkcgKmIgPSBiaW5kaW5n
czsKLSAgICAgICAgICBpZiAoZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpCi0gICAgICAgICAgICBl
bmROYW1lc3BhY2VEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBiLT5wcmVmaXgtPm5hbWUpOwotICAg
ICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3MtPm5leHRUYWdCaW5kaW5nOwotICAgICAgICAgIGIt
Pm5leHRUYWdCaW5kaW5nID0gZnJlZUJpbmRpbmdMaXN0OwotICAgICAgICAgIGZyZWVCaW5kaW5n
TGlzdCA9IGI7Ci0gICAgICAgICAgYi0+cHJlZml4LT5iaW5kaW5nID0gYi0+cHJldlByZWZpeEJp
bmRpbmc7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh0YWdMZXZlbCA9PSAwKQotICAg
ICAgICByZXR1cm4gZXBpbG9nUHJvY2Vzc29yKHBhcnNlciwgbmV4dCwgZW5kLCBuZXh0UHRyKTsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19FTkRfVEFHOgotICAgICAgaWYgKHRhZ0xl
dmVsID09IHN0YXJ0VGFnTGV2ZWwpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfQVNZTkNfRU5U
SVRZOwotICAgICAgZWxzZSB7Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIGNvbnN0IGNoYXIg
KnJhd05hbWU7Ci0gICAgICAgIFRBRyAqdGFnID0gdGFnU3RhY2s7Ci0gICAgICAgIHRhZ1N0YWNr
ID0gdGFnLT5wYXJlbnQ7Ci0gICAgICAgIHRhZy0+cGFyZW50ID0gZnJlZVRhZ0xpc3Q7Ci0gICAg
ICAgIGZyZWVUYWdMaXN0ID0gdGFnOwotICAgICAgICByYXdOYW1lID0gcyArIGVuYy0+bWluQnl0
ZXNQZXJDaGFyKjI7Ci0gICAgICAgIGxlbiA9IFhtbE5hbWVMZW5ndGgoZW5jLCByYXdOYW1lKTsK
LSAgICAgICAgaWYgKGxlbiAhPSB0YWctPnJhd05hbWVMZW5ndGgKLSAgICAgICAgICAgIHx8IG1l
bWNtcCh0YWctPnJhd05hbWUsIHJhd05hbWUsIGxlbikgIT0gMCkgewotICAgICAgICAgICpldmVu
dFBQID0gcmF3TmFtZTsKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1RBR19NSVNNQVRDSDsK
LSAgICAgICAgfQotICAgICAgICAtLXRhZ0xldmVsOwotICAgICAgICBpZiAoZW5kRWxlbWVudEhh
bmRsZXIpIHsKLSAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbG9jYWxQYXJ0OwotICAgICAgICAg
IGNvbnN0IFhNTF9DaGFyICpwcmVmaXg7Ci0gICAgICAgICAgWE1MX0NoYXIgKnVyaTsKLSAgICAg
ICAgICBsb2NhbFBhcnQgPSB0YWctPm5hbWUubG9jYWxQYXJ0OwotICAgICAgICAgIGlmIChucyAm
JiBsb2NhbFBhcnQpIHsKLSAgICAgICAgICAgIC8qIGxvY2FsUGFydCBhbmQgcHJlZml4IG1heSBo
YXZlIGJlZW4gb3ZlcndyaXR0ZW4gaW4KLSAgICAgICAgICAgICAgIHRhZy0+bmFtZS5zdHIsIHNp
bmNlIHRoaXMgcG9pbnRzIHRvIHRoZSBiaW5kaW5nLT51cmkKLSAgICAgICAgICAgICAgIGJ1ZmZl
ciB3aGljaCBnZXRzIHJlLXVzZWQ7IHNvIHdlIGhhdmUgdG8gYWRkIHRoZW0gYWdhaW4KLSAgICAg
ICAgICAgICovCi0gICAgICAgICAgICB1cmkgPSAoWE1MX0NoYXIgKil0YWctPm5hbWUuc3RyICsg
dGFnLT5uYW1lLnVyaUxlbjsKLSAgICAgICAgICAgIC8qIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9y
IHNwYWNlIC0gYWxyZWFkeSBkb25lIGluIHN0b3JlQXR0cygpICovCi0gICAgICAgICAgICB3aGls
ZSAoKmxvY2FsUGFydCkgKnVyaSsrID0gKmxvY2FsUGFydCsrOwotICAgICAgICAgICAgcHJlZml4
ID0gKFhNTF9DaGFyICopdGFnLT5uYW1lLnByZWZpeDsKLSAgICAgICAgICAgIGlmIChuc190cmlw
bGV0cyAmJiBwcmVmaXgpIHsKLSAgICAgICAgICAgICAgKnVyaSsrID0gbmFtZXNwYWNlU2VwYXJh
dG9yOwotICAgICAgICAgICAgICB3aGlsZSAoKnByZWZpeCkgKnVyaSsrID0gKnByZWZpeCsrOwot
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICp1cmkgPSBYTUxfVCgnXDAnKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgZW5kRWxlbWVudEhhbmRsZXIoaGFuZGxlckFyZywgdGFnLT5uYW1lLnN0
cik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAg
ICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICAgIHdoaWxlICh0
YWctPmJpbmRpbmdzKSB7Ci0gICAgICAgICAgQklORElORyAqYiA9IHRhZy0+YmluZGluZ3M7Ci0g
ICAgICAgICAgaWYgKGVuZE5hbWVzcGFjZURlY2xIYW5kbGVyKQotICAgICAgICAgICAgZW5kTmFt
ZXNwYWNlRGVjbEhhbmRsZXIoaGFuZGxlckFyZywgYi0+cHJlZml4LT5uYW1lKTsKLSAgICAgICAg
ICB0YWctPmJpbmRpbmdzID0gdGFnLT5iaW5kaW5ncy0+bmV4dFRhZ0JpbmRpbmc7Ci0gICAgICAg
ICAgYi0+bmV4dFRhZ0JpbmRpbmcgPSBmcmVlQmluZGluZ0xpc3Q7Ci0gICAgICAgICAgZnJlZUJp
bmRpbmdMaXN0ID0gYjsKLSAgICAgICAgICBiLT5wcmVmaXgtPmJpbmRpbmcgPSBiLT5wcmV2UHJl
Zml4QmluZGluZzsKLSAgICAgICAgfQotICAgICAgICBpZiAodGFnTGV2ZWwgPT0gMCkKLSAgICAg
ICAgICByZXR1cm4gZXBpbG9nUHJvY2Vzc29yKHBhcnNlciwgbmV4dCwgZW5kLCBuZXh0UHRyKTsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19DSEFSX1JFRjoKLSAgICAg
IHsKLSAgICAgICAgaW50IG4gPSBYbWxDaGFyUmVmTnVtYmVyKGVuYywgcyk7Ci0gICAgICAgIGlm
IChuIDwgMCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0JBRF9DSEFSX1JFRjsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVyKSB7Ci0gICAgICAgICAgWE1MX0NoYXIgYnVmW1hN
TF9FTkNPREVfTUFYXTsKLSAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJn
LCBidWYsIFhtbEVuY29kZShuLCAoSUNIQVIgKilidWYpKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwg
ZW5jLCBzLCBuZXh0KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19Y
TUxfREVDTDoKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSTsKLSAgICBj
YXNlIFhNTF9UT0tfREFUQV9ORVdMSU5FOgotICAgICAgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVy
KSB7Ci0gICAgICAgIFhNTF9DaGFyIGMgPSAweEE7Ci0gICAgICAgIGNoYXJhY3RlckRhdGFIYW5k
bGVyKGhhbmRsZXJBcmcsICZjLCAxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRlZmF1bHRI
YW5kbGVyKQotICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19DREFUQV9TRUNUX09QRU46Ci0gICAgICB7Ci0g
ICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICAgICAgaWYgKHN0YXJ0Q2RhdGFTZWN0
aW9uSGFuZGxlcikKLSAgICAgICAgICBzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIoaGFuZGxlckFy
Zyk7Ci0jaWYgMAotICAgICAgICAvKiBTdXBwb3NlIHlvdSBkb2luZyBhIHRyYW5zZm9ybWF0aW9u
IG9uIGEgZG9jdW1lbnQgdGhhdCBpbnZvbHZlcwotICAgICAgICAgICBjaGFuZ2luZyBvbmx5IHRo
ZSBjaGFyYWN0ZXIgZGF0YS4gIFlvdSBzZXQgdXAgYSBkZWZhdWx0SGFuZGxlcgotICAgICAgICAg
ICBhbmQgYSBjaGFyYWN0ZXJEYXRhSGFuZGxlci4gIFRoZSBkZWZhdWx0SGFuZGxlciBzaW1wbHkg
Y29waWVzCi0gICAgICAgICAgIGNoYXJhY3RlcnMgdGhyb3VnaC4gIFRoZSBjaGFyYWN0ZXJEYXRh
SGFuZGxlciBkb2VzIHRoZQotICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbiBhbmQgd3JpdGVzIHRo
ZSBjaGFyYWN0ZXJzIG91dCBlc2NhcGluZyB0aGVtIGFzCi0gICAgICAgICAgIG5lY2Vzc2FyeS4g
IFRoaXMgY2FzZSB3aWxsIGZhaWwgdG8gd29yayBpZiB3ZSBsZWF2ZSBvdXQgdGhlCi0gICAgICAg
ICAgIGZvbGxvd2luZyB0d28gbGluZXMgKGJlY2F1c2UgJiBhbmQgPCBpbnNpZGUgQ0RBVEEgc2Vj
dGlvbnMgd2lsbAotICAgICAgICAgICBiZSBpbmNvcnJlY3RseSBlc2NhcGVkKS4KLQotICAgICAg
ICAgICBIb3dldmVyLCBub3cgd2UgaGF2ZSBhIHN0YXJ0L2VuZENkYXRhU2VjdGlvbkhhbmRsZXIs
IHNvIGl0IHNlZW1zCi0gICAgICAgICAgIGVhc2llciB0byBsZXQgdGhlIHVzZXIgZGVhbCB3aXRo
IHRoaXMuCi0gICAgICAgICovCi0gICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVy
KQotICAgICAgICAgIGNoYXJhY3RlckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsIDAp
OwotI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgIHJl
cG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgICByZXN1bHQgPSBkb0Nk
YXRhU2VjdGlvbihwYXJzZXIsIGVuYywgJm5leHQsIGVuZCwgbmV4dFB0ciwgaGF2ZU1vcmUpOwot
ICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQotICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIGVsc2UgaWYgKCFuZXh0KSB7Ci0gICAgICAgICAgcHJvY2Vzc29yID0g
Y2RhdGFTZWN0aW9uUHJvY2Vzc29yOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19UUkFJTElOR19SU1FC
OgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgaWYgKGNoYXJhY3RlckRhdGFI
YW5kbGVyKSB7Ci0gICAgICAgIGlmIChNVVNUX0NPTlZFUlQoZW5jLCBzKSkgewotICAgICAgICAg
IElDSEFSICpkYXRhUHRyID0gKElDSEFSICopZGF0YUJ1ZjsKLSAgICAgICAgICBYbWxDb252ZXJ0
KGVuYywgJnMsIGVuZCwgJmRhdGFQdHIsIChJQ0hBUiAqKWRhdGFCdWZFbmQpOwotICAgICAgICAg
IGNoYXJhY3RlckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludCkoZGF0YVB0ciAtIChJQ0hBUiAqKWRhdGFCdWYpKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFu
ZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWE1MX0NoYXIgKilzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChYTUxfQ2hhciAqKWVuZCAtIChY
TUxfQ2hhciAqKXMpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQot
ICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBlbmQpOwotICAgICAgLyogV2Ug
YXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbmFsIGJ1ZmZlciwgc2hvdWxkIHdlIGNoZWNrIGZvcgot
ICAgICAgICAgWE1MX1NVU1BFTkRFRCwgWE1MX0ZJTklTSEVEPwotICAgICAgKi8KLSAgICAgIGlm
IChzdGFydFRhZ0xldmVsID09IDApIHsKLSAgICAgICAgKmV2ZW50UFAgPSBlbmQ7Ci0gICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fRUxFTUVOVFM7Ci0gICAgICB9Ci0gICAgICBpZiAodGFnTGV2
ZWwgIT0gc3RhcnRUYWdMZXZlbCkgewotICAgICAgICAqZXZlbnRQUCA9IGVuZDsKLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFk7Ci0gICAgICB9Ci0gICAgICAqbmV4dFB0ciA9
IGVuZDsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhNTF9UT0tfREFU
QV9DSEFSUzoKLSAgICAgIHsKLSAgICAgICAgWE1MX0NoYXJhY3RlckRhdGFIYW5kbGVyIGNoYXJE
YXRhSGFuZGxlciA9IGNoYXJhY3RlckRhdGFIYW5kbGVyOwotICAgICAgICBpZiAoY2hhckRhdGFI
YW5kbGVyKSB7Ci0gICAgICAgICAgaWYgKE1VU1RfQ09OVkVSVChlbmMsIHMpKSB7Ci0gICAgICAg
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgIElDSEFSICpkYXRhUHRyID0gKElDSEFSICop
ZGF0YUJ1ZjsKLSAgICAgICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBuZXh0LCAmZGF0YVB0
ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7Ci0gICAgICAgICAgICAgICpldmVudEVuZFBQID0gczsK
LSAgICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1
ZikpOwotICAgICAgICAgICAgICBpZiAocyA9PSBuZXh0KQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAqZXZlbnRQUCA9IHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
fQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNoYXJEYXRhSGFuZGxlcihoYW5kbGVyQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYTUxfQ2hhciAqKXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludCkoKFhNTF9DaGFyICopbmV4dCAtIChYTUxfQ2hhciAqKXMp
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAg
ICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgIH0KLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgWE1MX1RPS19QSToKLSAgICAgIGlmICghcmVwb3J0UHJvY2Vzc2luZ0lu
c3RydWN0aW9uKHBhcnNlciwgZW5jLCBzLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKLSAg
ICAgIGlmICghcmVwb3J0Q29tbWVudChwYXJzZXIsIGVuYywgcywgbmV4dCkpCi0gICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVu
YywgcywgbmV4dCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgKmV2ZW50UFAgPSBzID0gbmV4
dDsKLSAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0g
ICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAg
Y2FzZSBYTUxfRklOSVNIRUQ6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAg
ZGVmYXVsdDogOwotICAgIH0KLSAgfQotICAvKiBub3QgcmVhY2hlZCAqLwotfQotCi0vKiBQcmVj
b25kaXRpb246IGFsbCBhcmd1bWVudHMgbXVzdCBiZSBub24tTlVMTDsKLSAgIFB1cnBvc2U6Ci0g
ICAtIG5vcm1hbGl6ZSBhdHRyaWJ1dGVzCi0gICAtIGNoZWNrIGF0dHJpYnV0ZXMgZm9yIHdlbGwt
Zm9ybWVkbmVzcwotICAgLSBnZW5lcmF0ZSBuYW1lc3BhY2UgYXdhcmUgYXR0cmlidXRlIG5hbWVz
IChVUkksIHByZWZpeCkKLSAgIC0gYnVpbGQgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciBzdGFydEVs
ZW1lbnRIYW5kbGVyCi0gICAtIGRlZmF1bHQgYXR0cmlidXRlcwotICAgLSBwcm9jZXNzIG5hbWVz
cGFjZSBkZWNsYXJhdGlvbnMgKGNoZWNrIGFuZCByZXBvcnQgdGhlbSkKLSAgIC0gZ2VuZXJhdGUg
bmFtZXNwYWNlIGF3YXJlIGVsZW1lbnQgbmFtZSAoVVJJLCBwcmVmaXgpCi0qLwotc3RhdGljIGVu
dW0gWE1MX0Vycm9yCi1zdG9yZUF0dHMoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5H
ICplbmMsCi0gICAgICAgICAgY29uc3QgY2hhciAqYXR0U3RyLCBUQUdfTkFNRSAqdGFnTmFtZVB0
ciwKLSAgICAgICAgICBCSU5ESU5HICoqYmluZGluZ3NQdHIpCi17Ci0gIERURCAqIGNvbnN0IGR0
ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBFTEVNRU5U
X1RZUEUgKmVsZW1lbnRUeXBlOwotICBpbnQgbkRlZmF1bHRBdHRzOwotICBjb25zdCBYTUxfQ2hh
ciAqKmFwcEF0dHM7ICAgLyogdGhlIGF0dHJpYnV0ZSBsaXN0IGZvciB0aGUgYXBwbGljYXRpb24g
Ki8KLSAgaW50IGF0dEluZGV4ID0gMDsKLSAgaW50IHByZWZpeExlbjsKLSAgaW50IGk7Ci0gIGlu
dCBuOwotICBYTUxfQ2hhciAqdXJpOwotICBpbnQgblByZWZpeGVzID0gMDsKLSAgQklORElORyAq
YmluZGluZzsKLSAgY29uc3QgWE1MX0NoYXIgKmxvY2FsUGFydDsKLQotICAvKiBsb29rdXAgdGhl
IGVsZW1lbnQgdHlwZSBuYW1lICovCi0gIGVsZW1lbnRUeXBlID0gKEVMRU1FTlRfVFlQRSAqKWxv
b2t1cChwYXJzZXIsICZkdGQtPmVsZW1lbnRUeXBlcywgdGFnTmFtZVB0ci0+c3RyLDApOwotICBp
ZiAoIWVsZW1lbnRUeXBlKSB7Ci0gICAgY29uc3QgWE1MX0NoYXIgKm5hbWUgPSBwb29sQ29weVN0
cmluZygmZHRkLT5wb29sLCB0YWdOYW1lUHRyLT5zdHIpOwotICAgIGlmICghbmFtZSkKLSAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgIGVsZW1lbnRUeXBlID0gKEVMRU1FTlRf
VFlQRSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPmVsZW1lbnRUeXBlcywgbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVMRU1FTlRfVFlQRSkpOwot
ICAgIGlmICghZWxlbWVudFR5cGUpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
LSAgICBpZiAobnMgJiYgIXNldEVsZW1lbnRUeXBlUHJlZml4KHBhcnNlciwgZWxlbWVudFR5cGUp
KQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gIH0KLSAgbkRlZmF1bHRBdHRz
ID0gZWxlbWVudFR5cGUtPm5EZWZhdWx0QXR0czsKLQotICAvKiBnZXQgdGhlIGF0dHJpYnV0ZXMg
ZnJvbSB0aGUgdG9rZW5pemVyICovCi0gIG4gPSBYbWxHZXRBdHRyaWJ1dGVzKGVuYywgYXR0U3Ry
LCBhdHRzU2l6ZSwgYXR0cyk7Ci0gIGlmIChuICsgbkRlZmF1bHRBdHRzID4gYXR0c1NpemUpIHsK
LSAgICBpbnQgb2xkQXR0c1NpemUgPSBhdHRzU2l6ZTsKLSAgICBBVFRSSUJVVEUgKnRlbXA7Ci0j
aWZkZWYgWE1MX0FUVFJfSU5GTwotICAgIFhNTF9BdHRySW5mbyAqdGVtcDI7Ci0jZW5kaWYKLSAg
ICBhdHRzU2l6ZSA9IG4gKyBuRGVmYXVsdEF0dHMgKyBJTklUX0FUVFNfU0laRTsKLSAgICB0ZW1w
ID0gKEFUVFJJQlVURSAqKVJFQUxMT0MoKHZvaWQgKilhdHRzLCBhdHRzU2l6ZSAqIHNpemVvZihB
VFRSSUJVVEUpKTsKLSAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7Ci0gICAgYXR0cyA9IHRlbXA7Ci0jaWZkZWYgWE1MX0FUVFJfSU5GTwotICAg
IHRlbXAyID0gKFhNTF9BdHRySW5mbyAqKVJFQUxMT0MoKHZvaWQgKilhdHRJbmZvLCBhdHRzU2l6
ZSAqIHNpemVvZihYTUxfQXR0ckluZm8pKTsKLSAgICBpZiAodGVtcDIgPT0gTlVMTCkKLSAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgIGF0dEluZm8gPSB0ZW1wMjsKLSNlbmRp
ZgotICAgIGlmIChuID4gb2xkQXR0c1NpemUpCi0gICAgICBYbWxHZXRBdHRyaWJ1dGVzKGVuYywg
YXR0U3RyLCBuLCBhdHRzKTsKLSAgfQotCi0gIGFwcEF0dHMgPSAoY29uc3QgWE1MX0NoYXIgKiop
YXR0czsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEFUVFJJQlVURSAqY3VyckF0
dCA9ICZhdHRzW2ldOwotI2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgICBYTUxfQXR0ckluZm8gKmN1
cnJBdHRJbmZvID0gJmF0dEluZm9baV07Ci0jZW5kaWYKLSAgICAvKiBhZGQgdGhlIG5hbWUgYW5k
IHZhbHVlIHRvIHRoZSBhdHRyaWJ1dGUgbGlzdCAqLwotICAgIEFUVFJJQlVURV9JRCAqYXR0SWQg
PSBnZXRBdHRyaWJ1dGVJZChwYXJzZXIsIGVuYywgY3VyckF0dC0+bmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckF0dC0+bmFtZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFhtbE5hbWVMZW5ndGgoZW5jLCBjdXJyQXR0
LT5uYW1lKSk7Ci0gICAgaWYgKCFhdHRJZCkKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVN
T1JZOwotI2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgICBjdXJyQXR0SW5mby0+bmFtZVN0YXJ0ID0g
cGFyc2VFbmRCeXRlSW5kZXggLSAocGFyc2VFbmRQdHIgLSBjdXJyQXR0LT5uYW1lKTsKLSAgICBj
dXJyQXR0SW5mby0+bmFtZUVuZCA9IGN1cnJBdHRJbmZvLT5uYW1lU3RhcnQgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWG1sTmFtZUxlbmd0aChlbmMsIGN1cnJBdHQtPm5hbWUpOwotICAg
IGN1cnJBdHRJbmZvLT52YWx1ZVN0YXJ0ID0gcGFyc2VFbmRCeXRlSW5kZXggLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwYXJzZUVuZFB0ciAtIGN1cnJBdHQtPnZhbHVlUHRyKTsKLSAg
ICBjdXJyQXR0SW5mby0+dmFsdWVFbmQgPSBwYXJzZUVuZEJ5dGVJbmRleCAtIChwYXJzZUVuZFB0
ciAtIGN1cnJBdHQtPnZhbHVlRW5kKTsKLSNlbmRpZgotICAgIC8qIERldGVjdCBkdXBsaWNhdGUg
YXR0cmlidXRlcyBieSB0aGVpciBRTmFtZXMuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuCi0gICAg
ICAgbmFtZXNwYWNlIHByb2Nlc3NpbmcgaXMgdHVybmVkIG9uIGFuZCBkaWZmZXJlbnQgcHJlZml4
ZXMgZm9yIHRoZSBzYW1lCi0gICAgICAgbmFtZXNwYWNlIGFyZSB1c2VkLiBGb3IgdGhpcyBjYXNl
IHdlIGhhdmUgYSBjaGVjayBmdXJ0aGVyIGRvd24uCi0gICAgKi8KLSAgICBpZiAoKGF0dElkLT5u
YW1lKVstMV0pIHsKLSAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAgICAgIGV2ZW50UHRy
ID0gYXR0c1tpXS5uYW1lOwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9EVVBMSUNBVEVfQVRUUklC
VVRFOwotICAgIH0KLSAgICAoYXR0SWQtPm5hbWUpWy0xXSA9IDE7Ci0gICAgYXBwQXR0c1thdHRJ
bmRleCsrXSA9IGF0dElkLT5uYW1lOwotICAgIGlmICghYXR0c1tpXS5ub3JtYWxpemVkKSB7Ci0g
ICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7Ci0gICAgICBYTUxfQm9vbCBpc0NkYXRhID0gWE1M
X1RSVUU7Ci0KLSAgICAgIC8qIGZpZ3VyZSBvdXQgd2hldGhlciBkZWNsYXJlZCBhcyBvdGhlciB0
aGFuIENEQVRBICovCi0gICAgICBpZiAoYXR0SWQtPm1heWJlVG9rZW5pemVkKSB7Ci0gICAgICAg
IGludCBqOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkRlZmF1bHRBdHRzOyBqKyspIHsKLSAg
ICAgICAgICBpZiAoYXR0SWQgPT0gZWxlbWVudFR5cGUtPmRlZmF1bHRBdHRzW2pdLmlkKSB7Ci0g
ICAgICAgICAgICBpc0NkYXRhID0gZWxlbWVudFR5cGUtPmRlZmF1bHRBdHRzW2pdLmlzQ2RhdGE7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQot
ICAgICAgLyogbm9ybWFsaXplIHRoZSBhdHRyaWJ1dGUgdmFsdWUgKi8KLSAgICAgIHJlc3VsdCA9
IHN0b3JlQXR0cmlidXRlVmFsdWUocGFyc2VyLCBlbmMsIGlzQ2RhdGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHNbaV0udmFsdWVQdHIsIGF0dHNbaV0udmFsdWVFbmQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wUG9vbCk7Ci0gICAgICBp
ZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgYXBwQXR0c1thdHRJbmRl
eF0gPSBwb29sU3RhcnQoJnRlbXBQb29sKTsKLSAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsK
LSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAvKiB0aGUgdmFsdWUgZGlkIG5vdCBuZWVkIG5vcm1h
bGl6aW5nICovCi0gICAgICBhcHBBdHRzW2F0dEluZGV4XSA9IHBvb2xTdG9yZVN0cmluZygmdGVt
cFBvb2wsIGVuYywgYXR0c1tpXS52YWx1ZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHNbaV0udmFsdWVFbmQpOwotICAgICAgaWYgKGFwcEF0dHNbYXR0
SW5kZXhdID09IDApCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAg
cG9vbEZpbmlzaCgmdGVtcFBvb2wpOwotICAgIH0KLSAgICAvKiBoYW5kbGUgcHJlZml4ZWQgYXR0
cmlidXRlIG5hbWVzICovCi0gICAgaWYgKGF0dElkLT5wcmVmaXgpIHsKLSAgICAgIGlmIChhdHRJ
ZC0+eG1sbnMpIHsKLSAgICAgICAgLyogZGVhbCB3aXRoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMg
aGVyZSAqLwotICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBhZGRCaW5kaW5nKHBhcnNl
ciwgYXR0SWQtPnByZWZpeCwgYXR0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwQXR0c1thdHRJbmRleF0sIGJpbmRpbmdzUHRyKTsKLSAgICAgICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAtLWF0dEluZGV4Owot
ICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIGRlYWwgd2l0aCBvdGhlciBwcmVmaXhl
ZCBuYW1lcyBsYXRlciAqLwotICAgICAgICBhdHRJbmRleCsrOwotICAgICAgICBuUHJlZml4ZXMr
KzsKLSAgICAgICAgKGF0dElkLT5uYW1lKVstMV0gPSAyOwotICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgICBhdHRJbmRleCsrOwotICB9Ci0KLSAgLyogc2V0LXVwIGZvciBYTUxfR2V0U3Bl
Y2lmaWVkQXR0cmlidXRlQ291bnQgYW5kIFhNTF9HZXRJZEF0dHJpYnV0ZUluZGV4ICovCi0gIG5T
cGVjaWZpZWRBdHRzID0gYXR0SW5kZXg7Ci0gIGlmIChlbGVtZW50VHlwZS0+aWRBdHQgJiYgKGVs
ZW1lbnRUeXBlLT5pZEF0dC0+bmFtZSlbLTFdKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGF0dElu
ZGV4OyBpICs9IDIpCi0gICAgICBpZiAoYXBwQXR0c1tpXSA9PSBlbGVtZW50VHlwZS0+aWRBdHQt
Pm5hbWUpIHsKLSAgICAgICAgaWRBdHRJbmRleCA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotICB9Ci0gIGVsc2UKLSAgICBpZEF0dEluZGV4ID0gLTE7Ci0KLSAgLyogZG8gYXR0cmlidXRl
IGRlZmF1bHRpbmcgKi8KLSAgZm9yIChpID0gMDsgaSA8IG5EZWZhdWx0QXR0czsgaSsrKSB7Ci0g
ICAgY29uc3QgREVGQVVMVF9BVFRSSUJVVEUgKmRhID0gZWxlbWVudFR5cGUtPmRlZmF1bHRBdHRz
ICsgaTsKLSAgICBpZiAoIShkYS0+aWQtPm5hbWUpWy0xXSAmJiBkYS0+dmFsdWUpIHsKLSAgICAg
IGlmIChkYS0+aWQtPnByZWZpeCkgewotICAgICAgICBpZiAoZGEtPmlkLT54bWxucykgewotICAg
ICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGFkZEJpbmRpbmcocGFyc2VyLCBkYS0+aWQt
PnByZWZpeCwgZGEtPmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGEtPnZhbHVlLCBiaW5kaW5nc1B0cik7Ci0gICAgICAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgKGRhLT5pZC0+bmFtZSlbLTFdID0gMjsKLSAgICAgICAgICBuUHJlZml4ZXMrKzsKLSAg
ICAgICAgICBhcHBBdHRzW2F0dEluZGV4KytdID0gZGEtPmlkLT5uYW1lOwotICAgICAgICAgIGFw
cEF0dHNbYXR0SW5kZXgrK10gPSBkYS0+dmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGVsc2UgewotICAgICAgICAoZGEtPmlkLT5uYW1lKVstMV0gPSAxOwotICAgICAgICBhcHBBdHRz
W2F0dEluZGV4KytdID0gZGEtPmlkLT5uYW1lOwotICAgICAgICBhcHBBdHRzW2F0dEluZGV4Kytd
ID0gZGEtPnZhbHVlOwotICAgICAgfQotICAgIH0KLSAgfQotICBhcHBBdHRzW2F0dEluZGV4XSA9
IDA7Ci0KLSAgLyogZXhwYW5kIHByZWZpeGVkIGF0dHJpYnV0ZSBuYW1lcywgY2hlY2sgZm9yIGR1
cGxpY2F0ZXMsCi0gICAgIGFuZCBjbGVhciBmbGFncyB0aGF0IHNheSB3aGV0aGVyIGF0dHJpYnV0
ZXMgd2VyZSBzcGVjaWZpZWQgKi8KLSAgaSA9IDA7Ci0gIGlmIChuUHJlZml4ZXMpIHsKLSAgICBp
bnQgajsgIC8qIGhhc2ggdGFibGUgaW5kZXggKi8KLSAgICB1bnNpZ25lZCBsb25nIHZlcnNpb24g
PSBuc0F0dHNWZXJzaW9uOwotICAgIGludCBuc0F0dHNTaXplID0gKGludCkxIDw8IG5zQXR0c1Bv
d2VyOwotICAgIC8qIHNpemUgb2YgaGFzaCB0YWJsZSBtdXN0IGJlIGF0IGxlYXN0IDIgKiAoIyBv
ZiBwcmVmaXhlZCBhdHRyaWJ1dGVzKSAqLwotICAgIGlmICgoblByZWZpeGVzIDw8IDEpID4+IG5z
QXR0c1Bvd2VyKSB7ICAvKiB0cnVlIGZvciBuc0F0dHNQb3dlciA9IDAgKi8KLSAgICAgIE5TX0FU
VCAqdGVtcDsKLSAgICAgIC8qIGhhc2ggdGFibGUgc2l6ZSBtdXN0IGFsc28gYmUgYSBwb3dlciBv
ZiAyIGFuZCA+PSA4ICovCi0gICAgICB3aGlsZSAoblByZWZpeGVzID4+IG5zQXR0c1Bvd2VyKysp
OwotICAgICAgaWYgKG5zQXR0c1Bvd2VyIDwgMykKLSAgICAgICAgbnNBdHRzUG93ZXIgPSAzOwot
ICAgICAgbnNBdHRzU2l6ZSA9IChpbnQpMSA8PCBuc0F0dHNQb3dlcjsKLSAgICAgIHRlbXAgPSAo
TlNfQVRUICopUkVBTExPQyhuc0F0dHMsIG5zQXR0c1NpemUgKiBzaXplb2YoTlNfQVRUKSk7Ci0g
ICAgICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAg
ICAgbnNBdHRzID0gdGVtcDsKLSAgICAgIHZlcnNpb24gPSAwOyAgLyogZm9yY2UgcmUtaW5pdGlh
bGl6YXRpb24gb2YgbnNBdHRzIGhhc2ggdGFibGUgKi8KLSAgICB9Ci0gICAgLyogdXNpbmcgYSB2
ZXJzaW9uIGZsYWcgc2F2ZXMgdXMgZnJvbSBpbml0aWFsaXppbmcgbnNBdHRzIGV2ZXJ5IHRpbWUg
Ki8KLSAgICBpZiAoIXZlcnNpb24pIHsgIC8qIGluaXRpYWxpemUgdmVyc2lvbiBmbGFncyB3aGVu
IHZlcnNpb24gd3JhcHMgYXJvdW5kICovCi0gICAgICB2ZXJzaW9uID0gSU5JVF9BVFRTX1ZFUlNJ
T047Ci0gICAgICBmb3IgKGogPSBuc0F0dHNTaXplOyBqICE9IDA7ICkKLSAgICAgICAgbnNBdHRz
Wy0tal0udmVyc2lvbiA9IHZlcnNpb247Ci0gICAgfQotICAgIG5zQXR0c1ZlcnNpb24gPSAtLXZl
cnNpb247Ci0KLSAgICAvKiBleHBhbmQgcHJlZml4ZWQgbmFtZXMgYW5kIGNoZWNrIGZvciBkdXBs
aWNhdGVzICovCi0gICAgZm9yICg7IGkgPCBhdHRJbmRleDsgaSArPSAyKSB7Ci0gICAgICBjb25z
dCBYTUxfQ2hhciAqcyA9IGFwcEF0dHNbaV07Ci0gICAgICBpZiAoc1stMV0gPT0gMikgeyAgLyog
cHJlZml4ZWQgKi8KLSAgICAgICAgQVRUUklCVVRFX0lEICppZDsKLSAgICAgICAgY29uc3QgQklO
RElORyAqYjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB1cmlIYXNoID0gaGFzaF9zZWNyZXRfc2Fs
dDsKLSAgICAgICAgKChYTUxfQ2hhciAqKXMpWy0xXSA9IDA7ICAvKiBjbGVhciBmbGFnICovCi0g
ICAgICAgIGlkID0gKEFUVFJJQlVURV9JRCAqKWxvb2t1cChwYXJzZXIsICZkdGQtPmF0dHJpYnV0
ZUlkcywgcywgMCk7Ci0gICAgICAgIGIgPSBpZC0+cHJlZml4LT5iaW5kaW5nOwotICAgICAgICBp
ZiAoIWIpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWDsKLQotICAg
ICAgICAvKiBhcyB3ZSBleHBhbmQgdGhlIG5hbWUgd2UgYWxzbyBjYWxjdWxhdGUgaXRzIGhhc2gg
dmFsdWUgKi8KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGItPnVyaUxlbjsgaisrKSB7Ci0gICAg
ICAgICAgY29uc3QgWE1MX0NoYXIgYyA9IGItPnVyaVtqXTsKLSAgICAgICAgICBpZiAoIXBvb2xB
cHBlbmRDaGFyKCZ0ZW1wUG9vbCwgYykpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKLSAgICAgICAgICB1cmlIYXNoID0gQ0hBUl9IQVNIKHVyaUhhc2gsIGMpOwotICAg
ICAgICB9Ci0gICAgICAgIHdoaWxlICgqcysrICE9IFhNTF9UKEFTQ0lJX0NPTE9OKSkKLSAgICAg
ICAgICA7Ci0gICAgICAgIGRvIHsgIC8qIGNvcGllcyBudWxsIHRlcm1pbmF0b3IgKi8KLSAgICAg
ICAgICBjb25zdCBYTUxfQ2hhciBjID0gKnM7Ci0gICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hh
cigmdGVtcFBvb2wsICpzKSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZ
OwotICAgICAgICAgIHVyaUhhc2ggPSBDSEFSX0hBU0godXJpSGFzaCwgYyk7Ci0gICAgICAgIH0g
d2hpbGUgKCpzKyspOwotCi0gICAgICAgIHsgLyogQ2hlY2sgaGFzaCB0YWJsZSBmb3IgZHVwbGlj
YXRlIG9mIGV4cGFuZGVkIG5hbWUgKHVyaU5hbWUpLgotICAgICAgICAgICAgIERlcml2ZWQgZnJv
bSBjb2RlIGluIGxvb2t1cChwYXJzZXIsIEhBU0hfVEFCTEUgKnRhYmxlLCAuLi4pLgotICAgICAg
ICAgICovCi0gICAgICAgICAgdW5zaWduZWQgY2hhciBzdGVwID0gMDsKLSAgICAgICAgICB1bnNp
Z25lZCBsb25nIG1hc2sgPSBuc0F0dHNTaXplIC0gMTsKLSAgICAgICAgICBqID0gdXJpSGFzaCAm
IG1hc2s7ICAvKiBpbmRleCBpbnRvIGhhc2ggdGFibGUgKi8KLSAgICAgICAgICB3aGlsZSAobnNB
dHRzW2pdLnZlcnNpb24gPT0gdmVyc2lvbikgewotICAgICAgICAgICAgLyogZm9yIHNwZWVkIHdl
IGNvbXBhcmUgc3RvcmVkIGhhc2ggdmFsdWVzIGZpcnN0ICovCi0gICAgICAgICAgICBpZiAodXJp
SGFzaCA9PSBuc0F0dHNbal0uaGFzaCkgewotICAgICAgICAgICAgICBjb25zdCBYTUxfQ2hhciAq
czEgPSBwb29sU3RhcnQoJnRlbXBQb29sKTsKLSAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIg
KnMyID0gbnNBdHRzW2pdLnVyaU5hbWU7Ci0gICAgICAgICAgICAgIC8qIHMxIGlzIG51bGwgdGVy
bWluYXRlZCwgYnV0IG5vdCBzMiAqLwotICAgICAgICAgICAgICBmb3IgKDsgKnMxID09ICpzMiAm
JiAqczEgIT0gMDsgczErKywgczIrKyk7Ci0gICAgICAgICAgICAgIGlmICgqczEgPT0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0RVUExJQ0FURV9BVFRSSUJVVEU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXN0ZXApCi0gICAgICAgICAgICAgIHN0ZXAgPSBQ
Uk9CRV9TVEVQKHVyaUhhc2gsIG1hc2ssIG5zQXR0c1Bvd2VyKTsKLSAgICAgICAgICAgIGogPCBz
dGVwID8gKGogKz0gbnNBdHRzU2l6ZSAtIHN0ZXApIDogKGogLT0gc3RlcCk7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5zX3RyaXBsZXRzKSB7ICAvKiBhcHBlbmQgbmFt
ZXNwYWNlIHNlcGFyYXRvciBhbmQgcHJlZml4ICovCi0gICAgICAgICAgdGVtcFBvb2wucHRyWy0x
XSA9IG5hbWVzcGFjZVNlcGFyYXRvcjsKLSAgICAgICAgICBzID0gYi0+cHJlZml4LT5uYW1lOwot
ICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29s
LCAqcykpCi0gICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAg
ICAgIH0gd2hpbGUgKCpzKyspOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogc3RvcmUgZXhwYW5k
ZWQgbmFtZSBpbiBhdHRyaWJ1dGUgbGlzdCAqLwotICAgICAgICBzID0gcG9vbFN0YXJ0KCZ0ZW1w
UG9vbCk7Ci0gICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAgYXBwQXR0c1tp
XSA9IHM7Ci0KLSAgICAgICAgLyogZmlsbCBlbXB0eSBzbG90IHdpdGggbmV3IHZlcnNpb24sIHVy
aU5hbWUgYW5kIGhhc2ggdmFsdWUgKi8KLSAgICAgICAgbnNBdHRzW2pdLnZlcnNpb24gPSB2ZXJz
aW9uOwotICAgICAgICBuc0F0dHNbal0uaGFzaCA9IHVyaUhhc2g7Ci0gICAgICAgIG5zQXR0c1tq
XS51cmlOYW1lID0gczsKLQotICAgICAgICBpZiAoIS0tblByZWZpeGVzKSB7Ci0gICAgICAgICAg
aSArPSAyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNl
ICAvKiBub3QgcHJlZml4ZWQgKi8KLSAgICAgICAgKChYTUxfQ2hhciAqKXMpWy0xXSA9IDA7ICAv
KiBjbGVhciBmbGFnICovCi0gICAgfQotICB9Ci0gIC8qIGNsZWFyIGZsYWdzIGZvciB0aGUgcmVt
YWluaW5nIGF0dHJpYnV0ZXMgKi8KLSAgZm9yICg7IGkgPCBhdHRJbmRleDsgaSArPSAyKQotICAg
ICgoWE1MX0NoYXIgKikoYXBwQXR0c1tpXSkpWy0xXSA9IDA7Ci0gIGZvciAoYmluZGluZyA9ICpi
aW5kaW5nc1B0cjsgYmluZGluZzsgYmluZGluZyA9IGJpbmRpbmctPm5leHRUYWdCaW5kaW5nKQot
ICAgIGJpbmRpbmctPmF0dElkLT5uYW1lWy0xXSA9IDA7Ci0KLSAgaWYgKCFucykKLSAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7Ci0KLSAgLyogZXhwYW5kIHRoZSBlbGVtZW50IHR5cGUgbmFtZSAq
LwotICBpZiAoZWxlbWVudFR5cGUtPnByZWZpeCkgewotICAgIGJpbmRpbmcgPSBlbGVtZW50VHlw
ZS0+cHJlZml4LT5iaW5kaW5nOwotICAgIGlmICghYmluZGluZykKLSAgICAgIHJldHVybiBYTUxf
RVJST1JfVU5CT1VORF9QUkVGSVg7Ci0gICAgbG9jYWxQYXJ0ID0gdGFnTmFtZVB0ci0+c3RyOwot
ICAgIHdoaWxlICgqbG9jYWxQYXJ0KysgIT0gWE1MX1QoQVNDSUlfQ09MT04pKQotICAgICAgOwot
ICB9Ci0gIGVsc2UgaWYgKGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nKSB7Ci0gICAgYmluZGlu
ZyA9IGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nOwotICAgIGxvY2FsUGFydCA9IHRhZ05hbWVQ
dHItPnN0cjsKLSAgfQotICBlbHNlCi0gICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICBwcmVm
aXhMZW4gPSAwOwotICBpZiAobnNfdHJpcGxldHMgJiYgYmluZGluZy0+cHJlZml4LT5uYW1lKSB7
Ci0gICAgZm9yICg7IGJpbmRpbmctPnByZWZpeC0+bmFtZVtwcmVmaXhMZW4rK107KQotICAgICAg
OyAgLyogcHJlZml4TGVuIGluY2x1ZGVzIG51bGwgdGVybWluYXRvciAqLwotICB9Ci0gIHRhZ05h
bWVQdHItPmxvY2FsUGFydCA9IGxvY2FsUGFydDsKLSAgdGFnTmFtZVB0ci0+dXJpTGVuID0gYmlu
ZGluZy0+dXJpTGVuOwotICB0YWdOYW1lUHRyLT5wcmVmaXggPSBiaW5kaW5nLT5wcmVmaXgtPm5h
bWU7Ci0gIHRhZ05hbWVQdHItPnByZWZpeExlbiA9IHByZWZpeExlbjsKLSAgZm9yIChpID0gMDsg
bG9jYWxQYXJ0W2krK107KQotICAgIDsgIC8qIGkgaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdG9yICov
Ci0gIG4gPSBpICsgYmluZGluZy0+dXJpTGVuICsgcHJlZml4TGVuOwotICBpZiAobiA+IGJpbmRp
bmctPnVyaUFsbG9jKSB7Ci0gICAgVEFHICpwOwotICAgIHVyaSA9IChYTUxfQ2hhciAqKU1BTExP
QygobiArIEVYUEFORF9TUEFSRSkgKiBzaXplb2YoWE1MX0NoYXIpKTsKLSAgICBpZiAoIXVyaSkK
LSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgIGJpbmRpbmctPnVyaUFsbG9j
ID0gbiArIEVYUEFORF9TUEFSRTsKLSAgICBtZW1jcHkodXJpLCBiaW5kaW5nLT51cmksIGJpbmRp
bmctPnVyaUxlbiAqIHNpemVvZihYTUxfQ2hhcikpOwotICAgIGZvciAocCA9IHRhZ1N0YWNrOyBw
OyBwID0gcC0+cGFyZW50KQotICAgICAgaWYgKHAtPm5hbWUuc3RyID09IGJpbmRpbmctPnVyaSkK
LSAgICAgICAgcC0+bmFtZS5zdHIgPSB1cmk7Ci0gICAgRlJFRShiaW5kaW5nLT51cmkpOwotICAg
IGJpbmRpbmctPnVyaSA9IHVyaTsKLSAgfQotICAvKiBpZiBuYW1lc3BhY2VTZXBhcmF0b3IgIT0g
J1wwJyB0aGVuIHVyaSBpbmNsdWRlcyBpdCBhbHJlYWR5ICovCi0gIHVyaSA9IGJpbmRpbmctPnVy
aSArIGJpbmRpbmctPnVyaUxlbjsKLSAgbWVtY3B5KHVyaSwgbG9jYWxQYXJ0LCBpICogc2l6ZW9m
KFhNTF9DaGFyKSk7Ci0gIC8qIHdlIGFsd2F5cyBoYXZlIGEgbmFtZXNwYWNlIHNlcGFyYXRvciBi
ZXR3ZWVuIGxvY2FsUGFydCBhbmQgcHJlZml4ICovCi0gIGlmIChwcmVmaXhMZW4pIHsKLSAgICB1
cmkgKz0gaSAtIDE7Ci0gICAgKnVyaSA9IG5hbWVzcGFjZVNlcGFyYXRvcjsgIC8qIHJlcGxhY2Ug
bnVsbCB0ZXJtaW5hdG9yICovCi0gICAgbWVtY3B5KHVyaSArIDEsIGJpbmRpbmctPnByZWZpeC0+
bmFtZSwgcHJlZml4TGVuICogc2l6ZW9mKFhNTF9DaGFyKSk7Ci0gIH0KLSAgdGFnTmFtZVB0ci0+
c3RyID0gYmluZGluZy0+dXJpOwotICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci19Ci0KLS8qIGFk
ZEJpbmRpbmcoKSBvdmVyd3JpdGVzIHRoZSB2YWx1ZSBvZiBwcmVmaXgtPmJpbmRpbmcgd2l0aG91
dCBjaGVja2luZy4KLSAgIFRoZXJlZm9yZSBvbmUgbXVzdCBrZWVwIHRyYWNrIG9mIHRoZSBvbGQg
dmFsdWUgb3V0c2lkZSBvZiBhZGRCaW5kaW5nKCkuCi0qLwotc3RhdGljIGVudW0gWE1MX0Vycm9y
Ci1hZGRCaW5kaW5nKFhNTF9QYXJzZXIgcGFyc2VyLCBQUkVGSVggKnByZWZpeCwgY29uc3QgQVRU
UklCVVRFX0lEICphdHRJZCwKLSAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnVyaSwgQklORElO
RyAqKmJpbmRpbmdzUHRyKQotewotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgeG1sTmFtZXNwYWNl
W10gPSB7Ci0gICAgQVNDSUlfaCwgQVNDSUlfdCwgQVNDSUlfdCwgQVNDSUlfcCwgQVNDSUlfQ09M
T04sIEFTQ0lJX1NMQVNILCBBU0NJSV9TTEFTSCwKLSAgICBBU0NJSV93LCBBU0NJSV93LCBBU0NJ
SV93LCBBU0NJSV9QRVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwKLSAgICBB
U0NJSV9vLCBBU0NJSV9yLCBBU0NJSV9nLCBBU0NJSV9TTEFTSCwgQVNDSUlfWCwgQVNDSUlfTSwg
QVNDSUlfTCwKLSAgICBBU0NJSV9TTEFTSCwgQVNDSUlfMSwgQVNDSUlfOSwgQVNDSUlfOSwgQVND
SUlfOCwgQVNDSUlfU0xBU0gsCi0gICAgQVNDSUlfbiwgQVNDSUlfYSwgQVNDSUlfbSwgQVNDSUlf
ZSwgQVNDSUlfcywgQVNDSUlfcCwgQVNDSUlfYSwgQVNDSUlfYywKLSAgICBBU0NJSV9lLCAnXDAn
Ci0gIH07Ci0gIHN0YXRpYyBjb25zdCBpbnQgeG1sTGVuID0KLSAgICAoaW50KXNpemVvZih4bWxO
YW1lc3BhY2UpL3NpemVvZihYTUxfQ2hhcikgLSAxOwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIg
eG1sbnNOYW1lc3BhY2VbXSA9IHsKLSAgICBBU0NJSV9oLCBBU0NJSV90LCBBU0NJSV90LCBBU0NJ
SV9wLCBBU0NJSV9DT0xPTiwgQVNDSUlfU0xBU0gsIEFTQ0lJX1NMQVNILAotICAgIEFTQ0lJX3cs
IEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX1BFUklPRCwgQVNDSUlfdywgQVNDSUlfMywgQVNDSUlf
UEVSSU9ELAotICAgIEFTQ0lJX28sIEFTQ0lJX3IsIEFTQ0lJX2csIEFTQ0lJX1NMQVNILCBBU0NJ
SV8yLCBBU0NJSV8wLCBBU0NJSV8wLAotICAgIEFTQ0lJXzAsIEFTQ0lJX1NMQVNILCBBU0NJSV94
LCBBU0NJSV9tLCBBU0NJSV9sLCBBU0NJSV9uLCBBU0NJSV9zLAotICAgIEFTQ0lJX1NMQVNILCAn
XDAnCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBpbnQgeG1sbnNMZW4gPQotICAgIChpbnQpc2l6ZW9m
KHhtbG5zTmFtZXNwYWNlKS9zaXplb2YoWE1MX0NoYXIpIC0gMTsKLQotICBYTUxfQm9vbCBtdXN0
QmVYTUwgPSBYTUxfRkFMU0U7Ci0gIFhNTF9Cb29sIGlzWE1MID0gWE1MX1RSVUU7Ci0gIFhNTF9C
b29sIGlzWE1MTlMgPSBYTUxfVFJVRTsKLQotICBCSU5ESU5HICpiOwotICBpbnQgbGVuOwotCi0g
IC8qIGVtcHR5IFVSSSBpcyBvbmx5IHZhbGlkIGZvciBkZWZhdWx0IG5hbWVzcGFjZSBwZXIgWE1M
IE5TIDEuMCAobm90IDEuMSkgKi8KLSAgaWYgKCp1cmkgPT0gWE1MX1QoJ1wwJykgJiYgcHJlZml4
LT5uYW1lKQotICAgIHJldHVybiBYTUxfRVJST1JfVU5ERUNMQVJJTkdfUFJFRklYOwotCi0gIGlm
IChwcmVmaXgtPm5hbWUKLSAgICAgICYmIHByZWZpeC0+bmFtZVswXSA9PSBYTUxfVChBU0NJSV94
KQotICAgICAgJiYgcHJlZml4LT5uYW1lWzFdID09IFhNTF9UKEFTQ0lJX20pCi0gICAgICAmJiBw
cmVmaXgtPm5hbWVbMl0gPT0gWE1MX1QoQVNDSUlfbCkpIHsKLQotICAgIC8qIE5vdCBhbGxvd2Vk
IHRvIGJpbmQgeG1sbnMgKi8KLSAgICBpZiAocHJlZml4LT5uYW1lWzNdID09IFhNTF9UKEFTQ0lJ
X24pCi0gICAgICAgICYmIHByZWZpeC0+bmFtZVs0XSA9PSBYTUxfVChBU0NJSV9zKQotICAgICAg
ICAmJiBwcmVmaXgtPm5hbWVbNV0gPT0gWE1MX1QoJ1wwJykpCi0gICAgICByZXR1cm4gWE1MX0VS
Uk9SX1JFU0VSVkVEX1BSRUZJWF9YTUxOUzsKLQotICAgIGlmIChwcmVmaXgtPm5hbWVbM10gPT0g
WE1MX1QoJ1wwJykpCi0gICAgICBtdXN0QmVYTUwgPSBYTUxfVFJVRTsKLSAgfQotCi0gIGZvciAo
bGVuID0gMDsgdXJpW2xlbl07IGxlbisrKSB7Ci0gICAgaWYgKGlzWE1MICYmIChsZW4gPiB4bWxM
ZW4gfHwgdXJpW2xlbl0gIT0geG1sTmFtZXNwYWNlW2xlbl0pKQotICAgICAgaXNYTUwgPSBYTUxf
RkFMU0U7Ci0KLSAgICBpZiAoIW11c3RCZVhNTCAmJiBpc1hNTE5TCi0gICAgICAgICYmIChsZW4g
PiB4bWxuc0xlbiB8fCB1cmlbbGVuXSAhPSB4bWxuc05hbWVzcGFjZVtsZW5dKSkKLSAgICAgIGlz
WE1MTlMgPSBYTUxfRkFMU0U7Ci0gIH0KLSAgaXNYTUwgPSBpc1hNTCAmJiBsZW4gPT0geG1sTGVu
OwotICBpc1hNTE5TID0gaXNYTUxOUyAmJiBsZW4gPT0geG1sbnNMZW47Ci0KLSAgaWYgKG11c3RC
ZVhNTCAhPSBpc1hNTCkKLSAgICByZXR1cm4gbXVzdEJlWE1MID8gWE1MX0VSUk9SX1JFU0VSVkVE
X1BSRUZJWF9YTUwKLSAgICAgICAgICAgICAgICAgICAgIDogWE1MX0VSUk9SX1JFU0VSVkVEX05B
TUVTUEFDRV9VUkk7Ci0KLSAgaWYgKGlzWE1MTlMpCi0gICAgcmV0dXJuIFhNTF9FUlJPUl9SRVNF
UlZFRF9OQU1FU1BBQ0VfVVJJOwotCi0gIGlmIChuYW1lc3BhY2VTZXBhcmF0b3IpCi0gICAgbGVu
Kys7Ci0gIGlmIChmcmVlQmluZGluZ0xpc3QpIHsKLSAgICBiID0gZnJlZUJpbmRpbmdMaXN0Owot
ICAgIGlmIChsZW4gPiBiLT51cmlBbGxvYykgewotICAgICAgWE1MX0NoYXIgKnRlbXAgPSAoWE1M
X0NoYXIgKilSRUFMTE9DKGItPnVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KFhNTF9DaGFyKSAqIChsZW4gKyBFWFBBTkRfU1BBUkUpKTsKLSAgICAgIGlmICh0ZW1wID09IE5V
TEwpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYi0+dXJpID0g
dGVtcDsKLSAgICAgIGItPnVyaUFsbG9jID0gbGVuICsgRVhQQU5EX1NQQVJFOwotICAgIH0KLSAg
ICBmcmVlQmluZGluZ0xpc3QgPSBiLT5uZXh0VGFnQmluZGluZzsKLSAgfQotICBlbHNlIHsKLSAg
ICBiID0gKEJJTkRJTkcgKilNQUxMT0Moc2l6ZW9mKEJJTkRJTkcpKTsKLSAgICBpZiAoIWIpCi0g
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICBiLT51cmkgPSAoWE1MX0NoYXIg
KilNQUxMT0Moc2l6ZW9mKFhNTF9DaGFyKSAqIChsZW4gKyBFWFBBTkRfU1BBUkUpKTsKLSAgICBp
ZiAoIWItPnVyaSkgewotICAgICAgRlJFRShiKTsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOwotICAgIH0KLSAgICBiLT51cmlBbGxvYyA9IGxlbiArIEVYUEFORF9TUEFSRTsKLSAg
fQotICBiLT51cmlMZW4gPSBsZW47Ci0gIG1lbWNweShiLT51cmksIHVyaSwgbGVuICogc2l6ZW9m
KFhNTF9DaGFyKSk7Ci0gIGlmIChuYW1lc3BhY2VTZXBhcmF0b3IpCi0gICAgYi0+dXJpW2xlbiAt
IDFdID0gbmFtZXNwYWNlU2VwYXJhdG9yOwotICBiLT5wcmVmaXggPSBwcmVmaXg7Ci0gIGItPmF0
dElkID0gYXR0SWQ7Ci0gIGItPnByZXZQcmVmaXhCaW5kaW5nID0gcHJlZml4LT5iaW5kaW5nOwot
ICAvKiBOVUxMIGJpbmRpbmcgd2hlbiBkZWZhdWx0IG5hbWVzcGFjZSB1bmRlY2xhcmVkICovCi0g
IGlmICgqdXJpID09IFhNTF9UKCdcMCcpICYmIHByZWZpeCA9PSAmX2R0ZC0+ZGVmYXVsdFByZWZp
eCkKLSAgICBwcmVmaXgtPmJpbmRpbmcgPSBOVUxMOwotICBlbHNlCi0gICAgcHJlZml4LT5iaW5k
aW5nID0gYjsKLSAgYi0+bmV4dFRhZ0JpbmRpbmcgPSAqYmluZGluZ3NQdHI7Ci0gICpiaW5kaW5n
c1B0ciA9IGI7Ci0gIC8qIGlmIGF0dElkID09IE5VTEwgdGhlbiB3ZSBhcmUgbm90IHN0YXJ0aW5n
IGEgbmFtZXNwYWNlIHNjb3BlICovCi0gIGlmIChhdHRJZCAmJiBzdGFydE5hbWVzcGFjZURlY2xI
YW5kbGVyKQotICAgIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIoaGFuZGxlckFyZywgcHJlZml4
LT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LT5iaW5kaW5nID8g
dXJpIDogMCk7Ci0gIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLX0KLQotLyogVGhlIGlkZWEgaGVy
ZSBpcyB0byBhdm9pZCB1c2luZyBzdGFjayBmb3IgZWFjaCBDREFUQSBzZWN0aW9uIHdoZW4KLSAg
IHRoZSB3aG9sZSBmaWxlIGlzIHBhcnNlZCB3aXRoIG9uZSBjYWxsLgotKi8KLXN0YXRpYyBlbnVt
IFhNTF9FcnJvciBQVFJDQUxMCi1jZGF0YVNlY3Rpb25Qcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJz
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiplbmRQdHIpCi17Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGRvQ2RhdGFTZWN0
aW9uKHBhcnNlciwgZW5jb2RpbmcsICZzdGFydCwgZW5kLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmRQdHIsIChYTUxfQm9vbCkhcHNfZmluYWxCdWZmZXIpOwot
ICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIGlm
IChzdGFydCkgewotICAgIGlmIChwYXJlbnRQYXJzZXIpIHsgIC8qIHdlIGFyZSBwYXJzaW5nIGFu
IGV4dGVybmFsIGVudGl0eSAqLwotICAgICAgcHJvY2Vzc29yID0gZXh0ZXJuYWxFbnRpdHlDb250
ZW50UHJvY2Vzc29yOwotICAgICAgcmV0dXJuIGV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3Nv
cihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAg
cHJvY2Vzc29yID0gY29udGVudFByb2Nlc3NvcjsKLSAgICAgIHJldHVybiBjb250ZW50UHJvY2Vz
c29yKHBhcnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLyogc3RhcnRQdHIgZ2V0cyBzZXQgdG8gbm9uLW51bGwgaWYgdGhlIHNlY3Rp
b24gaXMgY2xvc2VkLCBhbmQgdG8gbnVsbCBpZgotICAgdGhlIHNlY3Rpb24gaXMgbm90IHlldCBj
bG9zZWQuCi0qLwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb0NkYXRhU2VjdGlvbihYTUxfUGFy
c2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqc3RhcnRQdHIsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFy
ICplbmQsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0ciwKLSAgICAgICAgICAg
ICAgIFhNTF9Cb29sIGhhdmVNb3JlKQotewotICBjb25zdCBjaGFyICpzID0gKnN0YXJ0UHRyOwot
ICBjb25zdCBjaGFyICoqZXZlbnRQUDsKLSAgY29uc3QgY2hhciAqKmV2ZW50RW5kUFA7Ci0gIGlm
IChlbmMgPT0gZW5jb2RpbmcpIHsKLSAgICBldmVudFBQID0gJmV2ZW50UHRyOwotICAgICpldmVu
dFBQID0gczsKLSAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOwotICB9Ci0gIGVsc2Ugewot
ICAgIGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsK
LSAgICBldmVudEVuZFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVu
ZFB0cik7Ci0gIH0KLSAgKmV2ZW50UFAgPSBzOwotICAqc3RhcnRQdHIgPSBOVUxMOwotCi0gIGZv
ciAoOzspIHsKLSAgICBjb25zdCBjaGFyICpuZXh0OwotICAgIGludCB0b2sgPSBYbWxDZGF0YVNl
Y3Rpb25Ub2soZW5jLCBzLCBlbmQsICZuZXh0KTsKLSAgICAqZXZlbnRFbmRQUCA9IG5leHQ7Ci0g
ICAgc3dpdGNoICh0b2spIHsKLSAgICBjYXNlIFhNTF9UT0tfQ0RBVEFfU0VDVF9DTE9TRToKLSAg
ICAgIGlmIChlbmRDZGF0YVNlY3Rpb25IYW5kbGVyKQotICAgICAgICBlbmRDZGF0YVNlY3Rpb25I
YW5kbGVyKGhhbmRsZXJBcmcpOwotI2lmIDAKLSAgICAgIC8qIHNlZSBjb21tZW50IHVuZGVyIFhN
TF9UT0tfQ0RBVEFfU0VDVF9PUEVOICovCi0gICAgICBlbHNlIGlmIChjaGFyYWN0ZXJEYXRhSGFu
ZGxlcikKLSAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1Ziwg
MCk7Ci0jZW5kaWYKLSAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICByZXBv
cnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICpzdGFydFB0ciA9IG5leHQ7
Ci0gICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICBpZiAocHNfcGFyc2luZyA9PSBYTUxfRklO
SVNIRUQpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIGNhc2UgWE1MX1RPS19EQVRBX05FV0xJ
TkU6Ci0gICAgICBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpIHsKLSAgICAgICAgWE1MX0NoYXIg
YyA9IDB4QTsKLSAgICAgICAgY2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgJmMsIDEp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAgIHJlcG9y
dERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBY
TUxfVE9LX0RBVEFfQ0hBUlM6Ci0gICAgICB7Ci0gICAgICAgIFhNTF9DaGFyYWN0ZXJEYXRhSGFu
ZGxlciBjaGFyRGF0YUhhbmRsZXIgPSBjaGFyYWN0ZXJEYXRhSGFuZGxlcjsKLSAgICAgICAgaWYg
KGNoYXJEYXRhSGFuZGxlcikgewotICAgICAgICAgIGlmIChNVVNUX0NPTlZFUlQoZW5jLCBzKSkg
ewotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICBJQ0hBUiAqZGF0YVB0ciA9
IChJQ0hBUiAqKWRhdGFCdWY7Ci0gICAgICAgICAgICAgIFhtbENvbnZlcnQoZW5jLCAmcywgbmV4
dCwgJmRhdGFQdHIsIChJQ0hBUiAqKWRhdGFCdWZFbmQpOwotICAgICAgICAgICAgICAqZXZlbnRF
bmRQUCA9IG5leHQ7Ci0gICAgICAgICAgICAgIGNoYXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCBk
YXRhQnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoZGF0YVB0ciAtIChJ
Q0hBUiAqKWRhdGFCdWYpKTsKLSAgICAgICAgICAgICAgaWYgKHMgPT0gbmV4dCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgKmV2ZW50UFAgPSBzOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjaGFyRGF0YUhhbmRs
ZXIoaGFuZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWE1MX0NoYXIgKilz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChYTUxfQ2hhciAqKW5leHQgLSAo
WE1MX0NoYXIgKilzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRs
ZXIpCi0gICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAg
ICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKLSAgICAgICpldmVu
dFBQID0gbmV4dDsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKLSAgICBj
YXNlIFhNTF9UT0tfUEFSVElBTF9DSEFSOgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAg
ICpuZXh0UHRyID0gczsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQot
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7Ci0gICAgY2FzZSBYTUxfVE9LX1BB
UlRJQUw6Ci0gICAgY2FzZSBYTUxfVE9LX05PTkU6Ci0gICAgICBpZiAoaGF2ZU1vcmUpIHsKLSAg
ICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX0NEQVRBX1NFQ1RJT047Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICpldmVudFBQID0gbmV4dDsKLSAgICAgIHJldHVybiBYTUxfRVJST1Jf
VU5FWFBFQ1RFRF9TVEFURTsKLSAgICB9Ci0KLSAgICAqZXZlbnRQUCA9IHMgPSBuZXh0OwotICAg
IHN3aXRjaCAocHNfcGFyc2luZykgewotICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAgICpu
ZXh0UHRyID0gbmV4dDsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhN
TF9GSU5JU0hFRDoKLSAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKLSAgICBkZWZhdWx0
OiA7Ci0gICAgfQotICB9Ci0gIC8qIG5vdCByZWFjaGVkICovCi19Ci0KLSNpZmRlZiBYTUxfRFRE
Ci0KLS8qIFRoZSBpZGVhIGhlcmUgaXMgdG8gYXZvaWQgdXNpbmcgc3RhY2sgZm9yIGVhY2ggSUdO
T1JFIHNlY3Rpb24gd2hlbgotICAgdGhlIHdob2xlIGZpbGUgaXMgcGFyc2VkIHdpdGggb25lIGNh
bGwuCi0qLwotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWlnbm9yZVNlY3Rpb25Qcm9j
ZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmRQdHIpCi17Ci0gIGVudW0gWE1MX0Vy
cm9yIHJlc3VsdCA9IGRvSWdub3JlU2VjdGlvbihwYXJzZXIsIGVuY29kaW5nLCAmc3RhcnQsIGVu
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFB0ciwgKFhN
TF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7Ci0gIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUp
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgaWYgKHN0YXJ0KSB7Ci0gICAgcHJvY2Vzc29yID0gcHJv
bG9nUHJvY2Vzc29yOwotICAgIHJldHVybiBwcm9sb2dQcm9jZXNzb3IocGFyc2VyLCBzdGFydCwg
ZW5kLCBlbmRQdHIpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIHN0YXJ0UHRyIGdl
dHMgc2V0IHRvIG5vbi1udWxsIGlzIHRoZSBzZWN0aW9uIGlzIGNsb3NlZCwgYW5kIHRvIG51bGwK
LSAgIGlmIHRoZSBzZWN0aW9uIGlzIG5vdCB5ZXQgY2xvc2VkLgotKi8KLXN0YXRpYyBlbnVtIFhN
TF9FcnJvcgotZG9JZ25vcmVTZWN0aW9uKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAg
ICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnN0
YXJ0UHRyLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqbmV4dFB0ciwKLSAgICAgICAgICAgICAgICBYTUxfQm9vbCBoYXZlTW9y
ZSkKLXsKLSAgY29uc3QgY2hhciAqbmV4dDsKLSAgaW50IHRvazsKLSAgY29uc3QgY2hhciAqcyA9
ICpzdGFydFB0cjsKLSAgY29uc3QgY2hhciAqKmV2ZW50UFA7Ci0gIGNvbnN0IGNoYXIgKipldmVu
dEVuZFBQOwotICBpZiAoZW5jID09IGVuY29kaW5nKSB7Ci0gICAgZXZlbnRQUCA9ICZldmVudFB0
cjsKLSAgICAqZXZlbnRQUCA9IHM7Ci0gICAgZXZlbnRFbmRQUCA9ICZldmVudEVuZFB0cjsKLSAg
fQotICBlbHNlIHsKLSAgICBldmVudFBQID0gJihvcGVuSW50ZXJuYWxFbnRpdGllcy0+aW50ZXJu
YWxFdmVudFB0cik7Ci0gICAgZXZlbnRFbmRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmlu
dGVybmFsRXZlbnRFbmRQdHIpOwotICB9Ci0gICpldmVudFBQID0gczsKLSAgKnN0YXJ0UHRyID0g
TlVMTDsKLSAgdG9rID0gWG1sSWdub3JlU2VjdGlvblRvayhlbmMsIHMsIGVuZCwgJm5leHQpOwot
ICAqZXZlbnRFbmRQUCA9IG5leHQ7Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19J
R05PUkVfU0VDVDoKLSAgICBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICByZXBvcnREZWZhdWx0
KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAqc3RhcnRQdHIgPSBuZXh0OwotICAgICpuZXh0
UHRyID0gbmV4dDsKLSAgICBpZiAocHNfcGFyc2luZyA9PSBYTUxfRklOSVNIRUQpCi0gICAgICBy
ZXR1cm4gWE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT05FOwotICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKLSAgICAqZXZlbnRQUCA9IG5leHQ7Ci0g
ICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICBjYXNlIFhNTF9UT0tfUEFSVElB
TF9DSEFSOgotICAgIGlmIChoYXZlTW9yZSkgewotICAgICAgKm5leHRQdHIgPSBzOwotICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0KLSAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJ
QUxfQ0hBUjsKLSAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gIGNhc2UgWE1MX1RPS19OT05FOgot
ICAgIGlmIChoYXZlTW9yZSkgewotICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT05FOwotICAgIH0KLSAgICByZXR1cm4gWE1MX0VSUk9SX1NZTlRBWDsgLyogWE1M
X0VSUk9SX1VOQ0xPU0VEX0lHTk9SRV9TRUNUSU9OICovCi0gIGRlZmF1bHQ6Ci0gICAgKmV2ZW50
UFAgPSBuZXh0OwotICAgIHJldHVybiBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURTsKLSAgfQot
ICAvKiBub3QgcmVhY2hlZCAqLwotfQotCi0jZW5kaWYgLyogWE1MX0RURCAqLwotCi1zdGF0aWMg
ZW51bSBYTUxfRXJyb3IKLWluaXRpYWxpemVFbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlcikKLXsK
LSAgY29uc3QgY2hhciAqczsKLSNpZmRlZiBYTUxfVU5JQ09ERQotICBjaGFyIGVuY29kaW5nQnVm
WzEyOF07Ci0gIGlmICghcHJvdG9jb2xFbmNvZGluZ05hbWUpCi0gICAgcyA9IE5VTEw7Ci0gIGVs
c2UgewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IHByb3RvY29sRW5jb2RpbmdOYW1lW2ld
OyBpKyspIHsKLSAgICAgIGlmIChpID09IHNpemVvZihlbmNvZGluZ0J1ZikgLSAxCi0gICAgICAg
ICAgfHwgKHByb3RvY29sRW5jb2RpbmdOYW1lW2ldICYgfjB4N2YpICE9IDApIHsKLSAgICAgICAg
ZW5jb2RpbmdCdWZbMF0gPSAnXDAnOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVu
Y29kaW5nQnVmW2ldID0gKGNoYXIpcHJvdG9jb2xFbmNvZGluZ05hbWVbaV07Ci0gICAgfQotICAg
IGVuY29kaW5nQnVmW2ldID0gJ1wwJzsKLSAgICBzID0gZW5jb2RpbmdCdWY7Ci0gIH0KLSNlbHNl
Ci0gIHMgPSBwcm90b2NvbEVuY29kaW5nTmFtZTsKLSNlbmRpZgotICBpZiAoKG5zID8gWG1sSW5p
dEVuY29kaW5nTlMgOiBYbWxJbml0RW5jb2RpbmcpKCZpbml0RW5jb2RpbmcsICZlbmNvZGluZywg
cykpCi0gICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICByZXR1cm4gaGFuZGxlVW5rbm93bkVu
Y29kaW5nKHBhcnNlciwgcHJvdG9jb2xFbmNvZGluZ05hbWUpOwotfQotCi1zdGF0aWMgZW51bSBY
TUxfRXJyb3IKLXByb2Nlc3NYbWxEZWNsKFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgaXNHZW5lcmFs
VGV4dEVudGl0eSwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKm5l
eHQpCi17Ci0gIGNvbnN0IGNoYXIgKmVuY29kaW5nTmFtZSA9IE5VTEw7Ci0gIGNvbnN0IFhNTF9D
aGFyICpzdG9yZWRFbmNOYW1lID0gTlVMTDsKLSAgY29uc3QgRU5DT0RJTkcgKm5ld0VuY29kaW5n
ID0gTlVMTDsKLSAgY29uc3QgY2hhciAqdmVyc2lvbiA9IE5VTEw7Ci0gIGNvbnN0IGNoYXIgKnZl
cnNpb25lbmQ7Ci0gIGNvbnN0IFhNTF9DaGFyICpzdG9yZWR2ZXJzaW9uID0gTlVMTDsKLSAgaW50
IHN0YW5kYWxvbmUgPSAtMTsKLSAgaWYgKCEobnMKLSAgICAgICAgPyBYbWxQYXJzZVhtbERlY2xO
UwotICAgICAgICA6IFhtbFBhcnNlWG1sRGVjbCkoaXNHZW5lcmFsVGV4dEVudGl0eSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZXZlbnRQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVyc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uZW5kLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmVuY29kaW5nTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZuZXdFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFuZGFsb25lKSkg
ewotICAgIGlmIChpc0dlbmVyYWxUZXh0RW50aXR5KQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9U
RVhUX0RFQ0w7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9YTUxfREVDTDsKLSAg
fQotICBpZiAoIWlzR2VuZXJhbFRleHRFbnRpdHkgJiYgc3RhbmRhbG9uZSA9PSAxKSB7Ci0gICAg
X2R0ZC0+c3RhbmRhbG9uZSA9IFhNTF9UUlVFOwotI2lmZGVmIFhNTF9EVEQKLSAgICBpZiAocGFy
YW1FbnRpdHlQYXJzaW5nID09IFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19VTkxFU1NfU1RBTkRB
TE9ORSkKLSAgICAgIHBhcmFtRW50aXR5UGFyc2luZyA9IFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lO
R19ORVZFUjsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gIH0KLSAgaWYgKHhtbERlY2xIYW5kbGVy
KSB7Ci0gICAgaWYgKGVuY29kaW5nTmFtZSAhPSBOVUxMKSB7Ci0gICAgICBzdG9yZWRFbmNOYW1l
ID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wMlBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmNvZGluZ05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuY29kaW5nTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFht
bE5hbWVMZW5ndGgoZW5jb2RpbmcsIGVuY29kaW5nTmFtZSkpOwotICAgICAgaWYgKCFzdG9yZWRF
bmNOYW1lKQotICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAg
IHBvb2xGaW5pc2goJnRlbXAyUG9vbCk7Ci0gICAgfQotICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAg
ICBzdG9yZWR2ZXJzaW9uID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wMlBvb2wsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uZW5kIC0gZW5jb2RpbmctPm1pbkJ5dGVzUGVyQ2hhcik7Ci0gICAg
ICBpZiAoIXN0b3JlZHZlcnNpb24pCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZ
OwotICAgIH0KLSAgICB4bWxEZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBzdG9yZWR2ZXJzaW9uLCBz
dG9yZWRFbmNOYW1lLCBzdGFuZGFsb25lKTsKLSAgfQotICBlbHNlIGlmIChkZWZhdWx0SGFuZGxl
cikKLSAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jb2RpbmcsIHMsIG5leHQpOwotICBpZiAo
cHJvdG9jb2xFbmNvZGluZ05hbWUgPT0gTlVMTCkgewotICAgIGlmIChuZXdFbmNvZGluZykgewot
ICAgICAgaWYgKG5ld0VuY29kaW5nLT5taW5CeXRlc1BlckNoYXIgIT0gZW5jb2RpbmctPm1pbkJ5
dGVzUGVyQ2hhcikgewotICAgICAgICBldmVudFB0ciA9IGVuY29kaW5nTmFtZTsKLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9JTkNPUlJFQ1RfRU5DT0RJTkc7Ci0gICAgICB9Ci0gICAgICBlbmNv
ZGluZyA9IG5ld0VuY29kaW5nOwotICAgIH0KLSAgICBlbHNlIGlmIChlbmNvZGluZ05hbWUpIHsK
LSAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICAgIGlmICghc3RvcmVkRW5jTmFtZSkg
ewotICAgICAgICBzdG9yZWRFbmNOYW1lID0gcG9vbFN0b3JlU3RyaW5nKAotICAgICAgICAgICZ0
ZW1wMlBvb2wsIGVuY29kaW5nLCBlbmNvZGluZ05hbWUsCi0gICAgICAgICAgZW5jb2RpbmdOYW1l
ICsgWG1sTmFtZUxlbmd0aChlbmNvZGluZywgZW5jb2RpbmdOYW1lKSk7Ci0gICAgICAgIGlmICgh
c3RvcmVkRW5jTmFtZSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAg
ICAgIH0KLSAgICAgIHJlc3VsdCA9IGhhbmRsZVVua25vd25FbmNvZGluZyhwYXJzZXIsIHN0b3Jl
ZEVuY05hbWUpOwotICAgICAgcG9vbENsZWFyKCZ0ZW1wMlBvb2wpOwotICAgICAgaWYgKHJlc3Vs
dCA9PSBYTUxfRVJST1JfVU5LTk9XTl9FTkNPRElORykKLSAgICAgICAgZXZlbnRQdHIgPSBlbmNv
ZGluZ05hbWU7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfQotCi0gIGlmIChzdG9y
ZWRFbmNOYW1lIHx8IHN0b3JlZHZlcnNpb24pCi0gICAgcG9vbENsZWFyKCZ0ZW1wMlBvb2wpOwot
Ci0gIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1o
YW5kbGVVbmtub3duRW5jb2RpbmcoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IFhNTF9DaGFyICpl
bmNvZGluZ05hbWUpCi17Ci0gIGlmICh1bmtub3duRW5jb2RpbmdIYW5kbGVyKSB7Ci0gICAgWE1M
X0VuY29kaW5nIGluZm87Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsr
KQotICAgICAgaW5mby5tYXBbaV0gPSAtMTsKLSAgICBpbmZvLmNvbnZlcnQgPSBOVUxMOwotICAg
IGluZm8uZGF0YSA9IE5VTEw7Ci0gICAgaW5mby5yZWxlYXNlID0gTlVMTDsKLSAgICBpZiAodW5r
bm93bkVuY29kaW5nSGFuZGxlcih1bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YSwgZW5jb2RpbmdO
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmZvKSkgewotICAgICAgRU5D
T0RJTkcgKmVuYzsKLSAgICAgIHVua25vd25FbmNvZGluZ01lbSA9IE1BTExPQyhYbWxTaXplT2ZV
bmtub3duRW5jb2RpbmcoKSk7Ci0gICAgICBpZiAoIXVua25vd25FbmNvZGluZ01lbSkgewotICAg
ICAgICBpZiAoaW5mby5yZWxlYXNlKQotICAgICAgICAgIGluZm8ucmVsZWFzZShpbmZvLmRhdGEp
OwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIH0KLSAgICAgIGVu
YyA9IChucwotICAgICAgICAgICAgID8gWG1sSW5pdFVua25vd25FbmNvZGluZ05TCi0gICAgICAg
ICAgICAgOiBYbWxJbml0VW5rbm93bkVuY29kaW5nKSh1bmtub3duRW5jb2RpbmdNZW0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm1hcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uY29udmVydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGF0YSk7Ci0gICAgICBpZiAoZW5jKSB7Ci0g
ICAgICAgIHVua25vd25FbmNvZGluZ0RhdGEgPSBpbmZvLmRhdGE7Ci0gICAgICAgIHVua25vd25F
bmNvZGluZ1JlbGVhc2UgPSBpbmZvLnJlbGVhc2U7Ci0gICAgICAgIGVuY29kaW5nID0gZW5jOwot
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChp
bmZvLnJlbGVhc2UgIT0gTlVMTCkKLSAgICAgIGluZm8ucmVsZWFzZShpbmZvLmRhdGEpOwotICB9
Ci0gIHJldHVybiBYTUxfRVJST1JfVU5LTk9XTl9FTkNPRElORzsKLX0KLQotc3RhdGljIGVudW0g
WE1MX0Vycm9yIFBUUkNBTEwKLXByb2xvZ0luaXRQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQ
dHIpCi17Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGluaXRpYWxpemVFbmNvZGluZyhwYXJz
ZXIpOwotICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7
Ci0gIHByb2Nlc3NvciA9IHByb2xvZ1Byb2Nlc3NvcjsKLSAgcmV0dXJuIHByb2xvZ1Byb2Nlc3Nv
cihwYXJzZXIsIHMsIGVuZCwgbmV4dFB0cik7Ci19Ci0KLSNpZmRlZiBYTUxfRFRECi0KLXN0YXRp
YyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1leHRlcm5hbFBhckVudEluaXRQcm9jZXNzb3IoWE1M
X1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCi17Ci0gIGVudW0gWE1M
X0Vycm9yIHJlc3VsdCA9IGluaXRpYWxpemVFbmNvZGluZyhwYXJzZXIpOwotICBpZiAocmVzdWx0
ICE9IFhNTF9FUlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogd2Uga25vdyBu
b3cgdGhhdCBYTUxfUGFyc2UoQnVmZmVyKSBoYXMgYmVlbiBjYWxsZWQsCi0gICAgIHNvIHdlIGNv
bnNpZGVyIHRoZSBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXR5IHJlYWQgKi8KLSAgX2R0ZC0+cGFy
YW1FbnRpdHlSZWFkID0gWE1MX1RSVUU7Ci0KLSAgaWYgKHByb2xvZ1N0YXRlLmluRW50aXR5VmFs
dWUpIHsKLSAgICBwcm9jZXNzb3IgPSBlbnRpdHlWYWx1ZUluaXRQcm9jZXNzb3I7Ci0gICAgcmV0
dXJuIGVudGl0eVZhbHVlSW5pdFByb2Nlc3NvcihwYXJzZXIsIHMsIGVuZCwgbmV4dFB0cik7Ci0g
IH0KLSAgZWxzZSB7Ci0gICAgcHJvY2Vzc29yID0gZXh0ZXJuYWxQYXJFbnRQcm9jZXNzb3I7Ci0g
ICAgcmV0dXJuIGV4dGVybmFsUGFyRW50UHJvY2Vzc29yKHBhcnNlciwgcywgZW5kLCBuZXh0UHRy
KTsKLSAgfQotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAotZW50aXR5VmFsdWVJ
bml0UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQotewotICBp
bnQgdG9rOwotICBjb25zdCBjaGFyICpzdGFydCA9IHM7Ci0gIGNvbnN0IGNoYXIgKm5leHQgPSBz
dGFydDsKLSAgZXZlbnRQdHIgPSBzdGFydDsKLQotICBmb3IgKDs7KSB7Ci0gICAgdG9rID0gWG1s
UHJvbG9nVG9rKGVuY29kaW5nLCBzdGFydCwgZW5kLCAmbmV4dCk7Ci0gICAgZXZlbnRFbmRQdHIg
PSBuZXh0OwotICAgIGlmICh0b2sgPD0gMCkgewotICAgICAgaWYgKCFwc19maW5hbEJ1ZmZlciAm
JiB0b2sgIT0gWE1MX1RPS19JTlZBTElEKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgc3dpdGNoICh0b2spIHsK
LSAgICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0lO
VkFMSURfVE9LRU47Ci0gICAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKLSAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTjsKLSAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NI
QVI6Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOwotICAgICAgY2FzZSBY
TUxfVE9LX05PTkU6ICAgLyogc3RhcnQgPT0gZW5kICovCi0gICAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8qIGZvdW5kIGVuZCBvZiBlbnRpdHkgdmFsdWUgLSBj
YW4gc3RvcmUgaXQgbm93ICovCi0gICAgICByZXR1cm4gc3RvcmVFbnRpdHlWYWx1ZShwYXJzZXIs
IGVuY29kaW5nLCBzLCBlbmQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0b2sgPT0gWE1MX1RPS19Y
TUxfREVDTCkgewotICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAgcmVzdWx0ID0g
cHJvY2Vzc1htbERlY2wocGFyc2VyLCAwLCBzdGFydCwgbmV4dCk7Ci0gICAgICBpZiAocmVzdWx0
ICE9IFhNTF9FUlJPUl9OT05FKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgc3dpdGNo
IChwc19wYXJzaW5nKSB7Ci0gICAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAgICAgICpuZXh0
UHRyID0gbmV4dDsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgY2FzZSBY
TUxfRklOSVNIRUQ6Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfQUJPUlRFRDsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICpuZXh0UHRyID0gbmV4dDsKLSAgICAgIH0KLSAgICAgIC8qIHN0b3Ag
c2Nhbm5pbmcgZm9yIHRleHQgZGVjbGFyYXRpb24gLSB3ZSBmb3VuZCBvbmUgKi8KLSAgICAgIHBy
b2Nlc3NvciA9IGVudGl0eVZhbHVlUHJvY2Vzc29yOwotICAgICAgcmV0dXJuIGVudGl0eVZhbHVl
UHJvY2Vzc29yKHBhcnNlciwgbmV4dCwgZW5kLCBuZXh0UHRyKTsKLSAgICB9Ci0gICAgLyogSWYg
d2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgdGhpcyB3b3VsZCBjYXVzZSBYbWxQcm9s
b2dUb2sgdG8KLSAgICAgICByZXR1cm4gWE1MX1RPS19OT05FIG9uIHRoZSBuZXh0IGNhbGwsIHdo
aWNoIHdvdWxkIHRoZW4gY2F1c2UgdGhlCi0gICAgICAgZnVuY3Rpb24gdG8gZXhpdCB3aXRoICpu
ZXh0UHRyIHNldCB0byBzIC0gdGhhdCBpcyB3aGF0IHdlIHdhbnQgZm9yIG90aGVyCi0gICAgICAg
dG9rZW5zLCBidXQgbm90IGZvciB0aGUgQk9NIC0gd2Ugd291bGQgcmF0aGVyIGxpa2UgdG8gc2tp
cCBpdDsKLSAgICAgICB0aGVuLCB3aGVuIHRoaXMgcm91dGluZSBpcyBlbnRlcmVkIHRoZSBuZXh0
IHRpbWUsIFhtbFByb2xvZ1RvayB3aWxsCi0gICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRCwg
c2luY2UgdGhlIEJPTSBpcyBzdGlsbCBpbiB0aGUgYnVmZmVyCi0gICAgKi8KLSAgICBlbHNlIGlm
ICh0b2sgPT0gWE1MX1RPS19CT00gJiYgbmV4dCA9PSBlbmQgJiYgIXBzX2ZpbmFsQnVmZmVyKSB7
Ci0gICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0g
ICAgfQotICAgIHN0YXJ0ID0gbmV4dDsKLSAgICBldmVudFB0ciA9IHN0YXJ0OwotICB9Ci19Ci0K
LXN0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1leHRlcm5hbFBhckVudFByb2Nlc3NvcihY
TUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKLXsKLSAgY29uc3QgY2hhciAqbmV4dCA9
IHM7Ci0gIGludCB0b2s7Ci0KLSAgdG9rID0gWG1sUHJvbG9nVG9rKGVuY29kaW5nLCBzLCBlbmQs
ICZuZXh0KTsKLSAgaWYgKHRvayA8PSAwKSB7Ci0gICAgaWYgKCFwc19maW5hbEJ1ZmZlciAmJiB0
b2sgIT0gWE1MX1RPS19JTlZBTElEKSB7Ci0gICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgfQotICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgY2FzZSBY
TUxfVE9LX0lOVkFMSUQ6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0g
ICAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VE
X1RPS0VOOwotICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgICByZXR1cm4gWE1M
X0VSUk9SX1BBUlRJQUxfQ0hBUjsKLSAgICBjYXNlIFhNTF9UT0tfTk9ORTogICAvKiBzdGFydCA9
PSBlbmQgKi8KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIC8qIFRo
aXMgd291bGQgY2F1c2UgdGhlIG5leHQgc3RhZ2UsIGkuZS4gZG9Qcm9sb2cgdG8gYmUgcGFzc2Vk
IFhNTF9UT0tfQk9NLgotICAgICBIb3dldmVyLCB3aGVuIHBhcnNpbmcgYW4gZXh0ZXJuYWwgc3Vi
c2V0LCBkb1Byb2xvZyB3aWxsIG5vdCBhY2NlcHQgYSBCT00KLSAgICAgYXMgdmFsaWQsIGFuZCBy
ZXBvcnQgYSBzeW50YXggZXJyb3IsIHNvIHdlIGhhdmUgdG8gc2tpcCB0aGUgQk9NCi0gICovCi0g
IGVsc2UgaWYgKHRvayA9PSBYTUxfVE9LX0JPTSkgewotICAgIHMgPSBuZXh0OwotICAgIHRvayA9
IFhtbFByb2xvZ1RvayhlbmNvZGluZywgcywgZW5kLCAmbmV4dCk7Ci0gIH0KLQotICBwcm9jZXNz
b3IgPSBwcm9sb2dQcm9jZXNzb3I7Ci0gIHJldHVybiBkb1Byb2xvZyhwYXJzZXIsIGVuY29kaW5n
LCBzLCBlbmQsIHRvaywgbmV4dCwKLSAgICAgICAgICAgICAgICAgIG5leHRQdHIsIChYTUxfQm9v
bCkhcHNfZmluYWxCdWZmZXIpOwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAot
ZW50aXR5VmFsdWVQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpzLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCi17Ci0gIGNvbnN0
IGNoYXIgKnN0YXJ0ID0gczsKLSAgY29uc3QgY2hhciAqbmV4dCA9IHM7Ci0gIGNvbnN0IEVOQ09E
SU5HICplbmMgPSBlbmNvZGluZzsKLSAgaW50IHRvazsKLQotICBmb3IgKDs7KSB7Ci0gICAgdG9r
ID0gWG1sUHJvbG9nVG9rKGVuYywgc3RhcnQsIGVuZCwgJm5leHQpOwotICAgIGlmICh0b2sgPD0g
MCkgewotICAgICAgaWYgKCFwc19maW5hbEJ1ZmZlciAmJiB0b2sgIT0gWE1MX1RPS19JTlZBTElE
KSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05F
OwotICAgICAgfQotICAgICAgc3dpdGNoICh0b2spIHsKLSAgICAgIGNhc2UgWE1MX1RPS19JTlZB
TElEOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAgICBjYXNl
IFhNTF9UT0tfUEFSVElBTDoKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tF
TjsKLSAgICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgICAgIHJldHVybiBYTUxf
RVJST1JfUEFSVElBTF9DSEFSOwotICAgICAgY2FzZSBYTUxfVE9LX05PTkU6ICAgLyogc3RhcnQg
PT0gZW5kICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAg
IC8qIGZvdW5kIGVuZCBvZiBlbnRpdHkgdmFsdWUgLSBjYW4gc3RvcmUgaXQgbm93ICovCi0gICAg
ICByZXR1cm4gc3RvcmVFbnRpdHlWYWx1ZShwYXJzZXIsIGVuYywgcywgZW5kKTsKLSAgICB9Ci0g
ICAgc3RhcnQgPSBuZXh0OwotICB9Ci19Ci0KLSNlbmRpZiAvKiBYTUxfRFREICovCi0KLXN0YXRp
YyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1wcm9sb2dQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJz
ZXIsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKLSAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCi17Ci0g
IGNvbnN0IGNoYXIgKm5leHQgPSBzOwotICBpbnQgdG9rID0gWG1sUHJvbG9nVG9rKGVuY29kaW5n
LCBzLCBlbmQsICZuZXh0KTsKLSAgcmV0dXJuIGRvUHJvbG9nKHBhcnNlciwgZW5jb2RpbmcsIHMs
IGVuZCwgdG9rLCBuZXh0LAotICAgICAgICAgICAgICAgICAgbmV4dFB0ciwgKFhNTF9Cb29sKSFw
c19maW5hbEJ1ZmZlcik7Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotZG9Qcm9sb2coWE1M
X1BhcnNlciBwYXJzZXIsCi0gICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAg
Y29uc3QgY2hhciAqcywKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgIGludCB0
b2ssCi0gICAgICAgICBjb25zdCBjaGFyICpuZXh0LAotICAgICAgICAgY29uc3QgY2hhciAqKm5l
eHRQdHIsCi0gICAgICAgICBYTUxfQm9vbCBoYXZlTW9yZSkKLXsKLSNpZmRlZiBYTUxfRFRECi0g
IHN0YXRpYyBjb25zdCBYTUxfQ2hhciBleHRlcm5hbFN1YnNldE5hbWVbXSA9IHsgQVNDSUlfSEFT
SCAsICdcMCcgfTsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gIHN0YXRpYyBjb25zdCBYTUxfQ2hh
ciBhdHlwZUNEQVRBW10gPQotICAgICAgeyBBU0NJSV9DLCBBU0NJSV9ELCBBU0NJSV9BLCBBU0NJ
SV9ULCBBU0NJSV9BLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEW10g
PSB7IEFTQ0lJX0ksIEFTQ0lJX0QsICdcMCcgfTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0
eXBlSURSRUZbXSA9Ci0gICAgICB7IEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0Us
IEFTQ0lJX0YsICdcMCcgfTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlSURSRUZTW10g
PQotICAgICAgeyBBU0NJSV9JLCBBU0NJSV9ELCBBU0NJSV9SLCBBU0NJSV9FLCBBU0NJSV9GLCBB
U0NJSV9TLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUVOVElUWVtdID0K
LSAgICAgIHsgQVNDSUlfRSwgQVNDSUlfTiwgQVNDSUlfVCwgQVNDSUlfSSwgQVNDSUlfVCwgQVND
SUlfWSwgJ1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVFTlRJVElFU1tdID0g
eyBBU0NJSV9FLCBBU0NJSV9OLAotICAgICAgQVNDSUlfVCwgQVNDSUlfSSwgQVNDSUlfVCwgQVND
SUlfSSwgQVNDSUlfRSwgQVNDSUlfUywgJ1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIg
YXR5cGVOTVRPS0VOW10gPSB7Ci0gICAgICBBU0NJSV9OLCBBU0NJSV9NLCBBU0NJSV9ULCBBU0NJ
SV9PLCBBU0NJSV9LLCBBU0NJSV9FLCBBU0NJSV9OLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBY
TUxfQ2hhciBhdHlwZU5NVE9LRU5TW10gPSB7IEFTQ0lJX04sIEFTQ0lJX00sIEFTQ0lJX1QsCi0g
ICAgICBBU0NJSV9PLCBBU0NJSV9LLCBBU0NJSV9FLCBBU0NJSV9OLCBBU0NJSV9TLCAnXDAnIH07
Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBub3RhdGlvblByZWZpeFtdID0geyBBU0NJSV9OLCBB
U0NJSV9PLCBBU0NJSV9ULAotICAgICAgQVNDSUlfQSwgQVNDSUlfVCwgQVNDSUlfSSwgQVNDSUlf
TywgQVNDSUlfTiwgQVNDSUlfTFBBUkVOLCAnXDAnIH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hh
ciBlbnVtVmFsdWVTZXBbXSA9IHsgQVNDSUlfUElQRSwgJ1wwJyB9OwotICBzdGF0aWMgY29uc3Qg
WE1MX0NoYXIgZW51bVZhbHVlU3RhcnRbXSA9IHsgQVNDSUlfTFBBUkVOLCAnXDAnIH07Ci0KLSAg
Lyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgRFREICogY29uc3QgZHRkID0g
X2R0ZDsKLQotICBjb25zdCBjaGFyICoqZXZlbnRQUDsKLSAgY29uc3QgY2hhciAqKmV2ZW50RW5k
UFA7Ci0gIGVudW0gWE1MX0NvbnRlbnRfUXVhbnQgcXVhbnQ7Ci0KLSAgaWYgKGVuYyA9PSBlbmNv
ZGluZykgewotICAgIGV2ZW50UFAgPSAmZXZlbnRQdHI7Ci0gICAgZXZlbnRFbmRQUCA9ICZldmVu
dEVuZFB0cjsKLSAgfQotICBlbHNlIHsKLSAgICBldmVudFBQID0gJihvcGVuSW50ZXJuYWxFbnRp
dGllcy0+aW50ZXJuYWxFdmVudFB0cik7Ci0gICAgZXZlbnRFbmRQUCA9ICYob3BlbkludGVybmFs
RW50aXRpZXMtPmludGVybmFsRXZlbnRFbmRQdHIpOwotICB9Ci0KLSAgZm9yICg7OykgewotICAg
IGludCByb2xlOwotICAgIFhNTF9Cb29sIGhhbmRsZURlZmF1bHQgPSBYTUxfVFJVRTsKLSAgICAq
ZXZlbnRQUCA9IHM7Ci0gICAgKmV2ZW50RW5kUFAgPSBuZXh0OwotICAgIGlmICh0b2sgPD0gMCkg
ewotICAgICAgaWYgKGhhdmVNb3JlICYmIHRvayAhPSBYTUxfVE9LX0lOVkFMSUQpIHsKLSAgICAg
ICAgKm5leHRQdHIgPSBzOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgICB9
Ci0gICAgICBzd2l0Y2ggKHRvaykgewotICAgICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6Ci0gICAg
ICAgICpldmVudFBQID0gbmV4dDsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RP
S0VOOwotICAgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gICAgICAgIHJldHVybiBYTUxfRVJS
T1JfVU5DTE9TRURfVE9LRU47Ci0gICAgICBjYXNlIFhNTF9UT0tfUEFSVElBTF9DSEFSOgotICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKLSAgICAgIGNhc2UgLVhNTF9UT0tf
UFJPTE9HX1M6Ci0gICAgICAgIHRvayA9IC10b2s7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBYTUxfVE9LX05PTkU6Ci0jaWZkZWYgWE1MX0RURAotICAgICAgICAvKiBmb3IgaW50ZXJuYWwg
UEUgTk9UIHJlZmVyZW5jZWQgYmV0d2VlbiBkZWNsYXJhdGlvbnMgKi8KLSAgICAgICAgaWYgKGVu
YyAhPSBlbmNvZGluZyAmJiAhb3BlbkludGVybmFsRW50aXRpZXMtPmJldHdlZW5EZWNsKSB7Ci0g
ICAgICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsK
LSAgICAgICAgfQotICAgICAgICAvKiBXRkM6IFBFIEJldHdlZW4gRGVjbGFyYXRpb25zIC0gbXVz
dCBjaGVjayB0aGF0IFBFIGNvbnRhaW5zCi0gICAgICAgICAgIGNvbXBsZXRlIG1hcmt1cCwgbm90
IG9ubHkgZm9yIGV4dGVybmFsIFBFcywgYnV0IGFsc28gZm9yCi0gICAgICAgICAgIGludGVybmFs
IFBFcyBpZiB0aGUgcmVmZXJlbmNlIG9jY3VycyBiZXR3ZWVuIGRlY2xhcmF0aW9ucy4KLSAgICAg
ICAgKi8KLSAgICAgICAgaWYgKGlzUGFyYW1FbnRpdHkgfHwgZW5jICE9IGVuY29kaW5nKSB7Ci0g
ICAgICAgICAgaWYgKFhtbFRva2VuUm9sZSgmcHJvbG9nU3RhdGUsIFhNTF9UT0tfTk9ORSwgZW5k
LCBlbmQsIGVuYykKLSAgICAgICAgICAgICAgPT0gWE1MX1JPTEVfRVJST1IpCi0gICAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX0lOQ09NUExFVEVfUEU7Ci0gICAgICAgICAgKm5leHRQdHIgPSBz
OwotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAgICAgfQotI2VuZGlmIC8q
IFhNTF9EVEQgKi8KLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19FTEVNRU5UUzsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHRvayA9IC10b2s7Ci0gICAgICAgIG5leHQgPSBlbmQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByb2xlID0gWG1sVG9rZW5Sb2xlKCZwcm9s
b2dTdGF0ZSwgdG9rLCBzLCBuZXh0LCBlbmMpOwotICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNh
c2UgWE1MX1JPTEVfWE1MX0RFQ0w6Ci0gICAgICB7Ci0gICAgICAgIGVudW0gWE1MX0Vycm9yIHJl
c3VsdCA9IHByb2Nlc3NYbWxEZWNsKHBhcnNlciwgMCwgcywgbmV4dCk7Ci0gICAgICAgIGlmIChy
ZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgZW5jID0gZW5jb2Rpbmc7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0RPQ1RZUEVfTkFNRToKLSAg
ICAgIGlmIChzdGFydERvY3R5cGVEZWNsSGFuZGxlcikgewotICAgICAgICBkb2N0eXBlTmFtZSA9
IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywgcywgbmV4dCk7Ci0gICAgICAgIGlmICgh
ZG9jdHlwZU5hbWUpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAg
ICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAgZG9jdHlwZVB1YmlkID0gTlVMTDsK
LSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGRvY3R5
cGVTeXNpZCA9IE5VTEw7IC8qIGFsd2F5cyBpbml0aWFsaXplIHRvIE5VTEwgKi8KLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQ6Ci0gICAgICBp
ZiAoc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpIHsKLSAgICAgICAgc3RhcnREb2N0eXBlRGVjbEhh
bmRsZXIoaGFuZGxlckFyZywgZG9jdHlwZU5hbWUsIGRvY3R5cGVTeXNpZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdHlwZVB1YmlkLCAxKTsKLSAgICAgICAgZG9jdHlwZU5h
bWUgPSBOVUxMOwotICAgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKLSAgICAgICAgaGFuZGxl
RGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotI2lmZGVmIFhNTF9E
VEQKLSAgICBjYXNlIFhNTF9ST0xFX1RFWFRfREVDTDoKLSAgICAgIHsKLSAgICAgICAgZW51bSBY
TUxfRXJyb3IgcmVzdWx0ID0gcHJvY2Vzc1htbERlY2wocGFyc2VyLCAxLCBzLCBuZXh0KTsKLSAg
ICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICBlbmMgPSBlbmNvZGluZzsKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhN
TF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAg
ICBjYXNlIFhNTF9ST0xFX0RPQ1RZUEVfUFVCTElDX0lEOgotI2lmZGVmIFhNTF9EVEQKLSAgICAg
IHVzZUZvcmVpZ25EVEQgPSBYTUxfRkFMU0U7Ci0gICAgICBkZWNsRW50aXR5ID0gKEVOVElUWSAq
KWxvb2t1cChwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHRk
LT5wYXJhbUVudGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0
ZXJuYWxTdWJzZXROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKEVOVElUWSkpOwotICAgICAgaWYgKCFkZWNsRW50aXR5KQotICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX05PX01FTU9SWTsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgICBkdGQtPmhhc1Bh
cmFtRW50aXR5UmVmcyA9IFhNTF9UUlVFOwotICAgICAgaWYgKHN0YXJ0RG9jdHlwZURlY2xIYW5k
bGVyKSB7Ci0gICAgICAgIFhNTF9DaGFyICpwdWJJZDsKLSAgICAgICAgaWYgKCFYbWxJc1B1Ymxp
Y0lkKGVuYywgcywgbmV4dCwgZXZlbnRQUCkpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9Q
VUJMSUNJRDsKLSAgICAgICAgcHViSWQgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hh
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQ
ZXJDaGFyKTsKLSAgICAgICAgaWYgKCFwdWJJZCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKLSAgICAgICAgbm9ybWFsaXplUHVibGljSWQocHViSWQpOwotICAgICAgICBw
b29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGRvY3R5cGVQdWJpZCA9IHB1YklkOwotICAg
ICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICBnb3RvIGFscmVhZHlDaGVj
a2VkOwotICAgICAgfQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBYTUxfUk9M
RV9FTlRJVFlfUFVCTElDX0lEOgotICAgICAgaWYgKCFYbWxJc1B1YmxpY0lkKGVuYywgcywgbmV4
dCwgZXZlbnRQUCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfUFVCTElDSUQ7Ci0gICAgYWxy
ZWFkeUNoZWNrZWQ6Ci0gICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBkZWNsRW50aXR5
KSB7Ci0gICAgICAgIFhNTF9DaGFyICp0ZW0gPSBwb29sU3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5
dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmICghdGVtKQotICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfTk9fTUVNT1JZOwotICAgICAgICBub3JtYWxpemVQdWJsaWNJZCh0ZW0pOwotICAgICAgICBk
ZWNsRW50aXR5LT5wdWJsaWNJZCA9IHRlbTsKLSAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29s
KTsKLSAgICAgICAgaWYgKGVudGl0eURlY2xIYW5kbGVyKQotICAgICAgICAgIGhhbmRsZURlZmF1
bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xF
X0RPQ1RZUEVfQ0xPU0U6Ci0gICAgICBpZiAoZG9jdHlwZU5hbWUpIHsKLSAgICAgICAgc3RhcnRE
b2N0eXBlRGVjbEhhbmRsZXIoaGFuZGxlckFyZywgZG9jdHlwZU5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3R5cGVTeXNpZCwgZG9jdHlwZVB1YmlkLCAwKTsKLSAgICAg
ICAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFM
U0U7Ci0gICAgICB9Ci0gICAgICAvKiBkb2N0eXBlU3lzaWQgd2lsbCBiZSBub24tTlVMTCBpbiB0
aGUgY2FzZSBvZiBhIHByZXZpb3VzCi0gICAgICAgICBYTUxfUk9MRV9ET0NUWVBFX1NZU1RFTV9J
RCwgZXZlbiBpZiBzdGFydERvY3R5cGVEZWNsSGFuZGxlcgotICAgICAgICAgd2FzIG5vdCBzZXQs
IGluZGljYXRpbmcgYW4gZXh0ZXJuYWwgc3Vic2V0Ci0gICAgICAqLwotI2lmZGVmIFhNTF9EVEQK
LSAgICAgIGlmIChkb2N0eXBlU3lzaWQgfHwgdXNlRm9yZWlnbkRURCkgewotICAgICAgICBYTUxf
Qm9vbCBoYWRQYXJhbUVudGl0eVJlZnMgPSBkdGQtPmhhc1BhcmFtRW50aXR5UmVmczsKLSAgICAg
ICAgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBYTUxfVFJVRTsKLSAgICAgICAgaWYgKHBhcmFt
RW50aXR5UGFyc2luZyAmJiBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIpIHsKLSAgICAgICAgICBF
TlRJVFkgKmVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHRkLT5wYXJhbUVudGl0aWVzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFN1YnNldE5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihFTlRJ
VFkpKTsKLSAgICAgICAgICBpZiAoIWVudGl0eSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfTk9fTUVNT1JZOwotICAgICAgICAgIGlmICh1c2VGb3JlaWduRFREKQotICAgICAgICAgICAg
ZW50aXR5LT5iYXNlID0gY3VyQmFzZTsKLSAgICAgICAgICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9
IFhNTF9GQUxTRTsKLSAgICAgICAgICBpZiAoIWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXJBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRp
dHktPmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5
LT5zeXN0ZW1JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRp
dHktPnB1YmxpY0lkKSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfRVhURVJOQUxfRU5U
SVRZX0hBTkRMSU5HOwotICAgICAgICAgIGlmIChkdGQtPnBhcmFtRW50aXR5UmVhZCkgewotICAg
ICAgICAgICAgaWYgKCFkdGQtPnN0YW5kYWxvbmUgJiYKLSAgICAgICAgICAgICAgICBub3RTdGFu
ZGFsb25lSGFuZGxlciAmJgotICAgICAgICAgICAgICAgICFub3RTdGFuZGFsb25lSGFuZGxlciho
YW5kbGVyQXJnKSkKLSAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT1RfU1RBTkRBTE9O
RTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogaWYgd2UgZGlkbid0IHJlYWQgdGhlIGZvcmVp
Z24gRFREIHRoZW4gdGhpcyBtZWFucyB0aGF0IHRoZXJlCi0gICAgICAgICAgICAgaXMgbm8gZXh0
ZXJuYWwgc3Vic2V0IGFuZCB3ZSBtdXN0IHJlc2V0IGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzCi0g
ICAgICAgICAgKi8KLSAgICAgICAgICBlbHNlIGlmICghZG9jdHlwZVN5c2lkKQotICAgICAgICAg
ICAgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBoYWRQYXJhbUVudGl0eVJlZnM7Ci0gICAgICAg
ICAgLyogZW5kIG9mIERURCAtIG5vIG5lZWQgdG8gdXBkYXRlIGR0ZC0+a2VlcFByb2Nlc3Npbmcg
Ki8KLSAgICAgICAgfQotICAgICAgICB1c2VGb3JlaWduRFREID0gWE1MX0ZBTFNFOwotICAgICAg
fQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgIGlmIChlbmREb2N0eXBlRGVjbEhhbmRsZXIp
IHsKLSAgICAgICAgZW5kRG9jdHlwZURlY2xIYW5kbGVyKGhhbmRsZXJBcmcpOwotICAgICAgICBo
YW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBYTUxfUk9MRV9JTlNUQU5DRV9TVEFSVDoKLSNpZmRlZiBYTUxfRFRECi0gICAgICAvKiBpZiB0
aGVyZSBpcyBubyBET0NUWVBFIGRlY2xhcmF0aW9uIHRoZW4gbm93IGlzIHRoZQotICAgICAgICAg
bGFzdCBjaGFuY2UgdG8gcmVhZCB0aGUgZm9yZWlnbiBEVEQKLSAgICAgICovCi0gICAgICBpZiAo
dXNlRm9yZWlnbkRURCkgewotICAgICAgICBYTUxfQm9vbCBoYWRQYXJhbUVudGl0eVJlZnMgPSBk
dGQtPmhhc1BhcmFtRW50aXR5UmVmczsKLSAgICAgICAgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMg
PSBYTUxfVFJVRTsKLSAgICAgICAgaWYgKHBhcmFtRW50aXR5UGFyc2luZyAmJiBleHRlcm5hbEVu
dGl0eVJlZkhhbmRsZXIpIHsKLSAgICAgICAgICBFTlRJVFkgKmVudGl0eSA9IChFTlRJVFkgKils
b29rdXAocGFyc2VyLCAmZHRkLT5wYXJhbUVudGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFN1YnNldE5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihFTlRJVFkpKTsKLSAgICAgICAg
ICBpZiAoIWVudGl0eSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwot
ICAgICAgICAgIGVudGl0eS0+YmFzZSA9IGN1ckJhc2U7Ci0gICAgICAgICAgZHRkLT5wYXJhbUVu
dGl0eVJlYWQgPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgaWYgKCFleHRlcm5hbEVudGl0eVJlZkhh
bmRsZXIoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW50aXR5LT5iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW50aXR5LT5wdWJsaWNJZCkpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VY
VEVSTkFMX0VOVElUWV9IQU5ETElORzsKLSAgICAgICAgICBpZiAoZHRkLT5wYXJhbUVudGl0eVJl
YWQpIHsKLSAgICAgICAgICAgIGlmICghZHRkLT5zdGFuZGFsb25lICYmCi0gICAgICAgICAgICAg
ICAgbm90U3RhbmRhbG9uZUhhbmRsZXIgJiYKLSAgICAgICAgICAgICAgICAhbm90U3RhbmRhbG9u
ZUhhbmRsZXIoaGFuZGxlckFyZykpCi0gICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9U
X1NUQU5EQUxPTkU7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIGlmIHdlIGRpZG4ndCByZWFk
IHRoZSBmb3JlaWduIERURCB0aGVuIHRoaXMgbWVhbnMgdGhhdCB0aGVyZQotICAgICAgICAgICAg
IGlzIG5vIGV4dGVybmFsIHN1YnNldCBhbmQgd2UgbXVzdCByZXNldCBkdGQtPmhhc1BhcmFtRW50
aXR5UmVmcwotICAgICAgICAgICovCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZHRkLT5o
YXNQYXJhbUVudGl0eVJlZnMgPSBoYWRQYXJhbUVudGl0eVJlZnM7Ci0gICAgICAgICAgLyogZW5k
IG9mIERURCAtIG5vIG5lZWQgdG8gdXBkYXRlIGR0ZC0+a2VlcFByb2Nlc3NpbmcgKi8KLSAgICAg
ICAgfQotICAgICAgfQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgIHByb2Nlc3NvciA9IGNv
bnRlbnRQcm9jZXNzb3I7Ci0gICAgICByZXR1cm4gY29udGVudFByb2Nlc3NvcihwYXJzZXIsIHMs
IGVuZCwgbmV4dFB0cik7Ci0gICAgY2FzZSBYTUxfUk9MRV9BVFRMSVNUX0VMRU1FTlRfTkFNRToK
LSAgICAgIGRlY2xFbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlKHBhcnNlciwgZW5jLCBzLCBu
ZXh0KTsKLSAgICAgIGlmICghZGVjbEVsZW1lbnRUeXBlKQotICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PX01FTU9SWTsKLSAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAg
Y2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfTkFNRToKLSAgICAgIGRlY2xBdHRyaWJ1dGVJZCA9IGdl
dEF0dHJpYnV0ZUlkKHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgIGlmICghZGVjbEF0dHJp
YnV0ZUlkKQotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIGRlY2xB
dHRyaWJ1dGVJc0NkYXRhID0gWE1MX0ZBTFNFOwotICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBO
VUxMOwotICAgICAgZGVjbEF0dHJpYnV0ZUlzSWQgPSBYTUxfRkFMU0U7Ci0gICAgICBnb3RvIGNo
ZWNrQXR0TGlzdERlY2xIYW5kbGVyOwotICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVf
Q0RBVEE6Ci0gICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSA9IFhNTF9UUlVFOwotICAgICAgZGVj
bEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUNEQVRBOwotICAgICAgZ290byBjaGVja0F0dExpc3REZWNs
SGFuZGxlcjsKLSAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0lEOgotICAgICAgZGVj
bEF0dHJpYnV0ZUlzSWQgPSBYTUxfVFJVRTsKLSAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5
cGVJRDsKLSAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAgY2FzZSBYTUxf
Uk9MRV9BVFRSSUJVVEVfVFlQRV9JRFJFRjoKLSAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5
cGVJRFJFRjsKLSAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAgY2FzZSBY
TUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9JRFJFRlM6Ci0gICAgICBkZWNsQXR0cmlidXRlVHlwZSA9
IGF0eXBlSURSRUZTOwotICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKLSAgICBj
YXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0VOVElUWToKLSAgICAgIGRlY2xBdHRyaWJ1dGVU
eXBlID0gYXR5cGVFTlRJVFk7Ci0gICAgICBnb3RvIGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOwot
ICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfRU5USVRJRVM6Ci0gICAgICBkZWNsQXR0
cmlidXRlVHlwZSA9IGF0eXBlRU5USVRJRVM7Ci0gICAgICBnb3RvIGNoZWNrQXR0TGlzdERlY2xI
YW5kbGVyOwotICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfTk1UT0tFTjoKLSAgICAg
IGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5cGVOTVRPS0VOOwotICAgICAgZ290byBjaGVja0F0dExp
c3REZWNsSGFuZGxlcjsKLSAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX05NVE9LRU5T
OgotICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZU5NVE9LRU5TOwotICAgIGNoZWNrQXR0
TGlzdERlY2xIYW5kbGVyOgotICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgYXR0bGlz
dERlY2xIYW5kbGVyKQotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfRU5VTV9WQUxVRToKLSAgICBjYXNl
IFhNTF9ST0xFX0FUVFJJQlVURV9OT1RBVElPTl9WQUxVRToKLSAgICAgIGlmIChkdGQtPmtlZXBQ
cm9jZXNzaW5nICYmIGF0dGxpc3REZWNsSGFuZGxlcikgewotICAgICAgICBjb25zdCBYTUxfQ2hh
ciAqcHJlZml4OwotICAgICAgICBpZiAoZGVjbEF0dHJpYnV0ZVR5cGUpIHsKLSAgICAgICAgICBw
cmVmaXggPSBlbnVtVmFsdWVTZXA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgcHJlZml4ID0gKHJvbGUgPT0gWE1MX1JPTEVfQVRUUklCVVRFX05PVEFUSU9OX1ZBTFVFCi0g
ICAgICAgICAgICAgICAgICAgID8gbm90YXRpb25QcmVmaXgKLSAgICAgICAgICAgICAgICAgICAg
OiBlbnVtVmFsdWVTdGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwb29sQXBwZW5kU3Ry
aW5nKCZ0ZW1wUG9vbCwgcHJlZml4KSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01F
TU9SWTsKLSAgICAgICAgaWYgKCFwb29sQXBwZW5kKCZ0ZW1wUG9vbCwgZW5jLCBzLCBuZXh0KSkK
LSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgZGVjbEF0dHJp
YnV0ZVR5cGUgPSB0ZW1wUG9vbC5zdGFydDsKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9G
QUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfSU1QTElFRF9B
VFRSSUJVVEVfVkFMVUU6Ci0gICAgY2FzZSBYTUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFM
VUU6Ci0gICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykgewotICAgICAgICBpZiAoIWRlZmlu
ZUF0dHJpYnV0ZShkZWNsRWxlbWVudFR5cGUsIGRlY2xBdHRyaWJ1dGVJZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZUlzQ2RhdGEsIGRlY2xBdHRyaWJ1dGVJc0lk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXJzZXIpKQotICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBpZiAoYXR0bGlzdERlY2xIYW5kbGVy
ICYmIGRlY2xBdHRyaWJ1dGVUeXBlKSB7Ci0gICAgICAgICAgaWYgKCpkZWNsQXR0cmlidXRlVHlw
ZSA9PSBYTUxfVChBU0NJSV9MUEFSRU4pCi0gICAgICAgICAgICAgIHx8ICgqZGVjbEF0dHJpYnV0
ZVR5cGUgPT0gWE1MX1QoQVNDSUlfTikKLSAgICAgICAgICAgICAgICAgICYmIGRlY2xBdHRyaWJ1
dGVUeXBlWzFdID09IFhNTF9UKEFTQ0lJX08pKSkgewotICAgICAgICAgICAgLyogRW51bWVyYXRl
ZCBvciBOb3RhdGlvbiB0eXBlICovCi0gICAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0
ZW1wUG9vbCwgWE1MX1QoQVNDSUlfUlBBUkVOKSkKLSAgICAgICAgICAgICAgICB8fCAhcG9vbEFw
cGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCi0gICAgICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSB0ZW1w
UG9vbC5zdGFydDsKLSAgICAgICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAgICAgICAgIGF0dGxpc3REZWNsSGFu
ZGxlcihoYW5kbGVyQXJnLCBkZWNsRWxlbWVudFR5cGUtPm5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xBdHRyaWJ1dGVJZC0+bmFtZSwgZGVjbEF0dHJpYnV0ZVR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJvbGUgPT0gWE1MX1JPTEVfUkVRVUlSRURf
QVRUUklCVVRFX1ZBTFVFKTsKLSAgICAgICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKLSAgICAg
ICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0RFRkFVTFRfQVRUUklCVVRFX1ZBTFVFOgotICAg
IGNhc2UgWE1MX1JPTEVfRklYRURfQVRUUklCVVRFX1ZBTFVFOgotICAgICAgaWYgKGR0ZC0+a2Vl
cFByb2Nlc3NpbmcpIHsKLSAgICAgICAgY29uc3QgWE1MX0NoYXIgKmF0dFZhbDsKLSAgICAgICAg
ZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0KLSAgICAgICAgICBzdG9yZUF0dHJpYnV0ZVZhbHVlKHBh
cnNlciwgZW5jLCBkZWNsQXR0cmlidXRlSXNDZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZkdGQtPnBvb2wpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIGF0dFZhbCA9IHBvb2xTdGFydCgmZHRkLT5wb29sKTsKLSAg
ICAgICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKLSAgICAgICAgLyogSUQgYXR0cmlidXRlcyBh
cmVuJ3QgYWxsb3dlZCB0byBoYXZlIGEgZGVmYXVsdCAqLwotICAgICAgICBpZiAoIWRlZmluZUF0
dHJpYnV0ZShkZWNsRWxlbWVudFR5cGUsIGRlY2xBdHRyaWJ1dGVJZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjbEF0dHJpYnV0ZUlzQ2RhdGEsIFhNTF9GQUxTRSwgYXR0VmFsLCBw
YXJzZXIpKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBp
ZiAoYXR0bGlzdERlY2xIYW5kbGVyICYmIGRlY2xBdHRyaWJ1dGVUeXBlKSB7Ci0gICAgICAgICAg
aWYgKCpkZWNsQXR0cmlidXRlVHlwZSA9PSBYTUxfVChBU0NJSV9MUEFSRU4pCi0gICAgICAgICAg
ICAgIHx8ICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0gWE1MX1QoQVNDSUlfTikKLSAgICAgICAgICAg
ICAgICAgICYmIGRlY2xBdHRyaWJ1dGVUeXBlWzFdID09IFhNTF9UKEFTQ0lJX08pKSkgewotICAg
ICAgICAgICAgLyogRW51bWVyYXRlZCBvciBOb3RhdGlvbiB0eXBlICovCi0gICAgICAgICAgICBp
ZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoQVNDSUlfUlBBUkVOKSkKLSAgICAg
ICAgICAgICAgICB8fCAhcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCi0g
ICAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgICAgZGVj
bEF0dHJpYnV0ZVR5cGUgPSB0ZW1wUG9vbC5zdGFydDsKLSAgICAgICAgICAgIHBvb2xGaW5pc2go
JnRlbXBQb29sKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAg
ICAgICAgIGF0dGxpc3REZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBkZWNsRWxlbWVudFR5cGUtPm5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xBdHRyaWJ1dGVJZC0+bmFtZSwg
ZGVjbEF0dHJpYnV0ZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dFZhbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9PSBYTUxfUk9MRV9GSVhFRF9BVFRS
SUJVVEVfVkFMVUUpOwotICAgICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOwotICAgICAgICAg
IGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfRU5USVRZX1ZBTFVFOgotICAgICAgaWYgKGR0ZC0+a2Vl
cFByb2Nlc3NpbmcpIHsKLSAgICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0ID0gc3RvcmVFbnRp
dHlWYWx1ZShwYXJzZXIsIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAg
ICAgICBpZiAoZGVjbEVudGl0eSkgewotICAgICAgICAgIGRlY2xFbnRpdHktPnRleHRQdHIgPSBw
b29sU3RhcnQoJmR0ZC0+ZW50aXR5VmFsdWVQb29sKTsKLSAgICAgICAgICBkZWNsRW50aXR5LT50
ZXh0TGVuID0gKGludCkocG9vbExlbmd0aCgmZHRkLT5lbnRpdHlWYWx1ZVBvb2wpKTsKLSAgICAg
ICAgICBwb29sRmluaXNoKCZkdGQtPmVudGl0eVZhbHVlUG9vbCk7Ci0gICAgICAgICAgaWYgKGVu
dGl0eURlY2xIYW5kbGVyKSB7Ci0gICAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAg
ICAgICBlbnRpdHlEZWNsSGFuZGxlcihoYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlY2xFbnRpdHktPmlzX3BhcmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj
bEVudGl0eS0+dGV4dFB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRp
dHktPnRleHRMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJCYXNlLCAwLCAw
LCAwKTsKLSAgICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5l
bnRpdHlWYWx1ZVBvb2wpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQot
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IFhNTF9ST0xFX0RPQ1RZUEVfU1lTVEVNX0lEOgotI2lmZGVmIFhNTF9EVEQKLSAgICAgIHVzZUZv
cmVpZ25EVEQgPSBYTUxfRkFMU0U7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgICAgZHRkLT5o
YXNQYXJhbUVudGl0eVJlZnMgPSBYTUxfVFJVRTsKLSAgICAgIGlmIChzdGFydERvY3R5cGVEZWNs
SGFuZGxlcikgewotICAgICAgICBkb2N0eXBlU3lzaWQgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQ
b29sLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5j
LT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBpZiAoZG9jdHlwZVN5c2lk
ID09IE5VTEwpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAg
IHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKLSAgICAgIH0KLSNpZmRlZiBYTUxfRFRECi0gICAgICBlbHNlCi0gICAgICAgIC8qIHVzZSBl
eHRlcm5hbFN1YnNldE5hbWUgdG8gbWFrZSBkb2N0eXBlU3lzaWQgbm9uLU5VTEwKLSAgICAgICAg
ICAgZm9yIHRoZSBjYXNlIHdoZXJlIG5vIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIGlzIHNldCAq
LwotICAgICAgICBkb2N0eXBlU3lzaWQgPSBleHRlcm5hbFN1YnNldE5hbWU7Ci0jZW5kaWYgLyog
WE1MX0RURCAqLwotICAgICAgaWYgKCFkdGQtPnN0YW5kYWxvbmUKLSNpZmRlZiBYTUxfRFRECi0g
ICAgICAgICAgJiYgIXBhcmFtRW50aXR5UGFyc2luZwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAg
ICAgICAgICAmJiBub3RTdGFuZGFsb25lSGFuZGxlcgotICAgICAgICAgICYmICFub3RTdGFuZGFs
b25lSGFuZGxlcihoYW5kbGVyQXJnKSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT1RfU1RB
TkRBTE9ORTsKLSNpZm5kZWYgWE1MX0RURAotICAgICAgYnJlYWs7Ci0jZWxzZSAvKiBYTUxfRFRE
ICovCi0gICAgICBpZiAoIWRlY2xFbnRpdHkpIHsKLSAgICAgICAgZGVjbEVudGl0eSA9IChFTlRJ
VFkgKilsb29rdXAocGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZHRkLT5wYXJhbUVudGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHRlcm5hbFN1YnNldE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihFTlRJVFkpKTsKLSAgICAgICAgaWYgKCFkZWNsRW50aXR5KQotICAgICAg
ICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBkZWNsRW50aXR5LT5wdWJs
aWNJZCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSNlbmRpZiAv
KiBYTUxfRFREICovCi0gICAgY2FzZSBYTUxfUk9MRV9FTlRJVFlfU1lTVEVNX0lEOgotICAgICAg
aWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgZGVjbEVudGl0eSkgewotICAgICAgICBkZWNsRW50
aXR5LT5zeXN0ZW1JZCA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVz
UGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKLSAgICAgICAgaWYgKCFkZWNsRW50aXR5LT5z
eXN0ZW1JZCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAg
ZGVjbEVudGl0eS0+YmFzZSA9IGN1ckJhc2U7Ci0gICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9v
bCk7Ci0gICAgICAgIGlmIChlbnRpdHlEZWNsSGFuZGxlcikKLSAgICAgICAgICBoYW5kbGVEZWZh
dWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9M
RV9FTlRJVFlfQ09NUExFVEU6Ci0gICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBkZWNs
RW50aXR5ICYmIGVudGl0eURlY2xIYW5kbGVyKSB7Ci0gICAgICAgICpldmVudEVuZFBQID0gczsK
LSAgICAgICAgZW50aXR5RGVjbEhhbmRsZXIoaGFuZGxlckFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj
bEVudGl0eS0+aXNfcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+YmFzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGRlY2xFbnRpdHktPnB1YmxpY0lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLSAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgWE1MX1JPTEVfRU5USVRZX05PVEFUSU9OX05BTUU6Ci0gICAgICBpZiAoZHRkLT5r
ZWVwUHJvY2Vzc2luZyAmJiBkZWNsRW50aXR5KSB7Ci0gICAgICAgIGRlY2xFbnRpdHktPm5vdGF0
aW9uID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgcywgbmV4dCk7Ci0gICAgICAg
IGlmICghZGVjbEVudGl0eS0+bm90YXRpb24pCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T19NRU1PUlk7Ci0gICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgICAgIGlmICh1
bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKSB7Ci0gICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOwot
ICAgICAgICAgIHVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIoaGFuZGxlckFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5iYXNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjbEVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5wdWJsaWNJZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5vdGF0aW9uKTsKLSAgICAg
ICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKGVudGl0eURlY2xIYW5kbGVyKSB7Ci0gICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAg
ICAgICAgIGVudGl0eURlY2xIYW5kbGVyKGhhbmRsZXJBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LDAsMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5iYXNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPnN5c3RlbUlkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5vdGF0aW9uKTsKLSAgICAgICAgICBoYW5kbGVEZWZh
dWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFhNTF9ST0xFX0dFTkVSQUxfRU5USVRZX05BTUU6Ci0gICAgICB7Ci0gICAgICAgIGlmIChY
bWxQcmVkZWZpbmVkRW50aXR5TmFtZShlbmMsIHMsIG5leHQpKSB7Ci0gICAgICAgICAgZGVjbEVu
dGl0eSA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGR0
ZC0+a2VlcFByb2Nlc3NpbmcpIHsKLSAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSA9IHBv
b2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMsIHMsIG5leHQpOwotICAgICAgICAgIGlmICgh
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAg
IGRlY2xFbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+Z2VuZXJhbEVudGl0
aWVzLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv
ZihFTlRJVFkpKTsKLSAgICAgICAgICBpZiAoIWRlY2xFbnRpdHkpCi0gICAgICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICBpZiAoZGVjbEVudGl0eS0+bmFtZSAh
PSBuYW1lKSB7Ci0gICAgICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgICAg
ICAgIGRlY2xFbnRpdHkgPSBOVUxMOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgICAgICAgICBkZWNsRW50aXR5
LT5wdWJsaWNJZCA9IE5VTEw7Ci0gICAgICAgICAgICBkZWNsRW50aXR5LT5pc19wYXJhbSA9IFhN
TF9GQUxTRTsKLSAgICAgICAgICAgIC8qIGlmIHdlIGhhdmUgYSBwYXJlbnQgcGFyc2VyIG9yIGFy
ZSByZWFkaW5nIGFuIGludGVybmFsIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgZW50aXR5LCB0
aGVuIHRoZSBlbnRpdHkgZGVjbGFyYXRpb24gaXMgbm90IGNvbnNpZGVyZWQgImludGVybmFsIgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlY2xFbnRpdHktPmlzX2ludGVybmFsID0gIShw
YXJlbnRQYXJzZXIgfHwgb3BlbkludGVybmFsRW50aXRpZXMpOwotICAgICAgICAgICAgaWYgKGVu
dGl0eURlY2xIYW5kbGVyKQotICAgICAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNF
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBwb29s
RGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgICAgICBkZWNsRW50aXR5ID0gTlVMTDsKLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9QQVJBTV9FTlRJ
VFlfTkFNRToKLSNpZmRlZiBYTUxfRFRECi0gICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZykg
ewotICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5w
b29sLCBlbmMsIHMsIG5leHQpOwotICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGRlY2xFbnRpdHkgPSAoRU5USVRZICopbG9v
a3VwKHBhcnNlciwgJmR0ZC0+cGFyYW1FbnRpdGllcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaXplb2YoRU5USVRZKSk7Ci0gICAgICAgIGlmICgh
ZGVjbEVudGl0eSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAg
ICAgaWYgKGRlY2xFbnRpdHktPm5hbWUgIT0gbmFtZSkgewotICAgICAgICAgIHBvb2xEaXNjYXJk
KCZkdGQtPnBvb2wpOwotICAgICAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgICAg
ICAgZGVjbEVudGl0eS0+cHVibGljSWQgPSBOVUxMOwotICAgICAgICAgIGRlY2xFbnRpdHktPmlz
X3BhcmFtID0gWE1MX1RSVUU7Ci0gICAgICAgICAgLyogaWYgd2UgaGF2ZSBhIHBhcmVudCBwYXJz
ZXIgb3IgYXJlIHJlYWRpbmcgYW4gaW50ZXJuYWwgcGFyYW1ldGVyCi0gICAgICAgICAgICAgZW50
aXR5LCB0aGVuIHRoZSBlbnRpdHkgZGVjbGFyYXRpb24gaXMgbm90IGNvbnNpZGVyZWQgImludGVy
bmFsIgotICAgICAgICAgICovCi0gICAgICAgICAgZGVjbEVudGl0eS0+aXNfaW50ZXJuYWwgPSAh
KHBhcmVudFBhcnNlciB8fCBvcGVuSW50ZXJuYWxFbnRpdGllcyk7Ci0gICAgICAgICAgaWYgKGVu
dGl0eURlY2xIYW5kbGVyKQotICAgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHBvb2xEaXNjYXJkKCZk
dGQtPnBvb2wpOwotICAgICAgICBkZWNsRW50aXR5ID0gTlVMTDsKLSAgICAgIH0KLSNlbHNlIC8q
IG5vdCBYTUxfRFREICovCi0gICAgICBkZWNsRW50aXR5ID0gTlVMTDsKLSNlbmRpZiAvKiBYTUxf
RFREICovCi0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX05PVEFUSU9OX05BTUU6Ci0g
ICAgICBkZWNsTm90YXRpb25QdWJsaWNJZCA9IE5VTEw7Ci0gICAgICBkZWNsTm90YXRpb25OYW1l
ID0gTlVMTDsKLSAgICAgIGlmIChub3RhdGlvbkRlY2xIYW5kbGVyKSB7Ci0gICAgICAgIGRlY2xO
b3RhdGlvbk5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMsIHMsIG5leHQpOwot
ICAgICAgICBpZiAoIWRlY2xOb3RhdGlvbk5hbWUpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7Ci0gICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAgaGFu
ZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
WE1MX1JPTEVfTk9UQVRJT05fUFVCTElDX0lEOgotICAgICAgaWYgKCFYbWxJc1B1YmxpY0lkKGVu
YywgcywgbmV4dCwgZXZlbnRQUCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfUFVCTElDSUQ7
Ci0gICAgICBpZiAoZGVjbE5vdGF0aW9uTmFtZSkgeyAgLyogbWVhbnMgbm90YXRpb25EZWNsSGFu
ZGxlciAhPSBOVUxMICovCi0gICAgICAgIFhNTF9DaGFyICp0ZW0gPSBwb29sU3RvcmVTdHJpbmco
JnRlbXBQb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRl
c1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAt
IGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKLSAgICAgICAgaWYgKCF0ZW0pCi0gICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIG5vcm1hbGl6ZVB1YmxpY0lkKHRlbSk7
Ci0gICAgICAgIGRlY2xOb3RhdGlvblB1YmxpY0lkID0gdGVtOwotICAgICAgICBwb29sRmluaXNo
KCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX05PVEFUSU9OX1NZU1RFTV9JRDoKLSAg
ICAgIGlmIChkZWNsTm90YXRpb25OYW1lICYmIG5vdGF0aW9uRGVjbEhhbmRsZXIpIHsKLSAgICAg
ICAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkCi0gICAgICAgICAgPSBwb29sU3RvcmVTdHJpbmco
JnRlbXBQb29sLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWlu
Qnl0ZXNQZXJDaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1p
bkJ5dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmICghc3lzdGVtSWQpCi0gICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgICAg
bm90YXRpb25EZWNsSGFuZGxlcihoYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlY2xOb3RhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyQmFz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNsTm90YXRpb25QdWJsaWNJZCk7Ci0gICAgICAgIGhhbmRsZURlZmF1
bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfTk9UQVRJT05fTk9fU1lTVEVNX0lEOgotICAg
ICAgaWYgKGRlY2xOb3RhdGlvblB1YmxpY0lkICYmIG5vdGF0aW9uRGVjbEhhbmRsZXIpIHsKLSAg
ICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAgICAgICBub3RhdGlvbkRlY2xIYW5kbGVyKGhhbmRs
ZXJBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbE5vdGF0aW9uTmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJCYXNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbE5vdGF0aW9uUHVibGlj
SWQpOwotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAg
cG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0VS
Uk9SOgotICAgICAgc3dpdGNoICh0b2spIHsKLSAgICAgIGNhc2UgWE1MX1RPS19QQVJBTV9FTlRJ
VFlfUkVGOgotICAgICAgICAvKiBQRSByZWZlcmVuY2VzIGluIGludGVybmFsIHN1YnNldCBhcmUK
LSAgICAgICAgICAgbm90IGFsbG93ZWQgd2l0aGluIGRlY2xhcmF0aW9ucy4gKi8KLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVGOwotICAgICAgY2FzZSBYTUxfVE9LX1hN
TF9ERUNMOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX01JU1BMQUNFRF9YTUxfUEk7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1NZTlRBWDsKLSAgICAgIH0KLSNp
ZmRlZiBYTUxfRFRECi0gICAgY2FzZSBYTUxfUk9MRV9JR05PUkVfU0VDVDoKLSAgICAgIHsKLSAg
ICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAgICBpZiAoZGVmYXVsdEhhbmRsZXIp
Ci0gICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICAg
IGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgIHJlc3VsdCA9IGRvSWdub3JlU2Vj
dGlvbihwYXJzZXIsIGVuYywgJm5leHQsIGVuZCwgbmV4dFB0ciwgaGF2ZU1vcmUpOwotICAgICAg
ICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQotICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIGVsc2UgaWYgKCFuZXh0KSB7Ci0gICAgICAgICAgcHJvY2Vzc29yID0gaWdub3Jl
U2VjdGlvblByb2Nlc3NvcjsKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgY2FzZSBYTUxf
Uk9MRV9HUk9VUF9PUEVOOgotICAgICAgaWYgKHByb2xvZ1N0YXRlLmxldmVsID49IGdyb3VwU2l6
ZSkgewotICAgICAgICBpZiAoZ3JvdXBTaXplKSB7Ci0gICAgICAgICAgY2hhciAqdGVtcCA9IChj
aGFyICopUkVBTExPQyhncm91cENvbm5lY3RvciwgZ3JvdXBTaXplICo9IDIpOwotICAgICAgICAg
IGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKLSAgICAgICAgICBncm91cENvbm5lY3RvciA9IHRlbXA7Ci0gICAgICAgICAgaWYgKGR0ZC0+
c2NhZmZJbmRleCkgewotICAgICAgICAgICAgaW50ICp0ZW1wID0gKGludCAqKVJFQUxMT0MoZHRk
LT5zY2FmZkluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFNpemUgKiBzaXpl
b2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICAgIGR0ZC0+c2NhZmZJbmRleCA9
IHRlbXA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
IGdyb3VwQ29ubmVjdG9yID0gKGNoYXIgKilNQUxMT0MoZ3JvdXBTaXplID0gMzIpOwotICAgICAg
ICAgIGlmICghZ3JvdXBDb25uZWN0b3IpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ3JvdXBDb25uZWN0b3JbcHJvbG9n
U3RhdGUubGV2ZWxdID0gMDsKLSAgICAgIGlmIChkdGQtPmluX2VsZGVjbCkgewotICAgICAgICBp
bnQgbXlpbmRleCA9IG5leHRTY2FmZm9sZFBhcnQocGFyc2VyKTsKLSAgICAgICAgaWYgKG15aW5k
ZXggPCAwKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBk
dGQtPnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxldmVsXSA9IG15aW5kZXg7Ci0gICAgICAgIGR0ZC0+
c2NhZmZMZXZlbCsrOwotICAgICAgICBkdGQtPnNjYWZmb2xkW215aW5kZXhdLnR5cGUgPSBYTUxf
Q1RZUEVfU0VROwotICAgICAgICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKQotICAgICAgICAgIGhh
bmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IFhNTF9ST0xFX0dST1VQX1NFUVVFTkNFOgotICAgICAgaWYgKGdyb3VwQ29ubmVjdG9yW3Byb2xv
Z1N0YXRlLmxldmVsXSA9PSBBU0NJSV9QSVBFKQotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1NZ
TlRBWDsKLSAgICAgIGdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0YXRlLmxldmVsXSA9IEFTQ0lJX0NP
TU1BOwotICAgICAgaWYgKGR0ZC0+aW5fZWxkZWNsICYmIGVsZW1lbnREZWNsSGFuZGxlcikKLSAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
WE1MX1JPTEVfR1JPVVBfQ0hPSUNFOgotICAgICAgaWYgKGdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0
YXRlLmxldmVsXSA9PSBBU0NJSV9DT01NQSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9TWU5U
QVg7Ci0gICAgICBpZiAoZHRkLT5pbl9lbGRlY2wKLSAgICAgICAgICAmJiAhZ3JvdXBDb25uZWN0
b3JbcHJvbG9nU3RhdGUubGV2ZWxdCi0gICAgICAgICAgJiYgKGR0ZC0+c2NhZmZvbGRbZHRkLT5z
Y2FmZkluZGV4W2R0ZC0+c2NhZmZMZXZlbCAtIDFdXS50eXBlCi0gICAgICAgICAgICAgICE9IFhN
TF9DVFlQRV9NSVhFRCkKLSAgICAgICAgICApIHsKLSAgICAgICAgZHRkLT5zY2FmZm9sZFtkdGQt
PnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxldmVsIC0gMV1dLnR5cGUKLSAgICAgICAgICAgID0gWE1M
X0NUWVBFX0NIT0lDRTsKLSAgICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikKLSAgICAgICAg
ICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgZ3JvdXBDb25uZWN0
b3JbcHJvbG9nU3RhdGUubGV2ZWxdID0gQVNDSUlfUElQRTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgWE1MX1JPTEVfUEFSQU1fRU5USVRZX1JFRjoKLSNpZmRlZiBYTUxfRFRECi0gICAgY2FzZSBY
TUxfUk9MRV9JTk5FUl9QQVJBTV9FTlRJVFlfUkVGOgotICAgICAgZHRkLT5oYXNQYXJhbUVudGl0
eVJlZnMgPSBYTUxfVFJVRTsKLSAgICAgIGlmICghcGFyYW1FbnRpdHlQYXJzaW5nKQotICAgICAg
ICBkdGQtPmtlZXBQcm9jZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwotICAgICAgZWxzZSB7Ci0g
ICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICAgICAgICBFTlRJVFkgKmVudGl0eTsKLSAg
ICAgICAgbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmZHRkLT5wb29sLCBlbmMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKLSAg
ICAgICAgaWYgKCFuYW1lKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwot
ICAgICAgICBlbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cGFyYW1FbnRp
dGllcywgbmFtZSwgMCk7Ci0gICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOwotICAgICAg
ICAvKiBmaXJzdCwgZGV0ZXJtaW5lIGlmIGEgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIGRlY2xhcmF0
aW9uIGlzIG5lZWRlZDsKLSAgICAgICAgICAgaWYgeWVzLCBjaGVjayB0aGF0IHRoZSBlbnRpdHkg
ZXhpc3RzLCBhbmQgdGhhdCBpdCBpcyBpbnRlcm5hbCwKLSAgICAgICAgICAgb3RoZXJ3aXNlIGNh
bGwgdGhlIHNraXBwZWQgZW50aXR5IGhhbmRsZXIKLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHBy
b2xvZ1N0YXRlLmRvY3VtZW50RW50aXR5ICYmCi0gICAgICAgICAgICAoZHRkLT5zdGFuZGFsb25l
Ci0gICAgICAgICAgICAgPyAhb3BlbkludGVybmFsRW50aXRpZXMKLSAgICAgICAgICAgICA6ICFk
dGQtPmhhc1BhcmFtRW50aXR5UmVmcykpIHsKLSAgICAgICAgICBpZiAoIWVudGl0eSkKLSAgICAg
ICAgICAgIHJldHVybiBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWTsKLSAgICAgICAgICBlbHNl
IGlmICghZW50aXR5LT5pc19pbnRlcm5hbCkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1Jf
RU5USVRZX0RFQ0xBUkVEX0lOX1BFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCFlbnRp
dHkpIHsKLSAgICAgICAgICBkdGQtPmtlZXBQcm9jZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwot
ICAgICAgICAgIC8qIGNhbm5vdCByZXBvcnQgc2tpcHBlZCBlbnRpdGllcyBpbiBkZWNsYXJhdGlv
bnMgKi8KLSAgICAgICAgICBpZiAoKHJvbGUgPT0gWE1MX1JPTEVfUEFSQU1fRU5USVRZX1JFRikg
JiYgc2tpcHBlZEVudGl0eUhhbmRsZXIpIHsKLSAgICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5k
bGVyKGhhbmRsZXJBcmcsIG5hbWUsIDEpOwotICAgICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhN
TF9GQUxTRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGVudGl0eS0+b3BlbikKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1JFQ1VSU0lW
RV9FTlRJVFlfUkVGOwotICAgICAgICBpZiAoZW50aXR5LT50ZXh0UHRyKSB7Ci0gICAgICAgICAg
ZW51bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAgICAgIFhNTF9Cb29sIGJldHdlZW5EZWNsID0K
LSAgICAgICAgICAgIChyb2xlID09IFhNTF9ST0xFX1BBUkFNX0VOVElUWV9SRUYgPyBYTUxfVFJV
RSA6IFhNTF9GQUxTRSk7Ci0gICAgICAgICAgcmVzdWx0ID0gcHJvY2Vzc0ludGVybmFsRW50aXR5
KHBhcnNlciwgZW50aXR5LCBiZXR3ZWVuRGVjbCk7Ci0gICAgICAgICAgaWYgKHJlc3VsdCAhPSBY
TUxfRVJST1JfTk9ORSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgaGFu
ZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSB7Ci0gICAgICAgICAgZHRkLT5wYXJh
bUVudGl0eVJlYWQgPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX1RS
VUU7Ci0gICAgICAgICAgaWYgKCFleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoZXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5iYXNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+c3lzdGVt
SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5wdWJs
aWNJZCkpIHsKLSAgICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgICAg
ICAgIHJldHVybiBYTUxfRVJST1JfRVhURVJOQUxfRU5USVRZX0hBTkRMSU5HOwotICAgICAgICAg
IH0KLSAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgaGFuZGxl
RGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgICAgICBpZiAoIWR0ZC0+cGFyYW1FbnRpdHlSZWFk
KSB7Ci0gICAgICAgICAgICBkdGQtPmtlZXBQcm9jZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSNlbmRpZiAvKiBYTUxfRFREICovCi0g
ICAgICBpZiAoIWR0ZC0+c3RhbmRhbG9uZSAmJgotICAgICAgICAgIG5vdFN0YW5kYWxvbmVIYW5k
bGVyICYmCi0gICAgICAgICAgIW5vdFN0YW5kYWxvbmVIYW5kbGVyKGhhbmRsZXJBcmcpKQotICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PVF9TVEFOREFMT05FOwotICAgICAgYnJlYWs7Ci0KLSAg
ICAvKiBFbGVtZW50IGRlY2xhcmF0aW9uIHN0dWZmICovCi0KLSAgICBjYXNlIFhNTF9ST0xFX0VM
RU1FTlRfTkFNRToKLSAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpIHsKLSAgICAgICAgZGVj
bEVsZW1lbnRUeXBlID0gZ2V0RWxlbWVudFR5cGUocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAg
ICAgICBpZiAoIWRlY2xFbGVtZW50VHlwZSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKLSAgICAgICAgZHRkLT5zY2FmZkxldmVsID0gMDsKLSAgICAgICAgZHRkLT5zY2Fm
ZkNvdW50ID0gMDsKLSAgICAgICAgZHRkLT5pbl9lbGRlY2wgPSBYTUxfVFJVRTsKLSAgICAgICAg
aGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBYTUxfUk9MRV9DT05URU5UX0FOWToKLSAgICBjYXNlIFhNTF9ST0xFX0NPTlRFTlRfRU1Q
VFk6Ci0gICAgICBpZiAoZHRkLT5pbl9lbGRlY2wpIHsKLSAgICAgICAgaWYgKGVsZW1lbnREZWNs
SGFuZGxlcikgewotICAgICAgICAgIFhNTF9Db250ZW50ICogY29udGVudCA9IChYTUxfQ29udGVu
dCAqKSBNQUxMT0Moc2l6ZW9mKFhNTF9Db250ZW50KSk7Ci0gICAgICAgICAgaWYgKCFjb250ZW50
KQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgY29u
dGVudC0+cXVhbnQgPSBYTUxfQ1FVQU5UX05PTkU7Ci0gICAgICAgICAgY29udGVudC0+bmFtZSA9
IE5VTEw7Ci0gICAgICAgICAgY29udGVudC0+bnVtY2hpbGRyZW4gPSAwOwotICAgICAgICAgIGNv
bnRlbnQtPmNoaWxkcmVuID0gTlVMTDsKLSAgICAgICAgICBjb250ZW50LT50eXBlID0gKChyb2xl
ID09IFhNTF9ST0xFX0NPTlRFTlRfQU5ZKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBY
TUxfQ1RZUEVfQU5ZIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DVFlQRV9FTVBU
WSk7Ci0gICAgICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAgICAgICAgIGVsZW1lbnREZWNsSGFu
ZGxlcihoYW5kbGVyQXJnLCBkZWNsRWxlbWVudFR5cGUtPm5hbWUsIGNvbnRlbnQpOwotICAgICAg
ICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgZHRkLT5p
bl9lbGRlY2wgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2Ug
WE1MX1JPTEVfQ09OVEVOVF9QQ0RBVEE6Ci0gICAgICBpZiAoZHRkLT5pbl9lbGRlY2wpIHsKLSAg
ICAgICAgZHRkLT5zY2FmZm9sZFtkdGQtPnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxldmVsIC0gMV1d
LnR5cGUKLSAgICAgICAgICAgID0gWE1MX0NUWVBFX01JWEVEOwotICAgICAgICBpZiAoZWxlbWVu
dERlY2xIYW5kbGVyKQotICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAg
ICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UOgot
ICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX05PTkU7Ci0gICAgICBnb3RvIGVsZW1lbnRDb250ZW50
OwotICAgIGNhc2UgWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX09QVDoKLSAgICAgIHF1YW50ID0g
WE1MX0NRVUFOVF9PUFQ7Ci0gICAgICBnb3RvIGVsZW1lbnRDb250ZW50OwotICAgIGNhc2UgWE1M
X1JPTEVfQ09OVEVOVF9FTEVNRU5UX1JFUDoKLSAgICAgIHF1YW50ID0gWE1MX0NRVUFOVF9SRVA7
Ci0gICAgICBnb3RvIGVsZW1lbnRDb250ZW50OwotICAgIGNhc2UgWE1MX1JPTEVfQ09OVEVOVF9F
TEVNRU5UX1BMVVM6Ci0gICAgICBxdWFudCA9IFhNTF9DUVVBTlRfUExVUzsKLSAgICBlbGVtZW50
Q29udGVudDoKLSAgICAgIGlmIChkdGQtPmluX2VsZGVjbCkgewotICAgICAgICBFTEVNRU5UX1RZ
UEUgKmVsOwotICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKLSAgICAgICAgaW50IG5hbWVM
ZW47Ci0gICAgICAgIGNvbnN0IGNoYXIgKm54dCA9IChxdWFudCA9PSBYTUxfQ1FVQU5UX05PTkUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBpbnQgbXlpbmRl
eCA9IG5leHRTY2FmZm9sZFBhcnQocGFyc2VyKTsKLSAgICAgICAgaWYgKG15aW5kZXggPCAwKQot
ICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBkdGQtPnNjYWZm
b2xkW215aW5kZXhdLnR5cGUgPSBYTUxfQ1RZUEVfTkFNRTsKLSAgICAgICAgZHRkLT5zY2FmZm9s
ZFtteWluZGV4XS5xdWFudCA9IHF1YW50OwotICAgICAgICBlbCA9IGdldEVsZW1lbnRUeXBlKHBh
cnNlciwgZW5jLCBzLCBueHQpOwotICAgICAgICBpZiAoIWVsKQotICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBuYW1lID0gZWwtPm5hbWU7Ci0gICAgICAgIGR0
ZC0+c2NhZmZvbGRbbXlpbmRleF0ubmFtZSA9IG5hbWU7Ci0gICAgICAgIG5hbWVMZW4gPSAwOwot
ICAgICAgICBmb3IgKDsgbmFtZVtuYW1lTGVuKytdOyApOwotICAgICAgICBkdGQtPmNvbnRlbnRT
dHJpbmdMZW4gKz0gIG5hbWVMZW47Ci0gICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpCi0g
ICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBYTUxfUk9MRV9HUk9VUF9DTE9TRToKLSAgICAgIHF1YW50ID0gWE1MX0NR
VUFOVF9OT05FOwotICAgICAgZ290byBjbG9zZUdyb3VwOwotICAgIGNhc2UgWE1MX1JPTEVfR1JP
VVBfQ0xPU0VfT1BUOgotICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX09QVDsKLSAgICAgIGdvdG8g
Y2xvc2VHcm91cDsKLSAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NMT1NFX1JFUDoKLSAgICAgIHF1
YW50ID0gWE1MX0NRVUFOVF9SRVA7Ci0gICAgICBnb3RvIGNsb3NlR3JvdXA7Ci0gICAgY2FzZSBY
TUxfUk9MRV9HUk9VUF9DTE9TRV9QTFVTOgotICAgICAgcXVhbnQgPSBYTUxfQ1FVQU5UX1BMVVM7
Ci0gICAgY2xvc2VHcm91cDoKLSAgICAgIGlmIChkdGQtPmluX2VsZGVjbCkgewotICAgICAgICBp
ZiAoZWxlbWVudERlY2xIYW5kbGVyKQotICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFM
U0U7Ci0gICAgICAgIGR0ZC0+c2NhZmZMZXZlbC0tOwotICAgICAgICBkdGQtPnNjYWZmb2xkW2R0
ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWxdXS5xdWFudCA9IHF1YW50OwotICAgICAgICBp
ZiAoZHRkLT5zY2FmZkxldmVsID09IDApIHsKLSAgICAgICAgICBpZiAoIWhhbmRsZURlZmF1bHQp
IHsKLSAgICAgICAgICAgIFhNTF9Db250ZW50ICptb2RlbCA9IGJ1aWxkX21vZGVsKHBhcnNlcik7
Ci0gICAgICAgICAgICBpZiAoIW1vZGVsKQotICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKLSAgICAgICAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgICAgICAgIGVs
ZW1lbnREZWNsSGFuZGxlcihoYW5kbGVyQXJnLCBkZWNsRWxlbWVudFR5cGUtPm5hbWUsIG1vZGVs
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZHRkLT5pbl9lbGRlY2wgPSBYTUxfRkFMU0U7Ci0g
ICAgICAgICAgZHRkLT5jb250ZW50U3RyaW5nTGVuID0gMDsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0gICAgICAvKiBFbmQgZWxlbWVudCBkZWNsYXJhdGlvbiBzdHVmZiAqLwot
Ci0gICAgY2FzZSBYTUxfUk9MRV9QSToKLSAgICAgIGlmICghcmVwb3J0UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKHBhcnNlciwgZW5jLCBzLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T19NRU1PUlk7Ci0gICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBYTUxfUk9MRV9DT01NRU5UOgotICAgICAgaWYgKCFyZXBvcnRDb21tZW50KHBh
cnNlciwgZW5jLCBzLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
Ci0gICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBYTUxfUk9MRV9OT05FOgotICAgICAgc3dpdGNoICh0b2spIHsKLSAgICAgIGNhc2UgWE1MX1RP
S19CT006Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9ET0NUWVBFX05PTkU6
Ci0gICAgICBpZiAoc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpCi0gICAgICAgIGhhbmRsZURlZmF1
bHQgPSBYTUxfRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9O
T05FOgotICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgZW50aXR5RGVjbEhhbmRsZXIp
Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIFhNTF9ST0xFX05PVEFUSU9OX05PTkU6Ci0gICAgICBpZiAobm90YXRpb25EZWNsSGFuZGxl
cikKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgWE1MX1JPTEVfQVRUTElTVF9OT05FOgotICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3Np
bmcgJiYgYXR0bGlzdERlY2xIYW5kbGVyKQotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZB
TFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9FTEVNRU5UX05PTkU6Ci0gICAg
ICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKQotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZB
TFNFOwotICAgICAgYnJlYWs7Ci0gICAgfSAvKiBlbmQgb2YgYmlnIHN3aXRjaCAqLwotCi0gICAg
aWYgKGhhbmRsZURlZmF1bHQgJiYgZGVmYXVsdEhhbmRsZXIpCi0gICAgICByZXBvcnREZWZhdWx0
KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLQotICAgIHN3aXRjaCAocHNfcGFyc2luZykgewotICAg
IGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAgICpuZXh0UHRyID0gbmV4dDsKLSAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhNTF9GSU5JU0hFRDoKLSAgICAgIHJldHVybiBY
TUxfRVJST1JfQUJPUlRFRDsKLSAgICBkZWZhdWx0OgotICAgICAgcyA9IG5leHQ7Ci0gICAgICB0
b2sgPSBYbWxQcm9sb2dUb2soZW5jLCBzLCBlbmQsICZuZXh0KTsKLSAgICB9Ci0gIH0KLSAgLyog
bm90IHJlYWNoZWQgKi8KLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWVwaWxv
Z1Byb2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpzLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICoqbmV4dFB0cikKLXsKLSAgcHJvY2Vzc29yID0gZXBpbG9nUHJvY2Vzc29yOwot
ICBldmVudFB0ciA9IHM7Ci0gIGZvciAoOzspIHsKLSAgICBjb25zdCBjaGFyICpuZXh0ID0gTlVM
TDsKLSAgICBpbnQgdG9rID0gWG1sUHJvbG9nVG9rKGVuY29kaW5nLCBzLCBlbmQsICZuZXh0KTsK
LSAgICBldmVudEVuZFB0ciA9IG5leHQ7Ci0gICAgc3dpdGNoICh0b2spIHsKLSAgICAvKiByZXBv
cnQgcGFydGlhbCBsaW5lYnJlYWsgLSBpdCBtaWdodCBiZSB0aGUgbGFzdCB0b2tlbiAqLwotICAg
IGNhc2UgLVhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgICBpZiAoZGVmYXVsdEhhbmRsZXIpIHsKLSAg
ICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuY29kaW5nLCBzLCBuZXh0KTsKLSAgICAgICAg
aWYgKHBzX3BhcnNpbmcgPT0gWE1MX0ZJTklTSEVEKQotICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfQUJPUlRFRDsKLSAgICAgIH0KLSAgICAgICpuZXh0UHRyID0gbmV4dDsKLSAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhNTF9UT0tfTk9ORToKLSAgICAgICpuZXh0UHRy
ID0gczsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhNTF9UT0tfUFJP
TE9HX1M6Ci0gICAgICBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAgIHJlcG9ydERlZmF1bHQo
cGFyc2VyLCBlbmNvZGluZywgcywgbmV4dCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9U
T0tfUEk6Ci0gICAgICBpZiAoIXJlcG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihwYXJzZXIsIGVu
Y29kaW5nLCBzLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKLSAgICAgIGlmICghcmVwb3J0
Q29tbWVudChwYXJzZXIsIGVuY29kaW5nLCBzLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoK
LSAgICAgIGV2ZW50UHRyID0gbmV4dDsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9U
T0tFTjsKLSAgICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKLSAgICAgIGlmICghcHNfZmluYWxCdWZm
ZXIpIHsKLSAgICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOwotICAg
IGNhc2UgWE1MX1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgICBpZiAoIXBzX2ZpbmFsQnVmZmVyKSB7
Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwot
ICAgICAgfQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgIHJldHVybiBYTUxfRVJST1JfSlVOS19BRlRFUl9ET0NfRUxFTUVOVDsKLSAgICB9
Ci0gICAgZXZlbnRQdHIgPSBzID0gbmV4dDsKLSAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAg
ICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2FzZSBYTUxfRklOSVNIRUQ6Ci0gICAgICByZXR1cm4g
WE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgZGVmYXVsdDogOwotICAgIH0KLSAgfQotfQotCi1zdGF0
aWMgZW51bSBYTUxfRXJyb3IKLXByb2Nlc3NJbnRlcm5hbEVudGl0eShYTUxfUGFyc2VyIHBhcnNl
ciwgRU5USVRZICplbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgWE1MX0Jvb2wgYmV0d2Vl
bkRlY2wpCi17Ci0gIGNvbnN0IGNoYXIgKnRleHRTdGFydCwgKnRleHRFbmQ7Ci0gIGNvbnN0IGNo
YXIgKm5leHQ7Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgT1BFTl9JTlRFUk5BTF9FTlRJ
VFkgKm9wZW5FbnRpdHk7Ci0KLSAgaWYgKGZyZWVJbnRlcm5hbEVudGl0aWVzKSB7Ci0gICAgb3Bl
bkVudGl0eSA9IGZyZWVJbnRlcm5hbEVudGl0aWVzOwotICAgIGZyZWVJbnRlcm5hbEVudGl0aWVz
ID0gb3BlbkVudGl0eS0+bmV4dDsKLSAgfQotICBlbHNlIHsKLSAgICBvcGVuRW50aXR5ID0gKE9Q
RU5fSU5URVJOQUxfRU5USVRZICopTUFMTE9DKHNpemVvZihPUEVOX0lOVEVSTkFMX0VOVElUWSkp
OwotICAgIGlmICghb3BlbkVudGl0eSkKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZ
OwotICB9Ci0gIGVudGl0eS0+b3BlbiA9IFhNTF9UUlVFOwotICBlbnRpdHktPnByb2Nlc3NlZCA9
IDA7Ci0gIG9wZW5FbnRpdHktPm5leHQgPSBvcGVuSW50ZXJuYWxFbnRpdGllczsKLSAgb3Blbklu
dGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5OwotICBvcGVuRW50aXR5LT5lbnRpdHkgPSBlbnRp
dHk7Ci0gIG9wZW5FbnRpdHktPnN0YXJ0VGFnTGV2ZWwgPSB0YWdMZXZlbDsKLSAgb3BlbkVudGl0
eS0+YmV0d2VlbkRlY2wgPSBiZXR3ZWVuRGVjbDsKLSAgb3BlbkVudGl0eS0+aW50ZXJuYWxFdmVu
dFB0ciA9IE5VTEw7Ci0gIG9wZW5FbnRpdHktPmludGVybmFsRXZlbnRFbmRQdHIgPSBOVUxMOwot
ICB0ZXh0U3RhcnQgPSAoY2hhciAqKWVudGl0eS0+dGV4dFB0cjsKLSAgdGV4dEVuZCA9IChjaGFy
ICopKGVudGl0eS0+dGV4dFB0ciArIGVudGl0eS0+dGV4dExlbik7Ci0KLSNpZmRlZiBYTUxfRFRE
Ci0gIGlmIChlbnRpdHktPmlzX3BhcmFtKSB7Ci0gICAgaW50IHRvayA9IFhtbFByb2xvZ1Rvayhp
bnRlcm5hbEVuY29kaW5nLCB0ZXh0U3RhcnQsIHRleHRFbmQsICZuZXh0KTsKLSAgICByZXN1bHQg
PSBkb1Byb2xvZyhwYXJzZXIsIGludGVybmFsRW5jb2RpbmcsIHRleHRTdGFydCwgdGV4dEVuZCwg
dG9rLAotICAgICAgICAgICAgICAgICAgICAgIG5leHQsICZuZXh0LCBYTUxfRkFMU0UpOwotICB9
Ci0gIGVsc2UKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgcmVzdWx0ID0gZG9Db250ZW50KHBh
cnNlciwgdGFnTGV2ZWwsIGludGVybmFsRW5jb2RpbmcsIHRleHRTdGFydCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dEVuZCwgJm5leHQsIFhNTF9GQUxTRSk7Ci0KLSAgaWYgKHJlc3VsdCA9
PSBYTUxfRVJST1JfTk9ORSkgewotICAgIGlmICh0ZXh0RW5kICE9IG5leHQgJiYgcHNfcGFyc2lu
ZyA9PSBYTUxfU1VTUEVOREVEKSB7Ci0gICAgICBlbnRpdHktPnByb2Nlc3NlZCA9IChpbnQpKG5l
eHQgLSB0ZXh0U3RhcnQpOwotICAgICAgcHJvY2Vzc29yID0gaW50ZXJuYWxFbnRpdHlQcm9jZXNz
b3I7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOwot
ICAgICAgb3BlbkludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5LT5uZXh0OwotICAgICAgLyog
cHV0IG9wZW5FbnRpdHkgYmFjayBpbiBsaXN0IG9mIGZyZWUgaW5zdGFuY2VzICovCi0gICAgICBv
cGVuRW50aXR5LT5uZXh0ID0gZnJlZUludGVybmFsRW50aXRpZXM7Ci0gICAgICBmcmVlSW50ZXJu
YWxFbnRpdGllcyA9IG9wZW5FbnRpdHk7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1pbnRlcm5hbEVudGl0eVByb2Nlc3Nv
cihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0cikKLXsKLSAgRU5USVRZICplbnRpdHk7
Ci0gIGNvbnN0IGNoYXIgKnRleHRTdGFydCwgKnRleHRFbmQ7Ci0gIGNvbnN0IGNoYXIgKm5leHQ7
Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKm9wZW5F
bnRpdHkgPSBvcGVuSW50ZXJuYWxFbnRpdGllczsKLSAgaWYgKCFvcGVuRW50aXR5KQotICAgIHJl
dHVybiBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURTsKLQotICBlbnRpdHkgPSBvcGVuRW50aXR5
LT5lbnRpdHk7Ci0gIHRleHRTdGFydCA9ICgoY2hhciAqKWVudGl0eS0+dGV4dFB0cikgKyBlbnRp
dHktPnByb2Nlc3NlZDsKLSAgdGV4dEVuZCA9IChjaGFyICopKGVudGl0eS0+dGV4dFB0ciArIGVu
dGl0eS0+dGV4dExlbik7Ci0KLSNpZmRlZiBYTUxfRFRECi0gIGlmIChlbnRpdHktPmlzX3BhcmFt
KSB7Ci0gICAgaW50IHRvayA9IFhtbFByb2xvZ1RvayhpbnRlcm5hbEVuY29kaW5nLCB0ZXh0U3Rh
cnQsIHRleHRFbmQsICZuZXh0KTsKLSAgICByZXN1bHQgPSBkb1Byb2xvZyhwYXJzZXIsIGludGVy
bmFsRW5jb2RpbmcsIHRleHRTdGFydCwgdGV4dEVuZCwgdG9rLAotICAgICAgICAgICAgICAgICAg
ICAgIG5leHQsICZuZXh0LCBYTUxfRkFMU0UpOwotICB9Ci0gIGVsc2UKLSNlbmRpZiAvKiBYTUxf
RFREICovCi0gICAgcmVzdWx0ID0gZG9Db250ZW50KHBhcnNlciwgb3BlbkVudGl0eS0+c3RhcnRU
YWdMZXZlbCwgaW50ZXJuYWxFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0
YXJ0LCB0ZXh0RW5kLCAmbmV4dCwgWE1MX0ZBTFNFKTsKLQotICBpZiAocmVzdWx0ICE9IFhNTF9F
UlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIGVsc2UgaWYgKHRleHRFbmQgIT0gbmV4
dCAmJiBwc19wYXJzaW5nID09IFhNTF9TVVNQRU5ERUQpIHsKLSAgICBlbnRpdHktPnByb2Nlc3Nl
ZCA9IChpbnQpKG5leHQgLSAoY2hhciAqKWVudGl0eS0+dGV4dFB0cik7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfQotICBlbHNlIHsKLSAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFMU0U7Ci0gICAg
b3BlbkludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5LT5uZXh0OwotICAgIC8qIHB1dCBvcGVu
RW50aXR5IGJhY2sgaW4gbGlzdCBvZiBmcmVlIGluc3RhbmNlcyAqLwotICAgIG9wZW5FbnRpdHkt
Pm5leHQgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsKLSAgICBmcmVlSW50ZXJuYWxFbnRpdGllcyA9
IG9wZW5FbnRpdHk7Ci0gIH0KLQotI2lmZGVmIFhNTF9EVEQKLSAgaWYgKGVudGl0eS0+aXNfcGFy
YW0pIHsKLSAgICBpbnQgdG9rOwotICAgIHByb2Nlc3NvciA9IHByb2xvZ1Byb2Nlc3NvcjsKLSAg
ICB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHMsIGVuZCwgJm5leHQpOwotICAgIHJldHVy
biBkb1Byb2xvZyhwYXJzZXIsIGVuY29kaW5nLCBzLCBlbmQsIHRvaywgbmV4dCwgbmV4dFB0ciwK
LSAgICAgICAgICAgICAgICAgICAgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7Ci0gIH0KLSAg
ZWxzZQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgewotICAgIHByb2Nlc3NvciA9IGNvbnRlbnRQ
cm9jZXNzb3I7Ci0gICAgLyogc2VlIGV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvciB2cyBj
b250ZW50UHJvY2Vzc29yICovCi0gICAgcmV0dXJuIGRvQ29udGVudChwYXJzZXIsIHBhcmVudFBh
cnNlciA/IDEgOiAwLCBlbmNvZGluZywgcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgbmV4
dFB0ciwgKFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7Ci0gIH0KLX0KLQotc3RhdGljIGVudW0g
WE1MX0Vycm9yIFBUUkNBTEwKLWVycm9yUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqcywKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQotewotICByZXR1cm4gZXJy
b3JDb2RlOwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLXN0b3JlQXR0cmlidXRlVmFsdWUo
WE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsIFhNTF9Cb29sIGlzQ2RhdGEs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAot
ICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTCAqcG9vbCkKLXsKLSAgZW51bSBYTUxfRXJy
b3IgcmVzdWx0ID0gYXBwZW5kQXR0cmlidXRlVmFsdWUocGFyc2VyLCBlbmMsIGlzQ2RhdGEsIHB0
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLCBw
b29sKTsKLSAgaWYgKHJlc3VsdCkKLSAgICByZXR1cm4gcmVzdWx0OwotICBpZiAoIWlzQ2RhdGEg
JiYgcG9vbExlbmd0aChwb29sKSAmJiBwb29sTGFzdENoYXIocG9vbCkgPT0gMHgyMCkKLSAgICBw
b29sQ2hvcChwb29sKTsKLSAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCBYTUxfVCgnXDAnKSkp
Ci0gICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gIHJldHVybiBYTUxfRVJST1JfTk9O
RTsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1hcHBlbmRBdHRyaWJ1dGVWYWx1ZShYTUxf
UGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywgWE1MX0Jvb2wgaXNDZGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAg
ICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0wgKnBvb2wpCi17Ci0gIERURCAqIGNvbnN0IGR0
ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBmb3IgKDs7
KSB7Ci0gICAgY29uc3QgY2hhciAqbmV4dDsKLSAgICBpbnQgdG9rID0gWG1sQXR0cmlidXRlVmFs
dWVUb2soZW5jLCBwdHIsIGVuZCwgJm5leHQpOwotICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgY2Fz
ZSBYTUxfVE9LX05PTkU6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2FzZSBY
TUxfVE9LX0lOVkFMSUQ6Ci0gICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICBldmVu
dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAg
Y2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAg
ICBldmVudFB0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsK
LSAgICBjYXNlIFhNTF9UT0tfQ0hBUl9SRUY6Ci0gICAgICB7Ci0gICAgICAgIFhNTF9DaGFyIGJ1
ZltYTUxfRU5DT0RFX01BWF07Ci0gICAgICAgIGludCBpOwotICAgICAgICBpbnQgbiA9IFhtbENo
YXJSZWZOdW1iZXIoZW5jLCBwdHIpOwotICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICBp
ZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICAgICAgZXZlbnRQdHIgPSBwdHI7Ci0gICAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9CQURfQ0hBUl9SRUY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFpc0NkYXRhCi0gICAgICAgICAgICAmJiBuID09IDB4MjAgLyogc3BhY2UgKi8KLSAgICAgICAg
ICAgICYmIChwb29sTGVuZ3RoKHBvb2wpID09IDAgfHwgcG9vbExhc3RDaGFyKHBvb2wpID09IDB4
MjApKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBuID0gWG1sRW5jb2RlKG4sIChJQ0hBUiAq
KWJ1Zik7Ci0gICAgICAgIGlmICghbikgewotICAgICAgICAgIGlmIChlbmMgPT0gZW5jb2Rpbmcp
Ci0gICAgICAgICAgICBldmVudFB0ciA9IHB0cjsKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X0JBRF9DSEFSX1JFRjsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7Ci0gICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcihwb29sLCBidWZbaV0pKQotICAgICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOgotICAgICAgaWYgKCFwb29s
QXBwZW5kKHBvb2wsIGVuYywgcHRyLCBuZXh0KSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T19NRU1PUlk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfVFJBSUxJTkdfQ1I6Ci0g
ICAgICBuZXh0ID0gcHRyICsgZW5jLT5taW5CeXRlc1BlckNoYXI7Ci0gICAgICAvKiBmYWxsIHRo
cm91Z2ggKi8KLSAgICBjYXNlIFhNTF9UT0tfQVRUUklCVVRFX1ZBTFVFX1M6Ci0gICAgY2FzZSBY
TUxfVE9LX0RBVEFfTkVXTElORToKLSAgICAgIGlmICghaXNDZGF0YSAmJiAocG9vbExlbmd0aChw
b29sKSA9PSAwIHx8IHBvb2xMYXN0Q2hhcihwb29sKSA9PSAweDIwKSkKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2wsIDB4MjApKQotICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19FTlRJ
VFlfUkVGOgotICAgICAgewotICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKLSAgICAgICAg
RU5USVRZICplbnRpdHk7Ci0gICAgICAgIGNoYXIgY2hlY2tFbnRpdHlEZWNsOwotICAgICAgICBY
TUxfQ2hhciBjaCA9IChYTUxfQ2hhcikgWG1sUHJlZGVmaW5lZEVudGl0eU5hbWUoZW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIGVuYy0+bWlu
Qnl0ZXNQZXJDaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmIChjaCkgewotICAg
ICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIocG9vbCwgY2gpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIG5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXAyUG9vbCwgZW5jLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB0ciArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0g
ICAgICAgIGlmICghbmFtZSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
LSAgICAgICAgZW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPmdlbmVyYWxF
bnRpdGllcywgbmFtZSwgMCk7Ci0gICAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wMlBvb2wpOwotICAg
ICAgICAvKiBGaXJzdCwgZGV0ZXJtaW5lIGlmIGEgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIGRlY2xh
cmF0aW9uIGlzIG5lZWRlZDsKLSAgICAgICAgICAgaWYgeWVzLCBjaGVjayB0aGF0IHRoZSBlbnRp
dHkgZXhpc3RzLCBhbmQgdGhhdCBpdCBpcyBpbnRlcm5hbC4KLSAgICAgICAgKi8KLSAgICAgICAg
aWYgKHBvb2wgPT0gJmR0ZC0+cG9vbCkgIC8qIGFyZSB3ZSBjYWxsZWQgZnJvbSBwcm9sb2c/ICov
Ci0gICAgICAgICAgY2hlY2tFbnRpdHlEZWNsID0KLSNpZmRlZiBYTUxfRFRECi0gICAgICAgICAg
ICAgIHByb2xvZ1N0YXRlLmRvY3VtZW50RW50aXR5ICYmCi0jZW5kaWYgLyogWE1MX0RURCAqLwot
ICAgICAgICAgICAgICAoZHRkLT5zdGFuZGFsb25lCi0gICAgICAgICAgICAgICA/ICFvcGVuSW50
ZXJuYWxFbnRpdGllcwotICAgICAgICAgICAgICAgOiAhZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMp
OwotICAgICAgICBlbHNlIC8qIGlmIChwb29sID09ICZ0ZW1wUG9vbCk6IHdlIGFyZSBjYWxsZWQg
ZnJvbSBjb250ZW50ICovCi0gICAgICAgICAgY2hlY2tFbnRpdHlEZWNsID0gIWR0ZC0+aGFzUGFy
YW1FbnRpdHlSZWZzIHx8IGR0ZC0+c3RhbmRhbG9uZTsKLSAgICAgICAgaWYgKGNoZWNrRW50aXR5
RGVjbCkgewotICAgICAgICAgIGlmICghZW50aXR5KQotICAgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9VTkRFRklORURfRU5USVRZOwotICAgICAgICAgIGVsc2UgaWYgKCFlbnRpdHktPmlzX2lu
dGVybmFsKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FTlRJVFlfREVDTEFSRURfSU5f
UEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIWVudGl0eSkgewotICAgICAgICAgIC8q
IENhbm5vdCByZXBvcnQgc2tpcHBlZCBlbnRpdHkgaGVyZSAtIHNlZSBjb21tZW50cyBvbgotICAg
ICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5kbGVyLgotICAgICAgICAgIGlmIChza2lwcGVkRW50
aXR5SGFuZGxlcikKLSAgICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5kbGVyKGhhbmRsZXJBcmcs
IG5hbWUsIDApOwotICAgICAgICAgICovCi0gICAgICAgICAgLyogQ2Fubm90IGNhbGwgdGhlIGRl
ZmF1bHQgaGFuZGxlciBiZWNhdXNlIHRoaXMgd291bGQgYmUKLSAgICAgICAgICAgICBvdXQgb2Yg
c3luYyB3aXRoIHRoZSBjYWxsIHRvIHRoZSBzdGFydEVsZW1lbnRIYW5kbGVyLgotICAgICAgICAg
IGlmICgocG9vbCA9PSAmdGVtcFBvb2wpICYmIGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgICAg
cmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcHRyLCBuZXh0KTsKLSAgICAgICAgICAqLwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbnRpdHktPm9wZW4pIHsKLSAg
ICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICAgICAgZXZlbnRQdHIgPSBwdHI7
Ci0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9SRUNVUlNJVkVfRU5USVRZX1JFRjsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoZW50aXR5LT5ub3RhdGlvbikgewotICAgICAgICAgIGlmIChlbmMg
PT0gZW5jb2RpbmcpCi0gICAgICAgICAgICBldmVudFB0ciA9IHB0cjsKLSAgICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX0JJTkFSWV9FTlRJVFlfUkVGOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
ZW50aXR5LT50ZXh0UHRyKSB7Ci0gICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAg
ICAgICAgIGV2ZW50UHRyID0gcHRyOwotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQVRUUklC
VVRFX0VYVEVSTkFMX0VOVElUWV9SRUY7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0OwotICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp0
ZXh0RW5kID0gZW50aXR5LT50ZXh0UHRyICsgZW50aXR5LT50ZXh0TGVuOwotICAgICAgICAgIGVu
dGl0eS0+b3BlbiA9IFhNTF9UUlVFOwotICAgICAgICAgIHJlc3VsdCA9IGFwcGVuZEF0dHJpYnV0
ZVZhbHVlKHBhcnNlciwgaW50ZXJuYWxFbmNvZGluZywgaXNDZGF0YSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWVudGl0eS0+dGV4dFB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXRleHRFbmQsIHBvb2wp
OwotICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAg
ICAgIGV2ZW50UHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkVYUEVDVEVEX1NU
QVRFOwotICAgIH0KLSAgICBwdHIgPSBuZXh0OwotICB9Ci0gIC8qIG5vdCByZWFjaGVkICovCi19
Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotc3RvcmVFbnRpdHlWYWx1ZShYTUxfUGFyc2VyIHBh
cnNlciwKLSAgICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZW50aXR5VGV4dFB0ciwKLSAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqZW50aXR5VGV4dEVuZCkKLXsKLSAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNh
dmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCi0gIFNUUklOR19QT09MICpwb29sID0gJihk
dGQtPmVudGl0eVZhbHVlUG9vbCk7Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IFhNTF9FUlJP
Ul9OT05FOwotI2lmZGVmIFhNTF9EVEQKLSAgaW50IG9sZEluRW50aXR5VmFsdWUgPSBwcm9sb2dT
dGF0ZS5pbkVudGl0eVZhbHVlOwotICBwcm9sb2dTdGF0ZS5pbkVudGl0eVZhbHVlID0gMTsKLSNl
bmRpZiAvKiBYTUxfRFREICovCi0gIC8qIG5ldmVyIHJldHVybiBOdWxsIGZvciB0aGUgdmFsdWUg
YXJndW1lbnQgaW4gRW50aXR5RGVjbEhhbmRsZXIsCi0gICAgIHNpbmNlIHRoaXMgd291bGQgaW5k
aWNhdGUgYW4gZXh0ZXJuYWwgZW50aXR5OyB0aGVyZWZvcmUgd2UKLSAgICAgaGF2ZSB0byBtYWtl
IHN1cmUgdGhhdCBlbnRpdHlWYWx1ZVBvb2wuc3RhcnQgaXMgbm90IG51bGwgKi8KLSAgaWYgKCFw
b29sLT5ibG9ja3MpIHsKLSAgICBpZiAoIXBvb2xHcm93KHBvb2wpKQotICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7Ci0gIH0KLQotICBmb3IgKDs7KSB7Ci0gICAgY29uc3QgY2hhciAq
bmV4dDsKLSAgICBpbnQgdG9rID0gWG1sRW50aXR5VmFsdWVUb2soZW5jLCBlbnRpdHlUZXh0UHRy
LCBlbnRpdHlUZXh0RW5kLCAmbmV4dCk7Ci0gICAgc3dpdGNoICh0b2spIHsKLSAgICBjYXNlIFhN
TF9UT0tfUEFSQU1fRU5USVRZX1JFRjoKLSNpZmRlZiBYTUxfRFRECi0gICAgICBpZiAoaXNQYXJh
bUVudGl0eSB8fCBlbmMgIT0gZW5jb2RpbmcpIHsKLSAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5h
bWU7Ci0gICAgICAgIEVOVElUWSAqZW50aXR5OwotICAgICAgICBuYW1lID0gcG9vbFN0b3JlU3Ry
aW5nKCZ0ZW1wUG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0
eVRleHRQdHIgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBpZiAoIW5hbWUp
IHsKLSAgICAgICAgICByZXN1bHQgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgIGdv
dG8gZW5kRW50aXR5VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZW50aXR5ID0gKEVOVElUWSAq
KWxvb2t1cChwYXJzZXIsICZkdGQtPnBhcmFtRW50aXRpZXMsIG5hbWUsIDApOwotICAgICAgICBw
b29sRGlzY2FyZCgmdGVtcFBvb2wpOwotICAgICAgICBpZiAoIWVudGl0eSkgewotICAgICAgICAg
IC8qIG5vdCBhIHdlbGwtZm9ybWVkbmVzcyBlcnJvciAtIHNlZSBYTUwgMS4wOiBXRkMgRW50aXR5
IERlY2xhcmVkICovCi0gICAgICAgICAgLyogY2Fubm90IHJlcG9ydCBza2lwcGVkIGVudGl0eSBo
ZXJlIC0gc2VlIGNvbW1lbnRzIG9uCi0gICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIK
LSAgICAgICAgICBpZiAoc2tpcHBlZEVudGl0eUhhbmRsZXIpCi0gICAgICAgICAgICBza2lwcGVk
RW50aXR5SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLCAwKTsKLSAgICAgICAgICAqLwotICAgICAg
ICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7Ci0gICAgICAgICAgZ290
byBlbmRFbnRpdHlWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW50aXR5LT5vcGVuKSB7
Ci0gICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAgICAgICAgIGV2ZW50UHRyID0g
ZW50aXR5VGV4dFB0cjsKLSAgICAgICAgICByZXN1bHQgPSBYTUxfRVJST1JfUkVDVVJTSVZFX0VO
VElUWV9SRUY7Ci0gICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoZW50aXR5LT5zeXN0ZW1JZCkgewotICAgICAgICAgIGlmIChleHRlcm5hbEVudGl0
eVJlZkhhbmRsZXIpIHsKLSAgICAgICAgICAgIGR0ZC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZB
TFNFOwotICAgICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX1RSVUU7Ci0gICAgICAgICAgICBp
ZiAoIWV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5iYXNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5zeXN0ZW1JZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+cHVibGljSWQpKSB7
Ci0gICAgICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgICAgICAgICAg
cmVzdWx0ID0gWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORzsKLSAgICAgICAgICAg
ICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVudGl0
eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgICAgICAgIGlmICghZHRkLT5wYXJhbUVudGl0eVJl
YWQpCi0gICAgICAgICAgICAgIGR0ZC0+a2VlcFByb2Nlc3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGR0ZC0+a2VlcFByb2Nl
c3NpbmcgPSBkdGQtPnN0YW5kYWxvbmU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgZW50aXR5LT5vcGVuID0gWE1MX1RSVUU7Ci0gICAgICAgICAgcmVzdWx0ID0gc3RvcmVF
bnRpdHlWYWx1ZShwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKillbnRpdHktPnRleHRQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKShlbnRpdHktPnRleHRQdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgZW50aXR5LT50ZXh0TGVuKSk7Ci0gICAgICAgICAgZW50aXR5LT5v
cGVuID0gWE1MX0ZBTFNFOwotICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBnb3Rv
IGVuZEVudGl0eVZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotI2Vu
ZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgIC8qIEluIHRoZSBpbnRlcm5hbCBzdWJzZXQsIFBFIHJl
ZmVyZW5jZXMgYXJlIG5vdCBsZWdhbAotICAgICAgICAgd2l0aGluIG1hcmt1cCBkZWNsYXJhdGlv
bnMsIGUuZyBlbnRpdHkgdmFsdWVzIGluIHRoaXMgY2FzZS4gKi8KLSAgICAgIGV2ZW50UHRyID0g
ZW50aXR5VGV4dFB0cjsKLSAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVG
OwotICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICBjYXNlIFhNTF9UT0tfTk9ORToKLSAg
ICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT05FOwotICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsK
LSAgICBjYXNlIFhNTF9UT0tfRU5USVRZX1JFRjoKLSAgICBjYXNlIFhNTF9UT0tfREFUQV9DSEFS
UzoKLSAgICAgIGlmICghcG9vbEFwcGVuZChwb29sLCBlbmMsIGVudGl0eVRleHRQdHIsIG5leHQp
KSB7Ci0gICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGdvdG8g
ZW5kRW50aXR5VmFsdWU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tf
VFJBSUxJTkdfQ1I6Ci0gICAgICBuZXh0ID0gZW50aXR5VGV4dFB0ciArIGVuYy0+bWluQnl0ZXNQ
ZXJDaGFyOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBYTUxfVE9LX0RBVEFf
TkVXTElORToKLSAgICAgIGlmIChwb29sLT5lbmQgPT0gcG9vbC0+cHRyICYmICFwb29sR3Jvdyhw
b29sKSkgewotICAgICAgICAgICAgICByZXN1bHQgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAg
ICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwotICAgICAgfQotICAgICAgKihwb29sLT5wdHIpKysg
PSAweEE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfQ0hBUl9SRUY6Ci0gICAgICB7
Ci0gICAgICAgIFhNTF9DaGFyIGJ1ZltYTUxfRU5DT0RFX01BWF07Ci0gICAgICAgIGludCBpOwot
ICAgICAgICBpbnQgbiA9IFhtbENoYXJSZWZOdW1iZXIoZW5jLCBlbnRpdHlUZXh0UHRyKTsKLSAg
ICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAg
ICAgICAgIGV2ZW50UHRyID0gZW50aXR5VGV4dFB0cjsKLSAgICAgICAgICByZXN1bHQgPSBYTUxf
RVJST1JfQkFEX0NIQVJfUkVGOwotICAgICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgbiA9IFhtbEVuY29kZShuLCAoSUNIQVIgKilidWYpOwotICAgICAgICBp
ZiAoIW4pIHsKLSAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICAgICAgZXZl
bnRQdHIgPSBlbnRpdHlUZXh0UHRyOwotICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9CQURf
Q0hBUl9SRUY7Ci0gICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICAgICAgfQotICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgaWYgKHBvb2wtPmVuZCA9
PSBwb29sLT5wdHIgJiYgIXBvb2xHcm93KHBvb2wpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBY
TUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgKihwb29sLT5wdHIpKysgPSBidWZbaV07Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgotICAgICAg
aWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRyOwot
ICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAgICBnb3RvIGVuZEVu
dGl0eVZhbHVlOwotICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgaWYgKGVuYyA9PSBl
bmNvZGluZykKLSAgICAgICAgZXZlbnRQdHIgPSBuZXh0OwotICAgICAgcmVzdWx0ID0gWE1MX0VS
Uk9SX0lOVkFMSURfVE9LRU47Ci0gICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICBldmVudFB0ciA9IGVudGl0
eVRleHRQdHI7Ci0gICAgICByZXN1bHQgPSBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURTsKLSAg
ICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0gICAgfQotICAgIGVudGl0eVRleHRQdHIgPSBuZXh0
OwotICB9Ci1lbmRFbnRpdHlWYWx1ZToKLSNpZmRlZiBYTUxfRFRECi0gIHByb2xvZ1N0YXRlLmlu
RW50aXR5VmFsdWUgPSBvbGRJbkVudGl0eVZhbHVlOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgRkFTVENBTEwKLW5vcm1hbGl6ZUxpbmVz
KFhNTF9DaGFyICpzKQotewotICBYTUxfQ2hhciAqcDsKLSAgZm9yICg7OyBzKyspIHsKLSAgICBp
ZiAoKnMgPT0gWE1MX1QoJ1wwJykpCi0gICAgICByZXR1cm47Ci0gICAgaWYgKCpzID09IDB4RCkK
LSAgICAgIGJyZWFrOwotICB9Ci0gIHAgPSBzOwotICBkbyB7Ci0gICAgaWYgKCpzID09IDB4RCkg
ewotICAgICAgKnArKyA9IDB4QTsKLSAgICAgIGlmICgqKytzID09IDB4QSkKLSAgICAgICAgcysr
OwotICAgIH0KLSAgICBlbHNlCi0gICAgICAqcCsrID0gKnMrKzsKLSAgfSB3aGlsZSAoKnMpOwot
ICAqcCA9IFhNTF9UKCdcMCcpOwotfQotCi1zdGF0aWMgaW50Ci1yZXBvcnRQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkK
LXsKLSAgY29uc3QgWE1MX0NoYXIgKnRhcmdldDsKLSAgWE1MX0NoYXIgKmRhdGE7Ci0gIGNvbnN0
IGNoYXIgKnRlbTsKLSAgaWYgKCFwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKSB7Ci0gICAg
aWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgc3Rh
cnQsIGVuZCk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgc3RhcnQgKz0gZW5jLT5taW5CeXRlc1Bl
ckNoYXIgKiAyOwotICB0ZW0gPSBzdGFydCArIFhtbE5hbWVMZW5ndGgoZW5jLCBzdGFydCk7Ci0g
IHRhcmdldCA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywgc3RhcnQsIHRlbSk7Ci0g
IGlmICghdGFyZ2V0KQotICAgIHJldHVybiAwOwotICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0g
IGRhdGEgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBYbWxTa2lwUyhlbmMsIHRlbSksCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQg
LSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcioyKTsKLSAgaWYgKCFkYXRhKQotICAgIHJldHVybiAwOwot
ICBub3JtYWxpemVMaW5lcyhkYXRhKTsKLSAgcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciho
YW5kbGVyQXJnLCB0YXJnZXQsIGRhdGEpOwotICBwb29sQ2xlYXIoJnRlbXBQb29sKTsKLSAgcmV0
dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXJlcG9ydENvbW1lbnQoWE1MX1BhcnNlciBwYXJzZXIs
IGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCBj
b25zdCBjaGFyICplbmQpCi17Ci0gIFhNTF9DaGFyICpkYXRhOwotICBpZiAoIWNvbW1lbnRIYW5k
bGVyKSB7Ci0gICAgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJz
ZXIsIGVuYywgc3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgZGF0YSA9IHBvb2xT
dG9yZVN0cmluZygmdGVtcFBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgZW5jLT5taW5CeXRlc1BlckNoYXIgKiA0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyICogMyk7
Ci0gIGlmICghZGF0YSkKLSAgICByZXR1cm4gMDsKLSAgbm9ybWFsaXplTGluZXMoZGF0YSk7Ci0g
IGNvbW1lbnRIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGEpOwotICBwb29sQ2xlYXIoJnRlbXBQb29s
KTsKLSAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXBvcnREZWZhdWx0KFhNTF9QYXJz
ZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpzLCBjb25zdCBjaGFyICplbmQpCi17Ci0gIGlmIChNVVNUX0NPTlZFUlQoZW5jLCBzKSkgewot
ICAgIGNvbnN0IGNoYXIgKipldmVudFBQOwotICAgIGNvbnN0IGNoYXIgKipldmVudEVuZFBQOwot
ICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpIHsKLSAgICAgIGV2ZW50UFAgPSAmZXZlbnRQdHI7Ci0g
ICAgICBldmVudEVuZFBQID0gJmV2ZW50RW5kUHRyOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAg
IGV2ZW50UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50UHRyKTsKLSAg
ICAgIGV2ZW50RW5kUFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50RW5k
UHRyKTsKLSAgICB9Ci0gICAgZG8gewotICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilk
YXRhQnVmOwotICAgICAgWG1sQ29udmVydChlbmMsICZzLCBlbmQsICZkYXRhUHRyLCAoSUNIQVIg
KilkYXRhQnVmRW5kKTsKLSAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgIGRlZmF1bHRIYW5k
bGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsIChpbnQpKGRhdGFQdHIgLSAoSUNIQVIgKilkYXRhQnVm
KSk7Ci0gICAgICAqZXZlbnRQUCA9IHM7Ci0gICAgfSB3aGlsZSAocyAhPSBlbmQpOwotICB9Ci0g
IGVsc2UKLSAgICBkZWZhdWx0SGFuZGxlcihoYW5kbGVyQXJnLCAoWE1MX0NoYXIgKilzLCAoaW50
KSgoWE1MX0NoYXIgKillbmQgLSAoWE1MX0NoYXIgKilzKSk7Ci19Ci0KLQotc3RhdGljIGludAot
ZGVmaW5lQXR0cmlidXRlKEVMRU1FTlRfVFlQRSAqdHlwZSwgQVRUUklCVVRFX0lEICphdHRJZCwg
WE1MX0Jvb2wgaXNDZGF0YSwKLSAgICAgICAgICAgICAgICBYTUxfQm9vbCBpc0lkLCBjb25zdCBY
TUxfQ2hhciAqdmFsdWUsIFhNTF9QYXJzZXIgcGFyc2VyKQotewotICBERUZBVUxUX0FUVFJJQlVU
RSAqYXR0OwotICBpZiAodmFsdWUgfHwgaXNJZCkgewotICAgIC8qIFRoZSBoYW5kbGluZyBvZiBk
ZWZhdWx0IGF0dHJpYnV0ZXMgZ2V0cyBtZXNzZWQgdXAgaWYgd2UgaGF2ZQotICAgICAgIGEgZGVm
YXVsdCB3aGljaCBkdXBsaWNhdGVzIGEgbm9uLWRlZmF1bHQuICovCi0gICAgaW50IGk7Ci0gICAg
Zm9yIChpID0gMDsgaSA8IHR5cGUtPm5EZWZhdWx0QXR0czsgaSsrKQotICAgICAgaWYgKGF0dElk
ID09IHR5cGUtPmRlZmF1bHRBdHRzW2ldLmlkKQotICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAo
aXNJZCAmJiAhdHlwZS0+aWRBdHQgJiYgIWF0dElkLT54bWxucykKLSAgICAgIHR5cGUtPmlkQXR0
ID0gYXR0SWQ7Ci0gIH0KLSAgaWYgKHR5cGUtPm5EZWZhdWx0QXR0cyA9PSB0eXBlLT5hbGxvY0Rl
ZmF1bHRBdHRzKSB7Ci0gICAgaWYgKHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMgPT0gMCkgewotICAg
ICAgdHlwZS0+YWxsb2NEZWZhdWx0QXR0cyA9IDg7Ci0gICAgICB0eXBlLT5kZWZhdWx0QXR0cyA9
IChERUZBVUxUX0FUVFJJQlVURSAqKU1BTExPQyh0eXBlLT5hbGxvY0RlZmF1bHRBdHRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YoREVGQVVMVF9BVFRSSUJVVEUpKTsKLSAg
ICAgIGlmICghdHlwZS0+ZGVmYXVsdEF0dHMpCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICBlbHNlIHsKLSAgICAgIERFRkFVTFRfQVRUUklCVVRFICp0ZW1wOwotICAgICAgaW50IGNvdW50
ID0gdHlwZS0+YWxsb2NEZWZhdWx0QXR0cyAqIDI7Ci0gICAgICB0ZW1wID0gKERFRkFVTFRfQVRU
UklCVVRFICopCi0gICAgICAgIFJFQUxMT0ModHlwZS0+ZGVmYXVsdEF0dHMsIChjb3VudCAqIHNp
emVvZihERUZBVUxUX0FUVFJJQlVURSkpKTsKLSAgICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAg
ICAgIHJldHVybiAwOwotICAgICAgdHlwZS0+YWxsb2NEZWZhdWx0QXR0cyA9IGNvdW50OwotICAg
ICAgdHlwZS0+ZGVmYXVsdEF0dHMgPSB0ZW1wOwotICAgIH0KLSAgfQotICBhdHQgPSB0eXBlLT5k
ZWZhdWx0QXR0cyArIHR5cGUtPm5EZWZhdWx0QXR0czsKLSAgYXR0LT5pZCA9IGF0dElkOwotICBh
dHQtPnZhbHVlID0gdmFsdWU7Ci0gIGF0dC0+aXNDZGF0YSA9IGlzQ2RhdGE7Ci0gIGlmICghaXND
ZGF0YSkKLSAgICBhdHRJZC0+bWF5YmVUb2tlbml6ZWQgPSBYTUxfVFJVRTsKLSAgdHlwZS0+bkRl
ZmF1bHRBdHRzICs9IDE7Ci0gIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci1zZXRFbGVtZW50
VHlwZVByZWZpeChYTUxfUGFyc2VyIHBhcnNlciwgRUxFTUVOVF9UWVBFICplbGVtZW50VHlwZSkK
LXsKLSAgRFREICogY29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGly
ZWN0aW9uICovCi0gIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICBmb3IgKG5hbWUgPSBlbGVtZW50
VHlwZS0+bmFtZTsgKm5hbWU7IG5hbWUrKykgewotICAgIGlmICgqbmFtZSA9PSBYTUxfVChBU0NJ
SV9DT0xPTikpIHsKLSAgICAgIFBSRUZJWCAqcHJlZml4OwotICAgICAgY29uc3QgWE1MX0NoYXIg
KnM7Ci0gICAgICBmb3IgKHMgPSBlbGVtZW50VHlwZS0+bmFtZTsgcyAhPSBuYW1lOyBzKyspIHsK
LSAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmZHRkLT5wb29sLCAqcykpCi0gICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQtPnBvb2ws
IFhNTF9UKCdcMCcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBwcmVmaXggPSAoUFJFRklY
ICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cHJlZml4ZXMsIHBvb2xTdGFydCgmZHRkLT5wb29sKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFBSRUZJWCkpOwotICAgICAg
aWYgKCFwcmVmaXgpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgaWYgKHByZWZpeC0+bmFtZSA9
PSBwb29sU3RhcnQoJmR0ZC0+cG9vbCkpCi0gICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7
Ci0gICAgICBlbHNlCi0gICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOwotICAgICAgZWxl
bWVudFR5cGUtPnByZWZpeCA9IHByZWZpeDsKLQotICAgIH0KLSAgfQotICByZXR1cm4gMTsKLX0K
LQotc3RhdGljIEFUVFJJQlVURV9JRCAqCi1nZXRBdHRyaWJ1dGVJZChYTUxfUGFyc2VyIHBhcnNl
ciwgY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0
LCBjb25zdCBjaGFyICplbmQpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZl
IG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBBVFRSSUJVVEVfSUQgKmlkOwotICBjb25z
dCBYTUxfQ2hhciAqbmFtZTsKLSAgaWYgKCFwb29sQXBwZW5kQ2hhcigmZHRkLT5wb29sLCBYTUxf
VCgnXDAnKSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIG5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJmR0
ZC0+cG9vbCwgZW5jLCBzdGFydCwgZW5kKTsKLSAgaWYgKCFuYW1lKQotICAgIHJldHVybiBOVUxM
OwotICAvKiBza2lwIHF1b3RhdGlvbiBtYXJrIC0gaXRzIHN0b3JhZ2Ugd2lsbCBiZSByZS11c2Vk
IChsaWtlIGluIG5hbWVbLTFdKSAqLwotICArK25hbWU7Ci0gIGlkID0gKEFUVFJJQlVURV9JRCAq
KWxvb2t1cChwYXJzZXIsICZkdGQtPmF0dHJpYnV0ZUlkcywgbmFtZSwgc2l6ZW9mKEFUVFJJQlVU
RV9JRCkpOwotICBpZiAoIWlkKQotICAgIHJldHVybiBOVUxMOwotICBpZiAoaWQtPm5hbWUgIT0g
bmFtZSkKLSAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgZWxzZSB7Ci0gICAgcG9vbEZp
bmlzaCgmZHRkLT5wb29sKTsKLSAgICBpZiAoIW5zKQotICAgICAgOwotICAgIGVsc2UgaWYgKG5h
bWVbMF0gPT0gWE1MX1QoQVNDSUlfeCkKLSAgICAgICAgJiYgbmFtZVsxXSA9PSBYTUxfVChBU0NJ
SV9tKQotICAgICAgICAmJiBuYW1lWzJdID09IFhNTF9UKEFTQ0lJX2wpCi0gICAgICAgICYmIG5h
bWVbM10gPT0gWE1MX1QoQVNDSUlfbikKLSAgICAgICAgJiYgbmFtZVs0XSA9PSBYTUxfVChBU0NJ
SV9zKQotICAgICAgICAmJiAobmFtZVs1XSA9PSBYTUxfVCgnXDAnKSB8fCBuYW1lWzVdID09IFhN
TF9UKEFTQ0lJX0NPTE9OKSkpIHsKLSAgICAgIGlmIChuYW1lWzVdID09IFhNTF9UKCdcMCcpKQot
ICAgICAgICBpZC0+cHJlZml4ID0gJmR0ZC0+ZGVmYXVsdFByZWZpeDsKLSAgICAgIGVsc2UKLSAg
ICAgICAgaWQtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFyc2VyLCAmZHRkLT5wcmVmaXhl
cywgbmFtZSArIDYsIHNpemVvZihQUkVGSVgpKTsKLSAgICAgIGlkLT54bWxucyA9IFhNTF9UUlVF
OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGludCBpOwotICAgICAgZm9yIChpID0gMDsgbmFt
ZVtpXTsgaSsrKSB7Ci0gICAgICAgIC8qIGF0dHJpYnV0ZXMgd2l0aG91dCBwcmVmaXggYXJlICpu
b3QqIGluIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSAqLwotICAgICAgICBpZiAobmFtZVtpXSA9PSBY
TUxfVChBU0NJSV9DT0xPTikpIHsKLSAgICAgICAgICBpbnQgajsKLSAgICAgICAgICBmb3IgKGog
PSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZkdGQt
PnBvb2wsIG5hbWVbal0pKQotICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmZHRkLT5wb29sLCBYTUxfVCgnXDAnKSkp
Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICBpZC0+cHJlZml4ID0gKFBSRUZJ
WCAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnByZWZpeGVzLCBwb29sU3RhcnQoJmR0ZC0+cG9vbCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFBSRUZJWCkp
OwotICAgICAgICAgIGlmIChpZC0+cHJlZml4LT5uYW1lID09IHBvb2xTdGFydCgmZHRkLT5wb29s
KSkKLSAgICAgICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGlkOwotfQotCi0jZGVmaW5l
IENPTlRFWFRfU0VQIFhNTF9UKEFTQ0lJX0ZGKQotCi1zdGF0aWMgY29uc3QgWE1MX0NoYXIgKgot
Z2V0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgRFREICogY29uc3QgZHRkID0gX2R0
ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCi0gIEhBU0hfVEFCTEVfSVRF
UiBpdGVyOwotICBYTUxfQm9vbCBuZWVkU2VwID0gWE1MX0ZBTFNFOwotCi0gIGlmIChkdGQtPmRl
ZmF1bHRQcmVmaXguYmluZGluZykgewotICAgIGludCBpOwotICAgIGludCBsZW47Ci0gICAgaWYg
KCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKEFTQ0lJX0VRVUFMUykpKQotICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgbGVuID0gZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmctPnVyaUxl
bjsKLSAgICBpZiAobmFtZXNwYWNlU2VwYXJhdG9yKQotICAgICAgbGVuLS07Ci0gICAgZm9yIChp
ID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2ws
IGR0ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nLT51cmlbaV0pKQotICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICBuZWVkU2VwID0gWE1MX1RSVUU7Ci0gIH0KLQotICBoYXNoVGFibGVJdGVySW5pdCgm
aXRlciwgJihkdGQtPnByZWZpeGVzKSk7Ci0gIGZvciAoOzspIHsKLSAgICBpbnQgaTsKLSAgICBp
bnQgbGVuOwotICAgIGNvbnN0IFhNTF9DaGFyICpzOwotICAgIFBSRUZJWCAqcHJlZml4ID0gKFBS
RUZJWCAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKLSAgICBpZiAoIXByZWZpeCkKLSAgICAg
IGJyZWFrOwotICAgIGlmICghcHJlZml4LT5iaW5kaW5nKQotICAgICAgY29udGludWU7Ci0gICAg
aWYgKG5lZWRTZXAgJiYgIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgQ09OVEVYVF9TRVApKQot
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChzID0gcHJlZml4LT5uYW1lOyAqczsgcysrKQot
ICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsICpzKSkKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKEFTQ0lJX0VR
VUFMUykpKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbGVuID0gcHJlZml4LT5iaW5kaW5nLT51
cmlMZW47Ci0gICAgaWYgKG5hbWVzcGFjZVNlcGFyYXRvcikKLSAgICAgIGxlbi0tOwotICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQ
b29sLCBwcmVmaXgtPmJpbmRpbmctPnVyaVtpXSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAg
IG5lZWRTZXAgPSBYTUxfVFJVRTsKLSAgfQotCi0KLSAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIs
ICYoZHRkLT5nZW5lcmFsRW50aXRpZXMpKTsKLSAgZm9yICg7OykgewotICAgIGNvbnN0IFhNTF9D
aGFyICpzOwotICAgIEVOVElUWSAqZSA9IChFTlRJVFkgKiloYXNoVGFibGVJdGVyTmV4dCgmaXRl
cik7Ci0gICAgaWYgKCFlKQotICAgICAgYnJlYWs7Ci0gICAgaWYgKCFlLT5vcGVuKQotICAgICAg
Y29udGludWU7Ci0gICAgaWYgKG5lZWRTZXAgJiYgIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwg
Q09OVEVYVF9TRVApKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChzID0gZS0+bmFtZTsg
KnM7IHMrKykKLSAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCAqcykpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIG5lZWRTZXAgPSBYTUxfVFJVRTsKLSAgfQotCi0gIGlmICghcG9v
bEFwcGVuZENoYXIoJnRlbXBQb29sLCBYTUxfVCgnXDAnKSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0g
IHJldHVybiB0ZW1wUG9vbC5zdGFydDsKLX0KLQotc3RhdGljIFhNTF9Cb29sCi1zZXRDb250ZXh0
KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqY29udGV4dCkKLXsKLSAgRFREICog
Y29uc3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCi0g
IGNvbnN0IFhNTF9DaGFyICpzID0gY29udGV4dDsKLQotICB3aGlsZSAoKmNvbnRleHQgIT0gWE1M
X1QoJ1wwJykpIHsKLSAgICBpZiAoKnMgPT0gQ09OVEVYVF9TRVAgfHwgKnMgPT0gWE1MX1QoJ1ww
JykpIHsKLSAgICAgIEVOVElUWSAqZTsKLSAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQ
b29sLCBYTUxfVCgnXDAnKSkpCi0gICAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICBlID0g
KEVOVElUWSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPmdlbmVyYWxFbnRpdGllcywgcG9vbFN0YXJ0
KCZ0ZW1wUG9vbCksIDApOwotICAgICAgaWYgKGUpCi0gICAgICAgIGUtPm9wZW4gPSBYTUxfVFJV
RTsKLSAgICAgIGlmICgqcyAhPSBYTUxfVCgnXDAnKSkKLSAgICAgICAgcysrOwotICAgICAgY29u
dGV4dCA9IHM7Ci0gICAgICBwb29sRGlzY2FyZCgmdGVtcFBvb2wpOwotICAgIH0KLSAgICBlbHNl
IGlmICgqcyA9PSBYTUxfVChBU0NJSV9FUVVBTFMpKSB7Ci0gICAgICBQUkVGSVggKnByZWZpeDsK
LSAgICAgIGlmIChwb29sTGVuZ3RoKCZ0ZW1wUG9vbCkgPT0gMCkKLSAgICAgICAgcHJlZml4ID0g
JmR0ZC0+ZGVmYXVsdFByZWZpeDsKLSAgICAgIGVsc2UgewotICAgICAgICBpZiAoIXBvb2xBcHBl
bmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJ1wwJykpKQotICAgICAgICAgIHJldHVybiBYTUxfRkFM
U0U7Ci0gICAgICAgIHByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFyc2VyLCAmZHRkLT5wcmVm
aXhlcywgcG9vbFN0YXJ0KCZ0ZW1wUG9vbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKFBSRUZJWCkpOwotICAgICAgICBpZiAoIXByZWZpeCkKLSAgICAgICAgICBy
ZXR1cm4gWE1MX0ZBTFNFOwotICAgICAgICBpZiAocHJlZml4LT5uYW1lID09IHBvb2xTdGFydCgm
dGVtcFBvb2wpKSB7Ci0gICAgICAgICAgcHJlZml4LT5uYW1lID0gcG9vbENvcHlTdHJpbmcoJmR0
ZC0+cG9vbCwgcHJlZml4LT5uYW1lKTsKLSAgICAgICAgICBpZiAoIXByZWZpeC0+bmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgcG9vbERpc2Nh
cmQoJnRlbXBQb29sKTsKLSAgICAgIH0KLSAgICAgIGZvciAoY29udGV4dCA9IHMgKyAxOwotICAg
ICAgICAgICAqY29udGV4dCAhPSBDT05URVhUX1NFUCAmJiAqY29udGV4dCAhPSBYTUxfVCgnXDAn
KTsKLSAgICAgICAgICAgY29udGV4dCsrKQotICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0
ZW1wUG9vbCwgKmNvbnRleHQpKQotICAgICAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICBp
ZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJ1wwJykpKQotICAgICAgICByZXR1
cm4gWE1MX0ZBTFNFOwotICAgICAgaWYgKGFkZEJpbmRpbmcocGFyc2VyLCBwcmVmaXgsIE5VTEws
IHBvb2xTdGFydCgmdGVtcFBvb2wpLAotICAgICAgICAgICAgICAgICAgICAgJmluaGVyaXRlZEJp
bmRpbmdzKSAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKLSAg
ICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7Ci0gICAgICBpZiAoKmNvbnRleHQgIT0gWE1MX1Qo
J1wwJykpCi0gICAgICAgICsrY29udGV4dDsKLSAgICAgIHMgPSBjb250ZXh0OwotICAgIH0KLSAg
ICBlbHNlIHsKLSAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCAqcykpCi0gICAg
ICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICBzKys7Ci0gICAgfQotICB9Ci0gIHJldHVybiBY
TUxfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgRkFTVENBTEwKLW5vcm1hbGl6ZVB1YmxpY0lkKFhN
TF9DaGFyICpwdWJsaWNJZCkKLXsKLSAgWE1MX0NoYXIgKnAgPSBwdWJsaWNJZDsKLSAgWE1MX0No
YXIgKnM7Ci0gIGZvciAocyA9IHB1YmxpY0lkOyAqczsgcysrKSB7Ci0gICAgc3dpdGNoICgqcykg
ewotICAgIGNhc2UgMHgyMDoKLSAgICBjYXNlIDB4RDoKLSAgICBjYXNlIDB4QToKLSAgICAgIGlm
IChwICE9IHB1YmxpY0lkICYmIHBbLTFdICE9IDB4MjApCi0gICAgICAgICpwKysgPSAweDIwOwot
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICpwKysgPSAqczsKLSAgICB9Ci0gIH0K
LSAgaWYgKHAgIT0gcHVibGljSWQgJiYgcFstMV0gPT0gMHgyMCkKLSAgICAtLXA7Ci0gICpwID0g
WE1MX1QoJ1wwJyk7Ci19Ci0KLXN0YXRpYyBEVEQgKgotZHRkQ3JlYXRlKGNvbnN0IFhNTF9NZW1v
cnlfSGFuZGxpbmdfU3VpdGUgKm1zKQotewotICBEVEQgKnAgPSAoRFREICopbXMtPm1hbGxvY19m
Y24oc2l6ZW9mKERURCkpOwotICBpZiAocCA9PSBOVUxMKQotICAgIHJldHVybiBwOwotICBwb29s
SW5pdCgmKHAtPnBvb2wpLCBtcyk7Ci0gIHBvb2xJbml0KCYocC0+ZW50aXR5VmFsdWVQb29sKSwg
bXMpOwotICBoYXNoVGFibGVJbml0KCYocC0+Z2VuZXJhbEVudGl0aWVzKSwgbXMpOwotICBoYXNo
VGFibGVJbml0KCYocC0+ZWxlbWVudFR5cGVzKSwgbXMpOwotICBoYXNoVGFibGVJbml0KCYocC0+
YXR0cmlidXRlSWRzKSwgbXMpOwotICBoYXNoVGFibGVJbml0KCYocC0+cHJlZml4ZXMpLCBtcyk7
Ci0jaWZkZWYgWE1MX0RURAotICBwLT5wYXJhbUVudGl0eVJlYWQgPSBYTUxfRkFMU0U7Ci0gIGhh
c2hUYWJsZUluaXQoJihwLT5wYXJhbUVudGl0aWVzKSwgbXMpOwotI2VuZGlmIC8qIFhNTF9EVEQg
Ki8KLSAgcC0+ZGVmYXVsdFByZWZpeC5uYW1lID0gTlVMTDsKLSAgcC0+ZGVmYXVsdFByZWZpeC5i
aW5kaW5nID0gTlVMTDsKLQotICBwLT5pbl9lbGRlY2wgPSBYTUxfRkFMU0U7Ci0gIHAtPnNjYWZm
SW5kZXggPSBOVUxMOwotICBwLT5zY2FmZm9sZCA9IE5VTEw7Ci0gIHAtPnNjYWZmTGV2ZWwgPSAw
OwotICBwLT5zY2FmZlNpemUgPSAwOwotICBwLT5zY2FmZkNvdW50ID0gMDsKLSAgcC0+Y29udGVu
dFN0cmluZ0xlbiA9IDA7Ci0KLSAgcC0+a2VlcFByb2Nlc3NpbmcgPSBYTUxfVFJVRTsKLSAgcC0+
aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX0ZBTFNFOwotICBwLT5zdGFuZGFsb25lID0gWE1MX0ZB
TFNFOwotICByZXR1cm4gcDsKLX0KLQotc3RhdGljIHZvaWQKLWR0ZFJlc2V0KERURCAqcCwgY29u
c3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpCi17Ci0gIEhBU0hfVEFCTEVfSVRFUiBp
dGVyOwotICBoYXNoVGFibGVJdGVySW5pdCgmaXRlciwgJihwLT5lbGVtZW50VHlwZXMpKTsKLSAg
Zm9yICg7OykgewotICAgIEVMRU1FTlRfVFlQRSAqZSA9IChFTEVNRU5UX1RZUEUgKiloYXNoVGFi
bGVJdGVyTmV4dCgmaXRlcik7Ci0gICAgaWYgKCFlKQotICAgICAgYnJlYWs7Ci0gICAgaWYgKGUt
PmFsbG9jRGVmYXVsdEF0dHMgIT0gMCkKLSAgICAgIG1zLT5mcmVlX2ZjbihlLT5kZWZhdWx0QXR0
cyk7Ci0gIH0KLSAgaGFzaFRhYmxlQ2xlYXIoJihwLT5nZW5lcmFsRW50aXRpZXMpKTsKLSNpZmRl
ZiBYTUxfRFRECi0gIHAtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9GQUxTRTsKLSAgaGFzaFRhYmxl
Q2xlYXIoJihwLT5wYXJhbUVudGl0aWVzKSk7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICBoYXNo
VGFibGVDbGVhcigmKHAtPmVsZW1lbnRUeXBlcykpOwotICBoYXNoVGFibGVDbGVhcigmKHAtPmF0
dHJpYnV0ZUlkcykpOwotICBoYXNoVGFibGVDbGVhcigmKHAtPnByZWZpeGVzKSk7Ci0gIHBvb2xD
bGVhcigmKHAtPnBvb2wpKTsKLSAgcG9vbENsZWFyKCYocC0+ZW50aXR5VmFsdWVQb29sKSk7Ci0g
IHAtPmRlZmF1bHRQcmVmaXgubmFtZSA9IE5VTEw7Ci0gIHAtPmRlZmF1bHRQcmVmaXguYmluZGlu
ZyA9IE5VTEw7Ci0KLSAgcC0+aW5fZWxkZWNsID0gWE1MX0ZBTFNFOwotCi0gIG1zLT5mcmVlX2Zj
bihwLT5zY2FmZkluZGV4KTsKLSAgcC0+c2NhZmZJbmRleCA9IE5VTEw7Ci0gIG1zLT5mcmVlX2Zj
bihwLT5zY2FmZm9sZCk7Ci0gIHAtPnNjYWZmb2xkID0gTlVMTDsKLQotICBwLT5zY2FmZkxldmVs
ID0gMDsKLSAgcC0+c2NhZmZTaXplID0gMDsKLSAgcC0+c2NhZmZDb3VudCA9IDA7Ci0gIHAtPmNv
bnRlbnRTdHJpbmdMZW4gPSAwOwotCi0gIHAtPmtlZXBQcm9jZXNzaW5nID0gWE1MX1RSVUU7Ci0g
IHAtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9GQUxTRTsKLSAgcC0+c3RhbmRhbG9uZSA9IFhN
TF9GQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWR0ZERlc3Ryb3koRFREICpwLCBYTUxfQm9vbCBp
c0RvY0VudGl0eSwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpCi17Ci0gIEhB
U0hfVEFCTEVfSVRFUiBpdGVyOwotICBoYXNoVGFibGVJdGVySW5pdCgmaXRlciwgJihwLT5lbGVt
ZW50VHlwZXMpKTsKLSAgZm9yICg7OykgewotICAgIEVMRU1FTlRfVFlQRSAqZSA9IChFTEVNRU5U
X1RZUEUgKiloYXNoVGFibGVJdGVyTmV4dCgmaXRlcik7Ci0gICAgaWYgKCFlKQotICAgICAgYnJl
YWs7Ci0gICAgaWYgKGUtPmFsbG9jRGVmYXVsdEF0dHMgIT0gMCkKLSAgICAgIG1zLT5mcmVlX2Zj
bihlLT5kZWZhdWx0QXR0cyk7Ci0gIH0KLSAgaGFzaFRhYmxlRGVzdHJveSgmKHAtPmdlbmVyYWxF
bnRpdGllcykpOwotI2lmZGVmIFhNTF9EVEQKLSAgaGFzaFRhYmxlRGVzdHJveSgmKHAtPnBhcmFt
RW50aXRpZXMpKTsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gIGhhc2hUYWJsZURlc3Ryb3koJihw
LT5lbGVtZW50VHlwZXMpKTsKLSAgaGFzaFRhYmxlRGVzdHJveSgmKHAtPmF0dHJpYnV0ZUlkcykp
OwotICBoYXNoVGFibGVEZXN0cm95KCYocC0+cHJlZml4ZXMpKTsKLSAgcG9vbERlc3Ryb3koJihw
LT5wb29sKSk7Ci0gIHBvb2xEZXN0cm95KCYocC0+ZW50aXR5VmFsdWVQb29sKSk7Ci0gIGlmIChp
c0RvY0VudGl0eSkgewotICAgIG1zLT5mcmVlX2ZjbihwLT5zY2FmZkluZGV4KTsKLSAgICBtcy0+
ZnJlZV9mY24ocC0+c2NhZmZvbGQpOwotICB9Ci0gIG1zLT5mcmVlX2ZjbihwKTsKLX0KLQotLyog
RG8gYSBkZWVwIGNvcHkgb2YgdGhlIERURC4gUmV0dXJuIDAgZm9yIG91dCBvZiBtZW1vcnksIG5v
bi16ZXJvIG90aGVyd2lzZS4KLSAgIFRoZSBuZXcgRFREIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlh
bGl6ZWQuCi0qLwotc3RhdGljIGludAotZHRkQ29weShYTUxfUGFyc2VyIG9sZFBhcnNlciwgRFRE
ICpuZXdEdGQsIGNvbnN0IERURCAqb2xkRHRkLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1
aXRlICptcykKLXsKLSAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7Ci0KLSAgLyogQ29weSB0aGUgcHJl
Zml4IHRhYmxlLiAqLwotCi0gIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKG9sZER0ZC0+cHJl
Zml4ZXMpKTsKLSAgZm9yICg7OykgewotICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICAgIGNv
bnN0IFBSRUZJWCAqb2xkUCA9IChQUkVGSVggKiloYXNoVGFibGVJdGVyTmV4dCgmaXRlcik7Ci0g
ICAgaWYgKCFvbGRQKQotICAgICAgYnJlYWs7Ci0gICAgbmFtZSA9IHBvb2xDb3B5U3RyaW5nKCYo
bmV3RHRkLT5wb29sKSwgb2xkUC0+bmFtZSk7Ci0gICAgaWYgKCFuYW1lKQotICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKCFsb29rdXAob2xkUGFyc2VyLCAmKG5ld0R0ZC0+cHJlZml4ZXMpLCBuYW1l
LCBzaXplb2YoUFJFRklYKSkpCi0gICAgICByZXR1cm4gMDsKLSAgfQotCi0gIGhhc2hUYWJsZUl0
ZXJJbml0KCZpdGVyLCAmKG9sZER0ZC0+YXR0cmlidXRlSWRzKSk7Ci0KLSAgLyogQ29weSB0aGUg
YXR0cmlidXRlIGlkIHRhYmxlLiAqLwotCi0gIGZvciAoOzspIHsKLSAgICBBVFRSSUJVVEVfSUQg
Km5ld0E7Ci0gICAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0gICAgY29uc3QgQVRUUklCVVRFX0lE
ICpvbGRBID0gKEFUVFJJQlVURV9JRCAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKLQotICAg
IGlmICghb2xkQSkKLSAgICAgIGJyZWFrOwotICAgIC8qIFJlbWVtYmVyIHRvIGFsbG9jYXRlIHRo
ZSBzY3JhdGNoIGJ5dGUgYmVmb3JlIHRoZSBuYW1lLiAqLwotICAgIGlmICghcG9vbEFwcGVuZENo
YXIoJihuZXdEdGQtPnBvb2wpLCBYTUxfVCgnXDAnKSkpCi0gICAgICByZXR1cm4gMDsKLSAgICBu
YW1lID0gcG9vbENvcHlTdHJpbmcoJihuZXdEdGQtPnBvb2wpLCBvbGRBLT5uYW1lKTsKLSAgICBp
ZiAoIW5hbWUpCi0gICAgICByZXR1cm4gMDsKLSAgICArK25hbWU7Ci0gICAgbmV3QSA9IChBVFRS
SUJVVEVfSUQgKilsb29rdXAob2xkUGFyc2VyLCAmKG5ld0R0ZC0+YXR0cmlidXRlSWRzKSwgbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQVRUUklCVVRFX0lE
KSk7Ci0gICAgaWYgKCFuZXdBKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbmV3QS0+bWF5YmVUb2tl
bml6ZWQgPSBvbGRBLT5tYXliZVRva2VuaXplZDsKLSAgICBpZiAob2xkQS0+cHJlZml4KSB7Ci0g
ICAgICBuZXdBLT54bWxucyA9IG9sZEEtPnhtbG5zOwotICAgICAgaWYgKG9sZEEtPnByZWZpeCA9
PSAmb2xkRHRkLT5kZWZhdWx0UHJlZml4KQotICAgICAgICBuZXdBLT5wcmVmaXggPSAmbmV3RHRk
LT5kZWZhdWx0UHJlZml4OwotICAgICAgZWxzZQotICAgICAgICBuZXdBLT5wcmVmaXggPSAoUFJF
RklYICopbG9va3VwKG9sZFBhcnNlciwgJihuZXdEdGQtPnByZWZpeGVzKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRBLT5wcmVmaXgtPm5hbWUsIDApOwotICAg
IH0KLSAgfQotCi0gIC8qIENvcHkgdGhlIGVsZW1lbnQgdHlwZSB0YWJsZS4gKi8KLQotICBoYXNo
VGFibGVJdGVySW5pdCgmaXRlciwgJihvbGREdGQtPmVsZW1lbnRUeXBlcykpOwotCi0gIGZvciAo
OzspIHsKLSAgICBpbnQgaTsKLSAgICBFTEVNRU5UX1RZUEUgKm5ld0U7Ci0gICAgY29uc3QgWE1M
X0NoYXIgKm5hbWU7Ci0gICAgY29uc3QgRUxFTUVOVF9UWVBFICpvbGRFID0gKEVMRU1FTlRfVFlQ
RSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKLSAgICBpZiAoIW9sZEUpCi0gICAgICBicmVh
azsKLSAgICBuYW1lID0gcG9vbENvcHlTdHJpbmcoJihuZXdEdGQtPnBvb2wpLCBvbGRFLT5uYW1l
KTsKLSAgICBpZiAoIW5hbWUpCi0gICAgICByZXR1cm4gMDsKLSAgICBuZXdFID0gKEVMRU1FTlRf
VFlQRSAqKWxvb2t1cChvbGRQYXJzZXIsICYobmV3RHRkLT5lbGVtZW50VHlwZXMpLCBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihFTEVNRU5UX1RZUEUpKTsK
LSAgICBpZiAoIW5ld0UpCi0gICAgICByZXR1cm4gMDsKLSAgICBpZiAob2xkRS0+bkRlZmF1bHRB
dHRzKSB7Ci0gICAgICBuZXdFLT5kZWZhdWx0QXR0cyA9IChERUZBVUxUX0FUVFJJQlVURSAqKQot
ICAgICAgICAgIG1zLT5tYWxsb2NfZmNuKG9sZEUtPm5EZWZhdWx0QXR0cyAqIHNpemVvZihERUZB
VUxUX0FUVFJJQlVURSkpOwotICAgICAgaWYgKCFuZXdFLT5kZWZhdWx0QXR0cykgewotICAgICAg
ICBtcy0+ZnJlZV9mY24obmV3RSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgIH0K
LSAgICBpZiAob2xkRS0+aWRBdHQpCi0gICAgICBuZXdFLT5pZEF0dCA9IChBVFRSSUJVVEVfSUQg
KikKLSAgICAgICAgICBsb29rdXAob2xkUGFyc2VyLCAmKG5ld0R0ZC0+YXR0cmlidXRlSWRzKSwg
b2xkRS0+aWRBdHQtPm5hbWUsIDApOwotICAgIG5ld0UtPmFsbG9jRGVmYXVsdEF0dHMgPSBuZXdF
LT5uRGVmYXVsdEF0dHMgPSBvbGRFLT5uRGVmYXVsdEF0dHM7Ci0gICAgaWYgKG9sZEUtPnByZWZp
eCkKLSAgICAgIG5ld0UtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAob2xkUGFyc2VyLCAmKG5l
d0R0ZC0+cHJlZml4ZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
bGRFLT5wcmVmaXgtPm5hbWUsIDApOwotICAgIGZvciAoaSA9IDA7IGkgPCBuZXdFLT5uRGVmYXVs
dEF0dHM7IGkrKykgewotICAgICAgbmV3RS0+ZGVmYXVsdEF0dHNbaV0uaWQgPSAoQVRUUklCVVRF
X0lEICopCi0gICAgICAgICAgbG9va3VwKG9sZFBhcnNlciwgJihuZXdEdGQtPmF0dHJpYnV0ZUlk
cyksIG9sZEUtPmRlZmF1bHRBdHRzW2ldLmlkLT5uYW1lLCAwKTsKLSAgICAgIG5ld0UtPmRlZmF1
bHRBdHRzW2ldLmlzQ2RhdGEgPSBvbGRFLT5kZWZhdWx0QXR0c1tpXS5pc0NkYXRhOwotICAgICAg
aWYgKG9sZEUtPmRlZmF1bHRBdHRzW2ldLnZhbHVlKSB7Ci0gICAgICAgIG5ld0UtPmRlZmF1bHRB
dHRzW2ldLnZhbHVlCi0gICAgICAgICAgICA9IHBvb2xDb3B5U3RyaW5nKCYobmV3RHRkLT5wb29s
KSwgb2xkRS0+ZGVmYXVsdEF0dHNbaV0udmFsdWUpOwotICAgICAgICBpZiAoIW5ld0UtPmRlZmF1
bHRBdHRzW2ldLnZhbHVlKQotICAgICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgZWxz
ZQotICAgICAgICBuZXdFLT5kZWZhdWx0QXR0c1tpXS52YWx1ZSA9IE5VTEw7Ci0gICAgfQotICB9
Ci0KLSAgLyogQ29weSB0aGUgZW50aXR5IHRhYmxlcy4gKi8KLSAgaWYgKCFjb3B5RW50aXR5VGFi
bGUob2xkUGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAmKG5ld0R0ZC0+Z2VuZXJhbEVu
dGl0aWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJihuZXdEdGQtPnBvb2wpLAotICAgICAg
ICAgICAgICAgICAgICAgICAmKG9sZER0ZC0+Z2VuZXJhbEVudGl0aWVzKSkpCi0gICAgICByZXR1
cm4gMDsKLQotI2lmZGVmIFhNTF9EVEQKLSAgaWYgKCFjb3B5RW50aXR5VGFibGUob2xkUGFyc2Vy
LAotICAgICAgICAgICAgICAgICAgICAgICAmKG5ld0R0ZC0+cGFyYW1FbnRpdGllcyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICYobmV3RHRkLT5wb29sKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgJihvbGREdGQtPnBhcmFtRW50aXRpZXMpKSkKLSAgICAgIHJldHVybiAwOwotICBuZXdEdGQt
PnBhcmFtRW50aXR5UmVhZCA9IG9sZER0ZC0+cGFyYW1FbnRpdHlSZWFkOwotI2VuZGlmIC8qIFhN
TF9EVEQgKi8KLQotICBuZXdEdGQtPmtlZXBQcm9jZXNzaW5nID0gb2xkRHRkLT5rZWVwUHJvY2Vz
c2luZzsKLSAgbmV3RHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBvbGREdGQtPmhhc1BhcmFtRW50
aXR5UmVmczsKLSAgbmV3RHRkLT5zdGFuZGFsb25lID0gb2xkRHRkLT5zdGFuZGFsb25lOwotCi0g
IC8qIERvbid0IHdhbnQgZGVlcCBjb3B5aW5nIGZvciBzY2FmZm9sZGluZyAqLwotICBuZXdEdGQt
PmluX2VsZGVjbCA9IG9sZER0ZC0+aW5fZWxkZWNsOwotICBuZXdEdGQtPnNjYWZmb2xkID0gb2xk
RHRkLT5zY2FmZm9sZDsKLSAgbmV3RHRkLT5jb250ZW50U3RyaW5nTGVuID0gb2xkRHRkLT5jb250
ZW50U3RyaW5nTGVuOwotICBuZXdEdGQtPnNjYWZmU2l6ZSA9IG9sZER0ZC0+c2NhZmZTaXplOwot
ICBuZXdEdGQtPnNjYWZmTGV2ZWwgPSBvbGREdGQtPnNjYWZmTGV2ZWw7Ci0gIG5ld0R0ZC0+c2Nh
ZmZJbmRleCA9IG9sZER0ZC0+c2NhZmZJbmRleDsKLQotICByZXR1cm4gMTsKLX0gIC8qIEVuZCBk
dGRDb3B5ICovCi0KLXN0YXRpYyBpbnQKLWNvcHlFbnRpdHlUYWJsZShYTUxfUGFyc2VyIG9sZFBh
cnNlciwKLSAgICAgICAgICAgICAgICBIQVNIX1RBQkxFICpuZXdUYWJsZSwKLSAgICAgICAgICAg
ICAgICBTVFJJTkdfUE9PTCAqbmV3UG9vbCwKLSAgICAgICAgICAgICAgICBjb25zdCBIQVNIX1RB
QkxFICpvbGRUYWJsZSkKLXsKLSAgSEFTSF9UQUJMRV9JVEVSIGl0ZXI7Ci0gIGNvbnN0IFhNTF9D
aGFyICpjYWNoZWRPbGRCYXNlID0gTlVMTDsKLSAgY29uc3QgWE1MX0NoYXIgKmNhY2hlZE5ld0Jh
c2UgPSBOVUxMOwotCi0gIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCBvbGRUYWJsZSk7Ci0KLSAg
Zm9yICg7OykgewotICAgIEVOVElUWSAqbmV3RTsKLSAgICBjb25zdCBYTUxfQ2hhciAqbmFtZTsK
LSAgICBjb25zdCBFTlRJVFkgKm9sZEUgPSAoRU5USVRZICopaGFzaFRhYmxlSXRlck5leHQoJml0
ZXIpOwotICAgIGlmICghb2xkRSkKLSAgICAgIGJyZWFrOwotICAgIG5hbWUgPSBwb29sQ29weVN0
cmluZyhuZXdQb29sLCBvbGRFLT5uYW1lKTsKLSAgICBpZiAoIW5hbWUpCi0gICAgICByZXR1cm4g
MDsKLSAgICBuZXdFID0gKEVOVElUWSAqKWxvb2t1cChvbGRQYXJzZXIsIG5ld1RhYmxlLCBuYW1l
LCBzaXplb2YoRU5USVRZKSk7Ci0gICAgaWYgKCFuZXdFKQotICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKG9sZEUtPnN5c3RlbUlkKSB7Ci0gICAgICBjb25zdCBYTUxfQ2hhciAqdGVtID0gcG9vbENv
cHlTdHJpbmcobmV3UG9vbCwgb2xkRS0+c3lzdGVtSWQpOwotICAgICAgaWYgKCF0ZW0pCi0gICAg
ICAgIHJldHVybiAwOwotICAgICAgbmV3RS0+c3lzdGVtSWQgPSB0ZW07Ci0gICAgICBpZiAob2xk
RS0+YmFzZSkgewotICAgICAgICBpZiAob2xkRS0+YmFzZSA9PSBjYWNoZWRPbGRCYXNlKQotICAg
ICAgICAgIG5ld0UtPmJhc2UgPSBjYWNoZWROZXdCYXNlOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICBjYWNoZWRPbGRCYXNlID0gb2xkRS0+YmFzZTsKLSAgICAgICAgICB0ZW0gPSBwb29sQ29w
eVN0cmluZyhuZXdQb29sLCBjYWNoZWRPbGRCYXNlKTsKLSAgICAgICAgICBpZiAoIXRlbSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgIGNhY2hlZE5ld0Jhc2UgPSBuZXdFLT5iYXNl
ID0gdGVtOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAob2xkRS0+cHVibGljSWQpIHsK
LSAgICAgICAgdGVtID0gcG9vbENvcHlTdHJpbmcobmV3UG9vbCwgb2xkRS0+cHVibGljSWQpOwot
ICAgICAgICBpZiAoIXRlbSkKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbmV3RS0+cHVi
bGljSWQgPSB0ZW07Ci0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY29uc3QgWE1M
X0NoYXIgKnRlbSA9IHBvb2xDb3B5U3RyaW5nTihuZXdQb29sLCBvbGRFLT50ZXh0UHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRFLT50ZXh0TGVuKTsK
LSAgICAgIGlmICghdGVtKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIG5ld0UtPnRleHRQdHIg
PSB0ZW07Ci0gICAgICBuZXdFLT50ZXh0TGVuID0gb2xkRS0+dGV4dExlbjsKLSAgICB9Ci0gICAg
aWYgKG9sZEUtPm5vdGF0aW9uKSB7Ci0gICAgICBjb25zdCBYTUxfQ2hhciAqdGVtID0gcG9vbENv
cHlTdHJpbmcobmV3UG9vbCwgb2xkRS0+bm90YXRpb24pOwotICAgICAgaWYgKCF0ZW0pCi0gICAg
ICAgIHJldHVybiAwOwotICAgICAgbmV3RS0+bm90YXRpb24gPSB0ZW07Ci0gICAgfQotICAgIG5l
d0UtPmlzX3BhcmFtID0gb2xkRS0+aXNfcGFyYW07Ci0gICAgbmV3RS0+aXNfaW50ZXJuYWwgPSBv
bGRFLT5pc19pbnRlcm5hbDsKLSAgfQotICByZXR1cm4gMTsKLX0KLQotI2RlZmluZSBJTklUX1BP
V0VSIDYKLQotc3RhdGljIFhNTF9Cb29sIEZBU1RDQUxMCi1rZXllcShLRVkgczEsIEtFWSBzMikK
LXsKLSAgZm9yICg7ICpzMSA9PSAqczI7IHMxKyssIHMyKyspCi0gICAgaWYgKCpzMSA9PSAwKQot
ICAgICAgcmV0dXJuIFhNTF9UUlVFOwotICByZXR1cm4gWE1MX0ZBTFNFOwotfQotCi1zdGF0aWMg
dW5zaWduZWQgbG9uZyBGQVNUQ0FMTAotaGFzaChYTUxfUGFyc2VyIHBhcnNlciwgS0VZIHMpCi17
Ci0gIHVuc2lnbmVkIGxvbmcgaCA9IGhhc2hfc2VjcmV0X3NhbHQ7Ci0gIHdoaWxlICgqcykKLSAg
ICBoID0gQ0hBUl9IQVNIKGgsICpzKyspOwotICByZXR1cm4gaDsKLX0KLQotc3RhdGljIE5BTUVE
ICoKLWxvb2t1cChYTUxfUGFyc2VyIHBhcnNlciwgSEFTSF9UQUJMRSAqdGFibGUsIEtFWSBuYW1l
LCBzaXplX3QgY3JlYXRlU2l6ZSkKLXsKLSAgc2l6ZV90IGk7Ci0gIGlmICh0YWJsZS0+c2l6ZSA9
PSAwKSB7Ci0gICAgc2l6ZV90IHRzaXplOwotICAgIGlmICghY3JlYXRlU2l6ZSkKLSAgICAgIHJl
dHVybiBOVUxMOwotICAgIHRhYmxlLT5wb3dlciA9IElOSVRfUE9XRVI7Ci0gICAgLyogdGFibGUt
PnNpemUgaXMgYSBwb3dlciBvZiAyICovCi0gICAgdGFibGUtPnNpemUgPSAoc2l6ZV90KTEgPDwg
SU5JVF9QT1dFUjsKLSAgICB0c2l6ZSA9IHRhYmxlLT5zaXplICogc2l6ZW9mKE5BTUVEICopOwot
ICAgIHRhYmxlLT52ID0gKE5BTUVEICoqKXRhYmxlLT5tZW0tPm1hbGxvY19mY24odHNpemUpOwot
ICAgIGlmICghdGFibGUtPnYpIHsKLSAgICAgIHRhYmxlLT5zaXplID0gMDsKLSAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBtZW1zZXQodGFibGUtPnYsIDAsIHRzaXplKTsKLSAgICBpID0g
aGFzaChwYXJzZXIsIG5hbWUpICYgKCh1bnNpZ25lZCBsb25nKXRhYmxlLT5zaXplIC0gMSk7Ci0g
IH0KLSAgZWxzZSB7Ci0gICAgdW5zaWduZWQgbG9uZyBoID0gaGFzaChwYXJzZXIsIG5hbWUpOwot
ICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5zaXplIC0gMTsK
LSAgICB1bnNpZ25lZCBjaGFyIHN0ZXAgPSAwOwotICAgIGkgPSBoICYgbWFzazsKLSAgICB3aGls
ZSAodGFibGUtPnZbaV0pIHsKLSAgICAgIGlmIChrZXllcShuYW1lLCB0YWJsZS0+dltpXS0+bmFt
ZSkpCi0gICAgICAgIHJldHVybiB0YWJsZS0+dltpXTsKLSAgICAgIGlmICghc3RlcCkKLSAgICAg
ICAgc3RlcCA9IFBST0JFX1NURVAoaCwgbWFzaywgdGFibGUtPnBvd2VyKTsKLSAgICAgIGkgPCBz
dGVwID8gKGkgKz0gdGFibGUtPnNpemUgLSBzdGVwKSA6IChpIC09IHN0ZXApOwotICAgIH0KLSAg
ICBpZiAoIWNyZWF0ZVNpemUpCi0gICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIGNoZWNrIGZv
ciBvdmVyZmxvdyAodGFibGUgaXMgaGFsZiBmdWxsKSAqLwotICAgIGlmICh0YWJsZS0+dXNlZCA+
PiAodGFibGUtPnBvd2VyIC0gMSkpIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIgbmV3UG93ZXIgPSB0
YWJsZS0+cG93ZXIgKyAxOwotICAgICAgc2l6ZV90IG5ld1NpemUgPSAoc2l6ZV90KTEgPDwgbmV3
UG93ZXI7Ci0gICAgICB1bnNpZ25lZCBsb25nIG5ld01hc2sgPSAodW5zaWduZWQgbG9uZyluZXdT
aXplIC0gMTsKLSAgICAgIHNpemVfdCB0c2l6ZSA9IG5ld1NpemUgKiBzaXplb2YoTkFNRUQgKik7
Ci0gICAgICBOQU1FRCAqKm5ld1YgPSAoTkFNRUQgKiopdGFibGUtPm1lbS0+bWFsbG9jX2Zjbih0
c2l6ZSk7Ci0gICAgICBpZiAoIW5ld1YpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgbWVt
c2V0KG5ld1YsIDAsIHRzaXplKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsg
aSsrKQotICAgICAgICBpZiAodGFibGUtPnZbaV0pIHsKLSAgICAgICAgICB1bnNpZ25lZCBsb25n
IG5ld0hhc2ggPSBoYXNoKHBhcnNlciwgdGFibGUtPnZbaV0tPm5hbWUpOwotICAgICAgICAgIHNp
emVfdCBqID0gbmV3SGFzaCAmIG5ld01hc2s7Ci0gICAgICAgICAgc3RlcCA9IDA7Ci0gICAgICAg
ICAgd2hpbGUgKG5ld1Zbal0pIHsKLSAgICAgICAgICAgIGlmICghc3RlcCkKLSAgICAgICAgICAg
ICAgc3RlcCA9IFBST0JFX1NURVAobmV3SGFzaCwgbmV3TWFzaywgbmV3UG93ZXIpOwotICAgICAg
ICAgICAgaiA8IHN0ZXAgPyAoaiArPSBuZXdTaXplIC0gc3RlcCkgOiAoaiAtPSBzdGVwKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgbmV3VltqXSA9IHRhYmxlLT52W2ldOwotICAgICAgICB9Ci0g
ICAgICB0YWJsZS0+bWVtLT5mcmVlX2Zjbih0YWJsZS0+dik7Ci0gICAgICB0YWJsZS0+diA9IG5l
d1Y7Ci0gICAgICB0YWJsZS0+cG93ZXIgPSBuZXdQb3dlcjsKLSAgICAgIHRhYmxlLT5zaXplID0g
bmV3U2l6ZTsKLSAgICAgIGkgPSBoICYgbmV3TWFzazsKLSAgICAgIHN0ZXAgPSAwOwotICAgICAg
d2hpbGUgKHRhYmxlLT52W2ldKSB7Ci0gICAgICAgIGlmICghc3RlcCkKLSAgICAgICAgICBzdGVw
ID0gUFJPQkVfU1RFUChoLCBuZXdNYXNrLCBuZXdQb3dlcik7Ci0gICAgICAgIGkgPCBzdGVwID8g
KGkgKz0gbmV3U2l6ZSAtIHN0ZXApIDogKGkgLT0gc3RlcCk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0gIHRhYmxlLT52W2ldID0gKE5BTUVEICopdGFibGUtPm1lbS0+bWFsbG9jX2ZjbihjcmVhdGVT
aXplKTsKLSAgaWYgKCF0YWJsZS0+dltpXSkKLSAgICByZXR1cm4gTlVMTDsKLSAgbWVtc2V0KHRh
YmxlLT52W2ldLCAwLCBjcmVhdGVTaXplKTsKLSAgdGFibGUtPnZbaV0tPm5hbWUgPSBuYW1lOwot
ICAodGFibGUtPnVzZWQpKys7Ci0gIHJldHVybiB0YWJsZS0+dltpXTsKLX0KLQotc3RhdGljIHZv
aWQgRkFTVENBTEwKLWhhc2hUYWJsZUNsZWFyKEhBU0hfVEFCTEUgKnRhYmxlKQotewotICBzaXpl
X3QgaTsKLSAgZm9yIChpID0gMDsgaSA8IHRhYmxlLT5zaXplOyBpKyspIHsKLSAgICB0YWJsZS0+
bWVtLT5mcmVlX2Zjbih0YWJsZS0+dltpXSk7Ci0gICAgdGFibGUtPnZbaV0gPSBOVUxMOwotICB9
Ci0gIHRhYmxlLT51c2VkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgRkFTVENBTEwKLWhhc2hUYWJs
ZURlc3Ryb3koSEFTSF9UQUJMRSAqdGFibGUpCi17Ci0gIHNpemVfdCBpOwotICBmb3IgKGkgPSAw
OyBpIDwgdGFibGUtPnNpemU7IGkrKykKLSAgICB0YWJsZS0+bWVtLT5mcmVlX2Zjbih0YWJsZS0+
dltpXSk7Ci0gIHRhYmxlLT5tZW0tPmZyZWVfZmNuKHRhYmxlLT52KTsKLX0KLQotc3RhdGljIHZv
aWQgRkFTVENBTEwKLWhhc2hUYWJsZUluaXQoSEFTSF9UQUJMRSAqcCwgY29uc3QgWE1MX01lbW9y
eV9IYW5kbGluZ19TdWl0ZSAqbXMpCi17Ci0gIHAtPnBvd2VyID0gMDsKLSAgcC0+c2l6ZSA9IDA7
Ci0gIHAtPnVzZWQgPSAwOwotICBwLT52ID0gTlVMTDsKLSAgcC0+bWVtID0gbXM7Ci19Ci0KLXN0
YXRpYyB2b2lkIEZBU1RDQUxMCi1oYXNoVGFibGVJdGVySW5pdChIQVNIX1RBQkxFX0lURVIgKml0
ZXIsIGNvbnN0IEhBU0hfVEFCTEUgKnRhYmxlKQotewotICBpdGVyLT5wID0gdGFibGUtPnY7Ci0g
IGl0ZXItPmVuZCA9IGl0ZXItPnAgKyB0YWJsZS0+c2l6ZTsKLX0KLQotc3RhdGljIE5BTUVEICog
RkFTVENBTEwKLWhhc2hUYWJsZUl0ZXJOZXh0KEhBU0hfVEFCTEVfSVRFUiAqaXRlcikKLXsKLSAg
d2hpbGUgKGl0ZXItPnAgIT0gaXRlci0+ZW5kKSB7Ci0gICAgTkFNRUQgKnRlbSA9ICooaXRlci0+
cCkrKzsKLSAgICBpZiAodGVtKQotICAgICAgcmV0dXJuIHRlbTsKLSAgfQotICByZXR1cm4gTlVM
TDsKLX0KLQotc3RhdGljIHZvaWQgRkFTVENBTEwKLXBvb2xJbml0KFNUUklOR19QT09MICpwb29s
LCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcykKLXsKLSAgcG9vbC0+YmxvY2tz
ID0gTlVMTDsKLSAgcG9vbC0+ZnJlZUJsb2NrcyA9IE5VTEw7Ci0gIHBvb2wtPnN0YXJ0ID0gTlVM
TDsKLSAgcG9vbC0+cHRyID0gTlVMTDsKLSAgcG9vbC0+ZW5kID0gTlVMTDsKLSAgcG9vbC0+bWVt
ID0gbXM7Ci19Ci0KLXN0YXRpYyB2b2lkIEZBU1RDQUxMCi1wb29sQ2xlYXIoU1RSSU5HX1BPT0wg
KnBvb2wpCi17Ci0gIGlmICghcG9vbC0+ZnJlZUJsb2NrcykKLSAgICBwb29sLT5mcmVlQmxvY2tz
ID0gcG9vbC0+YmxvY2tzOwotICBlbHNlIHsKLSAgICBCTE9DSyAqcCA9IHBvb2wtPmJsb2NrczsK
LSAgICB3aGlsZSAocCkgewotICAgICAgQkxPQ0sgKnRlbSA9IHAtPm5leHQ7Ci0gICAgICBwLT5u
ZXh0ID0gcG9vbC0+ZnJlZUJsb2NrczsKLSAgICAgIHBvb2wtPmZyZWVCbG9ja3MgPSBwOwotICAg
ICAgcCA9IHRlbTsKLSAgICB9Ci0gIH0KLSAgcG9vbC0+YmxvY2tzID0gTlVMTDsKLSAgcG9vbC0+
c3RhcnQgPSBOVUxMOwotICBwb29sLT5wdHIgPSBOVUxMOwotICBwb29sLT5lbmQgPSBOVUxMOwot
fQotCi1zdGF0aWMgdm9pZCBGQVNUQ0FMTAotcG9vbERlc3Ryb3koU1RSSU5HX1BPT0wgKnBvb2wp
Ci17Ci0gIEJMT0NLICpwID0gcG9vbC0+YmxvY2tzOwotICB3aGlsZSAocCkgewotICAgIEJMT0NL
ICp0ZW0gPSBwLT5uZXh0OwotICAgIHBvb2wtPm1lbS0+ZnJlZV9mY24ocCk7Ci0gICAgcCA9IHRl
bTsKLSAgfQotICBwID0gcG9vbC0+ZnJlZUJsb2NrczsKLSAgd2hpbGUgKHApIHsKLSAgICBCTE9D
SyAqdGVtID0gcC0+bmV4dDsKLSAgICBwb29sLT5tZW0tPmZyZWVfZmNuKHApOwotICAgIHAgPSB0
ZW07Ci0gIH0KLX0KLQotc3RhdGljIFhNTF9DaGFyICoKLXBvb2xBcHBlbmQoU1RSSU5HX1BPT0wg
KnBvb2wsIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwg
Y29uc3QgY2hhciAqZW5kKQotewotICBpZiAoIXBvb2wtPnB0ciAmJiAhcG9vbEdyb3cocG9vbCkp
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIGZvciAoOzspIHsKLSAgICBYbWxDb252ZXJ0KGVuYywgJnB0
ciwgZW5kLCAoSUNIQVIgKiopJihwb29sLT5wdHIpLCAoSUNIQVIgKilwb29sLT5lbmQpOwotICAg
IGlmIChwdHIgPT0gZW5kKQotICAgICAgYnJlYWs7Ci0gICAgaWYgKCFwb29sR3Jvdyhwb29sKSkK
LSAgICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBwb29sLT5zdGFydDsKLX0KLQotc3Rh
dGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKLXBvb2xDb3B5U3RyaW5nKFNUUklOR19QT09M
ICpwb29sLCBjb25zdCBYTUxfQ2hhciAqcykKLXsKLSAgZG8gewotICAgIGlmICghcG9vbEFwcGVu
ZENoYXIocG9vbCwgKnMpKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0gd2hpbGUgKCpzKyspOwot
ICBzID0gcG9vbC0+c3RhcnQ7Ci0gIHBvb2xGaW5pc2gocG9vbCk7Ci0gIHJldHVybiBzOwotfQot
Ci1zdGF0aWMgY29uc3QgWE1MX0NoYXIgKgotcG9vbENvcHlTdHJpbmdOKFNUUklOR19QT09MICpw
b29sLCBjb25zdCBYTUxfQ2hhciAqcywgaW50IG4pCi17Ci0gIGlmICghcG9vbC0+cHRyICYmICFw
b29sR3Jvdyhwb29sKSkKLSAgICByZXR1cm4gTlVMTDsKLSAgZm9yICg7IG4gPiAwOyAtLW4sIHMr
KykgewotICAgIGlmICghcG9vbEFwcGVuZENoYXIocG9vbCwgKnMpKQotICAgICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLSAgcyA9IHBvb2wtPnN0YXJ0OwotICBwb29sRmluaXNoKHBvb2wpOwotICByZXR1
cm4gczsKLX0KLQotc3RhdGljIGNvbnN0IFhNTF9DaGFyICogRkFTVENBTEwKLXBvb2xBcHBlbmRT
dHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzKQotewotICB3aGlsZSAo
KnMpIHsKLSAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2wsICpzKSkKLSAgICAgIHJldHVybiBO
VUxMOwotICAgIHMrKzsKLSAgfQotICByZXR1cm4gcG9vbC0+c3RhcnQ7Ci19Ci0KLXN0YXRpYyBY
TUxfQ2hhciAqCi1wb29sU3RvcmVTdHJpbmcoU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IEVOQ09E
SU5HICplbmMsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICpl
bmQpCi17Ci0gIGlmICghcG9vbEFwcGVuZChwb29sLCBlbmMsIHB0ciwgZW5kKSkKLSAgICByZXR1
cm4gTlVMTDsKLSAgaWYgKHBvb2wtPnB0ciA9PSBwb29sLT5lbmQgJiYgIXBvb2xHcm93KHBvb2wp
KQotICAgIHJldHVybiBOVUxMOwotICAqKHBvb2wtPnB0cikrKyA9IDA7Ci0gIHJldHVybiBwb29s
LT5zdGFydDsKLX0KLQotc3RhdGljIFhNTF9Cb29sIEZBU1RDQUxMCi1wb29sR3JvdyhTVFJJTkdf
UE9PTCAqcG9vbCkKLXsKLSAgaWYgKHBvb2wtPmZyZWVCbG9ja3MpIHsKLSAgICBpZiAocG9vbC0+
c3RhcnQgPT0gMCkgewotICAgICAgcG9vbC0+YmxvY2tzID0gcG9vbC0+ZnJlZUJsb2NrczsKLSAg
ICAgIHBvb2wtPmZyZWVCbG9ja3MgPSBwb29sLT5mcmVlQmxvY2tzLT5uZXh0OwotICAgICAgcG9v
bC0+YmxvY2tzLT5uZXh0ID0gTlVMTDsKLSAgICAgIHBvb2wtPnN0YXJ0ID0gcG9vbC0+YmxvY2tz
LT5zOwotICAgICAgcG9vbC0+ZW5kID0gcG9vbC0+c3RhcnQgKyBwb29sLT5ibG9ja3MtPnNpemU7
Ci0gICAgICBwb29sLT5wdHIgPSBwb29sLT5zdGFydDsKLSAgICAgIHJldHVybiBYTUxfVFJVRTsK
LSAgICB9Ci0gICAgaWYgKHBvb2wtPmVuZCAtIHBvb2wtPnN0YXJ0IDwgcG9vbC0+ZnJlZUJsb2Nr
cy0+c2l6ZSkgewotICAgICAgQkxPQ0sgKnRlbSA9IHBvb2wtPmZyZWVCbG9ja3MtPm5leHQ7Ci0g
ICAgICBwb29sLT5mcmVlQmxvY2tzLT5uZXh0ID0gcG9vbC0+YmxvY2tzOwotICAgICAgcG9vbC0+
YmxvY2tzID0gcG9vbC0+ZnJlZUJsb2NrczsKLSAgICAgIHBvb2wtPmZyZWVCbG9ja3MgPSB0ZW07
Ci0gICAgICBtZW1jcHkocG9vbC0+YmxvY2tzLT5zLCBwb29sLT5zdGFydCwKLSAgICAgICAgICAg
ICAocG9vbC0+ZW5kIC0gcG9vbC0+c3RhcnQpICogc2l6ZW9mKFhNTF9DaGFyKSk7Ci0gICAgICBw
b29sLT5wdHIgPSBwb29sLT5ibG9ja3MtPnMgKyAocG9vbC0+cHRyIC0gcG9vbC0+c3RhcnQpOwot
ICAgICAgcG9vbC0+c3RhcnQgPSBwb29sLT5ibG9ja3MtPnM7Ci0gICAgICBwb29sLT5lbmQgPSBw
b29sLT5zdGFydCArIHBvb2wtPmJsb2Nrcy0+c2l6ZTsKLSAgICAgIHJldHVybiBYTUxfVFJVRTsK
LSAgICB9Ci0gIH0KLSAgaWYgKHBvb2wtPmJsb2NrcyAmJiBwb29sLT5zdGFydCA9PSBwb29sLT5i
bG9ja3MtPnMpIHsKLSAgICBpbnQgYmxvY2tTaXplID0gKGludCkocG9vbC0+ZW5kIC0gcG9vbC0+
c3RhcnQpKjI7Ci0gICAgQkxPQ0sgKnRlbXAgPSAoQkxPQ0sgKikKLSAgICAgIHBvb2wtPm1lbS0+
cmVhbGxvY19mY24ocG9vbC0+YmxvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
b2Zmc2V0b2YoQkxPQ0ssIHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJsb2Nr
U2l6ZSAqIHNpemVvZihYTUxfQ2hhcikpKTsKLSAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAg
cmV0dXJuIFhNTF9GQUxTRTsKLSAgICBwb29sLT5ibG9ja3MgPSB0ZW1wOwotICAgIHBvb2wtPmJs
b2Nrcy0+c2l6ZSA9IGJsb2NrU2l6ZTsKLSAgICBwb29sLT5wdHIgPSBwb29sLT5ibG9ja3MtPnMg
KyAocG9vbC0+cHRyIC0gcG9vbC0+c3RhcnQpOwotICAgIHBvb2wtPnN0YXJ0ID0gcG9vbC0+Ymxv
Y2tzLT5zOwotICAgIHBvb2wtPmVuZCA9IHBvb2wtPnN0YXJ0ICsgYmxvY2tTaXplOwotICB9Ci0g
IGVsc2UgewotICAgIEJMT0NLICp0ZW07Ci0gICAgaW50IGJsb2NrU2l6ZSA9IChpbnQpKHBvb2wt
PmVuZCAtIHBvb2wtPnN0YXJ0KTsKLSAgICBpZiAoYmxvY2tTaXplIDwgSU5JVF9CTE9DS19TSVpF
KQotICAgICAgYmxvY2tTaXplID0gSU5JVF9CTE9DS19TSVpFOwotICAgIGVsc2UKLSAgICAgIGJs
b2NrU2l6ZSAqPSAyOwotICAgIHRlbSA9IChCTE9DSyAqKXBvb2wtPm1lbS0+bWFsbG9jX2Zjbihv
ZmZzZXRvZihCTE9DSywgcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArIGJsb2NrU2l6ZSAqIHNpemVvZihYTUxfQ2hhcikpOwotICAgIGlmICghdGVtKQotICAgICAg
cmV0dXJuIFhNTF9GQUxTRTsKLSAgICB0ZW0tPnNpemUgPSBibG9ja1NpemU7Ci0gICAgdGVtLT5u
ZXh0ID0gcG9vbC0+YmxvY2tzOwotICAgIHBvb2wtPmJsb2NrcyA9IHRlbTsKLSAgICBpZiAocG9v
bC0+cHRyICE9IHBvb2wtPnN0YXJ0KQotICAgICAgbWVtY3B5KHRlbS0+cywgcG9vbC0+c3RhcnQs
Ci0gICAgICAgICAgICAgKHBvb2wtPnB0ciAtIHBvb2wtPnN0YXJ0KSAqIHNpemVvZihYTUxfQ2hh
cikpOwotICAgIHBvb2wtPnB0ciA9IHRlbS0+cyArIChwb29sLT5wdHIgLSBwb29sLT5zdGFydCk7
Ci0gICAgcG9vbC0+c3RhcnQgPSB0ZW0tPnM7Ci0gICAgcG9vbC0+ZW5kID0gdGVtLT5zICsgYmxv
Y2tTaXplOwotICB9Ci0gIHJldHVybiBYTUxfVFJVRTsKLX0KLQotc3RhdGljIGludCBGQVNUQ0FM
TAotbmV4dFNjYWZmb2xkUGFydChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgRFREICogY29uc3Qg
ZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCi0gIENPTlRF
TlRfU0NBRkZPTEQgKiBtZTsKLSAgaW50IG5leHQ7Ci0KLSAgaWYgKCFkdGQtPnNjYWZmSW5kZXgp
IHsKLSAgICBkdGQtPnNjYWZmSW5kZXggPSAoaW50ICopTUFMTE9DKGdyb3VwU2l6ZSAqIHNpemVv
ZihpbnQpKTsKLSAgICBpZiAoIWR0ZC0+c2NhZmZJbmRleCkKLSAgICAgIHJldHVybiAtMTsKLSAg
ICBkdGQtPnNjYWZmSW5kZXhbMF0gPSAwOwotICB9Ci0KLSAgaWYgKGR0ZC0+c2NhZmZDb3VudCA+
PSBkdGQtPnNjYWZmU2l6ZSkgewotICAgIENPTlRFTlRfU0NBRkZPTEQgKnRlbXA7Ci0gICAgaWYg
KGR0ZC0+c2NhZmZvbGQpIHsKLSAgICAgIHRlbXAgPSAoQ09OVEVOVF9TQ0FGRk9MRCAqKQotICAg
ICAgICBSRUFMTE9DKGR0ZC0+c2NhZmZvbGQsIGR0ZC0+c2NhZmZTaXplICogMiAqIHNpemVvZihD
T05URU5UX1NDQUZGT0xEKSk7Ci0gICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICBkdGQtPnNjYWZmU2l6ZSAqPSAyOwotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgIHRlbXAgPSAoQ09OVEVOVF9TQ0FGRk9MRCAqKU1BTExPQyhJTklUX1NDQUZGT0xEX0VMRU1F
TlRTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2YoQ09O
VEVOVF9TQ0FGRk9MRCkpOwotICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgZHRkLT5zY2FmZlNpemUgPSBJTklUX1NDQUZGT0xEX0VMRU1FTlRTOwotICAg
IH0KLSAgICBkdGQtPnNjYWZmb2xkID0gdGVtcDsKLSAgfQotICBuZXh0ID0gZHRkLT5zY2FmZkNv
dW50Kys7Ci0gIG1lID0gJmR0ZC0+c2NhZmZvbGRbbmV4dF07Ci0gIGlmIChkdGQtPnNjYWZmTGV2
ZWwpIHsKLSAgICBDT05URU5UX1NDQUZGT0xEICpwYXJlbnQgPSAmZHRkLT5zY2FmZm9sZFtkdGQt
PnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxldmVsLTFdXTsKLSAgICBpZiAocGFyZW50LT5sYXN0Y2hp
bGQpIHsKLSAgICAgIGR0ZC0+c2NhZmZvbGRbcGFyZW50LT5sYXN0Y2hpbGRdLm5leHRzaWIgPSBu
ZXh0OwotICAgIH0KLSAgICBpZiAoIXBhcmVudC0+Y2hpbGRjbnQpCi0gICAgICBwYXJlbnQtPmZp
cnN0Y2hpbGQgPSBuZXh0OwotICAgIHBhcmVudC0+bGFzdGNoaWxkID0gbmV4dDsKLSAgICBwYXJl
bnQtPmNoaWxkY250Kys7Ci0gIH0KLSAgbWUtPmZpcnN0Y2hpbGQgPSBtZS0+bGFzdGNoaWxkID0g
bWUtPmNoaWxkY250ID0gbWUtPm5leHRzaWIgPSAwOwotICByZXR1cm4gbmV4dDsKLX0KLQotc3Rh
dGljIHZvaWQKLWJ1aWxkX25vZGUoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgIGludCBz
cmNfbm9kZSwKLSAgICAgICAgICAgWE1MX0NvbnRlbnQgKmRlc3QsCi0gICAgICAgICAgIFhNTF9D
b250ZW50ICoqY29udHBvcywKLSAgICAgICAgICAgWE1MX0NoYXIgKipzdHJwb3MpCi17Ci0gIERU
RCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAq
LwotICBkZXN0LT50eXBlID0gZHRkLT5zY2FmZm9sZFtzcmNfbm9kZV0udHlwZTsKLSAgZGVzdC0+
cXVhbnQgPSBkdGQtPnNjYWZmb2xkW3NyY19ub2RlXS5xdWFudDsKLSAgaWYgKGRlc3QtPnR5cGUg
PT0gWE1MX0NUWVBFX05BTUUpIHsKLSAgICBjb25zdCBYTUxfQ2hhciAqc3JjOwotICAgIGRlc3Qt
Pm5hbWUgPSAqc3RycG9zOwotICAgIHNyYyA9IGR0ZC0+c2NhZmZvbGRbc3JjX25vZGVdLm5hbWU7
Ci0gICAgZm9yICg7OykgewotICAgICAgKigqc3RycG9zKSsrID0gKnNyYzsKLSAgICAgIGlmICgh
KnNyYykKLSAgICAgICAgYnJlYWs7Ci0gICAgICBzcmMrKzsKLSAgICB9Ci0gICAgZGVzdC0+bnVt
Y2hpbGRyZW4gPSAwOwotICAgIGRlc3QtPmNoaWxkcmVuID0gTlVMTDsKLSAgfQotICBlbHNlIHsK
LSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBpbnQgY247Ci0gICAgZGVzdC0+bnVtY2hpbGRyZW4g
PSBkdGQtPnNjYWZmb2xkW3NyY19ub2RlXS5jaGlsZGNudDsKLSAgICBkZXN0LT5jaGlsZHJlbiA9
ICpjb250cG9zOwotICAgICpjb250cG9zICs9IGRlc3QtPm51bWNoaWxkcmVuOwotICAgIGZvciAo
aSA9IDAsIGNuID0gZHRkLT5zY2FmZm9sZFtzcmNfbm9kZV0uZmlyc3RjaGlsZDsKLSAgICAgICAg
IGkgPCBkZXN0LT5udW1jaGlsZHJlbjsKLSAgICAgICAgIGkrKywgY24gPSBkdGQtPnNjYWZmb2xk
W2NuXS5uZXh0c2liKSB7Ci0gICAgICBidWlsZF9ub2RlKHBhcnNlciwgY24sICYoZGVzdC0+Y2hp
bGRyZW5baV0pLCBjb250cG9zLCBzdHJwb3MpOwotICAgIH0KLSAgICBkZXN0LT5uYW1lID0gTlVM
TDsKLSAgfQotfQotCi1zdGF0aWMgWE1MX0NvbnRlbnQgKgotYnVpbGRfbW9kZWwgKFhNTF9QYXJz
ZXIgcGFyc2VyKQotewotICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2
ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgWE1MX0NvbnRlbnQgKnJldDsKLSAgWE1MX0NvbnRlbnQg
KmNwb3M7Ci0gIFhNTF9DaGFyICogc3RyOwotICBpbnQgYWxsb2NzaXplID0gKGR0ZC0+c2NhZmZD
b3VudCAqIHNpemVvZihYTUxfQ29udGVudCkKLSAgICAgICAgICAgICAgICAgICArIChkdGQtPmNv
bnRlbnRTdHJpbmdMZW4gKiBzaXplb2YoWE1MX0NoYXIpKSk7Ci0KLSAgcmV0ID0gKFhNTF9Db250
ZW50ICopTUFMTE9DKGFsbG9jc2l6ZSk7Ci0gIGlmICghcmV0KQotICAgIHJldHVybiBOVUxMOwot
Ci0gIHN0ciA9ICAoWE1MX0NoYXIgKikgKCZyZXRbZHRkLT5zY2FmZkNvdW50XSk7Ci0gIGNwb3Mg
PSAmcmV0WzFdOwotCi0gIGJ1aWxkX25vZGUocGFyc2VyLCAwLCByZXQsICZjcG9zLCAmc3RyKTsK
LSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEVMRU1FTlRfVFlQRSAqCi1nZXRFbGVtZW50VHlw
ZShYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMs
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICBjb25zdCBj
aGFyICplbmQpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZl
bCBvZiBpbmRpcmVjdGlvbiAqLwotICBjb25zdCBYTUxfQ2hhciAqbmFtZSA9IHBvb2xTdG9yZVN0
cmluZygmZHRkLT5wb29sLCBlbmMsIHB0ciwgZW5kKTsKLSAgRUxFTUVOVF9UWVBFICpyZXQ7Ci0K
LSAgaWYgKCFuYW1lKQotICAgIHJldHVybiBOVUxMOwotICByZXQgPSAoRUxFTUVOVF9UWVBFICop
IGxvb2t1cChwYXJzZXIsICZkdGQtPmVsZW1lbnRUeXBlcywgbmFtZSwgc2l6ZW9mKEVMRU1FTlRf
VFlQRSkpOwotICBpZiAoIXJldCkKLSAgICByZXR1cm4gTlVMTDsKLSAgaWYgKHJldC0+bmFtZSAh
PSBuYW1lKQotICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOwotICBlbHNlIHsKLSAgICBwb29s
RmluaXNoKCZkdGQtPnBvb2wpOwotICAgIGlmICghc2V0RWxlbWVudFR5cGVQcmVmaXgocGFyc2Vy
LCByZXQpKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhw
YXQvZmlsZXMvbGliL3htbHBhcnNlLmMub3JpZ2luYWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxwYXJzZS5jLm9yaWdp
bmFsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzVhYTM2YmE4YTdmY2UzYmFlOTBm
MzFiMjAzNTQ0MzViMTVkMmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
ZXhwYXQvZmlsZXMvbGliL3htbHBhcnNlLmMub3JpZ2luYWwKKysrIC9kZXYvbnVsbApAQCAtMSw2
NDAzICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4g
U291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBj
b3B5aW5nIHBlcm1pc3Npb24uCi0qLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+ICAgICAgICAgICAgICAgICAgICAgLyogbWVtc2V0KCksIG1lbWNweSgpICovCi0j
aW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgICAgICAg
ICAgLyogVUlOVF9NQVggKi8KLSNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAg
ICAvKiB0aW1lKCkgKi8KLQotI2RlZmluZSBYTUxfQlVJTERJTkdfRVhQQVQgMQotCi0jaWZkZWYg
Q09NUElMRURfRlJPTV9EU1AKLSNpbmNsdWRlICJ3aW5jb25maWcuaCIKLSNlbGlmIGRlZmluZWQo
TUFDT1NfQ0xBU1NJQykKLSNpbmNsdWRlICJtYWNjb25maWcuaCIKLSNlbGlmIGRlZmluZWQoX19h
bWlnYW9zX18pCi0jaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKLSNlbGlmIGRlZmluZWQoX19XQVRD
T01DX18pCi0jaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCi0jZWxpZiBkZWZpbmVkKEhBVkVfRVhQ
QVRfQ09ORklHX0gpCi0jaW5jbHVkZSA8ZXhwYXRfY29uZmlnLmg+Ci0jZW5kaWYgLyogbmRlZiBD
T01QSUxFRF9GUk9NX0RTUCAqLwotCi0jaW5jbHVkZSAiYXNjaWkuaCIKLSNpbmNsdWRlICJleHBh
dC5oIgotCi0jaWZkZWYgWE1MX1VOSUNPREUKLSNkZWZpbmUgWE1MX0VOQ09ERV9NQVggWE1MX1VU
RjE2X0VOQ09ERV9NQVgKLSNkZWZpbmUgWG1sQ29udmVydCBYbWxVdGYxNkNvbnZlcnQKLSNkZWZp
bmUgWG1sR2V0SW50ZXJuYWxFbmNvZGluZyBYbWxHZXRVdGYxNkludGVybmFsRW5jb2RpbmcKLSNk
ZWZpbmUgWG1sR2V0SW50ZXJuYWxFbmNvZGluZ05TIFhtbEdldFV0ZjE2SW50ZXJuYWxFbmNvZGlu
Z05TCi0jZGVmaW5lIFhtbEVuY29kZSBYbWxVdGYxNkVuY29kZQotLyogVXNpbmcgcG9pbnRlciBz
dWJ0cmFjdGlvbiB0byBjb252ZXJ0IHRvIGludGVnZXIgdHlwZS4gKi8KLSNkZWZpbmUgTVVTVF9D
T05WRVJUKGVuYywgcykgKCEoZW5jKS0+aXNVdGYxNiB8fCAoKChjaGFyICopKHMpIC0gKGNoYXIg
KilOVUxMKSAmIDEpKQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBJQ0hBUjsKLSNlbHNlCi0jZGVm
aW5lIFhNTF9FTkNPREVfTUFYIFhNTF9VVEY4X0VOQ09ERV9NQVgKLSNkZWZpbmUgWG1sQ29udmVy
dCBYbWxVdGY4Q29udmVydAotI2RlZmluZSBYbWxHZXRJbnRlcm5hbEVuY29kaW5nIFhtbEdldFV0
ZjhJbnRlcm5hbEVuY29kaW5nCi0jZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmdOUyBYbWxH
ZXRVdGY4SW50ZXJuYWxFbmNvZGluZ05TCi0jZGVmaW5lIFhtbEVuY29kZSBYbWxVdGY4RW5jb2Rl
Ci0jZGVmaW5lIE1VU1RfQ09OVkVSVChlbmMsIHMpICghKGVuYyktPmlzVXRmOCkKLXR5cGVkZWYg
Y2hhciBJQ0hBUjsKLSNlbmRpZgotCi0KLSNpZm5kZWYgWE1MX05TCi0KLSNkZWZpbmUgWG1sSW5p
dEVuY29kaW5nTlMgWG1sSW5pdEVuY29kaW5nCi0jZGVmaW5lIFhtbEluaXRVbmtub3duRW5jb2Rp
bmdOUyBYbWxJbml0VW5rbm93bkVuY29kaW5nCi0jdW5kZWYgWG1sR2V0SW50ZXJuYWxFbmNvZGlu
Z05TCi0jZGVmaW5lIFhtbEdldEludGVybmFsRW5jb2RpbmdOUyBYbWxHZXRJbnRlcm5hbEVuY29k
aW5nCi0jZGVmaW5lIFhtbFBhcnNlWG1sRGVjbE5TIFhtbFBhcnNlWG1sRGVjbAotCi0jZW5kaWYK
LQotI2lmZGVmIFhNTF9VTklDT0RFCi0KLSNpZmRlZiBYTUxfVU5JQ09ERV9XQ0hBUl9UCi0jZGVm
aW5lIFhNTF9UKHgpIChjb25zdCB3Y2hhcl90KXgKLSNkZWZpbmUgWE1MX0woeCkgTCAjIyB4Ci0j
ZWxzZQotI2RlZmluZSBYTUxfVCh4KSAoY29uc3QgdW5zaWduZWQgc2hvcnQpeAotI2RlZmluZSBY
TUxfTCh4KSB4Ci0jZW5kaWYKLQotI2Vsc2UKLQotI2RlZmluZSBYTUxfVCh4KSB4Ci0jZGVmaW5l
IFhNTF9MKHgpIHgKLQotI2VuZGlmCi0KLS8qIFJvdW5kIHVwIG4gdG8gYmUgYSBtdWx0aXBsZSBv
ZiBzeiwgd2hlcmUgc3ogaXMgYSBwb3dlciBvZiAyLiAqLwotI2RlZmluZSBST1VORF9VUChuLCBz
eikgKCgobikgKyAoKHN6KSAtIDEpKSAmIH4oKHN6KSAtIDEpKQotCi0vKiBIYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgbWVtbW92ZSgpIGRvZXNuJ3QgZXhpc3QuICovCi0jaWZuZGVmIEhBVkVfTUVNTU9W
RQotI2lmZGVmIEhBVkVfQkNPUFkKLSNkZWZpbmUgbWVtbW92ZShkLHMsbCkgYmNvcHkoKHMpLChk
KSwobCkpCi0jZWxzZQotI2Vycm9yIG1lbW1vdmUgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBwbGF0
Zm9ybSwgbm9yIGlzIGEgc3Vic3RpdHV0ZSBhdmFpbGFibGUKLSNlbmRpZiAvKiBIQVZFX0JDT1BZ
ICovCi0jZW5kaWYgLyogSEFWRV9NRU1NT1ZFICovCi0KLSNpbmNsdWRlICJpbnRlcm5hbC5oIgot
I2luY2x1ZGUgInhtbHRvay5oIgotI2luY2x1ZGUgInhtbHJvbGUuaCIKLQotdHlwZWRlZiBjb25z
dCBYTUxfQ2hhciAqS0VZOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIEtFWSBuYW1lOwotfSBOQU1F
RDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBOQU1FRCAqKnY7Ci0gIHVuc2lnbmVkIGNoYXIgcG93
ZXI7Ci0gIHNpemVfdCBzaXplOwotICBzaXplX3QgdXNlZDsKLSAgY29uc3QgWE1MX01lbW9yeV9I
YW5kbGluZ19TdWl0ZSAqbWVtOwotfSBIQVNIX1RBQkxFOwotCi0vKiBCYXNpYyBjaGFyYWN0ZXIg
aGFzaCBhbGdvcml0aG0sIHRha2VuIGZyb20gUHl0aG9uJ3Mgc3RyaW5nIGhhc2g6Ci0gICBoID0g
aCAqIDEwMDAwMDMgXiBjaGFyYWN0ZXIsIHRoZSBjb25zdGFudCBiZWluZyBhIHByaW1lIG51bWJl
ci4KLQotKi8KLSNpZmRlZiBYTUxfVU5JQ09ERQotI2RlZmluZSBDSEFSX0hBU0goaCwgYykgXAot
ICAoKChoKSAqIDB4RjQyNDMpIF4gKHVuc2lnbmVkIHNob3J0KShjKSkKLSNlbHNlCi0jZGVmaW5l
IENIQVJfSEFTSChoLCBjKSBcCi0gICgoKGgpICogMHhGNDI0MykgXiAodW5zaWduZWQgY2hhciko
YykpCi0jZW5kaWYKLQotLyogRm9yIHByb2JpbmcgKGFmdGVyIGEgY29sbGlzaW9uKSB3ZSBuZWVk
IGEgc3RlcCBzaXplIHJlbGF0aXZlIHByaW1lCi0gICB0byB0aGUgaGFzaCB0YWJsZSBzaXplLCB3
aGljaCBpcyBhIHBvd2VyIG9mIDIuIFdlIHVzZSBkb3VibGUtaGFzaGluZywKLSAgIHNpbmNlIHdl
IGNhbiBjYWxjdWxhdGUgYSBzZWNvbmQgaGFzaCB2YWx1ZSBjaGVhcGx5IGJ5IHRha2luZyB0aG9z
ZSBiaXRzCi0gICBvZiB0aGUgZmlyc3QgaGFzaCB2YWx1ZSB0aGF0IHdlcmUgZGlzY2FyZGVkICht
YXNrZWQgb3V0KSB3aGVuIHRoZSB0YWJsZQotICAgaW5kZXggd2FzIGNhbGN1bGF0ZWQ6IGluZGV4
ID0gaGFzaCAmIG1hc2ssIHdoZXJlIG1hc2sgPSB0YWJsZS0+c2l6ZSAtIDEuCi0gICBXZSBsaW1p
dCB0aGUgbWF4aW11bSBzdGVwIHNpemUgdG8gdGFibGUtPnNpemUgLyA0IChtYXNrID4+IDIpIGFu
ZCBtYWtlCi0gICBpdCBvZGQsIHNpbmNlIG9kZCBudW1iZXJzIGFyZSBhbHdheXMgcmVsYXRpdmUg
cHJpbWUgdG8gYSBwb3dlciBvZiAyLgotKi8KLSNkZWZpbmUgU0VDT05EX0hBU0goaGFzaCwgbWFz
aywgcG93ZXIpIFwKLSAgKCgoKGhhc2gpICYgfihtYXNrKSkgPj4gKChwb3dlcikgLSAxKSkgJiAo
KG1hc2spID4+IDIpKQotI2RlZmluZSBQUk9CRV9TVEVQKGhhc2gsIG1hc2ssIHBvd2VyKSBcCi0g
ICgodW5zaWduZWQgY2hhcikoKFNFQ09ORF9IQVNIKGhhc2gsIG1hc2ssIHBvd2VyKSkgfCAxKSkK
LQotdHlwZWRlZiBzdHJ1Y3QgewotICBOQU1FRCAqKnA7Ci0gIE5BTUVEICoqZW5kOwotfSBIQVNI
X1RBQkxFX0lURVI7Ci0KLSNkZWZpbmUgSU5JVF9UQUdfQlVGX1NJWkUgMzIgIC8qIG11c3QgYmUg
YSBtdWx0aXBsZSBvZiBzaXplb2YoWE1MX0NoYXIpICovCi0jZGVmaW5lIElOSVRfREFUQV9CVUZf
U0laRSAxMDI0Ci0jZGVmaW5lIElOSVRfQVRUU19TSVpFIDE2Ci0jZGVmaW5lIElOSVRfQVRUU19W
RVJTSU9OIDB4RkZGRkZGRkYKLSNkZWZpbmUgSU5JVF9CTE9DS19TSVpFIDEwMjQKLSNkZWZpbmUg
SU5JVF9CVUZGRVJfU0laRSAxMDI0Ci0KLSNkZWZpbmUgRVhQQU5EX1NQQVJFIDI0Ci0KLXR5cGVk
ZWYgc3RydWN0IGJpbmRpbmcgewotICBzdHJ1Y3QgcHJlZml4ICpwcmVmaXg7Ci0gIHN0cnVjdCBi
aW5kaW5nICpuZXh0VGFnQmluZGluZzsKLSAgc3RydWN0IGJpbmRpbmcgKnByZXZQcmVmaXhCaW5k
aW5nOwotICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2lkICphdHRJZDsKLSAgWE1MX0NoYXIgKnVy
aTsKLSAgaW50IHVyaUxlbjsKLSAgaW50IHVyaUFsbG9jOwotfSBCSU5ESU5HOwotCi10eXBlZGVm
IHN0cnVjdCBwcmVmaXggewotICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKLSAgQklORElORyAqYmlu
ZGluZzsKLX0gUFJFRklYOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IFhNTF9DaGFyICpz
dHI7Ci0gIGNvbnN0IFhNTF9DaGFyICpsb2NhbFBhcnQ7Ci0gIGNvbnN0IFhNTF9DaGFyICpwcmVm
aXg7Ci0gIGludCBzdHJMZW47Ci0gIGludCB1cmlMZW47Ci0gIGludCBwcmVmaXhMZW47Ci19IFRB
R19OQU1FOwotCi0vKiBUQUcgcmVwcmVzZW50cyBhbiBvcGVuIGVsZW1lbnQuCi0gICBUaGUgbmFt
ZSBvZiB0aGUgZWxlbWVudCBpcyBzdG9yZWQgaW4gYm90aCB0aGUgZG9jdW1lbnQgYW5kIEFQSQot
ICAgZW5jb2RpbmdzLiAgVGhlIG1lbW9yeSBidWZmZXIgJ2J1ZicgaXMgYSBzZXBhcmF0ZWx5LWFs
bG9jYXRlZAotICAgbWVtb3J5IGFyZWEgd2hpY2ggc3RvcmVzIHRoZSBuYW1lLiAgRHVyaW5nIHRo
ZSBYTUxfUGFyc2UoKS8KLSAgIFhNTFBhcnNlQnVmZmVyKCkgd2hlbiB0aGUgZWxlbWVudCBpcyBv
cGVuLCB0aGUgbWVtb3J5IGZvciB0aGUgJ3JhdycKLSAgIHZlcnNpb24gb2YgdGhlIG5hbWUgKGlu
IHRoZSBkb2N1bWVudCBlbmNvZGluZykgaXMgc2hhcmVkIHdpdGggdGhlCi0gICBkb2N1bWVudCBi
dWZmZXIuICBJZiB0aGUgZWxlbWVudCBpcyBvcGVuIGFjcm9zcyBjYWxscyB0bwotICAgWE1MX1Bh
cnNlKCkvWE1MX1BhcnNlQnVmZmVyKCksIHRoZSBidWZmZXIgaXMgcmUtYWxsb2NhdGVkIHRvCi0g
ICBjb250YWluIHRoZSAncmF3JyBuYW1lIGFzIHdlbGwuCi0KLSAgIEEgcGFyc2VyIHJlLXVzZXMg
dGhlc2Ugc3RydWN0dXJlcywgbWFpbnRhaW5pbmcgYSBsaXN0IG9mIGFsbG9jYXRlZAotICAgVEFH
IG9iamVjdHMgaW4gYSBmcmVlIGxpc3QuCi0qLwotdHlwZWRlZiBzdHJ1Y3QgdGFnIHsKLSAgc3Ry
dWN0IHRhZyAqcGFyZW50OyAgICAgICAgICAgLyogcGFyZW50IG9mIHRoaXMgZWxlbWVudCAqLwot
ICBjb25zdCBjaGFyICpyYXdOYW1lOyAgICAgICAgICAvKiB0YWdOYW1lIGluIHRoZSBvcmlnaW5h
bCBlbmNvZGluZyAqLwotICBpbnQgcmF3TmFtZUxlbmd0aDsKLSAgVEFHX05BTUUgbmFtZTsgICAg
ICAgICAgICAgICAgLyogdGFnTmFtZSBpbiB0aGUgQVBJIGVuY29kaW5nICovCi0gIGNoYXIgKmJ1
ZjsgICAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgbmFtZSBjb21wb25lbnRzICovCi0g
IGNoYXIgKmJ1ZkVuZDsgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiB0aGUgYnVmZmVyICovCi0g
IEJJTkRJTkcgKmJpbmRpbmdzOwotfSBUQUc7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3Qg
WE1MX0NoYXIgKm5hbWU7Ci0gIGNvbnN0IFhNTF9DaGFyICp0ZXh0UHRyOwotICBpbnQgdGV4dExl
bjsgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggaW4gWE1MX0NoYXJzICovCi0gIGludCBwcm9j
ZXNzZWQ7ICAgICAgICAgICAgICAgIC8qICMgb2YgcHJvY2Vzc2VkIGJ5dGVzIC0gd2hlbiBzdXNw
ZW5kZWQgKi8KLSAgY29uc3QgWE1MX0NoYXIgKnN5c3RlbUlkOwotICBjb25zdCBYTUxfQ2hhciAq
YmFzZTsKLSAgY29uc3QgWE1MX0NoYXIgKnB1YmxpY0lkOwotICBjb25zdCBYTUxfQ2hhciAqbm90
YXRpb247Ci0gIFhNTF9Cb29sIG9wZW47Ci0gIFhNTF9Cb29sIGlzX3BhcmFtOwotICBYTUxfQm9v
bCBpc19pbnRlcm5hbDsgLyogdHJ1ZSBpZiBkZWNsYXJlZCBpbiBpbnRlcm5hbCBzdWJzZXQgb3V0
c2lkZSBQRSAqLwotfSBFTlRJVFk7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgZW51bSBYTUxfQ29u
dGVudF9UeXBlICAgICAgICAgdHlwZTsKLSAgZW51bSBYTUxfQ29udGVudF9RdWFudCAgICAgICAg
cXVhbnQ7Ci0gIGNvbnN0IFhNTF9DaGFyICogICAgICAgICAgICAgIG5hbWU7Ci0gIGludCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Y2hpbGQ7Ci0gIGludCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RjaGlsZDsKLSAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRjbnQ7Ci0gIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzaWI7Ci19IENPTlRF
TlRfU0NBRkZPTEQ7Ci0KLSNkZWZpbmUgSU5JVF9TQ0FGRk9MRF9FTEVNRU5UUyAzMgotCi10eXBl
ZGVmIHN0cnVjdCBibG9jayB7Ci0gIHN0cnVjdCBibG9jayAqbmV4dDsKLSAgaW50IHNpemU7Ci0g
IFhNTF9DaGFyIHNbMV07Ci19IEJMT0NLOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIEJMT0NLICpi
bG9ja3M7Ci0gIEJMT0NLICpmcmVlQmxvY2tzOwotICBjb25zdCBYTUxfQ2hhciAqZW5kOwotICBY
TUxfQ2hhciAqcHRyOwotICBYTUxfQ2hhciAqc3RhcnQ7Ci0gIGNvbnN0IFhNTF9NZW1vcnlfSGFu
ZGxpbmdfU3VpdGUgKm1lbTsKLX0gU1RSSU5HX1BPT0w7Ci0KLS8qIFRoZSBYTUxfQ2hhciBiZWZv
cmUgdGhlIG5hbWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlcgotICAgYW4gYXR0cmlidXRl
IGhhcyBiZWVuIHNwZWNpZmllZC4gKi8KLXR5cGVkZWYgc3RydWN0IGF0dHJpYnV0ZV9pZCB7Ci0g
IFhNTF9DaGFyICpuYW1lOwotICBQUkVGSVggKnByZWZpeDsKLSAgWE1MX0Jvb2wgbWF5YmVUb2tl
bml6ZWQ7Ci0gIFhNTF9Cb29sIHhtbG5zOwotfSBBVFRSSUJVVEVfSUQ7Ci0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgY29uc3QgQVRUUklCVVRFX0lEICppZDsKLSAgWE1MX0Jvb2wgaXNDZGF0YTsKLSAg
Y29uc3QgWE1MX0NoYXIgKnZhbHVlOwotfSBERUZBVUxUX0FUVFJJQlVURTsKLQotdHlwZWRlZiBz
dHJ1Y3QgewotICB1bnNpZ25lZCBsb25nIHZlcnNpb247Ci0gIHVuc2lnbmVkIGxvbmcgaGFzaDsK
LSAgY29uc3QgWE1MX0NoYXIgKnVyaU5hbWU7Ci19IE5TX0FUVDsKLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKLSAgUFJFRklYICpwcmVmaXg7Ci0gIGNvbnN0IEFU
VFJJQlVURV9JRCAqaWRBdHQ7Ci0gIGludCBuRGVmYXVsdEF0dHM7Ci0gIGludCBhbGxvY0RlZmF1
bHRBdHRzOwotICBERUZBVUxUX0FUVFJJQlVURSAqZGVmYXVsdEF0dHM7Ci19IEVMRU1FTlRfVFlQ
RTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBIQVNIX1RBQkxFIGdlbmVyYWxFbnRpdGllczsKLSAg
SEFTSF9UQUJMRSBlbGVtZW50VHlwZXM7Ci0gIEhBU0hfVEFCTEUgYXR0cmlidXRlSWRzOwotICBI
QVNIX1RBQkxFIHByZWZpeGVzOwotICBTVFJJTkdfUE9PTCBwb29sOwotICBTVFJJTkdfUE9PTCBl
bnRpdHlWYWx1ZVBvb2w7Ci0gIC8qIGZhbHNlIG9uY2UgYSBwYXJhbWV0ZXIgZW50aXR5IHJlZmVy
ZW5jZSBoYXMgYmVlbiBza2lwcGVkICovCi0gIFhNTF9Cb29sIGtlZXBQcm9jZXNzaW5nOwotICAv
KiB0cnVlIG9uY2UgYW4gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgUEUgcmVmZXJlbmNlIGhhcyBiZWVu
IGVuY291bnRlcmVkOwotICAgICB0aGlzIGluY2x1ZGVzIHRoZSByZWZlcmVuY2UgdG8gYW4gZXh0
ZXJuYWwgc3Vic2V0ICovCi0gIFhNTF9Cb29sIGhhc1BhcmFtRW50aXR5UmVmczsKLSAgWE1MX0Jv
b2wgc3RhbmRhbG9uZTsKLSNpZmRlZiBYTUxfRFRECi0gIC8qIGluZGljYXRlcyBpZiBleHRlcm5h
bCBQRSBoYXMgYmVlbiByZWFkICovCi0gIFhNTF9Cb29sIHBhcmFtRW50aXR5UmVhZDsKLSAgSEFT
SF9UQUJMRSBwYXJhbUVudGl0aWVzOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgUFJFRklYIGRl
ZmF1bHRQcmVmaXg7Ci0gIC8qID09PSBzY2FmZm9sZGluZyBmb3IgYnVpbGRpbmcgY29udGVudCBt
b2RlbCA9PT0gKi8KLSAgWE1MX0Jvb2wgaW5fZWxkZWNsOwotICBDT05URU5UX1NDQUZGT0xEICpz
Y2FmZm9sZDsKLSAgdW5zaWduZWQgY29udGVudFN0cmluZ0xlbjsKLSAgdW5zaWduZWQgc2NhZmZT
aXplOwotICB1bnNpZ25lZCBzY2FmZkNvdW50OwotICBpbnQgc2NhZmZMZXZlbDsKLSAgaW50ICpz
Y2FmZkluZGV4OwotfSBEVEQ7Ci0KLXR5cGVkZWYgc3RydWN0IG9wZW5faW50ZXJuYWxfZW50aXR5
IHsKLSAgY29uc3QgY2hhciAqaW50ZXJuYWxFdmVudFB0cjsKLSAgY29uc3QgY2hhciAqaW50ZXJu
YWxFdmVudEVuZFB0cjsKLSAgc3RydWN0IG9wZW5faW50ZXJuYWxfZW50aXR5ICpuZXh0OwotICBF
TlRJVFkgKmVudGl0eTsKLSAgaW50IHN0YXJ0VGFnTGV2ZWw7Ci0gIFhNTF9Cb29sIGJldHdlZW5E
ZWNsOyAvKiBXRkM6IFBFIEJldHdlZW4gRGVjbGFyYXRpb25zICovCi19IE9QRU5fSU5URVJOQUxf
RU5USVRZOwotCi10eXBlZGVmIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwgUHJvY2Vzc29yKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqZW5kUHRyKTsKLQotc3RhdGljIFByb2Nlc3NvciBwcm9sb2dQcm9j
ZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIHByb2xvZ0luaXRQcm9jZXNzb3I7Ci1zdGF0aWMgUHJv
Y2Vzc29yIGNvbnRlbnRQcm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIGNkYXRhU2VjdGlvblBy
b2Nlc3NvcjsKLSNpZmRlZiBYTUxfRFRECi1zdGF0aWMgUHJvY2Vzc29yIGlnbm9yZVNlY3Rpb25Q
cm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsUGFyRW50UHJvY2Vzc29yOwotc3Rh
dGljIFByb2Nlc3NvciBleHRlcm5hbFBhckVudEluaXRQcm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vz
c29yIGVudGl0eVZhbHVlUHJvY2Vzc29yOwotc3RhdGljIFByb2Nlc3NvciBlbnRpdHlWYWx1ZUlu
aXRQcm9jZXNzb3I7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotc3RhdGljIFByb2Nlc3NvciBlcGls
b2dQcm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIGVycm9yUHJvY2Vzc29yOwotc3RhdGljIFBy
b2Nlc3NvciBleHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3I7Ci1zdGF0aWMgUHJvY2Vzc29yIGV4
dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjI7Ci1zdGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsRW50
aXR5SW5pdFByb2Nlc3NvcjM7Ci1zdGF0aWMgUHJvY2Vzc29yIGV4dGVybmFsRW50aXR5Q29udGVu
dFByb2Nlc3NvcjsKLXN0YXRpYyBQcm9jZXNzb3IgaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3I7Ci0K
LXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotaGFuZGxlVW5rbm93bkVuY29kaW5nKFhNTF9QYXJzZXIg
cGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKTsKLXN0YXRpYyBlbnVtIFhNTF9F
cnJvcgotcHJvY2Vzc1htbERlY2woWE1MX1BhcnNlciBwYXJzZXIsIGludCBpc0dlbmVyYWxUZXh0
RW50aXR5LAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbmV4dCk7
Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWluaXRpYWxpemVFbmNvZGluZyhYTUxfUGFyc2VyIHBh
cnNlcik7Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWRvUHJvbG9nKFhNTF9QYXJzZXIgcGFyc2Vy
LCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpzLAotICAgICAgICAgY29uc3QgY2hh
ciAqZW5kLCBpbnQgdG9rLCBjb25zdCBjaGFyICpuZXh0LCBjb25zdCBjaGFyICoqbmV4dFB0ciwK
LSAgICAgICAgIFhNTF9Cb29sIGhhdmVNb3JlKTsKLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotcHJv
Y2Vzc0ludGVybmFsRW50aXR5KFhNTF9QYXJzZXIgcGFyc2VyLCBFTlRJVFkgKmVudGl0eSwKLSAg
ICAgICAgICAgICAgICAgICAgICBYTUxfQm9vbCBiZXR3ZWVuRGVjbCk7Ci1zdGF0aWMgZW51bSBY
TUxfRXJyb3IKLWRvQ29udGVudChYTUxfUGFyc2VyIHBhcnNlciwgaW50IHN0YXJ0VGFnTGV2ZWws
IGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0
IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKmVuZFB0ciwKLSAgICAgICAgICBYTUxfQm9vbCBoYXZl
TW9yZSk7Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWRvQ2RhdGFTZWN0aW9uKFhNTF9QYXJzZXIg
cGFyc2VyLCBjb25zdCBFTkNPRElORyAqLCBjb25zdCBjaGFyICoqc3RhcnRQdHIsCi0gICAgICAg
ICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0UHRyLCBYTUxfQm9vbCBo
YXZlTW9yZSk7Ci0jaWZkZWYgWE1MX0RURAotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb0lnbm9y
ZVNlY3Rpb24oWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIGNvbnN0IGNoYXIg
KipzdGFydFB0ciwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIg
KipuZXh0UHRyLCBYTUxfQm9vbCBoYXZlTW9yZSk7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotCi1z
dGF0aWMgZW51bSBYTUxfRXJyb3IKLXN0b3JlQXR0cyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3Qg
RU5DT0RJTkcgKiwgY29uc3QgY2hhciAqcywKLSAgICAgICAgICBUQUdfTkFNRSAqdGFnTmFtZVB0
ciwgQklORElORyAqKmJpbmRpbmdzUHRyKTsKLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotYWRkQmlu
ZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgUFJFRklYICpwcmVmaXgsIGNvbnN0IEFUVFJJQlVURV9J
RCAqYXR0SWQsCi0gICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmksIEJJTkRJTkcgKipiaW5k
aW5nc1B0cik7Ci1zdGF0aWMgaW50Ci1kZWZpbmVBdHRyaWJ1dGUoRUxFTUVOVF9UWVBFICp0eXBl
LCBBVFRSSUJVVEVfSUQgKiwgWE1MX0Jvb2wgaXNDZGF0YSwKLSAgICAgICAgICAgICAgICBYTUxf
Qm9vbCBpc0lkLCBjb25zdCBYTUxfQ2hhciAqZGZsdFZhbHVlLCBYTUxfUGFyc2VyIHBhcnNlcik7
Ci1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLXN0b3JlQXR0cmlidXRlVmFsdWUoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IEVOQ09ESU5HICosIFhNTF9Cb29sIGlzQ2RhdGEsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBTVFJJTkdfUE9PTCAqKTsKLXN0YXRp
YyBlbnVtIFhNTF9FcnJvcgotYXBwZW5kQXR0cmlidXRlVmFsdWUoWE1MX1BhcnNlciBwYXJzZXIs
IGNvbnN0IEVOQ09ESU5HICosIFhNTF9Cb29sIGlzQ2RhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgU1RSSU5HX1BPT0wgKik7Ci1zdGF0aWMgQVRU
UklCVVRFX0lEICoKLWdldEF0dHJpYnV0ZUlkKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNP
RElORyAqZW5jLCBjb25zdCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmVuZCk7Ci1zdGF0aWMgaW50Ci1zZXRFbGVtZW50VHlwZVByZWZpeChYTUxfUGFyc2VyIHBhcnNl
ciwgRUxFTUVOVF9UWVBFICopOwotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1zdG9yZUVudGl0eVZh
bHVlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpz
dGFydCwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKTsKLXN0YXRpYyBpbnQKLXJl
cG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJ
TkcgKmVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwg
Y29uc3QgY2hhciAqZW5kKTsKLXN0YXRpYyBpbnQKLXJlcG9ydENvbW1lbnQoWE1MX1BhcnNlciBw
YXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnN0YXJ0LAotICAgICAgICAg
ICAgICBjb25zdCBjaGFyICplbmQpOwotc3RhdGljIHZvaWQKLXJlcG9ydERlZmF1bHQoWE1MX1Bh
cnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnN0YXJ0LAotICAg
ICAgICAgICAgICBjb25zdCBjaGFyICplbmQpOwotCi1zdGF0aWMgY29uc3QgWE1MX0NoYXIgKiBn
ZXRDb250ZXh0KFhNTF9QYXJzZXIgcGFyc2VyKTsKLXN0YXRpYyBYTUxfQm9vbAotc2V0Q29udGV4
dChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIgKmNvbnRleHQpOwotCi1zdGF0aWMg
dm9pZCBGQVNUQ0FMTCBub3JtYWxpemVQdWJsaWNJZChYTUxfQ2hhciAqcyk7Ci0KLXN0YXRpYyBE
VEQgKiBkdGRDcmVhdGUoY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOwotLyog
ZG8gbm90IGNhbGwgaWYgcGFyZW50UGFyc2VyICE9IE5VTEwgKi8KLXN0YXRpYyB2b2lkIGR0ZFJl
c2V0KERURCAqcCwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOwotc3RhdGlj
IHZvaWQKLWR0ZERlc3Ryb3koRFREICpwLCBYTUxfQm9vbCBpc0RvY0VudGl0eSwgY29uc3QgWE1M
X01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpOwotc3RhdGljIGludAotZHRkQ29weShYTUxfUGFy
c2VyIG9sZFBhcnNlciwKLSAgICAgICAgRFREICpuZXdEdGQsIGNvbnN0IERURCAqb2xkRHRkLCBj
b25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcyk7Ci1zdGF0aWMgaW50Ci1jb3B5RW50
aXR5VGFibGUoWE1MX1BhcnNlciBvbGRQYXJzZXIsCi0gICAgICAgICAgICAgICAgSEFTSF9UQUJM
RSAqLCBTVFJJTkdfUE9PTCAqLCBjb25zdCBIQVNIX1RBQkxFICopOwotc3RhdGljIE5BTUVEICoK
LWxvb2t1cChYTUxfUGFyc2VyIHBhcnNlciwgSEFTSF9UQUJMRSAqdGFibGUsIEtFWSBuYW1lLCBz
aXplX3QgY3JlYXRlU2l6ZSk7Ci1zdGF0aWMgdm9pZCBGQVNUQ0FMTAotaGFzaFRhYmxlSW5pdChI
QVNIX1RBQkxFICosIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKTsKLXN0YXRp
YyB2b2lkIEZBU1RDQUxMIGhhc2hUYWJsZUNsZWFyKEhBU0hfVEFCTEUgKik7Ci1zdGF0aWMgdm9p
ZCBGQVNUQ0FMTCBoYXNoVGFibGVEZXN0cm95KEhBU0hfVEFCTEUgKik7Ci1zdGF0aWMgdm9pZCBG
QVNUQ0FMTAotaGFzaFRhYmxlSXRlckluaXQoSEFTSF9UQUJMRV9JVEVSICosIGNvbnN0IEhBU0hf
VEFCTEUgKik7Ci1zdGF0aWMgTkFNRUQgKiBGQVNUQ0FMTCBoYXNoVGFibGVJdGVyTmV4dChIQVNI
X1RBQkxFX0lURVIgKik7Ci0KLXN0YXRpYyB2b2lkIEZBU1RDQUxMCi1wb29sSW5pdChTVFJJTkdf
UE9PTCAqLCBjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcyk7Ci1zdGF0aWMgdm9p
ZCBGQVNUQ0FMTCBwb29sQ2xlYXIoU1RSSU5HX1BPT0wgKik7Ci1zdGF0aWMgdm9pZCBGQVNUQ0FM
TCBwb29sRGVzdHJveShTVFJJTkdfUE9PTCAqKTsKLXN0YXRpYyBYTUxfQ2hhciAqCi1wb29sQXBw
ZW5kKFNUUklOR19QT09MICpwb29sLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICBj
b25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCk7Ci1zdGF0aWMgWE1MX0NoYXIgKgotcG9v
bFN0b3JlU3RyaW5nKFNUUklOR19QT09MICpwb29sLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKTsKLXN0YXRpYyBY
TUxfQm9vbCBGQVNUQ0FMTCBwb29sR3JvdyhTVFJJTkdfUE9PTCAqcG9vbCk7Ci1zdGF0aWMgY29u
c3QgWE1MX0NoYXIgKiBGQVNUQ0FMTAotcG9vbENvcHlTdHJpbmcoU1RSSU5HX1BPT0wgKnBvb2ws
IGNvbnN0IFhNTF9DaGFyICpzKTsKLXN0YXRpYyBjb25zdCBYTUxfQ2hhciAqCi1wb29sQ29weVN0
cmluZ04oU1RSSU5HX1BPT0wgKnBvb2wsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbik7Ci1zdGF0
aWMgY29uc3QgWE1MX0NoYXIgKiBGQVNUQ0FMTAotcG9vbEFwcGVuZFN0cmluZyhTVFJJTkdfUE9P
TCAqcG9vbCwgY29uc3QgWE1MX0NoYXIgKnMpOwotCi1zdGF0aWMgaW50IEZBU1RDQUxMIG5leHRT
Y2FmZm9sZFBhcnQoWE1MX1BhcnNlciBwYXJzZXIpOwotc3RhdGljIFhNTF9Db250ZW50ICogYnVp
bGRfbW9kZWwoWE1MX1BhcnNlciBwYXJzZXIpOwotc3RhdGljIEVMRU1FTlRfVFlQRSAqCi1nZXRF
bGVtZW50VHlwZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKTsKLQotc3RhdGljIHVu
c2lnbmVkIGxvbmcgZ2VuZXJhdGVfaGFzaF9zZWNyZXRfc2FsdCh2b2lkKTsKLXN0YXRpYyBYTUxf
Qm9vbCBzdGFydFBhcnNpbmcoWE1MX1BhcnNlciBwYXJzZXIpOwotCi1zdGF0aWMgWE1MX1BhcnNl
cgotcGFyc2VyQ3JlYXRlKGNvbnN0IFhNTF9DaGFyICplbmNvZGluZ05hbWUsCi0gICAgICAgICAg
ICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbWVtc3VpdGUsCi0gICAgICAgICAg
ICAgY29uc3QgWE1MX0NoYXIgKm5hbWVTZXAsCi0gICAgICAgICAgICAgRFREICpkdGQpOwotCi1z
dGF0aWMgdm9pZAotcGFyc2VySW5pdChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1MX0NoYXIg
KmVuY29kaW5nTmFtZSk7Ci0KLSNkZWZpbmUgcG9vbFN0YXJ0KHBvb2wpICgocG9vbCktPnN0YXJ0
KQotI2RlZmluZSBwb29sRW5kKHBvb2wpICgocG9vbCktPnB0cikKLSNkZWZpbmUgcG9vbExlbmd0
aChwb29sKSAoKHBvb2wpLT5wdHIgLSAocG9vbCktPnN0YXJ0KQotI2RlZmluZSBwb29sQ2hvcChw
b29sKSAoKHZvaWQpLS0ocG9vbC0+cHRyKSkKLSNkZWZpbmUgcG9vbExhc3RDaGFyKHBvb2wpICgo
KHBvb2wpLT5wdHIpWy0xXSkKLSNkZWZpbmUgcG9vbERpc2NhcmQocG9vbCkgKChwb29sKS0+cHRy
ID0gKHBvb2wpLT5zdGFydCkKLSNkZWZpbmUgcG9vbEZpbmlzaChwb29sKSAoKHBvb2wpLT5zdGFy
dCA9IChwb29sKS0+cHRyKQotI2RlZmluZSBwb29sQXBwZW5kQ2hhcihwb29sLCBjKSBcCi0gICgo
KHBvb2wpLT5wdHIgPT0gKHBvb2wpLT5lbmQgJiYgIXBvb2xHcm93KHBvb2wpKSBcCi0gICA/IDAg
XAotICAgOiAoKCooKHBvb2wpLT5wdHIpKysgPSBjKSwgMSkpCi0KLXN0cnVjdCBYTUxfUGFyc2Vy
U3RydWN0IHsKLSAgLyogVGhlIGZpcnN0IG1lbWJlciBtdXN0IGJlIHVzZXJEYXRhIHNvIHRoYXQg
dGhlIFhNTF9HZXRVc2VyRGF0YQotICAgICBtYWNybyB3b3Jrcy4gKi8KLSAgdm9pZCAqbV91c2Vy
RGF0YTsKLSAgdm9pZCAqbV9oYW5kbGVyQXJnOwotICBjaGFyICptX2J1ZmZlcjsKLSAgY29uc3Qg
WE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSBtX21lbTsKLSAgLyogZmlyc3QgY2hhcmFjdGVyIHRv
IGJlIHBhcnNlZCAqLwotICBjb25zdCBjaGFyICptX2J1ZmZlclB0cjsKLSAgLyogcGFzdCBsYXN0
IGNoYXJhY3RlciB0byBiZSBwYXJzZWQgKi8KLSAgY2hhciAqbV9idWZmZXJFbmQ7Ci0gIC8qIGFs
bG9jYXRlZCBlbmQgb2YgYnVmZmVyICovCi0gIGNvbnN0IGNoYXIgKm1fYnVmZmVyTGltOwotICBY
TUxfSW5kZXggbV9wYXJzZUVuZEJ5dGVJbmRleDsKLSAgY29uc3QgY2hhciAqbV9wYXJzZUVuZFB0
cjsKLSAgWE1MX0NoYXIgKm1fZGF0YUJ1ZjsKLSAgWE1MX0NoYXIgKm1fZGF0YUJ1ZkVuZDsKLSAg
WE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIgbV9zdGFydEVsZW1lbnRIYW5kbGVyOwotICBYTUxfRW5k
RWxlbWVudEhhbmRsZXIgbV9lbmRFbGVtZW50SGFuZGxlcjsKLSAgWE1MX0NoYXJhY3RlckRhdGFI
YW5kbGVyIG1fY2hhcmFjdGVyRGF0YUhhbmRsZXI7Ci0gIFhNTF9Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25IYW5kbGVyIG1fcHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcjsKLSAgWE1MX0NvbW1lbnRI
YW5kbGVyIG1fY29tbWVudEhhbmRsZXI7Ci0gIFhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIg
bV9zdGFydENkYXRhU2VjdGlvbkhhbmRsZXI7Ci0gIFhNTF9FbmRDZGF0YVNlY3Rpb25IYW5kbGVy
IG1fZW5kQ2RhdGFTZWN0aW9uSGFuZGxlcjsKLSAgWE1MX0RlZmF1bHRIYW5kbGVyIG1fZGVmYXVs
dEhhbmRsZXI7Ci0gIFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlciBtX3N0YXJ0RG9jdHlwZURl
Y2xIYW5kbGVyOwotICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIG1fZW5kRG9jdHlwZURlY2xI
YW5kbGVyOwotICBYTUxfVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciBtX3VucGFyc2VkRW50aXR5
RGVjbEhhbmRsZXI7Ci0gIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIG1fbm90YXRpb25EZWNsSGFu
ZGxlcjsKLSAgWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgbV9zdGFydE5hbWVzcGFjZURl
Y2xIYW5kbGVyOwotICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgbV9lbmROYW1lc3BhY2VE
ZWNsSGFuZGxlcjsKLSAgWE1MX05vdFN0YW5kYWxvbmVIYW5kbGVyIG1fbm90U3RhbmRhbG9uZUhh
bmRsZXI7Ci0gIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgbV9leHRlcm5hbEVudGl0eVJl
ZkhhbmRsZXI7Ci0gIFhNTF9QYXJzZXIgbV9leHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmc7Ci0g
IFhNTF9Ta2lwcGVkRW50aXR5SGFuZGxlciBtX3NraXBwZWRFbnRpdHlIYW5kbGVyOwotICBYTUxf
VW5rbm93bkVuY29kaW5nSGFuZGxlciBtX3Vua25vd25FbmNvZGluZ0hhbmRsZXI7Ci0gIFhNTF9F
bGVtZW50RGVjbEhhbmRsZXIgbV9lbGVtZW50RGVjbEhhbmRsZXI7Ci0gIFhNTF9BdHRsaXN0RGVj
bEhhbmRsZXIgbV9hdHRsaXN0RGVjbEhhbmRsZXI7Ci0gIFhNTF9FbnRpdHlEZWNsSGFuZGxlciBt
X2VudGl0eURlY2xIYW5kbGVyOwotICBYTUxfWG1sRGVjbEhhbmRsZXIgbV94bWxEZWNsSGFuZGxl
cjsKLSAgY29uc3QgRU5DT0RJTkcgKm1fZW5jb2Rpbmc7Ci0gIElOSVRfRU5DT0RJTkcgbV9pbml0
RW5jb2Rpbmc7Ci0gIGNvbnN0IEVOQ09ESU5HICptX2ludGVybmFsRW5jb2Rpbmc7Ci0gIGNvbnN0
IFhNTF9DaGFyICptX3Byb3RvY29sRW5jb2RpbmdOYW1lOwotICBYTUxfQm9vbCBtX25zOwotICBY
TUxfQm9vbCBtX25zX3RyaXBsZXRzOwotICB2b2lkICptX3Vua25vd25FbmNvZGluZ01lbTsKLSAg
dm9pZCAqbV91bmtub3duRW5jb2RpbmdEYXRhOwotICB2b2lkICptX3Vua25vd25FbmNvZGluZ0hh
bmRsZXJEYXRhOwotICB2b2lkIChYTUxDQUxMICptX3Vua25vd25FbmNvZGluZ1JlbGVhc2UpKHZv
aWQgKik7Ci0gIFBST0xPR19TVEFURSBtX3Byb2xvZ1N0YXRlOwotICBQcm9jZXNzb3IgKm1fcHJv
Y2Vzc29yOwotICBlbnVtIFhNTF9FcnJvciBtX2Vycm9yQ29kZTsKLSAgY29uc3QgY2hhciAqbV9l
dmVudFB0cjsKLSAgY29uc3QgY2hhciAqbV9ldmVudEVuZFB0cjsKLSAgY29uc3QgY2hhciAqbV9w
b3NpdGlvblB0cjsKLSAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKm1fb3BlbkludGVybmFsRW50aXRp
ZXM7Ci0gIE9QRU5fSU5URVJOQUxfRU5USVRZICptX2ZyZWVJbnRlcm5hbEVudGl0aWVzOwotICBY
TUxfQm9vbCBtX2RlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzOwotICBpbnQgbV90YWdMZXZl
bDsKLSAgRU5USVRZICptX2RlY2xFbnRpdHk7Ci0gIGNvbnN0IFhNTF9DaGFyICptX2RvY3R5cGVO
YW1lOwotICBjb25zdCBYTUxfQ2hhciAqbV9kb2N0eXBlU3lzaWQ7Ci0gIGNvbnN0IFhNTF9DaGFy
ICptX2RvY3R5cGVQdWJpZDsKLSAgY29uc3QgWE1MX0NoYXIgKm1fZGVjbEF0dHJpYnV0ZVR5cGU7
Ci0gIGNvbnN0IFhNTF9DaGFyICptX2RlY2xOb3RhdGlvbk5hbWU7Ci0gIGNvbnN0IFhNTF9DaGFy
ICptX2RlY2xOb3RhdGlvblB1YmxpY0lkOwotICBFTEVNRU5UX1RZUEUgKm1fZGVjbEVsZW1lbnRU
eXBlOwotICBBVFRSSUJVVEVfSUQgKm1fZGVjbEF0dHJpYnV0ZUlkOwotICBYTUxfQm9vbCBtX2Rl
Y2xBdHRyaWJ1dGVJc0NkYXRhOwotICBYTUxfQm9vbCBtX2RlY2xBdHRyaWJ1dGVJc0lkOwotICBE
VEQgKm1fZHRkOwotICBjb25zdCBYTUxfQ2hhciAqbV9jdXJCYXNlOwotICBUQUcgKm1fdGFnU3Rh
Y2s7Ci0gIFRBRyAqbV9mcmVlVGFnTGlzdDsKLSAgQklORElORyAqbV9pbmhlcml0ZWRCaW5kaW5n
czsKLSAgQklORElORyAqbV9mcmVlQmluZGluZ0xpc3Q7Ci0gIGludCBtX2F0dHNTaXplOwotICBp
bnQgbV9uU3BlY2lmaWVkQXR0czsKLSAgaW50IG1faWRBdHRJbmRleDsKLSAgQVRUUklCVVRFICpt
X2F0dHM7Ci0gIE5TX0FUVCAqbV9uc0F0dHM7Ci0gIHVuc2lnbmVkIGxvbmcgbV9uc0F0dHNWZXJz
aW9uOwotICB1bnNpZ25lZCBjaGFyIG1fbnNBdHRzUG93ZXI7Ci0jaWZkZWYgWE1MX0FUVFJfSU5G
TwotICBYTUxfQXR0ckluZm8gKm1fYXR0SW5mbzsKLSNlbmRpZgotICBQT1NJVElPTiBtX3Bvc2l0
aW9uOwotICBTVFJJTkdfUE9PTCBtX3RlbXBQb29sOwotICBTVFJJTkdfUE9PTCBtX3RlbXAyUG9v
bDsKLSAgY2hhciAqbV9ncm91cENvbm5lY3RvcjsKLSAgdW5zaWduZWQgaW50IG1fZ3JvdXBTaXpl
OwotICBYTUxfQ2hhciBtX25hbWVzcGFjZVNlcGFyYXRvcjsKLSAgWE1MX1BhcnNlciBtX3BhcmVu
dFBhcnNlcjsKLSAgWE1MX1BhcnNpbmdTdGF0dXMgbV9wYXJzaW5nU3RhdHVzOwotI2lmZGVmIFhN
TF9EVEQKLSAgWE1MX0Jvb2wgbV9pc1BhcmFtRW50aXR5OwotICBYTUxfQm9vbCBtX3VzZUZvcmVp
Z25EVEQ7Ci0gIGVudW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyBtX3BhcmFtRW50aXR5UGFyc2lu
ZzsKLSNlbmRpZgotICB1bnNpZ25lZCBsb25nIG1faGFzaF9zZWNyZXRfc2FsdDsKLX07Ci0KLSNk
ZWZpbmUgTUFMTE9DKHMpIChwYXJzZXItPm1fbWVtLm1hbGxvY19mY24oKHMpKSkKLSNkZWZpbmUg
UkVBTExPQyhwLHMpIChwYXJzZXItPm1fbWVtLnJlYWxsb2NfZmNuKChwKSwocykpKQotI2RlZmlu
ZSBGUkVFKHApIChwYXJzZXItPm1fbWVtLmZyZWVfZmNuKChwKSkpCi0KLSNkZWZpbmUgdXNlckRh
dGEgKHBhcnNlci0+bV91c2VyRGF0YSkKLSNkZWZpbmUgaGFuZGxlckFyZyAocGFyc2VyLT5tX2hh
bmRsZXJBcmcpCi0jZGVmaW5lIHN0YXJ0RWxlbWVudEhhbmRsZXIgKHBhcnNlci0+bV9zdGFydEVs
ZW1lbnRIYW5kbGVyKQotI2RlZmluZSBlbmRFbGVtZW50SGFuZGxlciAocGFyc2VyLT5tX2VuZEVs
ZW1lbnRIYW5kbGVyKQotI2RlZmluZSBjaGFyYWN0ZXJEYXRhSGFuZGxlciAocGFyc2VyLT5tX2No
YXJhY3RlckRhdGFIYW5kbGVyKQotI2RlZmluZSBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVy
IFwKLSAgICAgICAgKHBhcnNlci0+bV9wcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKQotI2Rl
ZmluZSBjb21tZW50SGFuZGxlciAocGFyc2VyLT5tX2NvbW1lbnRIYW5kbGVyKQotI2RlZmluZSBz
dGFydENkYXRhU2VjdGlvbkhhbmRsZXIgXAotICAgICAgICAocGFyc2VyLT5tX3N0YXJ0Q2RhdGFT
ZWN0aW9uSGFuZGxlcikKLSNkZWZpbmUgZW5kQ2RhdGFTZWN0aW9uSGFuZGxlciAocGFyc2VyLT5t
X2VuZENkYXRhU2VjdGlvbkhhbmRsZXIpCi0jZGVmaW5lIGRlZmF1bHRIYW5kbGVyIChwYXJzZXIt
Pm1fZGVmYXVsdEhhbmRsZXIpCi0jZGVmaW5lIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyIChwYXJz
ZXItPm1fc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpCi0jZGVmaW5lIGVuZERvY3R5cGVEZWNsSGFu
ZGxlciAocGFyc2VyLT5tX2VuZERvY3R5cGVEZWNsSGFuZGxlcikKLSNkZWZpbmUgdW5wYXJzZWRF
bnRpdHlEZWNsSGFuZGxlciBcCi0gICAgICAgIChwYXJzZXItPm1fdW5wYXJzZWRFbnRpdHlEZWNs
SGFuZGxlcikKLSNkZWZpbmUgbm90YXRpb25EZWNsSGFuZGxlciAocGFyc2VyLT5tX25vdGF0aW9u
RGVjbEhhbmRsZXIpCi0jZGVmaW5lIHN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgXAotICAgICAg
ICAocGFyc2VyLT5tX3N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpCi0jZGVmaW5lIGVuZE5hbWVz
cGFjZURlY2xIYW5kbGVyIChwYXJzZXItPm1fZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpCi0jZGVm
aW5lIG5vdFN0YW5kYWxvbmVIYW5kbGVyIChwYXJzZXItPm1fbm90U3RhbmRhbG9uZUhhbmRsZXIp
Ci0jZGVmaW5lIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBcCi0gICAgICAgIChwYXJzZXItPm1f
ZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKQotI2RlZmluZSBleHRlcm5hbEVudGl0eVJlZkhhbmRs
ZXJBcmcgXAotICAgICAgICAocGFyc2VyLT5tX2V4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZykK
LSNkZWZpbmUgaW50ZXJuYWxFbnRpdHlSZWZIYW5kbGVyIFwKLSAgICAgICAgKHBhcnNlci0+bV9p
bnRlcm5hbEVudGl0eVJlZkhhbmRsZXIpCi0jZGVmaW5lIHNraXBwZWRFbnRpdHlIYW5kbGVyIChw
YXJzZXItPm1fc2tpcHBlZEVudGl0eUhhbmRsZXIpCi0jZGVmaW5lIHVua25vd25FbmNvZGluZ0hh
bmRsZXIgKHBhcnNlci0+bV91bmtub3duRW5jb2RpbmdIYW5kbGVyKQotI2RlZmluZSBlbGVtZW50
RGVjbEhhbmRsZXIgKHBhcnNlci0+bV9lbGVtZW50RGVjbEhhbmRsZXIpCi0jZGVmaW5lIGF0dGxp
c3REZWNsSGFuZGxlciAocGFyc2VyLT5tX2F0dGxpc3REZWNsSGFuZGxlcikKLSNkZWZpbmUgZW50
aXR5RGVjbEhhbmRsZXIgKHBhcnNlci0+bV9lbnRpdHlEZWNsSGFuZGxlcikKLSNkZWZpbmUgeG1s
RGVjbEhhbmRsZXIgKHBhcnNlci0+bV94bWxEZWNsSGFuZGxlcikKLSNkZWZpbmUgZW5jb2Rpbmcg
KHBhcnNlci0+bV9lbmNvZGluZykKLSNkZWZpbmUgaW5pdEVuY29kaW5nIChwYXJzZXItPm1faW5p
dEVuY29kaW5nKQotI2RlZmluZSBpbnRlcm5hbEVuY29kaW5nIChwYXJzZXItPm1faW50ZXJuYWxF
bmNvZGluZykKLSNkZWZpbmUgdW5rbm93bkVuY29kaW5nTWVtIChwYXJzZXItPm1fdW5rbm93bkVu
Y29kaW5nTWVtKQotI2RlZmluZSB1bmtub3duRW5jb2RpbmdEYXRhIChwYXJzZXItPm1fdW5rbm93
bkVuY29kaW5nRGF0YSkKLSNkZWZpbmUgdW5rbm93bkVuY29kaW5nSGFuZGxlckRhdGEgXAotICAo
cGFyc2VyLT5tX3Vua25vd25FbmNvZGluZ0hhbmRsZXJEYXRhKQotI2RlZmluZSB1bmtub3duRW5j
b2RpbmdSZWxlYXNlIChwYXJzZXItPm1fdW5rbm93bkVuY29kaW5nUmVsZWFzZSkKLSNkZWZpbmUg
cHJvdG9jb2xFbmNvZGluZ05hbWUgKHBhcnNlci0+bV9wcm90b2NvbEVuY29kaW5nTmFtZSkKLSNk
ZWZpbmUgbnMgKHBhcnNlci0+bV9ucykKLSNkZWZpbmUgbnNfdHJpcGxldHMgKHBhcnNlci0+bV9u
c190cmlwbGV0cykKLSNkZWZpbmUgcHJvbG9nU3RhdGUgKHBhcnNlci0+bV9wcm9sb2dTdGF0ZSkK
LSNkZWZpbmUgcHJvY2Vzc29yIChwYXJzZXItPm1fcHJvY2Vzc29yKQotI2RlZmluZSBlcnJvckNv
ZGUgKHBhcnNlci0+bV9lcnJvckNvZGUpCi0jZGVmaW5lIGV2ZW50UHRyIChwYXJzZXItPm1fZXZl
bnRQdHIpCi0jZGVmaW5lIGV2ZW50RW5kUHRyIChwYXJzZXItPm1fZXZlbnRFbmRQdHIpCi0jZGVm
aW5lIHBvc2l0aW9uUHRyIChwYXJzZXItPm1fcG9zaXRpb25QdHIpCi0jZGVmaW5lIHBvc2l0aW9u
IChwYXJzZXItPm1fcG9zaXRpb24pCi0jZGVmaW5lIG9wZW5JbnRlcm5hbEVudGl0aWVzIChwYXJz
ZXItPm1fb3BlbkludGVybmFsRW50aXRpZXMpCi0jZGVmaW5lIGZyZWVJbnRlcm5hbEVudGl0aWVz
IChwYXJzZXItPm1fZnJlZUludGVybmFsRW50aXRpZXMpCi0jZGVmaW5lIGRlZmF1bHRFeHBhbmRJ
bnRlcm5hbEVudGl0aWVzIFwKLSAgICAgICAgKHBhcnNlci0+bV9kZWZhdWx0RXhwYW5kSW50ZXJu
YWxFbnRpdGllcykKLSNkZWZpbmUgdGFnTGV2ZWwgKHBhcnNlci0+bV90YWdMZXZlbCkKLSNkZWZp
bmUgYnVmZmVyIChwYXJzZXItPm1fYnVmZmVyKQotI2RlZmluZSBidWZmZXJQdHIgKHBhcnNlci0+
bV9idWZmZXJQdHIpCi0jZGVmaW5lIGJ1ZmZlckVuZCAocGFyc2VyLT5tX2J1ZmZlckVuZCkKLSNk
ZWZpbmUgcGFyc2VFbmRCeXRlSW5kZXggKHBhcnNlci0+bV9wYXJzZUVuZEJ5dGVJbmRleCkKLSNk
ZWZpbmUgcGFyc2VFbmRQdHIgKHBhcnNlci0+bV9wYXJzZUVuZFB0cikKLSNkZWZpbmUgYnVmZmVy
TGltIChwYXJzZXItPm1fYnVmZmVyTGltKQotI2RlZmluZSBkYXRhQnVmIChwYXJzZXItPm1fZGF0
YUJ1ZikKLSNkZWZpbmUgZGF0YUJ1ZkVuZCAocGFyc2VyLT5tX2RhdGFCdWZFbmQpCi0jZGVmaW5l
IF9kdGQgKHBhcnNlci0+bV9kdGQpCi0jZGVmaW5lIGN1ckJhc2UgKHBhcnNlci0+bV9jdXJCYXNl
KQotI2RlZmluZSBkZWNsRW50aXR5IChwYXJzZXItPm1fZGVjbEVudGl0eSkKLSNkZWZpbmUgZG9j
dHlwZU5hbWUgKHBhcnNlci0+bV9kb2N0eXBlTmFtZSkKLSNkZWZpbmUgZG9jdHlwZVN5c2lkIChw
YXJzZXItPm1fZG9jdHlwZVN5c2lkKQotI2RlZmluZSBkb2N0eXBlUHViaWQgKHBhcnNlci0+bV9k
b2N0eXBlUHViaWQpCi0jZGVmaW5lIGRlY2xBdHRyaWJ1dGVUeXBlIChwYXJzZXItPm1fZGVjbEF0
dHJpYnV0ZVR5cGUpCi0jZGVmaW5lIGRlY2xOb3RhdGlvbk5hbWUgKHBhcnNlci0+bV9kZWNsTm90
YXRpb25OYW1lKQotI2RlZmluZSBkZWNsTm90YXRpb25QdWJsaWNJZCAocGFyc2VyLT5tX2RlY2xO
b3RhdGlvblB1YmxpY0lkKQotI2RlZmluZSBkZWNsRWxlbWVudFR5cGUgKHBhcnNlci0+bV9kZWNs
RWxlbWVudFR5cGUpCi0jZGVmaW5lIGRlY2xBdHRyaWJ1dGVJZCAocGFyc2VyLT5tX2RlY2xBdHRy
aWJ1dGVJZCkKLSNkZWZpbmUgZGVjbEF0dHJpYnV0ZUlzQ2RhdGEgKHBhcnNlci0+bV9kZWNsQXR0
cmlidXRlSXNDZGF0YSkKLSNkZWZpbmUgZGVjbEF0dHJpYnV0ZUlzSWQgKHBhcnNlci0+bV9kZWNs
QXR0cmlidXRlSXNJZCkKLSNkZWZpbmUgZnJlZVRhZ0xpc3QgKHBhcnNlci0+bV9mcmVlVGFnTGlz
dCkKLSNkZWZpbmUgZnJlZUJpbmRpbmdMaXN0IChwYXJzZXItPm1fZnJlZUJpbmRpbmdMaXN0KQot
I2RlZmluZSBpbmhlcml0ZWRCaW5kaW5ncyAocGFyc2VyLT5tX2luaGVyaXRlZEJpbmRpbmdzKQot
I2RlZmluZSB0YWdTdGFjayAocGFyc2VyLT5tX3RhZ1N0YWNrKQotI2RlZmluZSBhdHRzIChwYXJz
ZXItPm1fYXR0cykKLSNkZWZpbmUgYXR0c1NpemUgKHBhcnNlci0+bV9hdHRzU2l6ZSkKLSNkZWZp
bmUgblNwZWNpZmllZEF0dHMgKHBhcnNlci0+bV9uU3BlY2lmaWVkQXR0cykKLSNkZWZpbmUgaWRB
dHRJbmRleCAocGFyc2VyLT5tX2lkQXR0SW5kZXgpCi0jZGVmaW5lIG5zQXR0cyAocGFyc2VyLT5t
X25zQXR0cykKLSNkZWZpbmUgbnNBdHRzVmVyc2lvbiAocGFyc2VyLT5tX25zQXR0c1ZlcnNpb24p
Ci0jZGVmaW5lIG5zQXR0c1Bvd2VyIChwYXJzZXItPm1fbnNBdHRzUG93ZXIpCi0jZGVmaW5lIGF0
dEluZm8gKHBhcnNlci0+bV9hdHRJbmZvKQotI2RlZmluZSB0ZW1wUG9vbCAocGFyc2VyLT5tX3Rl
bXBQb29sKQotI2RlZmluZSB0ZW1wMlBvb2wgKHBhcnNlci0+bV90ZW1wMlBvb2wpCi0jZGVmaW5l
IGdyb3VwQ29ubmVjdG9yIChwYXJzZXItPm1fZ3JvdXBDb25uZWN0b3IpCi0jZGVmaW5lIGdyb3Vw
U2l6ZSAocGFyc2VyLT5tX2dyb3VwU2l6ZSkKLSNkZWZpbmUgbmFtZXNwYWNlU2VwYXJhdG9yIChw
YXJzZXItPm1fbmFtZXNwYWNlU2VwYXJhdG9yKQotI2RlZmluZSBwYXJlbnRQYXJzZXIgKHBhcnNl
ci0+bV9wYXJlbnRQYXJzZXIpCi0jZGVmaW5lIHBzX3BhcnNpbmcgKHBhcnNlci0+bV9wYXJzaW5n
U3RhdHVzLnBhcnNpbmcpCi0jZGVmaW5lIHBzX2ZpbmFsQnVmZmVyIChwYXJzZXItPm1fcGFyc2lu
Z1N0YXR1cy5maW5hbEJ1ZmZlcikKLSNpZmRlZiBYTUxfRFRECi0jZGVmaW5lIGlzUGFyYW1FbnRp
dHkgKHBhcnNlci0+bV9pc1BhcmFtRW50aXR5KQotI2RlZmluZSB1c2VGb3JlaWduRFREIChwYXJz
ZXItPm1fdXNlRm9yZWlnbkRURCkKLSNkZWZpbmUgcGFyYW1FbnRpdHlQYXJzaW5nIChwYXJzZXIt
Pm1fcGFyYW1FbnRpdHlQYXJzaW5nKQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSNkZWZpbmUgaGFz
aF9zZWNyZXRfc2FsdCAocGFyc2VyLT5tX2hhc2hfc2VjcmV0X3NhbHQpCi0KLVhNTF9QYXJzZXIg
WE1MQ0FMTAotWE1MX1BhcnNlckNyZWF0ZShjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQot
ewotICByZXR1cm4gWE1MX1BhcnNlckNyZWF0ZV9NTShlbmNvZGluZ05hbWUsIE5VTEwsIE5VTEwp
OwotfQotCi1YTUxfUGFyc2VyIFhNTENBTEwKLVhNTF9QYXJzZXJDcmVhdGVOUyhjb25zdCBYTUxf
Q2hhciAqZW5jb2RpbmdOYW1lLCBYTUxfQ2hhciBuc1NlcCkKLXsKLSAgWE1MX0NoYXIgdG1wWzJd
OwotICAqdG1wID0gbnNTZXA7Ci0gIHJldHVybiBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5n
TmFtZSwgTlVMTCwgdG1wKTsKLX0KLQotc3RhdGljIGNvbnN0IFhNTF9DaGFyIGltcGxpY2l0Q29u
dGV4dFtdID0gewotICBBU0NJSV94LCBBU0NJSV9tLCBBU0NJSV9sLCBBU0NJSV9FUVVBTFMsIEFT
Q0lJX2gsIEFTQ0lJX3QsIEFTQ0lJX3QsIEFTQ0lJX3AsCi0gIEFTQ0lJX0NPTE9OLCBBU0NJSV9T
TEFTSCwgQVNDSUlfU0xBU0gsIEFTQ0lJX3csIEFTQ0lJX3csIEFTQ0lJX3csCi0gIEFTQ0lJX1BF
UklPRCwgQVNDSUlfdywgQVNDSUlfMywgQVNDSUlfUEVSSU9ELCBBU0NJSV9vLCBBU0NJSV9yLCBB
U0NJSV9nLAotICBBU0NJSV9TTEFTSCwgQVNDSUlfWCwgQVNDSUlfTSwgQVNDSUlfTCwgQVNDSUlf
U0xBU0gsIEFTQ0lJXzEsIEFTQ0lJXzksCi0gIEFTQ0lJXzksIEFTQ0lJXzgsIEFTQ0lJX1NMQVNI
LCBBU0NJSV9uLCBBU0NJSV9hLCBBU0NJSV9tLCBBU0NJSV9lLAotICBBU0NJSV9zLCBBU0NJSV9w
LCBBU0NJSV9hLCBBU0NJSV9jLCBBU0NJSV9lLCAnXDAnCi19OwotCi1zdGF0aWMgdW5zaWduZWQg
bG9uZwotZ2VuZXJhdGVfaGFzaF9zZWNyZXRfc2FsdCh2b2lkKQotewotICB1bnNpZ25lZCBpbnQg
c2VlZCA9IHRpbWUoTlVMTCkgJSBVSU5UX01BWDsKLSAgc3JhbmQoc2VlZCk7Ci0gIHJldHVybiBy
YW5kKCk7Ci19Ci0KLXN0YXRpYyBYTUxfQm9vbCAgLyogb25seSB2YWxpZCBmb3Igcm9vdCBwYXJz
ZXIgKi8KLXN0YXJ0UGFyc2luZyhYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgICAvKiBoYXNoIGZ1
bmN0aW9ucyBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBzZXRDb250ZXh0KCkgaXMgY2FsbGVk
ICovCi0gICAgaWYgKGhhc2hfc2VjcmV0X3NhbHQgPT0gMCkKLSAgICAgIGhhc2hfc2VjcmV0X3Nh
bHQgPSBnZW5lcmF0ZV9oYXNoX3NlY3JldF9zYWx0KCk7Ci0gICAgaWYgKG5zKSB7Ci0gICAgICAv
KiBpbXBsaWNpdCBjb250ZXh0IG9ubHkgc2V0IGZvciByb290IHBhcnNlciwgc2luY2UgY2hpbGQK
LSAgICAgICAgIHBhcnNlcnMgKGkuZS4gZXh0ZXJuYWwgZW50aXR5IHBhcnNlcnMpIHdpbGwgaW5o
ZXJpdCBpdAotICAgICAgKi8KLSAgICAgIHJldHVybiBzZXRDb250ZXh0KHBhcnNlciwgaW1wbGlj
aXRDb250ZXh0KTsKLSAgICB9Ci0gICAgcmV0dXJuIFhNTF9UUlVFOwotfQotCi1YTUxfUGFyc2Vy
IFhNTENBTEwKLVhNTF9QYXJzZXJDcmVhdGVfTU0oY29uc3QgWE1MX0NoYXIgKmVuY29kaW5nTmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAq
bWVtc3VpdGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lU2VwKQot
ewotICByZXR1cm4gcGFyc2VyQ3JlYXRlKGVuY29kaW5nTmFtZSwgbWVtc3VpdGUsIG5hbWVTZXAs
IE5VTEwpOwotfQotCi1zdGF0aWMgWE1MX1BhcnNlcgotcGFyc2VyQ3JlYXRlKGNvbnN0IFhNTF9D
aGFyICplbmNvZGluZ05hbWUsCi0gICAgICAgICAgICAgY29uc3QgWE1MX01lbW9yeV9IYW5kbGlu
Z19TdWl0ZSAqbWVtc3VpdGUsCi0gICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWVTZXAs
Ci0gICAgICAgICAgICAgRFREICpkdGQpCi17Ci0gIFhNTF9QYXJzZXIgcGFyc2VyOwotCi0gIGlm
IChtZW1zdWl0ZSkgewotICAgIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm10ZW1wOwotICAg
IHBhcnNlciA9IChYTUxfUGFyc2VyKQotICAgICAgbWVtc3VpdGUtPm1hbGxvY19mY24oc2l6ZW9m
KHN0cnVjdCBYTUxfUGFyc2VyU3RydWN0KSk7Ci0gICAgaWYgKHBhcnNlciAhPSBOVUxMKSB7Ci0g
ICAgICBtdGVtcCA9IChYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICopJihwYXJzZXItPm1fbWVt
KTsKLSAgICAgIG10ZW1wLT5tYWxsb2NfZmNuID0gbWVtc3VpdGUtPm1hbGxvY19mY247Ci0gICAg
ICBtdGVtcC0+cmVhbGxvY19mY24gPSBtZW1zdWl0ZS0+cmVhbGxvY19mY247Ci0gICAgICBtdGVt
cC0+ZnJlZV9mY24gPSBtZW1zdWl0ZS0+ZnJlZV9mY247Ci0gICAgfQotICB9Ci0gIGVsc2Ugewot
ICAgIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm10ZW1wOwotICAgIHBhcnNlciA9IChYTUxf
UGFyc2VyKW1hbGxvYyhzaXplb2Yoc3RydWN0IFhNTF9QYXJzZXJTdHJ1Y3QpKTsKLSAgICBpZiAo
cGFyc2VyICE9IE5VTEwpIHsKLSAgICAgIG10ZW1wID0gKFhNTF9NZW1vcnlfSGFuZGxpbmdfU3Vp
dGUgKikmKHBhcnNlci0+bV9tZW0pOwotICAgICAgbXRlbXAtPm1hbGxvY19mY24gPSBtYWxsb2M7
Ci0gICAgICBtdGVtcC0+cmVhbGxvY19mY24gPSByZWFsbG9jOwotICAgICAgbXRlbXAtPmZyZWVf
ZmNuID0gZnJlZTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXBhcnNlcikKLSAgICByZXR1cm4gcGFy
c2VyOwotCi0gIGJ1ZmZlciA9IE5VTEw7Ci0gIGJ1ZmZlckxpbSA9IE5VTEw7Ci0KLSAgYXR0c1Np
emUgPSBJTklUX0FUVFNfU0laRTsKLSAgYXR0cyA9IChBVFRSSUJVVEUgKilNQUxMT0MoYXR0c1Np
emUgKiBzaXplb2YoQVRUUklCVVRFKSk7Ci0gIGlmIChhdHRzID09IE5VTEwpIHsKLSAgICBGUkVF
KHBhcnNlcik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSNpZmRlZiBYTUxfQVRUUl9JTkZPCi0g
IGF0dEluZm8gPSAoWE1MX0F0dHJJbmZvKilNQUxMT0MoYXR0c1NpemUgKiBzaXplb2YoWE1MX0F0
dHJJbmZvKSk7Ci0gIGlmIChhdHRJbmZvID09IE5VTEwpIHsKLSAgICBGUkVFKGF0dHMpOwotICAg
IEZSRUUocGFyc2VyKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotI2VuZGlmCi0gIGRhdGFCdWYg
PSAoWE1MX0NoYXIgKilNQUxMT0MoSU5JVF9EQVRBX0JVRl9TSVpFICogc2l6ZW9mKFhNTF9DaGFy
KSk7Ci0gIGlmIChkYXRhQnVmID09IE5VTEwpIHsKLSAgICBGUkVFKGF0dHMpOwotI2lmZGVmIFhN
TF9BVFRSX0lORk8KLSAgICBGUkVFKGF0dEluZm8pOwotI2VuZGlmCi0gICAgRlJFRShwYXJzZXIp
OwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGRhdGFCdWZFbmQgPSBkYXRhQnVmICsgSU5JVF9E
QVRBX0JVRl9TSVpFOwotCi0gIGlmIChkdGQpCi0gICAgX2R0ZCA9IGR0ZDsKLSAgZWxzZSB7Ci0g
ICAgX2R0ZCA9IGR0ZENyZWF0ZSgmcGFyc2VyLT5tX21lbSk7Ci0gICAgaWYgKF9kdGQgPT0gTlVM
TCkgewotICAgICAgRlJFRShkYXRhQnVmKTsKLSAgICAgIEZSRUUoYXR0cyk7Ci0jaWZkZWYgWE1M
X0FUVFJfSU5GTwotICAgICAgRlJFRShhdHRJbmZvKTsKLSNlbmRpZgotICAgICAgRlJFRShwYXJz
ZXIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgZnJlZUJpbmRpbmdMaXN0
ID0gTlVMTDsKLSAgZnJlZVRhZ0xpc3QgPSBOVUxMOwotICBmcmVlSW50ZXJuYWxFbnRpdGllcyA9
IE5VTEw7Ci0KLSAgZ3JvdXBTaXplID0gMDsKLSAgZ3JvdXBDb25uZWN0b3IgPSBOVUxMOwotCi0g
IHVua25vd25FbmNvZGluZ0hhbmRsZXIgPSBOVUxMOwotICB1bmtub3duRW5jb2RpbmdIYW5kbGVy
RGF0YSA9IE5VTEw7Ci0KLSAgbmFtZXNwYWNlU2VwYXJhdG9yID0gQVNDSUlfRVhDTDsKLSAgbnMg
PSBYTUxfRkFMU0U7Ci0gIG5zX3RyaXBsZXRzID0gWE1MX0ZBTFNFOwotCi0gIG5zQXR0cyA9IE5V
TEw7Ci0gIG5zQXR0c1ZlcnNpb24gPSAwOwotICBuc0F0dHNQb3dlciA9IDA7Ci0KLSAgcG9vbElu
aXQoJnRlbXBQb29sLCAmKHBhcnNlci0+bV9tZW0pKTsKLSAgcG9vbEluaXQoJnRlbXAyUG9vbCwg
JihwYXJzZXItPm1fbWVtKSk7Ci0gIHBhcnNlckluaXQocGFyc2VyLCBlbmNvZGluZ05hbWUpOwot
Ci0gIGlmIChlbmNvZGluZ05hbWUgJiYgIXByb3RvY29sRW5jb2RpbmdOYW1lKSB7Ci0gICAgWE1M
X1BhcnNlckZyZWUocGFyc2VyKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmIChuYW1l
U2VwKSB7Ci0gICAgbnMgPSBYTUxfVFJVRTsKLSAgICBpbnRlcm5hbEVuY29kaW5nID0gWG1sR2V0
SW50ZXJuYWxFbmNvZGluZ05TKCk7Ci0gICAgbmFtZXNwYWNlU2VwYXJhdG9yID0gKm5hbWVTZXA7
Ci0gIH0KLSAgZWxzZSB7Ci0gICAgaW50ZXJuYWxFbmNvZGluZyA9IFhtbEdldEludGVybmFsRW5j
b2RpbmcoKTsKLSAgfQotCi0gIHJldHVybiBwYXJzZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYXJz
ZXJJbml0KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQot
ewotICBwcm9jZXNzb3IgPSBwcm9sb2dJbml0UHJvY2Vzc29yOwotICBYbWxQcm9sb2dTdGF0ZUlu
aXQoJnByb2xvZ1N0YXRlKTsKLSAgcHJvdG9jb2xFbmNvZGluZ05hbWUgPSAoZW5jb2RpbmdOYW1l
ICE9IE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwb29sQ29weVN0cmluZygmdGVt
cFBvb2wsIGVuY29kaW5nTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKTsK
LSAgY3VyQmFzZSA9IE5VTEw7Ci0gIFhtbEluaXRFbmNvZGluZygmaW5pdEVuY29kaW5nLCAmZW5j
b2RpbmcsIDApOwotICB1c2VyRGF0YSA9IE5VTEw7Ci0gIGhhbmRsZXJBcmcgPSBOVUxMOwotICBz
dGFydEVsZW1lbnRIYW5kbGVyID0gTlVMTDsKLSAgZW5kRWxlbWVudEhhbmRsZXIgPSBOVUxMOwot
ICBjaGFyYWN0ZXJEYXRhSGFuZGxlciA9IE5VTEw7Ci0gIHByb2Nlc3NpbmdJbnN0cnVjdGlvbkhh
bmRsZXIgPSBOVUxMOwotICBjb21tZW50SGFuZGxlciA9IE5VTEw7Ci0gIHN0YXJ0Q2RhdGFTZWN0
aW9uSGFuZGxlciA9IE5VTEw7Ci0gIGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBOVUxMOwotICBk
ZWZhdWx0SGFuZGxlciA9IE5VTEw7Ci0gIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyID0gTlVMTDsK
LSAgZW5kRG9jdHlwZURlY2xIYW5kbGVyID0gTlVMTDsKLSAgdW5wYXJzZWRFbnRpdHlEZWNsSGFu
ZGxlciA9IE5VTEw7Ci0gIG5vdGF0aW9uRGVjbEhhbmRsZXIgPSBOVUxMOwotICBzdGFydE5hbWVz
cGFjZURlY2xIYW5kbGVyID0gTlVMTDsKLSAgZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBOVUxM
OwotICBub3RTdGFuZGFsb25lSGFuZGxlciA9IE5VTEw7Ci0gIGV4dGVybmFsRW50aXR5UmVmSGFu
ZGxlciA9IE5VTEw7Ci0gIGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZyA9IHBhcnNlcjsKLSAg
c2tpcHBlZEVudGl0eUhhbmRsZXIgPSBOVUxMOwotICBlbGVtZW50RGVjbEhhbmRsZXIgPSBOVUxM
OwotICBhdHRsaXN0RGVjbEhhbmRsZXIgPSBOVUxMOwotICBlbnRpdHlEZWNsSGFuZGxlciA9IE5V
TEw7Ci0gIHhtbERlY2xIYW5kbGVyID0gTlVMTDsKLSAgYnVmZmVyUHRyID0gYnVmZmVyOwotICBi
dWZmZXJFbmQgPSBidWZmZXI7Ci0gIHBhcnNlRW5kQnl0ZUluZGV4ID0gMDsKLSAgcGFyc2VFbmRQ
dHIgPSBOVUxMOwotICBkZWNsRWxlbWVudFR5cGUgPSBOVUxMOwotICBkZWNsQXR0cmlidXRlSWQg
PSBOVUxMOwotICBkZWNsRW50aXR5ID0gTlVMTDsKLSAgZG9jdHlwZU5hbWUgPSBOVUxMOwotICBk
b2N0eXBlU3lzaWQgPSBOVUxMOwotICBkb2N0eXBlUHViaWQgPSBOVUxMOwotICBkZWNsQXR0cmli
dXRlVHlwZSA9IE5VTEw7Ci0gIGRlY2xOb3RhdGlvbk5hbWUgPSBOVUxMOwotICBkZWNsTm90YXRp
b25QdWJsaWNJZCA9IE5VTEw7Ci0gIGRlY2xBdHRyaWJ1dGVJc0NkYXRhID0gWE1MX0ZBTFNFOwot
ICBkZWNsQXR0cmlidXRlSXNJZCA9IFhNTF9GQUxTRTsKLSAgbWVtc2V0KCZwb3NpdGlvbiwgMCwg
c2l6ZW9mKFBPU0lUSU9OKSk7Ci0gIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT05FOwotICBldmVu
dFB0ciA9IE5VTEw7Ci0gIGV2ZW50RW5kUHRyID0gTlVMTDsKLSAgcG9zaXRpb25QdHIgPSBOVUxM
OwotICBvcGVuSW50ZXJuYWxFbnRpdGllcyA9IE5VTEw7Ci0gIGRlZmF1bHRFeHBhbmRJbnRlcm5h
bEVudGl0aWVzID0gWE1MX1RSVUU7Ci0gIHRhZ0xldmVsID0gMDsKLSAgdGFnU3RhY2sgPSBOVUxM
OwotICBpbmhlcml0ZWRCaW5kaW5ncyA9IE5VTEw7Ci0gIG5TcGVjaWZpZWRBdHRzID0gMDsKLSAg
dW5rbm93bkVuY29kaW5nTWVtID0gTlVMTDsKLSAgdW5rbm93bkVuY29kaW5nUmVsZWFzZSA9IE5V
TEw7Ci0gIHVua25vd25FbmNvZGluZ0RhdGEgPSBOVUxMOwotICBwYXJlbnRQYXJzZXIgPSBOVUxM
OwotICBwc19wYXJzaW5nID0gWE1MX0lOSVRJQUxJWkVEOwotI2lmZGVmIFhNTF9EVEQKLSAgaXNQ
YXJhbUVudGl0eSA9IFhNTF9GQUxTRTsKLSAgdXNlRm9yZWlnbkRURCA9IFhNTF9GQUxTRTsKLSAg
cGFyYW1FbnRpdHlQYXJzaW5nID0gWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX05FVkVSOwotI2Vu
ZGlmCi0gIGhhc2hfc2VjcmV0X3NhbHQgPSAwOwotfQotCi0vKiBtb3ZlcyBsaXN0IG9mIGJpbmRp
bmdzIHRvIGZyZWVCaW5kaW5nTGlzdCAqLwotc3RhdGljIHZvaWQgRkFTVENBTEwKLW1vdmVUb0Zy
ZWVCaW5kaW5nTGlzdChYTUxfUGFyc2VyIHBhcnNlciwgQklORElORyAqYmluZGluZ3MpCi17Ci0g
IHdoaWxlIChiaW5kaW5ncykgewotICAgIEJJTkRJTkcgKmIgPSBiaW5kaW5nczsKLSAgICBiaW5k
aW5ncyA9IGJpbmRpbmdzLT5uZXh0VGFnQmluZGluZzsKLSAgICBiLT5uZXh0VGFnQmluZGluZyA9
IGZyZWVCaW5kaW5nTGlzdDsKLSAgICBmcmVlQmluZGluZ0xpc3QgPSBiOwotICB9Ci19Ci0KLVhN
TF9Cb29sIFhNTENBTEwKLVhNTF9QYXJzZXJSZXNldChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3Qg
WE1MX0NoYXIgKmVuY29kaW5nTmFtZSkKLXsKLSAgVEFHICp0U3RrOwotICBPUEVOX0lOVEVSTkFM
X0VOVElUWSAqb3BlbkVudGl0eUxpc3Q7Ci0gIGlmIChwYXJlbnRQYXJzZXIpCi0gICAgcmV0dXJu
IFhNTF9GQUxTRTsKLSAgLyogbW92ZSB0YWdTdGFjayB0byBmcmVlVGFnTGlzdCAqLwotICB0U3Rr
ID0gdGFnU3RhY2s7Ci0gIHdoaWxlICh0U3RrKSB7Ci0gICAgVEFHICp0YWcgPSB0U3RrOwotICAg
IHRTdGsgPSB0U3RrLT5wYXJlbnQ7Ci0gICAgdGFnLT5wYXJlbnQgPSBmcmVlVGFnTGlzdDsKLSAg
ICBtb3ZlVG9GcmVlQmluZGluZ0xpc3QocGFyc2VyLCB0YWctPmJpbmRpbmdzKTsKLSAgICB0YWct
PmJpbmRpbmdzID0gTlVMTDsKLSAgICBmcmVlVGFnTGlzdCA9IHRhZzsKLSAgfQotICAvKiBtb3Zl
IG9wZW5JbnRlcm5hbEVudGl0aWVzIHRvIGZyZWVJbnRlcm5hbEVudGl0aWVzICovCi0gIG9wZW5F
bnRpdHlMaXN0ID0gb3BlbkludGVybmFsRW50aXRpZXM7Ci0gIHdoaWxlIChvcGVuRW50aXR5TGlz
dCkgewotICAgIE9QRU5fSU5URVJOQUxfRU5USVRZICpvcGVuRW50aXR5ID0gb3BlbkVudGl0eUxp
c3Q7Ci0gICAgb3BlbkVudGl0eUxpc3QgPSBvcGVuRW50aXR5LT5uZXh0OwotICAgIG9wZW5FbnRp
dHktPm5leHQgPSBmcmVlSW50ZXJuYWxFbnRpdGllczsKLSAgICBmcmVlSW50ZXJuYWxFbnRpdGll
cyA9IG9wZW5FbnRpdHk7Ci0gIH0KLSAgbW92ZVRvRnJlZUJpbmRpbmdMaXN0KHBhcnNlciwgaW5o
ZXJpdGVkQmluZGluZ3MpOwotICBGUkVFKHVua25vd25FbmNvZGluZ01lbSk7Ci0gIGlmICh1bmtu
b3duRW5jb2RpbmdSZWxlYXNlKQotICAgIHVua25vd25FbmNvZGluZ1JlbGVhc2UodW5rbm93bkVu
Y29kaW5nRGF0YSk7Ci0gIHBvb2xDbGVhcigmdGVtcFBvb2wpOwotICBwb29sQ2xlYXIoJnRlbXAy
UG9vbCk7Ci0gIHBhcnNlckluaXQocGFyc2VyLCBlbmNvZGluZ05hbWUpOwotICBkdGRSZXNldChf
ZHRkLCAmcGFyc2VyLT5tX21lbSk7Ci0gIHJldHVybiBYTUxfVFJVRTsKLX0KLQotZW51bSBYTUxf
U3RhdHVzIFhNTENBTEwKLVhNTF9TZXRFbmNvZGluZyhYTUxfUGFyc2VyIHBhcnNlciwgY29uc3Qg
WE1MX0NoYXIgKmVuY29kaW5nTmFtZSkKLXsKLSAgLyogQmxvY2sgYWZ0ZXIgWE1MX1BhcnNlKCkv
WE1MX1BhcnNlQnVmZmVyKCkgaGFzIGJlZW4gY2FsbGVkLgotICAgICBYWFggVGhlcmUncyBubyB3
YXkgZm9yIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZQotICAgICBYWFggcG9z
c2libGUgZXJyb3IgY2FzZXMgY2F1c2VkIHRoZSBYTUxfU1RBVFVTX0VSUk9SIHJldHVybi4KLSAg
Ki8KLSAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX1BBUlNJTkcgfHwgcHNfcGFyc2luZyA9PSBYTUxf
U1VTUEVOREVEKQotICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICBpZiAoZW5jb2RpbmdO
YW1lID09IE5VTEwpCi0gICAgcHJvdG9jb2xFbmNvZGluZ05hbWUgPSBOVUxMOwotICBlbHNlIHsK
LSAgICBwcm90b2NvbEVuY29kaW5nTmFtZSA9IHBvb2xDb3B5U3RyaW5nKCZ0ZW1wUG9vbCwgZW5j
b2RpbmdOYW1lKTsKLSAgICBpZiAoIXByb3RvY29sRW5jb2RpbmdOYW1lKQotICAgICAgcmV0dXJu
IFhNTF9TVEFUVVNfRVJST1I7Ci0gIH0KLSAgcmV0dXJuIFhNTF9TVEFUVVNfT0s7Ci19Ci0KLVhN
TF9QYXJzZXIgWE1MQ0FMTAotWE1MX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKFhNTF9QYXJz
ZXIgb2xkUGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9D
aGFyICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9D
aGFyICplbmNvZGluZ05hbWUpCi17Ci0gIFhNTF9QYXJzZXIgcGFyc2VyID0gb2xkUGFyc2VyOwot
ICBEVEQgKm5ld0R0ZCA9IE5VTEw7Ci0gIERURCAqb2xkRHRkID0gX2R0ZDsKLSAgWE1MX1N0YXJ0
RWxlbWVudEhhbmRsZXIgb2xkU3RhcnRFbGVtZW50SGFuZGxlciA9IHN0YXJ0RWxlbWVudEhhbmRs
ZXI7Ci0gIFhNTF9FbmRFbGVtZW50SGFuZGxlciBvbGRFbmRFbGVtZW50SGFuZGxlciA9IGVuZEVs
ZW1lbnRIYW5kbGVyOwotICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIgb2xkQ2hhcmFjdGVyRGF0
YUhhbmRsZXIgPSBjaGFyYWN0ZXJEYXRhSGFuZGxlcjsKLSAgWE1MX1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbkhhbmRsZXIgb2xkUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcgotICAgICAgPSBwcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyOwotICBYTUxfQ29tbWVudEhhbmRsZXIgb2xkQ29tbWVu
dEhhbmRsZXIgPSBjb21tZW50SGFuZGxlcjsKLSAgWE1MX1N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxl
ciBvbGRTdGFydENkYXRhU2VjdGlvbkhhbmRsZXIKLSAgICAgID0gc3RhcnRDZGF0YVNlY3Rpb25I
YW5kbGVyOwotICBYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBvbGRFbmRDZGF0YVNlY3Rpb25I
YW5kbGVyCi0gICAgICA9IGVuZENkYXRhU2VjdGlvbkhhbmRsZXI7Ci0gIFhNTF9EZWZhdWx0SGFu
ZGxlciBvbGREZWZhdWx0SGFuZGxlciA9IGRlZmF1bHRIYW5kbGVyOwotICBYTUxfVW5wYXJzZWRF
bnRpdHlEZWNsSGFuZGxlciBvbGRVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyCi0gICAgICA9IHVu
cGFyc2VkRW50aXR5RGVjbEhhbmRsZXI7Ci0gIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIG9sZE5v
dGF0aW9uRGVjbEhhbmRsZXIgPSBub3RhdGlvbkRlY2xIYW5kbGVyOwotICBYTUxfU3RhcnROYW1l
c3BhY2VEZWNsSGFuZGxlciBvbGRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyCi0gICAgICA9IHN0
YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXI7Ci0gIFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlciBv
bGRFbmROYW1lc3BhY2VEZWNsSGFuZGxlcgotICAgICAgPSBlbmROYW1lc3BhY2VEZWNsSGFuZGxl
cjsKLSAgWE1MX05vdFN0YW5kYWxvbmVIYW5kbGVyIG9sZE5vdFN0YW5kYWxvbmVIYW5kbGVyID0g
bm90U3RhbmRhbG9uZUhhbmRsZXI7Ci0gIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgb2xk
RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyCi0gICAgICA9IGV4dGVybmFsRW50aXR5UmVmSGFuZGxl
cjsKLSAgWE1MX1NraXBwZWRFbnRpdHlIYW5kbGVyIG9sZFNraXBwZWRFbnRpdHlIYW5kbGVyID0g
c2tpcHBlZEVudGl0eUhhbmRsZXI7Ci0gIFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyIG9sZFVu
a25vd25FbmNvZGluZ0hhbmRsZXIKLSAgICAgID0gdW5rbm93bkVuY29kaW5nSGFuZGxlcjsKLSAg
WE1MX0VsZW1lbnREZWNsSGFuZGxlciBvbGRFbGVtZW50RGVjbEhhbmRsZXIgPSBlbGVtZW50RGVj
bEhhbmRsZXI7Ci0gIFhNTF9BdHRsaXN0RGVjbEhhbmRsZXIgb2xkQXR0bGlzdERlY2xIYW5kbGVy
ID0gYXR0bGlzdERlY2xIYW5kbGVyOwotICBYTUxfRW50aXR5RGVjbEhhbmRsZXIgb2xkRW50aXR5
RGVjbEhhbmRsZXIgPSBlbnRpdHlEZWNsSGFuZGxlcjsKLSAgWE1MX1htbERlY2xIYW5kbGVyIG9s
ZFhtbERlY2xIYW5kbGVyID0geG1sRGVjbEhhbmRsZXI7Ci0gIEVMRU1FTlRfVFlQRSAqIG9sZERl
Y2xFbGVtZW50VHlwZSA9IGRlY2xFbGVtZW50VHlwZTsKLQotICB2b2lkICpvbGRVc2VyRGF0YSA9
IHVzZXJEYXRhOwotICB2b2lkICpvbGRIYW5kbGVyQXJnID0gaGFuZGxlckFyZzsKLSAgWE1MX0Jv
b2wgb2xkRGVmYXVsdEV4cGFuZEludGVybmFsRW50aXRpZXMgPSBkZWZhdWx0RXhwYW5kSW50ZXJu
YWxFbnRpdGllczsKLSAgWE1MX1BhcnNlciBvbGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmcg
PSBleHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmc7Ci0jaWZkZWYgWE1MX0RURAotICBlbnVtIFhN
TF9QYXJhbUVudGl0eVBhcnNpbmcgb2xkUGFyYW1FbnRpdHlQYXJzaW5nID0gcGFyYW1FbnRpdHlQ
YXJzaW5nOwotICBpbnQgb2xkSW5FbnRpdHlWYWx1ZSA9IHByb2xvZ1N0YXRlLmluRW50aXR5VmFs
dWU7Ci0jZW5kaWYKLSAgWE1MX0Jvb2wgb2xkbnNfdHJpcGxldHMgPSBuc190cmlwbGV0czsKLSAg
LyogTm90ZSB0aGF0IHRoZSBuZXcgcGFyc2VyIHNoYXJlcyB0aGUgc2FtZSBoYXNoIHNlY3JldCBh
cyB0aGUgb2xkCi0gICAgIHBhcnNlciwgc28gdGhhdCBkdGRDb3B5IGFuZCBjb3B5RW50aXR5VGFi
bGUgY2FuIGxvb2t1cCB2YWx1ZXMKLSAgICAgZnJvbSBoYXNoIHRhYmxlcyBhc3NvY2lhdGVkIHdp
dGggZWl0aGVyIHBhcnNlciB3aXRob3V0IHVzIGhhdmluZwotICAgICB0byB3b3JyeSB3aGljaCBo
YXNoIHNlY3JldHMgZWFjaCB0YWJsZSBoYXMuCi0gICovCi0gIHVuc2lnbmVkIGxvbmcgb2xkaGFz
aF9zZWNyZXRfc2FsdCA9IGhhc2hfc2VjcmV0X3NhbHQ7Ci0KLSNpZmRlZiBYTUxfRFRECi0gIGlm
ICghY29udGV4dCkKLSAgICBuZXdEdGQgPSBvbGREdGQ7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwot
Ci0gIC8qIE5vdGUgdGhhdCB0aGUgbWFnaWNhbCB1c2VzIG9mIHRoZSBwcmUtcHJvY2Vzc29yIHRv
IG1ha2UgZmllbGQKLSAgICAgYWNjZXNzIGxvb2sgbW9yZSBsaWtlIEMrKyByZXF1aXJlIHRoYXQg
YHBhcnNlcicgYmUgb3ZlcndyaXR0ZW4KLSAgICAgaGVyZS4gIFRoaXMgbWFrZXMgdGhpcyBmdW5j
dGlvbiBtb3JlIHBhaW5mdWwgdG8gZm9sbG93IHRoYW4gaXQKLSAgICAgd291bGQgYmUgb3RoZXJ3
aXNlLgotICAqLwotICBpZiAobnMpIHsKLSAgICBYTUxfQ2hhciB0bXBbMl07Ci0gICAgKnRtcCA9
IG5hbWVzcGFjZVNlcGFyYXRvcjsKLSAgICBwYXJzZXIgPSBwYXJzZXJDcmVhdGUoZW5jb2RpbmdO
YW1lLCAmcGFyc2VyLT5tX21lbSwgdG1wLCBuZXdEdGQpOwotICB9Ci0gIGVsc2UgewotICAgIHBh
cnNlciA9IHBhcnNlckNyZWF0ZShlbmNvZGluZ05hbWUsICZwYXJzZXItPm1fbWVtLCBOVUxMLCBu
ZXdEdGQpOwotICB9Ci0KLSAgaWYgKCFwYXJzZXIpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgc3Rh
cnRFbGVtZW50SGFuZGxlciA9IG9sZFN0YXJ0RWxlbWVudEhhbmRsZXI7Ci0gIGVuZEVsZW1lbnRI
YW5kbGVyID0gb2xkRW5kRWxlbWVudEhhbmRsZXI7Ci0gIGNoYXJhY3RlckRhdGFIYW5kbGVyID0g
b2xkQ2hhcmFjdGVyRGF0YUhhbmRsZXI7Ci0gIHByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIg
PSBvbGRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyOwotICBjb21tZW50SGFuZGxlciA9IG9s
ZENvbW1lbnRIYW5kbGVyOwotICBzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgPSBvbGRTdGFydENk
YXRhU2VjdGlvbkhhbmRsZXI7Ci0gIGVuZENkYXRhU2VjdGlvbkhhbmRsZXIgPSBvbGRFbmRDZGF0
YVNlY3Rpb25IYW5kbGVyOwotICBkZWZhdWx0SGFuZGxlciA9IG9sZERlZmF1bHRIYW5kbGVyOwot
ICB1bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyID0gb2xkVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxl
cjsKLSAgbm90YXRpb25EZWNsSGFuZGxlciA9IG9sZE5vdGF0aW9uRGVjbEhhbmRsZXI7Ci0gIHN0
YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBvbGRTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyOwot
ICBlbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IG9sZEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyOwot
ICBub3RTdGFuZGFsb25lSGFuZGxlciA9IG9sZE5vdFN0YW5kYWxvbmVIYW5kbGVyOwotICBleHRl
cm5hbEVudGl0eVJlZkhhbmRsZXIgPSBvbGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXI7Ci0gIHNr
aXBwZWRFbnRpdHlIYW5kbGVyID0gb2xkU2tpcHBlZEVudGl0eUhhbmRsZXI7Ci0gIHVua25vd25F
bmNvZGluZ0hhbmRsZXIgPSBvbGRVbmtub3duRW5jb2RpbmdIYW5kbGVyOwotICBlbGVtZW50RGVj
bEhhbmRsZXIgPSBvbGRFbGVtZW50RGVjbEhhbmRsZXI7Ci0gIGF0dGxpc3REZWNsSGFuZGxlciA9
IG9sZEF0dGxpc3REZWNsSGFuZGxlcjsKLSAgZW50aXR5RGVjbEhhbmRsZXIgPSBvbGRFbnRpdHlE
ZWNsSGFuZGxlcjsKLSAgeG1sRGVjbEhhbmRsZXIgPSBvbGRYbWxEZWNsSGFuZGxlcjsKLSAgZGVj
bEVsZW1lbnRUeXBlID0gb2xkRGVjbEVsZW1lbnRUeXBlOwotICB1c2VyRGF0YSA9IG9sZFVzZXJE
YXRhOwotICBpZiAob2xkVXNlckRhdGEgPT0gb2xkSGFuZGxlckFyZykKLSAgICBoYW5kbGVyQXJn
ID0gdXNlckRhdGE7Ci0gIGVsc2UKLSAgICBoYW5kbGVyQXJnID0gcGFyc2VyOwotICBpZiAob2xk
RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnICE9IG9sZFBhcnNlcikKLSAgICBleHRlcm5hbEVu
dGl0eVJlZkhhbmRsZXJBcmcgPSBvbGRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXJBcmc7Ci0gIGRl
ZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0gb2xkRGVmYXVsdEV4cGFuZEludGVybmFsRW50
aXRpZXM7Ci0gIG5zX3RyaXBsZXRzID0gb2xkbnNfdHJpcGxldHM7Ci0gIGhhc2hfc2VjcmV0X3Nh
bHQgPSBvbGRoYXNoX3NlY3JldF9zYWx0OwotICBwYXJlbnRQYXJzZXIgPSBvbGRQYXJzZXI7Ci0j
aWZkZWYgWE1MX0RURAotICBwYXJhbUVudGl0eVBhcnNpbmcgPSBvbGRQYXJhbUVudGl0eVBhcnNp
bmc7Ci0gIHByb2xvZ1N0YXRlLmluRW50aXR5VmFsdWUgPSBvbGRJbkVudGl0eVZhbHVlOwotICBp
ZiAoY29udGV4dCkgewotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICBpZiAoIWR0ZENvcHkob2xk
UGFyc2VyLCBfZHRkLCBvbGREdGQsICZwYXJzZXItPm1fbWVtKQotICAgICAgfHwgIXNldENvbnRl
eHQocGFyc2VyLCBjb250ZXh0KSkgewotICAgICAgWE1MX1BhcnNlckZyZWUocGFyc2VyKTsKLSAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBwcm9jZXNzb3IgPSBleHRlcm5hbEVudGl0eUlu
aXRQcm9jZXNzb3I7Ci0jaWZkZWYgWE1MX0RURAotICB9Ci0gIGVsc2UgewotICAgIC8qIFRoZSBE
VEQgaW5zdGFuY2UgcmVmZXJlbmNlZCBieSBfZHRkIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBkb2N1
bWVudCdzCi0gICAgICAgcm9vdCBwYXJzZXIgYW5kIGV4dGVybmFsIFBFIHBhcnNlcnMsIHRoZXJl
Zm9yZSBvbmUgZG9lcyBub3QgbmVlZCB0bwotICAgICAgIGNhbGwgc2V0Q29udGV4dC4gSW4gYWRk
aXRpb24sIG9uZSBhbHNvICptdXN0KiBub3QgY2FsbCBzZXRDb250ZXh0LAotICAgICAgIGJlY2F1
c2UgdGhpcyB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgcHJlZml4LT5iaW5kaW5nIHBvaW50ZXJz
IGluCi0gICAgICAgX2R0ZCB3aXRoIG9uZXMgdGhhdCBnZXQgZGVzdHJveWVkIHdpdGggdGhlIGV4
dGVybmFsIFBFIHBhcnNlci4KLSAgICAgICBUaGlzIHdvdWxkIGxlYXZlIHRob3NlIHByZWZpeGVz
IHdpdGggZGFuZ2xpbmcgcG9pbnRlcnMuCi0gICAgKi8KLSAgICBpc1BhcmFtRW50aXR5ID0gWE1M
X1RSVUU7Ci0gICAgWG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnRpdHkoJnByb2xvZ1N0YXRl
KTsKLSAgICBwcm9jZXNzb3IgPSBleHRlcm5hbFBhckVudEluaXRQcm9jZXNzb3I7Ci0gIH0KLSNl
bmRpZiAvKiBYTUxfRFREICovCi0gIHJldHVybiBwYXJzZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIEZB
U1RDQUxMCi1kZXN0cm95QmluZGluZ3MoQklORElORyAqYmluZGluZ3MsIFhNTF9QYXJzZXIgcGFy
c2VyKQotewotICBmb3IgKDs7KSB7Ci0gICAgQklORElORyAqYiA9IGJpbmRpbmdzOwotICAgIGlm
ICghYikKLSAgICAgIGJyZWFrOwotICAgIGJpbmRpbmdzID0gYi0+bmV4dFRhZ0JpbmRpbmc7Ci0g
ICAgRlJFRShiLT51cmkpOwotICAgIEZSRUUoYik7Ci0gIH0KLX0KLQotdm9pZCBYTUxDQUxMCi1Y
TUxfUGFyc2VyRnJlZShYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgVEFHICp0YWdMaXN0OwotICBP
UEVOX0lOVEVSTkFMX0VOVElUWSAqZW50aXR5TGlzdDsKLSAgaWYgKHBhcnNlciA9PSBOVUxMKQot
ICAgIHJldHVybjsKLSAgLyogZnJlZSB0YWdTdGFjayBhbmQgZnJlZVRhZ0xpc3QgKi8KLSAgdGFn
TGlzdCA9IHRhZ1N0YWNrOwotICBmb3IgKDs7KSB7Ci0gICAgVEFHICpwOwotICAgIGlmICh0YWdM
aXN0ID09IE5VTEwpIHsKLSAgICAgIGlmIChmcmVlVGFnTGlzdCA9PSBOVUxMKQotICAgICAgICBi
cmVhazsKLSAgICAgIHRhZ0xpc3QgPSBmcmVlVGFnTGlzdDsKLSAgICAgIGZyZWVUYWdMaXN0ID0g
TlVMTDsKLSAgICB9Ci0gICAgcCA9IHRhZ0xpc3Q7Ci0gICAgdGFnTGlzdCA9IHRhZ0xpc3QtPnBh
cmVudDsKLSAgICBGUkVFKHAtPmJ1Zik7Ci0gICAgZGVzdHJveUJpbmRpbmdzKHAtPmJpbmRpbmdz
LCBwYXJzZXIpOwotICAgIEZSRUUocCk7Ci0gIH0KLSAgLyogZnJlZSBvcGVuSW50ZXJuYWxFbnRp
dGllcyBhbmQgZnJlZUludGVybmFsRW50aXRpZXMgKi8KLSAgZW50aXR5TGlzdCA9IG9wZW5JbnRl
cm5hbEVudGl0aWVzOwotICBmb3IgKDs7KSB7Ci0gICAgT1BFTl9JTlRFUk5BTF9FTlRJVFkgKm9w
ZW5FbnRpdHk7Ci0gICAgaWYgKGVudGl0eUxpc3QgPT0gTlVMTCkgewotICAgICAgaWYgKGZyZWVJ
bnRlcm5hbEVudGl0aWVzID09IE5VTEwpCi0gICAgICAgIGJyZWFrOwotICAgICAgZW50aXR5TGlz
dCA9IGZyZWVJbnRlcm5hbEVudGl0aWVzOwotICAgICAgZnJlZUludGVybmFsRW50aXRpZXMgPSBO
VUxMOwotICAgIH0KLSAgICBvcGVuRW50aXR5ID0gZW50aXR5TGlzdDsKLSAgICBlbnRpdHlMaXN0
ID0gZW50aXR5TGlzdC0+bmV4dDsKLSAgICBGUkVFKG9wZW5FbnRpdHkpOwotICB9Ci0KLSAgZGVz
dHJveUJpbmRpbmdzKGZyZWVCaW5kaW5nTGlzdCwgcGFyc2VyKTsKLSAgZGVzdHJveUJpbmRpbmdz
KGluaGVyaXRlZEJpbmRpbmdzLCBwYXJzZXIpOwotICBwb29sRGVzdHJveSgmdGVtcFBvb2wpOwot
ICBwb29sRGVzdHJveSgmdGVtcDJQb29sKTsKLSNpZmRlZiBYTUxfRFRECi0gIC8qIGV4dGVybmFs
IHBhcmFtZXRlciBlbnRpdHkgcGFyc2VycyBzaGFyZSB0aGUgRFREIHN0cnVjdHVyZQotICAgICBw
YXJzZXItPm1fZHRkIHdpdGggdGhlIHJvb3QgcGFyc2VyLCBzbyB3ZSBtdXN0IG5vdCBkZXN0cm95
IGl0Ci0gICovCi0gIGlmICghaXNQYXJhbUVudGl0eSAmJiBfZHRkKQotI2Vsc2UKLSAgaWYgKF9k
dGQpCi0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgIGR0ZERlc3Ryb3koX2R0ZCwgKFhNTF9Cb29s
KSFwYXJlbnRQYXJzZXIsICZwYXJzZXItPm1fbWVtKTsKLSAgRlJFRSgodm9pZCAqKWF0dHMpOwot
I2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgRlJFRSgodm9pZCAqKWF0dEluZm8pOwotI2VuZGlmCi0g
IEZSRUUoZ3JvdXBDb25uZWN0b3IpOwotICBGUkVFKGJ1ZmZlcik7Ci0gIEZSRUUoZGF0YUJ1Zik7
Ci0gIEZSRUUobnNBdHRzKTsKLSAgRlJFRSh1bmtub3duRW5jb2RpbmdNZW0pOwotICBpZiAodW5r
bm93bkVuY29kaW5nUmVsZWFzZSkKLSAgICB1bmtub3duRW5jb2RpbmdSZWxlYXNlKHVua25vd25F
bmNvZGluZ0RhdGEpOwotICBGUkVFKHBhcnNlcik7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1Vz
ZVBhcnNlckFzSGFuZGxlckFyZyhYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgaGFuZGxlckFyZyA9
IHBhcnNlcjsKLX0KLQotZW51bSBYTUxfRXJyb3IgWE1MQ0FMTAotWE1MX1VzZUZvcmVpZ25EVEQo
WE1MX1BhcnNlciBwYXJzZXIsIFhNTF9Cb29sIHVzZURURCkKLXsKLSNpZmRlZiBYTUxfRFRECi0g
IC8qIGJsb2NrIGFmdGVyIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBiZWVuIGNh
bGxlZCAqLwotICBpZiAocHNfcGFyc2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJzaW5nID09
IFhNTF9TVVNQRU5ERUQpCi0gICAgcmV0dXJuIFhNTF9FUlJPUl9DQU5UX0NIQU5HRV9GRUFUVVJF
X09OQ0VfUEFSU0lORzsKLSAgdXNlRm9yZWlnbkRURCA9IHVzZURURDsKLSAgcmV0dXJuIFhNTF9F
UlJPUl9OT05FOwotI2Vsc2UKLSAgcmV0dXJuIFhNTF9FUlJPUl9GRUFUVVJFX1JFUVVJUkVTX1hN
TF9EVEQ7Ci0jZW5kaWYKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0UmV0dXJuTlNUcmlwbGV0
KFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgZG9fbnN0KQotewotICAvKiBibG9jayBhZnRlciBYTUxf
UGFyc2UoKS9YTUxfUGFyc2VCdWZmZXIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KLSAgaWYgKHBzX3Bh
cnNpbmcgPT0gWE1MX1BBUlNJTkcgfHwgcHNfcGFyc2luZyA9PSBYTUxfU1VTUEVOREVEKQotICAg
IHJldHVybjsKLSAgbnNfdHJpcGxldHMgPSBkb19uc3QgPyBYTUxfVFJVRSA6IFhNTF9GQUxTRTsK
LX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0VXNlckRhdGEoWE1MX1BhcnNlciBwYXJzZXIsIHZv
aWQgKnApCi17Ci0gIGlmIChoYW5kbGVyQXJnID09IHVzZXJEYXRhKQotICAgIGhhbmRsZXJBcmcg
PSB1c2VyRGF0YSA9IHA7Ci0gIGVsc2UKLSAgICB1c2VyRGF0YSA9IHA7Ci19Ci0KLWVudW0gWE1M
X1N0YXR1cyBYTUxDQUxMCi1YTUxfU2V0QmFzZShYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgWE1M
X0NoYXIgKnApCi17Ci0gIGlmIChwKSB7Ci0gICAgcCA9IHBvb2xDb3B5U3RyaW5nKCZfZHRkLT5w
b29sLCBwKTsKLSAgICBpZiAoIXApCi0gICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAg
ICBjdXJCYXNlID0gcDsKLSAgfQotICBlbHNlCi0gICAgY3VyQmFzZSA9IE5VTEw7Ci0gIHJldHVy
biBYTUxfU1RBVFVTX09LOwotfQotCi1jb25zdCBYTUxfQ2hhciAqIFhNTENBTEwKLVhNTF9HZXRC
YXNlKFhNTF9QYXJzZXIgcGFyc2VyKQotewotICByZXR1cm4gY3VyQmFzZTsKLX0KLQotaW50IFhN
TENBTEwKLVhNTF9HZXRTcGVjaWZpZWRBdHRyaWJ1dGVDb3VudChYTUxfUGFyc2VyIHBhcnNlcikK
LXsKLSAgcmV0dXJuIG5TcGVjaWZpZWRBdHRzOwotfQotCi1pbnQgWE1MQ0FMTAotWE1MX0dldElk
QXR0cmlidXRlSW5kZXgoWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIHJldHVybiBpZEF0dEluZGV4
OwotfQotCi0jaWZkZWYgWE1MX0FUVFJfSU5GTwotY29uc3QgWE1MX0F0dHJJbmZvICogWE1MQ0FM
TAotWE1MX0dldEF0dHJpYnV0ZUluZm8oWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIHJldHVybiBh
dHRJbmZvOwotfQotI2VuZGlmCi0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEVsZW1lbnRIYW5kbGVy
KFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9TdGFydEVsZW1l
bnRIYW5kbGVyIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmRFbGVtZW50SGFu
ZGxlciBlbmQpCi17Ci0gIHN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzdGFydDsKLSAgZW5kRWxlbWVu
dEhhbmRsZXIgPSBlbmQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldFN0YXJ0RWxlbWVudEhh
bmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxf
U3RhcnRFbGVtZW50SGFuZGxlciBzdGFydCkgewotICBzdGFydEVsZW1lbnRIYW5kbGVyID0gc3Rh
cnQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEVuZEVsZW1lbnRIYW5kbGVyKFhNTF9QYXJz
ZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FbmRFbGVtZW50SGFuZGxl
ciBlbmQpIHsKLSAgZW5kRWxlbWVudEhhbmRsZXIgPSBlbmQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAot
WE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhNTF9DaGFyYWN0ZXJEYXRhSGFuZGxlciBoYW5kbGVyKQotewot
ICBjaGFyYWN0ZXJEYXRhSGFuZGxlciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1M
X1NldFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfUHJvY2Vzc2luZ0luc3RydWN0aW9u
SGFuZGxlciBoYW5kbGVyKQotewotICBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gaGFu
ZGxlcjsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0Q29tbWVudEhhbmRsZXIoWE1MX1BhcnNl
ciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgWE1MX0NvbW1lbnRIYW5kbGVyIGhhbmRs
ZXIpCi17Ci0gIGNvbW1lbnRIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQotdm9pZCBYTUxDQUxMCi1Y
TUxfU2V0Q2RhdGFTZWN0aW9uSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgc3RhcnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBlbmQpCi17
Ci0gIHN0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlciA9IHN0YXJ0OwotICBlbmRDZGF0YVNlY3Rpb25I
YW5kbGVyID0gZW5kOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRTdGFydENkYXRhU2VjdGlv
bkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhNTF9TdGFydENkYXRhU2VjdGlvbkhhbmRsZXIgc3RhcnQpIHsKLSAgc3RhcnRDZGF0YVNl
Y3Rpb25IYW5kbGVyID0gc3RhcnQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEVuZENkYXRh
U2VjdGlvbkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYTUxfRW5kQ2RhdGFTZWN0aW9uSGFuZGxlciBlbmQpIHsKLSAgZW5kQ2RhdGFTZWN0
aW9uSGFuZGxlciA9IGVuZDsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfU2V0RGVmYXVsdEhhbmRs
ZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgWE1MX0RlZmF1bHRI
YW5kbGVyIGhhbmRsZXIpCi17Ci0gIGRlZmF1bHRIYW5kbGVyID0gaGFuZGxlcjsKLSAgZGVmYXVs
dEV4cGFuZEludGVybmFsRW50aXRpZXMgPSBYTUxfRkFMU0U7Ci19Ci0KLXZvaWQgWE1MQ0FMTAot
WE1MX1NldERlZmF1bHRIYW5kbGVyRXhwYW5kKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhNTF9EZWZhdWx0SGFuZGxlciBoYW5kbGVyKQotewotICBkZWZh
dWx0SGFuZGxlciA9IGhhbmRsZXI7Ci0gIGRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzID0g
WE1MX1RSVUU7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldERvY3R5cGVEZWNsSGFuZGxlcihY
TUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0RG9j
dHlwZURlY2xIYW5kbGVyIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5k
RG9jdHlwZURlY2xIYW5kbGVyIGVuZCkKLXsKLSAgc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgPSBz
dGFydDsKLSAgZW5kRG9jdHlwZURlY2xIYW5kbGVyID0gZW5kOwotfQotCi12b2lkIFhNTENBTEwK
LVhNTF9TZXRTdGFydERvY3R5cGVEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgc3Rh
cnQpIHsKLSAgc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIgPSBzdGFydDsKLX0KLQotdm9pZCBYTUxD
QUxMCi1YTUxfU2V0RW5kRG9jdHlwZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kRG9jdHlwZURlY2xIYW5kbGVyIGVuZCkg
ewotICBlbmREb2N0eXBlRGVjbEhhbmRsZXIgPSBlbmQ7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1M
X1NldFVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlciBo
YW5kbGVyKQotewotICB1bnBhcnNlZEVudGl0eURlY2xIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQot
dm9pZCBYTUxDQUxMCi1YTUxfU2V0Tm90YXRpb25EZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9Ob3RhdGlvbkRlY2xIYW5kbGVyIGhh
bmRsZXIpCi17Ci0gIG5vdGF0aW9uRGVjbEhhbmRsZXIgPSBoYW5kbGVyOwotfQotCi12b2lkIFhN
TENBTEwKLVhNTF9TZXROYW1lc3BhY2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciBz
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhh
bmRsZXIgZW5kKQotewotICBzdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gc3RhcnQ7Ci0gIGVu
ZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gZW5kOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRT
dGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgc3RhcnQp
IHsKLSAgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IHN0YXJ0OwotfQotCi12b2lkIFhNTENB
TEwKLVhNTF9TZXRFbmROYW1lc3BhY2VEZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIg
ZW5kKSB7Ci0gIGVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gZW5kOwotfQotCi12b2lkIFhNTENB
TEwKLVhNTF9TZXROb3RTdGFuZGFsb25lSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYTUxfTm90U3RhbmRhbG9uZUhhbmRsZXIgaGFuZGxlcikK
LXsKLSAgbm90U3RhbmRhbG9uZUhhbmRsZXIgPSBoYW5kbGVyOwotfQotCi12b2lkIFhNTENBTEwK
LVhNTF9TZXRFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIg
aGFuZGxlcikKLXsKLSAgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQot
dm9pZCBYTUxDQUxMCi1YTUxfU2V0RXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnKFhNTF9QYXJz
ZXIgcGFyc2VyLCB2b2lkICphcmcpCi17Ci0gIGlmIChhcmcpCi0gICAgZXh0ZXJuYWxFbnRpdHlS
ZWZIYW5kbGVyQXJnID0gKFhNTF9QYXJzZXIpYXJnOwotICBlbHNlCi0gICAgZXh0ZXJuYWxFbnRp
dHlSZWZIYW5kbGVyQXJnID0gcGFyc2VyOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRTa2lw
cGVkRW50aXR5SGFuZGxlcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYTUxfU2tpcHBlZEVudGl0eUhhbmRsZXIgaGFuZGxlcikKLXsKLSAgc2tpcHBlZEVu
dGl0eUhhbmRsZXIgPSBoYW5kbGVyOwotfQotCi12b2lkIFhNTENBTEwKLVhNTF9TZXRVbmtub3du
RW5jb2RpbmdIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIgaGFuZGxlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17Ci0gIHVua25vd25FbmNvZGluZ0hhbmRs
ZXIgPSBoYW5kbGVyOwotICB1bmtub3duRW5jb2RpbmdIYW5kbGVyRGF0YSA9IGRhdGE7Ci19Ci0K
LXZvaWQgWE1MQ0FMTAotWE1MX1NldEVsZW1lbnREZWNsSGFuZGxlcihYTUxfUGFyc2VyIHBhcnNl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0VsZW1lbnREZWNsSGFuZGxlciBlbGRl
Y2wpCi17Ci0gIGVsZW1lbnREZWNsSGFuZGxlciA9IGVsZGVjbDsKLX0KLQotdm9pZCBYTUxDQUxM
Ci1YTUxfU2V0QXR0bGlzdERlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBYTUxfQXR0bGlzdERlY2xIYW5kbGVyIGF0dGRlY2wpCi17Ci0gIGF0
dGxpc3REZWNsSGFuZGxlciA9IGF0dGRlY2w7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldEVu
dGl0eURlY2xIYW5kbGVyKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFhNTF9FbnRpdHlEZWNsSGFuZGxlciBoYW5kbGVyKQotewotICBlbnRpdHlEZWNsSGFuZGxl
ciA9IGhhbmRsZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX1NldFhtbERlY2xIYW5kbGVyKFhN
TF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgIFhNTF9YbWxEZWNsSGFuZGxl
ciBoYW5kbGVyKSB7Ci0gIHhtbERlY2xIYW5kbGVyID0gaGFuZGxlcjsKLX0KLQotaW50IFhNTENB
TEwKLVhNTF9TZXRQYXJhbUVudGl0eVBhcnNpbmcoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudW0gWE1MX1BhcmFtRW50aXR5UGFyc2luZyBwZVBhcnNpbmcp
Ci17Ci0gIC8qIGJsb2NrIGFmdGVyIFhNTF9QYXJzZSgpL1hNTF9QYXJzZUJ1ZmZlcigpIGhhcyBi
ZWVuIGNhbGxlZCAqLwotICBpZiAocHNfcGFyc2luZyA9PSBYTUxfUEFSU0lORyB8fCBwc19wYXJz
aW5nID09IFhNTF9TVVNQRU5ERUQpCi0gICAgcmV0dXJuIDA7Ci0jaWZkZWYgWE1MX0RURAotICBw
YXJhbUVudGl0eVBhcnNpbmcgPSBwZVBhcnNpbmc7Ci0gIHJldHVybiAxOwotI2Vsc2UKLSAgcmV0
dXJuIHBlUGFyc2luZyA9PSBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfTkVWRVI7Ci0jZW5kaWYK
LX0KLQotaW50IFhNTENBTEwKLVhNTF9TZXRIYXNoU2FsdChYTUxfUGFyc2VyIHBhcnNlciwKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGhhc2hfc2FsdCkKLXsKLSAgLyogYmxvY2sgYWZ0
ZXIgWE1MX1BhcnNlKCkvWE1MX1BhcnNlQnVmZmVyKCkgaGFzIGJlZW4gY2FsbGVkICovCi0gIGlm
IChwc19wYXJzaW5nID09IFhNTF9QQVJTSU5HIHx8IHBzX3BhcnNpbmcgPT0gWE1MX1NVU1BFTkRF
RCkKLSAgICByZXR1cm4gMDsKLSAgaGFzaF9zZWNyZXRfc2FsdCA9IGhhc2hfc2FsdDsKLSAgcmV0
dXJuIDE7Ci19Ci0KLWVudW0gWE1MX1N0YXR1cyBYTUxDQUxMCi1YTUxfUGFyc2UoWE1MX1BhcnNl
ciBwYXJzZXIsIGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIGludCBpc0ZpbmFsKQotewotICBzd2l0
Y2ggKHBzX3BhcnNpbmcpIHsKLSAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgIGVycm9yQ29kZSA9
IFhNTF9FUlJPUl9TVVNQRU5ERUQ7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Ci0gIGNh
c2UgWE1MX0ZJTklTSEVEOgotICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9GSU5JU0hFRDsKLSAg
ICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgY2FzZSBYTUxfSU5JVElBTElaRUQ6Ci0gICAg
aWYgKHBhcmVudFBhcnNlciA9PSBOVUxMICYmICFzdGFydFBhcnNpbmcocGFyc2VyKSkgewotICAg
ICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIHJldHVybiBYTUxfU1RB
VFVTX0VSUk9SOwotICAgIH0KLSAgZGVmYXVsdDoKLSAgICBwc19wYXJzaW5nID0gWE1MX1BBUlNJ
Tkc7Ci0gIH0KLQotICBpZiAobGVuID09IDApIHsKLSAgICBwc19maW5hbEJ1ZmZlciA9IChYTUxf
Qm9vbClpc0ZpbmFsOwotICAgIGlmICghaXNGaW5hbCkKLSAgICAgIHJldHVybiBYTUxfU1RBVFVT
X09LOwotICAgIHBvc2l0aW9uUHRyID0gYnVmZmVyUHRyOwotICAgIHBhcnNlRW5kUHRyID0gYnVm
ZmVyRW5kOwotCi0gICAgLyogSWYgZGF0YSBhcmUgbGVmdCBvdmVyIGZyb20gbGFzdCBidWZmZXIs
IGFuZCB3ZSBub3cga25vdyB0aGF0IHRoZXNlCi0gICAgICAgZGF0YSBhcmUgdGhlIGZpbmFsIGNo
dW5rIG9mIGlucHV0LCB0aGVuIHdlIGhhdmUgdG8gY2hlY2sgdGhlbSBhZ2FpbgotICAgICAgIHRv
IGRldGVjdCBlcnJvcnMgYmFzZWQgb24gdGhhdCBmYWN0LgotICAgICovCi0gICAgZXJyb3JDb2Rl
ID0gcHJvY2Vzc29yKHBhcnNlciwgYnVmZmVyUHRyLCBwYXJzZUVuZFB0ciwgJmJ1ZmZlclB0cik7
Ci0KLSAgICBpZiAoZXJyb3JDb2RlID09IFhNTF9FUlJPUl9OT05FKSB7Ci0gICAgICBzd2l0Y2gg
KHBzX3BhcnNpbmcpIHsKLSAgICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAgICAgICAgWG1sVXBk
YXRlUG9zaXRpb24oZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBidWZmZXJQdHIsICZwb3NpdGlvbik7
Ci0gICAgICAgIHBvc2l0aW9uUHRyID0gYnVmZmVyUHRyOwotICAgICAgICByZXR1cm4gWE1MX1NU
QVRVU19TVVNQRU5ERUQ7Ci0gICAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKLSAgICAgIGNhc2Ug
WE1MX1BBUlNJTkc6Ci0gICAgICAgIHBzX3BhcnNpbmcgPSBYTUxfRklOSVNIRUQ7Ci0gICAgICAg
IC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFhNTF9T
VEFUVVNfT0s7Ci0gICAgICB9Ci0gICAgfQotICAgIGV2ZW50RW5kUHRyID0gZXZlbnRQdHI7Ci0g
ICAgcHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7Ci0gICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJS
T1I7Ci0gIH0KLSNpZm5kZWYgWE1MX0NPTlRFWFRfQllURVMKLSAgZWxzZSBpZiAoYnVmZmVyUHRy
ID09IGJ1ZmZlckVuZCkgewotICAgIGNvbnN0IGNoYXIgKmVuZDsKLSAgICBpbnQgbkxlZnRPdmVy
OwotICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICBwYXJzZUVuZEJ5dGVJbmRleCArPSBs
ZW47Ci0gICAgcG9zaXRpb25QdHIgPSBzOwotICAgIHBzX2ZpbmFsQnVmZmVyID0gKFhNTF9Cb29s
KWlzRmluYWw7Ci0KLSAgICBlcnJvckNvZGUgPSBwcm9jZXNzb3IocGFyc2VyLCBzLCBwYXJzZUVu
ZFB0ciA9IHMgKyBsZW4sICZlbmQpOwotCi0gICAgaWYgKGVycm9yQ29kZSAhPSBYTUxfRVJST1Jf
Tk9ORSkgewotICAgICAgZXZlbnRFbmRQdHIgPSBldmVudFB0cjsKLSAgICAgIHByb2Nlc3NvciA9
IGVycm9yUHJvY2Vzc29yOwotICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Ci0gICAgfQot
ICAgIGVsc2UgewotICAgICAgc3dpdGNoIChwc19wYXJzaW5nKSB7Ci0gICAgICBjYXNlIFhNTF9T
VVNQRU5ERUQ6Ci0gICAgICAgIHJlc3VsdCA9IFhNTF9TVEFUVVNfU1VTUEVOREVEOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgWE1MX0lOSVRJQUxJWkVEOgotICAgICAgY2FzZSBYTUxfUEFS
U0lORzoKLSAgICAgICAgaWYgKGlzRmluYWwpIHsKLSAgICAgICAgICBwc19wYXJzaW5nID0gWE1M
X0ZJTklTSEVEOwotICAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX09LOwotICAgICAgICB9Ci0g
ICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9
IFhNTF9TVEFUVVNfT0s7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgWG1sVXBkYXRlUG9zaXRpb24o
ZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBlbmQsICZwb3NpdGlvbik7Ci0gICAgbkxlZnRPdmVyID0g
cyArIGxlbiAtIGVuZDsKLSAgICBpZiAobkxlZnRPdmVyKSB7Ci0gICAgICBpZiAoYnVmZmVyID09
IE5VTEwgfHwgbkxlZnRPdmVyID4gYnVmZmVyTGltIC0gYnVmZmVyKSB7Ci0gICAgICAgIC8qIEZJ
WE1FIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgKi8KLSAgICAgICAgY2hhciAqdGVtcDsKLSAgICAg
ICAgdGVtcCA9IChidWZmZXIgPT0gTlVMTAotICAgICAgICAgICAgICAgID8gKGNoYXIgKilNQUxM
T0MobGVuICogMikKLSAgICAgICAgICAgICAgICA6IChjaGFyICopUkVBTExPQyhidWZmZXIsIGxl
biAqIDIpKTsKLSAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgIGVycm9yQ29k
ZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgZXZlbnRQdHIgPSBldmVudEVuZFB0
ciA9IE5VTEw7Ci0gICAgICAgICAgcHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7Ci0gICAgICAg
ICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmZmVyID0g
dGVtcDsKLSAgICAgICAgYnVmZmVyTGltID0gYnVmZmVyICsgbGVuICogMjsKLSAgICAgIH0KLSAg
ICAgIG1lbWNweShidWZmZXIsIGVuZCwgbkxlZnRPdmVyKTsKLSAgICB9Ci0gICAgYnVmZmVyUHRy
ID0gYnVmZmVyOwotICAgIGJ1ZmZlckVuZCA9IGJ1ZmZlciArIG5MZWZ0T3ZlcjsKLSAgICBwb3Np
dGlvblB0ciA9IGJ1ZmZlclB0cjsKLSAgICBwYXJzZUVuZFB0ciA9IGJ1ZmZlckVuZDsKLSAgICBl
dmVudFB0ciA9IGJ1ZmZlclB0cjsKLSAgICBldmVudEVuZFB0ciA9IGJ1ZmZlclB0cjsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICB9Ci0jZW5kaWYgIC8qIG5vdCBkZWZpbmVkIFhNTF9DT05URVhUX0JZ
VEVTICovCi0gIGVsc2UgewotICAgIHZvaWQgKmJ1ZmYgPSBYTUxfR2V0QnVmZmVyKHBhcnNlciwg
bGVuKTsKLSAgICBpZiAoYnVmZiA9PSBOVUxMKQotICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJS
T1I7Ci0gICAgZWxzZSB7Ci0gICAgICBtZW1jcHkoYnVmZiwgcywgbGVuKTsKLSAgICAgIHJldHVy
biBYTUxfUGFyc2VCdWZmZXIocGFyc2VyLCBsZW4sIGlzRmluYWwpOwotICAgIH0KLSAgfQotfQot
Ci1lbnVtIFhNTF9TdGF0dXMgWE1MQ0FMTAotWE1MX1BhcnNlQnVmZmVyKFhNTF9QYXJzZXIgcGFy
c2VyLCBpbnQgbGVuLCBpbnQgaXNGaW5hbCkKLXsKLSAgY29uc3QgY2hhciAqc3RhcnQ7Ci0gIGVu
dW0gWE1MX1N0YXR1cyByZXN1bHQgPSBYTUxfU1RBVFVTX09LOwotCi0gIHN3aXRjaCAocHNfcGFy
c2luZykgewotICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9S
X1NVU1BFTkRFRDsKLSAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgY2FzZSBYTUxfRklO
SVNIRUQ6Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX0ZJTklTSEVEOwotICAgIHJldHVybiBY
TUxfU1RBVFVTX0VSUk9SOwotICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKLSAgICBpZiAocGFyZW50
UGFyc2VyID09IE5VTEwgJiYgIXN0YXJ0UGFyc2luZyhwYXJzZXIpKSB7Ci0gICAgICBlcnJvckNv
ZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7
Ci0gICAgfQotICBkZWZhdWx0OgotICAgIHBzX3BhcnNpbmcgPSBYTUxfUEFSU0lORzsKLSAgfQot
Ci0gIHN0YXJ0ID0gYnVmZmVyUHRyOwotICBwb3NpdGlvblB0ciA9IHN0YXJ0OwotICBidWZmZXJF
bmQgKz0gbGVuOwotICBwYXJzZUVuZFB0ciA9IGJ1ZmZlckVuZDsKLSAgcGFyc2VFbmRCeXRlSW5k
ZXggKz0gbGVuOwotICBwc19maW5hbEJ1ZmZlciA9IChYTUxfQm9vbClpc0ZpbmFsOwotCi0gIGVy
cm9yQ29kZSA9IHByb2Nlc3NvcihwYXJzZXIsIHN0YXJ0LCBwYXJzZUVuZFB0ciwgJmJ1ZmZlclB0
cik7Ci0KLSAgaWYgKGVycm9yQ29kZSAhPSBYTUxfRVJST1JfTk9ORSkgewotICAgIGV2ZW50RW5k
UHRyID0gZXZlbnRQdHI7Ci0gICAgcHJvY2Vzc29yID0gZXJyb3JQcm9jZXNzb3I7Ci0gICAgcmV0
dXJuIFhNTF9TVEFUVVNfRVJST1I7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgc3dpdGNoIChwc19wYXJz
aW5nKSB7Ci0gICAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgICAgcmVzdWx0ID0gWE1MX1NUQVRV
U19TVVNQRU5ERUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9JTklUSUFMSVpFRDoKLSAg
ICBjYXNlIFhNTF9QQVJTSU5HOgotICAgICAgaWYgKGlzRmluYWwpIHsKLSAgICAgICAgcHNfcGFy
c2luZyA9IFhNTF9GSU5JU0hFRDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAg
ICBkZWZhdWx0OiA7ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLwotICAgIH0KLSAgfQotCi0gIFht
bFVwZGF0ZVBvc2l0aW9uKGVuY29kaW5nLCBwb3NpdGlvblB0ciwgYnVmZmVyUHRyLCAmcG9zaXRp
b24pOwotICBwb3NpdGlvblB0ciA9IGJ1ZmZlclB0cjsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCAqIFhNTENBTEwKLVhNTF9HZXRCdWZmZXIoWE1MX1BhcnNlciBwYXJzZXIsIGludCBsZW4p
Ci17Ci0gIHN3aXRjaCAocHNfcGFyc2luZykgewotICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAg
ZXJyb3JDb2RlID0gWE1MX0VSUk9SX1NVU1BFTkRFRDsKLSAgICByZXR1cm4gTlVMTDsKLSAgY2Fz
ZSBYTUxfRklOSVNIRUQ6Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX0ZJTklTSEVEOwotICAg
IHJldHVybiBOVUxMOwotICBkZWZhdWx0OiA7Ci0gIH0KLQotICBpZiAobGVuID4gYnVmZmVyTGlt
IC0gYnVmZmVyRW5kKSB7Ci0gICAgLyogRklYTUUgYXZvaWQgaW50ZWdlciBvdmVyZmxvdyAqLwot
ICAgIGludCBuZWVkZWRTaXplID0gbGVuICsgKGludCkoYnVmZmVyRW5kIC0gYnVmZmVyUHRyKTsK
LSNpZmRlZiBYTUxfQ09OVEVYVF9CWVRFUwotICAgIGludCBrZWVwID0gKGludCkoYnVmZmVyUHRy
IC0gYnVmZmVyKTsKLQotICAgIGlmIChrZWVwID4gWE1MX0NPTlRFWFRfQllURVMpCi0gICAgICBr
ZWVwID0gWE1MX0NPTlRFWFRfQllURVM7Ci0gICAgbmVlZGVkU2l6ZSArPSBrZWVwOwotI2VuZGlm
ICAvKiBkZWZpbmVkIFhNTF9DT05URVhUX0JZVEVTICovCi0gICAgaWYgKG5lZWRlZFNpemUgIDw9
IGJ1ZmZlckxpbSAtIGJ1ZmZlcikgewotI2lmZGVmIFhNTF9DT05URVhUX0JZVEVTCi0gICAgICBp
ZiAoa2VlcCA8IGJ1ZmZlclB0ciAtIGJ1ZmZlcikgewotICAgICAgICBpbnQgb2Zmc2V0ID0gKGlu
dCkoYnVmZmVyUHRyIC0gYnVmZmVyKSAtIGtlZXA7Ci0gICAgICAgIG1lbW1vdmUoYnVmZmVyLCAm
YnVmZmVyW29mZnNldF0sIGJ1ZmZlckVuZCAtIGJ1ZmZlclB0ciArIGtlZXApOwotICAgICAgICBi
dWZmZXJFbmQgLT0gb2Zmc2V0OwotICAgICAgICBidWZmZXJQdHIgLT0gb2Zmc2V0OwotICAgICAg
fQotI2Vsc2UKLSAgICAgIG1lbW1vdmUoYnVmZmVyLCBidWZmZXJQdHIsIGJ1ZmZlckVuZCAtIGJ1
ZmZlclB0cik7Ci0gICAgICBidWZmZXJFbmQgPSBidWZmZXIgKyAoYnVmZmVyRW5kIC0gYnVmZmVy
UHRyKTsKLSAgICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlcjsKLSNlbmRpZiAgLyogbm90IGRlZmluZWQg
WE1MX0NPTlRFWFRfQllURVMgKi8KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBjaGFyICpuZXdC
dWY7Ci0gICAgICBpbnQgYnVmZmVyU2l6ZSA9IChpbnQpKGJ1ZmZlckxpbSAtIGJ1ZmZlclB0cik7
Ci0gICAgICBpZiAoYnVmZmVyU2l6ZSA9PSAwKQotICAgICAgICBidWZmZXJTaXplID0gSU5JVF9C
VUZGRVJfU0laRTsKLSAgICAgIGRvIHsKLSAgICAgICAgYnVmZmVyU2l6ZSAqPSAyOwotICAgICAg
fSB3aGlsZSAoYnVmZmVyU2l6ZSA8IG5lZWRlZFNpemUpOwotICAgICAgbmV3QnVmID0gKGNoYXIg
KilNQUxMT0MoYnVmZmVyU2l6ZSk7Ci0gICAgICBpZiAobmV3QnVmID09IDApIHsKLSAgICAgICAg
ZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgICB9Ci0gICAgICBidWZmZXJMaW0gPSBuZXdCdWYgKyBidWZmZXJTaXplOwotI2lmZGVmIFhN
TF9DT05URVhUX0JZVEVTCi0gICAgICBpZiAoYnVmZmVyUHRyKSB7Ci0gICAgICAgIGludCBrZWVw
ID0gKGludCkoYnVmZmVyUHRyIC0gYnVmZmVyKTsKLSAgICAgICAgaWYgKGtlZXAgPiBYTUxfQ09O
VEVYVF9CWVRFUykKLSAgICAgICAgICBrZWVwID0gWE1MX0NPTlRFWFRfQllURVM7Ci0gICAgICAg
IG1lbWNweShuZXdCdWYsICZidWZmZXJQdHJbLWtlZXBdLCBidWZmZXJFbmQgLSBidWZmZXJQdHIg
KyBrZWVwKTsKLSAgICAgICAgRlJFRShidWZmZXIpOwotICAgICAgICBidWZmZXIgPSBuZXdCdWY7
Ci0gICAgICAgIGJ1ZmZlckVuZCA9IGJ1ZmZlciArIChidWZmZXJFbmQgLSBidWZmZXJQdHIpICsg
a2VlcDsKLSAgICAgICAgYnVmZmVyUHRyID0gYnVmZmVyICsga2VlcDsKLSAgICAgIH0KLSAgICAg
IGVsc2UgewotICAgICAgICBidWZmZXJFbmQgPSBuZXdCdWYgKyAoYnVmZmVyRW5kIC0gYnVmZmVy
UHRyKTsKLSAgICAgICAgYnVmZmVyUHRyID0gYnVmZmVyID0gbmV3QnVmOwotICAgICAgfQotI2Vs
c2UKLSAgICAgIGlmIChidWZmZXJQdHIpIHsKLSAgICAgICAgbWVtY3B5KG5ld0J1ZiwgYnVmZmVy
UHRyLCBidWZmZXJFbmQgLSBidWZmZXJQdHIpOwotICAgICAgICBGUkVFKGJ1ZmZlcik7Ci0gICAg
ICB9Ci0gICAgICBidWZmZXJFbmQgPSBuZXdCdWYgKyAoYnVmZmVyRW5kIC0gYnVmZmVyUHRyKTsK
LSAgICAgIGJ1ZmZlclB0ciA9IGJ1ZmZlciA9IG5ld0J1ZjsKLSNlbmRpZiAgLyogbm90IGRlZmlu
ZWQgWE1MX0NPTlRFWFRfQllURVMgKi8KLSAgICB9Ci0gICAgZXZlbnRQdHIgPSBldmVudEVuZFB0
ciA9IE5VTEw7Ci0gICAgcG9zaXRpb25QdHIgPSBOVUxMOwotICB9Ci0gIHJldHVybiBidWZmZXJF
bmQ7Ci19Ci0KLWVudW0gWE1MX1N0YXR1cyBYTUxDQUxMCi1YTUxfU3RvcFBhcnNlcihYTUxfUGFy
c2VyIHBhcnNlciwgWE1MX0Jvb2wgcmVzdW1hYmxlKQotewotICBzd2l0Y2ggKHBzX3BhcnNpbmcp
IHsKLSAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgIGlmIChyZXN1bWFibGUpIHsKLSAgICAgIGVy
cm9yQ29kZSA9IFhNTF9FUlJPUl9TVVNQRU5ERUQ7Ci0gICAgICByZXR1cm4gWE1MX1NUQVRVU19F
UlJPUjsKLSAgICB9Ci0gICAgcHNfcGFyc2luZyA9IFhNTF9GSU5JU0hFRDsKLSAgICBicmVhazsK
LSAgY2FzZSBYTUxfRklOSVNIRUQ6Ci0gICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX0ZJTklTSEVE
OwotICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICBkZWZhdWx0OgotICAgIGlmIChyZXN1
bWFibGUpIHsKLSNpZmRlZiBYTUxfRFRECi0gICAgICBpZiAoaXNQYXJhbUVudGl0eSkgewotICAg
ICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVORF9QRTsKLSAgICAgICAgcmV0dXJuIFhN
TF9TVEFUVVNfRVJST1I7Ci0gICAgICB9Ci0jZW5kaWYKLSAgICAgIHBzX3BhcnNpbmcgPSBYTUxf
U1VTUEVOREVEOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBwc19wYXJzaW5nID0gWE1MX0ZJTklT
SEVEOwotICB9Ci0gIHJldHVybiBYTUxfU1RBVFVTX09LOwotfQotCi1lbnVtIFhNTF9TdGF0dXMg
WE1MQ0FMTAotWE1MX1Jlc3VtZVBhcnNlcihYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgZW51bSBY
TUxfU3RhdHVzIHJlc3VsdCA9IFhNTF9TVEFUVVNfT0s7Ci0KLSAgaWYgKHBzX3BhcnNpbmcgIT0g
WE1MX1NVU1BFTkRFRCkgewotICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT1RfU1VTUEVOREVE
OwotICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOwotICB9Ci0gIHBzX3BhcnNpbmcgPSBYTUxf
UEFSU0lORzsKLQotICBlcnJvckNvZGUgPSBwcm9jZXNzb3IocGFyc2VyLCBidWZmZXJQdHIsIHBh
cnNlRW5kUHRyLCAmYnVmZmVyUHRyKTsKLQotICBpZiAoZXJyb3JDb2RlICE9IFhNTF9FUlJPUl9O
T05FKSB7Ci0gICAgZXZlbnRFbmRQdHIgPSBldmVudFB0cjsKLSAgICBwcm9jZXNzb3IgPSBlcnJv
clByb2Nlc3NvcjsKLSAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKLSAgfQotICBlbHNlIHsK
LSAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAg
ICByZXN1bHQgPSBYTUxfU1RBVFVTX1NVU1BFTkRFRDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
WE1MX0lOSVRJQUxJWkVEOgotICAgIGNhc2UgWE1MX1BBUlNJTkc6Ci0gICAgICBpZiAocHNfZmlu
YWxCdWZmZXIpIHsKLSAgICAgICAgcHNfcGFyc2luZyA9IFhNTF9GSU5JU0hFRDsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KLSAgICBkZWZhdWx0OiA7Ci0gICAgfQotICB9Ci0KLSAg
WG1sVXBkYXRlUG9zaXRpb24oZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBidWZmZXJQdHIsICZwb3Np
dGlvbik7Ci0gIHBvc2l0aW9uUHRyID0gYnVmZmVyUHRyOwotICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIFhNTENBTEwKLVhNTF9HZXRQYXJzaW5nU3RhdHVzKFhNTF9QYXJzZXIgcGFyc2VyLCBY
TUxfUGFyc2luZ1N0YXR1cyAqc3RhdHVzKQotewotICBhc3NlcnQoc3RhdHVzICE9IE5VTEwpOwot
ICAqc3RhdHVzID0gcGFyc2VyLT5tX3BhcnNpbmdTdGF0dXM7Ci19Ci0KLWVudW0gWE1MX0Vycm9y
IFhNTENBTEwKLVhNTF9HZXRFcnJvckNvZGUoWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIHJldHVy
biBlcnJvckNvZGU7Ci19Ci0KLVhNTF9JbmRleCBYTUxDQUxMCi1YTUxfR2V0Q3VycmVudEJ5dGVJ
bmRleChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgaWYgKGV2ZW50UHRyKQotICAgIHJldHVybiBw
YXJzZUVuZEJ5dGVJbmRleCAtIChwYXJzZUVuZFB0ciAtIGV2ZW50UHRyKTsKLSAgcmV0dXJuIC0x
OwotfQotCi1pbnQgWE1MQ0FMTAotWE1MX0dldEN1cnJlbnRCeXRlQ291bnQoWE1MX1BhcnNlciBw
YXJzZXIpCi17Ci0gIGlmIChldmVudEVuZFB0ciAmJiBldmVudFB0cikKLSAgICByZXR1cm4gKGlu
dCkoZXZlbnRFbmRQdHIgLSBldmVudFB0cik7Ci0gIHJldHVybiAwOwotfQotCi1jb25zdCBjaGFy
ICogWE1MQ0FMTAotWE1MX0dldElucHV0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwgaW50ICpv
ZmZzZXQsIGludCAqc2l6ZSkKLXsKLSNpZmRlZiBYTUxfQ09OVEVYVF9CWVRFUwotICBpZiAoZXZl
bnRQdHIgJiYgYnVmZmVyKSB7Ci0gICAgKm9mZnNldCA9IChpbnQpKGV2ZW50UHRyIC0gYnVmZmVy
KTsKLSAgICAqc2l6ZSAgID0gKGludCkoYnVmZmVyRW5kIC0gYnVmZmVyKTsKLSAgICByZXR1cm4g
YnVmZmVyOwotICB9Ci0jZW5kaWYgLyogZGVmaW5lZCBYTUxfQ09OVEVYVF9CWVRFUyAqLwotICBy
ZXR1cm4gKGNoYXIgKikgMDsKLX0KLQotWE1MX1NpemUgWE1MQ0FMTAotWE1MX0dldEN1cnJlbnRM
aW5lTnVtYmVyKFhNTF9QYXJzZXIgcGFyc2VyKQotewotICBpZiAoZXZlbnRQdHIgJiYgZXZlbnRQ
dHIgPj0gcG9zaXRpb25QdHIpIHsKLSAgICBYbWxVcGRhdGVQb3NpdGlvbihlbmNvZGluZywgcG9z
aXRpb25QdHIsIGV2ZW50UHRyLCAmcG9zaXRpb24pOwotICAgIHBvc2l0aW9uUHRyID0gZXZlbnRQ
dHI7Ci0gIH0KLSAgcmV0dXJuIHBvc2l0aW9uLmxpbmVOdW1iZXIgKyAxOwotfQotCi1YTUxfU2l6
ZSBYTUxDQUxMCi1YTUxfR2V0Q3VycmVudENvbHVtbk51bWJlcihYTUxfUGFyc2VyIHBhcnNlcikK
LXsKLSAgaWYgKGV2ZW50UHRyICYmIGV2ZW50UHRyID49IHBvc2l0aW9uUHRyKSB7Ci0gICAgWG1s
VXBkYXRlUG9zaXRpb24oZW5jb2RpbmcsIHBvc2l0aW9uUHRyLCBldmVudFB0ciwgJnBvc2l0aW9u
KTsKLSAgICBwb3NpdGlvblB0ciA9IGV2ZW50UHRyOwotICB9Ci0gIHJldHVybiBwb3NpdGlvbi5j
b2x1bW5OdW1iZXI7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MX0ZyZWVDb250ZW50TW9kZWwoWE1M
X1BhcnNlciBwYXJzZXIsIFhNTF9Db250ZW50ICptb2RlbCkKLXsKLSAgRlJFRShtb2RlbCk7Ci19
Ci0KLXZvaWQgKiBYTUxDQUxMCi1YTUxfTWVtTWFsbG9jKFhNTF9QYXJzZXIgcGFyc2VyLCBzaXpl
X3Qgc2l6ZSkKLXsKLSAgcmV0dXJuIE1BTExPQyhzaXplKTsKLX0KLQotdm9pZCAqIFhNTENBTEwK
LVhNTF9NZW1SZWFsbG9jKFhNTF9QYXJzZXIgcGFyc2VyLCB2b2lkICpwdHIsIHNpemVfdCBzaXpl
KQotewotICByZXR1cm4gUkVBTExPQyhwdHIsIHNpemUpOwotfQotCi12b2lkIFhNTENBTEwKLVhN
TF9NZW1GcmVlKFhNTF9QYXJzZXIgcGFyc2VyLCB2b2lkICpwdHIpCi17Ci0gIEZSRUUocHRyKTsK
LX0KLQotdm9pZCBYTUxDQUxMCi1YTUxfRGVmYXVsdEN1cnJlbnQoWE1MX1BhcnNlciBwYXJzZXIp
Ci17Ci0gIGlmIChkZWZhdWx0SGFuZGxlcikgewotICAgIGlmIChvcGVuSW50ZXJuYWxFbnRpdGll
cykKLSAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLAotICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICBvcGVuSW50ZXJuYWxFbnRpdGllcy0+
aW50ZXJuYWxFdmVudFB0ciwKLSAgICAgICAgICAgICAgICAgICAgb3BlbkludGVybmFsRW50aXRp
ZXMtPmludGVybmFsRXZlbnRFbmRQdHIpOwotICAgIGVsc2UKLSAgICAgIHJlcG9ydERlZmF1bHQo
cGFyc2VyLCBlbmNvZGluZywgZXZlbnRQdHIsIGV2ZW50RW5kUHRyKTsKLSAgfQotfQotCi1jb25z
dCBYTUxfTENoYXIgKiBYTUxDQUxMCi1YTUxfRXJyb3JTdHJpbmcoZW51bSBYTUxfRXJyb3IgY29k
ZSkKLXsKLSAgc3RhdGljIGNvbnN0IFhNTF9MQ2hhciogY29uc3QgbWVzc2FnZVtdID0gewotICAg
IDAsCi0gICAgWE1MX0woIm91dCBvZiBtZW1vcnkiKSwKLSAgICBYTUxfTCgic3ludGF4IGVycm9y
IiksCi0gICAgWE1MX0woIm5vIGVsZW1lbnQgZm91bmQiKSwKLSAgICBYTUxfTCgibm90IHdlbGwt
Zm9ybWVkIChpbnZhbGlkIHRva2VuKSIpLAotICAgIFhNTF9MKCJ1bmNsb3NlZCB0b2tlbiIpLAot
ICAgIFhNTF9MKCJwYXJ0aWFsIGNoYXJhY3RlciIpLAotICAgIFhNTF9MKCJtaXNtYXRjaGVkIHRh
ZyIpLAotICAgIFhNTF9MKCJkdXBsaWNhdGUgYXR0cmlidXRlIiksCi0gICAgWE1MX0woImp1bmsg
YWZ0ZXIgZG9jdW1lbnQgZWxlbWVudCIpLAotICAgIFhNTF9MKCJpbGxlZ2FsIHBhcmFtZXRlciBl
bnRpdHkgcmVmZXJlbmNlIiksCi0gICAgWE1MX0woInVuZGVmaW5lZCBlbnRpdHkiKSwKLSAgICBY
TUxfTCgicmVjdXJzaXZlIGVudGl0eSByZWZlcmVuY2UiKSwKLSAgICBYTUxfTCgiYXN5bmNocm9u
b3VzIGVudGl0eSIpLAotICAgIFhNTF9MKCJyZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIg
bnVtYmVyIiksCi0gICAgWE1MX0woInJlZmVyZW5jZSB0byBiaW5hcnkgZW50aXR5IiksCi0gICAg
WE1MX0woInJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlIiksCi0gICAg
WE1MX0woIlhNTCBvciB0ZXh0IGRlY2xhcmF0aW9uIG5vdCBhdCBzdGFydCBvZiBlbnRpdHkiKSwK
LSAgICBYTUxfTCgidW5rbm93biBlbmNvZGluZyIpLAotICAgIFhNTF9MKCJlbmNvZGluZyBzcGVj
aWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdCIpLAotICAgIFhNTF9MKCJ1bmNs
b3NlZCBDREFUQSBzZWN0aW9uIiksCi0gICAgWE1MX0woImVycm9yIGluIHByb2Nlc3NpbmcgZXh0
ZXJuYWwgZW50aXR5IHJlZmVyZW5jZSIpLAotICAgIFhNTF9MKCJkb2N1bWVudCBpcyBub3Qgc3Rh
bmRhbG9uZSIpLAotICAgIFhNTF9MKCJ1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBz
ZW5kIGEgYnVnIHJlcG9ydCIpLAotICAgIFhNTF9MKCJlbnRpdHkgZGVjbGFyZWQgaW4gcGFyYW1l
dGVyIGVudGl0eSIpLAotICAgIFhNTF9MKCJyZXF1ZXN0ZWQgZmVhdHVyZSByZXF1aXJlcyBYTUxf
RFREIHN1cHBvcnQgaW4gRXhwYXQiKSwKLSAgICBYTUxfTCgiY2Fubm90IGNoYW5nZSBzZXR0aW5n
IG9uY2UgcGFyc2luZyBoYXMgYmVndW4iKSwKLSAgICBYTUxfTCgidW5ib3VuZCBwcmVmaXgiKSwK
LSAgICBYTUxfTCgibXVzdCBub3QgdW5kZWNsYXJlIHByZWZpeCIpLAotICAgIFhNTF9MKCJpbmNv
bXBsZXRlIG1hcmt1cCBpbiBwYXJhbWV0ZXIgZW50aXR5IiksCi0gICAgWE1MX0woIlhNTCBkZWNs
YXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQiKSwKLSAgICBYTUxfTCgidGV4dCBkZWNsYXJhdGlvbiBu
b3Qgd2VsbC1mb3JtZWQiKSwKLSAgICBYTUxfTCgiaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVi
bGljIGlkIiksCi0gICAgWE1MX0woInBhcnNlciBzdXNwZW5kZWQiKSwKLSAgICBYTUxfTCgicGFy
c2VyIG5vdCBzdXNwZW5kZWQiKSwKLSAgICBYTUxfTCgicGFyc2luZyBhYm9ydGVkIiksCi0gICAg
WE1MX0woInBhcnNpbmcgZmluaXNoZWQiKSwKLSAgICBYTUxfTCgiY2Fubm90IHN1c3BlbmQgaW4g
ZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eSIpLAotICAgIFhNTF9MKCJyZXNlcnZlZCBwcmVmaXgg
KHhtbCkgbXVzdCBub3QgYmUgdW5kZWNsYXJlZCBvciBib3VuZCB0byBhbm90aGVyIG5hbWVzcGFj
ZSBuYW1lIiksCi0gICAgWE1MX0woInJlc2VydmVkIHByZWZpeCAoeG1sbnMpIG11c3Qgbm90IGJl
IGRlY2xhcmVkIG9yIHVuZGVjbGFyZWQiKSwKLSAgICBYTUxfTCgicHJlZml4IG11c3Qgbm90IGJl
IGJvdW5kIHRvIG9uZSBvZiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlIG5hbWVzIikKLSAgfTsKLSAg
aWYgKGNvZGUgPiAwICYmIGNvZGUgPCBzaXplb2YobWVzc2FnZSkvc2l6ZW9mKG1lc3NhZ2VbMF0p
KQotICAgIHJldHVybiBtZXNzYWdlW2NvZGVdOwotICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3Qg
WE1MX0xDaGFyICogWE1MQ0FMTAotWE1MX0V4cGF0VmVyc2lvbih2b2lkKSB7Ci0KLSAgLyogVjEg
aXMgdXNlZCB0byBzdHJpbmctaXplIHRoZSB2ZXJzaW9uIG51bWJlci4gSG93ZXZlciwgaXQgd291
bGQKLSAgICAgc3RyaW5nLWl6ZSB0aGUgYWN0dWFsIHZlcnNpb24gbWFjcm8gKm5hbWVzKiB1bmxl
c3Mgd2UgZ2V0IHRoZW0KLSAgICAgc3Vic3RpdHV0ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBW
MS4gQ1BQIGlzIGRlZmluZWQgdG8gZXhwYW5kCi0gICAgIGEgbWFjcm8sIHRoZW4gcmVzY2FuIGZv
ciBtb3JlIGV4cGFuc2lvbnMuIFRodXMsIHdlIHVzZSBWMiB0byBleHBhbmQKLSAgICAgdGhlIHZl
cnNpb24gbWFjcm9zLCB0aGVuIENQUCB3aWxsIGV4cGFuZCB0aGUgcmVzdWx0aW5nIFYxKCkgbWFj
cm8KLSAgICAgd2l0aCB0aGUgY29ycmVjdCBudW1lcmFscy4gKi8KLSAgLyogIyMjIEknbSBhc3N1
bWluZyBjcHAgaXMgcG9ydGFibGUgaW4gdGhpcyByZXNwZWN0Li4uICovCi0KLSNkZWZpbmUgVjEo
YSxiLGMpIFhNTF9MKCNhKVhNTF9MKCIuIilYTUxfTCgjYilYTUxfTCgiLiIpWE1MX0woI2MpCi0j
ZGVmaW5lIFYyKGEsYixjKSBYTUxfTCgiZXhwYXRfIilWMShhLGIsYykKLQotICByZXR1cm4gVjIo
WE1MX01BSk9SX1ZFUlNJT04sIFhNTF9NSU5PUl9WRVJTSU9OLCBYTUxfTUlDUk9fVkVSU0lPTik7
Ci0KLSN1bmRlZiBWMQotI3VuZGVmIFYyCi19Ci0KLVhNTF9FeHBhdF9WZXJzaW9uIFhNTENBTEwK
LVhNTF9FeHBhdFZlcnNpb25JbmZvKHZvaWQpCi17Ci0gIFhNTF9FeHBhdF9WZXJzaW9uIHZlcnNp
b247Ci0KLSAgdmVyc2lvbi5tYWpvciA9IFhNTF9NQUpPUl9WRVJTSU9OOwotICB2ZXJzaW9uLm1p
bm9yID0gWE1MX01JTk9SX1ZFUlNJT047Ci0gIHZlcnNpb24ubWljcm8gPSBYTUxfTUlDUk9fVkVS
U0lPTjsKLQotICByZXR1cm4gdmVyc2lvbjsKLX0KLQotY29uc3QgWE1MX0ZlYXR1cmUgKiBYTUxD
QUxMCi1YTUxfR2V0RmVhdHVyZUxpc3Qodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IFhNTF9GZWF0
dXJlIGZlYXR1cmVzW10gPSB7Ci0gICAge1hNTF9GRUFUVVJFX1NJWkVPRl9YTUxfQ0hBUiwgIFhN
TF9MKCJzaXplb2YoWE1MX0NoYXIpIiksCi0gICAgIHNpemVvZihYTUxfQ2hhcil9LAotICAgIHtY
TUxfRkVBVFVSRV9TSVpFT0ZfWE1MX0xDSEFSLCBYTUxfTCgic2l6ZW9mKFhNTF9MQ2hhcikiKSwK
LSAgICAgc2l6ZW9mKFhNTF9MQ2hhcil9LAotI2lmZGVmIFhNTF9VTklDT0RFCi0gICAge1hNTF9G
RUFUVVJFX1VOSUNPREUsICAgICAgICAgIFhNTF9MKCJYTUxfVU5JQ09ERSIpLCAwfSwKLSNlbmRp
ZgotI2lmZGVmIFhNTF9VTklDT0RFX1dDSEFSX1QKLSAgICB7WE1MX0ZFQVRVUkVfVU5JQ09ERV9X
Q0hBUl9ULCAgWE1MX0woIlhNTF9VTklDT0RFX1dDSEFSX1QiKSwgMH0sCi0jZW5kaWYKLSNpZmRl
ZiBYTUxfRFRECi0gICAge1hNTF9GRUFUVVJFX0RURCwgICAgICAgICAgICAgIFhNTF9MKCJYTUxf
RFREIiksIDB9LAotI2VuZGlmCi0jaWZkZWYgWE1MX0NPTlRFWFRfQllURVMKLSAgICB7WE1MX0ZF
QVRVUkVfQ09OVEVYVF9CWVRFUywgICAgWE1MX0woIlhNTF9DT05URVhUX0JZVEVTIiksCi0gICAg
IFhNTF9DT05URVhUX0JZVEVTfSwKLSNlbmRpZgotI2lmZGVmIFhNTF9NSU5fU0laRQotICAgIHtY
TUxfRkVBVFVSRV9NSU5fU0laRSwgICAgICAgICBYTUxfTCgiWE1MX01JTl9TSVpFIiksIDB9LAot
I2VuZGlmCi0jaWZkZWYgWE1MX05TCi0gICAge1hNTF9GRUFUVVJFX05TLCAgICAgICAgICAgICAg
IFhNTF9MKCJYTUxfTlMiKSwgMH0sCi0jZW5kaWYKLSNpZmRlZiBYTUxfTEFSR0VfU0laRQotICAg
IHtYTUxfRkVBVFVSRV9MQVJHRV9TSVpFLCAgICAgICBYTUxfTCgiWE1MX0xBUkdFX1NJWkUiKSwg
MH0sCi0jZW5kaWYKLSNpZmRlZiBYTUxfQVRUUl9JTkZPCi0gICAge1hNTF9GRUFUVVJFX0FUVFJf
SU5GTywgICAgICAgIFhNTF9MKCJYTUxfQVRUUl9JTkZPIiksIDB9LAotI2VuZGlmCi0gICAge1hN
TF9GRUFUVVJFX0VORCwgICAgICAgICAgICAgIE5VTEwsIDB9Ci0gIH07Ci0KLSAgcmV0dXJuIGZl
YXR1cmVzOwotfQotCi0vKiBJbml0aWFsbHkgdGFnLT5yYXdOYW1lIGFsd2F5cyBwb2ludHMgaW50
byB0aGUgcGFyc2UgYnVmZmVyOwotICAgZm9yIHRob3NlIFRBRyBpbnN0YW5jZXMgb3BlbmVkIHdo
aWxlIHRoZSBjdXJyZW50IHBhcnNlIGJ1ZmZlciB3YXMKLSAgIHByb2Nlc3NlZCwgYW5kIG5vdCB5
ZXQgY2xvc2VkLCB3ZSBuZWVkIHRvIHN0b3JlIHRhZy0+cmF3TmFtZSBpbiBhIG1vcmUKLSAgIHBl
cm1hbmVudCBsb2NhdGlvbiwgc2luY2UgdGhlIHBhcnNlIGJ1ZmZlciBpcyBhYm91dCB0byBiZSBk
aXNjYXJkZWQuCi0qLwotc3RhdGljIFhNTF9Cb29sCi1zdG9yZVJhd05hbWVzKFhNTF9QYXJzZXIg
cGFyc2VyKQotewotICBUQUcgKnRhZyA9IHRhZ1N0YWNrOwotICB3aGlsZSAodGFnKSB7Ci0gICAg
aW50IGJ1ZlNpemU7Ci0gICAgaW50IG5hbWVMZW4gPSBzaXplb2YoWE1MX0NoYXIpICogKHRhZy0+
bmFtZS5zdHJMZW4gKyAxKTsKLSAgICBjaGFyICpyYXdOYW1lQnVmID0gdGFnLT5idWYgKyBuYW1l
TGVuOwotICAgIC8qIFN0b3AgaWYgYWxyZWFkeSBzdG9yZWQuICBTaW5jZSB0YWdTdGFjayBpcyBh
IHN0YWNrLCB3ZSBjYW4gc3RvcAotICAgICAgIGF0IHRoZSBmaXJzdCBlbnRyeSB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gY29waWVkOyBldmVyeXRoaW5nCi0gICAgICAgYmVsb3cgaXQgaW4gdGhlIHN0
YWNrIGlzIGFscmVhZHkgYmVlbiBhY2NvdW50ZWQgZm9yIGluIGEKLSAgICAgICBwcmV2aW91cyBj
YWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAgKi8KLSAgICBpZiAodGFnLT5yYXdOYW1lID09IHJh
d05hbWVCdWYpCi0gICAgICBicmVhazsKLSAgICAvKiBGb3IgcmUtdXNlIHB1cnBvc2VzIHdlIG5l
ZWQgdG8gZW5zdXJlIHRoYXQgdGhlCi0gICAgICAgc2l6ZSBvZiB0YWctPmJ1ZiBpcyBhIG11bHRp
cGxlIG9mIHNpemVvZihYTUxfQ2hhcikuCi0gICAgKi8KLSAgICBidWZTaXplID0gbmFtZUxlbiAr
IFJPVU5EX1VQKHRhZy0+cmF3TmFtZUxlbmd0aCwgc2l6ZW9mKFhNTF9DaGFyKSk7Ci0gICAgaWYg
KGJ1ZlNpemUgPiB0YWctPmJ1ZkVuZCAtIHRhZy0+YnVmKSB7Ci0gICAgICBjaGFyICp0ZW1wID0g
KGNoYXIgKilSRUFMTE9DKHRhZy0+YnVmLCBidWZTaXplKTsKLSAgICAgIGlmICh0ZW1wID09IE5V
TEwpCi0gICAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICAvKiBpZiB0YWctPm5hbWUuc3Ry
IHBvaW50cyB0byB0YWctPmJ1ZiAob25seSB3aGVuIG5hbWVzcGFjZQotICAgICAgICAgcHJvY2Vz
c2luZyBpcyBvZmYpIHRoZW4gd2UgaGF2ZSB0byB1cGRhdGUgaXQKLSAgICAgICovCi0gICAgICBp
ZiAodGFnLT5uYW1lLnN0ciA9PSAoWE1MX0NoYXIgKil0YWctPmJ1ZikKLSAgICAgICAgdGFnLT5u
YW1lLnN0ciA9IChYTUxfQ2hhciAqKXRlbXA7Ci0gICAgICAvKiBpZiB0YWctPm5hbWUubG9jYWxQ
YXJ0IGlzIHNldCAod2hlbiBuYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyBvbikKLSAgICAgICAgIHRo
ZW4gdXBkYXRlIGl0IGFzIHdlbGwsIHNpbmNlIGl0IHdpbGwgYWx3YXlzIHBvaW50IGludG8gdGFn
LT5idWYKLSAgICAgICovCi0gICAgICBpZiAodGFnLT5uYW1lLmxvY2FsUGFydCkKLSAgICAgICAg
dGFnLT5uYW1lLmxvY2FsUGFydCA9IChYTUxfQ2hhciAqKXRlbXAgKyAodGFnLT5uYW1lLmxvY2Fs
UGFydCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChYTUxfQ2hhciAqKXRhZy0+YnVmKTsKLSAgICAgIHRhZy0+YnVmID0gdGVtcDsKLSAgICAgIHRh
Zy0+YnVmRW5kID0gdGVtcCArIGJ1ZlNpemU7Ci0gICAgICByYXdOYW1lQnVmID0gdGVtcCArIG5h
bWVMZW47Ci0gICAgfQotICAgIG1lbWNweShyYXdOYW1lQnVmLCB0YWctPnJhd05hbWUsIHRhZy0+
cmF3TmFtZUxlbmd0aCk7Ci0gICAgdGFnLT5yYXdOYW1lID0gcmF3TmFtZUJ1ZjsKLSAgICB0YWcg
PSB0YWctPnBhcmVudDsKLSAgfQotICByZXR1cm4gWE1MX1RSVUU7Ci19Ci0KLXN0YXRpYyBlbnVt
IFhNTF9FcnJvciBQVFJDQUxMCi1jb250ZW50UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAot
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQotewot
ICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBkb0NvbnRlbnQocGFyc2VyLCAwLCBlbmNvZGluZywg
c3RhcnQsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFB0ciwg
KFhNTF9Cb29sKSFwc19maW5hbEJ1ZmZlcik7Ci0gIGlmIChyZXN1bHQgPT0gWE1MX0VSUk9SX05P
TkUpIHsKLSAgICBpZiAoIXN0b3JlUmF3TmFtZXMocGFyc2VyKSkKLSAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9fTUVNT1JZOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBlbnVt
IFhNTF9FcnJvciBQVFJDQUxMCi1leHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IoWE1MX1BhcnNl
ciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmRQdHIpCi17Ci0gIGVudW0gWE1MX0Vy
cm9yIHJlc3VsdCA9IGluaXRpYWxpemVFbmNvZGluZyhwYXJzZXIpOwotICBpZiAocmVzdWx0ICE9
IFhNTF9FUlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIHByb2Nlc3NvciA9IGV4dGVy
bmFsRW50aXR5SW5pdFByb2Nlc3NvcjI7Ci0gIHJldHVybiBleHRlcm5hbEVudGl0eUluaXRQcm9j
ZXNzb3IyKHBhcnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsKLX0KLQotc3RhdGljIGVudW0gWE1M
X0Vycm9yIFBUUkNBTEwKLWV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjIoWE1MX1BhcnNlciBw
YXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmRQdHIpCi17Ci0gIGNvbnN0IGNoYXIg
Km5leHQgPSBzdGFydDsgLyogWG1sQ29udGVudFRvayBkb2Vzbid0IGFsd2F5cyBzZXQgdGhlIGxh
c3QgYXJnICovCi0gIGludCB0b2sgPSBYbWxDb250ZW50VG9rKGVuY29kaW5nLCBzdGFydCwgZW5k
LCAmbmV4dCk7Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19CT006Ci0gICAgLyog
SWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgdGhpcyB3b3VsZCBjYXVzZSB0aGUg
bmV4dCBzdGFnZSwKLSAgICAgICBpLmUuIGV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjMsIHRv
IHBhc3MgY29udHJvbCBkaXJlY3RseSB0bwotICAgICAgIGRvQ29udGVudCAoYnkgZGV0ZWN0aW5n
IFhNTF9UT0tfTk9ORSkgd2l0aG91dCBwcm9jZXNzaW5nIGFueSB4bWwgdGV4dAotICAgICAgIGRl
Y2xhcmF0aW9uIC0gY2F1c2luZyB0aGUgZXJyb3IgWE1MX0VSUk9SX01JU1BMQUNFRF9YTUxfUEkg
aW4gZG9Db250ZW50LgotICAgICovCi0gICAgaWYgKG5leHQgPT0gZW5kICYmICFwc19maW5hbEJ1
ZmZlcikgewotICAgICAgKmVuZFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7Ci0gICAgfQotICAgIHN0YXJ0ID0gbmV4dDsKLSAgICBicmVhazsKLSAgY2FzZSBYTUxfVE9L
X1BBUlRJQUw6Ci0gICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgewotICAgICAgKmVuZFB0ciA9IHN0
YXJ0OwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0KLSAgICBldmVudFB0ciA9
IHN0YXJ0OwotICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47Ci0gIGNhc2UgWE1M
X1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgewotICAgICAgKmVu
ZFB0ciA9IHN0YXJ0OwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0KLSAgICBl
dmVudFB0ciA9IHN0YXJ0OwotICAgIHJldHVybiBYTUxfRVJST1JfUEFSVElBTF9DSEFSOwotICB9
Ci0gIHByb2Nlc3NvciA9IGV4dGVybmFsRW50aXR5SW5pdFByb2Nlc3NvcjM7Ci0gIHJldHVybiBl
eHRlcm5hbEVudGl0eUluaXRQcm9jZXNzb3IzKHBhcnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsK
LX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWV4dGVybmFsRW50aXR5SW5pdFBy
b2Nlc3NvcjMoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmRQ
dHIpCi17Ci0gIGludCB0b2s7Ci0gIGNvbnN0IGNoYXIgKm5leHQgPSBzdGFydDsgLyogWG1sQ29u
dGVudFRvayBkb2Vzbid0IGFsd2F5cyBzZXQgdGhlIGxhc3QgYXJnICovCi0gIGV2ZW50UHRyID0g
c3RhcnQ7Ci0gIHRvayA9IFhtbENvbnRlbnRUb2soZW5jb2RpbmcsIHN0YXJ0LCBlbmQsICZuZXh0
KTsKLSAgZXZlbnRFbmRQdHIgPSBuZXh0OwotCi0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1M
X1RPS19YTUxfREVDTDoKLSAgICB7Ci0gICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7Ci0gICAg
ICByZXN1bHQgPSBwcm9jZXNzWG1sRGVjbChwYXJzZXIsIDEsIHN0YXJ0LCBuZXh0KTsKLSAgICAg
IGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgICAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKLSAg
ICAgICAgKmVuZFB0ciA9IG5leHQ7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAg
ICAgIGNhc2UgWE1MX0ZJTklTSEVEOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0FCT1JURUQ7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzdGFydCA9IG5leHQ7Ci0gICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKLSAgICBpZiAoIXBzX2ZpbmFsQnVm
ZmVyKSB7Ci0gICAgICAqZW5kUHRyID0gc3RhcnQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05P
TkU7Ci0gICAgfQotICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47Ci0gIGNhc2Ug
WE1MX1RPS19QQVJUSUFMX0NIQVI6Ci0gICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgewotICAgICAg
KmVuZFB0ciA9IHN0YXJ0OwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0KLSAg
ICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKLSAgfQotICBwcm9jZXNzb3IgPSBleHRl
cm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3I7Ci0gIHRhZ0xldmVsID0gMTsKLSAgcmV0dXJuIGV4
dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvcihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVuZFB0cik7
Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1leHRlcm5hbEVudGl0eUNvbnRl
bnRQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiplbmRQdHIpCi17Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGRvQ29udGVudChwYXJz
ZXIsIDEsIGVuY29kaW5nLCBzdGFydCwgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kUHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKLSAgaWYgKHJlc3Vs
dCA9PSBYTUxfRVJST1JfTk9ORSkgewotICAgIGlmICghc3RvcmVSYXdOYW1lcyhwYXJzZXIpKQot
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1kb0NvbnRlbnQoWE1MX1BhcnNlciBwYXJzZXIs
Ci0gICAgICAgICAgaW50IHN0YXJ0VGFnTGV2ZWwsCi0gICAgICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYywKLSAgICAgICAgICBjb25zdCBjaGFyICpzLAotICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKLSAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFB0ciwKLSAgICAgICAgICBYTUxfQm9vbCBo
YXZlTW9yZSkKLXsKLSAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgRFRE
ICogY29uc3QgZHRkID0gX2R0ZDsKLQotICBjb25zdCBjaGFyICoqZXZlbnRQUDsKLSAgY29uc3Qg
Y2hhciAqKmV2ZW50RW5kUFA7Ci0gIGlmIChlbmMgPT0gZW5jb2RpbmcpIHsKLSAgICBldmVudFBQ
ID0gJmV2ZW50UHRyOwotICAgIGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7Ci0gIH0KLSAgZWxz
ZSB7Ci0gICAgZXZlbnRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQ
dHIpOwotICAgIGV2ZW50RW5kUFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2
ZW50RW5kUHRyKTsKLSAgfQotICAqZXZlbnRQUCA9IHM7Ci0KLSAgZm9yICg7OykgewotICAgIGNv
bnN0IGNoYXIgKm5leHQgPSBzOyAvKiBYbWxDb250ZW50VG9rIGRvZXNuJ3QgYWx3YXlzIHNldCB0
aGUgbGFzdCBhcmcgKi8KLSAgICBpbnQgdG9rID0gWG1sQ29udGVudFRvayhlbmMsIHMsIGVuZCwg
Jm5leHQpOwotICAgICpldmVudEVuZFBQID0gbmV4dDsKLSAgICBzd2l0Y2ggKHRvaykgewotICAg
IGNhc2UgWE1MX1RPS19UUkFJTElOR19DUjoKLSAgICAgIGlmIChoYXZlTW9yZSkgewotICAgICAg
ICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAgIH0K
LSAgICAgICpldmVudEVuZFBQID0gZW5kOwotICAgICAgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVy
KSB7Ci0gICAgICAgIFhNTF9DaGFyIGMgPSAweEE7Ci0gICAgICAgIGNoYXJhY3RlckRhdGFIYW5k
bGVyKGhhbmRsZXJBcmcsICZjLCAxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGRlZmF1bHRI
YW5kbGVyKQotICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBlbmQpOwotICAg
ICAgLyogV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbmFsIGJ1ZmZlciwgc2hvdWxkIHdlIGNo
ZWNrIGZvcgotICAgICAgICAgWE1MX1NVU1BFTkRFRCwgWE1MX0ZJTklTSEVEPwotICAgICAgKi8K
LSAgICAgIGlmIChzdGFydFRhZ0xldmVsID09IDApCi0gICAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fRUxFTUVOVFM7Ci0gICAgICBpZiAodGFnTGV2ZWwgIT0gc3RhcnRUYWdMZXZlbCkKLSAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFk7Ci0gICAgICAqbmV4dFB0ciA9IGVuZDsK
LSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICBjYXNlIFhNTF9UT0tfTk9ORToKLSAg
ICAgIGlmIChoYXZlTW9yZSkgewotICAgICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9ORTsKLSAgICAgIH0KLSAgICAgIGlmIChzdGFydFRhZ0xldmVsID4gMCkg
ewotICAgICAgICBpZiAodGFnTGV2ZWwgIT0gc3RhcnRUYWdMZXZlbCkKLSAgICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX0FTWU5DX0VOVElUWTsKLSAgICAgICAgKm5leHRQdHIgPSBzOwotICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX0VMRU1FTlRTOwotICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgKmV2ZW50UFAg
PSBuZXh0OwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICAgIGNhc2Ug
WE1MX1RPS19QQVJUSUFMOgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpuZXh0UHRy
ID0gczsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTjsKLSAgICBjYXNlIFhNTF9UT0tfUEFSVElBTF9D
SEFSOgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9QQVJUSUFMX0NIQVI7Ci0gICAgY2FzZSBYTUxfVE9LX0VOVElUWV9SRUY6Ci0gICAgICB7Ci0g
ICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICAgICAgICBFTlRJVFkgKmVudGl0eTsKLSAg
ICAgICAgWE1MX0NoYXIgY2ggPSAoWE1MX0NoYXIpIFhtbFByZWRlZmluZWRFbnRpdHlOYW1lKGVu
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5j
LT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKLSAgICAgICAgaWYgKGNoKSB7
Ci0gICAgICAgICAgaWYgKGNoYXJhY3RlckRhdGFIYW5kbGVyKQotICAgICAgICAgICAgY2hhcmFj
dGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgJmNoLCAxKTsKLSAgICAgICAgICBlbHNlIGlmIChk
ZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMs
IG5leHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5hbWUgPSBwb29s
U3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmICghbmFtZSkK
LSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgZW50aXR5ID0g
KEVOVElUWSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPmdlbmVyYWxFbnRpdGllcywgbmFtZSwgMCk7
Ci0gICAgICAgIHBvb2xEaXNjYXJkKCZkdGQtPnBvb2wpOwotICAgICAgICAvKiBGaXJzdCwgZGV0
ZXJtaW5lIGlmIGEgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIGRlY2xhcmF0aW9uIGlzIG5lZWRlZDsK
LSAgICAgICAgICAgaWYgeWVzLCBjaGVjayB0aGF0IHRoZSBlbnRpdHkgZXhpc3RzLCBhbmQgdGhh
dCBpdCBpcyBpbnRlcm5hbCwKLSAgICAgICAgICAgb3RoZXJ3aXNlIGNhbGwgdGhlIHNraXBwZWQg
ZW50aXR5IG9yIGRlZmF1bHQgaGFuZGxlci4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKCFkdGQt
Pmhhc1BhcmFtRW50aXR5UmVmcyB8fCBkdGQtPnN0YW5kYWxvbmUpIHsKLSAgICAgICAgICBpZiAo
IWVudGl0eSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWTsK
LSAgICAgICAgICBlbHNlIGlmICghZW50aXR5LT5pc19pbnRlcm5hbCkKLSAgICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfRU5USVRZX0RFQ0xBUkVEX0lOX1BFOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKCFlbnRpdHkpIHsKLSAgICAgICAgICBpZiAoc2tpcHBlZEVudGl0eUhhbmRsZXIp
Ci0gICAgICAgICAgICBza2lwcGVkRW50aXR5SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLCAwKTsK
LSAgICAgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICAgIHJlcG9ydERl
ZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChlbnRpdHktPm9wZW4pCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9S
RUNVUlNJVkVfRU5USVRZX1JFRjsKLSAgICAgICAgaWYgKGVudGl0eS0+bm90YXRpb24pCi0gICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9CSU5BUllfRU5USVRZX1JFRjsKLSAgICAgICAgaWYgKGVu
dGl0eS0+dGV4dFB0cikgewotICAgICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICAg
ICAgICBpZiAoIWRlZmF1bHRFeHBhbmRJbnRlcm5hbEVudGl0aWVzKSB7Ci0gICAgICAgICAgICBp
ZiAoc2tpcHBlZEVudGl0eUhhbmRsZXIpCi0gICAgICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5k
bGVyKGhhbmRsZXJBcmcsIGVudGl0eS0+bmFtZSwgMCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChk
ZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywg
cywgbmV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVz
dWx0ID0gcHJvY2Vzc0ludGVybmFsRW50aXR5KHBhcnNlciwgZW50aXR5LCBYTUxfRkFMU0UpOwot
ICAgICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGV4dGVybmFsRW50aXR5UmVm
SGFuZGxlcikgewotICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpjb250ZXh0OwotICAgICAgICAg
IGVudGl0eS0+b3BlbiA9IFhNTF9UUlVFOwotICAgICAgICAgIGNvbnRleHQgPSBnZXRDb250ZXh0
KHBhcnNlcik7Ci0gICAgICAgICAgZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOwotICAgICAgICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwot
ICAgICAgICAgIGlmICghZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVm
SGFuZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+YmFz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnN5c3Rl
bUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+cHVi
bGljSWQpKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFO
RExJTkc7Ci0gICAgICAgICAgcG9vbERpc2NhcmQoJnRlbXBQb29sKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICByZXBvcnREZWZhdWx0KHBh
cnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgY2FzZSBY
TUxfVE9LX1NUQVJUX1RBR19OT19BVFRTOgotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAg
Y2FzZSBYTUxfVE9LX1NUQVJUX1RBR19XSVRIX0FUVFM6Ci0gICAgICB7Ci0gICAgICAgIFRBRyAq
dGFnOwotICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7Ci0gICAgICAgIFhNTF9DaGFyICp0
b1B0cjsKLSAgICAgICAgaWYgKGZyZWVUYWdMaXN0KSB7Ci0gICAgICAgICAgdGFnID0gZnJlZVRh
Z0xpc3Q7Ci0gICAgICAgICAgZnJlZVRhZ0xpc3QgPSBmcmVlVGFnTGlzdC0+cGFyZW50OwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHRhZyA9IChUQUcgKilNQUxMT0Moc2l6
ZW9mKFRBRykpOwotICAgICAgICAgIGlmICghdGFnKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgdGFnLT5idWYgPSAoY2hhciAqKU1BTExPQyhJTklU
X1RBR19CVUZfU0laRSk7Ci0gICAgICAgICAgaWYgKCF0YWctPmJ1ZikgewotICAgICAgICAgICAg
RlJFRSh0YWcpOwotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIHRhZy0+YnVmRW5kID0gdGFnLT5idWYgKyBJTklUX1RBR19CVUZf
U0laRTsKLSAgICAgICAgfQotICAgICAgICB0YWctPmJpbmRpbmdzID0gTlVMTDsKLSAgICAgICAg
dGFnLT5wYXJlbnQgPSB0YWdTdGFjazsKLSAgICAgICAgdGFnU3RhY2sgPSB0YWc7Ci0gICAgICAg
IHRhZy0+bmFtZS5sb2NhbFBhcnQgPSBOVUxMOwotICAgICAgICB0YWctPm5hbWUucHJlZml4ID0g
TlVMTDsKLSAgICAgICAgdGFnLT5yYXdOYW1lID0gcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyOwot
ICAgICAgICB0YWctPnJhd05hbWVMZW5ndGggPSBYbWxOYW1lTGVuZ3RoKGVuYywgdGFnLT5yYXdO
YW1lKTsKLSAgICAgICAgKyt0YWdMZXZlbDsKLSAgICAgICAgewotICAgICAgICAgIGNvbnN0IGNo
YXIgKnJhd05hbWVFbmQgPSB0YWctPnJhd05hbWUgKyB0YWctPnJhd05hbWVMZW5ndGg7Ci0gICAg
ICAgICAgY29uc3QgY2hhciAqZnJvbVB0ciA9IHRhZy0+cmF3TmFtZTsKLSAgICAgICAgICB0b1B0
ciA9IChYTUxfQ2hhciAqKXRhZy0+YnVmOwotICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIGludCBidWZTaXplOwotICAgICAgICAgICAgaW50IGNvbnZMZW47Ci0gICAgICAgICAgICBY
bWxDb252ZXJ0KGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgJmZyb21QdHIsIHJhd05hbWVF
bmQsCi0gICAgICAgICAgICAgICAgICAgICAgIChJQ0hBUiAqKikmdG9QdHIsIChJQ0hBUiAqKXRh
Zy0+YnVmRW5kIC0gMSk7Ci0gICAgICAgICAgICBjb252TGVuID0gKGludCkodG9QdHIgLSAoWE1M
X0NoYXIgKil0YWctPmJ1Zik7Ci0gICAgICAgICAgICBpZiAoZnJvbVB0ciA9PSByYXdOYW1lRW5k
KSB7Ci0gICAgICAgICAgICAgIHRhZy0+bmFtZS5zdHJMZW4gPSBjb252TGVuOwotICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1ZlNpemUgPSAoaW50KSh0
YWctPmJ1ZkVuZCAtIHRhZy0+YnVmKSA8PCAxOwotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjaGFyICp0ZW1wID0gKGNoYXIgKilSRUFMTE9DKHRhZy0+YnVmLCBidWZTaXplKTsKLSAgICAg
ICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PX01FTU9SWTsKLSAgICAgICAgICAgICAgdGFnLT5idWYgPSB0ZW1wOwotICAgICAgICAg
ICAgICB0YWctPmJ1ZkVuZCA9IHRlbXAgKyBidWZTaXplOwotICAgICAgICAgICAgICB0b1B0ciA9
IChYTUxfQ2hhciAqKXRlbXAgKyBjb252TGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICB0YWctPm5hbWUuc3RyID0gKFhNTF9DaGFyICopdGFnLT5idWY7
Ci0gICAgICAgICp0b1B0ciA9IFhNTF9UKCdcMCcpOwotICAgICAgICByZXN1bHQgPSBzdG9yZUF0
dHMocGFyc2VyLCBlbmMsIHMsICYodGFnLT5uYW1lKSwgJih0YWctPmJpbmRpbmdzKSk7Ci0gICAg
ICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgaWYgKHN0
YXJ0RWxlbWVudEhhbmRsZXIpCi0gICAgICAgICAgc3RhcnRFbGVtZW50SGFuZGxlcihoYW5kbGVy
QXJnLCB0YWctPm5hbWUuc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IFhNTF9DaGFyICoqKWF0dHMpOwotICAgICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAg
ICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgcG9v
bENsZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIGNhc2UgWE1M
X1RPS19FTVBUWV9FTEVNRU5UX05PX0FUVFM6Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAg
ICBjYXNlIFhNTF9UT0tfRU1QVFlfRUxFTUVOVF9XSVRIX0FUVFM6Ci0gICAgICB7Ci0gICAgICAg
IGNvbnN0IGNoYXIgKnJhd05hbWUgPSBzICsgZW5jLT5taW5CeXRlc1BlckNoYXI7Ci0gICAgICAg
IGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAgICAgICAgQklORElORyAqYmluZGluZ3MgPSBOVUxM
OwotICAgICAgICBYTUxfQm9vbCBub0VsbUhhbmRsZXJzID0gWE1MX1RSVUU7Ci0gICAgICAgIFRB
R19OQU1FIG5hbWU7Ci0gICAgICAgIG5hbWUuc3RyID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9v
bCwgZW5jLCByYXdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdO
YW1lICsgWG1sTmFtZUxlbmd0aChlbmMsIHJhd05hbWUpKTsKLSAgICAgICAgaWYgKCFuYW1lLnN0
cikKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgcG9vbEZp
bmlzaCgmdGVtcFBvb2wpOwotICAgICAgICByZXN1bHQgPSBzdG9yZUF0dHMocGFyc2VyLCBlbmMs
IHMsICZuYW1lLCAmYmluZGluZ3MpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAgICAgICAgaWYg
KHN0YXJ0RWxlbWVudEhhbmRsZXIpIHsKLSAgICAgICAgICBzdGFydEVsZW1lbnRIYW5kbGVyKGhh
bmRsZXJBcmcsIG5hbWUuc3RyLCAoY29uc3QgWE1MX0NoYXIgKiopYXR0cyk7Ci0gICAgICAgICAg
bm9FbG1IYW5kbGVycyA9IFhNTF9GQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kRWxl
bWVudEhhbmRsZXIpIHsKLSAgICAgICAgICBpZiAoc3RhcnRFbGVtZW50SGFuZGxlcikKLSAgICAg
ICAgICAgICpldmVudFBQID0gKmV2ZW50RW5kUFA7Ci0gICAgICAgICAgZW5kRWxlbWVudEhhbmRs
ZXIoaGFuZGxlckFyZywgbmFtZS5zdHIpOwotICAgICAgICAgIG5vRWxtSGFuZGxlcnMgPSBYTUxf
RkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5vRWxtSGFuZGxlcnMgJiYgZGVmYXVsdEhh
bmRsZXIpCi0gICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0g
ICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOwotICAgICAgICB3aGlsZSAoYmluZGluZ3MpIHsK
LSAgICAgICAgICBCSU5ESU5HICpiID0gYmluZGluZ3M7Ci0gICAgICAgICAgaWYgKGVuZE5hbWVz
cGFjZURlY2xIYW5kbGVyKQotICAgICAgICAgICAgZW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIoaGFu
ZGxlckFyZywgYi0+cHJlZml4LT5uYW1lKTsKLSAgICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdz
LT5uZXh0VGFnQmluZGluZzsKLSAgICAgICAgICBiLT5uZXh0VGFnQmluZGluZyA9IGZyZWVCaW5k
aW5nTGlzdDsKLSAgICAgICAgICBmcmVlQmluZGluZ0xpc3QgPSBiOwotICAgICAgICAgIGItPnBy
ZWZpeC0+YmluZGluZyA9IGItPnByZXZQcmVmaXhCaW5kaW5nOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBpZiAodGFnTGV2ZWwgPT0gMCkKLSAgICAgICAgcmV0dXJuIGVwaWxvZ1Byb2Nlc3Nv
cihwYXJzZXIsIG5leHQsIGVuZCwgbmV4dFB0cik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhN
TF9UT0tfRU5EX1RBRzoKLSAgICAgIGlmICh0YWdMZXZlbCA9PSBzdGFydFRhZ0xldmVsKQotICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX0FTWU5DX0VOVElUWTsKLSAgICAgIGVsc2UgewotICAgICAg
ICBpbnQgbGVuOwotICAgICAgICBjb25zdCBjaGFyICpyYXdOYW1lOwotICAgICAgICBUQUcgKnRh
ZyA9IHRhZ1N0YWNrOwotICAgICAgICB0YWdTdGFjayA9IHRhZy0+cGFyZW50OwotICAgICAgICB0
YWctPnBhcmVudCA9IGZyZWVUYWdMaXN0OwotICAgICAgICBmcmVlVGFnTGlzdCA9IHRhZzsKLSAg
ICAgICAgcmF3TmFtZSA9IHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhcioyOwotICAgICAgICBsZW4g
PSBYbWxOYW1lTGVuZ3RoKGVuYywgcmF3TmFtZSk7Ci0gICAgICAgIGlmIChsZW4gIT0gdGFnLT5y
YXdOYW1lTGVuZ3RoCi0gICAgICAgICAgICB8fCBtZW1jbXAodGFnLT5yYXdOYW1lLCByYXdOYW1l
LCBsZW4pICE9IDApIHsKLSAgICAgICAgICAqZXZlbnRQUCA9IHJhd05hbWU7Ci0gICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9UQUdfTUlTTUFUQ0g7Ci0gICAgICAgIH0KLSAgICAgICAgLS10YWdM
ZXZlbDsKLSAgICAgICAgaWYgKGVuZEVsZW1lbnRIYW5kbGVyKSB7Ci0gICAgICAgICAgY29uc3Qg
WE1MX0NoYXIgKmxvY2FsUGFydDsKLSAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqcHJlZml4Owot
ICAgICAgICAgIFhNTF9DaGFyICp1cmk7Ci0gICAgICAgICAgbG9jYWxQYXJ0ID0gdGFnLT5uYW1l
LmxvY2FsUGFydDsKLSAgICAgICAgICBpZiAobnMgJiYgbG9jYWxQYXJ0KSB7Ci0gICAgICAgICAg
ICAvKiBsb2NhbFBhcnQgYW5kIHByZWZpeCBtYXkgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuIGluCi0g
ICAgICAgICAgICAgICB0YWctPm5hbWUuc3RyLCBzaW5jZSB0aGlzIHBvaW50cyB0byB0aGUgYmlu
ZGluZy0+dXJpCi0gICAgICAgICAgICAgICBidWZmZXIgd2hpY2ggZ2V0cyByZS11c2VkOyBzbyB3
ZSBoYXZlIHRvIGFkZCB0aGVtIGFnYWluCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgdXJp
ID0gKFhNTF9DaGFyICopdGFnLT5uYW1lLnN0ciArIHRhZy0+bmFtZS51cmlMZW47Ci0gICAgICAg
ICAgICAvKiBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBzcGFjZSAtIGFscmVhZHkgZG9uZSBpbiBz
dG9yZUF0dHMoKSAqLwotICAgICAgICAgICAgd2hpbGUgKCpsb2NhbFBhcnQpICp1cmkrKyA9ICps
b2NhbFBhcnQrKzsKLSAgICAgICAgICAgIHByZWZpeCA9IChYTUxfQ2hhciAqKXRhZy0+bmFtZS5w
cmVmaXg7Ci0gICAgICAgICAgICBpZiAobnNfdHJpcGxldHMgJiYgcHJlZml4KSB7Ci0gICAgICAg
ICAgICAgICp1cmkrKyA9IG5hbWVzcGFjZVNlcGFyYXRvcjsKLSAgICAgICAgICAgICAgd2hpbGUg
KCpwcmVmaXgpICp1cmkrKyA9ICpwcmVmaXgrKzsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAqdXJpID0gWE1MX1QoJ1wwJyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVuZEVsZW1lbnRI
YW5kbGVyKGhhbmRsZXJBcmcsIHRhZy0+bmFtZS5zdHIpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBl
bmMsIHMsIG5leHQpOwotICAgICAgICB3aGlsZSAodGFnLT5iaW5kaW5ncykgewotICAgICAgICAg
IEJJTkRJTkcgKmIgPSB0YWctPmJpbmRpbmdzOwotICAgICAgICAgIGlmIChlbmROYW1lc3BhY2VE
ZWNsSGFuZGxlcikKLSAgICAgICAgICAgIGVuZE5hbWVzcGFjZURlY2xIYW5kbGVyKGhhbmRsZXJB
cmcsIGItPnByZWZpeC0+bmFtZSk7Ci0gICAgICAgICAgdGFnLT5iaW5kaW5ncyA9IHRhZy0+Ymlu
ZGluZ3MtPm5leHRUYWdCaW5kaW5nOwotICAgICAgICAgIGItPm5leHRUYWdCaW5kaW5nID0gZnJl
ZUJpbmRpbmdMaXN0OwotICAgICAgICAgIGZyZWVCaW5kaW5nTGlzdCA9IGI7Ci0gICAgICAgICAg
Yi0+cHJlZml4LT5iaW5kaW5nID0gYi0+cHJldlByZWZpeEJpbmRpbmc7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHRhZ0xldmVsID09IDApCi0gICAgICAgICAgcmV0dXJuIGVwaWxvZ1Byb2Nlc3Nv
cihwYXJzZXIsIG5leHQsIGVuZCwgbmV4dFB0cik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIFhNTF9UT0tfQ0hBUl9SRUY6Ci0gICAgICB7Ci0gICAgICAgIGludCBuID0gWG1sQ2hh
clJlZk51bWJlcihlbmMsIHMpOwotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9CQURfQ0hBUl9SRUY7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxl
cikgewotICAgICAgICAgIFhNTF9DaGFyIGJ1ZltYTUxfRU5DT0RFX01BWF07Ci0gICAgICAgICAg
Y2hhcmFjdGVyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgYnVmLCBYbWxFbmNvZGUobiwgKElDSEFS
ICopYnVmKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0g
ICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICB9Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfWE1MX0RFQ0w6Ci0gICAgICByZXR1cm4gWE1M
X0VSUk9SX01JU1BMQUNFRF9YTUxfUEk7Ci0gICAgY2FzZSBYTUxfVE9LX0RBVEFfTkVXTElORToK
LSAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikgewotICAgICAgICBYTUxfQ2hhciBjID0g
MHhBOwotICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5kbGVyQXJnLCAmYywgMSk7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmVwb3J0RGVm
YXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9U
T0tfQ0RBVEFfU0VDVF9PUEVOOgotICAgICAgewotICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1
bHQ7Ci0gICAgICAgIGlmIChzdGFydENkYXRhU2VjdGlvbkhhbmRsZXIpCi0gICAgICAgICAgc3Rh
cnRDZGF0YVNlY3Rpb25IYW5kbGVyKGhhbmRsZXJBcmcpOwotI2lmIDAKLSAgICAgICAgLyogU3Vw
cG9zZSB5b3UgZG9pbmcgYSB0cmFuc2Zvcm1hdGlvbiBvbiBhIGRvY3VtZW50IHRoYXQgaW52b2x2
ZXMKLSAgICAgICAgICAgY2hhbmdpbmcgb25seSB0aGUgY2hhcmFjdGVyIGRhdGEuICBZb3Ugc2V0
IHVwIGEgZGVmYXVsdEhhbmRsZXIKLSAgICAgICAgICAgYW5kIGEgY2hhcmFjdGVyRGF0YUhhbmRs
ZXIuICBUaGUgZGVmYXVsdEhhbmRsZXIgc2ltcGx5IGNvcGllcwotICAgICAgICAgICBjaGFyYWN0
ZXJzIHRocm91Z2guICBUaGUgY2hhcmFjdGVyRGF0YUhhbmRsZXIgZG9lcyB0aGUKLSAgICAgICAg
ICAgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUgY2hhcmFjdGVycyBvdXQgZXNjYXBpbmcg
dGhlbSBhcwotICAgICAgICAgICBuZWNlc3NhcnkuICBUaGlzIGNhc2Ugd2lsbCBmYWlsIHRvIHdv
cmsgaWYgd2UgbGVhdmUgb3V0IHRoZQotICAgICAgICAgICBmb2xsb3dpbmcgdHdvIGxpbmVzIChi
ZWNhdXNlICYgYW5kIDwgaW5zaWRlIENEQVRBIHNlY3Rpb25zIHdpbGwKLSAgICAgICAgICAgYmUg
aW5jb3JyZWN0bHkgZXNjYXBlZCkuCi0KLSAgICAgICAgICAgSG93ZXZlciwgbm93IHdlIGhhdmUg
YSBzdGFydC9lbmRDZGF0YVNlY3Rpb25IYW5kbGVyLCBzbyBpdCBzZWVtcwotICAgICAgICAgICBl
YXNpZXIgdG8gbGV0IHRoZSB1c2VyIGRlYWwgd2l0aCB0aGlzLgotICAgICAgICAqLwotICAgICAg
ICBlbHNlIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikKLSAgICAgICAgICBjaGFyYWN0ZXJEYXRh
SGFuZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLCAwKTsKLSNlbmRpZgotICAgICAgICBlbHNlIGlm
IChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBz
LCBuZXh0KTsKLSAgICAgICAgcmVzdWx0ID0gZG9DZGF0YVNlY3Rpb24ocGFyc2VyLCBlbmMsICZu
ZXh0LCBlbmQsIG5leHRQdHIsIGhhdmVNb3JlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBYTUxf
RVJST1JfTk9ORSkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBlbHNlIGlmICgh
bmV4dCkgewotICAgICAgICAgIHByb2Nlc3NvciA9IGNkYXRhU2VjdGlvblByb2Nlc3NvcjsKLSAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIFhNTF9UT0tfVFJBSUxJTkdfUlNRQjoKLSAgICAgIGlmIChoYXZlTW9yZSkgewot
ICAgICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAg
ICAgIH0KLSAgICAgIGlmIChjaGFyYWN0ZXJEYXRhSGFuZGxlcikgewotICAgICAgICBpZiAoTVVT
VF9DT05WRVJUKGVuYywgcykpIHsKLSAgICAgICAgICBJQ0hBUiAqZGF0YVB0ciA9IChJQ0hBUiAq
KWRhdGFCdWY7Ci0gICAgICAgICAgWG1sQ29udmVydChlbmMsICZzLCBlbmQsICZkYXRhUHRyLCAo
SUNIQVIgKilkYXRhQnVmRW5kKTsKLSAgICAgICAgICBjaGFyYWN0ZXJEYXRhSGFuZGxlcihoYW5k
bGVyQXJnLCBkYXRhQnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKGRh
dGFQdHIgLSAoSUNIQVIgKilkYXRhQnVmKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICAgIGNoYXJhY3RlckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKFhNTF9DaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KSgoWE1MX0NoYXIgKillbmQgLSAoWE1MX0NoYXIgKilzKSk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJz
ZXIsIGVuYywgcywgZW5kKTsKLSAgICAgIC8qIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaW5h
bCBidWZmZXIsIHNob3VsZCB3ZSBjaGVjayBmb3IKLSAgICAgICAgIFhNTF9TVVNQRU5ERUQsIFhN
TF9GSU5JU0hFRD8KLSAgICAgICovCi0gICAgICBpZiAoc3RhcnRUYWdMZXZlbCA9PSAwKSB7Ci0g
ICAgICAgICpldmVudFBQID0gZW5kOwotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX0VMRU1F
TlRTOwotICAgICAgfQotICAgICAgaWYgKHRhZ0xldmVsICE9IHN0YXJ0VGFnTGV2ZWwpIHsKLSAg
ICAgICAgKmV2ZW50UFAgPSBlbmQ7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfQVNZTkNfRU5U
SVRZOwotICAgICAgfQotICAgICAgKm5leHRQdHIgPSBlbmQ7Ci0gICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7Ci0gICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6Ci0gICAgICB7Ci0gICAgICAg
IFhNTF9DaGFyYWN0ZXJEYXRhSGFuZGxlciBjaGFyRGF0YUhhbmRsZXIgPSBjaGFyYWN0ZXJEYXRh
SGFuZGxlcjsKLSAgICAgICAgaWYgKGNoYXJEYXRhSGFuZGxlcikgewotICAgICAgICAgIGlmIChN
VVNUX0NPTlZFUlQoZW5jLCBzKSkgewotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAg
ICAgICBJQ0hBUiAqZGF0YVB0ciA9IChJQ0hBUiAqKWRhdGFCdWY7Ci0gICAgICAgICAgICAgIFht
bENvbnZlcnQoZW5jLCAmcywgbmV4dCwgJmRhdGFQdHIsIChJQ0hBUiAqKWRhdGFCdWZFbmQpOwot
ICAgICAgICAgICAgICAqZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAgICAgICAgIGNoYXJEYXRhSGFu
ZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGludCkoZGF0YVB0ciAtIChJQ0hBUiAqKWRhdGFCdWYpKTsKLSAgICAgICAgICAgICAgaWYgKHMg
PT0gbmV4dCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgKmV2ZW50UFAg
PSBzOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjaGFyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoWE1MX0NoYXIgKilzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChY
TUxfQ2hhciAqKW5leHQgLSAoWE1MX0NoYXIgKilzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVu
YywgcywgbmV4dCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfUEk6
Ci0gICAgICBpZiAoIXJlcG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihwYXJzZXIsIGVuYywgcywg
bmV4dCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBYTUxfVE9LX0NPTU1FTlQ6Ci0gICAgICBpZiAoIXJlcG9ydENvbW1lbnQocGFy
c2VyLCBlbmMsIHMsIG5leHQpKQotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
LSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoZGVmYXVsdEhhbmRsZXIpCi0g
ICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICpldmVudFBQID0gcyA9IG5leHQ7Ci0gICAgc3dpdGNoIChwc19wYXJzaW5n
KSB7Ci0gICAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAgICAgKm5leHRQdHIgPSBuZXh0OwotICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIGNhc2UgWE1MX0ZJTklTSEVEOgotICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOwotICAgIGRlZmF1bHQ6IDsKLSAgICB9Ci0gIH0KLSAg
Lyogbm90IHJlYWNoZWQgKi8KLX0KLQotLyogUHJlY29uZGl0aW9uOiBhbGwgYXJndW1lbnRzIG11
c3QgYmUgbm9uLU5VTEw7Ci0gICBQdXJwb3NlOgotICAgLSBub3JtYWxpemUgYXR0cmlidXRlcwot
ICAgLSBjaGVjayBhdHRyaWJ1dGVzIGZvciB3ZWxsLWZvcm1lZG5lc3MKLSAgIC0gZ2VuZXJhdGUg
bmFtZXNwYWNlIGF3YXJlIGF0dHJpYnV0ZSBuYW1lcyAoVVJJLCBwcmVmaXgpCi0gICAtIGJ1aWxk
IGxpc3Qgb2YgYXR0cmlidXRlcyBmb3Igc3RhcnRFbGVtZW50SGFuZGxlcgotICAgLSBkZWZhdWx0
IGF0dHJpYnV0ZXMKLSAgIC0gcHJvY2VzcyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIChjaGVjayBh
bmQgcmVwb3J0IHRoZW0pCi0gICAtIGdlbmVyYXRlIG5hbWVzcGFjZSBhd2FyZSBlbGVtZW50IG5h
bWUgKFVSSSwgcHJlZml4KQotKi8KLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotc3RvcmVBdHRzKFhN
TF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgIGNvbnN0IGNo
YXIgKmF0dFN0ciwgVEFHX05BTUUgKnRhZ05hbWVQdHIsCi0gICAgICAgICAgQklORElORyAqKmJp
bmRpbmdzUHRyKQotewotICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2
ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgRUxFTUVOVF9UWVBFICplbGVtZW50VHlwZTsKLSAgaW50
IG5EZWZhdWx0QXR0czsKLSAgY29uc3QgWE1MX0NoYXIgKiphcHBBdHRzOyAgIC8qIHRoZSBhdHRy
aWJ1dGUgbGlzdCBmb3IgdGhlIGFwcGxpY2F0aW9uICovCi0gIGludCBhdHRJbmRleCA9IDA7Ci0g
IGludCBwcmVmaXhMZW47Ci0gIGludCBpOwotICBpbnQgbjsKLSAgWE1MX0NoYXIgKnVyaTsKLSAg
aW50IG5QcmVmaXhlcyA9IDA7Ci0gIEJJTkRJTkcgKmJpbmRpbmc7Ci0gIGNvbnN0IFhNTF9DaGFy
ICpsb2NhbFBhcnQ7Ci0KLSAgLyogbG9va3VwIHRoZSBlbGVtZW50IHR5cGUgbmFtZSAqLwotICBl
bGVtZW50VHlwZSA9IChFTEVNRU5UX1RZUEUgKilsb29rdXAocGFyc2VyLCAmZHRkLT5lbGVtZW50
VHlwZXMsIHRhZ05hbWVQdHItPnN0ciwwKTsKLSAgaWYgKCFlbGVtZW50VHlwZSkgewotICAgIGNv
bnN0IFhNTF9DaGFyICpuYW1lID0gcG9vbENvcHlTdHJpbmcoJmR0ZC0+cG9vbCwgdGFnTmFtZVB0
ci0+c3RyKTsKLSAgICBpZiAoIW5hbWUpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKLSAgICBlbGVtZW50VHlwZSA9IChFTEVNRU5UX1RZUEUgKilsb29rdXAocGFyc2VyLCAmZHRk
LT5lbGVtZW50VHlwZXMsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihFTEVNRU5UX1RZUEUpKTsKLSAgICBpZiAoIWVsZW1lbnRUeXBlKQotICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgaWYgKG5zICYmICFzZXRFbGVtZW50
VHlwZVByZWZpeChwYXJzZXIsIGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9fTUVNT1JZOwotICB9Ci0gIG5EZWZhdWx0QXR0cyA9IGVsZW1lbnRUeXBlLT5uRGVmYXVsdEF0
dHM7Ci0KLSAgLyogZ2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHRva2VuaXplciAqLwotICBu
ID0gWG1sR2V0QXR0cmlidXRlcyhlbmMsIGF0dFN0ciwgYXR0c1NpemUsIGF0dHMpOwotICBpZiAo
biArIG5EZWZhdWx0QXR0cyA+IGF0dHNTaXplKSB7Ci0gICAgaW50IG9sZEF0dHNTaXplID0gYXR0
c1NpemU7Ci0gICAgQVRUUklCVVRFICp0ZW1wOwotI2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgICBY
TUxfQXR0ckluZm8gKnRlbXAyOwotI2VuZGlmCi0gICAgYXR0c1NpemUgPSBuICsgbkRlZmF1bHRB
dHRzICsgSU5JVF9BVFRTX1NJWkU7Ci0gICAgdGVtcCA9IChBVFRSSUJVVEUgKilSRUFMTE9DKCh2
b2lkICopYXR0cywgYXR0c1NpemUgKiBzaXplb2YoQVRUUklCVVRFKSk7Ci0gICAgaWYgKHRlbXAg
PT0gTlVMTCkKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgIGF0dHMgPSB0
ZW1wOwotI2lmZGVmIFhNTF9BVFRSX0lORk8KLSAgICB0ZW1wMiA9IChYTUxfQXR0ckluZm8gKilS
RUFMTE9DKCh2b2lkICopYXR0SW5mbywgYXR0c1NpemUgKiBzaXplb2YoWE1MX0F0dHJJbmZvKSk7
Ci0gICAgaWYgKHRlbXAyID09IE5VTEwpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9S
WTsKLSAgICBhdHRJbmZvID0gdGVtcDI7Ci0jZW5kaWYKLSAgICBpZiAobiA+IG9sZEF0dHNTaXpl
KQotICAgICAgWG1sR2V0QXR0cmlidXRlcyhlbmMsIGF0dFN0ciwgbiwgYXR0cyk7Ci0gIH0KLQot
ICBhcHBBdHRzID0gKGNvbnN0IFhNTF9DaGFyICoqKWF0dHM7Ci0gIGZvciAoaSA9IDA7IGkgPCBu
OyBpKyspIHsKLSAgICBBVFRSSUJVVEUgKmN1cnJBdHQgPSAmYXR0c1tpXTsKLSNpZmRlZiBYTUxf
QVRUUl9JTkZPCi0gICAgWE1MX0F0dHJJbmZvICpjdXJyQXR0SW5mbyA9ICZhdHRJbmZvW2ldOwot
I2VuZGlmCi0gICAgLyogYWRkIHRoZSBuYW1lIGFuZCB2YWx1ZSB0byB0aGUgYXR0cmlidXRlIGxp
c3QgKi8KLSAgICBBVFRSSUJVVEVfSUQgKmF0dElkID0gZ2V0QXR0cmlidXRlSWQocGFyc2VyLCBl
bmMsIGN1cnJBdHQtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJBdHQtPm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyBYbWxOYW1lTGVuZ3RoKGVuYywgY3VyckF0dC0+bmFtZSkpOwotICAgIGlmICghYXR0SWQp
Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSNpZmRlZiBYTUxfQVRUUl9JTkZP
Ci0gICAgY3VyckF0dEluZm8tPm5hbWVTdGFydCA9IHBhcnNlRW5kQnl0ZUluZGV4IC0gKHBhcnNl
RW5kUHRyIC0gY3VyckF0dC0+bmFtZSk7Ci0gICAgY3VyckF0dEluZm8tPm5hbWVFbmQgPSBjdXJy
QXR0SW5mby0+bmFtZVN0YXJ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtbE5hbWVM
ZW5ndGgoZW5jLCBjdXJyQXR0LT5uYW1lKTsKLSAgICBjdXJyQXR0SW5mby0+dmFsdWVTdGFydCA9
IHBhcnNlRW5kQnl0ZUluZGV4IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyc2VF
bmRQdHIgLSBjdXJyQXR0LT52YWx1ZVB0cik7Ci0gICAgY3VyckF0dEluZm8tPnZhbHVlRW5kID0g
cGFyc2VFbmRCeXRlSW5kZXggLSAocGFyc2VFbmRQdHIgLSBjdXJyQXR0LT52YWx1ZUVuZCk7Ci0j
ZW5kaWYKLSAgICAvKiBEZXRlY3QgZHVwbGljYXRlIGF0dHJpYnV0ZXMgYnkgdGhlaXIgUU5hbWVz
LiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbgotICAgICAgIG5hbWVzcGFjZSBwcm9jZXNzaW5nIGlz
IHR1cm5lZCBvbiBhbmQgZGlmZmVyZW50IHByZWZpeGVzIGZvciB0aGUgc2FtZQotICAgICAgIG5h
bWVzcGFjZSBhcmUgdXNlZC4gRm9yIHRoaXMgY2FzZSB3ZSBoYXZlIGEgY2hlY2sgZnVydGhlciBk
b3duLgotICAgICovCi0gICAgaWYgKChhdHRJZC0+bmFtZSlbLTFdKSB7Ci0gICAgICBpZiAoZW5j
ID09IGVuY29kaW5nKQotICAgICAgICBldmVudFB0ciA9IGF0dHNbaV0ubmFtZTsKLSAgICAgIHJl
dHVybiBYTUxfRVJST1JfRFVQTElDQVRFX0FUVFJJQlVURTsKLSAgICB9Ci0gICAgKGF0dElkLT5u
YW1lKVstMV0gPSAxOwotICAgIGFwcEF0dHNbYXR0SW5kZXgrK10gPSBhdHRJZC0+bmFtZTsKLSAg
ICBpZiAoIWF0dHNbaV0ubm9ybWFsaXplZCkgewotICAgICAgZW51bSBYTUxfRXJyb3IgcmVzdWx0
OwotICAgICAgWE1MX0Jvb2wgaXNDZGF0YSA9IFhNTF9UUlVFOwotCi0gICAgICAvKiBmaWd1cmUg
b3V0IHdoZXRoZXIgZGVjbGFyZWQgYXMgb3RoZXIgdGhhbiBDREFUQSAqLwotICAgICAgaWYgKGF0
dElkLT5tYXliZVRva2VuaXplZCkgewotICAgICAgICBpbnQgajsKLSAgICAgICAgZm9yIChqID0g
MDsgaiA8IG5EZWZhdWx0QXR0czsgaisrKSB7Ci0gICAgICAgICAgaWYgKGF0dElkID09IGVsZW1l
bnRUeXBlLT5kZWZhdWx0QXR0c1tqXS5pZCkgewotICAgICAgICAgICAgaXNDZGF0YSA9IGVsZW1l
bnRUeXBlLT5kZWZhdWx0QXR0c1tqXS5pc0NkYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIG5vcm1hbGl6ZSB0aGUgYXR0
cmlidXRlIHZhbHVlICovCi0gICAgICByZXN1bHQgPSBzdG9yZUF0dHJpYnV0ZVZhbHVlKHBhcnNl
ciwgZW5jLCBpc0NkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRz
W2ldLnZhbHVlUHRyLCBhdHRzW2ldLnZhbHVlRW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmdGVtcFBvb2wpOwotICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgIGFwcEF0dHNbYXR0SW5kZXhdID0gcG9vbFN0YXJ0KCZ0ZW1wUG9vbCk7
Ci0gICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAg
LyogdGhlIHZhbHVlIGRpZCBub3QgbmVlZCBub3JtYWxpemluZyAqLwotICAgICAgYXBwQXR0c1th
dHRJbmRleF0gPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLCBlbmMsIGF0dHNbaV0udmFsdWVQ
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRzW2ldLnZh
bHVlRW5kKTsKLSAgICAgIGlmIChhcHBBdHRzW2F0dEluZGV4XSA9PSAwKQotICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIHBvb2xGaW5pc2goJnRlbXBQb29sKTsKLSAg
ICB9Ci0gICAgLyogaGFuZGxlIHByZWZpeGVkIGF0dHJpYnV0ZSBuYW1lcyAqLwotICAgIGlmIChh
dHRJZC0+cHJlZml4KSB7Ci0gICAgICBpZiAoYXR0SWQtPnhtbG5zKSB7Ci0gICAgICAgIC8qIGRl
YWwgd2l0aCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGhlcmUgKi8KLSAgICAgICAgZW51bSBYTUxf
RXJyb3IgcmVzdWx0ID0gYWRkQmluZGluZyhwYXJzZXIsIGF0dElkLT5wcmVmaXgsIGF0dElkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcEF0dHNbYXR0SW5k
ZXhdLCBiaW5kaW5nc1B0cik7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgLS1hdHRJbmRleDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAg
ICAgICAvKiBkZWFsIHdpdGggb3RoZXIgcHJlZml4ZWQgbmFtZXMgbGF0ZXIgKi8KLSAgICAgICAg
YXR0SW5kZXgrKzsKLSAgICAgICAgblByZWZpeGVzKys7Ci0gICAgICAgIChhdHRJZC0+bmFtZSlb
LTFdID0gMjsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgYXR0SW5kZXgrKzsKLSAg
fQotCi0gIC8qIHNldC11cCBmb3IgWE1MX0dldFNwZWNpZmllZEF0dHJpYnV0ZUNvdW50IGFuZCBY
TUxfR2V0SWRBdHRyaWJ1dGVJbmRleCAqLwotICBuU3BlY2lmaWVkQXR0cyA9IGF0dEluZGV4Owot
ICBpZiAoZWxlbWVudFR5cGUtPmlkQXR0ICYmIChlbGVtZW50VHlwZS0+aWRBdHQtPm5hbWUpWy0x
XSkgewotICAgIGZvciAoaSA9IDA7IGkgPCBhdHRJbmRleDsgaSArPSAyKQotICAgICAgaWYgKGFw
cEF0dHNbaV0gPT0gZWxlbWVudFR5cGUtPmlkQXR0LT5uYW1lKSB7Ci0gICAgICAgIGlkQXR0SW5k
ZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgfQotICBlbHNlCi0gICAgaWRBdHRJ
bmRleCA9IC0xOwotCi0gIC8qIGRvIGF0dHJpYnV0ZSBkZWZhdWx0aW5nICovCi0gIGZvciAoaSA9
IDA7IGkgPCBuRGVmYXVsdEF0dHM7IGkrKykgewotICAgIGNvbnN0IERFRkFVTFRfQVRUUklCVVRF
ICpkYSA9IGVsZW1lbnRUeXBlLT5kZWZhdWx0QXR0cyArIGk7Ci0gICAgaWYgKCEoZGEtPmlkLT5u
YW1lKVstMV0gJiYgZGEtPnZhbHVlKSB7Ci0gICAgICBpZiAoZGEtPmlkLT5wcmVmaXgpIHsKLSAg
ICAgICAgaWYgKGRhLT5pZC0+eG1sbnMpIHsKLSAgICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1
bHQgPSBhZGRCaW5kaW5nKHBhcnNlciwgZGEtPmlkLT5wcmVmaXgsIGRhLT5pZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhLT52YWx1ZSwgYmluZGluZ3NQ
dHIpOwotICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIChkYS0+aWQtPm5hbWUpWy0xXSA9
IDI7Ci0gICAgICAgICAgblByZWZpeGVzKys7Ci0gICAgICAgICAgYXBwQXR0c1thdHRJbmRleCsr
XSA9IGRhLT5pZC0+bmFtZTsKLSAgICAgICAgICBhcHBBdHRzW2F0dEluZGV4KytdID0gZGEtPnZh
bHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgKGRhLT5pZC0+
bmFtZSlbLTFdID0gMTsKLSAgICAgICAgYXBwQXR0c1thdHRJbmRleCsrXSA9IGRhLT5pZC0+bmFt
ZTsKLSAgICAgICAgYXBwQXR0c1thdHRJbmRleCsrXSA9IGRhLT52YWx1ZTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLSAgYXBwQXR0c1thdHRJbmRleF0gPSAwOwotCi0gIC8qIGV4cGFuZCBwcmVmaXhl
ZCBhdHRyaWJ1dGUgbmFtZXMsIGNoZWNrIGZvciBkdXBsaWNhdGVzLAotICAgICBhbmQgY2xlYXIg
ZmxhZ3MgdGhhdCBzYXkgd2hldGhlciBhdHRyaWJ1dGVzIHdlcmUgc3BlY2lmaWVkICovCi0gIGkg
PSAwOwotICBpZiAoblByZWZpeGVzKSB7Ci0gICAgaW50IGo7ICAvKiBoYXNoIHRhYmxlIGluZGV4
ICovCi0gICAgdW5zaWduZWQgbG9uZyB2ZXJzaW9uID0gbnNBdHRzVmVyc2lvbjsKLSAgICBpbnQg
bnNBdHRzU2l6ZSA9IChpbnQpMSA8PCBuc0F0dHNQb3dlcjsKLSAgICAvKiBzaXplIG9mIGhhc2gg
dGFibGUgbXVzdCBiZSBhdCBsZWFzdCAyICogKCMgb2YgcHJlZml4ZWQgYXR0cmlidXRlcykgKi8K
LSAgICBpZiAoKG5QcmVmaXhlcyA8PCAxKSA+PiBuc0F0dHNQb3dlcikgeyAgLyogdHJ1ZSBmb3Ig
bnNBdHRzUG93ZXIgPSAwICovCi0gICAgICBOU19BVFQgKnRlbXA7Ci0gICAgICAvKiBoYXNoIHRh
YmxlIHNpemUgbXVzdCBhbHNvIGJlIGEgcG93ZXIgb2YgMiBhbmQgPj0gOCAqLwotICAgICAgd2hp
bGUgKG5QcmVmaXhlcyA+PiBuc0F0dHNQb3dlcisrKTsKLSAgICAgIGlmIChuc0F0dHNQb3dlciA8
IDMpCi0gICAgICAgIG5zQXR0c1Bvd2VyID0gMzsKLSAgICAgIG5zQXR0c1NpemUgPSAoaW50KTEg
PDwgbnNBdHRzUG93ZXI7Ci0gICAgICB0ZW1wID0gKE5TX0FUVCAqKVJFQUxMT0MobnNBdHRzLCBu
c0F0dHNTaXplICogc2l6ZW9mKE5TX0FUVCkpOwotICAgICAgaWYgKCF0ZW1wKQotICAgICAgICBy
ZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgIG5zQXR0cyA9IHRlbXA7Ci0gICAgICB2
ZXJzaW9uID0gMDsgIC8qIGZvcmNlIHJlLWluaXRpYWxpemF0aW9uIG9mIG5zQXR0cyBoYXNoIHRh
YmxlICovCi0gICAgfQotICAgIC8qIHVzaW5nIGEgdmVyc2lvbiBmbGFnIHNhdmVzIHVzIGZyb20g
aW5pdGlhbGl6aW5nIG5zQXR0cyBldmVyeSB0aW1lICovCi0gICAgaWYgKCF2ZXJzaW9uKSB7ICAv
KiBpbml0aWFsaXplIHZlcnNpb24gZmxhZ3Mgd2hlbiB2ZXJzaW9uIHdyYXBzIGFyb3VuZCAqLwot
ICAgICAgdmVyc2lvbiA9IElOSVRfQVRUU19WRVJTSU9OOwotICAgICAgZm9yIChqID0gbnNBdHRz
U2l6ZTsgaiAhPSAwOyApCi0gICAgICAgIG5zQXR0c1stLWpdLnZlcnNpb24gPSB2ZXJzaW9uOwot
ICAgIH0KLSAgICBuc0F0dHNWZXJzaW9uID0gLS12ZXJzaW9uOwotCi0gICAgLyogZXhwYW5kIHBy
ZWZpeGVkIG5hbWVzIGFuZCBjaGVjayBmb3IgZHVwbGljYXRlcyAqLwotICAgIGZvciAoOyBpIDwg
YXR0SW5kZXg7IGkgKz0gMikgewotICAgICAgY29uc3QgWE1MX0NoYXIgKnMgPSBhcHBBdHRzW2ld
OwotICAgICAgaWYgKHNbLTFdID09IDIpIHsgIC8qIHByZWZpeGVkICovCi0gICAgICAgIEFUVFJJ
QlVURV9JRCAqaWQ7Ci0gICAgICAgIGNvbnN0IEJJTkRJTkcgKmI7Ci0gICAgICAgIHVuc2lnbmVk
IGxvbmcgdXJpSGFzaCA9IGhhc2hfc2VjcmV0X3NhbHQ7Ci0gICAgICAgICgoWE1MX0NoYXIgKilz
KVstMV0gPSAwOyAgLyogY2xlYXIgZmxhZyAqLwotICAgICAgICBpZCA9IChBVFRSSUJVVEVfSUQg
Kilsb29rdXAocGFyc2VyLCAmZHRkLT5hdHRyaWJ1dGVJZHMsIHMsIDApOwotICAgICAgICBiID0g
aWQtPnByZWZpeC0+YmluZGluZzsKLSAgICAgICAgaWYgKCFiKQotICAgICAgICAgIHJldHVybiBY
TUxfRVJST1JfVU5CT1VORF9QUkVGSVg7Ci0KLSAgICAgICAgLyogYXMgd2UgZXhwYW5kIHRoZSBu
YW1lIHdlIGFsc28gY2FsY3VsYXRlIGl0cyBoYXNoIHZhbHVlICovCi0gICAgICAgIGZvciAoaiA9
IDA7IGogPCBiLT51cmlMZW47IGorKykgewotICAgICAgICAgIGNvbnN0IFhNTF9DaGFyIGMgPSBi
LT51cmlbal07Ci0gICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIGMpKQot
ICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgdXJpSGFz
aCA9IENIQVJfSEFTSCh1cmlIYXNoLCBjKTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoKnMr
KyAhPSBYTUxfVChBU0NJSV9DT0xPTikpCi0gICAgICAgICAgOwotICAgICAgICBkbyB7ICAvKiBj
b3BpZXMgbnVsbCB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgY29uc3QgWE1MX0NoYXIgYyA9ICpz
OwotICAgICAgICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCAqcykpCi0gICAgICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICB1cmlIYXNoID0gQ0hB
Ul9IQVNIKHVyaUhhc2gsIGMpOwotICAgICAgICB9IHdoaWxlICgqcysrKTsKLQotICAgICAgICB7
IC8qIENoZWNrIGhhc2ggdGFibGUgZm9yIGR1cGxpY2F0ZSBvZiBleHBhbmRlZCBuYW1lICh1cmlO
YW1lKS4KLSAgICAgICAgICAgICBEZXJpdmVkIGZyb20gY29kZSBpbiBsb29rdXAocGFyc2VyLCBI
QVNIX1RBQkxFICp0YWJsZSwgLi4uKS4KLSAgICAgICAgICAqLwotICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgc3RlcCA9IDA7Ci0gICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gbnNBdHRzU2l6
ZSAtIDE7Ci0gICAgICAgICAgaiA9IHVyaUhhc2ggJiBtYXNrOyAgLyogaW5kZXggaW50byBoYXNo
IHRhYmxlICovCi0gICAgICAgICAgd2hpbGUgKG5zQXR0c1tqXS52ZXJzaW9uID09IHZlcnNpb24p
IHsKLSAgICAgICAgICAgIC8qIGZvciBzcGVlZCB3ZSBjb21wYXJlIHN0b3JlZCBoYXNoIHZhbHVl
cyBmaXJzdCAqLwotICAgICAgICAgICAgaWYgKHVyaUhhc2ggPT0gbnNBdHRzW2pdLmhhc2gpIHsK
LSAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnMxID0gcG9vbFN0YXJ0KCZ0ZW1wUG9vbCk7
Ci0gICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICpzMiA9IG5zQXR0c1tqXS51cmlOYW1lOwot
ICAgICAgICAgICAgICAvKiBzMSBpcyBudWxsIHRlcm1pbmF0ZWQsIGJ1dCBub3QgczIgKi8KLSAg
ICAgICAgICAgICAgZm9yICg7ICpzMSA9PSAqczIgJiYgKnMxICE9IDA7IHMxKyssIHMyKyspOwot
ICAgICAgICAgICAgICBpZiAoKnMxID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9EVVBMSUNBVEVfQVRUUklCVVRFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCFzdGVwKQotICAgICAgICAgICAgICBzdGVwID0gUFJPQkVfU1RFUCh1cmlIYXNoLCBtYXNrLCBu
c0F0dHNQb3dlcik7Ci0gICAgICAgICAgICBqIDwgc3RlcCA/IChqICs9IG5zQXR0c1NpemUgLSBz
dGVwKSA6IChqIC09IHN0ZXApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChuc190cmlwbGV0cykgeyAgLyogYXBwZW5kIG5hbWVzcGFjZSBzZXBhcmF0b3IgYW5kIHByZWZp
eCAqLwotICAgICAgICAgIHRlbXBQb29sLnB0clstMV0gPSBuYW1lc3BhY2VTZXBhcmF0b3I7Ci0g
ICAgICAgICAgcyA9IGItPnByZWZpeC0+bmFtZTsKLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQotICAgICAgICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICB9IHdoaWxlICgqcysrKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qIHN0b3JlIGV4cGFuZGVkIG5hbWUgaW4gYXR0cmlidXRlIGxpc3Qg
Ki8KLSAgICAgICAgcyA9IHBvb2xTdGFydCgmdGVtcFBvb2wpOwotICAgICAgICBwb29sRmluaXNo
KCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGFwcEF0dHNbaV0gPSBzOwotCi0gICAgICAgIC8qIGZpbGwg
ZW1wdHkgc2xvdCB3aXRoIG5ldyB2ZXJzaW9uLCB1cmlOYW1lIGFuZCBoYXNoIHZhbHVlICovCi0g
ICAgICAgIG5zQXR0c1tqXS52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICAgICAgbnNBdHRzW2pdLmhh
c2ggPSB1cmlIYXNoOwotICAgICAgICBuc0F0dHNbal0udXJpTmFtZSA9IHM7Ci0KLSAgICAgICAg
aWYgKCEtLW5QcmVmaXhlcykgewotICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSAgLyogbm90IHByZWZpeGVkICovCi0gICAg
ICAgICgoWE1MX0NoYXIgKilzKVstMV0gPSAwOyAgLyogY2xlYXIgZmxhZyAqLwotICAgIH0KLSAg
fQotICAvKiBjbGVhciBmbGFncyBmb3IgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzICovCi0gIGZv
ciAoOyBpIDwgYXR0SW5kZXg7IGkgKz0gMikKLSAgICAoKFhNTF9DaGFyICopKGFwcEF0dHNbaV0p
KVstMV0gPSAwOwotICBmb3IgKGJpbmRpbmcgPSAqYmluZGluZ3NQdHI7IGJpbmRpbmc7IGJpbmRp
bmcgPSBiaW5kaW5nLT5uZXh0VGFnQmluZGluZykKLSAgICBiaW5kaW5nLT5hdHRJZC0+bmFtZVst
MV0gPSAwOwotCi0gIGlmICghbnMpCi0gICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotCi0gIC8q
IGV4cGFuZCB0aGUgZWxlbWVudCB0eXBlIG5hbWUgKi8KLSAgaWYgKGVsZW1lbnRUeXBlLT5wcmVm
aXgpIHsKLSAgICBiaW5kaW5nID0gZWxlbWVudFR5cGUtPnByZWZpeC0+YmluZGluZzsKLSAgICBp
ZiAoIWJpbmRpbmcpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQk9VTkRfUFJFRklYOwotICAg
IGxvY2FsUGFydCA9IHRhZ05hbWVQdHItPnN0cjsKLSAgICB3aGlsZSAoKmxvY2FsUGFydCsrICE9
IFhNTF9UKEFTQ0lJX0NPTE9OKSkKLSAgICAgIDsKLSAgfQotICBlbHNlIGlmIChkdGQtPmRlZmF1
bHRQcmVmaXguYmluZGluZykgewotICAgIGJpbmRpbmcgPSBkdGQtPmRlZmF1bHRQcmVmaXguYmlu
ZGluZzsKLSAgICBsb2NhbFBhcnQgPSB0YWdOYW1lUHRyLT5zdHI7Ci0gIH0KLSAgZWxzZQotICAg
IHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgcHJlZml4TGVuID0gMDsKLSAgaWYgKG5zX3RyaXBs
ZXRzICYmIGJpbmRpbmctPnByZWZpeC0+bmFtZSkgewotICAgIGZvciAoOyBiaW5kaW5nLT5wcmVm
aXgtPm5hbWVbcHJlZml4TGVuKytdOykKLSAgICAgIDsgIC8qIHByZWZpeExlbiBpbmNsdWRlcyBu
dWxsIHRlcm1pbmF0b3IgKi8KLSAgfQotICB0YWdOYW1lUHRyLT5sb2NhbFBhcnQgPSBsb2NhbFBh
cnQ7Ci0gIHRhZ05hbWVQdHItPnVyaUxlbiA9IGJpbmRpbmctPnVyaUxlbjsKLSAgdGFnTmFtZVB0
ci0+cHJlZml4ID0gYmluZGluZy0+cHJlZml4LT5uYW1lOwotICB0YWdOYW1lUHRyLT5wcmVmaXhM
ZW4gPSBwcmVmaXhMZW47Ci0gIGZvciAoaSA9IDA7IGxvY2FsUGFydFtpKytdOykKLSAgICA7ICAv
KiBpIGluY2x1ZGVzIG51bGwgdGVybWluYXRvciAqLwotICBuID0gaSArIGJpbmRpbmctPnVyaUxl
biArIHByZWZpeExlbjsKLSAgaWYgKG4gPiBiaW5kaW5nLT51cmlBbGxvYykgewotICAgIFRBRyAq
cDsKLSAgICB1cmkgPSAoWE1MX0NoYXIgKilNQUxMT0MoKG4gKyBFWFBBTkRfU1BBUkUpICogc2l6
ZW9mKFhNTF9DaGFyKSk7Ci0gICAgaWYgKCF1cmkpCi0gICAgICByZXR1cm4gWE1MX0VSUk9SX05P
X01FTU9SWTsKLSAgICBiaW5kaW5nLT51cmlBbGxvYyA9IG4gKyBFWFBBTkRfU1BBUkU7Ci0gICAg
bWVtY3B5KHVyaSwgYmluZGluZy0+dXJpLCBiaW5kaW5nLT51cmlMZW4gKiBzaXplb2YoWE1MX0No
YXIpKTsKLSAgICBmb3IgKHAgPSB0YWdTdGFjazsgcDsgcCA9IHAtPnBhcmVudCkKLSAgICAgIGlm
IChwLT5uYW1lLnN0ciA9PSBiaW5kaW5nLT51cmkpCi0gICAgICAgIHAtPm5hbWUuc3RyID0gdXJp
OwotICAgIEZSRUUoYmluZGluZy0+dXJpKTsKLSAgICBiaW5kaW5nLT51cmkgPSB1cmk7Ci0gIH0K
LSAgLyogaWYgbmFtZXNwYWNlU2VwYXJhdG9yICE9ICdcMCcgdGhlbiB1cmkgaW5jbHVkZXMgaXQg
YWxyZWFkeSAqLwotICB1cmkgPSBiaW5kaW5nLT51cmkgKyBiaW5kaW5nLT51cmlMZW47Ci0gIG1l
bWNweSh1cmksIGxvY2FsUGFydCwgaSAqIHNpemVvZihYTUxfQ2hhcikpOwotICAvKiB3ZSBhbHdh
eXMgaGF2ZSBhIG5hbWVzcGFjZSBzZXBhcmF0b3IgYmV0d2VlbiBsb2NhbFBhcnQgYW5kIHByZWZp
eCAqLwotICBpZiAocHJlZml4TGVuKSB7Ci0gICAgdXJpICs9IGkgLSAxOwotICAgICp1cmkgPSBu
YW1lc3BhY2VTZXBhcmF0b3I7ICAvKiByZXBsYWNlIG51bGwgdGVybWluYXRvciAqLwotICAgIG1l
bWNweSh1cmkgKyAxLCBiaW5kaW5nLT5wcmVmaXgtPm5hbWUsIHByZWZpeExlbiAqIHNpemVvZihY
TUxfQ2hhcikpOwotICB9Ci0gIHRhZ05hbWVQdHItPnN0ciA9IGJpbmRpbmctPnVyaTsKLSAgcmV0
dXJuIFhNTF9FUlJPUl9OT05FOwotfQotCi0vKiBhZGRCaW5kaW5nKCkgb3ZlcndyaXRlcyB0aGUg
dmFsdWUgb2YgcHJlZml4LT5iaW5kaW5nIHdpdGhvdXQgY2hlY2tpbmcuCi0gICBUaGVyZWZvcmUg
b25lIG11c3Qga2VlcCB0cmFjayBvZiB0aGUgb2xkIHZhbHVlIG91dHNpZGUgb2YgYWRkQmluZGlu
ZygpLgotKi8KLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotYWRkQmluZGluZyhYTUxfUGFyc2VyIHBh
cnNlciwgUFJFRklYICpwcmVmaXgsIGNvbnN0IEFUVFJJQlVURV9JRCAqYXR0SWQsCi0gICAgICAg
ICAgIGNvbnN0IFhNTF9DaGFyICp1cmksIEJJTkRJTkcgKipiaW5kaW5nc1B0cikKLXsKLSAgc3Rh
dGljIGNvbnN0IFhNTF9DaGFyIHhtbE5hbWVzcGFjZVtdID0gewotICAgIEFTQ0lJX2gsIEFTQ0lJ
X3QsIEFTQ0lJX3QsIEFTQ0lJX3AsIEFTQ0lJX0NPTE9OLCBBU0NJSV9TTEFTSCwgQVNDSUlfU0xB
U0gsCi0gICAgQVNDSUlfdywgQVNDSUlfdywgQVNDSUlfdywgQVNDSUlfUEVSSU9ELCBBU0NJSV93
LCBBU0NJSV8zLCBBU0NJSV9QRVJJT0QsCi0gICAgQVNDSUlfbywgQVNDSUlfciwgQVNDSUlfZywg
QVNDSUlfU0xBU0gsIEFTQ0lJX1gsIEFTQ0lJX00sIEFTQ0lJX0wsCi0gICAgQVNDSUlfU0xBU0gs
IEFTQ0lJXzEsIEFTQ0lJXzksIEFTQ0lJXzksIEFTQ0lJXzgsIEFTQ0lJX1NMQVNILAotICAgIEFT
Q0lJX24sIEFTQ0lJX2EsIEFTQ0lJX20sIEFTQ0lJX2UsIEFTQ0lJX3MsIEFTQ0lJX3AsIEFTQ0lJ
X2EsIEFTQ0lJX2MsCi0gICAgQVNDSUlfZSwgJ1wwJwotICB9OwotICBzdGF0aWMgY29uc3QgaW50
IHhtbExlbiA9Ci0gICAgKGludClzaXplb2YoeG1sTmFtZXNwYWNlKS9zaXplb2YoWE1MX0NoYXIp
IC0gMTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIHhtbG5zTmFtZXNwYWNlW10gPSB7Ci0gICAg
QVNDSUlfaCwgQVNDSUlfdCwgQVNDSUlfdCwgQVNDSUlfcCwgQVNDSUlfQ09MT04sIEFTQ0lJX1NM
QVNILCBBU0NJSV9TTEFTSCwKLSAgICBBU0NJSV93LCBBU0NJSV93LCBBU0NJSV93LCBBU0NJSV9Q
RVJJT0QsIEFTQ0lJX3csIEFTQ0lJXzMsIEFTQ0lJX1BFUklPRCwKLSAgICBBU0NJSV9vLCBBU0NJ
SV9yLCBBU0NJSV9nLCBBU0NJSV9TTEFTSCwgQVNDSUlfMiwgQVNDSUlfMCwgQVNDSUlfMCwKLSAg
ICBBU0NJSV8wLCBBU0NJSV9TTEFTSCwgQVNDSUlfeCwgQVNDSUlfbSwgQVNDSUlfbCwgQVNDSUlf
biwgQVNDSUlfcywKLSAgICBBU0NJSV9TTEFTSCwgJ1wwJwotICB9OwotICBzdGF0aWMgY29uc3Qg
aW50IHhtbG5zTGVuID0KLSAgICAoaW50KXNpemVvZih4bWxuc05hbWVzcGFjZSkvc2l6ZW9mKFhN
TF9DaGFyKSAtIDE7Ci0KLSAgWE1MX0Jvb2wgbXVzdEJlWE1MID0gWE1MX0ZBTFNFOwotICBYTUxf
Qm9vbCBpc1hNTCA9IFhNTF9UUlVFOwotICBYTUxfQm9vbCBpc1hNTE5TID0gWE1MX1RSVUU7Ci0K
LSAgQklORElORyAqYjsKLSAgaW50IGxlbjsKLQotICAvKiBlbXB0eSBVUkkgaXMgb25seSB2YWxp
ZCBmb3IgZGVmYXVsdCBuYW1lc3BhY2UgcGVyIFhNTCBOUyAxLjAgKG5vdCAxLjEpICovCi0gIGlm
ICgqdXJpID09IFhNTF9UKCdcMCcpICYmIHByZWZpeC0+bmFtZSkKLSAgICByZXR1cm4gWE1MX0VS
Uk9SX1VOREVDTEFSSU5HX1BSRUZJWDsKLQotICBpZiAocHJlZml4LT5uYW1lCi0gICAgICAmJiBw
cmVmaXgtPm5hbWVbMF0gPT0gWE1MX1QoQVNDSUlfeCkKLSAgICAgICYmIHByZWZpeC0+bmFtZVsx
XSA9PSBYTUxfVChBU0NJSV9tKQotICAgICAgJiYgcHJlZml4LT5uYW1lWzJdID09IFhNTF9UKEFT
Q0lJX2wpKSB7Ci0KLSAgICAvKiBOb3QgYWxsb3dlZCB0byBiaW5kIHhtbG5zICovCi0gICAgaWYg
KHByZWZpeC0+bmFtZVszXSA9PSBYTUxfVChBU0NJSV9uKQotICAgICAgICAmJiBwcmVmaXgtPm5h
bWVbNF0gPT0gWE1MX1QoQVNDSUlfcykKLSAgICAgICAgJiYgcHJlZml4LT5uYW1lWzVdID09IFhN
TF9UKCdcMCcpKQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9SRVNFUlZFRF9QUkVGSVhfWE1MTlM7
Ci0KLSAgICBpZiAocHJlZml4LT5uYW1lWzNdID09IFhNTF9UKCdcMCcpKQotICAgICAgbXVzdEJl
WE1MID0gWE1MX1RSVUU7Ci0gIH0KLQotICBmb3IgKGxlbiA9IDA7IHVyaVtsZW5dOyBsZW4rKykg
ewotICAgIGlmIChpc1hNTCAmJiAobGVuID4geG1sTGVuIHx8IHVyaVtsZW5dICE9IHhtbE5hbWVz
cGFjZVtsZW5dKSkKLSAgICAgIGlzWE1MID0gWE1MX0ZBTFNFOwotCi0gICAgaWYgKCFtdXN0QmVY
TUwgJiYgaXNYTUxOUwotICAgICAgICAmJiAobGVuID4geG1sbnNMZW4gfHwgdXJpW2xlbl0gIT0g
eG1sbnNOYW1lc3BhY2VbbGVuXSkpCi0gICAgICBpc1hNTE5TID0gWE1MX0ZBTFNFOwotICB9Ci0g
IGlzWE1MID0gaXNYTUwgJiYgbGVuID09IHhtbExlbjsKLSAgaXNYTUxOUyA9IGlzWE1MTlMgJiYg
bGVuID09IHhtbG5zTGVuOwotCi0gIGlmIChtdXN0QmVYTUwgIT0gaXNYTUwpCi0gICAgcmV0dXJu
IG11c3RCZVhNTCA/IFhNTF9FUlJPUl9SRVNFUlZFRF9QUkVGSVhfWE1MCi0gICAgICAgICAgICAg
ICAgICAgICA6IFhNTF9FUlJPUl9SRVNFUlZFRF9OQU1FU1BBQ0VfVVJJOwotCi0gIGlmIChpc1hN
TE5TKQotICAgIHJldHVybiBYTUxfRVJST1JfUkVTRVJWRURfTkFNRVNQQUNFX1VSSTsKLQotICBp
ZiAobmFtZXNwYWNlU2VwYXJhdG9yKQotICAgIGxlbisrOwotICBpZiAoZnJlZUJpbmRpbmdMaXN0
KSB7Ci0gICAgYiA9IGZyZWVCaW5kaW5nTGlzdDsKLSAgICBpZiAobGVuID4gYi0+dXJpQWxsb2Mp
IHsKLSAgICAgIFhNTF9DaGFyICp0ZW1wID0gKFhNTF9DaGFyICopUkVBTExPQyhiLT51cmksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYTUxfQ2hhcikgKiAobGVuICsgRVhQQU5E
X1NQQVJFKSk7Ci0gICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PX01FTU9SWTsKLSAgICAgIGItPnVyaSA9IHRlbXA7Ci0gICAgICBiLT51cmlBbGxvYyA9
IGxlbiArIEVYUEFORF9TUEFSRTsKLSAgICB9Ci0gICAgZnJlZUJpbmRpbmdMaXN0ID0gYi0+bmV4
dFRhZ0JpbmRpbmc7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgYiA9IChCSU5ESU5HICopTUFMTE9DKHNp
emVvZihCSU5ESU5HKSk7Ci0gICAgaWYgKCFiKQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19N
RU1PUlk7Ci0gICAgYi0+dXJpID0gKFhNTF9DaGFyICopTUFMTE9DKHNpemVvZihYTUxfQ2hhcikg
KiAobGVuICsgRVhQQU5EX1NQQVJFKSk7Ci0gICAgaWYgKCFiLT51cmkpIHsKLSAgICAgIEZSRUUo
Yik7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICB9Ci0gICAgYi0+dXJp
QWxsb2MgPSBsZW4gKyBFWFBBTkRfU1BBUkU7Ci0gIH0KLSAgYi0+dXJpTGVuID0gbGVuOwotICBt
ZW1jcHkoYi0+dXJpLCB1cmksIGxlbiAqIHNpemVvZihYTUxfQ2hhcikpOwotICBpZiAobmFtZXNw
YWNlU2VwYXJhdG9yKQotICAgIGItPnVyaVtsZW4gLSAxXSA9IG5hbWVzcGFjZVNlcGFyYXRvcjsK
LSAgYi0+cHJlZml4ID0gcHJlZml4OwotICBiLT5hdHRJZCA9IGF0dElkOwotICBiLT5wcmV2UHJl
Zml4QmluZGluZyA9IHByZWZpeC0+YmluZGluZzsKLSAgLyogTlVMTCBiaW5kaW5nIHdoZW4gZGVm
YXVsdCBuYW1lc3BhY2UgdW5kZWNsYXJlZCAqLwotICBpZiAoKnVyaSA9PSBYTUxfVCgnXDAnKSAm
JiBwcmVmaXggPT0gJl9kdGQtPmRlZmF1bHRQcmVmaXgpCi0gICAgcHJlZml4LT5iaW5kaW5nID0g
TlVMTDsKLSAgZWxzZQotICAgIHByZWZpeC0+YmluZGluZyA9IGI7Ci0gIGItPm5leHRUYWdCaW5k
aW5nID0gKmJpbmRpbmdzUHRyOwotICAqYmluZGluZ3NQdHIgPSBiOwotICAvKiBpZiBhdHRJZCA9
PSBOVUxMIHRoZW4gd2UgYXJlIG5vdCBzdGFydGluZyBhIG5hbWVzcGFjZSBzY29wZSAqLwotICBp
ZiAoYXR0SWQgJiYgc3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikKLSAgICBzdGFydE5hbWVzcGFj
ZURlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIHByZWZpeC0+bmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZWZpeC0+YmluZGluZyA/IHVyaSA6IDApOwotICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7Ci19Ci0KLS8qIFRoZSBpZGVhIGhlcmUgaXMgdG8gYXZvaWQgdXNpbmcgc3RhY2sg
Zm9yIGVhY2ggQ0RBVEEgc2VjdGlvbiB3aGVuCi0gICB0aGUgd2hvbGUgZmlsZSBpcyBwYXJzZWQg
d2l0aCBvbmUgY2FsbC4KLSovCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAotY2RhdGFT
ZWN0aW9uUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZW5kUHRyKQotewotICBlbnVt
IFhNTF9FcnJvciByZXN1bHQgPSBkb0NkYXRhU2VjdGlvbihwYXJzZXIsIGVuY29kaW5nLCAmc3Rh
cnQsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUHRy
LCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKLSAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1Jf
Tk9ORSkKLSAgICByZXR1cm4gcmVzdWx0OwotICBpZiAoc3RhcnQpIHsKLSAgICBpZiAocGFyZW50
UGFyc2VyKSB7ICAvKiB3ZSBhcmUgcGFyc2luZyBhbiBleHRlcm5hbCBlbnRpdHkgKi8KLSAgICAg
IHByb2Nlc3NvciA9IGV4dGVybmFsRW50aXR5Q29udGVudFByb2Nlc3NvcjsKLSAgICAgIHJldHVy
biBleHRlcm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3IocGFyc2VyLCBzdGFydCwgZW5kLCBlbmRQ
dHIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHByb2Nlc3NvciA9IGNvbnRlbnRQcm9jZXNz
b3I7Ci0gICAgICByZXR1cm4gY29udGVudFByb2Nlc3NvcihwYXJzZXIsIHN0YXJ0LCBlbmQsIGVu
ZFB0cik7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIHN0YXJ0UHRyIGdl
dHMgc2V0IHRvIG5vbi1udWxsIGlmIHRoZSBzZWN0aW9uIGlzIGNsb3NlZCwgYW5kIHRvIG51bGwg
aWYKLSAgIHRoZSBzZWN0aW9uIGlzIG5vdCB5ZXQgY2xvc2VkLgotKi8KLXN0YXRpYyBlbnVtIFhN
TF9FcnJvcgotZG9DZGF0YVNlY3Rpb24oWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAg
ICBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnN0YXJ0
UHRyLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqKm5leHRQdHIsCi0gICAgICAgICAgICAgICBYTUxfQm9vbCBoYXZlTW9yZSkKLXsK
LSAgY29uc3QgY2hhciAqcyA9ICpzdGFydFB0cjsKLSAgY29uc3QgY2hhciAqKmV2ZW50UFA7Ci0g
IGNvbnN0IGNoYXIgKipldmVudEVuZFBQOwotICBpZiAoZW5jID09IGVuY29kaW5nKSB7Ci0gICAg
ZXZlbnRQUCA9ICZldmVudFB0cjsKLSAgICAqZXZlbnRQUCA9IHM7Ci0gICAgZXZlbnRFbmRQUCA9
ICZldmVudEVuZFB0cjsKLSAgfQotICBlbHNlIHsKLSAgICBldmVudFBQID0gJihvcGVuSW50ZXJu
YWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudFB0cik7Ci0gICAgZXZlbnRFbmRQUCA9ICYob3Blbklu
dGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRFbmRQdHIpOwotICB9Ci0gICpldmVudFBQID0g
czsKLSAgKnN0YXJ0UHRyID0gTlVMTDsKLQotICBmb3IgKDs7KSB7Ci0gICAgY29uc3QgY2hhciAq
bmV4dDsKLSAgICBpbnQgdG9rID0gWG1sQ2RhdGFTZWN0aW9uVG9rKGVuYywgcywgZW5kLCAmbmV4
dCk7Ci0gICAgKmV2ZW50RW5kUFAgPSBuZXh0OwotICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgY2Fz
ZSBYTUxfVE9LX0NEQVRBX1NFQ1RfQ0xPU0U6Ci0gICAgICBpZiAoZW5kQ2RhdGFTZWN0aW9uSGFu
ZGxlcikKLSAgICAgICAgZW5kQ2RhdGFTZWN0aW9uSGFuZGxlcihoYW5kbGVyQXJnKTsKLSNpZiAw
Ci0gICAgICAvKiBzZWUgY29tbWVudCB1bmRlciBYTUxfVE9LX0NEQVRBX1NFQ1RfT1BFTiAqLwot
ICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyRGF0YUhhbmRsZXIpCi0gICAgICAgIGNoYXJhY3RlckRh
dGFIYW5kbGVyKGhhbmRsZXJBcmcsIGRhdGFCdWYsIDApOwotI2VuZGlmCi0gICAgICBlbHNlIGlm
IChkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywg
bmV4dCk7Ci0gICAgICAqc3RhcnRQdHIgPSBuZXh0OwotICAgICAgKm5leHRQdHIgPSBuZXh0Owot
ICAgICAgaWYgKHBzX3BhcnNpbmcgPT0gWE1MX0ZJTklTSEVEKQotICAgICAgICByZXR1cm4gWE1M
X0VSUk9SX0FCT1JURUQ7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9O
RTsKLSAgICBjYXNlIFhNTF9UT0tfREFUQV9ORVdMSU5FOgotICAgICAgaWYgKGNoYXJhY3RlckRh
dGFIYW5kbGVyKSB7Ci0gICAgICAgIFhNTF9DaGFyIGMgPSAweEE7Ci0gICAgICAgIGNoYXJhY3Rl
ckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsICZjLCAxKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KGRlZmF1bHRIYW5kbGVyKQotICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jLCBzLCBu
ZXh0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1RPS19EQVRBX0NIQVJTOgotICAgICAg
ewotICAgICAgICBYTUxfQ2hhcmFjdGVyRGF0YUhhbmRsZXIgY2hhckRhdGFIYW5kbGVyID0gY2hh
cmFjdGVyRGF0YUhhbmRsZXI7Ci0gICAgICAgIGlmIChjaGFyRGF0YUhhbmRsZXIpIHsKLSAgICAg
ICAgICBpZiAoTVVTVF9DT05WRVJUKGVuYywgcykpIHsKLSAgICAgICAgICAgIGZvciAoOzspIHsK
LSAgICAgICAgICAgICAgSUNIQVIgKmRhdGFQdHIgPSAoSUNIQVIgKilkYXRhQnVmOwotICAgICAg
ICAgICAgICBYbWxDb252ZXJ0KGVuYywgJnMsIG5leHQsICZkYXRhUHRyLCAoSUNIQVIgKilkYXRh
QnVmRW5kKTsKLSAgICAgICAgICAgICAgKmV2ZW50RW5kUFAgPSBuZXh0OwotICAgICAgICAgICAg
ICBjaGFyRGF0YUhhbmRsZXIoaGFuZGxlckFyZywgZGF0YUJ1ZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpKGRhdGFQdHIgLSAoSUNIQVIgKilkYXRhQnVmKSk7Ci0gICAgICAg
ICAgICAgIGlmIChzID09IG5leHQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICpldmVudFBQID0gczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2hhckRhdGFIYW5kbGVyKGhhbmRsZXJBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKFhNTF9DaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KSgoWE1MX0NoYXIgKiluZXh0IC0gKFhNTF9DaGFyICopcykpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgIHJlcG9ydERlZmF1
bHQocGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBYTUxfVE9LX0lOVkFMSUQ6Ci0gICAgICAqZXZlbnRQUCA9IG5leHQ7Ci0gICAgICByZXR1cm4g
WE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoK
LSAgICAgIGlmIChoYXZlTW9yZSkgewotICAgICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBYTUxfRVJST1JfUEFS
VElBTF9DSEFSOwotICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgotICAgIGNhc2UgWE1MX1RPS19O
T05FOgotICAgICAgaWYgKGhhdmVNb3JlKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9VTkNMT1NFRF9DREFUQV9TRUNUSU9OOwotICAgIGRlZmF1bHQ6Ci0gICAgICAqZXZlbnRQUCA9
IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX1VORVhQRUNURURfU1RBVEU7Ci0gICAgfQot
Ci0gICAgKmV2ZW50UFAgPSBzID0gbmV4dDsKLSAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAg
ICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1
cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2FzZSBYTUxfRklOSVNIRUQ6Ci0gICAgICByZXR1cm4g
WE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgZGVmYXVsdDogOwotICAgIH0KLSAgfQotICAvKiBub3Qg
cmVhY2hlZCAqLwotfQotCi0jaWZkZWYgWE1MX0RURAotCi0vKiBUaGUgaWRlYSBoZXJlIGlzIHRv
IGF2b2lkIHVzaW5nIHN0YWNrIGZvciBlYWNoIElHTk9SRSBzZWN0aW9uIHdoZW4KLSAgIHRoZSB3
aG9sZSBmaWxlIGlzIHBhcnNlZCB3aXRoIG9uZSBjYWxsLgotKi8KLXN0YXRpYyBlbnVtIFhNTF9F
cnJvciBQVFJDQUxMCi1pZ25vcmVTZWN0aW9uUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAot
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICoqZW5kUHRyKQotewotICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBkb0lnbm9yZVNlY3Rp
b24ocGFyc2VyLCBlbmNvZGluZywgJnN0YXJ0LCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmRQdHIsIChYTUxfQm9vbCkhcHNfZmluYWxCdWZmZXIpOwot
ICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIGlm
IChzdGFydCkgewotICAgIHByb2Nlc3NvciA9IHByb2xvZ1Byb2Nlc3NvcjsKLSAgICByZXR1cm4g
cHJvbG9nUHJvY2Vzc29yKHBhcnNlciwgc3RhcnQsIGVuZCwgZW5kUHRyKTsKLSAgfQotICByZXR1
cm4gcmVzdWx0OwotfQotCi0vKiBzdGFydFB0ciBnZXRzIHNldCB0byBub24tbnVsbCBpcyB0aGUg
c2VjdGlvbiBpcyBjbG9zZWQsIGFuZCB0byBudWxsCi0gICBpZiB0aGUgc2VjdGlvbiBpcyBub3Qg
eWV0IGNsb3NlZC4KLSovCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IKLWRvSWdub3JlU2VjdGlvbihY
TUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jLAot
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipzdGFydFB0ciwKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIsCi0g
ICAgICAgICAgICAgICAgWE1MX0Jvb2wgaGF2ZU1vcmUpCi17Ci0gIGNvbnN0IGNoYXIgKm5leHQ7
Ci0gIGludCB0b2s7Ci0gIGNvbnN0IGNoYXIgKnMgPSAqc3RhcnRQdHI7Ci0gIGNvbnN0IGNoYXIg
KipldmVudFBQOwotICBjb25zdCBjaGFyICoqZXZlbnRFbmRQUDsKLSAgaWYgKGVuYyA9PSBlbmNv
ZGluZykgewotICAgIGV2ZW50UFAgPSAmZXZlbnRQdHI7Ci0gICAgKmV2ZW50UFAgPSBzOwotICAg
IGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgZXZlbnRQUCA9
ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQdHIpOwotICAgIGV2ZW50RW5k
UFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50RW5kUHRyKTsKLSAgfQot
ICAqZXZlbnRQUCA9IHM7Ci0gICpzdGFydFB0ciA9IE5VTEw7Ci0gIHRvayA9IFhtbElnbm9yZVNl
Y3Rpb25Ub2soZW5jLCBzLCBlbmQsICZuZXh0KTsKLSAgKmV2ZW50RW5kUFAgPSBuZXh0OwotICBz
d2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfSUdOT1JFX1NFQ1Q6Ci0gICAgaWYgKGRlZmF1
bHRIYW5kbGVyKQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0g
ICAgKnN0YXJ0UHRyID0gbmV4dDsKLSAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgaWYgKHBzX3Bh
cnNpbmcgPT0gWE1MX0ZJTklTSEVEKQotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOwot
ICAgIGVsc2UKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX0lO
VkFMSUQ6Ci0gICAgKmV2ZW50UFAgPSBuZXh0OwotICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJ
RF9UT0tFTjsKLSAgY2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKLSAgICBpZiAoaGF2ZU1vcmUp
IHsKLSAgICAgICpuZXh0UHRyID0gczsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAg
ICB9Ci0gICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7Ci0gIGNhc2UgWE1MX1RPS19Q
QVJUSUFMOgotICBjYXNlIFhNTF9UT0tfTk9ORToKLSAgICBpZiAoaGF2ZU1vcmUpIHsKLSAgICAg
ICpuZXh0UHRyID0gczsKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICB9Ci0gICAg
cmV0dXJuIFhNTF9FUlJPUl9TWU5UQVg7IC8qIFhNTF9FUlJPUl9VTkNMT1NFRF9JR05PUkVfU0VD
VElPTiAqLwotICBkZWZhdWx0OgotICAgICpldmVudFBQID0gbmV4dDsKLSAgICByZXR1cm4gWE1M
X0VSUk9SX1VORVhQRUNURURfU1RBVEU7Ci0gIH0KLSAgLyogbm90IHJlYWNoZWQgKi8KLX0KLQot
I2VuZGlmIC8qIFhNTF9EVEQgKi8KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1pbml0aWFsaXpl
RW5jb2RpbmcoWE1MX1BhcnNlciBwYXJzZXIpCi17Ci0gIGNvbnN0IGNoYXIgKnM7Ci0jaWZkZWYg
WE1MX1VOSUNPREUKLSAgY2hhciBlbmNvZGluZ0J1ZlsxMjhdOwotICBpZiAoIXByb3RvY29sRW5j
b2RpbmdOYW1lKQotICAgIHMgPSBOVUxMOwotICBlbHNlIHsKLSAgICBpbnQgaTsKLSAgICBmb3Ig
KGkgPSAwOyBwcm90b2NvbEVuY29kaW5nTmFtZVtpXTsgaSsrKSB7Ci0gICAgICBpZiAoaSA9PSBz
aXplb2YoZW5jb2RpbmdCdWYpIC0gMQotICAgICAgICAgIHx8IChwcm90b2NvbEVuY29kaW5nTmFt
ZVtpXSAmIH4weDdmKSAhPSAwKSB7Ci0gICAgICAgIGVuY29kaW5nQnVmWzBdID0gJ1wwJzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbmNvZGluZ0J1ZltpXSA9IChjaGFyKXByb3Rv
Y29sRW5jb2RpbmdOYW1lW2ldOwotICAgIH0KLSAgICBlbmNvZGluZ0J1ZltpXSA9ICdcMCc7Ci0g
ICAgcyA9IGVuY29kaW5nQnVmOwotICB9Ci0jZWxzZQotICBzID0gcHJvdG9jb2xFbmNvZGluZ05h
bWU7Ci0jZW5kaWYKLSAgaWYgKChucyA/IFhtbEluaXRFbmNvZGluZ05TIDogWG1sSW5pdEVuY29k
aW5nKSgmaW5pdEVuY29kaW5nLCAmZW5jb2RpbmcsIHMpKQotICAgIHJldHVybiBYTUxfRVJST1Jf
Tk9ORTsKLSAgcmV0dXJuIGhhbmRsZVVua25vd25FbmNvZGluZyhwYXJzZXIsIHByb3RvY29sRW5j
b2RpbmdOYW1lKTsKLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1wcm9jZXNzWG1sRGVjbChY
TUxfUGFyc2VyIHBhcnNlciwgaW50IGlzR2VuZXJhbFRleHRFbnRpdHksCi0gICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpuZXh0KQotewotICBjb25zdCBjaGFyICplbmNv
ZGluZ05hbWUgPSBOVUxMOwotICBjb25zdCBYTUxfQ2hhciAqc3RvcmVkRW5jTmFtZSA9IE5VTEw7
Ci0gIGNvbnN0IEVOQ09ESU5HICpuZXdFbmNvZGluZyA9IE5VTEw7Ci0gIGNvbnN0IGNoYXIgKnZl
cnNpb24gPSBOVUxMOwotICBjb25zdCBjaGFyICp2ZXJzaW9uZW5kOwotICBjb25zdCBYTUxfQ2hh
ciAqc3RvcmVkdmVyc2lvbiA9IE5VTEw7Ci0gIGludCBzdGFuZGFsb25lID0gLTE7Ci0gIGlmICgh
KG5zCi0gICAgICAgID8gWG1sUGFyc2VYbWxEZWNsTlMKLSAgICAgICAgOiBYbWxQYXJzZVhtbERl
Y2wpKGlzR2VuZXJhbFRleHRFbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv
ZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50UHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAmdmVyc2lvbmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNvZGluZ05h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3RW5jb2RpbmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAmc3RhbmRhbG9uZSkpIHsKLSAgICBpZiAoaXNHZW5lcmFsVGV4dEVu
dGl0eSkKLSAgICAgIHJldHVybiBYTUxfRVJST1JfVEVYVF9ERUNMOwotICAgIGVsc2UKLSAgICAg
IHJldHVybiBYTUxfRVJST1JfWE1MX0RFQ0w7Ci0gIH0KLSAgaWYgKCFpc0dlbmVyYWxUZXh0RW50
aXR5ICYmIHN0YW5kYWxvbmUgPT0gMSkgewotICAgIF9kdGQtPnN0YW5kYWxvbmUgPSBYTUxfVFJV
RTsKLSNpZmRlZiBYTUxfRFRECi0gICAgaWYgKHBhcmFtRW50aXR5UGFyc2luZyA9PSBYTUxfUEFS
QU1fRU5USVRZX1BBUlNJTkdfVU5MRVNTX1NUQU5EQUxPTkUpCi0gICAgICBwYXJhbUVudGl0eVBh
cnNpbmcgPSBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfTkVWRVI7Ci0jZW5kaWYgLyogWE1MX0RU
RCAqLwotICB9Ci0gIGlmICh4bWxEZWNsSGFuZGxlcikgewotICAgIGlmIChlbmNvZGluZ05hbWUg
IT0gTlVMTCkgewotICAgICAgc3RvcmVkRW5jTmFtZSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcDJQ
b29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdOYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ05hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBYbWxOYW1lTGVuZ3RoKGVuY29kaW5nLCBlbmNv
ZGluZ05hbWUpKTsKLSAgICAgIGlmICghc3RvcmVkRW5jTmFtZSkKLSAgICAgICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICBwb29sRmluaXNoKCZ0ZW1wMlBvb2wpOwot
ICAgIH0KLSAgICBpZiAodmVyc2lvbikgewotICAgICAgc3RvcmVkdmVyc2lvbiA9IHBvb2xTdG9y
ZVN0cmluZygmdGVtcDJQb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmVuZCAtIGVu
Y29kaW5nLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgaWYgKCFzdG9yZWR2ZXJzaW9uKQotICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICB9Ci0gICAgeG1sRGVjbEhhbmRs
ZXIoaGFuZGxlckFyZywgc3RvcmVkdmVyc2lvbiwgc3RvcmVkRW5jTmFtZSwgc3RhbmRhbG9uZSk7
Ci0gIH0KLSAgZWxzZSBpZiAoZGVmYXVsdEhhbmRsZXIpCi0gICAgcmVwb3J0RGVmYXVsdChwYXJz
ZXIsIGVuY29kaW5nLCBzLCBuZXh0KTsKLSAgaWYgKHByb3RvY29sRW5jb2RpbmdOYW1lID09IE5V
TEwpIHsKLSAgICBpZiAobmV3RW5jb2RpbmcpIHsKLSAgICAgIGlmIChuZXdFbmNvZGluZy0+bWlu
Qnl0ZXNQZXJDaGFyICE9IGVuY29kaW5nLT5taW5CeXRlc1BlckNoYXIpIHsKLSAgICAgICAgZXZl
bnRQdHIgPSBlbmNvZGluZ05hbWU7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfSU5DT1JSRUNU
X0VOQ09ESU5HOwotICAgICAgfQotICAgICAgZW5jb2RpbmcgPSBuZXdFbmNvZGluZzsKLSAgICB9
Ci0gICAgZWxzZSBpZiAoZW5jb2RpbmdOYW1lKSB7Ci0gICAgICBlbnVtIFhNTF9FcnJvciByZXN1
bHQ7Ci0gICAgICBpZiAoIXN0b3JlZEVuY05hbWUpIHsKLSAgICAgICAgc3RvcmVkRW5jTmFtZSA9
IHBvb2xTdG9yZVN0cmluZygKLSAgICAgICAgICAmdGVtcDJQb29sLCBlbmNvZGluZywgZW5jb2Rp
bmdOYW1lLAotICAgICAgICAgIGVuY29kaW5nTmFtZSArIFhtbE5hbWVMZW5ndGgoZW5jb2Rpbmcs
IGVuY29kaW5nTmFtZSkpOwotICAgICAgICBpZiAoIXN0b3JlZEVuY05hbWUpCi0gICAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSBoYW5k
bGVVbmtub3duRW5jb2RpbmcocGFyc2VyLCBzdG9yZWRFbmNOYW1lKTsKLSAgICAgIHBvb2xDbGVh
cigmdGVtcDJQb29sKTsKLSAgICAgIGlmIChyZXN1bHQgPT0gWE1MX0VSUk9SX1VOS05PV05fRU5D
T0RJTkcpCi0gICAgICAgIGV2ZW50UHRyID0gZW5jb2RpbmdOYW1lOwotICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gIH0KLQotICBpZiAoc3RvcmVkRW5jTmFtZSB8fCBzdG9yZWR2ZXJzaW9u
KQotICAgIHBvb2xDbGVhcigmdGVtcDJQb29sKTsKLQotICByZXR1cm4gWE1MX0VSUk9SX05PTkU7
Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvcgotaGFuZGxlVW5rbm93bkVuY29kaW5nKFhNTF9Q
YXJzZXIgcGFyc2VyLCBjb25zdCBYTUxfQ2hhciAqZW5jb2RpbmdOYW1lKQotewotICBpZiAodW5r
bm93bkVuY29kaW5nSGFuZGxlcikgewotICAgIFhNTF9FbmNvZGluZyBpbmZvOwotICAgIGludCBp
OwotICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgIGluZm8ubWFwW2ldID0gLTE7
Ci0gICAgaW5mby5jb252ZXJ0ID0gTlVMTDsKLSAgICBpbmZvLmRhdGEgPSBOVUxMOwotICAgIGlu
Zm8ucmVsZWFzZSA9IE5VTEw7Ci0gICAgaWYgKHVua25vd25FbmNvZGluZ0hhbmRsZXIodW5rbm93
bkVuY29kaW5nSGFuZGxlckRhdGEsIGVuY29kaW5nTmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaW5mbykpIHsKLSAgICAgIEVOQ09ESU5HICplbmM7Ci0gICAgICB1bmtub3du
RW5jb2RpbmdNZW0gPSBNQUxMT0MoWG1sU2l6ZU9mVW5rbm93bkVuY29kaW5nKCkpOwotICAgICAg
aWYgKCF1bmtub3duRW5jb2RpbmdNZW0pIHsKLSAgICAgICAgaWYgKGluZm8ucmVsZWFzZSkKLSAg
ICAgICAgICBpbmZvLnJlbGVhc2UoaW5mby5kYXRhKTsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7Ci0gICAgICB9Ci0gICAgICBlbmMgPSAobnMKLSAgICAgICAgICAgICA/IFht
bEluaXRVbmtub3duRW5jb2RpbmdOUwotICAgICAgICAgICAgIDogWG1sSW5pdFVua25vd25FbmNv
ZGluZykodW5rbm93bkVuY29kaW5nTWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mby5tYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmZvLmNvbnZlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvLmRhdGEpOwotICAgICAgaWYgKGVuYykgewotICAgICAgICB1bmtub3duRW5jb2RpbmdEYXRh
ID0gaW5mby5kYXRhOwotICAgICAgICB1bmtub3duRW5jb2RpbmdSZWxlYXNlID0gaW5mby5yZWxl
YXNlOwotICAgICAgICBlbmNvZGluZyA9IGVuYzsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9O
T05FOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoaW5mby5yZWxlYXNlICE9IE5VTEwpCi0gICAg
ICBpbmZvLnJlbGVhc2UoaW5mby5kYXRhKTsKLSAgfQotICByZXR1cm4gWE1MX0VSUk9SX1VOS05P
V05fRU5DT0RJTkc7Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1wcm9sb2dJ
bml0UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQotewotICBlbnVtIFhNTF9FcnJvciBy
ZXN1bHQgPSBpbml0aWFsaXplRW5jb2RpbmcocGFyc2VyKTsKLSAgaWYgKHJlc3VsdCAhPSBYTUxf
RVJST1JfTk9ORSkKLSAgICByZXR1cm4gcmVzdWx0OwotICBwcm9jZXNzb3IgPSBwcm9sb2dQcm9j
ZXNzb3I7Ci0gIHJldHVybiBwcm9sb2dQcm9jZXNzb3IocGFyc2VyLCBzLCBlbmQsIG5leHRQdHIp
OwotfQotCi0jaWZkZWYgWE1MX0RURAotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAot
ZXh0ZXJuYWxQYXJFbnRJbml0UHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKipuZXh0UHRyKQotewotICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBpbml0aWFsaXpl
RW5jb2RpbmcocGFyc2VyKTsKLSAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gIC8qIHdlIGtub3cgbm93IHRoYXQgWE1MX1BhcnNlKEJ1ZmZlcikg
aGFzIGJlZW4gY2FsbGVkLAotICAgICBzbyB3ZSBjb25zaWRlciB0aGUgZXh0ZXJuYWwgcGFyYW1l
dGVyIGVudGl0eSByZWFkICovCi0gIF9kdGQtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9UUlVFOwot
Ci0gIGlmIChwcm9sb2dTdGF0ZS5pbkVudGl0eVZhbHVlKSB7Ci0gICAgcHJvY2Vzc29yID0gZW50
aXR5VmFsdWVJbml0UHJvY2Vzc29yOwotICAgIHJldHVybiBlbnRpdHlWYWx1ZUluaXRQcm9jZXNz
b3IocGFyc2VyLCBzLCBlbmQsIG5leHRQdHIpOwotICB9Ci0gIGVsc2UgewotICAgIHByb2Nlc3Nv
ciA9IGV4dGVybmFsUGFyRW50UHJvY2Vzc29yOwotICAgIHJldHVybiBleHRlcm5hbFBhckVudFBy
b2Nlc3NvcihwYXJzZXIsIHMsIGVuZCwgbmV4dFB0cik7Ci0gIH0KLX0KLQotc3RhdGljIGVudW0g
WE1MX0Vycm9yIFBUUkNBTEwKLWVudGl0eVZhbHVlSW5pdFByb2Nlc3NvcihYTUxfUGFyc2VyIHBh
cnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqbmV4dFB0cikKLXsKLSAgaW50IHRvazsKLSAgY29uc3QgY2hhciAqc3Rh
cnQgPSBzOwotICBjb25zdCBjaGFyICpuZXh0ID0gc3RhcnQ7Ci0gIGV2ZW50UHRyID0gc3RhcnQ7
Ci0KLSAgZm9yICg7OykgewotICAgIHRvayA9IFhtbFByb2xvZ1RvayhlbmNvZGluZywgc3RhcnQs
IGVuZCwgJm5leHQpOwotICAgIGV2ZW50RW5kUHRyID0gbmV4dDsKLSAgICBpZiAodG9rIDw9IDAp
IHsKLSAgICAgIGlmICghcHNfZmluYWxCdWZmZXIgJiYgdG9rICE9IFhNTF9UT0tfSU5WQUxJRCkg
ewotICAgICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsK
LSAgICAgIH0KLSAgICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgICBjYXNlIFhNTF9UT0tfSU5WQUxJ
RDoKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICAgICAgY2FzZSBY
TUxfVE9LX1BBUlRJQUw6Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47
Ci0gICAgICBjYXNlIFhNTF9UT0tfUEFSVElBTF9DSEFSOgotICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX1BBUlRJQUxfQ0hBUjsKLSAgICAgIGNhc2UgWE1MX1RPS19OT05FOiAgIC8qIHN0YXJ0ID09
IGVuZCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAv
KiBmb3VuZCBlbmQgb2YgZW50aXR5IHZhbHVlIC0gY2FuIHN0b3JlIGl0IG5vdyAqLwotICAgICAg
cmV0dXJuIHN0b3JlRW50aXR5VmFsdWUocGFyc2VyLCBlbmNvZGluZywgcywgZW5kKTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodG9rID09IFhNTF9UT0tfWE1MX0RFQ0wpIHsKLSAgICAgIGVudW0gWE1M
X0Vycm9yIHJlc3VsdDsKLSAgICAgIHJlc3VsdCA9IHByb2Nlc3NYbWxEZWNsKHBhcnNlciwgMCwg
c3RhcnQsIG5leHQpOwotICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIHN3aXRjaCAocHNfcGFyc2luZykgewotICAgICAgY2Fz
ZSBYTUxfU1VTUEVOREVEOgotICAgICAgICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9ORTsKLSAgICAgIGNhc2UgWE1MX0ZJTklTSEVEOgotICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAqbmV4dFB0ciA9
IG5leHQ7Ci0gICAgICB9Ci0gICAgICAvKiBzdG9wIHNjYW5uaW5nIGZvciB0ZXh0IGRlY2xhcmF0
aW9uIC0gd2UgZm91bmQgb25lICovCi0gICAgICBwcm9jZXNzb3IgPSBlbnRpdHlWYWx1ZVByb2Nl
c3NvcjsKLSAgICAgIHJldHVybiBlbnRpdHlWYWx1ZVByb2Nlc3NvcihwYXJzZXIsIG5leHQsIGVu
ZCwgbmV4dFB0cik7Ci0gICAgfQotICAgIC8qIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBi
dWZmZXIsIHRoaXMgd291bGQgY2F1c2UgWG1sUHJvbG9nVG9rIHRvCi0gICAgICAgcmV0dXJuIFhN
TF9UT0tfTk9ORSBvbiB0aGUgbmV4dCBjYWxsLCB3aGljaCB3b3VsZCB0aGVuIGNhdXNlIHRoZQot
ICAgICAgIGZ1bmN0aW9uIHRvIGV4aXQgd2l0aCAqbmV4dFB0ciBzZXQgdG8gcyAtIHRoYXQgaXMg
d2hhdCB3ZSB3YW50IGZvciBvdGhlcgotICAgICAgIHRva2VucywgYnV0IG5vdCBmb3IgdGhlIEJP
TSAtIHdlIHdvdWxkIHJhdGhlciBsaWtlIHRvIHNraXAgaXQ7Ci0gICAgICAgdGhlbiwgd2hlbiB0
aGlzIHJvdXRpbmUgaXMgZW50ZXJlZCB0aGUgbmV4dCB0aW1lLCBYbWxQcm9sb2dUb2sgd2lsbAot
ICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQsIHNpbmNlIHRoZSBCT00gaXMgc3RpbGwgaW4g
dGhlIGJ1ZmZlcgotICAgICovCi0gICAgZWxzZSBpZiAodG9rID09IFhNTF9UT0tfQk9NICYmIG5l
eHQgPT0gZW5kICYmICFwc19maW5hbEJ1ZmZlcikgewotICAgICAgKm5leHRQdHIgPSBuZXh0Owot
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0KLSAgICBzdGFydCA9IG5leHQ7Ci0g
ICAgZXZlbnRQdHIgPSBzdGFydDsKLSAgfQotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRS
Q0FMTAotZXh0ZXJuYWxQYXJFbnRQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5l
eHRQdHIpCi17Ci0gIGNvbnN0IGNoYXIgKm5leHQgPSBzOwotICBpbnQgdG9rOwotCi0gIHRvayA9
IFhtbFByb2xvZ1RvayhlbmNvZGluZywgcywgZW5kLCAmbmV4dCk7Ci0gIGlmICh0b2sgPD0gMCkg
ewotICAgIGlmICghcHNfZmluYWxCdWZmZXIgJiYgdG9rICE9IFhNTF9UT0tfSU5WQUxJRCkgewot
ICAgICAgKm5leHRQdHIgPSBzOwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIH0K
LSAgICBzd2l0Y2ggKHRvaykgewotICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgot
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTjsKLSAgICBjYXNlIFhNTF9UT0tf
UEFSVElBTF9DSEFSOgotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVI7Ci0gICAg
Y2FzZSBYTUxfVE9LX05PTkU6ICAgLyogc3RhcnQgPT0gZW5kICovCi0gICAgZGVmYXVsdDoKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvKiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBuZXh0IHN0
YWdlLCBpLmUuIGRvUHJvbG9nIHRvIGJlIHBhc3NlZCBYTUxfVE9LX0JPTS4KLSAgICAgSG93ZXZl
ciwgd2hlbiBwYXJzaW5nIGFuIGV4dGVybmFsIHN1YnNldCwgZG9Qcm9sb2cgd2lsbCBub3QgYWNj
ZXB0IGEgQk9NCi0gICAgIGFzIHZhbGlkLCBhbmQgcmVwb3J0IGEgc3ludGF4IGVycm9yLCBzbyB3
ZSBoYXZlIHRvIHNraXAgdGhlIEJPTQotICAqLwotICBlbHNlIGlmICh0b2sgPT0gWE1MX1RPS19C
T00pIHsKLSAgICBzID0gbmV4dDsKLSAgICB0b2sgPSBYbWxQcm9sb2dUb2soZW5jb2RpbmcsIHMs
IGVuZCwgJm5leHQpOwotICB9Ci0KLSAgcHJvY2Vzc29yID0gcHJvbG9nUHJvY2Vzc29yOwotICBy
ZXR1cm4gZG9Qcm9sb2cocGFyc2VyLCBlbmNvZGluZywgcywgZW5kLCB0b2ssIG5leHQsCi0gICAg
ICAgICAgICAgICAgICBuZXh0UHRyLCAoWE1MX0Jvb2wpIXBzX2ZpbmFsQnVmZmVyKTsKLX0KLQot
c3RhdGljIGVudW0gWE1MX0Vycm9yIFBUUkNBTEwKLWVudGl0eVZhbHVlUHJvY2Vzc29yKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKLSAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKipuZXh0UHRyKQotewotICBjb25zdCBjaGFyICpzdGFydCA9IHM7Ci0gIGNvbnN0
IGNoYXIgKm5leHQgPSBzOwotICBjb25zdCBFTkNPRElORyAqZW5jID0gZW5jb2Rpbmc7Ci0gIGlu
dCB0b2s7Ci0KLSAgZm9yICg7OykgewotICAgIHRvayA9IFhtbFByb2xvZ1RvayhlbmMsIHN0YXJ0
LCBlbmQsICZuZXh0KTsKLSAgICBpZiAodG9rIDw9IDApIHsKLSAgICAgIGlmICghcHNfZmluYWxC
dWZmZXIgJiYgdG9rICE9IFhNTF9UT0tfSU5WQUxJRCkgewotICAgICAgICAqbmV4dFB0ciA9IHM7
Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAgIH0KLSAgICAgIHN3aXRjaCAo
dG9rKSB7Ci0gICAgICBjYXNlIFhNTF9UT0tfSU5WQUxJRDoKLSAgICAgICAgcmV0dXJuIFhNTF9F
UlJPUl9JTlZBTElEX1RPS0VOOwotICAgICAgY2FzZSBYTUxfVE9LX1BBUlRJQUw6Ci0gICAgICAg
IHJldHVybiBYTUxfRVJST1JfVU5DTE9TRURfVE9LRU47Ci0gICAgICBjYXNlIFhNTF9UT0tfUEFS
VElBTF9DSEFSOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUjsKLSAgICAg
IGNhc2UgWE1MX1RPS19OT05FOiAgIC8qIHN0YXJ0ID09IGVuZCAqLwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAvKiBmb3VuZCBlbmQgb2YgZW50aXR5IHZh
bHVlIC0gY2FuIHN0b3JlIGl0IG5vdyAqLwotICAgICAgcmV0dXJuIHN0b3JlRW50aXR5VmFsdWUo
cGFyc2VyLCBlbmMsIHMsIGVuZCk7Ci0gICAgfQotICAgIHN0YXJ0ID0gbmV4dDsKLSAgfQotfQot
Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IgUFRSQ0FMTAot
cHJvbG9nUHJvY2Vzc29yKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnMsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyKQotewotICBjb25zdCBjaGFyICpuZXh0ID0gczsKLSAg
aW50IHRvayA9IFhtbFByb2xvZ1RvayhlbmNvZGluZywgcywgZW5kLCAmbmV4dCk7Ci0gIHJldHVy
biBkb1Byb2xvZyhwYXJzZXIsIGVuY29kaW5nLCBzLCBlbmQsIHRvaywgbmV4dCwKLSAgICAgICAg
ICAgICAgICAgIG5leHRQdHIsIChYTUxfQm9vbCkhcHNfZmluYWxCdWZmZXIpOwotfQotCi1zdGF0
aWMgZW51bSBYTUxfRXJyb3IKLWRvUHJvbG9nKFhNTF9QYXJzZXIgcGFyc2VyLAotICAgICAgICAg
Y29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnMsCi0gICAgICAgICBj
b25zdCBjaGFyICplbmQsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAq
bmV4dCwKLSAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0UHRyLAotICAgICAgICAgWE1MX0Jvb2wg
aGF2ZU1vcmUpCi17Ci0jaWZkZWYgWE1MX0RURAotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgZXh0
ZXJuYWxTdWJzZXROYW1lW10gPSB7IEFTQ0lJX0hBU0ggLCAnXDAnIH07Ci0jZW5kaWYgLyogWE1M
X0RURCAqLwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVDREFUQVtdID0KLSAgICAgIHsg
QVNDSUlfQywgQVNDSUlfRCwgQVNDSUlfQSwgQVNDSUlfVCwgQVNDSUlfQSwgJ1wwJyB9OwotICBz
dGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVJRFtdID0geyBBU0NJSV9JLCBBU0NJSV9ELCAnXDAn
IH07Ci0gIHN0YXRpYyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEUkVGW10gPQotICAgICAgeyBBU0NJ
SV9JLCBBU0NJSV9ELCBBU0NJSV9SLCBBU0NJSV9FLCBBU0NJSV9GLCAnXDAnIH07Ci0gIHN0YXRp
YyBjb25zdCBYTUxfQ2hhciBhdHlwZUlEUkVGU1tdID0KLSAgICAgIHsgQVNDSUlfSSwgQVNDSUlf
RCwgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfRiwgQVNDSUlfUywgJ1wwJyB9OwotICBzdGF0aWMg
Y29uc3QgWE1MX0NoYXIgYXR5cGVFTlRJVFlbXSA9Ci0gICAgICB7IEFTQ0lJX0UsIEFTQ0lJX04s
IEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX1QsIEFTQ0lJX1ksICdcMCcgfTsKLSAgc3RhdGljIGNv
bnN0IFhNTF9DaGFyIGF0eXBlRU5USVRJRVNbXSA9IHsgQVNDSUlfRSwgQVNDSUlfTiwKLSAgICAg
IEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX0UsIEFTQ0lJX1MsICdc
MCcgfTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGF0eXBlTk1UT0tFTltdID0gewotICAgICAg
QVNDSUlfTiwgQVNDSUlfTSwgQVNDSUlfVCwgQVNDSUlfTywgQVNDSUlfSywgQVNDSUlfRSwgQVND
SUlfTiwgJ1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgYXR5cGVOTVRPS0VOU1tdID0g
eyBBU0NJSV9OLCBBU0NJSV9NLCBBU0NJSV9ULAotICAgICAgQVNDSUlfTywgQVNDSUlfSywgQVND
SUlfRSwgQVNDSUlfTiwgQVNDSUlfUywgJ1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIg
bm90YXRpb25QcmVmaXhbXSA9IHsgQVNDSUlfTiwgQVNDSUlfTywgQVNDSUlfVCwKLSAgICAgIEFT
Q0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX08sIEFTQ0lJX04sIEFTQ0lJX0xQQVJFTiwg
J1wwJyB9OwotICBzdGF0aWMgY29uc3QgWE1MX0NoYXIgZW51bVZhbHVlU2VwW10gPSB7IEFTQ0lJ
X1BJUEUsICdcMCcgfTsKLSAgc3RhdGljIGNvbnN0IFhNTF9DaGFyIGVudW1WYWx1ZVN0YXJ0W10g
PSB7IEFTQ0lJX0xQQVJFTiwgJ1wwJyB9OwotCi0gIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGly
ZWN0aW9uICovCi0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7Ci0KLSAgY29uc3QgY2hhciAqKmV2
ZW50UFA7Ci0gIGNvbnN0IGNoYXIgKipldmVudEVuZFBQOwotICBlbnVtIFhNTF9Db250ZW50X1F1
YW50IHF1YW50OwotCi0gIGlmIChlbmMgPT0gZW5jb2RpbmcpIHsKLSAgICBldmVudFBQID0gJmV2
ZW50UHRyOwotICAgIGV2ZW50RW5kUFAgPSAmZXZlbnRFbmRQdHI7Ci0gIH0KLSAgZWxzZSB7Ci0g
ICAgZXZlbnRQUCA9ICYob3BlbkludGVybmFsRW50aXRpZXMtPmludGVybmFsRXZlbnRQdHIpOwot
ICAgIGV2ZW50RW5kUFAgPSAmKG9wZW5JbnRlcm5hbEVudGl0aWVzLT5pbnRlcm5hbEV2ZW50RW5k
UHRyKTsKLSAgfQotCi0gIGZvciAoOzspIHsKLSAgICBpbnQgcm9sZTsKLSAgICBYTUxfQm9vbCBo
YW5kbGVEZWZhdWx0ID0gWE1MX1RSVUU7Ci0gICAgKmV2ZW50UFAgPSBzOwotICAgICpldmVudEVu
ZFBQID0gbmV4dDsKLSAgICBpZiAodG9rIDw9IDApIHsKLSAgICAgIGlmIChoYXZlTW9yZSAmJiB0
b2sgIT0gWE1MX1RPS19JTlZBTElEKSB7Ci0gICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAg
cmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgc3dpdGNoICh0b2spIHsKLSAg
ICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgICAqZXZlbnRQUCA9IG5leHQ7Ci0gICAg
ICAgIHJldHVybiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTjsKLSAgICAgIGNhc2UgWE1MX1RPS19Q
QVJUSUFMOgotICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOOwotICAgICAg
Y2FzZSBYTUxfVE9LX1BBUlRJQUxfQ0hBUjoKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9QQVJU
SUFMX0NIQVI7Ci0gICAgICBjYXNlIC1YTUxfVE9LX1BST0xPR19TOgotICAgICAgICB0b2sgPSAt
dG9rOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWE1MX1RPS19OT05FOgotI2lmZGVmIFhN
TF9EVEQKLSAgICAgICAgLyogZm9yIGludGVybmFsIFBFIE5PVCByZWZlcmVuY2VkIGJldHdlZW4g
ZGVjbGFyYXRpb25zICovCi0gICAgICAgIGlmIChlbmMgIT0gZW5jb2RpbmcgJiYgIW9wZW5JbnRl
cm5hbEVudGl0aWVzLT5iZXR3ZWVuRGVjbCkgewotICAgICAgICAgICpuZXh0UHRyID0gczsKLSAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgICAgIH0KLSAgICAgICAgLyogV0ZD
OiBQRSBCZXR3ZWVuIERlY2xhcmF0aW9ucyAtIG11c3QgY2hlY2sgdGhhdCBQRSBjb250YWlucwot
ICAgICAgICAgICBjb21wbGV0ZSBtYXJrdXAsIG5vdCBvbmx5IGZvciBleHRlcm5hbCBQRXMsIGJ1
dCBhbHNvIGZvcgotICAgICAgICAgICBpbnRlcm5hbCBQRXMgaWYgdGhlIHJlZmVyZW5jZSBvY2N1
cnMgYmV0d2VlbiBkZWNsYXJhdGlvbnMuCi0gICAgICAgICovCi0gICAgICAgIGlmIChpc1BhcmFt
RW50aXR5IHx8IGVuYyAhPSBlbmNvZGluZykgewotICAgICAgICAgIGlmIChYbWxUb2tlblJvbGUo
JnByb2xvZ1N0YXRlLCBYTUxfVE9LX05PTkUsIGVuZCwgZW5kLCBlbmMpCi0gICAgICAgICAgICAg
ID09IFhNTF9ST0xFX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9JTkNPTVBM
RVRFX1BFOwotICAgICAgICAgICpuZXh0UHRyID0gczsKLSAgICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9fRUxFTUVOVFM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0b2sgPSAt
dG9rOwotICAgICAgICBuZXh0ID0gZW5kOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcm9sZSA9IFhtbFRva2VuUm9sZSgmcHJvbG9nU3RhdGUsIHRvaywgcywgbmV4dCwgZW5j
KTsKLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIFhNTF9ST0xFX1hNTF9ERUNMOgotICAg
ICAgewotICAgICAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQgPSBwcm9jZXNzWG1sRGVjbChwYXJz
ZXIsIDAsIHMsIG5leHQpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFhNTF9FUlJPUl9OT05FKQot
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIGVuYyA9IGVuY29kaW5nOwotICAgICAg
ICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBYTUxfUk9MRV9ET0NUWVBFX05BTUU6Ci0gICAgICBpZiAoc3RhcnREb2N0eXBlRGVjbEhh
bmRsZXIpIHsKLSAgICAgICAgZG9jdHlwZU5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29s
LCBlbmMsIHMsIG5leHQpOwotICAgICAgICBpZiAoIWRvY3R5cGVOYW1lKQotICAgICAgICAgIHJl
dHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7
Ci0gICAgICAgIGRvY3R5cGVQdWJpZCA9IE5VTEw7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBY
TUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBkb2N0eXBlU3lzaWQgPSBOVUxMOyAvKiBhbHdheXMg
aW5pdGlhbGl6ZSB0byBOVUxMICovCi0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0RP
Q1RZUEVfSU5URVJOQUxfU1VCU0VUOgotICAgICAgaWYgKHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVy
KSB7Ci0gICAgICAgIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKGhhbmRsZXJBcmcsIGRvY3R5cGVO
YW1lLCBkb2N0eXBlU3lzaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3R5
cGVQdWJpZCwgMSk7Ci0gICAgICAgIGRvY3R5cGVOYW1lID0gTlVMTDsKLSAgICAgICAgcG9vbENs
ZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAg
ICB9Ci0gICAgICBicmVhazsKLSNpZmRlZiBYTUxfRFRECi0gICAgY2FzZSBYTUxfUk9MRV9URVhU
X0RFQ0w6Ci0gICAgICB7Ci0gICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IHByb2Nlc3NY
bWxEZWNsKHBhcnNlciwgMSwgcywgbmV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VS
Uk9SX05PTkUpCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgZW5jID0gZW5jb2Rp
bmc7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBi
cmVhazsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgY2FzZSBYTUxfUk9MRV9ET0NUWVBFX1BV
QkxJQ19JRDoKLSNpZmRlZiBYTUxfRFRECi0gICAgICB1c2VGb3JlaWduRFREID0gWE1MX0ZBTFNF
OwotICAgICAgZGVjbEVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0ZC0+cGFyYW1FbnRpdGllcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU3Vic2V0TmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihFTlRJVFkpKTsKLSAgICAgIGlmICgh
ZGVjbEVudGl0eSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0jZW5kaWYg
LyogWE1MX0RURCAqLwotICAgICAgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBYTUxfVFJVRTsK
LSAgICAgIGlmIChzdGFydERvY3R5cGVEZWNsSGFuZGxlcikgewotICAgICAgICBYTUxfQ2hhciAq
cHViSWQ7Ci0gICAgICAgIGlmICghWG1sSXNQdWJsaWNJZChlbmMsIHMsIG5leHQsIGV2ZW50UFAp
KQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfUFVCTElDSUQ7Ci0gICAgICAgIHB1YklkID0g
cG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmICghcHVi
SWQpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIG5vcm1h
bGl6ZVB1YmxpY0lkKHB1YklkKTsKLSAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOwotICAg
ICAgICBkb2N0eXBlUHViaWQgPSBwdWJJZDsKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9G
QUxTRTsKLSAgICAgICAgZ290byBhbHJlYWR5Q2hlY2tlZDsKLSAgICAgIH0KLSAgICAgIC8qIGZh
bGwgdGhyb3VnaCAqLwotICAgIGNhc2UgWE1MX1JPTEVfRU5USVRZX1BVQkxJQ19JRDoKLSAgICAg
IGlmICghWG1sSXNQdWJsaWNJZChlbmMsIHMsIG5leHQsIGV2ZW50UFApKQotICAgICAgICByZXR1
cm4gWE1MX0VSUk9SX1BVQkxJQ0lEOwotICAgIGFscmVhZHlDaGVja2VkOgotICAgICAgaWYgKGR0
ZC0+a2VlcFByb2Nlc3NpbmcgJiYgZGVjbEVudGl0eSkgewotICAgICAgICBYTUxfQ2hhciAqdGVt
ID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBpZiAo
IXRlbSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgbm9y
bWFsaXplUHVibGljSWQodGVtKTsKLSAgICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQgPSB0ZW07
Ci0gICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgICAgIGlmIChlbnRpdHlEZWNs
SGFuZGxlcikKLSAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9ET0NUWVBFX0NMT1NFOgotICAgICAgaWYg
KGRvY3R5cGVOYW1lKSB7Ci0gICAgICAgIHN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKGhhbmRsZXJB
cmcsIGRvY3R5cGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N0eXBl
U3lzaWQsIGRvY3R5cGVQdWJpZCwgMCk7Ci0gICAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOwot
ICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgLyogZG9j
dHlwZVN5c2lkIHdpbGwgYmUgbm9uLU5VTEwgaW4gdGhlIGNhc2Ugb2YgYSBwcmV2aW91cwotICAg
ICAgICAgWE1MX1JPTEVfRE9DVFlQRV9TWVNURU1fSUQsIGV2ZW4gaWYgc3RhcnREb2N0eXBlRGVj
bEhhbmRsZXIKLSAgICAgICAgIHdhcyBub3Qgc2V0LCBpbmRpY2F0aW5nIGFuIGV4dGVybmFsIHN1
YnNldAotICAgICAgKi8KLSNpZmRlZiBYTUxfRFRECi0gICAgICBpZiAoZG9jdHlwZVN5c2lkIHx8
IHVzZUZvcmVpZ25EVEQpIHsKLSAgICAgICAgWE1MX0Jvb2wgaGFkUGFyYW1FbnRpdHlSZWZzID0g
ZHRkLT5oYXNQYXJhbUVudGl0eVJlZnM7Ci0gICAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZz
ID0gWE1MX1RSVUU7Ci0gICAgICAgIGlmIChwYXJhbUVudGl0eVBhcnNpbmcgJiYgZXh0ZXJuYWxF
bnRpdHlSZWZIYW5kbGVyKSB7Ci0gICAgICAgICAgRU5USVRZICplbnRpdHkgPSAoRU5USVRZICop
bG9va3VwKHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmR0ZC0+cGFyYW1FbnRpdGllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0ZXJuYWxTdWJzZXROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YoRU5USVRZKSk7Ci0gICAgICAgICAgaWYgKCFlbnRp
dHkpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICBp
ZiAodXNlRm9yZWlnbkRURCkKLSAgICAgICAgICAgIGVudGl0eS0+YmFzZSA9IGN1ckJhc2U7Ci0g
ICAgICAgICAgZHRkLT5wYXJhbUVudGl0eVJlYWQgPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgaWYg
KCFleHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5iYXNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LT5wdWJsaWNJZCkpCi0gICAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORzsKLSAgICAgICAgICBp
ZiAoZHRkLT5wYXJhbUVudGl0eVJlYWQpIHsKLSAgICAgICAgICAgIGlmICghZHRkLT5zdGFuZGFs
b25lICYmCi0gICAgICAgICAgICAgICAgbm90U3RhbmRhbG9uZUhhbmRsZXIgJiYKLSAgICAgICAg
ICAgICAgICAhbm90U3RhbmRhbG9uZUhhbmRsZXIoaGFuZGxlckFyZykpCi0gICAgICAgICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9UX1NUQU5EQUxPTkU7Ci0gICAgICAgICAgfQotICAgICAgICAg
IC8qIGlmIHdlIGRpZG4ndCByZWFkIHRoZSBmb3JlaWduIERURCB0aGVuIHRoaXMgbWVhbnMgdGhh
dCB0aGVyZQotICAgICAgICAgICAgIGlzIG5vIGV4dGVybmFsIHN1YnNldCBhbmQgd2UgbXVzdCBy
ZXNldCBkdGQtPmhhc1BhcmFtRW50aXR5UmVmcwotICAgICAgICAgICovCi0gICAgICAgICAgZWxz
ZSBpZiAoIWRvY3R5cGVTeXNpZCkKLSAgICAgICAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZz
ID0gaGFkUGFyYW1FbnRpdHlSZWZzOwotICAgICAgICAgIC8qIGVuZCBvZiBEVEQgLSBubyBuZWVk
IHRvIHVwZGF0ZSBkdGQtPmtlZXBQcm9jZXNzaW5nICovCi0gICAgICAgIH0KLSAgICAgICAgdXNl
Rm9yZWlnbkRURCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSNlbmRpZiAvKiBYTUxfRFREICovCi0g
ICAgICBpZiAoZW5kRG9jdHlwZURlY2xIYW5kbGVyKSB7Ci0gICAgICAgIGVuZERvY3R5cGVEZWNs
SGFuZGxlcihoYW5kbGVyQXJnKTsKLSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsK
LSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfSU5TVEFOQ0VfU1RBUlQ6
Ci0jaWZkZWYgWE1MX0RURAotICAgICAgLyogaWYgdGhlcmUgaXMgbm8gRE9DVFlQRSBkZWNsYXJh
dGlvbiB0aGVuIG5vdyBpcyB0aGUKLSAgICAgICAgIGxhc3QgY2hhbmNlIHRvIHJlYWQgdGhlIGZv
cmVpZ24gRFRECi0gICAgICAqLwotICAgICAgaWYgKHVzZUZvcmVpZ25EVEQpIHsKLSAgICAgICAg
WE1MX0Jvb2wgaGFkUGFyYW1FbnRpdHlSZWZzID0gZHRkLT5oYXNQYXJhbUVudGl0eVJlZnM7Ci0g
ICAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX1RSVUU7Ci0gICAgICAgIGlmIChw
YXJhbUVudGl0eVBhcnNpbmcgJiYgZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSB7Ci0gICAgICAg
ICAgRU5USVRZICplbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cGFyYW1F
bnRpdGllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0
ZXJuYWxTdWJzZXROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2YoRU5USVRZKSk7Ci0gICAgICAgICAgaWYgKCFlbnRpdHkpCi0gICAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICBlbnRpdHktPmJhc2UgPSBj
dXJCYXNlOwotICAgICAgICAgIGR0ZC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOwotICAg
ICAgICAgIGlmICghZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVmSGFu
ZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+YmFzZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHktPnN5c3RlbUlkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS0+cHVibGljSWQpKQot
ICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9FWFRFUk5BTF9FTlRJVFlfSEFORExJTkc7Ci0g
ICAgICAgICAgaWYgKGR0ZC0+cGFyYW1FbnRpdHlSZWFkKSB7Ci0gICAgICAgICAgICBpZiAoIWR0
ZC0+c3RhbmRhbG9uZSAmJgotICAgICAgICAgICAgICAgIG5vdFN0YW5kYWxvbmVIYW5kbGVyICYm
Ci0gICAgICAgICAgICAgICAgIW5vdFN0YW5kYWxvbmVIYW5kbGVyKGhhbmRsZXJBcmcpKQotICAg
ICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PVF9TVEFOREFMT05FOwotICAgICAgICAgIH0K
LSAgICAgICAgICAvKiBpZiB3ZSBkaWRuJ3QgcmVhZCB0aGUgZm9yZWlnbiBEVEQgdGhlbiB0aGlz
IG1lYW5zIHRoYXQgdGhlcmUKLSAgICAgICAgICAgICBpcyBubyBleHRlcm5hbCBzdWJzZXQgYW5k
IHdlIG11c3QgcmVzZXQgZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMKLSAgICAgICAgICAqLwotICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gaGFkUGFy
YW1FbnRpdHlSZWZzOwotICAgICAgICAgIC8qIGVuZCBvZiBEVEQgLSBubyBuZWVkIHRvIHVwZGF0
ZSBkdGQtPmtlZXBQcm9jZXNzaW5nICovCi0gICAgICAgIH0KLSAgICAgIH0KLSNlbmRpZiAvKiBY
TUxfRFREICovCi0gICAgICBwcm9jZXNzb3IgPSBjb250ZW50UHJvY2Vzc29yOwotICAgICAgcmV0
dXJuIGNvbnRlbnRQcm9jZXNzb3IocGFyc2VyLCBzLCBlbmQsIG5leHRQdHIpOwotICAgIGNhc2Ug
WE1MX1JPTEVfQVRUTElTVF9FTEVNRU5UX05BTUU6Ci0gICAgICBkZWNsRWxlbWVudFR5cGUgPSBn
ZXRFbGVtZW50VHlwZShwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0gICAgICBpZiAoIWRlY2xFbGVt
ZW50VHlwZSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICBnb3Rv
IGNoZWNrQXR0TGlzdERlY2xIYW5kbGVyOwotICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX05B
TUU6Ci0gICAgICBkZWNsQXR0cmlidXRlSWQgPSBnZXRBdHRyaWJ1dGVJZChwYXJzZXIsIGVuYywg
cywgbmV4dCk7Ci0gICAgICBpZiAoIWRlY2xBdHRyaWJ1dGVJZCkKLSAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICBkZWNsQXR0cmlidXRlSXNDZGF0YSA9IFhNTF9GQUxT
RTsKLSAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gTlVMTDsKLSAgICAgIGRlY2xBdHRyaWJ1dGVJ
c0lkID0gWE1MX0ZBTFNFOwotICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKLSAg
ICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0NEQVRBOgotICAgICAgZGVjbEF0dHJpYnV0
ZUlzQ2RhdGEgPSBYTUxfVFJVRTsKLSAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gYXR5cGVDREFU
QTsKLSAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAgY2FzZSBYTUxfUk9M
RV9BVFRSSUJVVEVfVFlQRV9JRDoKLSAgICAgIGRlY2xBdHRyaWJ1dGVJc0lkID0gWE1MX1RSVUU7
Ci0gICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBlSUQ7Ci0gICAgICBnb3RvIGNoZWNrQXR0
TGlzdERlY2xIYW5kbGVyOwotICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfSURSRUY6
Ci0gICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBlSURSRUY7Ci0gICAgICBnb3RvIGNoZWNr
QXR0TGlzdERlY2xIYW5kbGVyOwotICAgIGNhc2UgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfSURS
RUZTOgotICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUlEUkVGUzsKLSAgICAgIGdvdG8g
Y2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQ
RV9FTlRJVFk6Ci0gICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBlRU5USVRZOwotICAgICAg
Z290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKLSAgICBjYXNlIFhNTF9ST0xFX0FUVFJJQlVU
RV9UWVBFX0VOVElUSUVTOgotICAgICAgZGVjbEF0dHJpYnV0ZVR5cGUgPSBhdHlwZUVOVElUSUVT
OwotICAgICAgZ290byBjaGVja0F0dExpc3REZWNsSGFuZGxlcjsKLSAgICBjYXNlIFhNTF9ST0xF
X0FUVFJJQlVURV9UWVBFX05NVE9LRU46Ci0gICAgICBkZWNsQXR0cmlidXRlVHlwZSA9IGF0eXBl
Tk1UT0tFTjsKLSAgICAgIGdvdG8gY2hlY2tBdHRMaXN0RGVjbEhhbmRsZXI7Ci0gICAgY2FzZSBY
TUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9OTVRPS0VOUzoKLSAgICAgIGRlY2xBdHRyaWJ1dGVUeXBl
ID0gYXR5cGVOTVRPS0VOUzsKLSAgICBjaGVja0F0dExpc3REZWNsSGFuZGxlcjoKLSAgICAgIGlm
IChkdGQtPmtlZXBQcm9jZXNzaW5nICYmIGF0dGxpc3REZWNsSGFuZGxlcikKLSAgICAgICAgaGFu
ZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVf
QVRUUklCVVRFX0VOVU1fVkFMVUU6Ci0gICAgY2FzZSBYTUxfUk9MRV9BVFRSSUJVVEVfTk9UQVRJ
T05fVkFMVUU6Ci0gICAgICBpZiAoZHRkLT5rZWVwUHJvY2Vzc2luZyAmJiBhdHRsaXN0RGVjbEhh
bmRsZXIpIHsKLSAgICAgICAgY29uc3QgWE1MX0NoYXIgKnByZWZpeDsKLSAgICAgICAgaWYgKGRl
Y2xBdHRyaWJ1dGVUeXBlKSB7Ci0gICAgICAgICAgcHJlZml4ID0gZW51bVZhbHVlU2VwOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHByZWZpeCA9IChyb2xlID09IFhNTF9S
T0xFX0FUVFJJQlVURV9OT1RBVElPTl9WQUxVRQotICAgICAgICAgICAgICAgICAgICA/IG5vdGF0
aW9uUHJlZml4Ci0gICAgICAgICAgICAgICAgICAgIDogZW51bVZhbHVlU3RhcnQpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghcG9vbEFwcGVuZFN0cmluZygmdGVtcFBvb2wsIHByZWZpeCkpCi0g
ICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGlmICghcG9vbEFw
cGVuZCgmdGVtcFBvb2wsIGVuYywgcywgbmV4dCkpCi0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJP
Ul9OT19NRU1PUlk7Ci0gICAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gdGVtcFBvb2wuc3RhcnQ7
Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIFhNTF9ST0xFX0lNUExJRURfQVRUUklCVVRFX1ZBTFVFOgotICAgIGNhc2Ug
WE1MX1JPTEVfUkVRVUlSRURfQVRUUklCVVRFX1ZBTFVFOgotICAgICAgaWYgKGR0ZC0+a2VlcFBy
b2Nlc3NpbmcpIHsKLSAgICAgICAgaWYgKCFkZWZpbmVBdHRyaWJ1dGUoZGVjbEVsZW1lbnRUeXBl
LCBkZWNsQXR0cmlidXRlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xBdHRy
aWJ1dGVJc0NkYXRhLCBkZWNsQXR0cmlidXRlSXNJZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgcGFyc2VyKSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
LSAgICAgICAgaWYgKGF0dGxpc3REZWNsSGFuZGxlciAmJiBkZWNsQXR0cmlidXRlVHlwZSkgewot
ICAgICAgICAgIGlmICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0gWE1MX1QoQVNDSUlfTFBBUkVOKQot
ICAgICAgICAgICAgICB8fCAoKmRlY2xBdHRyaWJ1dGVUeXBlID09IFhNTF9UKEFTQ0lJX04pCi0g
ICAgICAgICAgICAgICAgICAmJiBkZWNsQXR0cmlidXRlVHlwZVsxXSA9PSBYTUxfVChBU0NJSV9P
KSkpIHsKLSAgICAgICAgICAgIC8qIEVudW1lcmF0ZWQgb3IgTm90YXRpb24gdHlwZSAqLwotICAg
ICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKEFTQ0lJX1JQQVJF
TikpCi0gICAgICAgICAgICAgICAgfHwgIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1Qo
J1wwJykpKQotICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAg
ICAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gdGVtcFBvb2wuc3RhcnQ7Ci0gICAgICAgICAgICBw
b29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgICpldmVudEVuZFBQ
ID0gczsKLSAgICAgICAgICBhdHRsaXN0RGVjbEhhbmRsZXIoaGFuZGxlckFyZywgZGVjbEVsZW1l
bnRUeXBlLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsQXR0cmlidXRl
SWQtPm5hbWUsIGRlY2xBdHRyaWJ1dGVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCByb2xlID09IFhNTF9ST0xFX1JFUVVJUkVEX0FUVFJJQlVURV9WQUxVRSk7Ci0gICAgICAg
ICAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9G
QUxTRTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9M
RV9ERUZBVUxUX0FUVFJJQlVURV9WQUxVRToKLSAgICBjYXNlIFhNTF9ST0xFX0ZJWEVEX0FUVFJJ
QlVURV9WQUxVRToKLSAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7Ci0gICAgICAgIGNv
bnN0IFhNTF9DaGFyICphdHRWYWw7Ci0gICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9Ci0g
ICAgICAgICAgc3RvcmVBdHRyaWJ1dGVWYWx1ZShwYXJzZXIsIGVuYywgZGVjbEF0dHJpYnV0ZUlz
Q2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRlc1Bl
ckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRl
c1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHRkLT5wb29sKTsKLSAg
ICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBhdHRW
YWwgPSBwb29sU3RhcnQoJmR0ZC0+cG9vbCk7Ci0gICAgICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9v
bCk7Ci0gICAgICAgIC8qIElEIGF0dHJpYnV0ZXMgYXJlbid0IGFsbG93ZWQgdG8gaGF2ZSBhIGRl
ZmF1bHQgKi8KLSAgICAgICAgaWYgKCFkZWZpbmVBdHRyaWJ1dGUoZGVjbEVsZW1lbnRUeXBlLCBk
ZWNsQXR0cmlidXRlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xBdHRyaWJ1
dGVJc0NkYXRhLCBYTUxfRkFMU0UsIGF0dFZhbCwgcGFyc2VyKSkKLSAgICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgaWYgKGF0dGxpc3REZWNsSGFuZGxlciAmJiBk
ZWNsQXR0cmlidXRlVHlwZSkgewotICAgICAgICAgIGlmICgqZGVjbEF0dHJpYnV0ZVR5cGUgPT0g
WE1MX1QoQVNDSUlfTFBBUkVOKQotICAgICAgICAgICAgICB8fCAoKmRlY2xBdHRyaWJ1dGVUeXBl
ID09IFhNTF9UKEFTQ0lJX04pCi0gICAgICAgICAgICAgICAgICAmJiBkZWNsQXR0cmlidXRlVHlw
ZVsxXSA9PSBYTUxfVChBU0NJSV9PKSkpIHsKLSAgICAgICAgICAgIC8qIEVudW1lcmF0ZWQgb3Ig
Tm90YXRpb24gdHlwZSAqLwotICAgICAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBv
b2wsIFhNTF9UKEFTQ0lJX1JQQVJFTikpCi0gICAgICAgICAgICAgICAgfHwgIXBvb2xBcHBlbmRD
aGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJ1wwJykpKQotICAgICAgICAgICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PX01FTU9SWTsKLSAgICAgICAgICAgIGRlY2xBdHRyaWJ1dGVUeXBlID0gdGVtcFBvb2wu
c3RhcnQ7Ci0gICAgICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgICAgICAgfQot
ICAgICAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgICAgICBhdHRsaXN0RGVjbEhhbmRsZXIo
aGFuZGxlckFyZywgZGVjbEVsZW1lbnRUeXBlLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNsQXR0cmlidXRlSWQtPm5hbWUsIGRlY2xBdHRyaWJ1dGVUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdHRWYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPT0gWE1MX1JPTEVfRklYRURfQVRUUklCVVRFX1ZBTFVFKTsKLSAgICAgICAgICBw
b29sQ2xlYXIoJnRlbXBQb29sKTsKLSAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNF
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0VO
VElUWV9WQUxVRToKLSAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7Ci0gICAgICAgIGVu
dW0gWE1MX0Vycm9yIHJlc3VsdCA9IHN0b3JlRW50aXR5VmFsdWUocGFyc2VyLCBlbmMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVz
UGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dCAtIGVuYy0+bWluQnl0ZXNQZXJDaGFyKTsKLSAgICAgICAgaWYgKGRlY2xFbnRpdHkpIHsKLSAg
ICAgICAgICBkZWNsRW50aXR5LT50ZXh0UHRyID0gcG9vbFN0YXJ0KCZkdGQtPmVudGl0eVZhbHVl
UG9vbCk7Ci0gICAgICAgICAgZGVjbEVudGl0eS0+dGV4dExlbiA9IChpbnQpKHBvb2xMZW5ndGgo
JmR0ZC0+ZW50aXR5VmFsdWVQb29sKSk7Ci0gICAgICAgICAgcG9vbEZpbmlzaCgmZHRkLT5lbnRp
dHlWYWx1ZVBvb2wpOwotICAgICAgICAgIGlmIChlbnRpdHlEZWNsSGFuZGxlcikgewotICAgICAg
ICAgICAgKmV2ZW50RW5kUFAgPSBzOwotICAgICAgICAgICAgZW50aXR5RGVjbEhhbmRsZXIoaGFu
ZGxlckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5pc19wYXJhbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPnRleHRQdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT50ZXh0TGVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyQmFzZSwgMCwgMCwgMCk7Ci0gICAgICAgICAgICBoYW5kbGVE
ZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+ZW50aXR5VmFsdWVQb29sKTsKLSAgICAgICAg
aWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9ET0NUWVBFX1NZU1RFTV9J
RDoKLSNpZmRlZiBYTUxfRFRECi0gICAgICB1c2VGb3JlaWduRFREID0gWE1MX0ZBTFNFOwotI2Vu
ZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX1RS
VUU7Ci0gICAgICBpZiAoc3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpIHsKLSAgICAgICAgZG9jdHlw
ZVN5c2lkID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0ZXNQZXJD
aGFyKTsKLSAgICAgICAgaWYgKGRvY3R5cGVTeXNpZCA9PSBOVUxMKQotICAgICAgICAgIHJldHVy
biBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBwb29sRmluaXNoKCZ0ZW1wUG9vbCk7Ci0g
ICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICB9Ci0jaWZkZWYgWE1MX0RU
RAotICAgICAgZWxzZQotICAgICAgICAvKiB1c2UgZXh0ZXJuYWxTdWJzZXROYW1lIHRvIG1ha2Ug
ZG9jdHlwZVN5c2lkIG5vbi1OVUxMCi0gICAgICAgICAgIGZvciB0aGUgY2FzZSB3aGVyZSBubyBz
dGFydERvY3R5cGVEZWNsSGFuZGxlciBpcyBzZXQgKi8KLSAgICAgICAgZG9jdHlwZVN5c2lkID0g
ZXh0ZXJuYWxTdWJzZXROYW1lOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgIGlmICghZHRk
LT5zdGFuZGFsb25lCi0jaWZkZWYgWE1MX0RURAotICAgICAgICAgICYmICFwYXJhbUVudGl0eVBh
cnNpbmcKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgICAgICAgJiYgbm90U3RhbmRhbG9uZUhh
bmRsZXIKLSAgICAgICAgICAmJiAhbm90U3RhbmRhbG9uZUhhbmRsZXIoaGFuZGxlckFyZykpCi0g
ICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9UX1NUQU5EQUxPTkU7Ci0jaWZuZGVmIFhNTF9EVEQK
LSAgICAgIGJyZWFrOwotI2Vsc2UgLyogWE1MX0RURCAqLwotICAgICAgaWYgKCFkZWNsRW50aXR5
KSB7Ci0gICAgICAgIGRlY2xFbnRpdHkgPSAoRU5USVRZICopbG9va3VwKHBhcnNlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0ZC0+cGFyYW1FbnRpdGllcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxTdWJzZXROYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRU5USVRZKSk7Ci0g
ICAgICAgIGlmICghZGVjbEVudGl0eSkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01F
TU9SWTsKLSAgICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQgPSBOVUxMOwotICAgICAgfQotICAg
ICAgLyogZmFsbCB0aHJvdWdoICovCi0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgIGNhc2UgWE1M
X1JPTEVfRU5USVRZX1NZU1RFTV9JRDoKLSAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nICYm
IGRlY2xFbnRpdHkpIHsKLSAgICAgICAgZGVjbEVudGl0eS0+c3lzdGVtSWQgPSBwb29sU3RvcmVT
dHJpbmcoJmR0ZC0+cG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzICsgZW5jLT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hh
cik7Ci0gICAgICAgIGlmICghZGVjbEVudGl0eS0+c3lzdGVtSWQpCi0gICAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGRlY2xFbnRpdHktPmJhc2UgPSBjdXJCYXNl
OwotICAgICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOwotICAgICAgICBpZiAoZW50aXR5RGVj
bEhhbmRsZXIpCi0gICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIH0K
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfRU5USVRZX0NPTVBMRVRFOgotICAgICAg
aWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgZGVjbEVudGl0eSAmJiBlbnRpdHlEZWNsSGFuZGxl
cikgewotICAgICAgICAqZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAgIGVudGl0eURlY2xIYW5kbGVy
KGhhbmRsZXJBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPmlzX3BhcmFtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xF
bnRpdHktPmJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPnN5c3Rl
bUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5wdWJsaWNJZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxf
RkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0VOVElUWV9O
T1RBVElPTl9OQU1FOgotICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcgJiYgZGVjbEVudGl0
eSkgewotICAgICAgICBkZWNsRW50aXR5LT5ub3RhdGlvbiA9IHBvb2xTdG9yZVN0cmluZygmZHRk
LT5wb29sLCBlbmMsIHMsIG5leHQpOwotICAgICAgICBpZiAoIWRlY2xFbnRpdHktPm5vdGF0aW9u
KQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBwb29sRmlu
aXNoKCZkdGQtPnBvb2wpOwotICAgICAgICBpZiAodW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcikg
ewotICAgICAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgICAgICB1bnBhcnNlZEVudGl0eURl
Y2xIYW5kbGVyKGhhbmRsZXJBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNsRW50aXR5LT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbEVudGl0eS0+YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2xFbnRpdHktPnN5c3RlbUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbEVudGl0eS0+cHVibGljSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNsRW50aXR5LT5ub3RhdGlvbik7Ci0gICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9G
QUxTRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlbnRpdHlEZWNsSGFuZGxlcikgewot
ICAgICAgICAgICpldmVudEVuZFBQID0gczsKLSAgICAgICAgICBlbnRpdHlEZWNsSGFuZGxlciho
YW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xFbnRpdHktPm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwwLDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbEVudGl0eS0+YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNsRW50aXR5LT5zeXN0ZW1JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50
aXR5LT5wdWJsaWNJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsRW50aXR5LT5u
b3RhdGlvbik7Ci0gICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9HRU5FUkFMX0VOVElU
WV9OQU1FOgotICAgICAgewotICAgICAgICBpZiAoWG1sUHJlZGVmaW5lZEVudGl0eU5hbWUoZW5j
LCBzLCBuZXh0KSkgewotICAgICAgICAgIGRlY2xFbnRpdHkgPSBOVUxMOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nKSB7Ci0gICAg
ICAgICAgY29uc3QgWE1MX0NoYXIgKm5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwg
ZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICBkZWNsRW50aXR5ID0gKEVOVElUWSAqKWxv
b2t1cChwYXJzZXIsICZkdGQtPmdlbmVyYWxFbnRpdGllcywgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRU5USVRZKSk7Ci0gICAgICAgICAgaWYg
KCFkZWNsRW50aXR5KQotICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0g
ICAgICAgICAgaWYgKGRlY2xFbnRpdHktPm5hbWUgIT0gbmFtZSkgewotICAgICAgICAgICAgcG9v
bERpc2NhcmQoJmR0ZC0+cG9vbCk7Ci0gICAgICAgICAgICBkZWNsRW50aXR5ID0gTlVMTDsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwb29sRmluaXNoKCZkdGQt
PnBvb2wpOwotICAgICAgICAgICAgZGVjbEVudGl0eS0+cHVibGljSWQgPSBOVUxMOwotICAgICAg
ICAgICAgZGVjbEVudGl0eS0+aXNfcGFyYW0gPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgICAvKiBp
ZiB3ZSBoYXZlIGEgcGFyZW50IHBhcnNlciBvciBhcmUgcmVhZGluZyBhbiBpbnRlcm5hbCBwYXJh
bWV0ZXIKLSAgICAgICAgICAgICAgIGVudGl0eSwgdGhlbiB0aGUgZW50aXR5IGRlY2xhcmF0aW9u
IGlzIG5vdCBjb25zaWRlcmVkICJpbnRlcm5hbCIKLSAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBkZWNsRW50aXR5LT5pc19pbnRlcm5hbCA9ICEocGFyZW50UGFyc2VyIHx8IG9wZW5JbnRlcm5h
bEVudGl0aWVzKTsKLSAgICAgICAgICAgIGlmIChlbnRpdHlEZWNsSGFuZGxlcikKLSAgICAgICAg
ICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgcG9vbERpc2NhcmQoJmR0ZC0+cG9vbCk7Ci0gICAg
ICAgICAgZGVjbEVudGl0eSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgWE1MX1JPTEVfUEFSQU1fRU5USVRZX05BTUU6Ci0jaWZkZWYgWE1MX0RURAot
ICAgICAgaWYgKGR0ZC0+a2VlcFByb2Nlc3NpbmcpIHsKLSAgICAgICAgY29uc3QgWE1MX0NoYXIg
Km5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwgZW5jLCBzLCBuZXh0KTsKLSAgICAg
ICAgaWYgKCFuYW1lKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAg
ICAgICBkZWNsRW50aXR5ID0gKEVOVElUWSAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnBhcmFtRW50
aXRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwg
c2l6ZW9mKEVOVElUWSkpOwotICAgICAgICBpZiAoIWRlY2xFbnRpdHkpCi0gICAgICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGlmIChkZWNsRW50aXR5LT5uYW1lICE9
IG5hbWUpIHsKLSAgICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgICAgICBk
ZWNsRW50aXR5ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBw
b29sRmluaXNoKCZkdGQtPnBvb2wpOwotICAgICAgICAgIGRlY2xFbnRpdHktPnB1YmxpY0lkID0g
TlVMTDsKLSAgICAgICAgICBkZWNsRW50aXR5LT5pc19wYXJhbSA9IFhNTF9UUlVFOwotICAgICAg
ICAgIC8qIGlmIHdlIGhhdmUgYSBwYXJlbnQgcGFyc2VyIG9yIGFyZSByZWFkaW5nIGFuIGludGVy
bmFsIHBhcmFtZXRlcgotICAgICAgICAgICAgIGVudGl0eSwgdGhlbiB0aGUgZW50aXR5IGRlY2xh
cmF0aW9uIGlzIG5vdCBjb25zaWRlcmVkICJpbnRlcm5hbCIKLSAgICAgICAgICAqLwotICAgICAg
ICAgIGRlY2xFbnRpdHktPmlzX2ludGVybmFsID0gIShwYXJlbnRQYXJzZXIgfHwgb3BlbkludGVy
bmFsRW50aXRpZXMpOwotICAgICAgICAgIGlmIChlbnRpdHlEZWNsSGFuZGxlcikKLSAgICAgICAg
ICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGVsc2UgewotICAgICAgICBwb29sRGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgICAgZGVjbEVu
dGl0eSA9IE5VTEw7Ci0gICAgICB9Ci0jZWxzZSAvKiBub3QgWE1MX0RURCAqLwotICAgICAgZGVj
bEVudGl0eSA9IE5VTEw7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBYTUxfUk9MRV9OT1RBVElPTl9OQU1FOgotICAgICAgZGVjbE5vdGF0aW9uUHVibGljSWQg
PSBOVUxMOwotICAgICAgZGVjbE5vdGF0aW9uTmFtZSA9IE5VTEw7Ci0gICAgICBpZiAobm90YXRp
b25EZWNsSGFuZGxlcikgewotICAgICAgICBkZWNsTm90YXRpb25OYW1lID0gcG9vbFN0b3JlU3Ry
aW5nKCZ0ZW1wUG9vbCwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgaWYgKCFkZWNsTm90YXRpb25O
YW1lKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgICBwb29s
RmluaXNoKCZ0ZW1wUG9vbCk7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX05PVEFUSU9OX1BVQkxJQ19J
RDoKLSAgICAgIGlmICghWG1sSXNQdWJsaWNJZChlbmMsIHMsIG5leHQsIGV2ZW50UFApKQotICAg
ICAgICByZXR1cm4gWE1MX0VSUk9SX1BVQkxJQ0lEOwotICAgICAgaWYgKGRlY2xOb3RhdGlvbk5h
bWUpIHsgIC8qIG1lYW5zIG5vdGF0aW9uRGVjbEhhbmRsZXIgIT0gTlVMTCAqLwotICAgICAgICBY
TUxfQ2hhciAqdGVtID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcyArIGVuYy0+bWluQnl0ZXNQZXJDaGFyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0g
ICAgICAgIGlmICghdGVtKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwot
ICAgICAgICBub3JtYWxpemVQdWJsaWNJZCh0ZW0pOwotICAgICAgICBkZWNsTm90YXRpb25QdWJs
aWNJZCA9IHRlbTsKLSAgICAgICAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOwotICAgICAgICBoYW5k
bGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBY
TUxfUk9MRV9OT1RBVElPTl9TWVNURU1fSUQ6Ci0gICAgICBpZiAoZGVjbE5vdGF0aW9uTmFtZSAm
JiBub3RhdGlvbkRlY2xIYW5kbGVyKSB7Ci0gICAgICAgIGNvbnN0IFhNTF9DaGFyICpzeXN0ZW1J
ZAotICAgICAgICAgID0gcG9vbFN0b3JlU3RyaW5nKCZ0ZW1wUG9vbCwgZW5jLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBp
ZiAoIXN5c3RlbUlkKQotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAg
ICAgICAqZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAgIG5vdGF0aW9uRGVjbEhhbmRsZXIoaGFuZGxl
ckFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsTm90YXRpb25OYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbE5vdGF0aW9u
UHVibGljSWQpOwotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQot
ICAgICAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9S
T0xFX05PVEFUSU9OX05PX1NZU1RFTV9JRDoKLSAgICAgIGlmIChkZWNsTm90YXRpb25QdWJsaWNJ
ZCAmJiBub3RhdGlvbkRlY2xIYW5kbGVyKSB7Ci0gICAgICAgICpldmVudEVuZFBQID0gczsKLSAg
ICAgICAgbm90YXRpb25EZWNsSGFuZGxlcihoYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlY2xOb3RhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyQmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xOb3RhdGlvblB1YmxpY0lkKTsKLSAgICAgICAgaGFuZGxlRGVmYXVs
dCA9IFhNTF9GQUxTRTsKLSAgICAgIH0KLSAgICAgIHBvb2xDbGVhcigmdGVtcFBvb2wpOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9FUlJPUjoKLSAgICAgIHN3aXRjaCAodG9rKSB7
Ci0gICAgICBjYXNlIFhNTF9UT0tfUEFSQU1fRU5USVRZX1JFRjoKLSAgICAgICAgLyogUEUgcmVm
ZXJlbmNlcyBpbiBpbnRlcm5hbCBzdWJzZXQgYXJlCi0gICAgICAgICAgIG5vdCBhbGxvd2VkIHdp
dGhpbiBkZWNsYXJhdGlvbnMuICovCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfUEFSQU1fRU5U
SVRZX1JFRjsKLSAgICAgIGNhc2UgWE1MX1RPS19YTUxfREVDTDoKLSAgICAgICAgcmV0dXJuIFhN
TF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9TWU5UQVg7Ci0gICAgICB9Ci0jaWZkZWYgWE1MX0RURAotICAgIGNhc2UgWE1M
X1JPTEVfSUdOT1JFX1NFQ1Q6Ci0gICAgICB7Ci0gICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3Vs
dDsKLSAgICAgICAgaWYgKGRlZmF1bHRIYW5kbGVyKQotICAgICAgICAgIHJlcG9ydERlZmF1bHQo
cGFyc2VyLCBlbmMsIHMsIG5leHQpOwotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNF
OwotICAgICAgICByZXN1bHQgPSBkb0lnbm9yZVNlY3Rpb24ocGFyc2VyLCBlbmMsICZuZXh0LCBl
bmQsIG5leHRQdHIsIGhhdmVNb3JlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1Jf
Tk9ORSkKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBlbHNlIGlmICghbmV4dCkg
ewotICAgICAgICAgIHByb2Nlc3NvciA9IGlnbm9yZVNlY3Rpb25Qcm9jZXNzb3I7Ci0gICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0jZW5k
aWYgLyogWE1MX0RURCAqLwotICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfT1BFTjoKLSAgICAgIGlm
IChwcm9sb2dTdGF0ZS5sZXZlbCA+PSBncm91cFNpemUpIHsKLSAgICAgICAgaWYgKGdyb3VwU2l6
ZSkgewotICAgICAgICAgIGNoYXIgKnRlbXAgPSAoY2hhciAqKVJFQUxMT0MoZ3JvdXBDb25uZWN0
b3IsIGdyb3VwU2l6ZSAqPSAyKTsKLSAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgZ3JvdXBDb25uZWN0
b3IgPSB0ZW1wOwotICAgICAgICAgIGlmIChkdGQtPnNjYWZmSW5kZXgpIHsKLSAgICAgICAgICAg
IGludCAqdGVtcCA9IChpbnQgKilSRUFMTE9DKGR0ZC0+c2NhZmZJbmRleCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBTaXplICogc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgaWYg
KHRlbXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7
Ci0gICAgICAgICAgICBkdGQtPnNjYWZmSW5kZXggPSB0ZW1wOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBncm91cENvbm5lY3RvciA9IChjaGFyICop
TUFMTE9DKGdyb3VwU2l6ZSA9IDMyKTsKLSAgICAgICAgICBpZiAoIWdyb3VwQ29ubmVjdG9yKQot
ICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIGdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0YXRlLmxldmVsXSA9IDA7Ci0gICAgICBp
ZiAoZHRkLT5pbl9lbGRlY2wpIHsKLSAgICAgICAgaW50IG15aW5kZXggPSBuZXh0U2NhZmZvbGRQ
YXJ0KHBhcnNlcik7Ci0gICAgICAgIGlmIChteWluZGV4IDwgMCkKLSAgICAgICAgICByZXR1cm4g
WE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgZHRkLT5zY2FmZkluZGV4W2R0ZC0+c2NhZmZM
ZXZlbF0gPSBteWluZGV4OwotICAgICAgICBkdGQtPnNjYWZmTGV2ZWwrKzsKLSAgICAgICAgZHRk
LT5zY2FmZm9sZFtteWluZGV4XS50eXBlID0gWE1MX0NUWVBFX1NFUTsKLSAgICAgICAgaWYgKGVs
ZW1lbnREZWNsSGFuZGxlcikKLSAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwot
ICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9HUk9VUF9TRVFVRU5DRToK
LSAgICAgIGlmIChncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPT0gQVNDSUlfUElQ
RSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9TWU5UQVg7Ci0gICAgICBncm91cENvbm5lY3Rv
cltwcm9sb2dTdGF0ZS5sZXZlbF0gPSBBU0NJSV9DT01NQTsKLSAgICAgIGlmIChkdGQtPmluX2Vs
ZGVjbCAmJiBlbGVtZW50RGVjbEhhbmRsZXIpCi0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxf
RkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NIT0lDRToKLSAg
ICAgIGlmIChncm91cENvbm5lY3Rvcltwcm9sb2dTdGF0ZS5sZXZlbF0gPT0gQVNDSUlfQ09NTUEp
Ci0gICAgICAgIHJldHVybiBYTUxfRVJST1JfU1lOVEFYOwotICAgICAgaWYgKGR0ZC0+aW5fZWxk
ZWNsCi0gICAgICAgICAgJiYgIWdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0YXRlLmxldmVsXQotICAg
ICAgICAgICYmIChkdGQtPnNjYWZmb2xkW2R0ZC0+c2NhZmZJbmRleFtkdGQtPnNjYWZmTGV2ZWwg
LSAxXV0udHlwZQotICAgICAgICAgICAgICAhPSBYTUxfQ1RZUEVfTUlYRUQpCi0gICAgICAgICAg
KSB7Ci0gICAgICAgIGR0ZC0+c2NhZmZvbGRbZHRkLT5zY2FmZkluZGV4W2R0ZC0+c2NhZmZMZXZl
bCAtIDFdXS50eXBlCi0gICAgICAgICAgICA9IFhNTF9DVFlQRV9DSE9JQ0U7Ci0gICAgICAgIGlm
IChlbGVtZW50RGVjbEhhbmRsZXIpCi0gICAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxT
RTsKLSAgICAgIH0KLSAgICAgIGdyb3VwQ29ubmVjdG9yW3Byb2xvZ1N0YXRlLmxldmVsXSA9IEFT
Q0lJX1BJUEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9S
RUY6Ci0jaWZkZWYgWE1MX0RURAotICAgIGNhc2UgWE1MX1JPTEVfSU5ORVJfUEFSQU1fRU5USVRZ
X1JFRjoKLSAgICAgIGR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzID0gWE1MX1RSVUU7Ci0gICAgICBp
ZiAoIXBhcmFtRW50aXR5UGFyc2luZykKLSAgICAgICAgZHRkLT5rZWVwUHJvY2Vzc2luZyA9IGR0
ZC0+c3RhbmRhbG9uZTsKLSAgICAgIGVsc2UgewotICAgICAgICBjb25zdCBYTUxfQ2hhciAqbmFt
ZTsKLSAgICAgICAgRU5USVRZICplbnRpdHk7Ci0gICAgICAgIG5hbWUgPSBwb29sU3RvcmVTdHJp
bmcoJmR0ZC0+cG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsg
ZW5jLT5taW5CeXRlc1BlckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcik7Ci0gICAgICAgIGlmICghbmFtZSkKLSAgICAgICAg
ICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgZW50aXR5ID0gKEVOVElUWSAq
KWxvb2t1cChwYXJzZXIsICZkdGQtPnBhcmFtRW50aXRpZXMsIG5hbWUsIDApOwotICAgICAgICBw
b29sRGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgICAgLyogZmlyc3QsIGRldGVybWluZSBpZiBh
IGNoZWNrIGZvciBhbiBleGlzdGluZyBkZWNsYXJhdGlvbiBpcyBuZWVkZWQ7Ci0gICAgICAgICAg
IGlmIHllcywgY2hlY2sgdGhhdCB0aGUgZW50aXR5IGV4aXN0cywgYW5kIHRoYXQgaXQgaXMgaW50
ZXJuYWwsCi0gICAgICAgICAgIG90aGVyd2lzZSBjYWxsIHRoZSBza2lwcGVkIGVudGl0eSBoYW5k
bGVyCi0gICAgICAgICovCi0gICAgICAgIGlmIChwcm9sb2dTdGF0ZS5kb2N1bWVudEVudGl0eSAm
JgotICAgICAgICAgICAgKGR0ZC0+c3RhbmRhbG9uZQotICAgICAgICAgICAgID8gIW9wZW5JbnRl
cm5hbEVudGl0aWVzCi0gICAgICAgICAgICAgOiAhZHRkLT5oYXNQYXJhbUVudGl0eVJlZnMpKSB7
Ci0gICAgICAgICAgaWYgKCFlbnRpdHkpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX1VO
REVGSU5FRF9FTlRJVFk7Ci0gICAgICAgICAgZWxzZSBpZiAoIWVudGl0eS0+aXNfaW50ZXJuYWwp
Ci0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmICghZW50aXR5KSB7Ci0gICAgICAgICAgZHRkLT5rZWVw
UHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKLSAgICAgICAgICAvKiBjYW5ub3QgcmVwb3J0
IHNraXBwZWQgZW50aXRpZXMgaW4gZGVjbGFyYXRpb25zICovCi0gICAgICAgICAgaWYgKChyb2xl
ID09IFhNTF9ST0xFX1BBUkFNX0VOVElUWV9SRUYpICYmIHNraXBwZWRFbnRpdHlIYW5kbGVyKSB7
Ci0gICAgICAgICAgICBza2lwcGVkRW50aXR5SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLCAxKTsK
LSAgICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbnRpdHktPm9wZW4pCi0gICAg
ICAgICAgcmV0dXJuIFhNTF9FUlJPUl9SRUNVUlNJVkVfRU5USVRZX1JFRjsKLSAgICAgICAgaWYg
KGVudGl0eS0+dGV4dFB0cikgewotICAgICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3VsdDsKLSAg
ICAgICAgICBYTUxfQm9vbCBiZXR3ZWVuRGVjbCA9Ci0gICAgICAgICAgICAocm9sZSA9PSBYTUxf
Uk9MRV9QQVJBTV9FTlRJVFlfUkVGID8gWE1MX1RSVUUgOiBYTUxfRkFMU0UpOwotICAgICAgICAg
IHJlc3VsdCA9IHByb2Nlc3NJbnRlcm5hbEVudGl0eShwYXJzZXIsIGVudGl0eSwgYmV0d2VlbkRl
Y2wpOwotICAgICAgICAgIGlmIChyZXN1bHQgIT0gWE1MX0VSUk9SX05PTkUpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dGVybmFsRW50aXR5UmVm
SGFuZGxlcikgewotICAgICAgICAgIGR0ZC0+cGFyYW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOwot
ICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9UUlVFOwotICAgICAgICAgIGlmICghZXh0ZXJu
YWxFbnRpdHlSZWZIYW5kbGVyKGV4dGVybmFsRW50aXR5UmVmSGFuZGxlckFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudGl0eS0+YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnRpdHktPnN5c3RlbUlkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudGl0eS0+cHVibGljSWQpKSB7Ci0gICAgICAgICAgICBlbnRp
dHktPm9wZW4gPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0VYVEVS
TkFMX0VOVElUWV9IQU5ETElORzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZW50aXR5LT5vcGVu
ID0gWE1MX0ZBTFNFOwotICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7Ci0gICAg
ICAgICAgaWYgKCFkdGQtPnBhcmFtRW50aXR5UmVhZCkgewotICAgICAgICAgICAgZHRkLT5rZWVw
UHJvY2Vzc2luZyA9IGR0ZC0+c3RhbmRhbG9uZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBkdGQtPmtlZXBQcm9j
ZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICB9Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgICAgaWYgKCFkdGQtPnN0YW5kYWxvbmUg
JiYKLSAgICAgICAgICBub3RTdGFuZGFsb25lSGFuZGxlciAmJgotICAgICAgICAgICFub3RTdGFu
ZGFsb25lSGFuZGxlcihoYW5kbGVyQXJnKSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT1Rf
U1RBTkRBTE9ORTsKLSAgICAgIGJyZWFrOwotCi0gICAgLyogRWxlbWVudCBkZWNsYXJhdGlvbiBz
dHVmZiAqLwotCi0gICAgY2FzZSBYTUxfUk9MRV9FTEVNRU5UX05BTUU6Ci0gICAgICBpZiAoZWxl
bWVudERlY2xIYW5kbGVyKSB7Ci0gICAgICAgIGRlY2xFbGVtZW50VHlwZSA9IGdldEVsZW1lbnRU
eXBlKHBhcnNlciwgZW5jLCBzLCBuZXh0KTsKLSAgICAgICAgaWYgKCFkZWNsRWxlbWVudFR5cGUp
Ci0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGR0ZC0+c2Nh
ZmZMZXZlbCA9IDA7Ci0gICAgICAgIGR0ZC0+c2NhZmZDb3VudCA9IDA7Ci0gICAgICAgIGR0ZC0+
aW5fZWxkZWNsID0gWE1MX1RSVUU7Ci0gICAgICAgIGhhbmRsZURlZmF1bHQgPSBYTUxfRkFMU0U7
Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgWE1MX1JPTEVfQ09OVEVOVF9BTlk6
Ci0gICAgY2FzZSBYTUxfUk9MRV9DT05URU5UX0VNUFRZOgotICAgICAgaWYgKGR0ZC0+aW5fZWxk
ZWNsKSB7Ci0gICAgICAgIGlmIChlbGVtZW50RGVjbEhhbmRsZXIpIHsKLSAgICAgICAgICBYTUxf
Q29udGVudCAqIGNvbnRlbnQgPSAoWE1MX0NvbnRlbnQgKikgTUFMTE9DKHNpemVvZihYTUxfQ29u
dGVudCkpOwotICAgICAgICAgIGlmICghY29udGVudCkKLSAgICAgICAgICAgIHJldHVybiBYTUxf
RVJST1JfTk9fTUVNT1JZOwotICAgICAgICAgIGNvbnRlbnQtPnF1YW50ID0gWE1MX0NRVUFOVF9O
T05FOwotICAgICAgICAgIGNvbnRlbnQtPm5hbWUgPSBOVUxMOwotICAgICAgICAgIGNvbnRlbnQt
Pm51bWNoaWxkcmVuID0gMDsKLSAgICAgICAgICBjb250ZW50LT5jaGlsZHJlbiA9IE5VTEw7Ci0g
ICAgICAgICAgY29udGVudC0+dHlwZSA9ICgocm9sZSA9PSBYTUxfUk9MRV9DT05URU5UX0FOWSkg
PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NUWVBFX0FOWSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBYTUxfQ1RZUEVfRU1QVFkpOwotICAgICAgICAgICpldmVudEVuZFBQ
ID0gczsKLSAgICAgICAgICBlbGVtZW50RGVjbEhhbmRsZXIoaGFuZGxlckFyZywgZGVjbEVsZW1l
bnRUeXBlLT5uYW1lLCBjb250ZW50KTsKLSAgICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZB
TFNFOwotICAgICAgICB9Ci0gICAgICAgIGR0ZC0+aW5fZWxkZWNsID0gWE1MX0ZBTFNFOwotICAg
ICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFhNTF9ST0xFX0NPTlRFTlRfUENEQVRBOgot
ICAgICAgaWYgKGR0ZC0+aW5fZWxkZWNsKSB7Ci0gICAgICAgIGR0ZC0+c2NhZmZvbGRbZHRkLT5z
Y2FmZkluZGV4W2R0ZC0+c2NhZmZMZXZlbCAtIDFdXS50eXBlCi0gICAgICAgICAgICA9IFhNTF9D
VFlQRV9NSVhFRDsKLSAgICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikKLSAgICAgICAgICBo
YW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVDoKLSAgICAgIHF1YW50ID0gWE1MX0NRVUFOVF9O
T05FOwotICAgICAgZ290byBlbGVtZW50Q29udGVudDsKLSAgICBjYXNlIFhNTF9ST0xFX0NPTlRF
TlRfRUxFTUVOVF9PUFQ6Ci0gICAgICBxdWFudCA9IFhNTF9DUVVBTlRfT1BUOwotICAgICAgZ290
byBlbGVtZW50Q29udGVudDsKLSAgICBjYXNlIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVF9SRVA6
Ci0gICAgICBxdWFudCA9IFhNTF9DUVVBTlRfUkVQOwotICAgICAgZ290byBlbGVtZW50Q29udGVu
dDsKLSAgICBjYXNlIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVF9QTFVTOgotICAgICAgcXVhbnQg
PSBYTUxfQ1FVQU5UX1BMVVM7Ci0gICAgZWxlbWVudENvbnRlbnQ6Ci0gICAgICBpZiAoZHRkLT5p
bl9lbGRlY2wpIHsKLSAgICAgICAgRUxFTUVOVF9UWVBFICplbDsKLSAgICAgICAgY29uc3QgWE1M
X0NoYXIgKm5hbWU7Ci0gICAgICAgIGludCBuYW1lTGVuOwotICAgICAgICBjb25zdCBjaGFyICpu
eHQgPSAocXVhbnQgPT0gWE1MX0NRVUFOVF9OT05FCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IG5leHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV4dCAtIGVuYy0+bWluQnl0
ZXNQZXJDaGFyKTsKLSAgICAgICAgaW50IG15aW5kZXggPSBuZXh0U2NhZmZvbGRQYXJ0KHBhcnNl
cik7Ci0gICAgICAgIGlmIChteWluZGV4IDwgMCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9S
X05PX01FTU9SWTsKLSAgICAgICAgZHRkLT5zY2FmZm9sZFtteWluZGV4XS50eXBlID0gWE1MX0NU
WVBFX05BTUU7Ci0gICAgICAgIGR0ZC0+c2NhZmZvbGRbbXlpbmRleF0ucXVhbnQgPSBxdWFudDsK
LSAgICAgICAgZWwgPSBnZXRFbGVtZW50VHlwZShwYXJzZXIsIGVuYywgcywgbnh0KTsKLSAgICAg
ICAgaWYgKCFlbCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAg
ICAgbmFtZSA9IGVsLT5uYW1lOwotICAgICAgICBkdGQtPnNjYWZmb2xkW215aW5kZXhdLm5hbWUg
PSBuYW1lOwotICAgICAgICBuYW1lTGVuID0gMDsKLSAgICAgICAgZm9yICg7IG5hbWVbbmFtZUxl
bisrXTsgKTsKLSAgICAgICAgZHRkLT5jb250ZW50U3RyaW5nTGVuICs9ICBuYW1lTGVuOwotICAg
ICAgICBpZiAoZWxlbWVudERlY2xIYW5kbGVyKQotICAgICAgICAgIGhhbmRsZURlZmF1bHQgPSBY
TUxfRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgWE1MX1JPTEVfR1JP
VVBfQ0xPU0U6Ci0gICAgICBxdWFudCA9IFhNTF9DUVVBTlRfTk9ORTsKLSAgICAgIGdvdG8gY2xv
c2VHcm91cDsKLSAgICBjYXNlIFhNTF9ST0xFX0dST1VQX0NMT1NFX09QVDoKLSAgICAgIHF1YW50
ID0gWE1MX0NRVUFOVF9PUFQ7Ci0gICAgICBnb3RvIGNsb3NlR3JvdXA7Ci0gICAgY2FzZSBYTUxf
Uk9MRV9HUk9VUF9DTE9TRV9SRVA6Ci0gICAgICBxdWFudCA9IFhNTF9DUVVBTlRfUkVQOwotICAg
ICAgZ290byBjbG9zZUdyb3VwOwotICAgIGNhc2UgWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUExVUzoK
LSAgICAgIHF1YW50ID0gWE1MX0NRVUFOVF9QTFVTOwotICAgIGNsb3NlR3JvdXA6Ci0gICAgICBp
ZiAoZHRkLT5pbl9lbGRlY2wpIHsKLSAgICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikKLSAg
ICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICBkdGQtPnNjYWZmTGV2
ZWwtLTsKLSAgICAgICAgZHRkLT5zY2FmZm9sZFtkdGQtPnNjYWZmSW5kZXhbZHRkLT5zY2FmZkxl
dmVsXV0ucXVhbnQgPSBxdWFudDsKLSAgICAgICAgaWYgKGR0ZC0+c2NhZmZMZXZlbCA9PSAwKSB7
Ci0gICAgICAgICAgaWYgKCFoYW5kbGVEZWZhdWx0KSB7Ci0gICAgICAgICAgICBYTUxfQ29udGVu
dCAqbW9kZWwgPSBidWlsZF9tb2RlbChwYXJzZXIpOwotICAgICAgICAgICAgaWYgKCFtb2RlbCkK
LSAgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgICAgICAq
ZXZlbnRFbmRQUCA9IHM7Ci0gICAgICAgICAgICBlbGVtZW50RGVjbEhhbmRsZXIoaGFuZGxlckFy
ZywgZGVjbEVsZW1lbnRUeXBlLT5uYW1lLCBtb2RlbCk7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGR0ZC0+aW5fZWxkZWNsID0gWE1MX0ZBTFNFOwotICAgICAgICAgIGR0ZC0+Y29udGVudFN0cmlu
Z0xlbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgICAgLyogRW5k
IGVsZW1lbnQgZGVjbGFyYXRpb24gc3R1ZmYgKi8KLQotICAgIGNhc2UgWE1MX1JPTEVfUEk6Ci0g
ICAgICBpZiAoIXJlcG9ydFByb2Nlc3NpbmdJbnN0cnVjdGlvbihwYXJzZXIsIGVuYywgcywgbmV4
dCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgaGFuZGxlRGVm
YXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfQ09NTUVO
VDoKLSAgICAgIGlmICghcmVwb3J0Q29tbWVudChwYXJzZXIsIGVuYywgcywgbmV4dCkpCi0gICAg
ICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgaGFuZGxlRGVmYXVsdCA9IFhN
TF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgWE1MX1JPTEVfTk9ORToKLSAgICAgIHN3
aXRjaCAodG9rKSB7Ci0gICAgICBjYXNlIFhNTF9UT0tfQk9NOgotICAgICAgICBoYW5kbGVEZWZh
dWx0ID0gWE1MX0ZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgWE1MX1JPTEVfRE9DVFlQRV9OT05FOgotICAgICAgaWYgKHN0YXJ0RG9jdHlwZURl
Y2xIYW5kbGVyKQotICAgICAgICBoYW5kbGVEZWZhdWx0ID0gWE1MX0ZBTFNFOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9FTlRJVFlfTk9ORToKLSAgICAgIGlmIChkdGQtPmtlZXBQ
cm9jZXNzaW5nICYmIGVudGl0eURlY2xIYW5kbGVyKQotICAgICAgICBoYW5kbGVEZWZhdWx0ID0g
WE1MX0ZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfUk9MRV9OT1RBVElPTl9OT05F
OgotICAgICAgaWYgKG5vdGF0aW9uRGVjbEhhbmRsZXIpCi0gICAgICAgIGhhbmRsZURlZmF1bHQg
PSBYTUxfRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9ST0xFX0FUVExJU1RfTk9O
RToKLSAgICAgIGlmIChkdGQtPmtlZXBQcm9jZXNzaW5nICYmIGF0dGxpc3REZWNsSGFuZGxlcikK
LSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgWE1MX1JPTEVfRUxFTUVOVF9OT05FOgotICAgICAgaWYgKGVsZW1lbnREZWNsSGFuZGxlcikK
LSAgICAgICAgaGFuZGxlRGVmYXVsdCA9IFhNTF9GQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0g
LyogZW5kIG9mIGJpZyBzd2l0Y2ggKi8KLQotICAgIGlmIChoYW5kbGVEZWZhdWx0ICYmIGRlZmF1
bHRIYW5kbGVyKQotICAgICAgcmVwb3J0RGVmYXVsdChwYXJzZXIsIGVuYywgcywgbmV4dCk7Ci0K
LSAgICBzd2l0Y2ggKHBzX3BhcnNpbmcpIHsKLSAgICBjYXNlIFhNTF9TVVNQRU5ERUQ6Ci0gICAg
ICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2Fz
ZSBYTUxfRklOSVNIRUQ6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIHMgPSBuZXh0OwotICAgICAgdG9rID0gWG1sUHJvbG9nVG9rKGVuYywgcywg
ZW5kLCAmbmV4dCk7Ci0gICAgfQotICB9Ci0gIC8qIG5vdCByZWFjaGVkICovCi19Ci0KLXN0YXRp
YyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1lcGlsb2dQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJz
ZXIsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywKLSAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRQdHIpCi17Ci0g
IHByb2Nlc3NvciA9IGVwaWxvZ1Byb2Nlc3NvcjsKLSAgZXZlbnRQdHIgPSBzOwotICBmb3IgKDs7
KSB7Ci0gICAgY29uc3QgY2hhciAqbmV4dCA9IE5VTEw7Ci0gICAgaW50IHRvayA9IFhtbFByb2xv
Z1RvayhlbmNvZGluZywgcywgZW5kLCAmbmV4dCk7Ci0gICAgZXZlbnRFbmRQdHIgPSBuZXh0Owot
ICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgLyogcmVwb3J0IHBhcnRpYWwgbGluZWJyZWFrIC0gaXQg
bWlnaHQgYmUgdGhlIGxhc3QgdG9rZW4gKi8KLSAgICBjYXNlIC1YTUxfVE9LX1BST0xPR19TOgot
ICAgICAgaWYgKGRlZmF1bHRIYW5kbGVyKSB7Ci0gICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2Vy
LCBlbmNvZGluZywgcywgbmV4dCk7Ci0gICAgICAgIGlmIChwc19wYXJzaW5nID09IFhNTF9GSU5J
U0hFRCkKLSAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0FCT1JURUQ7Ci0gICAgICB9Ci0gICAg
ICAqbmV4dFB0ciA9IG5leHQ7Ci0gICAgICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci0gICAgY2Fz
ZSBYTUxfVE9LX05PTkU6Ci0gICAgICAqbmV4dFB0ciA9IHM7Ci0gICAgICByZXR1cm4gWE1MX0VS
Uk9SX05PTkU7Ci0gICAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgICAgaWYgKGRlZmF1bHRI
YW5kbGVyKQotICAgICAgICByZXBvcnREZWZhdWx0KHBhcnNlciwgZW5jb2RpbmcsIHMsIG5leHQp
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfVE9LX1BJOgotICAgICAgaWYgKCFyZXBvcnRQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyc2VyLCBlbmNvZGluZywgcywgbmV4dCkpCi0gICAgICAg
IHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxf
VE9LX0NPTU1FTlQ6Ci0gICAgICBpZiAoIXJlcG9ydENvbW1lbnQocGFyc2VyLCBlbmNvZGluZywg
cywgbmV4dCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBYTUxfVE9LX0lOVkFMSUQ6Ci0gICAgICBldmVudFB0ciA9IG5leHQ7Ci0g
ICAgICByZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAgY2FzZSBYTUxfVE9LX1BB
UlRJQUw6Ci0gICAgICBpZiAoIXBzX2ZpbmFsQnVmZmVyKSB7Ci0gICAgICAgICpuZXh0UHRyID0g
czsKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgICAgfQotICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTjsKLSAgICBjYXNlIFhNTF9UT0tfUEFSVElBTF9DSEFS
OgotICAgICAgaWYgKCFwc19maW5hbEJ1ZmZlcikgewotICAgICAgICAqbmV4dFB0ciA9IHM7Ci0g
ICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9ORTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBYTUxf
RVJST1JfUEFSVElBTF9DSEFSOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gWE1MX0VSUk9S
X0pVTktfQUZURVJfRE9DX0VMRU1FTlQ7Ci0gICAgfQotICAgIGV2ZW50UHRyID0gcyA9IG5leHQ7
Ci0gICAgc3dpdGNoIChwc19wYXJzaW5nKSB7Ci0gICAgY2FzZSBYTUxfU1VTUEVOREVEOgotICAg
ICAgKm5leHRQdHIgPSBuZXh0OwotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIGNh
c2UgWE1MX0ZJTklTSEVEOgotICAgICAgcmV0dXJuIFhNTF9FUlJPUl9BQk9SVEVEOwotICAgIGRl
ZmF1bHQ6IDsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGVudW0gWE1MX0Vycm9yCi1wcm9jZXNz
SW50ZXJuYWxFbnRpdHkoWE1MX1BhcnNlciBwYXJzZXIsIEVOVElUWSAqZW50aXR5LAotICAgICAg
ICAgICAgICAgICAgICAgIFhNTF9Cb29sIGJldHdlZW5EZWNsKQotewotICBjb25zdCBjaGFyICp0
ZXh0U3RhcnQsICp0ZXh0RW5kOwotICBjb25zdCBjaGFyICpuZXh0OwotICBlbnVtIFhNTF9FcnJv
ciByZXN1bHQ7Ci0gIE9QRU5fSU5URVJOQUxfRU5USVRZICpvcGVuRW50aXR5OwotCi0gIGlmIChm
cmVlSW50ZXJuYWxFbnRpdGllcykgewotICAgIG9wZW5FbnRpdHkgPSBmcmVlSW50ZXJuYWxFbnRp
dGllczsKLSAgICBmcmVlSW50ZXJuYWxFbnRpdGllcyA9IG9wZW5FbnRpdHktPm5leHQ7Ci0gIH0K
LSAgZWxzZSB7Ci0gICAgb3BlbkVudGl0eSA9IChPUEVOX0lOVEVSTkFMX0VOVElUWSAqKU1BTExP
QyhzaXplb2YoT1BFTl9JTlRFUk5BTF9FTlRJVFkpKTsKLSAgICBpZiAoIW9wZW5FbnRpdHkpCi0g
ICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgfQotICBlbnRpdHktPm9wZW4gPSBY
TUxfVFJVRTsKLSAgZW50aXR5LT5wcm9jZXNzZWQgPSAwOwotICBvcGVuRW50aXR5LT5uZXh0ID0g
b3BlbkludGVybmFsRW50aXRpZXM7Ci0gIG9wZW5JbnRlcm5hbEVudGl0aWVzID0gb3BlbkVudGl0
eTsKLSAgb3BlbkVudGl0eS0+ZW50aXR5ID0gZW50aXR5OwotICBvcGVuRW50aXR5LT5zdGFydFRh
Z0xldmVsID0gdGFnTGV2ZWw7Ci0gIG9wZW5FbnRpdHktPmJldHdlZW5EZWNsID0gYmV0d2VlbkRl
Y2w7Ci0gIG9wZW5FbnRpdHktPmludGVybmFsRXZlbnRQdHIgPSBOVUxMOwotICBvcGVuRW50aXR5
LT5pbnRlcm5hbEV2ZW50RW5kUHRyID0gTlVMTDsKLSAgdGV4dFN0YXJ0ID0gKGNoYXIgKillbnRp
dHktPnRleHRQdHI7Ci0gIHRleHRFbmQgPSAoY2hhciAqKShlbnRpdHktPnRleHRQdHIgKyBlbnRp
dHktPnRleHRMZW4pOwotCi0jaWZkZWYgWE1MX0RURAotICBpZiAoZW50aXR5LT5pc19wYXJhbSkg
ewotICAgIGludCB0b2sgPSBYbWxQcm9sb2dUb2soaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0YXJ0
LCB0ZXh0RW5kLCAmbmV4dCk7Ci0gICAgcmVzdWx0ID0gZG9Qcm9sb2cocGFyc2VyLCBpbnRlcm5h
bEVuY29kaW5nLCB0ZXh0U3RhcnQsIHRleHRFbmQsIHRvaywKLSAgICAgICAgICAgICAgICAgICAg
ICBuZXh0LCAmbmV4dCwgWE1MX0ZBTFNFKTsKLSAgfQotICBlbHNlCi0jZW5kaWYgLyogWE1MX0RU
RCAqLwotICAgIHJlc3VsdCA9IGRvQ29udGVudChwYXJzZXIsIHRhZ0xldmVsLCBpbnRlcm5hbEVu
Y29kaW5nLCB0ZXh0U3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmQsICZuZXh0
LCBYTUxfRkFMU0UpOwotCi0gIGlmIChyZXN1bHQgPT0gWE1MX0VSUk9SX05PTkUpIHsKLSAgICBp
ZiAodGV4dEVuZCAhPSBuZXh0ICYmIHBzX3BhcnNpbmcgPT0gWE1MX1NVU1BFTkRFRCkgewotICAg
ICAgZW50aXR5LT5wcm9jZXNzZWQgPSAoaW50KShuZXh0IC0gdGV4dFN0YXJ0KTsKLSAgICAgIHBy
b2Nlc3NvciA9IGludGVybmFsRW50aXR5UHJvY2Vzc29yOwotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgIG9wZW5JbnRlcm5hbEVudGl0aWVz
ID0gb3BlbkVudGl0eS0+bmV4dDsKLSAgICAgIC8qIHB1dCBvcGVuRW50aXR5IGJhY2sgaW4gbGlz
dCBvZiBmcmVlIGluc3RhbmNlcyAqLwotICAgICAgb3BlbkVudGl0eS0+bmV4dCA9IGZyZWVJbnRl
cm5hbEVudGl0aWVzOwotICAgICAgZnJlZUludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5Owot
ICAgIH0KLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3Ig
UFRSQ0FMTAotaW50ZXJuYWxFbnRpdHlQcm9jZXNzb3IoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
Km5leHRQdHIpCi17Ci0gIEVOVElUWSAqZW50aXR5OwotICBjb25zdCBjaGFyICp0ZXh0U3RhcnQs
ICp0ZXh0RW5kOwotICBjb25zdCBjaGFyICpuZXh0OwotICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7
Ci0gIE9QRU5fSU5URVJOQUxfRU5USVRZICpvcGVuRW50aXR5ID0gb3BlbkludGVybmFsRW50aXRp
ZXM7Ci0gIGlmICghb3BlbkVudGl0eSkKLSAgICByZXR1cm4gWE1MX0VSUk9SX1VORVhQRUNURURf
U1RBVEU7Ci0KLSAgZW50aXR5ID0gb3BlbkVudGl0eS0+ZW50aXR5OwotICB0ZXh0U3RhcnQgPSAo
KGNoYXIgKillbnRpdHktPnRleHRQdHIpICsgZW50aXR5LT5wcm9jZXNzZWQ7Ci0gIHRleHRFbmQg
PSAoY2hhciAqKShlbnRpdHktPnRleHRQdHIgKyBlbnRpdHktPnRleHRMZW4pOwotCi0jaWZkZWYg
WE1MX0RURAotICBpZiAoZW50aXR5LT5pc19wYXJhbSkgewotICAgIGludCB0b2sgPSBYbWxQcm9s
b2dUb2soaW50ZXJuYWxFbmNvZGluZywgdGV4dFN0YXJ0LCB0ZXh0RW5kLCAmbmV4dCk7Ci0gICAg
cmVzdWx0ID0gZG9Qcm9sb2cocGFyc2VyLCBpbnRlcm5hbEVuY29kaW5nLCB0ZXh0U3RhcnQsIHRl
eHRFbmQsIHRvaywKLSAgICAgICAgICAgICAgICAgICAgICBuZXh0LCAmbmV4dCwgWE1MX0ZBTFNF
KTsKLSAgfQotICBlbHNlCi0jZW5kaWYgLyogWE1MX0RURCAqLwotICAgIHJlc3VsdCA9IGRvQ29u
dGVudChwYXJzZXIsIG9wZW5FbnRpdHktPnN0YXJ0VGFnTGV2ZWwsIGludGVybmFsRW5jb2Rpbmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGFydCwgdGV4dEVuZCwgJm5leHQsIFhNTF9G
QUxTRSk7Ci0KLSAgaWYgKHJlc3VsdCAhPSBYTUxfRVJST1JfTk9ORSkKLSAgICByZXR1cm4gcmVz
dWx0OwotICBlbHNlIGlmICh0ZXh0RW5kICE9IG5leHQgJiYgcHNfcGFyc2luZyA9PSBYTUxfU1VT
UEVOREVEKSB7Ci0gICAgZW50aXR5LT5wcm9jZXNzZWQgPSAoaW50KShuZXh0IC0gKGNoYXIgKill
bnRpdHktPnRleHRQdHIpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgZWxzZSB7Ci0gICAg
ZW50aXR5LT5vcGVuID0gWE1MX0ZBTFNFOwotICAgIG9wZW5JbnRlcm5hbEVudGl0aWVzID0gb3Bl
bkVudGl0eS0+bmV4dDsKLSAgICAvKiBwdXQgb3BlbkVudGl0eSBiYWNrIGluIGxpc3Qgb2YgZnJl
ZSBpbnN0YW5jZXMgKi8KLSAgICBvcGVuRW50aXR5LT5uZXh0ID0gZnJlZUludGVybmFsRW50aXRp
ZXM7Ci0gICAgZnJlZUludGVybmFsRW50aXRpZXMgPSBvcGVuRW50aXR5OwotICB9Ci0KLSNpZmRl
ZiBYTUxfRFRECi0gIGlmIChlbnRpdHktPmlzX3BhcmFtKSB7Ci0gICAgaW50IHRvazsKLSAgICBw
cm9jZXNzb3IgPSBwcm9sb2dQcm9jZXNzb3I7Ci0gICAgdG9rID0gWG1sUHJvbG9nVG9rKGVuY29k
aW5nLCBzLCBlbmQsICZuZXh0KTsKLSAgICByZXR1cm4gZG9Qcm9sb2cocGFyc2VyLCBlbmNvZGlu
ZywgcywgZW5kLCB0b2ssIG5leHQsIG5leHRQdHIsCi0gICAgICAgICAgICAgICAgICAgIChYTUxf
Qm9vbCkhcHNfZmluYWxCdWZmZXIpOwotICB9Ci0gIGVsc2UKLSNlbmRpZiAvKiBYTUxfRFREICov
Ci0gIHsKLSAgICBwcm9jZXNzb3IgPSBjb250ZW50UHJvY2Vzc29yOwotICAgIC8qIHNlZSBleHRl
cm5hbEVudGl0eUNvbnRlbnRQcm9jZXNzb3IgdnMgY29udGVudFByb2Nlc3NvciAqLwotICAgIHJl
dHVybiBkb0NvbnRlbnQocGFyc2VyLCBwYXJlbnRQYXJzZXIgPyAxIDogMCwgZW5jb2RpbmcsIHMs
IGVuZCwKLSAgICAgICAgICAgICAgICAgICAgIG5leHRQdHIsIChYTUxfQm9vbCkhcHNfZmluYWxC
dWZmZXIpOwotICB9Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9FcnJvciBQVFJDQUxMCi1lcnJvclBy
b2Nlc3NvcihYTUxfUGFyc2VyIHBhcnNlciwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMs
Ci0gICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICBjb25zdCBj
aGFyICoqbmV4dFB0cikKLXsKLSAgcmV0dXJuIGVycm9yQ29kZTsKLX0KLQotc3RhdGljIGVudW0g
WE1MX0Vycm9yCi1zdG9yZUF0dHJpYnV0ZVZhbHVlKFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBF
TkNPRElORyAqZW5jLCBYTUxfQm9vbCBpc0NkYXRhLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgU1RSSU5H
X1BPT0wgKnBvb2wpCi17Ci0gIGVudW0gWE1MX0Vycm9yIHJlc3VsdCA9IGFwcGVuZEF0dHJpYnV0
ZVZhbHVlKHBhcnNlciwgZW5jLCBpc0NkYXRhLCBwdHIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwgcG9vbCk7Ci0gIGlmIChyZXN1bHQpCi0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgaWYgKCFpc0NkYXRhICYmIHBvb2xMZW5ndGgocG9vbCkgJiYgcG9v
bExhc3RDaGFyKHBvb2wpID09IDB4MjApCi0gICAgcG9vbENob3AocG9vbCk7Ci0gIGlmICghcG9v
bEFwcGVuZENoYXIocG9vbCwgWE1MX1QoJ1wwJykpKQotICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOwotICByZXR1cm4gWE1MX0VSUk9SX05PTkU7Ci19Ci0KLXN0YXRpYyBlbnVtIFhNTF9F
cnJvcgotYXBwZW5kQXR0cmlidXRlVmFsdWUoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09E
SU5HICplbmMsIFhNTF9Cb29sIGlzQ2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgIFNUUklOR19Q
T09MICpwb29sKQotewotICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2
ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgZm9yICg7OykgewotICAgIGNvbnN0IGNoYXIgKm5leHQ7
Ci0gICAgaW50IHRvayA9IFhtbEF0dHJpYnV0ZVZhbHVlVG9rKGVuYywgcHRyLCBlbmQsICZuZXh0
KTsKLSAgICBzd2l0Y2ggKHRvaykgewotICAgIGNhc2UgWE1MX1RPS19OT05FOgotICAgICAgcmV0
dXJuIFhNTF9FUlJPUl9OT05FOwotICAgIGNhc2UgWE1MX1RPS19JTlZBTElEOgotICAgICAgaWYg
KGVuYyA9PSBlbmNvZGluZykKLSAgICAgICAgZXZlbnRQdHIgPSBuZXh0OwotICAgICAgcmV0dXJu
IFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICAgIGNhc2UgWE1MX1RPS19QQVJUSUFMOgotICAg
ICAgaWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAgICAgZXZlbnRQdHIgPSBwdHI7Ci0gICAgICBy
ZXR1cm4gWE1MX0VSUk9SX0lOVkFMSURfVE9LRU47Ci0gICAgY2FzZSBYTUxfVE9LX0NIQVJfUkVG
OgotICAgICAgewotICAgICAgICBYTUxfQ2hhciBidWZbWE1MX0VOQ09ERV9NQVhdOwotICAgICAg
ICBpbnQgaTsKLSAgICAgICAgaW50IG4gPSBYbWxDaGFyUmVmTnVtYmVyKGVuYywgcHRyKTsKLSAg
ICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGluZykKLSAgICAg
ICAgICAgIGV2ZW50UHRyID0gcHRyOwotICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfQkFEX0NI
QVJfUkVGOwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXNDZGF0YQotICAgICAgICAgICAgJiYg
biA9PSAweDIwIC8qIHNwYWNlICovCi0gICAgICAgICAgICAmJiAocG9vbExlbmd0aChwb29sKSA9
PSAwIHx8IHBvb2xMYXN0Q2hhcihwb29sKSA9PSAweDIwKSkKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgbiA9IFhtbEVuY29kZShuLCAoSUNIQVIgKilidWYpOwotICAgICAgICBpZiAoIW4pIHsK
LSAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICAgICAgZXZlbnRQdHIgPSBw
dHI7Ci0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9CQURfQ0hBUl9SRUY7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgIGlmICghcG9vbEFw
cGVuZENoYXIocG9vbCwgYnVmW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9f
TUVNT1JZOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFhNTF9U
T0tfREFUQV9DSEFSUzoKLSAgICAgIGlmICghcG9vbEFwcGVuZChwb29sLCBlbmMsIHB0ciwgbmV4
dCkpCi0gICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBYTUxfVE9LX1RSQUlMSU5HX0NSOgotICAgICAgbmV4dCA9IHB0ciArIGVuYy0+bWlu
Qnl0ZXNQZXJDaGFyOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBYTUxfVE9L
X0FUVFJJQlVURV9WQUxVRV9TOgotICAgIGNhc2UgWE1MX1RPS19EQVRBX05FV0xJTkU6Ci0gICAg
ICBpZiAoIWlzQ2RhdGEgJiYgKHBvb2xMZW5ndGgocG9vbCkgPT0gMCB8fCBwb29sTGFzdENoYXIo
cG9vbCkgPT0gMHgyMCkpCi0gICAgICAgIGJyZWFrOwotICAgICAgaWYgKCFwb29sQXBwZW5kQ2hh
cihwb29sLCAweDIwKSkKLSAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIFhNTF9UT0tfRU5USVRZX1JFRjoKLSAgICAgIHsKLSAgICAgICAg
Y29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0gICAgICAgIEVOVElUWSAqZW50aXR5OwotICAgICAgICBj
aGFyIGNoZWNrRW50aXR5RGVjbDsKLSAgICAgICAgWE1MX0NoYXIgY2ggPSAoWE1MX0NoYXIpIFht
bFByZWRlZmluZWRFbnRpdHlOYW1lKGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdHIgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IC0gZW5jLT5taW5CeXRlc1Bl
ckNoYXIpOwotICAgICAgICBpZiAoY2gpIHsKLSAgICAgICAgICBpZiAoIXBvb2xBcHBlbmRDaGFy
KHBvb2wsIGNoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUk9SX05PX01FTU9SWTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBuYW1lID0gcG9vbFN0b3JlU3Ry
aW5nKCZ0ZW1wMlBvb2wsIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIg
KyBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXh0IC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAg
ICAgcmV0dXJuIFhNTF9FUlJPUl9OT19NRU1PUlk7Ci0gICAgICAgIGVudGl0eSA9IChFTlRJVFkg
Kilsb29rdXAocGFyc2VyLCAmZHRkLT5nZW5lcmFsRW50aXRpZXMsIG5hbWUsIDApOwotICAgICAg
ICBwb29sRGlzY2FyZCgmdGVtcDJQb29sKTsKLSAgICAgICAgLyogRmlyc3QsIGRldGVybWluZSBp
ZiBhIGNoZWNrIGZvciBhbiBleGlzdGluZyBkZWNsYXJhdGlvbiBpcyBuZWVkZWQ7Ci0gICAgICAg
ICAgIGlmIHllcywgY2hlY2sgdGhhdCB0aGUgZW50aXR5IGV4aXN0cywgYW5kIHRoYXQgaXQgaXMg
aW50ZXJuYWwuCi0gICAgICAgICovCi0gICAgICAgIGlmIChwb29sID09ICZkdGQtPnBvb2wpICAv
KiBhcmUgd2UgY2FsbGVkIGZyb20gcHJvbG9nPyAqLwotICAgICAgICAgIGNoZWNrRW50aXR5RGVj
bCA9Ci0jaWZkZWYgWE1MX0RURAotICAgICAgICAgICAgICBwcm9sb2dTdGF0ZS5kb2N1bWVudEVu
dGl0eSAmJgotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgICAgICAgICAgICAgKGR0ZC0+c3RhbmRh
bG9uZQotICAgICAgICAgICAgICAgPyAhb3BlbkludGVybmFsRW50aXRpZXMKLSAgICAgICAgICAg
ICAgIDogIWR0ZC0+aGFzUGFyYW1FbnRpdHlSZWZzKTsKLSAgICAgICAgZWxzZSAvKiBpZiAocG9v
bCA9PSAmdGVtcFBvb2wpOiB3ZSBhcmUgY2FsbGVkIGZyb20gY29udGVudCAqLwotICAgICAgICAg
IGNoZWNrRW50aXR5RGVjbCA9ICFkdGQtPmhhc1BhcmFtRW50aXR5UmVmcyB8fCBkdGQtPnN0YW5k
YWxvbmU7Ci0gICAgICAgIGlmIChjaGVja0VudGl0eURlY2wpIHsKLSAgICAgICAgICBpZiAoIWVu
dGl0eSkKLSAgICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWTsKLSAg
ICAgICAgICBlbHNlIGlmICghZW50aXR5LT5pc19pbnRlcm5hbCkKLSAgICAgICAgICAgIHJldHVy
biBYTUxfRVJST1JfRU5USVRZX0RFQ0xBUkVEX0lOX1BFOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKCFlbnRpdHkpIHsKLSAgICAgICAgICAvKiBDYW5ub3QgcmVwb3J0IHNraXBwZWQgZW50
aXR5IGhlcmUgLSBzZWUgY29tbWVudHMgb24KLSAgICAgICAgICAgICBza2lwcGVkRW50aXR5SGFu
ZGxlci4KLSAgICAgICAgICBpZiAoc2tpcHBlZEVudGl0eUhhbmRsZXIpCi0gICAgICAgICAgICBz
a2lwcGVkRW50aXR5SGFuZGxlcihoYW5kbGVyQXJnLCBuYW1lLCAwKTsKLSAgICAgICAgICAqLwot
ICAgICAgICAgIC8qIENhbm5vdCBjYWxsIHRoZSBkZWZhdWx0IGhhbmRsZXIgYmVjYXVzZSB0aGlz
IHdvdWxkIGJlCi0gICAgICAgICAgICAgb3V0IG9mIHN5bmMgd2l0aCB0aGUgY2FsbCB0byB0aGUg
c3RhcnRFbGVtZW50SGFuZGxlci4KLSAgICAgICAgICBpZiAoKHBvb2wgPT0gJnRlbXBQb29sKSAm
JiBkZWZhdWx0SGFuZGxlcikKLSAgICAgICAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMs
IHB0ciwgbmV4dCk7Ci0gICAgICAgICAgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoZW50aXR5LT5vcGVuKSB7Ci0gICAgICAgICAgaWYgKGVuYyA9PSBlbmNvZGlu
ZykKLSAgICAgICAgICAgIGV2ZW50UHRyID0gcHRyOwotICAgICAgICAgIHJldHVybiBYTUxfRVJS
T1JfUkVDVVJTSVZFX0VOVElUWV9SRUY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudGl0eS0+
bm90YXRpb24pIHsKLSAgICAgICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICAgICAg
ZXZlbnRQdHIgPSBwdHI7Ci0gICAgICAgICAgcmV0dXJuIFhNTF9FUlJPUl9CSU5BUllfRU5USVRZ
X1JFRjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVudGl0eS0+dGV4dFB0cikgewotICAgICAg
ICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAgICAgICAgICBldmVudFB0ciA9IHB0cjsKLSAg
ICAgICAgICByZXR1cm4gWE1MX0VSUk9SX0FUVFJJQlVURV9FWFRFUk5BTF9FTlRJVFlfUkVGOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGVudW0gWE1MX0Vycm9yIHJlc3Vs
dDsKLSAgICAgICAgICBjb25zdCBYTUxfQ2hhciAqdGV4dEVuZCA9IGVudGl0eS0+dGV4dFB0ciAr
IGVudGl0eS0+dGV4dExlbjsKLSAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfVFJVRTsKLSAg
ICAgICAgICByZXN1bHQgPSBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShwYXJzZXIsIGludGVybmFsRW5j
b2RpbmcsIGlzQ2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNoYXIgKillbnRpdHktPnRleHRQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoYXIgKil0ZXh0RW5kLCBwb29sKTsKLSAgICAgICAgICBlbnRpdHktPm9wZW4g
PSBYTUxfRkFMU0U7Ci0gICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICBpZiAoZW5jID09IGVuY29kaW5nKQotICAgICAgICBldmVudFB0ciA9IHB0cjsKLSAgICAg
IHJldHVybiBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURTsKLSAgICB9Ci0gICAgcHRyID0gbmV4
dDsKLSAgfQotICAvKiBub3QgcmVhY2hlZCAqLwotfQotCi1zdGF0aWMgZW51bSBYTUxfRXJyb3IK
LXN0b3JlRW50aXR5VmFsdWUoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAgICAgICAgICAgICAgIGNv
bnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVudGl0eVRl
eHRQdHIsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVudGl0eVRleHRFbmQpCi17Ci0g
IERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlv
biAqLwotICBTVFJJTkdfUE9PTCAqcG9vbCA9ICYoZHRkLT5lbnRpdHlWYWx1ZVBvb2wpOwotICBl
bnVtIFhNTF9FcnJvciByZXN1bHQgPSBYTUxfRVJST1JfTk9ORTsKLSNpZmRlZiBYTUxfRFRECi0g
IGludCBvbGRJbkVudGl0eVZhbHVlID0gcHJvbG9nU3RhdGUuaW5FbnRpdHlWYWx1ZTsKLSAgcHJv
bG9nU3RhdGUuaW5FbnRpdHlWYWx1ZSA9IDE7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotICAvKiBu
ZXZlciByZXR1cm4gTnVsbCBmb3IgdGhlIHZhbHVlIGFyZ3VtZW50IGluIEVudGl0eURlY2xIYW5k
bGVyLAotICAgICBzaW5jZSB0aGlzIHdvdWxkIGluZGljYXRlIGFuIGV4dGVybmFsIGVudGl0eTsg
dGhlcmVmb3JlIHdlCi0gICAgIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgZW50aXR5VmFsdWVQb29s
LnN0YXJ0IGlzIG5vdCBudWxsICovCi0gIGlmICghcG9vbC0+YmxvY2tzKSB7Ci0gICAgaWYgKCFw
b29sR3Jvdyhwb29sKSkKLSAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwotICB9Ci0K
LSAgZm9yICg7OykgewotICAgIGNvbnN0IGNoYXIgKm5leHQ7Ci0gICAgaW50IHRvayA9IFhtbEVu
dGl0eVZhbHVlVG9rKGVuYywgZW50aXR5VGV4dFB0ciwgZW50aXR5VGV4dEVuZCwgJm5leHQpOwot
ICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgY2FzZSBYTUxfVE9LX1BBUkFNX0VOVElUWV9SRUY6Ci0j
aWZkZWYgWE1MX0RURAotICAgICAgaWYgKGlzUGFyYW1FbnRpdHkgfHwgZW5jICE9IGVuY29kaW5n
KSB7Ci0gICAgICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICAgICAgICBFTlRJVFkgKmVudGl0
eTsKLSAgICAgICAgbmFtZSA9IHBvb2xTdG9yZVN0cmluZygmdGVtcFBvb2wsIGVuYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUZXh0UHRyICsgZW5jLT5taW5CeXRlc1Bl
ckNoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCAtIGVuYy0+bWluQnl0
ZXNQZXJDaGFyKTsKLSAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gWE1M
X0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwotICAgICAg
ICB9Ci0gICAgICAgIGVudGl0eSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAmZHRkLT5wYXJh
bUVudGl0aWVzLCBuYW1lLCAwKTsKLSAgICAgICAgcG9vbERpc2NhcmQoJnRlbXBQb29sKTsKLSAg
ICAgICAgaWYgKCFlbnRpdHkpIHsKLSAgICAgICAgICAvKiBub3QgYSB3ZWxsLWZvcm1lZG5lc3Mg
ZXJyb3IgLSBzZWUgWE1MIDEuMDogV0ZDIEVudGl0eSBEZWNsYXJlZCAqLwotICAgICAgICAgIC8q
IGNhbm5vdCByZXBvcnQgc2tpcHBlZCBlbnRpdHkgaGVyZSAtIHNlZSBjb21tZW50cyBvbgotICAg
ICAgICAgICAgIHNraXBwZWRFbnRpdHlIYW5kbGVyCi0gICAgICAgICAgaWYgKHNraXBwZWRFbnRp
dHlIYW5kbGVyKQotICAgICAgICAgICAgc2tpcHBlZEVudGl0eUhhbmRsZXIoaGFuZGxlckFyZywg
bmFtZSwgMCk7Ci0gICAgICAgICAgKi8KLSAgICAgICAgICBkdGQtPmtlZXBQcm9jZXNzaW5nID0g
ZHRkLT5zdGFuZGFsb25lOwotICAgICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGVudGl0eS0+b3BlbikgewotICAgICAgICAgIGlmIChlbmMgPT0gZW5j
b2RpbmcpCi0gICAgICAgICAgICBldmVudFB0ciA9IGVudGl0eVRleHRQdHI7Ci0gICAgICAgICAg
cmVzdWx0ID0gWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGOwotICAgICAgICAgIGdvdG8g
ZW5kRW50aXR5VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudGl0eS0+c3lzdGVtSWQp
IHsKLSAgICAgICAgICBpZiAoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKSB7Ci0gICAgICAgICAg
ICBkdGQtPnBhcmFtRW50aXR5UmVhZCA9IFhNTF9GQUxTRTsKLSAgICAgICAgICAgIGVudGl0eS0+
b3BlbiA9IFhNTF9UUlVFOwotICAgICAgICAgICAgaWYgKCFleHRlcm5hbEVudGl0eVJlZkhhbmRs
ZXIoZXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudGl0eS0+YmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudGl0eS0+c3lzdGVtSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbnRpdHktPnB1YmxpY0lkKSkgewotICAgICAgICAgICAgICBlbnRpdHktPm9w
ZW4gPSBYTUxfRkFMU0U7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9FWFRFUk5B
TF9FTlRJVFlfSEFORExJTkc7Ci0gICAgICAgICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbnRpdHktPm9wZW4gPSBYTUxfRkFMU0U7Ci0gICAg
ICAgICAgICBpZiAoIWR0ZC0+cGFyYW1FbnRpdHlSZWFkKQotICAgICAgICAgICAgICBkdGQtPmtl
ZXBQcm9jZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwotICAgICAgICAgIH0KLSAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkdGQtPmtlZXBQcm9jZXNzaW5nID0gZHRkLT5zdGFuZGFsb25lOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9U
UlVFOwotICAgICAgICAgIHJlc3VsdCA9IHN0b3JlRW50aXR5VmFsdWUocGFyc2VyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxFbmNvZGluZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZW50aXR5LT50ZXh0UHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikoZW50aXR5LT50ZXh0UHRy
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGVudGl0eS0+
dGV4dExlbikpOwotICAgICAgICAgIGVudGl0eS0+b3BlbiA9IFhNTF9GQUxTRTsKLSAgICAgICAg
ICBpZiAocmVzdWx0KQotICAgICAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBYTUxfRFREICovCi0gICAgICAv
KiBJbiB0aGUgaW50ZXJuYWwgc3Vic2V0LCBQRSByZWZlcmVuY2VzIGFyZSBub3QgbGVnYWwKLSAg
ICAgICAgIHdpdGhpbiBtYXJrdXAgZGVjbGFyYXRpb25zLCBlLmcgZW50aXR5IHZhbHVlcyBpbiB0
aGlzIGNhc2UuICovCi0gICAgICBldmVudFB0ciA9IGVudGl0eVRleHRQdHI7Ci0gICAgICByZXN1
bHQgPSBYTUxfRVJST1JfUEFSQU1fRU5USVRZX1JFRjsKLSAgICAgIGdvdG8gZW5kRW50aXR5VmFs
dWU7Ci0gICAgY2FzZSBYTUxfVE9LX05PTkU6Ci0gICAgICByZXN1bHQgPSBYTUxfRVJST1JfTk9O
RTsKLSAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0gICAgY2FzZSBYTUxfVE9LX0VOVElUWV9S
RUY6Ci0gICAgY2FzZSBYTUxfVE9LX0RBVEFfQ0hBUlM6Ci0gICAgICBpZiAoIXBvb2xBcHBlbmQo
cG9vbCwgZW5jLCBlbnRpdHlUZXh0UHRyLCBuZXh0KSkgewotICAgICAgICByZXN1bHQgPSBYTUxf
RVJST1JfTk9fTUVNT1JZOwotICAgICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwotICAgICAgfQot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYTUxfVE9LX1RSQUlMSU5HX0NSOgotICAgICAgbmV4dCA9
IGVudGl0eVRleHRQdHIgKyBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKLSAgICAgIC8qIGZhbGwgdGhy
b3VnaCAqLwotICAgIGNhc2UgWE1MX1RPS19EQVRBX05FV0xJTkU6Ci0gICAgICBpZiAocG9vbC0+
ZW5kID09IHBvb2wtPnB0ciAmJiAhcG9vbEdyb3cocG9vbCkpIHsKLSAgICAgICAgICAgICAgcmVz
dWx0ID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsK
LSAgICAgIH0KLSAgICAgICoocG9vbC0+cHRyKSsrID0gMHhBOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBYTUxfVE9LX0NIQVJfUkVGOgotICAgICAgewotICAgICAgICBYTUxfQ2hhciBidWZbWE1M
X0VOQ09ERV9NQVhdOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IG4gPSBYbWxDaGFyUmVm
TnVtYmVyKGVuYywgZW50aXR5VGV4dFB0cik7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAg
ICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAgICAgICAgICBldmVudFB0ciA9IGVudGl0eVRl
eHRQdHI7Ci0gICAgICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX0JBRF9DSEFSX1JFRjsKLSAgICAg
ICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIG4gPSBYbWxFbmNv
ZGUobiwgKElDSEFSICopYnVmKTsKLSAgICAgICAgaWYgKCFuKSB7Ci0gICAgICAgICAgaWYgKGVu
YyA9PSBlbmNvZGluZykKLSAgICAgICAgICAgIGV2ZW50UHRyID0gZW50aXR5VGV4dFB0cjsKLSAg
ICAgICAgICByZXN1bHQgPSBYTUxfRVJST1JfQkFEX0NIQVJfUkVGOwotICAgICAgICAgIGdvdG8g
ZW5kRW50aXR5VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkr
KykgewotICAgICAgICAgIGlmIChwb29sLT5lbmQgPT0gcG9vbC0+cHRyICYmICFwb29sR3Jvdyhw
b29sKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gWE1MX0VSUk9SX05PX01FTU9SWTsKLSAgICAg
ICAgICAgIGdvdG8gZW5kRW50aXR5VmFsdWU7Ci0gICAgICAgICAgfQotICAgICAgICAgICoocG9v
bC0+cHRyKSsrID0gYnVmW2ldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAg
ICBjYXNlIFhNTF9UT0tfUEFSVElBTDoKLSAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAg
ICAgIGV2ZW50UHRyID0gZW50aXR5VGV4dFB0cjsKLSAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9J
TlZBTElEX1RPS0VOOwotICAgICAgZ290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICBjYXNlIFhNTF9U
T0tfSU5WQUxJRDoKLSAgICAgIGlmIChlbmMgPT0gZW5jb2RpbmcpCi0gICAgICAgIGV2ZW50UHRy
ID0gbmV4dDsKLSAgICAgIHJlc3VsdCA9IFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOOwotICAgICAg
Z290byBlbmRFbnRpdHlWYWx1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgaWYgKGVuYyA9PSBlbmNv
ZGluZykKLSAgICAgICAgZXZlbnRQdHIgPSBlbnRpdHlUZXh0UHRyOwotICAgICAgcmVzdWx0ID0g
WE1MX0VSUk9SX1VORVhQRUNURURfU1RBVEU7Ci0gICAgICBnb3RvIGVuZEVudGl0eVZhbHVlOwot
ICAgIH0KLSAgICBlbnRpdHlUZXh0UHRyID0gbmV4dDsKLSAgfQotZW5kRW50aXR5VmFsdWU6Ci0j
aWZkZWYgWE1MX0RURAotICBwcm9sb2dTdGF0ZS5pbkVudGl0eVZhbHVlID0gb2xkSW5FbnRpdHlW
YWx1ZTsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyB2b2lkIEZBU1RDQUxMCi1ub3JtYWxpemVMaW5lcyhYTUxfQ2hhciAqcykKLXsKLSAgWE1MX0No
YXIgKnA7Ci0gIGZvciAoOzsgcysrKSB7Ci0gICAgaWYgKCpzID09IFhNTF9UKCdcMCcpKQotICAg
ICAgcmV0dXJuOwotICAgIGlmICgqcyA9PSAweEQpCi0gICAgICBicmVhazsKLSAgfQotICBwID0g
czsKLSAgZG8gewotICAgIGlmICgqcyA9PSAweEQpIHsKLSAgICAgICpwKysgPSAweEE7Ci0gICAg
ICBpZiAoKisrcyA9PSAweEEpCi0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgZWxzZQotICAgICAg
KnArKyA9ICpzKys7Ci0gIH0gd2hpbGUgKCpzKTsKLSAgKnAgPSBYTUxfVCgnXDAnKTsKLX0KLQot
c3RhdGljIGludAotcmVwb3J0UHJvY2Vzc2luZ0luc3RydWN0aW9uKFhNTF9QYXJzZXIgcGFyc2Vy
LCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCi17Ci0gIGNvbnN0IFhNTF9DaGFyICp0YXJn
ZXQ7Ci0gIFhNTF9DaGFyICpkYXRhOwotICBjb25zdCBjaGFyICp0ZW07Ci0gIGlmICghcHJvY2Vz
c2luZ0luc3RydWN0aW9uSGFuZGxlcikgewotICAgIGlmIChkZWZhdWx0SGFuZGxlcikKLSAgICAg
IHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHN0YXJ0LCBlbmQpOwotICAgIHJldHVybiAxOwot
ICB9Ci0gIHN0YXJ0ICs9IGVuYy0+bWluQnl0ZXNQZXJDaGFyICogMjsKLSAgdGVtID0gc3RhcnQg
KyBYbWxOYW1lTGVuZ3RoKGVuYywgc3RhcnQpOwotICB0YXJnZXQgPSBwb29sU3RvcmVTdHJpbmco
JnRlbXBQb29sLCBlbmMsIHN0YXJ0LCB0ZW0pOwotICBpZiAoIXRhcmdldCkKLSAgICByZXR1cm4g
MDsKLSAgcG9vbEZpbmlzaCgmdGVtcFBvb2wpOwotICBkYXRhID0gcG9vbFN0b3JlU3RyaW5nKCZ0
ZW1wUG9vbCwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgWG1sU2tpcFMoZW5jLCB0ZW0p
LAotICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gZW5jLT5taW5CeXRlc1BlckNoYXIqMik7
Ci0gIGlmICghZGF0YSkKLSAgICByZXR1cm4gMDsKLSAgbm9ybWFsaXplTGluZXMoZGF0YSk7Ci0g
IHByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIoaGFuZGxlckFyZywgdGFyZ2V0LCBkYXRhKTsK
LSAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci1y
ZXBvcnRDb21tZW50KFhNTF9QYXJzZXIgcGFyc2VyLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQotewotICBYTUxf
Q2hhciAqZGF0YTsKLSAgaWYgKCFjb21tZW50SGFuZGxlcikgewotICAgIGlmIChkZWZhdWx0SGFu
ZGxlcikKLSAgICAgIHJlcG9ydERlZmF1bHQocGFyc2VyLCBlbmMsIHN0YXJ0LCBlbmQpOwotICAg
IHJldHVybiAxOwotICB9Ci0gIGRhdGEgPSBwb29sU3RvcmVTdHJpbmcoJnRlbXBQb29sLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dCArIGVuYy0+bWluQnl0ZXNQZXJDaGFyICogNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhciAqIDMpOwotICBpZiAoIWRhdGEpCi0gICAgcmV0dXJu
IDA7Ci0gIG5vcm1hbGl6ZUxpbmVzKGRhdGEpOwotICBjb21tZW50SGFuZGxlcihoYW5kbGVyQXJn
LCBkYXRhKTsKLSAgcG9vbENsZWFyKCZ0ZW1wUG9vbCk7Ci0gIHJldHVybiAxOwotfQotCi1zdGF0
aWMgdm9pZAotcmVwb3J0RGVmYXVsdChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3QgRU5DT0RJTkcg
KmVuYywKLSAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZW5kKQotewot
ICBpZiAoTVVTVF9DT05WRVJUKGVuYywgcykpIHsKLSAgICBjb25zdCBjaGFyICoqZXZlbnRQUDsK
LSAgICBjb25zdCBjaGFyICoqZXZlbnRFbmRQUDsKLSAgICBpZiAoZW5jID09IGVuY29kaW5nKSB7
Ci0gICAgICBldmVudFBQID0gJmV2ZW50UHRyOwotICAgICAgZXZlbnRFbmRQUCA9ICZldmVudEVu
ZFB0cjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBldmVudFBQID0gJihvcGVuSW50ZXJuYWxF
bnRpdGllcy0+aW50ZXJuYWxFdmVudFB0cik7Ci0gICAgICBldmVudEVuZFBQID0gJihvcGVuSW50
ZXJuYWxFbnRpdGllcy0+aW50ZXJuYWxFdmVudEVuZFB0cik7Ci0gICAgfQotICAgIGRvIHsKLSAg
ICAgIElDSEFSICpkYXRhUHRyID0gKElDSEFSICopZGF0YUJ1ZjsKLSAgICAgIFhtbENvbnZlcnQo
ZW5jLCAmcywgZW5kLCAmZGF0YVB0ciwgKElDSEFSICopZGF0YUJ1ZkVuZCk7Ci0gICAgICAqZXZl
bnRFbmRQUCA9IHM7Ci0gICAgICBkZWZhdWx0SGFuZGxlcihoYW5kbGVyQXJnLCBkYXRhQnVmLCAo
aW50KShkYXRhUHRyIC0gKElDSEFSICopZGF0YUJ1ZikpOwotICAgICAgKmV2ZW50UFAgPSBzOwot
ICAgIH0gd2hpbGUgKHMgIT0gZW5kKTsKLSAgfQotICBlbHNlCi0gICAgZGVmYXVsdEhhbmRsZXIo
aGFuZGxlckFyZywgKFhNTF9DaGFyICopcywgKGludCkoKFhNTF9DaGFyICopZW5kIC0gKFhNTF9D
aGFyICopcykpOwotfQotCi0KLXN0YXRpYyBpbnQKLWRlZmluZUF0dHJpYnV0ZShFTEVNRU5UX1RZ
UEUgKnR5cGUsIEFUVFJJQlVURV9JRCAqYXR0SWQsIFhNTF9Cb29sIGlzQ2RhdGEsCi0gICAgICAg
ICAgICAgICAgWE1MX0Jvb2wgaXNJZCwgY29uc3QgWE1MX0NoYXIgKnZhbHVlLCBYTUxfUGFyc2Vy
IHBhcnNlcikKLXsKLSAgREVGQVVMVF9BVFRSSUJVVEUgKmF0dDsKLSAgaWYgKHZhbHVlIHx8IGlz
SWQpIHsKLSAgICAvKiBUaGUgaGFuZGxpbmcgb2YgZGVmYXVsdCBhdHRyaWJ1dGVzIGdldHMgbWVz
c2VkIHVwIGlmIHdlIGhhdmUKLSAgICAgICBhIGRlZmF1bHQgd2hpY2ggZHVwbGljYXRlcyBhIG5v
bi1kZWZhdWx0LiAqLwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlLT5uRGVm
YXVsdEF0dHM7IGkrKykKLSAgICAgIGlmIChhdHRJZCA9PSB0eXBlLT5kZWZhdWx0QXR0c1tpXS5p
ZCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKGlzSWQgJiYgIXR5cGUtPmlkQXR0ICYmICFh
dHRJZC0+eG1sbnMpCi0gICAgICB0eXBlLT5pZEF0dCA9IGF0dElkOwotICB9Ci0gIGlmICh0eXBl
LT5uRGVmYXVsdEF0dHMgPT0gdHlwZS0+YWxsb2NEZWZhdWx0QXR0cykgewotICAgIGlmICh0eXBl
LT5hbGxvY0RlZmF1bHRBdHRzID09IDApIHsKLSAgICAgIHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMg
PSA4OwotICAgICAgdHlwZS0+ZGVmYXVsdEF0dHMgPSAoREVGQVVMVF9BVFRSSUJVVEUgKilNQUxM
T0ModHlwZS0+YWxsb2NEZWZhdWx0QXR0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICog
c2l6ZW9mKERFRkFVTFRfQVRUUklCVVRFKSk7Ci0gICAgICBpZiAoIXR5cGUtPmRlZmF1bHRBdHRz
KQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBERUZBVUxUX0FU
VFJJQlVURSAqdGVtcDsKLSAgICAgIGludCBjb3VudCA9IHR5cGUtPmFsbG9jRGVmYXVsdEF0dHMg
KiAyOwotICAgICAgdGVtcCA9IChERUZBVUxUX0FUVFJJQlVURSAqKQotICAgICAgICBSRUFMTE9D
KHR5cGUtPmRlZmF1bHRBdHRzLCAoY291bnQgKiBzaXplb2YoREVGQVVMVF9BVFRSSUJVVEUpKSk7
Ci0gICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIHR5cGUt
PmFsbG9jRGVmYXVsdEF0dHMgPSBjb3VudDsKLSAgICAgIHR5cGUtPmRlZmF1bHRBdHRzID0gdGVt
cDsKLSAgICB9Ci0gIH0KLSAgYXR0ID0gdHlwZS0+ZGVmYXVsdEF0dHMgKyB0eXBlLT5uRGVmYXVs
dEF0dHM7Ci0gIGF0dC0+aWQgPSBhdHRJZDsKLSAgYXR0LT52YWx1ZSA9IHZhbHVlOwotICBhdHQt
PmlzQ2RhdGEgPSBpc0NkYXRhOwotICBpZiAoIWlzQ2RhdGEpCi0gICAgYXR0SWQtPm1heWJlVG9r
ZW5pemVkID0gWE1MX1RSVUU7Ci0gIHR5cGUtPm5EZWZhdWx0QXR0cyArPSAxOwotICByZXR1cm4g
MTsKLX0KLQotc3RhdGljIGludAotc2V0RWxlbWVudFR5cGVQcmVmaXgoWE1MX1BhcnNlciBwYXJz
ZXIsIEVMRU1FTlRfVFlQRSAqZWxlbWVudFR5cGUpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9k
dGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBjb25zdCBYTUxfQ2hh
ciAqbmFtZTsKLSAgZm9yIChuYW1lID0gZWxlbWVudFR5cGUtPm5hbWU7ICpuYW1lOyBuYW1lKysp
IHsKLSAgICBpZiAoKm5hbWUgPT0gWE1MX1QoQVNDSUlfQ09MT04pKSB7Ci0gICAgICBQUkVGSVgg
KnByZWZpeDsKLSAgICAgIGNvbnN0IFhNTF9DaGFyICpzOwotICAgICAgZm9yIChzID0gZWxlbWVu
dFR5cGUtPm5hbWU7IHMgIT0gbmFtZTsgcysrKSB7Ci0gICAgICAgIGlmICghcG9vbEFwcGVuZENo
YXIoJmR0ZC0+cG9vbCwgKnMpKQotICAgICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAg
aWYgKCFwb29sQXBwZW5kQ2hhcigmZHRkLT5wb29sLCBYTUxfVCgnXDAnKSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgICAgcHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChwYXJzZXIsICZkdGQtPnBy
ZWZpeGVzLCBwb29sU3RhcnQoJmR0ZC0+cG9vbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihQUkVGSVgpKTsKLSAgICAgIGlmICghcHJlZml4KQotICAgICAgICByZXR1
cm4gMDsKLSAgICAgIGlmIChwcmVmaXgtPm5hbWUgPT0gcG9vbFN0YXJ0KCZkdGQtPnBvb2wpKQot
ICAgICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOwotICAgICAgZWxzZQotICAgICAgICBwb29s
RGlzY2FyZCgmZHRkLT5wb29sKTsKLSAgICAgIGVsZW1lbnRUeXBlLT5wcmVmaXggPSBwcmVmaXg7
Ci0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBBVFRSSUJVVEVfSUQgKgot
Z2V0QXR0cmlidXRlSWQoWE1MX1BhcnNlciBwYXJzZXIsIGNvbnN0IEVOQ09ESU5HICplbmMsCi0g
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQotewotICBE
VEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24g
Ki8KLSAgQVRUUklCVVRFX0lEICppZDsKLSAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0gIGlmICgh
cG9vbEFwcGVuZENoYXIoJmR0ZC0+cG9vbCwgWE1MX1QoJ1wwJykpKQotICAgIHJldHVybiBOVUxM
OwotICBuYW1lID0gcG9vbFN0b3JlU3RyaW5nKCZkdGQtPnBvb2wsIGVuYywgc3RhcnQsIGVuZCk7
Ci0gIGlmICghbmFtZSkKLSAgICByZXR1cm4gTlVMTDsKLSAgLyogc2tpcCBxdW90YXRpb24gbWFy
ayAtIGl0cyBzdG9yYWdlIHdpbGwgYmUgcmUtdXNlZCAobGlrZSBpbiBuYW1lWy0xXSkgKi8KLSAg
KytuYW1lOwotICBpZCA9IChBVFRSSUJVVEVfSUQgKilsb29rdXAocGFyc2VyLCAmZHRkLT5hdHRy
aWJ1dGVJZHMsIG5hbWUsIHNpemVvZihBVFRSSUJVVEVfSUQpKTsKLSAgaWYgKCFpZCkKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgaWYgKGlkLT5uYW1lICE9IG5hbWUpCi0gICAgcG9vbERpc2NhcmQoJmR0
ZC0+cG9vbCk7Ci0gIGVsc2UgewotICAgIHBvb2xGaW5pc2goJmR0ZC0+cG9vbCk7Ci0gICAgaWYg
KCFucykKLSAgICAgIDsKLSAgICBlbHNlIGlmIChuYW1lWzBdID09IFhNTF9UKEFTQ0lJX3gpCi0g
ICAgICAgICYmIG5hbWVbMV0gPT0gWE1MX1QoQVNDSUlfbSkKLSAgICAgICAgJiYgbmFtZVsyXSA9
PSBYTUxfVChBU0NJSV9sKQotICAgICAgICAmJiBuYW1lWzNdID09IFhNTF9UKEFTQ0lJX24pCi0g
ICAgICAgICYmIG5hbWVbNF0gPT0gWE1MX1QoQVNDSUlfcykKLSAgICAgICAgJiYgKG5hbWVbNV0g
PT0gWE1MX1QoJ1wwJykgfHwgbmFtZVs1XSA9PSBYTUxfVChBU0NJSV9DT0xPTikpKSB7Ci0gICAg
ICBpZiAobmFtZVs1XSA9PSBYTUxfVCgnXDAnKSkKLSAgICAgICAgaWQtPnByZWZpeCA9ICZkdGQt
PmRlZmF1bHRQcmVmaXg7Ci0gICAgICBlbHNlCi0gICAgICAgIGlkLT5wcmVmaXggPSAoUFJFRklY
ICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cHJlZml4ZXMsIG5hbWUgKyA2LCBzaXplb2YoUFJFRklY
KSk7Ci0gICAgICBpZC0+eG1sbnMgPSBYTUxfVFJVRTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAg
ICBpbnQgaTsKLSAgICAgIGZvciAoaSA9IDA7IG5hbWVbaV07IGkrKykgewotICAgICAgICAvKiBh
dHRyaWJ1dGVzIHdpdGhvdXQgcHJlZml4IGFyZSAqbm90KiBpbiB0aGUgZGVmYXVsdCBuYW1lc3Bh
Y2UgKi8KLSAgICAgICAgaWYgKG5hbWVbaV0gPT0gWE1MX1QoQVNDSUlfQ09MT04pKSB7Ci0gICAg
ICAgICAgaW50IGo7Ci0gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAg
ICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmZHRkLT5wb29sLCBuYW1lW2pdKSkKLSAgICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghcG9vbEFwcGVu
ZENoYXIoJmR0ZC0+cG9vbCwgWE1MX1QoJ1wwJykpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgICAgICAgaWQtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFyc2VyLCAmZHRkLT5w
cmVmaXhlcywgcG9vbFN0YXJ0KCZkdGQtPnBvb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihQUkVGSVgpKTsKLSAgICAgICAgICBpZiAoaWQtPnByZWZp
eC0+bmFtZSA9PSBwb29sU3RhcnQoJmR0ZC0+cG9vbCkpCi0gICAgICAgICAgICBwb29sRmluaXNo
KCZkdGQtPnBvb2wpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvb2xEaXNjYXJkKCZk
dGQtPnBvb2wpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBpZDsKLX0KLQotI2RlZmluZSBDT05URVhUX1NFUCBYTUxfVChBU0NJSV9G
RikKLQotc3RhdGljIGNvbnN0IFhNTF9DaGFyICoKLWdldENvbnRleHQoWE1MX1BhcnNlciBwYXJz
ZXIpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBsZXZlbCBvZiBp
bmRpcmVjdGlvbiAqLwotICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKLSAgWE1MX0Jvb2wgbmVlZFNl
cCA9IFhNTF9GQUxTRTsKLQotICBpZiAoZHRkLT5kZWZhdWx0UHJlZml4LmJpbmRpbmcpIHsKLSAg
ICBpbnQgaTsKLSAgICBpbnQgbGVuOwotICAgIGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29s
LCBYTUxfVChBU0NJSV9FUVVBTFMpKSkKLSAgICAgIHJldHVybiBOVUxMOwotICAgIGxlbiA9IGR0
ZC0+ZGVmYXVsdFByZWZpeC5iaW5kaW5nLT51cmlMZW47Ci0gICAgaWYgKG5hbWVzcGFjZVNlcGFy
YXRvcikKLSAgICAgIGxlbi0tOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAg
IGlmICghcG9vbEFwcGVuZENoYXIoJnRlbXBQb29sLCBkdGQtPmRlZmF1bHRQcmVmaXguYmluZGlu
Zy0+dXJpW2ldKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbmVlZFNlcCA9IFhNTF9UUlVF
OwotICB9Ci0KLSAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIsICYoZHRkLT5wcmVmaXhlcykpOwot
ICBmb3IgKDs7KSB7Ci0gICAgaW50IGk7Ci0gICAgaW50IGxlbjsKLSAgICBjb25zdCBYTUxfQ2hh
ciAqczsKLSAgICBQUkVGSVggKnByZWZpeCA9IChQUkVGSVggKiloYXNoVGFibGVJdGVyTmV4dCgm
aXRlcik7Ci0gICAgaWYgKCFwcmVmaXgpCi0gICAgICBicmVhazsKLSAgICBpZiAoIXByZWZpeC0+
YmluZGluZykKLSAgICAgIGNvbnRpbnVlOwotICAgIGlmIChuZWVkU2VwICYmICFwb29sQXBwZW5k
Q2hhcigmdGVtcFBvb2wsIENPTlRFWFRfU0VQKSkKLSAgICAgIHJldHVybiBOVUxMOwotICAgIGZv
ciAocyA9IHByZWZpeC0+bmFtZTsgKnM7IHMrKykKLSAgICAgIGlmICghcG9vbEFwcGVuZENoYXIo
JnRlbXBQb29sLCAqcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghcG9vbEFwcGVu
ZENoYXIoJnRlbXBQb29sLCBYTUxfVChBU0NJSV9FUVVBTFMpKSkKLSAgICAgIHJldHVybiBOVUxM
OwotICAgIGxlbiA9IHByZWZpeC0+YmluZGluZy0+dXJpTGVuOwotICAgIGlmIChuYW1lc3BhY2VT
ZXBhcmF0b3IpCi0gICAgICBsZW4tLTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0g
ICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgcHJlZml4LT5iaW5kaW5nLT51cmlb
aV0pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBuZWVkU2VwID0gWE1MX1RSVUU7Ci0gIH0K
LQotCi0gIGhhc2hUYWJsZUl0ZXJJbml0KCZpdGVyLCAmKGR0ZC0+Z2VuZXJhbEVudGl0aWVzKSk7
Ci0gIGZvciAoOzspIHsKLSAgICBjb25zdCBYTUxfQ2hhciAqczsKLSAgICBFTlRJVFkgKmUgPSAo
RU5USVRZICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOwotICAgIGlmICghZSkKLSAgICAgIGJy
ZWFrOwotICAgIGlmICghZS0+b3BlbikKLSAgICAgIGNvbnRpbnVlOwotICAgIGlmIChuZWVkU2Vw
ICYmICFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIENPTlRFWFRfU0VQKSkKLSAgICAgIHJldHVy
biBOVUxMOwotICAgIGZvciAocyA9IGUtPm5hbWU7ICpzOyBzKyspCi0gICAgICBpZiAoIXBvb2xB
cHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBuZWVkU2Vw
ID0gWE1MX1RSVUU7Ci0gIH0KLQotICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1M
X1QoJ1wwJykpKQotICAgIHJldHVybiBOVUxMOwotICByZXR1cm4gdGVtcFBvb2wuc3RhcnQ7Ci19
Ci0KLXN0YXRpYyBYTUxfQm9vbAotc2V0Q29udGV4dChYTUxfUGFyc2VyIHBhcnNlciwgY29uc3Qg
WE1MX0NoYXIgKmNvbnRleHQpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZl
IG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBjb25zdCBYTUxfQ2hhciAqcyA9IGNvbnRl
eHQ7Ci0KLSAgd2hpbGUgKCpjb250ZXh0ICE9IFhNTF9UKCdcMCcpKSB7Ci0gICAgaWYgKCpzID09
IENPTlRFWFRfU0VQIHx8ICpzID09IFhNTF9UKCdcMCcpKSB7Ci0gICAgICBFTlRJVFkgKmU7Ci0g
ICAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCZ0ZW1wUG9vbCwgWE1MX1QoJ1wwJykpKQotICAgICAg
ICByZXR1cm4gWE1MX0ZBTFNFOwotICAgICAgZSA9IChFTlRJVFkgKilsb29rdXAocGFyc2VyLCAm
ZHRkLT5nZW5lcmFsRW50aXRpZXMsIHBvb2xTdGFydCgmdGVtcFBvb2wpLCAwKTsKLSAgICAgIGlm
IChlKQotICAgICAgICBlLT5vcGVuID0gWE1MX1RSVUU7Ci0gICAgICBpZiAoKnMgIT0gWE1MX1Qo
J1wwJykpCi0gICAgICAgIHMrKzsKLSAgICAgIGNvbnRleHQgPSBzOwotICAgICAgcG9vbERpc2Nh
cmQoJnRlbXBQb29sKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKnMgPT0gWE1MX1QoQVNDSUlfRVFV
QUxTKSkgewotICAgICAgUFJFRklYICpwcmVmaXg7Ci0gICAgICBpZiAocG9vbExlbmd0aCgmdGVt
cFBvb2wpID09IDApCi0gICAgICAgIHByZWZpeCA9ICZkdGQtPmRlZmF1bHRQcmVmaXg7Ci0gICAg
ICBlbHNlIHsKLSAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsIFhNTF9UKCdc
MCcpKSkKLSAgICAgICAgICByZXR1cm4gWE1MX0ZBTFNFOwotICAgICAgICBwcmVmaXggPSAoUFJF
RklYICopbG9va3VwKHBhcnNlciwgJmR0ZC0+cHJlZml4ZXMsIHBvb2xTdGFydCgmdGVtcFBvb2wp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQUkVGSVgpKTsKLSAg
ICAgICAgaWYgKCFwcmVmaXgpCi0gICAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKLSAgICAgICAg
aWYgKHByZWZpeC0+bmFtZSA9PSBwb29sU3RhcnQoJnRlbXBQb29sKSkgewotICAgICAgICAgIHBy
ZWZpeC0+bmFtZSA9IHBvb2xDb3B5U3RyaW5nKCZkdGQtPnBvb2wsIHByZWZpeC0+bmFtZSk7Ci0g
ICAgICAgICAgaWYgKCFwcmVmaXgtPm5hbWUpCi0gICAgICAgICAgICByZXR1cm4gWE1MX0ZBTFNF
OwotICAgICAgICB9Ci0gICAgICAgIHBvb2xEaXNjYXJkKCZ0ZW1wUG9vbCk7Ci0gICAgICB9Ci0g
ICAgICBmb3IgKGNvbnRleHQgPSBzICsgMTsKLSAgICAgICAgICAgKmNvbnRleHQgIT0gQ09OVEVY
VF9TRVAgJiYgKmNvbnRleHQgIT0gWE1MX1QoJ1wwJyk7Ci0gICAgICAgICAgIGNvbnRleHQrKykK
LSAgICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBvb2wsICpjb250ZXh0KSkKLSAgICAg
ICAgICByZXR1cm4gWE1MX0ZBTFNFOwotICAgICAgaWYgKCFwb29sQXBwZW5kQ2hhcigmdGVtcFBv
b2wsIFhNTF9UKCdcMCcpKSkKLSAgICAgICAgcmV0dXJuIFhNTF9GQUxTRTsKLSAgICAgIGlmIChh
ZGRCaW5kaW5nKHBhcnNlciwgcHJlZml4LCBOVUxMLCBwb29sU3RhcnQoJnRlbXBQb29sKSwKLSAg
ICAgICAgICAgICAgICAgICAgICZpbmhlcml0ZWRCaW5kaW5ncykgIT0gWE1MX0VSUk9SX05PTkUp
Ci0gICAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgICBwb29sRGlzY2FyZCgmdGVtcFBvb2wp
OwotICAgICAgaWYgKCpjb250ZXh0ICE9IFhNTF9UKCdcMCcpKQotICAgICAgICArK2NvbnRleHQ7
Ci0gICAgICBzID0gY29udGV4dDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAoIXBvb2xB
cHBlbmRDaGFyKCZ0ZW1wUG9vbCwgKnMpKQotICAgICAgICByZXR1cm4gWE1MX0ZBTFNFOwotICAg
ICAgcysrOwotICAgIH0KLSAgfQotICByZXR1cm4gWE1MX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lk
IEZBU1RDQUxMCi1ub3JtYWxpemVQdWJsaWNJZChYTUxfQ2hhciAqcHVibGljSWQpCi17Ci0gIFhN
TF9DaGFyICpwID0gcHVibGljSWQ7Ci0gIFhNTF9DaGFyICpzOwotICBmb3IgKHMgPSBwdWJsaWNJ
ZDsgKnM7IHMrKykgewotICAgIHN3aXRjaCAoKnMpIHsKLSAgICBjYXNlIDB4MjA6Ci0gICAgY2Fz
ZSAweEQ6Ci0gICAgY2FzZSAweEE6Ci0gICAgICBpZiAocCAhPSBwdWJsaWNJZCAmJiBwWy0xXSAh
PSAweDIwKQotICAgICAgICAqcCsrID0gMHgyMDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAqcCsrID0gKnM7Ci0gICAgfQotICB9Ci0gIGlmIChwICE9IHB1YmxpY0lkICYmIHBb
LTFdID09IDB4MjApCi0gICAgLS1wOwotICAqcCA9IFhNTF9UKCdcMCcpOwotfQotCi1zdGF0aWMg
RFREICoKLWR0ZENyZWF0ZShjb25zdCBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlICptcykKLXsK
LSAgRFREICpwID0gKERURCAqKW1zLT5tYWxsb2NfZmNuKHNpemVvZihEVEQpKTsKLSAgaWYgKHAg
PT0gTlVMTCkKLSAgICByZXR1cm4gcDsKLSAgcG9vbEluaXQoJihwLT5wb29sKSwgbXMpOwotICBw
b29sSW5pdCgmKHAtPmVudGl0eVZhbHVlUG9vbCksIG1zKTsKLSAgaGFzaFRhYmxlSW5pdCgmKHAt
PmdlbmVyYWxFbnRpdGllcyksIG1zKTsKLSAgaGFzaFRhYmxlSW5pdCgmKHAtPmVsZW1lbnRUeXBl
cyksIG1zKTsKLSAgaGFzaFRhYmxlSW5pdCgmKHAtPmF0dHJpYnV0ZUlkcyksIG1zKTsKLSAgaGFz
aFRhYmxlSW5pdCgmKHAtPnByZWZpeGVzKSwgbXMpOwotI2lmZGVmIFhNTF9EVEQKLSAgcC0+cGFy
YW1FbnRpdHlSZWFkID0gWE1MX0ZBTFNFOwotICBoYXNoVGFibGVJbml0KCYocC0+cGFyYW1FbnRp
dGllcyksIG1zKTsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0gIHAtPmRlZmF1bHRQcmVmaXgubmFt
ZSA9IE5VTEw7Ci0gIHAtPmRlZmF1bHRQcmVmaXguYmluZGluZyA9IE5VTEw7Ci0KLSAgcC0+aW5f
ZWxkZWNsID0gWE1MX0ZBTFNFOwotICBwLT5zY2FmZkluZGV4ID0gTlVMTDsKLSAgcC0+c2NhZmZv
bGQgPSBOVUxMOwotICBwLT5zY2FmZkxldmVsID0gMDsKLSAgcC0+c2NhZmZTaXplID0gMDsKLSAg
cC0+c2NhZmZDb3VudCA9IDA7Ci0gIHAtPmNvbnRlbnRTdHJpbmdMZW4gPSAwOwotCi0gIHAtPmtl
ZXBQcm9jZXNzaW5nID0gWE1MX1RSVUU7Ci0gIHAtPmhhc1BhcmFtRW50aXR5UmVmcyA9IFhNTF9G
QUxTRTsKLSAgcC0+c3RhbmRhbG9uZSA9IFhNTF9GQUxTRTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXN0
YXRpYyB2b2lkCi1kdGRSZXNldChEVEQgKnAsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3Vp
dGUgKm1zKQotewotICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKLSAgaGFzaFRhYmxlSXRlckluaXQo
Jml0ZXIsICYocC0+ZWxlbWVudFR5cGVzKSk7Ci0gIGZvciAoOzspIHsKLSAgICBFTEVNRU5UX1RZ
UEUgKmUgPSAoRUxFTUVOVF9UWVBFICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOwotICAgIGlm
ICghZSkKLSAgICAgIGJyZWFrOwotICAgIGlmIChlLT5hbGxvY0RlZmF1bHRBdHRzICE9IDApCi0g
ICAgICBtcy0+ZnJlZV9mY24oZS0+ZGVmYXVsdEF0dHMpOwotICB9Ci0gIGhhc2hUYWJsZUNsZWFy
KCYocC0+Z2VuZXJhbEVudGl0aWVzKSk7Ci0jaWZkZWYgWE1MX0RURAotICBwLT5wYXJhbUVudGl0
eVJlYWQgPSBYTUxfRkFMU0U7Ci0gIGhhc2hUYWJsZUNsZWFyKCYocC0+cGFyYW1FbnRpdGllcykp
OwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgaGFzaFRhYmxlQ2xlYXIoJihwLT5lbGVtZW50VHlw
ZXMpKTsKLSAgaGFzaFRhYmxlQ2xlYXIoJihwLT5hdHRyaWJ1dGVJZHMpKTsKLSAgaGFzaFRhYmxl
Q2xlYXIoJihwLT5wcmVmaXhlcykpOwotICBwb29sQ2xlYXIoJihwLT5wb29sKSk7Ci0gIHBvb2xD
bGVhcigmKHAtPmVudGl0eVZhbHVlUG9vbCkpOwotICBwLT5kZWZhdWx0UHJlZml4Lm5hbWUgPSBO
VUxMOwotICBwLT5kZWZhdWx0UHJlZml4LmJpbmRpbmcgPSBOVUxMOwotCi0gIHAtPmluX2VsZGVj
bCA9IFhNTF9GQUxTRTsKLQotICBtcy0+ZnJlZV9mY24ocC0+c2NhZmZJbmRleCk7Ci0gIHAtPnNj
YWZmSW5kZXggPSBOVUxMOwotICBtcy0+ZnJlZV9mY24ocC0+c2NhZmZvbGQpOwotICBwLT5zY2Fm
Zm9sZCA9IE5VTEw7Ci0KLSAgcC0+c2NhZmZMZXZlbCA9IDA7Ci0gIHAtPnNjYWZmU2l6ZSA9IDA7
Ci0gIHAtPnNjYWZmQ291bnQgPSAwOwotICBwLT5jb250ZW50U3RyaW5nTGVuID0gMDsKLQotICBw
LT5rZWVwUHJvY2Vzc2luZyA9IFhNTF9UUlVFOwotICBwLT5oYXNQYXJhbUVudGl0eVJlZnMgPSBY
TUxfRkFMU0U7Ci0gIHAtPnN0YW5kYWxvbmUgPSBYTUxfRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1kdGREZXN0cm95KERURCAqcCwgWE1MX0Jvb2wgaXNEb2NFbnRpdHksIGNvbnN0IFhNTF9NZW1v
cnlfSGFuZGxpbmdfU3VpdGUgKm1zKQotewotICBIQVNIX1RBQkxFX0lURVIgaXRlcjsKLSAgaGFz
aFRhYmxlSXRlckluaXQoJml0ZXIsICYocC0+ZWxlbWVudFR5cGVzKSk7Ci0gIGZvciAoOzspIHsK
LSAgICBFTEVNRU5UX1RZUEUgKmUgPSAoRUxFTUVOVF9UWVBFICopaGFzaFRhYmxlSXRlck5leHQo
Jml0ZXIpOwotICAgIGlmICghZSkKLSAgICAgIGJyZWFrOwotICAgIGlmIChlLT5hbGxvY0RlZmF1
bHRBdHRzICE9IDApCi0gICAgICBtcy0+ZnJlZV9mY24oZS0+ZGVmYXVsdEF0dHMpOwotICB9Ci0g
IGhhc2hUYWJsZURlc3Ryb3koJihwLT5nZW5lcmFsRW50aXRpZXMpKTsKLSNpZmRlZiBYTUxfRFRE
Ci0gIGhhc2hUYWJsZURlc3Ryb3koJihwLT5wYXJhbUVudGl0aWVzKSk7Ci0jZW5kaWYgLyogWE1M
X0RURCAqLwotICBoYXNoVGFibGVEZXN0cm95KCYocC0+ZWxlbWVudFR5cGVzKSk7Ci0gIGhhc2hU
YWJsZURlc3Ryb3koJihwLT5hdHRyaWJ1dGVJZHMpKTsKLSAgaGFzaFRhYmxlRGVzdHJveSgmKHAt
PnByZWZpeGVzKSk7Ci0gIHBvb2xEZXN0cm95KCYocC0+cG9vbCkpOwotICBwb29sRGVzdHJveSgm
KHAtPmVudGl0eVZhbHVlUG9vbCkpOwotICBpZiAoaXNEb2NFbnRpdHkpIHsKLSAgICBtcy0+ZnJl
ZV9mY24ocC0+c2NhZmZJbmRleCk7Ci0gICAgbXMtPmZyZWVfZmNuKHAtPnNjYWZmb2xkKTsKLSAg
fQotICBtcy0+ZnJlZV9mY24ocCk7Ci19Ci0KLS8qIERvIGEgZGVlcCBjb3B5IG9mIHRoZSBEVEQu
IFJldHVybiAwIGZvciBvdXQgb2YgbWVtb3J5LCBub24temVybyBvdGhlcndpc2UuCi0gICBUaGUg
bmV3IERURCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotKi8KLXN0YXRpYyBpbnQKLWR0
ZENvcHkoWE1MX1BhcnNlciBvbGRQYXJzZXIsIERURCAqbmV3RHRkLCBjb25zdCBEVEQgKm9sZER0
ZCwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSAqbXMpCi17Ci0gIEhBU0hfVEFCTEVf
SVRFUiBpdGVyOwotCi0gIC8qIENvcHkgdGhlIHByZWZpeCB0YWJsZS4gKi8KLQotICBoYXNoVGFi
bGVJdGVySW5pdCgmaXRlciwgJihvbGREdGQtPnByZWZpeGVzKSk7Ci0gIGZvciAoOzspIHsKLSAg
ICBjb25zdCBYTUxfQ2hhciAqbmFtZTsKLSAgICBjb25zdCBQUkVGSVggKm9sZFAgPSAoUFJFRklY
ICopaGFzaFRhYmxlSXRlck5leHQoJml0ZXIpOwotICAgIGlmICghb2xkUCkKLSAgICAgIGJyZWFr
OwotICAgIG5hbWUgPSBwb29sQ29weVN0cmluZygmKG5ld0R0ZC0+cG9vbCksIG9sZFAtPm5hbWUp
OwotICAgIGlmICghbmFtZSkKLSAgICAgIHJldHVybiAwOwotICAgIGlmICghbG9va3VwKG9sZFBh
cnNlciwgJihuZXdEdGQtPnByZWZpeGVzKSwgbmFtZSwgc2l6ZW9mKFBSRUZJWCkpKQotICAgICAg
cmV0dXJuIDA7Ci0gIH0KLQotICBoYXNoVGFibGVJdGVySW5pdCgmaXRlciwgJihvbGREdGQtPmF0
dHJpYnV0ZUlkcykpOwotCi0gIC8qIENvcHkgdGhlIGF0dHJpYnV0ZSBpZCB0YWJsZS4gKi8KLQot
ICBmb3IgKDs7KSB7Ci0gICAgQVRUUklCVVRFX0lEICpuZXdBOwotICAgIGNvbnN0IFhNTF9DaGFy
ICpuYW1lOwotICAgIGNvbnN0IEFUVFJJQlVURV9JRCAqb2xkQSA9IChBVFRSSUJVVEVfSUQgKilo
YXNoVGFibGVJdGVyTmV4dCgmaXRlcik7Ci0KLSAgICBpZiAoIW9sZEEpCi0gICAgICBicmVhazsK
LSAgICAvKiBSZW1lbWJlciB0byBhbGxvY2F0ZSB0aGUgc2NyYXRjaCBieXRlIGJlZm9yZSB0aGUg
bmFtZS4gKi8KLSAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKCYobmV3RHRkLT5wb29sKSwgWE1MX1Qo
J1wwJykpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbmFtZSA9IHBvb2xDb3B5U3RyaW5nKCYobmV3
RHRkLT5wb29sKSwgb2xkQS0+bmFtZSk7Ci0gICAgaWYgKCFuYW1lKQotICAgICAgcmV0dXJuIDA7
Ci0gICAgKytuYW1lOwotICAgIG5ld0EgPSAoQVRUUklCVVRFX0lEICopbG9va3VwKG9sZFBhcnNl
ciwgJihuZXdEdGQtPmF0dHJpYnV0ZUlkcyksIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKEFUVFJJQlVURV9JRCkpOwotICAgIGlmICghbmV3QSkKLSAgICAg
IHJldHVybiAwOwotICAgIG5ld0EtPm1heWJlVG9rZW5pemVkID0gb2xkQS0+bWF5YmVUb2tlbml6
ZWQ7Ci0gICAgaWYgKG9sZEEtPnByZWZpeCkgewotICAgICAgbmV3QS0+eG1sbnMgPSBvbGRBLT54
bWxuczsKLSAgICAgIGlmIChvbGRBLT5wcmVmaXggPT0gJm9sZER0ZC0+ZGVmYXVsdFByZWZpeCkK
LSAgICAgICAgbmV3QS0+cHJlZml4ID0gJm5ld0R0ZC0+ZGVmYXVsdFByZWZpeDsKLSAgICAgIGVs
c2UKLSAgICAgICAgbmV3QS0+cHJlZml4ID0gKFBSRUZJWCAqKWxvb2t1cChvbGRQYXJzZXIsICYo
bmV3RHRkLT5wcmVmaXhlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2xkQS0+cHJlZml4LT5uYW1lLCAwKTsKLSAgICB9Ci0gIH0KLQotICAvKiBDb3B5IHRoZSBl
bGVtZW50IHR5cGUgdGFibGUuICovCi0KLSAgaGFzaFRhYmxlSXRlckluaXQoJml0ZXIsICYob2xk
RHRkLT5lbGVtZW50VHlwZXMpKTsKLQotICBmb3IgKDs7KSB7Ci0gICAgaW50IGk7Ci0gICAgRUxF
TUVOVF9UWVBFICpuZXdFOwotICAgIGNvbnN0IFhNTF9DaGFyICpuYW1lOwotICAgIGNvbnN0IEVM
RU1FTlRfVFlQRSAqb2xkRSA9IChFTEVNRU5UX1RZUEUgKiloYXNoVGFibGVJdGVyTmV4dCgmaXRl
cik7Ci0gICAgaWYgKCFvbGRFKQotICAgICAgYnJlYWs7Ci0gICAgbmFtZSA9IHBvb2xDb3B5U3Ry
aW5nKCYobmV3RHRkLT5wb29sKSwgb2xkRS0+bmFtZSk7Ci0gICAgaWYgKCFuYW1lKQotICAgICAg
cmV0dXJuIDA7Ci0gICAgbmV3RSA9IChFTEVNRU5UX1RZUEUgKilsb29rdXAob2xkUGFyc2VyLCAm
KG5ld0R0ZC0+ZWxlbWVudFR5cGVzKSwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2YoRUxFTUVOVF9UWVBFKSk7Ci0gICAgaWYgKCFuZXdFKQotICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKG9sZEUtPm5EZWZhdWx0QXR0cykgewotICAgICAgbmV3RS0+ZGVmYXVs
dEF0dHMgPSAoREVGQVVMVF9BVFRSSUJVVEUgKikKLSAgICAgICAgICBtcy0+bWFsbG9jX2Zjbihv
bGRFLT5uRGVmYXVsdEF0dHMgKiBzaXplb2YoREVGQVVMVF9BVFRSSUJVVEUpKTsKLSAgICAgIGlm
ICghbmV3RS0+ZGVmYXVsdEF0dHMpIHsKLSAgICAgICAgbXMtPmZyZWVfZmNuKG5ld0UpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG9sZEUtPmlkQXR0KQotICAg
ICAgbmV3RS0+aWRBdHQgPSAoQVRUUklCVVRFX0lEICopCi0gICAgICAgICAgbG9va3VwKG9sZFBh
cnNlciwgJihuZXdEdGQtPmF0dHJpYnV0ZUlkcyksIG9sZEUtPmlkQXR0LT5uYW1lLCAwKTsKLSAg
ICBuZXdFLT5hbGxvY0RlZmF1bHRBdHRzID0gbmV3RS0+bkRlZmF1bHRBdHRzID0gb2xkRS0+bkRl
ZmF1bHRBdHRzOwotICAgIGlmIChvbGRFLT5wcmVmaXgpCi0gICAgICBuZXdFLT5wcmVmaXggPSAo
UFJFRklYICopbG9va3VwKG9sZFBhcnNlciwgJihuZXdEdGQtPnByZWZpeGVzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkRS0+cHJlZml4LT5uYW1lLCAwKTsKLSAg
ICBmb3IgKGkgPSAwOyBpIDwgbmV3RS0+bkRlZmF1bHRBdHRzOyBpKyspIHsKLSAgICAgIG5ld0Ut
PmRlZmF1bHRBdHRzW2ldLmlkID0gKEFUVFJJQlVURV9JRCAqKQotICAgICAgICAgIGxvb2t1cChv
bGRQYXJzZXIsICYobmV3RHRkLT5hdHRyaWJ1dGVJZHMpLCBvbGRFLT5kZWZhdWx0QXR0c1tpXS5p
ZC0+bmFtZSwgMCk7Ci0gICAgICBuZXdFLT5kZWZhdWx0QXR0c1tpXS5pc0NkYXRhID0gb2xkRS0+
ZGVmYXVsdEF0dHNbaV0uaXNDZGF0YTsKLSAgICAgIGlmIChvbGRFLT5kZWZhdWx0QXR0c1tpXS52
YWx1ZSkgewotICAgICAgICBuZXdFLT5kZWZhdWx0QXR0c1tpXS52YWx1ZQotICAgICAgICAgICAg
PSBwb29sQ29weVN0cmluZygmKG5ld0R0ZC0+cG9vbCksIG9sZEUtPmRlZmF1bHRBdHRzW2ldLnZh
bHVlKTsKLSAgICAgICAgaWYgKCFuZXdFLT5kZWZhdWx0QXR0c1tpXS52YWx1ZSkKLSAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgbmV3RS0+ZGVmYXVsdEF0
dHNbaV0udmFsdWUgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIC8qIENvcHkgdGhlIGVudGl0eSB0
YWJsZXMuICovCi0gIGlmICghY29weUVudGl0eVRhYmxlKG9sZFBhcnNlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgJihuZXdEdGQtPmdlbmVyYWxFbnRpdGllcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICYobmV3RHRkLT5wb29sKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJihvbGREdGQt
PmdlbmVyYWxFbnRpdGllcykpKQotICAgICAgcmV0dXJuIDA7Ci0KLSNpZmRlZiBYTUxfRFRECi0g
IGlmICghY29weUVudGl0eVRhYmxlKG9sZFBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
JihuZXdEdGQtPnBhcmFtRW50aXRpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAmKG5ld0R0
ZC0+cG9vbCksCi0gICAgICAgICAgICAgICAgICAgICAgICYob2xkRHRkLT5wYXJhbUVudGl0aWVz
KSkpCi0gICAgICByZXR1cm4gMDsKLSAgbmV3RHRkLT5wYXJhbUVudGl0eVJlYWQgPSBvbGREdGQt
PnBhcmFtRW50aXR5UmVhZDsKLSNlbmRpZiAvKiBYTUxfRFREICovCi0KLSAgbmV3RHRkLT5rZWVw
UHJvY2Vzc2luZyA9IG9sZER0ZC0+a2VlcFByb2Nlc3Npbmc7Ci0gIG5ld0R0ZC0+aGFzUGFyYW1F
bnRpdHlSZWZzID0gb2xkRHRkLT5oYXNQYXJhbUVudGl0eVJlZnM7Ci0gIG5ld0R0ZC0+c3RhbmRh
bG9uZSA9IG9sZER0ZC0+c3RhbmRhbG9uZTsKLQotICAvKiBEb24ndCB3YW50IGRlZXAgY29weWlu
ZyBmb3Igc2NhZmZvbGRpbmcgKi8KLSAgbmV3RHRkLT5pbl9lbGRlY2wgPSBvbGREdGQtPmluX2Vs
ZGVjbDsKLSAgbmV3RHRkLT5zY2FmZm9sZCA9IG9sZER0ZC0+c2NhZmZvbGQ7Ci0gIG5ld0R0ZC0+
Y29udGVudFN0cmluZ0xlbiA9IG9sZER0ZC0+Y29udGVudFN0cmluZ0xlbjsKLSAgbmV3RHRkLT5z
Y2FmZlNpemUgPSBvbGREdGQtPnNjYWZmU2l6ZTsKLSAgbmV3RHRkLT5zY2FmZkxldmVsID0gb2xk
RHRkLT5zY2FmZkxldmVsOwotICBuZXdEdGQtPnNjYWZmSW5kZXggPSBvbGREdGQtPnNjYWZmSW5k
ZXg7Ci0KLSAgcmV0dXJuIDE7Ci19ICAvKiBFbmQgZHRkQ29weSAqLwotCi1zdGF0aWMgaW50Ci1j
b3B5RW50aXR5VGFibGUoWE1MX1BhcnNlciBvbGRQYXJzZXIsCi0gICAgICAgICAgICAgICAgSEFT
SF9UQUJMRSAqbmV3VGFibGUsCi0gICAgICAgICAgICAgICAgU1RSSU5HX1BPT0wgKm5ld1Bvb2ws
Ci0gICAgICAgICAgICAgICAgY29uc3QgSEFTSF9UQUJMRSAqb2xkVGFibGUpCi17Ci0gIEhBU0hf
VEFCTEVfSVRFUiBpdGVyOwotICBjb25zdCBYTUxfQ2hhciAqY2FjaGVkT2xkQmFzZSA9IE5VTEw7
Ci0gIGNvbnN0IFhNTF9DaGFyICpjYWNoZWROZXdCYXNlID0gTlVMTDsKLQotICBoYXNoVGFibGVJ
dGVySW5pdCgmaXRlciwgb2xkVGFibGUpOwotCi0gIGZvciAoOzspIHsKLSAgICBFTlRJVFkgKm5l
d0U7Ci0gICAgY29uc3QgWE1MX0NoYXIgKm5hbWU7Ci0gICAgY29uc3QgRU5USVRZICpvbGRFID0g
KEVOVElUWSAqKWhhc2hUYWJsZUl0ZXJOZXh0KCZpdGVyKTsKLSAgICBpZiAoIW9sZEUpCi0gICAg
ICBicmVhazsKLSAgICBuYW1lID0gcG9vbENvcHlTdHJpbmcobmV3UG9vbCwgb2xkRS0+bmFtZSk7
Ci0gICAgaWYgKCFuYW1lKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbmV3RSA9IChFTlRJVFkgKils
b29rdXAob2xkUGFyc2VyLCBuZXdUYWJsZSwgbmFtZSwgc2l6ZW9mKEVOVElUWSkpOwotICAgIGlm
ICghbmV3RSkKLSAgICAgIHJldHVybiAwOwotICAgIGlmIChvbGRFLT5zeXN0ZW1JZCkgewotICAg
ICAgY29uc3QgWE1MX0NoYXIgKnRlbSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bvb2wsIG9sZEUtPnN5
c3RlbUlkKTsKLSAgICAgIGlmICghdGVtKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIG5ld0Ut
PnN5c3RlbUlkID0gdGVtOwotICAgICAgaWYgKG9sZEUtPmJhc2UpIHsKLSAgICAgICAgaWYgKG9s
ZEUtPmJhc2UgPT0gY2FjaGVkT2xkQmFzZSkKLSAgICAgICAgICBuZXdFLT5iYXNlID0gY2FjaGVk
TmV3QmFzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgY2FjaGVkT2xkQmFzZSA9IG9sZEUt
PmJhc2U7Ci0gICAgICAgICAgdGVtID0gcG9vbENvcHlTdHJpbmcobmV3UG9vbCwgY2FjaGVkT2xk
QmFzZSk7Ci0gICAgICAgICAgaWYgKCF0ZW0pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICBjYWNoZWROZXdCYXNlID0gbmV3RS0+YmFzZSA9IHRlbTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgaWYgKG9sZEUtPnB1YmxpY0lkKSB7Ci0gICAgICAgIHRlbSA9IHBvb2xDb3B5U3Ry
aW5nKG5ld1Bvb2wsIG9sZEUtPnB1YmxpY0lkKTsKLSAgICAgICAgaWYgKCF0ZW0pCi0gICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIG5ld0UtPnB1YmxpY0lkID0gdGVtOwotICAgICAgfQotICAg
IH0KLSAgICBlbHNlIHsKLSAgICAgIGNvbnN0IFhNTF9DaGFyICp0ZW0gPSBwb29sQ29weVN0cmlu
Z04obmV3UG9vbCwgb2xkRS0+dGV4dFB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2xkRS0+dGV4dExlbik7Ci0gICAgICBpZiAoIXRlbSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICBuZXdFLT50ZXh0UHRyID0gdGVtOwotICAgICAgbmV3RS0+dGV4dExl
biA9IG9sZEUtPnRleHRMZW47Ci0gICAgfQotICAgIGlmIChvbGRFLT5ub3RhdGlvbikgewotICAg
ICAgY29uc3QgWE1MX0NoYXIgKnRlbSA9IHBvb2xDb3B5U3RyaW5nKG5ld1Bvb2wsIG9sZEUtPm5v
dGF0aW9uKTsKLSAgICAgIGlmICghdGVtKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIG5ld0Ut
Pm5vdGF0aW9uID0gdGVtOwotICAgIH0KLSAgICBuZXdFLT5pc19wYXJhbSA9IG9sZEUtPmlzX3Bh
cmFtOwotICAgIG5ld0UtPmlzX2ludGVybmFsID0gb2xkRS0+aXNfaW50ZXJuYWw7Ci0gIH0KLSAg
cmV0dXJuIDE7Ci19Ci0KLSNkZWZpbmUgSU5JVF9QT1dFUiA2Ci0KLXN0YXRpYyBYTUxfQm9vbCBG
QVNUQ0FMTAota2V5ZXEoS0VZIHMxLCBLRVkgczIpCi17Ci0gIGZvciAoOyAqczEgPT0gKnMyOyBz
MSsrLCBzMisrKQotICAgIGlmICgqczEgPT0gMCkKLSAgICAgIHJldHVybiBYTUxfVFJVRTsKLSAg
cmV0dXJuIFhNTF9GQUxTRTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgRkFTVENBTEwKLWhh
c2goWE1MX1BhcnNlciBwYXJzZXIsIEtFWSBzKQotewotICB1bnNpZ25lZCBsb25nIGggPSBoYXNo
X3NlY3JldF9zYWx0OwotICB3aGlsZSAoKnMpCi0gICAgaCA9IENIQVJfSEFTSChoLCAqcysrKTsK
LSAgcmV0dXJuIGg7Ci19Ci0KLXN0YXRpYyBOQU1FRCAqCi1sb29rdXAoWE1MX1BhcnNlciBwYXJz
ZXIsIEhBU0hfVEFCTEUgKnRhYmxlLCBLRVkgbmFtZSwgc2l6ZV90IGNyZWF0ZVNpemUpCi17Ci0g
IHNpemVfdCBpOwotICBpZiAodGFibGUtPnNpemUgPT0gMCkgewotICAgIHNpemVfdCB0c2l6ZTsK
LSAgICBpZiAoIWNyZWF0ZVNpemUpCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICB0YWJsZS0+cG93
ZXIgPSBJTklUX1BPV0VSOwotICAgIC8qIHRhYmxlLT5zaXplIGlzIGEgcG93ZXIgb2YgMiAqLwot
ICAgIHRhYmxlLT5zaXplID0gKHNpemVfdCkxIDw8IElOSVRfUE9XRVI7Ci0gICAgdHNpemUgPSB0
YWJsZS0+c2l6ZSAqIHNpemVvZihOQU1FRCAqKTsKLSAgICB0YWJsZS0+diA9IChOQU1FRCAqKil0
YWJsZS0+bWVtLT5tYWxsb2NfZmNuKHRzaXplKTsKLSAgICBpZiAoIXRhYmxlLT52KSB7Ci0gICAg
ICB0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0
KHRhYmxlLT52LCAwLCB0c2l6ZSk7Ci0gICAgaSA9IGhhc2gocGFyc2VyLCBuYW1lKSAmICgodW5z
aWduZWQgbG9uZyl0YWJsZS0+c2l6ZSAtIDEpOwotICB9Ci0gIGVsc2UgewotICAgIHVuc2lnbmVk
IGxvbmcgaCA9IGhhc2gocGFyc2VyLCBuYW1lKTsKLSAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSAo
dW5zaWduZWQgbG9uZyl0YWJsZS0+c2l6ZSAtIDE7Ci0gICAgdW5zaWduZWQgY2hhciBzdGVwID0g
MDsKLSAgICBpID0gaCAmIG1hc2s7Ci0gICAgd2hpbGUgKHRhYmxlLT52W2ldKSB7Ci0gICAgICBp
ZiAoa2V5ZXEobmFtZSwgdGFibGUtPnZbaV0tPm5hbWUpKQotICAgICAgICByZXR1cm4gdGFibGUt
PnZbaV07Ci0gICAgICBpZiAoIXN0ZXApCi0gICAgICAgIHN0ZXAgPSBQUk9CRV9TVEVQKGgsIG1h
c2ssIHRhYmxlLT5wb3dlcik7Ci0gICAgICBpIDwgc3RlcCA/IChpICs9IHRhYmxlLT5zaXplIC0g
c3RlcCkgOiAoaSAtPSBzdGVwKTsKLSAgICB9Ci0gICAgaWYgKCFjcmVhdGVTaXplKQotICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKHRhYmxlIGlzIGhhbGYg
ZnVsbCkgKi8KLSAgICBpZiAodGFibGUtPnVzZWQgPj4gKHRhYmxlLT5wb3dlciAtIDEpKSB7Ci0g
ICAgICB1bnNpZ25lZCBjaGFyIG5ld1Bvd2VyID0gdGFibGUtPnBvd2VyICsgMTsKLSAgICAgIHNp
emVfdCBuZXdTaXplID0gKHNpemVfdCkxIDw8IG5ld1Bvd2VyOwotICAgICAgdW5zaWduZWQgbG9u
ZyBuZXdNYXNrID0gKHVuc2lnbmVkIGxvbmcpbmV3U2l6ZSAtIDE7Ci0gICAgICBzaXplX3QgdHNp
emUgPSBuZXdTaXplICogc2l6ZW9mKE5BTUVEICopOwotICAgICAgTkFNRUQgKipuZXdWID0gKE5B
TUVEICoqKXRhYmxlLT5tZW0tPm1hbGxvY19mY24odHNpemUpOwotICAgICAgaWYgKCFuZXdWKQot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIG1lbXNldChuZXdWLCAwLCB0c2l6ZSk7Ci0gICAg
ICBmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnNpemU7IGkrKykKLSAgICAgICAgaWYgKHRhYmxlLT52
W2ldKSB7Ci0gICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXdIYXNoID0gaGFzaChwYXJzZXIsIHRh
YmxlLT52W2ldLT5uYW1lKTsKLSAgICAgICAgICBzaXplX3QgaiA9IG5ld0hhc2ggJiBuZXdNYXNr
OwotICAgICAgICAgIHN0ZXAgPSAwOwotICAgICAgICAgIHdoaWxlIChuZXdWW2pdKSB7Ci0gICAg
ICAgICAgICBpZiAoIXN0ZXApCi0gICAgICAgICAgICAgIHN0ZXAgPSBQUk9CRV9TVEVQKG5ld0hh
c2gsIG5ld01hc2ssIG5ld1Bvd2VyKTsKLSAgICAgICAgICAgIGogPCBzdGVwID8gKGogKz0gbmV3
U2l6ZSAtIHN0ZXApIDogKGogLT0gc3RlcCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG5ld1Zb
al0gPSB0YWJsZS0+dltpXTsKLSAgICAgICAgfQotICAgICAgdGFibGUtPm1lbS0+ZnJlZV9mY24o
dGFibGUtPnYpOwotICAgICAgdGFibGUtPnYgPSBuZXdWOwotICAgICAgdGFibGUtPnBvd2VyID0g
bmV3UG93ZXI7Ci0gICAgICB0YWJsZS0+c2l6ZSA9IG5ld1NpemU7Ci0gICAgICBpID0gaCAmIG5l
d01hc2s7Ci0gICAgICBzdGVwID0gMDsKLSAgICAgIHdoaWxlICh0YWJsZS0+dltpXSkgewotICAg
ICAgICBpZiAoIXN0ZXApCi0gICAgICAgICAgc3RlcCA9IFBST0JFX1NURVAoaCwgbmV3TWFzaywg
bmV3UG93ZXIpOwotICAgICAgICBpIDwgc3RlcCA/IChpICs9IG5ld1NpemUgLSBzdGVwKSA6IChp
IC09IHN0ZXApOwotICAgICAgfQotICAgIH0KLSAgfQotICB0YWJsZS0+dltpXSA9IChOQU1FRCAq
KXRhYmxlLT5tZW0tPm1hbGxvY19mY24oY3JlYXRlU2l6ZSk7Ci0gIGlmICghdGFibGUtPnZbaV0p
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIG1lbXNldCh0YWJsZS0+dltpXSwgMCwgY3JlYXRlU2l6ZSk7
Ci0gIHRhYmxlLT52W2ldLT5uYW1lID0gbmFtZTsKLSAgKHRhYmxlLT51c2VkKSsrOwotICByZXR1
cm4gdGFibGUtPnZbaV07Ci19Ci0KLXN0YXRpYyB2b2lkIEZBU1RDQUxMCi1oYXNoVGFibGVDbGVh
cihIQVNIX1RBQkxFICp0YWJsZSkKLXsKLSAgc2l6ZV90IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCB0
YWJsZS0+c2l6ZTsgaSsrKSB7Ci0gICAgdGFibGUtPm1lbS0+ZnJlZV9mY24odGFibGUtPnZbaV0p
OwotICAgIHRhYmxlLT52W2ldID0gTlVMTDsKLSAgfQotICB0YWJsZS0+dXNlZCA9IDA7Ci19Ci0K
LXN0YXRpYyB2b2lkIEZBU1RDQUxMCi1oYXNoVGFibGVEZXN0cm95KEhBU0hfVEFCTEUgKnRhYmxl
KQotewotICBzaXplX3QgaTsKLSAgZm9yIChpID0gMDsgaSA8IHRhYmxlLT5zaXplOyBpKyspCi0g
ICAgdGFibGUtPm1lbS0+ZnJlZV9mY24odGFibGUtPnZbaV0pOwotICB0YWJsZS0+bWVtLT5mcmVl
X2Zjbih0YWJsZS0+dik7Ci19Ci0KLXN0YXRpYyB2b2lkIEZBU1RDQUxMCi1oYXNoVGFibGVJbml0
KEhBU0hfVEFCTEUgKnAsIGNvbnN0IFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgKm1zKQotewot
ICBwLT5wb3dlciA9IDA7Ci0gIHAtPnNpemUgPSAwOwotICBwLT51c2VkID0gMDsKLSAgcC0+diA9
IE5VTEw7Ci0gIHAtPm1lbSA9IG1zOwotfQotCi1zdGF0aWMgdm9pZCBGQVNUQ0FMTAotaGFzaFRh
YmxlSXRlckluaXQoSEFTSF9UQUJMRV9JVEVSICppdGVyLCBjb25zdCBIQVNIX1RBQkxFICp0YWJs
ZSkKLXsKLSAgaXRlci0+cCA9IHRhYmxlLT52OwotICBpdGVyLT5lbmQgPSBpdGVyLT5wICsgdGFi
bGUtPnNpemU7Ci19Ci0KLXN0YXRpYyBOQU1FRCAqIEZBU1RDQUxMCi1oYXNoVGFibGVJdGVyTmV4
dChIQVNIX1RBQkxFX0lURVIgKml0ZXIpCi17Ci0gIHdoaWxlIChpdGVyLT5wICE9IGl0ZXItPmVu
ZCkgewotICAgIE5BTUVEICp0ZW0gPSAqKGl0ZXItPnApKys7Ci0gICAgaWYgKHRlbSkKLSAgICAg
IHJldHVybiB0ZW07Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIEZBU1RD
QUxMCi1wb29sSW5pdChTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgWE1MX01lbW9yeV9IYW5kbGlu
Z19TdWl0ZSAqbXMpCi17Ci0gIHBvb2wtPmJsb2NrcyA9IE5VTEw7Ci0gIHBvb2wtPmZyZWVCbG9j
a3MgPSBOVUxMOwotICBwb29sLT5zdGFydCA9IE5VTEw7Ci0gIHBvb2wtPnB0ciA9IE5VTEw7Ci0g
IHBvb2wtPmVuZCA9IE5VTEw7Ci0gIHBvb2wtPm1lbSA9IG1zOwotfQotCi1zdGF0aWMgdm9pZCBG
QVNUQ0FMTAotcG9vbENsZWFyKFNUUklOR19QT09MICpwb29sKQotewotICBpZiAoIXBvb2wtPmZy
ZWVCbG9ja3MpCi0gICAgcG9vbC0+ZnJlZUJsb2NrcyA9IHBvb2wtPmJsb2NrczsKLSAgZWxzZSB7
Ci0gICAgQkxPQ0sgKnAgPSBwb29sLT5ibG9ja3M7Ci0gICAgd2hpbGUgKHApIHsKLSAgICAgIEJM
T0NLICp0ZW0gPSBwLT5uZXh0OwotICAgICAgcC0+bmV4dCA9IHBvb2wtPmZyZWVCbG9ja3M7Ci0g
ICAgICBwb29sLT5mcmVlQmxvY2tzID0gcDsKLSAgICAgIHAgPSB0ZW07Ci0gICAgfQotICB9Ci0g
IHBvb2wtPmJsb2NrcyA9IE5VTEw7Ci0gIHBvb2wtPnN0YXJ0ID0gTlVMTDsKLSAgcG9vbC0+cHRy
ID0gTlVMTDsKLSAgcG9vbC0+ZW5kID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgRkFTVENBTEwK
LXBvb2xEZXN0cm95KFNUUklOR19QT09MICpwb29sKQotewotICBCTE9DSyAqcCA9IHBvb2wtPmJs
b2NrczsKLSAgd2hpbGUgKHApIHsKLSAgICBCTE9DSyAqdGVtID0gcC0+bmV4dDsKLSAgICBwb29s
LT5tZW0tPmZyZWVfZmNuKHApOwotICAgIHAgPSB0ZW07Ci0gIH0KLSAgcCA9IHBvb2wtPmZyZWVC
bG9ja3M7Ci0gIHdoaWxlIChwKSB7Ci0gICAgQkxPQ0sgKnRlbSA9IHAtPm5leHQ7Ci0gICAgcG9v
bC0+bWVtLT5mcmVlX2ZjbihwKTsKLSAgICBwID0gdGVtOwotICB9Ci19Ci0KLXN0YXRpYyBYTUxf
Q2hhciAqCi1wb29sQXBwZW5kKFNUUklOR19QT09MICpwb29sLCBjb25zdCBFTkNPRElORyAqZW5j
LAotICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCkKLXsKLSAgaWYg
KCFwb29sLT5wdHIgJiYgIXBvb2xHcm93KHBvb2wpKQotICAgIHJldHVybiBOVUxMOwotICBmb3Ig
KDs7KSB7Ci0gICAgWG1sQ29udmVydChlbmMsICZwdHIsIGVuZCwgKElDSEFSICoqKSYocG9vbC0+
cHRyKSwgKElDSEFSICopcG9vbC0+ZW5kKTsKLSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIGJy
ZWFrOwotICAgIGlmICghcG9vbEdyb3cocG9vbCkpCi0gICAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICByZXR1cm4gcG9vbC0+c3RhcnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBYTUxfQ2hhciAqIEZBU1RD
QUxMCi1wb29sQ29weVN0cmluZyhTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgWE1MX0NoYXIgKnMp
Ci17Ci0gIGRvIHsKLSAgICBpZiAoIXBvb2xBcHBlbmRDaGFyKHBvb2wsICpzKSkKLSAgICAgIHJl
dHVybiBOVUxMOwotICB9IHdoaWxlICgqcysrKTsKLSAgcyA9IHBvb2wtPnN0YXJ0OwotICBwb29s
RmluaXNoKHBvb2wpOwotICByZXR1cm4gczsKLX0KLQotc3RhdGljIGNvbnN0IFhNTF9DaGFyICoK
LXBvb2xDb3B5U3RyaW5nTihTVFJJTkdfUE9PTCAqcG9vbCwgY29uc3QgWE1MX0NoYXIgKnMsIGlu
dCBuKQotewotICBpZiAoIXBvb2wtPnB0ciAmJiAhcG9vbEdyb3cocG9vbCkpCi0gICAgcmV0dXJu
IE5VTEw7Ci0gIGZvciAoOyBuID4gMDsgLS1uLCBzKyspIHsKLSAgICBpZiAoIXBvb2xBcHBlbmRD
aGFyKHBvb2wsICpzKSkKLSAgICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHMgPSBwb29sLT5zdGFy
dDsKLSAgcG9vbEZpbmlzaChwb29sKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBjb25zdCBY
TUxfQ2hhciAqIEZBU1RDQUxMCi1wb29sQXBwZW5kU3RyaW5nKFNUUklOR19QT09MICpwb29sLCBj
b25zdCBYTUxfQ2hhciAqcykKLXsKLSAgd2hpbGUgKCpzKSB7Ci0gICAgaWYgKCFwb29sQXBwZW5k
Q2hhcihwb29sLCAqcykpCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICBzKys7Ci0gIH0KLSAgcmV0
dXJuIHBvb2wtPnN0YXJ0OwotfQotCi1zdGF0aWMgWE1MX0NoYXIgKgotcG9vbFN0b3JlU3RyaW5n
KFNUUklOR19QT09MICpwb29sLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKQotewotICBpZiAoIXBvb2xBcHBlbmQo
cG9vbCwgZW5jLCBwdHIsIGVuZCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmIChwb29sLT5wdHIg
PT0gcG9vbC0+ZW5kICYmICFwb29sR3Jvdyhwb29sKSkKLSAgICByZXR1cm4gTlVMTDsKLSAgKihw
b29sLT5wdHIpKysgPSAwOwotICByZXR1cm4gcG9vbC0+c3RhcnQ7Ci19Ci0KLXN0YXRpYyBYTUxf
Qm9vbCBGQVNUQ0FMTAotcG9vbEdyb3coU1RSSU5HX1BPT0wgKnBvb2wpCi17Ci0gIGlmIChwb29s
LT5mcmVlQmxvY2tzKSB7Ci0gICAgaWYgKHBvb2wtPnN0YXJ0ID09IDApIHsKLSAgICAgIHBvb2wt
PmJsb2NrcyA9IHBvb2wtPmZyZWVCbG9ja3M7Ci0gICAgICBwb29sLT5mcmVlQmxvY2tzID0gcG9v
bC0+ZnJlZUJsb2Nrcy0+bmV4dDsKLSAgICAgIHBvb2wtPmJsb2Nrcy0+bmV4dCA9IE5VTEw7Ci0g
ICAgICBwb29sLT5zdGFydCA9IHBvb2wtPmJsb2Nrcy0+czsKLSAgICAgIHBvb2wtPmVuZCA9IHBv
b2wtPnN0YXJ0ICsgcG9vbC0+YmxvY2tzLT5zaXplOwotICAgICAgcG9vbC0+cHRyID0gcG9vbC0+
c3RhcnQ7Ci0gICAgICByZXR1cm4gWE1MX1RSVUU7Ci0gICAgfQotICAgIGlmIChwb29sLT5lbmQg
LSBwb29sLT5zdGFydCA8IHBvb2wtPmZyZWVCbG9ja3MtPnNpemUpIHsKLSAgICAgIEJMT0NLICp0
ZW0gPSBwb29sLT5mcmVlQmxvY2tzLT5uZXh0OwotICAgICAgcG9vbC0+ZnJlZUJsb2Nrcy0+bmV4
dCA9IHBvb2wtPmJsb2NrczsKLSAgICAgIHBvb2wtPmJsb2NrcyA9IHBvb2wtPmZyZWVCbG9ja3M7
Ci0gICAgICBwb29sLT5mcmVlQmxvY2tzID0gdGVtOwotICAgICAgbWVtY3B5KHBvb2wtPmJsb2Nr
cy0+cywgcG9vbC0+c3RhcnQsCi0gICAgICAgICAgICAgKHBvb2wtPmVuZCAtIHBvb2wtPnN0YXJ0
KSAqIHNpemVvZihYTUxfQ2hhcikpOwotICAgICAgcG9vbC0+cHRyID0gcG9vbC0+YmxvY2tzLT5z
ICsgKHBvb2wtPnB0ciAtIHBvb2wtPnN0YXJ0KTsKLSAgICAgIHBvb2wtPnN0YXJ0ID0gcG9vbC0+
YmxvY2tzLT5zOwotICAgICAgcG9vbC0+ZW5kID0gcG9vbC0+c3RhcnQgKyBwb29sLT5ibG9ja3Mt
PnNpemU7Ci0gICAgICByZXR1cm4gWE1MX1RSVUU7Ci0gICAgfQotICB9Ci0gIGlmIChwb29sLT5i
bG9ja3MgJiYgcG9vbC0+c3RhcnQgPT0gcG9vbC0+YmxvY2tzLT5zKSB7Ci0gICAgaW50IGJsb2Nr
U2l6ZSA9IChpbnQpKHBvb2wtPmVuZCAtIHBvb2wtPnN0YXJ0KSoyOwotICAgIEJMT0NLICp0ZW1w
ID0gKEJMT0NLICopCi0gICAgICBwb29sLT5tZW0tPnJlYWxsb2NfZmNuKHBvb2wtPmJsb2NrcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9mZnNldG9mKEJMT0NLLCBzKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyBibG9ja1NpemUgKiBzaXplb2YoWE1MX0NoYXIpKSk7
Ci0gICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgcG9v
bC0+YmxvY2tzID0gdGVtcDsKLSAgICBwb29sLT5ibG9ja3MtPnNpemUgPSBibG9ja1NpemU7Ci0g
ICAgcG9vbC0+cHRyID0gcG9vbC0+YmxvY2tzLT5zICsgKHBvb2wtPnB0ciAtIHBvb2wtPnN0YXJ0
KTsKLSAgICBwb29sLT5zdGFydCA9IHBvb2wtPmJsb2Nrcy0+czsKLSAgICBwb29sLT5lbmQgPSBw
b29sLT5zdGFydCArIGJsb2NrU2l6ZTsKLSAgfQotICBlbHNlIHsKLSAgICBCTE9DSyAqdGVtOwot
ICAgIGludCBibG9ja1NpemUgPSAoaW50KShwb29sLT5lbmQgLSBwb29sLT5zdGFydCk7Ci0gICAg
aWYgKGJsb2NrU2l6ZSA8IElOSVRfQkxPQ0tfU0laRSkKLSAgICAgIGJsb2NrU2l6ZSA9IElOSVRf
QkxPQ0tfU0laRTsKLSAgICBlbHNlCi0gICAgICBibG9ja1NpemUgKj0gMjsKLSAgICB0ZW0gPSAo
QkxPQ0sgKilwb29sLT5tZW0tPm1hbGxvY19mY24ob2Zmc2V0b2YoQkxPQ0ssIHMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBibG9ja1NpemUgKiBzaXplb2YoWE1M
X0NoYXIpKTsKLSAgICBpZiAoIXRlbSkKLSAgICAgIHJldHVybiBYTUxfRkFMU0U7Ci0gICAgdGVt
LT5zaXplID0gYmxvY2tTaXplOwotICAgIHRlbS0+bmV4dCA9IHBvb2wtPmJsb2NrczsKLSAgICBw
b29sLT5ibG9ja3MgPSB0ZW07Ci0gICAgaWYgKHBvb2wtPnB0ciAhPSBwb29sLT5zdGFydCkKLSAg
ICAgIG1lbWNweSh0ZW0tPnMsIHBvb2wtPnN0YXJ0LAotICAgICAgICAgICAgIChwb29sLT5wdHIg
LSBwb29sLT5zdGFydCkgKiBzaXplb2YoWE1MX0NoYXIpKTsKLSAgICBwb29sLT5wdHIgPSB0ZW0t
PnMgKyAocG9vbC0+cHRyIC0gcG9vbC0+c3RhcnQpOwotICAgIHBvb2wtPnN0YXJ0ID0gdGVtLT5z
OwotICAgIHBvb2wtPmVuZCA9IHRlbS0+cyArIGJsb2NrU2l6ZTsKLSAgfQotICByZXR1cm4gWE1M
X1RSVUU7Ci19Ci0KLXN0YXRpYyBpbnQgRkFTVENBTEwKLW5leHRTY2FmZm9sZFBhcnQoWE1MX1Bh
cnNlciBwYXJzZXIpCi17Ci0gIERURCAqIGNvbnN0IGR0ZCA9IF9kdGQ7ICAvKiBzYXZlIG9uZSBs
ZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwotICBDT05URU5UX1NDQUZGT0xEICogbWU7Ci0gIGludCBu
ZXh0OwotCi0gIGlmICghZHRkLT5zY2FmZkluZGV4KSB7Ci0gICAgZHRkLT5zY2FmZkluZGV4ID0g
KGludCAqKU1BTExPQyhncm91cFNpemUgKiBzaXplb2YoaW50KSk7Ci0gICAgaWYgKCFkdGQtPnNj
YWZmSW5kZXgpCi0gICAgICByZXR1cm4gLTE7Ci0gICAgZHRkLT5zY2FmZkluZGV4WzBdID0gMDsK
LSAgfQotCi0gIGlmIChkdGQtPnNjYWZmQ291bnQgPj0gZHRkLT5zY2FmZlNpemUpIHsKLSAgICBD
T05URU5UX1NDQUZGT0xEICp0ZW1wOwotICAgIGlmIChkdGQtPnNjYWZmb2xkKSB7Ci0gICAgICB0
ZW1wID0gKENPTlRFTlRfU0NBRkZPTEQgKikKLSAgICAgICAgUkVBTExPQyhkdGQtPnNjYWZmb2xk
LCBkdGQtPnNjYWZmU2l6ZSAqIDIgKiBzaXplb2YoQ09OVEVOVF9TQ0FGRk9MRCkpOwotICAgICAg
aWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgZHRkLT5zY2FmZlNp
emUgKj0gMjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICB0ZW1wID0gKENPTlRFTlRfU0NBRkZP
TEQgKilNQUxMT0MoSU5JVF9TQ0FGRk9MRF9FTEVNRU5UUwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKENPTlRFTlRfU0NBRkZPTEQpKTsKLSAgICAgIGlm
ICh0ZW1wID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIGR0ZC0+c2NhZmZTaXpl
ID0gSU5JVF9TQ0FGRk9MRF9FTEVNRU5UUzsKLSAgICB9Ci0gICAgZHRkLT5zY2FmZm9sZCA9IHRl
bXA7Ci0gIH0KLSAgbmV4dCA9IGR0ZC0+c2NhZmZDb3VudCsrOwotICBtZSA9ICZkdGQtPnNjYWZm
b2xkW25leHRdOwotICBpZiAoZHRkLT5zY2FmZkxldmVsKSB7Ci0gICAgQ09OVEVOVF9TQ0FGRk9M
RCAqcGFyZW50ID0gJmR0ZC0+c2NhZmZvbGRbZHRkLT5zY2FmZkluZGV4W2R0ZC0+c2NhZmZMZXZl
bC0xXV07Ci0gICAgaWYgKHBhcmVudC0+bGFzdGNoaWxkKSB7Ci0gICAgICBkdGQtPnNjYWZmb2xk
W3BhcmVudC0+bGFzdGNoaWxkXS5uZXh0c2liID0gbmV4dDsKLSAgICB9Ci0gICAgaWYgKCFwYXJl
bnQtPmNoaWxkY250KQotICAgICAgcGFyZW50LT5maXJzdGNoaWxkID0gbmV4dDsKLSAgICBwYXJl
bnQtPmxhc3RjaGlsZCA9IG5leHQ7Ci0gICAgcGFyZW50LT5jaGlsZGNudCsrOwotICB9Ci0gIG1l
LT5maXJzdGNoaWxkID0gbWUtPmxhc3RjaGlsZCA9IG1lLT5jaGlsZGNudCA9IG1lLT5uZXh0c2li
ID0gMDsKLSAgcmV0dXJuIG5leHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1idWlsZF9ub2RlKFhNTF9Q
YXJzZXIgcGFyc2VyLAotICAgICAgICAgICBpbnQgc3JjX25vZGUsCi0gICAgICAgICAgIFhNTF9D
b250ZW50ICpkZXN0LAotICAgICAgICAgICBYTUxfQ29udGVudCAqKmNvbnRwb3MsCi0gICAgICAg
ICAgIFhNTF9DaGFyICoqc3RycG9zKQotewotICBEVEQgKiBjb25zdCBkdGQgPSBfZHRkOyAgLyog
c2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgZGVzdC0+dHlwZSA9IGR0ZC0+c2Nh
ZmZvbGRbc3JjX25vZGVdLnR5cGU7Ci0gIGRlc3QtPnF1YW50ID0gZHRkLT5zY2FmZm9sZFtzcmNf
bm9kZV0ucXVhbnQ7Ci0gIGlmIChkZXN0LT50eXBlID09IFhNTF9DVFlQRV9OQU1FKSB7Ci0gICAg
Y29uc3QgWE1MX0NoYXIgKnNyYzsKLSAgICBkZXN0LT5uYW1lID0gKnN0cnBvczsKLSAgICBzcmMg
PSBkdGQtPnNjYWZmb2xkW3NyY19ub2RlXS5uYW1lOwotICAgIGZvciAoOzspIHsKLSAgICAgICoo
KnN0cnBvcykrKyA9ICpzcmM7Ci0gICAgICBpZiAoISpzcmMpCi0gICAgICAgIGJyZWFrOwotICAg
ICAgc3JjKys7Ci0gICAgfQotICAgIGRlc3QtPm51bWNoaWxkcmVuID0gMDsKLSAgICBkZXN0LT5j
aGlsZHJlbiA9IE5VTEw7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAg
aW50IGNuOwotICAgIGRlc3QtPm51bWNoaWxkcmVuID0gZHRkLT5zY2FmZm9sZFtzcmNfbm9kZV0u
Y2hpbGRjbnQ7Ci0gICAgZGVzdC0+Y2hpbGRyZW4gPSAqY29udHBvczsKLSAgICAqY29udHBvcyAr
PSBkZXN0LT5udW1jaGlsZHJlbjsKLSAgICBmb3IgKGkgPSAwLCBjbiA9IGR0ZC0+c2NhZmZvbGRb
c3JjX25vZGVdLmZpcnN0Y2hpbGQ7Ci0gICAgICAgICBpIDwgZGVzdC0+bnVtY2hpbGRyZW47Ci0g
ICAgICAgICBpKyssIGNuID0gZHRkLT5zY2FmZm9sZFtjbl0ubmV4dHNpYikgewotICAgICAgYnVp
bGRfbm9kZShwYXJzZXIsIGNuLCAmKGRlc3QtPmNoaWxkcmVuW2ldKSwgY29udHBvcywgc3RycG9z
KTsKLSAgICB9Ci0gICAgZGVzdC0+bmFtZSA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIFhNTF9D
b250ZW50ICoKLWJ1aWxkX21vZGVsIChYTUxfUGFyc2VyIHBhcnNlcikKLXsKLSAgRFREICogY29u
c3QgZHRkID0gX2R0ZDsgIC8qIHNhdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovCi0gIFhN
TF9Db250ZW50ICpyZXQ7Ci0gIFhNTF9Db250ZW50ICpjcG9zOwotICBYTUxfQ2hhciAqIHN0cjsK
LSAgaW50IGFsbG9jc2l6ZSA9IChkdGQtPnNjYWZmQ291bnQgKiBzaXplb2YoWE1MX0NvbnRlbnQp
Ci0gICAgICAgICAgICAgICAgICAgKyAoZHRkLT5jb250ZW50U3RyaW5nTGVuICogc2l6ZW9mKFhN
TF9DaGFyKSkpOwotCi0gIHJldCA9IChYTUxfQ29udGVudCAqKU1BTExPQyhhbGxvY3NpemUpOwot
ICBpZiAoIXJldCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBzdHIgPSAgKFhNTF9DaGFyICopICgm
cmV0W2R0ZC0+c2NhZmZDb3VudF0pOwotICBjcG9zID0gJnJldFsxXTsKLQotICBidWlsZF9ub2Rl
KHBhcnNlciwgMCwgcmV0LCAmY3BvcywgJnN0cik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRp
YyBFTEVNRU5UX1RZUEUgKgotZ2V0RWxlbWVudFR5cGUoWE1MX1BhcnNlciBwYXJzZXIsCi0gICAg
ICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kKQotewotICBEVEQgKiBjb25z
dCBkdGQgPSBfZHRkOyAgLyogc2F2ZSBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gKi8KLSAgY29u
c3QgWE1MX0NoYXIgKm5hbWUgPSBwb29sU3RvcmVTdHJpbmcoJmR0ZC0+cG9vbCwgZW5jLCBwdHIs
IGVuZCk7Ci0gIEVMRU1FTlRfVFlQRSAqcmV0OwotCi0gIGlmICghbmFtZSkKLSAgICByZXR1cm4g
TlVMTDsKLSAgcmV0ID0gKEVMRU1FTlRfVFlQRSAqKSBsb29rdXAocGFyc2VyLCAmZHRkLT5lbGVt
ZW50VHlwZXMsIG5hbWUsIHNpemVvZihFTEVNRU5UX1RZUEUpKTsKLSAgaWYgKCFyZXQpCi0gICAg
cmV0dXJuIE5VTEw7Ci0gIGlmIChyZXQtPm5hbWUgIT0gbmFtZSkKLSAgICBwb29sRGlzY2FyZCgm
ZHRkLT5wb29sKTsKLSAgZWxzZSB7Ci0gICAgcG9vbEZpbmlzaCgmZHRkLT5wb29sKTsKLSAgICBp
ZiAoIXNldEVsZW1lbnRUeXBlUHJlZml4KHBhcnNlciwgcmV0KSkKLSAgICAgIHJldHVybiBOVUxM
OwotICB9Ci0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWxyb2xlLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVz
L2xpYi94bWxyb2xlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NzcyZTIxZGQz
MzdiMDBlM2ZjNTNiMTYyNjcyMTY3MmFiMDgxMDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scm9sZS5jCisrKyAvZGV2L251bGwKQEAgLTEs
MTMzNiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJj
ZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCi0gICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWlu
ZyBwZXJtaXNzaW9uLgotKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi0jaWZkZWYgQ09NUElM
RURfRlJPTV9EU1AKLSNpbmNsdWRlICJ3aW5jb25maWcuaCIKLSNlbGlmIGRlZmluZWQoTUFDT1Nf
Q0xBU1NJQykKLSNpbmNsdWRlICJtYWNjb25maWcuaCIKLSNlbGlmIGRlZmluZWQoX19hbWlnYW9z
X18pCi0jaW5jbHVkZSAiYW1pZ2Fjb25maWcuaCIKLSNlbGlmIGRlZmluZWQoX19XQVRDT01DX18p
Ci0jaW5jbHVkZSAid2F0Y29tY29uZmlnLmgiCi0jZWxzZQotI2lmZGVmIEhBVkVfRVhQQVRfQ09O
RklHX0gKLSNpbmNsdWRlIDxleHBhdF9jb25maWcuaD4KLSNlbmRpZgotI2VuZGlmIC8qIG5kZWYg
Q09NUElMRURfRlJPTV9EU1AgKi8KLQotI2luY2x1ZGUgImV4cGF0X2V4dGVybmFsLmgiCi0jaW5j
bHVkZSAiaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJ4bWxyb2xlLmgiCi0jaW5jbHVkZSAiYXNjaWku
aCIKLQotLyogRG9lc24ndCBjaGVjazoKLQotIHRoYXQgLHwgYXJlIG5vdCBtaXhlZCBpbiBhIG1v
ZGVsIGdyb3VwCi0gY29udGVudCBvZiBsaXRlcmFscwotCi0qLwotCi1zdGF0aWMgY29uc3QgY2hh
ciBLV19BTllbXSA9IHsKLSAgICBBU0NJSV9BLCBBU0NJSV9OLCBBU0NJSV9ZLCAnXDAnIH07Ci1z
dGF0aWMgY29uc3QgY2hhciBLV19BVFRMSVNUW10gPSB7Ci0gICAgQVNDSUlfQSwgQVNDSUlfVCwg
QVNDSUlfVCwgQVNDSUlfTCwgQVNDSUlfSSwgQVNDSUlfUywgQVNDSUlfVCwgJ1wwJyB9Owotc3Rh
dGljIGNvbnN0IGNoYXIgS1dfQ0RBVEFbXSA9IHsKLSAgICBBU0NJSV9DLCBBU0NJSV9ELCBBU0NJ
SV9BLCBBU0NJSV9ULCBBU0NJSV9BLCAnXDAnIH07Ci1zdGF0aWMgY29uc3QgY2hhciBLV19ET0NU
WVBFW10gPSB7Ci0gICAgQVNDSUlfRCwgQVNDSUlfTywgQVNDSUlfQywgQVNDSUlfVCwgQVNDSUlf
WSwgQVNDSUlfUCwgQVNDSUlfRSwgJ1wwJyB9Owotc3RhdGljIGNvbnN0IGNoYXIgS1dfRUxFTUVO
VFtdID0gewotICAgIEFTQ0lJX0UsIEFTQ0lJX0wsIEFTQ0lJX0UsIEFTQ0lJX00sIEFTQ0lJX0Us
IEFTQ0lJX04sIEFTQ0lJX1QsICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX0VNUFRZW10g
PSB7Ci0gICAgQVNDSUlfRSwgQVNDSUlfTSwgQVNDSUlfUCwgQVNDSUlfVCwgQVNDSUlfWSwgJ1ww
JyB9Owotc3RhdGljIGNvbnN0IGNoYXIgS1dfRU5USVRJRVNbXSA9IHsKLSAgICBBU0NJSV9FLCBB
U0NJSV9OLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9ULCBBU0NJSV9JLCBBU0NJSV9FLCBBU0NJ
SV9TLAotICAgICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX0VOVElUWVtdID0gewotICAg
IEFTQ0lJX0UsIEFTQ0lJX04sIEFTQ0lJX1QsIEFTQ0lJX0ksIEFTQ0lJX1QsIEFTQ0lJX1ksICdc
MCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX0ZJWEVEW10gPSB7Ci0gICAgQVNDSUlfRiwgQVND
SUlfSSwgQVNDSUlfWCwgQVNDSUlfRSwgQVNDSUlfRCwgJ1wwJyB9Owotc3RhdGljIGNvbnN0IGNo
YXIgS1dfSURbXSA9IHsKLSAgICBBU0NJSV9JLCBBU0NJSV9ELCAnXDAnIH07Ci1zdGF0aWMgY29u
c3QgY2hhciBLV19JRFJFRltdID0gewotICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFT
Q0lJX0UsIEFTQ0lJX0YsICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX0lEUkVGU1tdID0g
ewotICAgIEFTQ0lJX0ksIEFTQ0lJX0QsIEFTQ0lJX1IsIEFTQ0lJX0UsIEFTQ0lJX0YsIEFTQ0lJ
X1MsICdcMCcgfTsKLSNpZmRlZiBYTUxfRFRECi1zdGF0aWMgY29uc3QgY2hhciBLV19JR05PUkVb
XSA9IHsKLSAgICBBU0NJSV9JLCBBU0NJSV9HLCBBU0NJSV9OLCBBU0NJSV9PLCBBU0NJSV9SLCBB
U0NJSV9FLCAnXDAnIH07Ci0jZW5kaWYKLXN0YXRpYyBjb25zdCBjaGFyIEtXX0lNUExJRURbXSA9
IHsKLSAgICBBU0NJSV9JLCBBU0NJSV9NLCBBU0NJSV9QLCBBU0NJSV9MLCBBU0NJSV9JLCBBU0NJ
SV9FLCBBU0NJSV9ELCAnXDAnIH07Ci0jaWZkZWYgWE1MX0RURAotc3RhdGljIGNvbnN0IGNoYXIg
S1dfSU5DTFVERVtdID0gewotICAgIEFTQ0lJX0ksIEFTQ0lJX04sIEFTQ0lJX0MsIEFTQ0lJX0ws
IEFTQ0lJX1UsIEFTQ0lJX0QsIEFTQ0lJX0UsICdcMCcgfTsKLSNlbmRpZgotc3RhdGljIGNvbnN0
IGNoYXIgS1dfTkRBVEFbXSA9IHsKLSAgICBBU0NJSV9OLCBBU0NJSV9ELCBBU0NJSV9BLCBBU0NJ
SV9ULCBBU0NJSV9BLCAnXDAnIH07Ci1zdGF0aWMgY29uc3QgY2hhciBLV19OTVRPS0VOW10gPSB7
Ci0gICAgQVNDSUlfTiwgQVNDSUlfTSwgQVNDSUlfVCwgQVNDSUlfTywgQVNDSUlfSywgQVNDSUlf
RSwgQVNDSUlfTiwgJ1wwJyB9Owotc3RhdGljIGNvbnN0IGNoYXIgS1dfTk1UT0tFTlNbXSA9IHsK
LSAgICBBU0NJSV9OLCBBU0NJSV9NLCBBU0NJSV9ULCBBU0NJSV9PLCBBU0NJSV9LLCBBU0NJSV9F
LCBBU0NJSV9OLCBBU0NJSV9TLAotICAgICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX05P
VEFUSU9OW10gPQotICAgIHsgQVNDSUlfTiwgQVNDSUlfTywgQVNDSUlfVCwgQVNDSUlfQSwgQVND
SUlfVCwgQVNDSUlfSSwgQVNDSUlfTywgQVNDSUlfTiwKLSAgICAgICdcMCcgfTsKLXN0YXRpYyBj
b25zdCBjaGFyIEtXX1BDREFUQVtdID0gewotICAgIEFTQ0lJX1AsIEFTQ0lJX0MsIEFTQ0lJX0Qs
IEFTQ0lJX0EsIEFTQ0lJX1QsIEFTQ0lJX0EsICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtX
X1BVQkxJQ1tdID0gewotICAgIEFTQ0lJX1AsIEFTQ0lJX1UsIEFTQ0lJX0IsIEFTQ0lJX0wsIEFT
Q0lJX0ksIEFTQ0lJX0MsICdcMCcgfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtXX1JFUVVJUkVEW10g
PSB7Ci0gICAgQVNDSUlfUiwgQVNDSUlfRSwgQVNDSUlfUSwgQVNDSUlfVSwgQVNDSUlfSSwgQVND
SUlfUiwgQVNDSUlfRSwgQVNDSUlfRCwKLSAgICAnXDAnIH07Ci1zdGF0aWMgY29uc3QgY2hhciBL
V19TWVNURU1bXSA9IHsKLSAgICBBU0NJSV9TLCBBU0NJSV9ZLCBBU0NJSV9TLCBBU0NJSV9ULCBB
U0NJSV9FLCBBU0NJSV9NLCAnXDAnIH07Ci0KLSNpZm5kZWYgTUlOX0JZVEVTX1BFUl9DSEFSCi0j
ZGVmaW5lIE1JTl9CWVRFU19QRVJfQ0hBUihlbmMpICgoZW5jKS0+bWluQnl0ZXNQZXJDaGFyKQot
I2VuZGlmCi0KLSNpZmRlZiBYTUxfRFRECi0jZGVmaW5lIHNldFRvcExldmVsKHN0YXRlKSBcCi0g
ICgoc3RhdGUpLT5oYW5kbGVyID0gKChzdGF0ZSktPmRvY3VtZW50RW50aXR5IFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgPyBpbnRlcm5hbFN1YnNldCBcCi0gICAgICAgICAgICAgICAgICAgICAg
IDogZXh0ZXJuYWxTdWJzZXQxKSkKLSNlbHNlIC8qIG5vdCBYTUxfRFREICovCi0jZGVmaW5lIHNl
dFRvcExldmVsKHN0YXRlKSAoKHN0YXRlKS0+aGFuZGxlciA9IGludGVybmFsU3Vic2V0KQotI2Vu
ZGlmIC8qIG5vdCBYTUxfRFREICovCi0KLXR5cGVkZWYgaW50IFBUUkNBTEwgUFJPTE9HX0hBTkRM
RVIoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRvaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpl
bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICpl
bmMpOwotCi1zdGF0aWMgUFJPTE9HX0hBTkRMRVIKLSAgcHJvbG9nMCwgcHJvbG9nMSwgcHJvbG9n
MiwKLSAgZG9jdHlwZTAsIGRvY3R5cGUxLCBkb2N0eXBlMiwgZG9jdHlwZTMsIGRvY3R5cGU0LCBk
b2N0eXBlNSwKLSAgaW50ZXJuYWxTdWJzZXQsCi0gIGVudGl0eTAsIGVudGl0eTEsIGVudGl0eTIs
IGVudGl0eTMsIGVudGl0eTQsIGVudGl0eTUsIGVudGl0eTYsCi0gIGVudGl0eTcsIGVudGl0eTgs
IGVudGl0eTksIGVudGl0eTEwLAotICBub3RhdGlvbjAsIG5vdGF0aW9uMSwgbm90YXRpb24yLCBu
b3RhdGlvbjMsIG5vdGF0aW9uNCwKLSAgYXR0bGlzdDAsIGF0dGxpc3QxLCBhdHRsaXN0MiwgYXR0
bGlzdDMsIGF0dGxpc3Q0LCBhdHRsaXN0NSwgYXR0bGlzdDYsCi0gIGF0dGxpc3Q3LCBhdHRsaXN0
OCwgYXR0bGlzdDksCi0gIGVsZW1lbnQwLCBlbGVtZW50MSwgZWxlbWVudDIsIGVsZW1lbnQzLCBl
bGVtZW50NCwgZWxlbWVudDUsIGVsZW1lbnQ2LAotICBlbGVtZW50NywKLSNpZmRlZiBYTUxfRFRE
Ci0gIGV4dGVybmFsU3Vic2V0MCwgZXh0ZXJuYWxTdWJzZXQxLAotICBjb25kU2VjdDAsIGNvbmRT
ZWN0MSwgY29uZFNlY3QyLAotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgZGVjbENsb3NlLAotICBl
cnJvcjsKLQotc3RhdGljIGludCBGQVNUQ0FMTCBjb21tb24oUFJPTE9HX1NUQVRFICpzdGF0ZSwg
aW50IHRvayk7Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotcHJvbG9nMChQUk9MT0dfU1RBVEUgKnN0
YXRlLAotICAgICAgICBpbnQgdG9rLAotICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAg
IGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dp
dGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHN0YXRlLT5oYW5kbGVy
ID0gcHJvbG9nMTsKLSAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX1hN
TF9ERUNMOgotICAgIHN0YXRlLT5oYW5kbGVyID0gcHJvbG9nMTsKLSAgICByZXR1cm4gWE1MX1JP
TEVfWE1MX0RFQ0w7Ci0gIGNhc2UgWE1MX1RPS19QSToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IHBy
b2xvZzE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX1BJOwotICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoK
LSAgICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0NPTU1F
TlQ7Ci0gIGNhc2UgWE1MX1RPS19CT006Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Ci0gIGNh
c2UgWE1MX1RPS19ERUNMX09QRU46Ci0gICAgaWYgKCFYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgMiAqIE1JTl9CWVRFU19QRVJfQ0hB
UihlbmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEtXX0RPQ1RZUEUpKQotICAgICAgYnJlYWs7Ci0gICAgc3RhdGUtPmhh
bmRsZXIgPSBkb2N0eXBlMDsKLSAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9OT05FOwotICBj
YXNlIFhNTF9UT0tfSU5TVEFOQ0VfU1RBUlQ6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBlcnJvcjsK
LSAgICByZXR1cm4gWE1MX1JPTEVfSU5TVEFOQ0VfU1RBUlQ7Ci0gIH0KLSAgcmV0dXJuIGNvbW1v
bihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1wcm9sb2cxKFBST0xPR19T
VEFURSAqc3RhdGUsCi0gICAgICAgIGludCB0b2ssCi0gICAgICAgIGNvbnN0IGNoYXIgKnB0ciwK
LSAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQot
ewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJu
IFhNTF9ST0xFX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19QSToKLSAgICByZXR1cm4gWE1MX1JPTEVf
UEk7Ci0gIGNhc2UgWE1MX1RPS19DT01NRU5UOgotICAgIHJldHVybiBYTUxfUk9MRV9DT01NRU5U
OwotICBjYXNlIFhNTF9UT0tfQk9NOgotICAgIHJldHVybiBYTUxfUk9MRV9OT05FOwotICBjYXNl
IFhNTF9UT0tfREVDTF9PUEVOOgotICAgIGlmICghWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIDIgKiBNSU5fQllURVNfUEVSX0NIQVIo
ZW5jKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBLV19ET0NUWVBFKSkKLSAgICAgIGJyZWFrOwotICAgIHN0YXRlLT5oYW5k
bGVyID0gZG9jdHlwZTA7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTk9ORTsKLSAgY2Fz
ZSBYTUxfVE9LX0lOU1RBTkNFX1NUQVJUOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZXJyb3I7Ci0g
ICAgcmV0dXJuIFhNTF9ST0xFX0lOU1RBTkNFX1NUQVJUOwotICB9Ci0gIHJldHVybiBjb21tb24o
c3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotcHJvbG9nMihQUk9MT0dfU1RB
VEUgKnN0YXRlLAotICAgICAgICBpbnQgdG9rLAotICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0g
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsK
LSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBY
TUxfUk9MRV9OT05FOwotICBjYXNlIFhNTF9UT0tfUEk6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX1BJ
OwotICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKLSAgICByZXR1cm4gWE1MX1JPTEVfQ09NTUVOVDsK
LSAgY2FzZSBYTUxfVE9LX0lOU1RBTkNFX1NUQVJUOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZXJy
b3I7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0lOU1RBTkNFX1NUQVJUOwotICB9Ci0gIHJldHVybiBj
b21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotZG9jdHlwZTAoUFJP
TE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGludCB0b2ssCi0gICAgICAgICBjb25zdCBjaGFy
ICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICBjb25zdCBFTkNPRElO
RyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0g
ICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0g
IGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlw
ZTE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTkFNRTsKLSAgfQotICByZXR1cm4gY29t
bW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWRvY3R5cGUxKFBST0xP
R19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAq
cHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAg
IHJldHVybiBYTUxfUk9MRV9ET0NUWVBFX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19PUEVOX0JSQUNL
RVQ6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBpbnRlcm5hbFN1YnNldDsKLSAgICByZXR1cm4gWE1M
X1JPTEVfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQ7Ci0gIGNhc2UgWE1MX1RPS19ERUNMX0NMT1NF
OgotICAgIHN0YXRlLT5oYW5kbGVyID0gcHJvbG9nMjsKLSAgICByZXR1cm4gWE1MX1JPTEVfRE9D
VFlQRV9DTE9TRTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgaWYgKFhtbE5hbWVNYXRjaGVz
QXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgewotICAgICAgc3RhdGUtPmhhbmRsZXIg
PSBkb2N0eXBlMzsKLSAgICAgIHJldHVybiBYTUxfUk9MRV9ET0NUWVBFX05PTkU7Ci0gICAgfQot
ICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX1BVQkxJQykpIHsK
LSAgICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlwZTI7Ci0gICAgICByZXR1cm4gWE1MX1JPTEVf
RE9DVFlQRV9OT05FOwotICAgIH0KLSAgICBicmVhazsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0
YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWRvY3R5cGUyKFBST0xPR19TVEFU
RSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAqcHRyLAot
ICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykK
LXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVy
biBYTUxfUk9MRV9ET0NUWVBFX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19MSVRFUkFMOgotICAgIHN0
YXRlLT5oYW5kbGVyID0gZG9jdHlwZTM7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfUFVC
TElDX0lEOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBp
bnQgUFRSQ0FMTAotZG9jdHlwZTMoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGludCB0
b2ssCi0gICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICplbmQs
Ci0gICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBj
YXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfTk9ORTsK
LSAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBkb2N0eXBlNDsK
LSAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9TWVNURU1fSUQ7Ci0gIH0KLSAgcmV0dXJuIGNv
bW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1kb2N0eXBlNChQUk9M
T0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5H
ICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAg
ICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9OT05FOwotICBjYXNlIFhNTF9UT0tfT1BFTl9CUkFD
S0VUOgotICAgIHN0YXRlLT5oYW5kbGVyID0gaW50ZXJuYWxTdWJzZXQ7Ci0gICAgcmV0dXJuIFhN
TF9ST0xFX0RPQ1RZUEVfSU5URVJOQUxfU1VCU0VUOwotICBjYXNlIFhNTF9UT0tfREVDTF9DTE9T
RToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzI7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RP
Q1RZUEVfQ0xPU0U7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3Rh
dGljIGludCBQVFJDQUxMCi1kb2N0eXBlNShQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAg
aW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIg
KmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7
Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRE9DVFlQRV9O
T05FOwotICBjYXNlIFhNTF9UT0tfREVDTF9DTE9TRToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IHBy
b2xvZzI7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RPQ1RZUEVfQ0xPU0U7Ci0gIH0KLSAgcmV0dXJu
IGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1pbnRlcm5hbFN1
YnNldChQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgICAgICAgaW50IHRvaywKLSAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVu
ZCwKLSAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9r
KSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfTk9ORTsK
LSAgY2FzZSBYTUxfVE9LX0RFQ0xfT1BFTjoKLSAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShl
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgMiAqIE1JTl9CWVRFU19QRVJf
Q0hBUihlbmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBLV19FTlRJVFkpKSB7Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9IGVu
dGl0eTA7Ci0gICAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gICAgfQotICAgIGlm
IChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dHIgKyAyICogTUlOX0JZVEVTX1BFUl9DSEFSKGVuYyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtXX0FUVExJU1QpKSB7Ci0g
ICAgICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3QwOwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0FU
VExJU1RfTk9ORTsKLSAgICB9Ci0gICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIDIgKiBNSU5fQllURVNfUEVSX0NIQVIoZW5j
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgS1dfRUxFTUVOVCkpIHsKLSAgICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDA7
Ci0gICAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwotICAgIH0KLSAgICBpZiAoWG1s
TmFtZU1hdGNoZXNBc2NpaShlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsg
MiAqIE1JTl9CWVRFU19QRVJfQ0hBUihlbmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBLV19OT1RBVElPTikpIHsKLSAgICAg
IHN0YXRlLT5oYW5kbGVyID0gbm90YXRpb24wOwotICAgICAgcmV0dXJuIFhNTF9ST0xFX05PVEFU
SU9OX05PTkU7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfUEk6Ci0gICAgcmV0
dXJuIFhNTF9ST0xFX1BJOwotICBjYXNlIFhNTF9UT0tfQ09NTUVOVDoKLSAgICByZXR1cm4gWE1M
X1JPTEVfQ09NTUVOVDsKLSAgY2FzZSBYTUxfVE9LX1BBUkFNX0VOVElUWV9SRUY6Ci0gICAgcmV0
dXJuIFhNTF9ST0xFX1BBUkFNX0VOVElUWV9SRUY7Ci0gIGNhc2UgWE1MX1RPS19DTE9TRV9CUkFD
S0VUOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZG9jdHlwZTU7Ci0gICAgcmV0dXJuIFhNTF9ST0xF
X0RPQ1RZUEVfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX05PTkU6Ci0gICAgcmV0dXJuIFhNTF9ST0xF
X05PTkU7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotI2lmZGVmIFhN
TF9EVEQKLQotc3RhdGljIGludCBQVFJDQUxMCi1leHRlcm5hbFN1YnNldDAoUFJPTE9HX1NUQVRF
ICpzdGF0ZSwKLSAgICAgICAgICAgICAgICBpbnQgdG9rLAotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAg
ICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3RhdGUtPmhhbmRsZXIgPSBleHRlcm5h
bFN1YnNldDE7Ci0gIGlmICh0b2sgPT0gWE1MX1RPS19YTUxfREVDTCkKLSAgICByZXR1cm4gWE1M
X1JPTEVfVEVYVF9ERUNMOwotICByZXR1cm4gZXh0ZXJuYWxTdWJzZXQxKHN0YXRlLCB0b2ssIHB0
ciwgZW5kLCBlbmMpOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWV4dGVybmFsU3Vic2V0MShQ
Uk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgICAgICAgIGludCB0b2ssCi0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwK
LSAgICAgICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykg
ewotICBjYXNlIFhNTF9UT0tfQ09ORF9TRUNUX09QRU46Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBj
b25kU2VjdDA7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19DT05E
X1NFQ1RfQ0xPU0U6Ci0gICAgaWYgKHN0YXRlLT5pbmNsdWRlTGV2ZWwgPT0gMCkKLSAgICAgIGJy
ZWFrOwotICAgIHN0YXRlLT5pbmNsdWRlTGV2ZWwgLT0gMTsKLSAgICByZXR1cm4gWE1MX1JPTEVf
Tk9ORTsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9OT05F
OwotICBjYXNlIFhNTF9UT0tfQ0xPU0VfQlJBQ0tFVDoKLSAgICBicmVhazsKLSAgY2FzZSBYTUxf
VE9LX05PTkU6Ci0gICAgaWYgKHN0YXRlLT5pbmNsdWRlTGV2ZWwpCi0gICAgICBicmVhazsKLSAg
ICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gaW50ZXJuYWxT
dWJzZXQoc3RhdGUsIHRvaywgcHRyLCBlbmQsIGVuYyk7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihz
dGF0ZSwgdG9rKTsKLX0KLQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLQotc3RhdGljIGludCBQVFJD
QUxMCi1lbnRpdHkwKFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgIGludCB0b2ssCi0gICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICBj
b25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tf
UFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOwotICBjYXNlIFhNTF9U
T0tfUEVSQ0VOVDoKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTE7Ci0gICAgcmV0dXJuIFhN
TF9ST0xFX0VOVElUWV9OT05FOwotICBjYXNlIFhNTF9UT0tfTkFNRToKLSAgICBzdGF0ZS0+aGFu
ZGxlciA9IGVudGl0eTI7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0dFTkVSQUxfRU5USVRZX05BTUU7
Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJD
QUxMCi1lbnRpdHkxKFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgIGludCB0b2ssCi0gICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICBj
b25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tf
UFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOwotICBjYXNlIFhNTF9U
T0tfTkFNRToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTc7Ci0gICAgcmV0dXJuIFhNTF9S
T0xFX1BBUkFNX0VOVElUWV9OQU1FOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7
Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotZW50aXR5MihQUk9MT0dfU1RBVEUgKnN0YXRlLAot
ICAgICAgICBpbnQgdG9rLAotICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgIGNvbnN0
IGNoYXIgKmVuZCwKLSAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0
b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9FTlRJ
VFlfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNj
aWkoZW5jLCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgewotICAgICAgc3RhdGUtPmhhbmRsZXIgPSBl
bnRpdHk0OwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOwotICAgIH0KLSAgICBp
ZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19QVUJMSUMpKSB7Ci0gICAg
ICBzdGF0ZS0+aGFuZGxlciA9IGVudGl0eTM7Ci0gICAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZ
X05PTkU7Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfTElURVJBTDoKLSAgICBz
dGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKLSAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1MX1JP
TEVfRU5USVRZX05PTkU7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9WQUxVRTsKLSAgfQot
ICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWVu
dGl0eTMoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgaW50IHRvaywKLSAgICAgICAgY29u
c3QgY2hhciAqcHRyLAotICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgIGNvbnN0IEVO
Q09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0df
UzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19MSVRF
UkFMOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5NDsKLSAgICByZXR1cm4gWE1MX1JPTEVf
RU5USVRZX1BVQkxJQ19JRDsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQot
Ci1zdGF0aWMgaW50IFBUUkNBTEwKLWVudGl0eTQoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAg
ICAgaW50IHRvaywKLSAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICBjb25zdCBjaGFy
ICplbmQsCi0gICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7
Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05P
TkU7Ci0gIGNhc2UgWE1MX1RPS19MSVRFUkFMOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5
NTsKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX1NZU1RFTV9JRDsKLSAgfQotICByZXR1cm4g
Y29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWVudGl0eTUoUFJP
TE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgaW50IHRvaywKLSAgICAgICAgY29uc3QgY2hhciAq
cHRyLAotICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgIGNvbnN0IEVOQ09ESU5HICpl
bmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19ERUNMX0NMT1NFOgot
ICAgIHNldFRvcExldmVsKHN0YXRlKTsKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX0NPTVBM
RVRFOwotICBjYXNlIFhNTF9UT0tfTkFNRToKLSAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShl
bmMsIHB0ciwgZW5kLCBLV19OREFUQSkpIHsKLSAgICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5
NjsKLSAgICAgIHJldHVybiBYTUxfUk9MRV9FTlRJVFlfTk9ORTsKLSAgICB9Ci0gICAgYnJlYWs7
Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJD
QUxMCi1lbnRpdHk2KFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgIGludCB0b2ssCi0gICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICBj
b25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tf
UFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOwotICBjYXNlIFhNTF9U
T0tfTkFNRToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKLSAgICBzdGF0ZS0+cm9s
ZV9ub25lID0gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElU
WV9OT1RBVElPTl9OQU1FOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0K
LXN0YXRpYyBpbnQgUFRSQ0FMTAotZW50aXR5NyhQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAg
ICBpbnQgdG9rLAotICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgIGNvbnN0IGNoYXIg
KmVuZCwKLSAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsK
LSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9FTlRJVFlfTk9O
RTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5j
LCBwdHIsIGVuZCwgS1dfU1lTVEVNKSkgewotICAgICAgc3RhdGUtPmhhbmRsZXIgPSBlbnRpdHk5
OwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9OT05FOwotICAgIH0KLSAgICBpZiAoWG1s
TmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19QVUJMSUMpKSB7Ci0gICAgICBzdGF0
ZS0+aGFuZGxlciA9IGVudGl0eTg7Ci0gICAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7
Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfTElURVJBTDoKLSAgICBzdGF0ZS0+
aGFuZGxlciA9IGRlY2xDbG9zZTsKLSAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfRU5U
SVRZX05PTkU7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9WQUxVRTsKLSAgfQotICByZXR1
cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWVudGl0eTgo
UFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgaW50IHRvaywKLSAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAotICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgIGNvbnN0IEVOQ09ESU5H
ICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAg
ICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19MSVRFUkFMOgot
ICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5OTsKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZ
X1BVQkxJQ19JRDsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0
aWMgaW50IFBUUkNBTEwKLWVudGl0eTkoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgaW50
IHRvaywKLSAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICBjb25zdCBjaGFyICplbmQs
Ci0gICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNh
c2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0g
IGNhc2UgWE1MX1RPS19MSVRFUkFMOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZW50aXR5MTA7Ci0g
ICAgcmV0dXJuIFhNTF9ST0xFX0VOVElUWV9TWVNURU1fSUQ7Ci0gIH0KLSAgcmV0dXJuIGNvbW1v
bihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1lbnRpdHkxMChQUk9MT0df
U1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnB0
ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5HICpl
bmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfRU5USVRZX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19ERUNMX0NMT1NFOgot
ICAgIHNldFRvcExldmVsKHN0YXRlKTsKLSAgICByZXR1cm4gWE1MX1JPTEVfRU5USVRZX0NPTVBM
RVRFOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQg
UFRSQ0FMTAotbm90YXRpb24wKFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgICAgaW50IHRv
aywKLSAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0g
IGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfTk9UQVRJT05fTk9O
RTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBub3RhdGlvbjE7
Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PVEFUSU9OX05BTUU7Ci0gIH0KLSAgcmV0dXJuIGNvbW1v
bihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1ub3RhdGlvbjEoUFJPTE9H
X1NUQVRFICpzdGF0ZSwKLSAgICAgICAgICBpbnQgdG9rLAotICAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciwKLSAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgY29uc3QgRU5DT0RJ
TkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgot
ICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOwotICBjYXNlIFhNTF9UT0tfTkFNRToK
LSAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsIHB0ciwgZW5kLCBLV19TWVNURU0pKSB7
Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9IG5vdGF0aW9uMzsKLSAgICAgIHJldHVybiBYTUxfUk9M
RV9OT1RBVElPTl9OT05FOwotICAgIH0KLSAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMs
IHB0ciwgZW5kLCBLV19QVUJMSUMpKSB7Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9IG5vdGF0aW9u
MjsKLSAgICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOwotICAgIH0KLSAgICBicmVh
azsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBU
UkNBTEwKLW5vdGF0aW9uMihQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgIGludCB0b2ss
Ci0gICAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwK
LSAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBj
YXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PVEFUSU9OX05PTkU7
Ci0gIGNhc2UgWE1MX1RPS19MSVRFUkFMOgotICAgIHN0YXRlLT5oYW5kbGVyID0gbm90YXRpb240
OwotICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9QVUJMSUNfSUQ7Ci0gIH0KLSAgcmV0dXJu
IGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1ub3RhdGlvbjMo
UFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgICBpbnQgdG9rLAotICAgICAgICAgIGNvbnN0
IGNoYXIgKnB0ciwKLSAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgY29uc3Qg
RU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xP
R19TOgotICAgIHJldHVybiBYTUxfUk9MRV9OT1RBVElPTl9OT05FOwotICBjYXNlIFhNTF9UT0tf
TElURVJBTDoKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKLSAgICBzdGF0ZS0+cm9s
ZV9ub25lID0gWE1MX1JPTEVfTk9UQVRJT05fTk9ORTsKLSAgICByZXR1cm4gWE1MX1JPTEVfTk9U
QVRJT05fU1lTVEVNX0lEOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0K
LXN0YXRpYyBpbnQgUFRSQ0FMTAotbm90YXRpb240KFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAg
ICAgICAgaW50IHRvaywKLSAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgY29u
c3QgY2hhciAqZW5kLAotICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRj
aCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVf
Tk9UQVRJT05fTk9ORTsKLSAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6Ci0gICAgc3RhdGUtPmhhbmRs
ZXIgPSBkZWNsQ2xvc2U7Ci0gICAgc3RhdGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xFX05PVEFUSU9O
X05PTkU7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PVEFUSU9OX1NZU1RFTV9JRDsKLSAgY2FzZSBY
TUxfVE9LX0RFQ0xfQ0xPU0U6Ci0gICAgc2V0VG9wTGV2ZWwoc3RhdGUpOwotICAgIHJldHVybiBY
TUxfUk9MRV9OT1RBVElPTl9OT19TWVNURU1fSUQ7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0
ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1hdHRsaXN0MChQUk9MT0dfU1RBVEUg
KnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17
Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4g
WE1MX1JPTEVfQVRUTElTVF9OT05FOwotICBjYXNlIFhNTF9UT0tfTkFNRToKLSAgY2FzZSBYTUxf
VE9LX1BSRUZJWEVEX05BTUU6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0MTsKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9FTEVNRU5UX05BTUU7Ci0gIH0KLSAgcmV0dXJuIGNvbW1v
bihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1hdHRsaXN0MShQUk9MT0df
U1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnB0
ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5HICpl
bmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9OT05FOwotICBjYXNlIFhNTF9UT0tfREVDTF9DTE9TRToK
LSAgICBzZXRUb3BMZXZlbChzdGF0ZSk7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9O
RTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgot
ICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDI7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVFJJ
QlVURV9OQU1FOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRp
YyBpbnQgUFRSQ0FMTAotYXR0bGlzdDIoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGlu
dCB0b2ssCi0gICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICpl
bmQsCi0gICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewot
ICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9O
RTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgewotICAgICAgc3RhdGljIGNvbnN0IGNoYXIg
KiBjb25zdCB0eXBlc1tdID0gewotICAgICAgICBLV19DREFUQSwKLSAgICAgICAgS1dfSUQsCi0g
ICAgICAgIEtXX0lEUkVGLAotICAgICAgICBLV19JRFJFRlMsCi0gICAgICAgIEtXX0VOVElUWSwK
LSAgICAgICAgS1dfRU5USVRJRVMsCi0gICAgICAgIEtXX05NVE9LRU4sCi0gICAgICAgIEtXX05N
VE9LRU5TLAotICAgICAgfTsKLSAgICAgIGludCBpOwotICAgICAgZm9yIChpID0gMDsgaSA8IChp
bnQpKHNpemVvZih0eXBlcykvc2l6ZW9mKHR5cGVzWzBdKSk7IGkrKykKLSAgICAgICAgaWYgKFht
bE5hbWVNYXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgdHlwZXNbaV0pKSB7Ci0gICAgICAgICAg
c3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0ODsKLSAgICAgICAgICByZXR1cm4gWE1MX1JPTEVfQVRU
UklCVVRFX1RZUEVfQ0RBVEEgKyBpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChYbWxOYW1l
TWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX05PVEFUSU9OKSkgewotICAgICAgc3RhdGUt
PmhhbmRsZXIgPSBhdHRsaXN0NTsKLSAgICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7
Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIFhNTF9UT0tfT1BFTl9QQVJFTjoKLSAgICBzdGF0
ZS0+aGFuZGxlciA9IGF0dGxpc3QzOwotICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7
Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJD
QUxMCi1hdHRsaXN0MyhQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAg
ICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAg
ICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1M
X1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9OT05FOwotICBjYXNl
IFhNTF9UT0tfTk1UT0tFTjoKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gIGNhc2UgWE1MX1RPS19Q
UkVGSVhFRF9OQU1FOgotICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDQ7Ci0gICAgcmV0dXJu
IFhNTF9ST0xFX0FUVFJJQlVURV9FTlVNX1ZBTFVFOwotICB9Ci0gIHJldHVybiBjb21tb24oc3Rh
dGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotYXR0bGlzdDQoUFJPTE9HX1NUQVRF
ICpzdGF0ZSwKLSAgICAgICAgIGludCB0b2ssCi0gICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0g
ICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQot
ewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJu
IFhNTF9ST0xFX0FUVExJU1RfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX0NMT1NFX1BBUkVOOgotICAg
IHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDg7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1Rf
Tk9ORTsKLSAgY2FzZSBYTUxfVE9LX09SOgotICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDM7
Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9ORTsKLSAgfQotICByZXR1cm4gY29tbW9u
KHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWF0dGxpc3Q1KFBST0xPR19T
VEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAqcHRy
LAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVu
YykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJl
dHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19PUEVOX1BBUkVOOgot
ICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDY7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJ
U1RfTk9ORTsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMg
aW50IFBUUkNBTEwKLWF0dGxpc3Q2KFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQg
dG9rLAotICAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAg
Y2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7
Ci0gIGNhc2UgWE1MX1RPS19OQU1FOgotICAgIHN0YXRlLT5oYW5kbGVyID0gYXR0bGlzdDc7Ci0g
ICAgcmV0dXJuIFhNTF9ST0xFX0FUVFJJQlVURV9OT1RBVElPTl9WQUxVRTsKLSAgfQotICByZXR1
cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWF0dGxpc3Q3
KFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3Qg
Y2hhciAqcHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5D
T0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19T
OgotICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19DTE9T
RV9QQVJFTjoKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGF0dGxpc3Q4OwotICAgIHJldHVybiBYTUxf
Uk9MRV9BVFRMSVNUX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19PUjoKLSAgICBzdGF0ZS0+aGFuZGxl
ciA9IGF0dGxpc3Q2OwotICAgIHJldHVybiBYTUxfUk9MRV9BVFRMSVNUX05PTkU7Ci0gIH0KLSAg
cmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotLyogZGVmYXVsdCB2YWx1ZSAqLwotc3Rh
dGljIGludCBQVFJDQUxMCi1hdHRsaXN0OChQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAg
aW50IHRvaywKLSAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIg
KmVuZCwKLSAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7
Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfQVRUTElTVF9O
T05FOwotICBjYXNlIFhNTF9UT0tfUE9VTkRfTkFNRToKLSAgICBpZiAoWG1sTmFtZU1hdGNoZXNB
c2NpaShlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyICsgTUlOX0JZVEVTX1BF
Ul9DSEFSKGVuYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEtXX0lNUExJRUQpKSB7Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9
IGF0dGxpc3QxOwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0lNUExJRURfQVRUUklCVVRFX1ZBTFVF
OwotICAgIH0KLSAgICBpZiAoWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHRyICsgTUlOX0JZVEVTX1BFUl9DSEFSKGVuYyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtXX1JF
UVVJUkVEKSkgewotICAgICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0MTsKLSAgICAgIHJldHVy
biBYTUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFMVUU7Ci0gICAgfQotICAgIGlmIChYbWxO
YW1lTWF0Y2hlc0FzY2lpKGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKyBN
SU5fQllURVNfUEVSX0NIQVIoZW5jKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgS1dfRklYRUQpKSB7Ci0gICAgICBzdGF0ZS0+
aGFuZGxlciA9IGF0dGxpc3Q5OwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9ORTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgWE1MX1RPS19MSVRFUkFMOgotICAgIHN0YXRlLT5o
YW5kbGVyID0gYXR0bGlzdDE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0RFRkFVTFRfQVRUUklCVVRF
X1ZBTFVFOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBp
bnQgUFRSQ0FMTAotYXR0bGlzdDkoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGludCB0
b2ssCi0gICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICplbmQs
Ci0gICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBj
YXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0FUVExJU1RfTk9ORTsK
LSAgY2FzZSBYTUxfVE9LX0xJVEVSQUw6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBhdHRsaXN0MTsK
LSAgICByZXR1cm4gWE1MX1JPTEVfRklYRURfQVRUUklCVVRFX1ZBTFVFOwotICB9Ci0gIHJldHVy
biBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotZWxlbWVudDAo
UFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGludCB0b2ssCi0gICAgICAgICBjb25zdCBj
aGFyICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICBjb25zdCBFTkNP
RElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6
Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6
Ci0gIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZWxl
bWVudDE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTkFNRTsKLSAgfQotICByZXR1cm4g
Y29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWVsZW1lbnQxKFBS
T0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hh
ciAqcHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJ
TkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgot
ICAgIHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19OQU1FOgot
ICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX0VNUFRZKSkgewot
ICAgICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7Ci0gICAgICBzdGF0ZS0+cm9sZV9ub25l
ID0gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwotICAgICAgcmV0dXJuIFhNTF9ST0xFX0NPTlRFTlRf
RU1QVFk7Ci0gICAgfQotICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQs
IEtXX0FOWSkpIHsKLSAgICAgIHN0YXRlLT5oYW5kbGVyID0gZGVjbENsb3NlOwotICAgICAgc3Rh
dGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKLSAgICAgIHJldHVybiBYTUxf
Uk9MRV9DT05URU5UX0FOWTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgWE1MX1RPS19PUEVO
X1BBUkVOOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDI7Ci0gICAgc3RhdGUtPmxldmVs
ID0gMTsKLSAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfT1BFTjsKLSAgfQotICByZXR1cm4gY29t
bW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWVsZW1lbnQyKFBST0xP
R19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAq
cHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAg
IHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19QT1VORF9OQU1F
OgotICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdHIgKyBNSU5fQllURVNfUEVSX0NIQVIoZW5jKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgS1dfUENEQVRBKSkg
ewotICAgICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50MzsKLSAgICAgIHJldHVybiBYTUxfUk9M
RV9DT05URU5UX1BDREFUQTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgWE1MX1RPS19PUEVO
X1BBUkVOOgotICAgIHN0YXRlLT5sZXZlbCA9IDI7Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVt
ZW50NjsKLSAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfT1BFTjsKLSAgY2FzZSBYTUxfVE9LX05B
TUU6Ci0gIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgotICAgIHN0YXRlLT5oYW5kbGVyID0g
ZWxlbWVudDc7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0NPTlRFTlRfRUxFTUVOVDsKLSAgY2FzZSBY
TUxfVE9LX05BTUVfUVVFU1RJT046Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NzsKLSAg
ICByZXR1cm4gWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX09QVDsKLSAgY2FzZSBYTUxfVE9LX05B
TUVfQVNURVJJU0s6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NzsKLSAgICByZXR1cm4g
WE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX1JFUDsKLSAgY2FzZSBYTUxfVE9LX05BTUVfUExVUzoK
LSAgICBzdGF0ZS0+aGFuZGxlciA9IGVsZW1lbnQ3OwotICAgIHJldHVybiBYTUxfUk9MRV9DT05U
RU5UX0VMRU1FTlRfUExVUzsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQot
Ci1zdGF0aWMgaW50IFBUUkNBTEwKLWVsZW1lbnQzKFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAg
ICAgICBpbnQgdG9rLAotICAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgY29uc3Qg
Y2hhciAqZW5kLAotICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0
b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9FTEVN
RU5UX05PTkU7Ci0gIGNhc2UgWE1MX1RPS19DTE9TRV9QQVJFTjoKLSAgICBzdGF0ZS0+aGFuZGxl
ciA9IGRlY2xDbG9zZTsKLSAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfRUxFTUVOVF9O
T05FOwotICAgIHJldHVybiBYTUxfUk9MRV9HUk9VUF9DTE9TRTsKLSAgY2FzZSBYTUxfVE9LX0NM
T1NFX1BBUkVOX0FTVEVSSVNLOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZGVjbENsb3NlOwotICAg
IHN0YXRlLT5yb2xlX25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gICAgcmV0dXJuIFhN
TF9ST0xFX0dST1VQX0NMT1NFX1JFUDsKLSAgY2FzZSBYTUxfVE9LX09SOgotICAgIHN0YXRlLT5o
YW5kbGVyID0gZWxlbWVudDQ7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKLSAg
fQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwK
LWVsZW1lbnQ0KFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICAgICBpbnQgdG9rLAotICAgICAg
ICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAg
Y29uc3QgRU5DT0RJTkcgKmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9L
X1BST0xPR19TOgotICAgIHJldHVybiBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gIGNhc2UgWE1M
X1RPS19OQU1FOgotICBjYXNlIFhNTF9UT0tfUFJFRklYRURfTkFNRToKLSAgICBzdGF0ZS0+aGFu
ZGxlciA9IGVsZW1lbnQ1OwotICAgIHJldHVybiBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlQ7Ci0g
IH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxM
Ci1lbGVtZW50NShQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywKLSAgICAg
ICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAg
IGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RP
S19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwotICBjYXNlIFhN
TF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0s6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xv
c2U7Ci0gICAgc3RhdGUtPnJvbGVfbm9uZSA9IFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUkVQOwotICBjYXNlIFhNTF9UT0tfT1I6Ci0gICAg
c3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NDsKLSAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9O
T05FOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQg
UFRSQ0FMTAotZWxlbWVudDYoUFJPTE9HX1NUQVRFICpzdGF0ZSwKLSAgICAgICAgIGludCB0b2ss
Ci0gICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICBjb25zdCBjaGFyICplbmQsCi0g
ICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNl
IFhNTF9UT0tfUFJPTE9HX1M6Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0VMRU1FTlRfTk9ORTsKLSAg
Y2FzZSBYTUxfVE9LX09QRU5fUEFSRU46Ci0gICAgc3RhdGUtPmxldmVsICs9IDE7Ci0gICAgcmV0
dXJuIFhNTF9ST0xFX0dST1VQX09QRU47Ci0gIGNhc2UgWE1MX1RPS19OQU1FOgotICBjYXNlIFhN
TF9UT0tfUFJFRklYRURfTkFNRToKLSAgICBzdGF0ZS0+aGFuZGxlciA9IGVsZW1lbnQ3OwotICAg
IHJldHVybiBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlQ7Ci0gIGNhc2UgWE1MX1RPS19OQU1FX1FV
RVNUSU9OOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDc7Ci0gICAgcmV0dXJuIFhNTF9S
T0xFX0NPTlRFTlRfRUxFTUVOVF9PUFQ7Ci0gIGNhc2UgWE1MX1RPS19OQU1FX0FTVEVSSVNLOgot
ICAgIHN0YXRlLT5oYW5kbGVyID0gZWxlbWVudDc7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0NPTlRF
TlRfRUxFTUVOVF9SRVA7Ci0gIGNhc2UgWE1MX1RPS19OQU1FX1BMVVM6Ci0gICAgc3RhdGUtPmhh
bmRsZXIgPSBlbGVtZW50NzsKLSAgICByZXR1cm4gWE1MX1JPTEVfQ09OVEVOVF9FTEVNRU5UX1BM
VVM7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihzdGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQ
VFJDQUxMCi1lbGVtZW50NyhQUk9MT0dfU1RBVEUgKnN0YXRlLAotICAgICAgICAgaW50IHRvaywK
LSAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAg
ICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2Ug
WE1MX1RPS19QUk9MT0dfUzoKLSAgICByZXR1cm4gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwotICBj
YXNlIFhNTF9UT0tfQ0xPU0VfUEFSRU46Ci0gICAgc3RhdGUtPmxldmVsIC09IDE7Ci0gICAgaWYg
KHN0YXRlLT5sZXZlbCA9PSAwKSB7Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsK
LSAgICAgIHN0YXRlLT5yb2xlX25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gICAgfQot
ICAgIHJldHVybiBYTUxfUk9MRV9HUk9VUF9DTE9TRTsKLSAgY2FzZSBYTUxfVE9LX0NMT1NFX1BB
UkVOX0FTVEVSSVNLOgotICAgIHN0YXRlLT5sZXZlbCAtPSAxOwotICAgIGlmIChzdGF0ZS0+bGV2
ZWwgPT0gMCkgewotICAgICAgc3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7Ci0gICAgICBzdGF0
ZS0+cm9sZV9ub25lID0gWE1MX1JPTEVfRUxFTUVOVF9OT05FOwotICAgIH0KLSAgICByZXR1cm4g
WE1MX1JPTEVfR1JPVVBfQ0xPU0VfUkVQOwotICBjYXNlIFhNTF9UT0tfQ0xPU0VfUEFSRU5fUVVF
U1RJT046Ci0gICAgc3RhdGUtPmxldmVsIC09IDE7Ci0gICAgaWYgKHN0YXRlLT5sZXZlbCA9PSAw
KSB7Ci0gICAgICBzdGF0ZS0+aGFuZGxlciA9IGRlY2xDbG9zZTsKLSAgICAgIHN0YXRlLT5yb2xl
X25vbmUgPSBYTUxfUk9MRV9FTEVNRU5UX05PTkU7Ci0gICAgfQotICAgIHJldHVybiBYTUxfUk9M
RV9HUk9VUF9DTE9TRV9PUFQ7Ci0gIGNhc2UgWE1MX1RPS19DTE9TRV9QQVJFTl9QTFVTOgotICAg
IHN0YXRlLT5sZXZlbCAtPSAxOwotICAgIGlmIChzdGF0ZS0+bGV2ZWwgPT0gMCkgewotICAgICAg
c3RhdGUtPmhhbmRsZXIgPSBkZWNsQ2xvc2U7Ci0gICAgICBzdGF0ZS0+cm9sZV9ub25lID0gWE1M
X1JPTEVfRUxFTUVOVF9OT05FOwotICAgIH0KLSAgICByZXR1cm4gWE1MX1JPTEVfR1JPVVBfQ0xP
U0VfUExVUzsKLSAgY2FzZSBYTUxfVE9LX0NPTU1BOgotICAgIHN0YXRlLT5oYW5kbGVyID0gZWxl
bWVudDY7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX0dST1VQX1NFUVVFTkNFOwotICBjYXNlIFhNTF9U
T0tfT1I6Ci0gICAgc3RhdGUtPmhhbmRsZXIgPSBlbGVtZW50NjsKLSAgICByZXR1cm4gWE1MX1JP
TEVfR1JPVVBfQ0hPSUNFOwotICB9Ci0gIHJldHVybiBjb21tb24oc3RhdGUsIHRvayk7Ci19Ci0K
LSNpZmRlZiBYTUxfRFRECi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotY29uZFNlY3QwKFBST0xPR19T
VEFURSAqc3RhdGUsCi0gICAgICAgICAgaW50IHRvaywKLSAgICAgICAgICBjb25zdCBjaGFyICpw
dHIsCi0gICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgIGNvbnN0IEVOQ09ESU5H
ICplbmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAg
ICByZXR1cm4gWE1MX1JPTEVfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgaWYgKFht
bE5hbWVNYXRjaGVzQXNjaWkoZW5jLCBwdHIsIGVuZCwgS1dfSU5DTFVERSkpIHsKLSAgICAgIHN0
YXRlLT5oYW5kbGVyID0gY29uZFNlY3QxOwotICAgICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Ci0g
ICAgfQotICAgIGlmIChYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgcHRyLCBlbmQsIEtXX0lHTk9S
RSkpIHsKLSAgICAgIHN0YXRlLT5oYW5kbGVyID0gY29uZFNlY3QyOwotICAgICAgcmV0dXJuIFhN
TF9ST0xFX05PTkU7Ci0gICAgfQotICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBjb21tb24oc3Rh
dGUsIHRvayk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotY29uZFNlY3QxKFBST0xPR19TVEFU
RSAqc3RhdGUsCi0gICAgICAgICAgaW50IHRvaywKLSAgICAgICAgICBjb25zdCBjaGFyICpwdHIs
Ci0gICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICpl
bmMpCi17Ci0gIHN3aXRjaCAodG9rKSB7Ci0gIGNhc2UgWE1MX1RPS19QUk9MT0dfUzoKLSAgICBy
ZXR1cm4gWE1MX1JPTEVfTk9ORTsKLSAgY2FzZSBYTUxfVE9LX09QRU5fQlJBQ0tFVDoKLSAgICBz
dGF0ZS0+aGFuZGxlciA9IGV4dGVybmFsU3Vic2V0MTsKLSAgICBzdGF0ZS0+aW5jbHVkZUxldmVs
ICs9IDE7Ci0gICAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Ci0gIH0KLSAgcmV0dXJuIGNvbW1vbihz
dGF0ZSwgdG9rKTsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1jb25kU2VjdDIoUFJPTE9HX1NU
QVRFICpzdGF0ZSwKLSAgICAgICAgICBpbnQgdG9rLAotICAgICAgICAgIGNvbnN0IGNoYXIgKnB0
ciwKLSAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYykKLXsKLSAgc3dpdGNoICh0b2spIHsKLSAgY2FzZSBYTUxfVE9LX1BST0xPR19TOgotICAg
IHJldHVybiBYTUxfUk9MRV9OT05FOwotICBjYXNlIFhNTF9UT0tfT1BFTl9CUkFDS0VUOgotICAg
IHN0YXRlLT5oYW5kbGVyID0gZXh0ZXJuYWxTdWJzZXQxOwotICAgIHJldHVybiBYTUxfUk9MRV9J
R05PUkVfU0VDVDsKLSAgfQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi0jZW5k
aWYgLyogWE1MX0RURCAqLwotCi1zdGF0aWMgaW50IFBUUkNBTEwKLWRlY2xDbG9zZShQUk9MT0df
U1RBVEUgKnN0YXRlLAotICAgICAgICAgIGludCB0b2ssCi0gICAgICAgICAgY29uc3QgY2hhciAq
cHRyLAotICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICBjb25zdCBFTkNPRElO
RyAqZW5jKQotewotICBzd2l0Y2ggKHRvaykgewotICBjYXNlIFhNTF9UT0tfUFJPTE9HX1M6Ci0g
ICAgcmV0dXJuIHN0YXRlLT5yb2xlX25vbmU7Ci0gIGNhc2UgWE1MX1RPS19ERUNMX0NMT1NFOgot
ICAgIHNldFRvcExldmVsKHN0YXRlKTsKLSAgICByZXR1cm4gc3RhdGUtPnJvbGVfbm9uZTsKLSAg
fQotICByZXR1cm4gY29tbW9uKHN0YXRlLCB0b2spOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwK
LWVycm9yKFBST0xPR19TVEFURSAqc3RhdGUsCi0gICAgICBpbnQgdG9rLAotICAgICAgY29uc3Qg
Y2hhciAqcHRyLAotICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgY29uc3QgRU5DT0RJTkcg
KmVuYykKLXsKLSAgcmV0dXJuIFhNTF9ST0xFX05PTkU7Ci19Ci0KLXN0YXRpYyBpbnQgRkFTVENB
TEwKLWNvbW1vbihQUk9MT0dfU1RBVEUgKnN0YXRlLCBpbnQgdG9rKQotewotI2lmZGVmIFhNTF9E
VEQKLSAgaWYgKCFzdGF0ZS0+ZG9jdW1lbnRFbnRpdHkgJiYgdG9rID09IFhNTF9UT0tfUEFSQU1f
RU5USVRZX1JFRikKLSAgICByZXR1cm4gWE1MX1JPTEVfSU5ORVJfUEFSQU1fRU5USVRZX1JFRjsK
LSNlbmRpZgotICBzdGF0ZS0+aGFuZGxlciA9IGVycm9yOwotICByZXR1cm4gWE1MX1JPTEVfRVJS
T1I7Ci19Ci0KLXZvaWQKLVhtbFByb2xvZ1N0YXRlSW5pdChQUk9MT0dfU1RBVEUgKnN0YXRlKQot
ewotICBzdGF0ZS0+aGFuZGxlciA9IHByb2xvZzA7Ci0jaWZkZWYgWE1MX0RURAotICBzdGF0ZS0+
ZG9jdW1lbnRFbnRpdHkgPSAxOwotICBzdGF0ZS0+aW5jbHVkZUxldmVsID0gMDsKLSAgc3RhdGUt
PmluRW50aXR5VmFsdWUgPSAwOwotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLX0KLQotI2lmZGVmIFhN
TF9EVEQKLQotdm9pZAotWG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnRpdHkoUFJPTE9HX1NU
QVRFICpzdGF0ZSkKLXsKLSAgc3RhdGUtPmhhbmRsZXIgPSBleHRlcm5hbFN1YnNldDA7Ci0gIHN0
YXRlLT5kb2N1bWVudEVudGl0eSA9IDA7Ci0gIHN0YXRlLT5pbmNsdWRlTGV2ZWwgPSAwOwotfQot
Ci0jZW5kaWYgLyogWE1MX0RURCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1scm9sZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9s
aWIveG1scm9sZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGQ5ZjA2Zjk3Njc5
ZTZjZTZkNmI1NGU4YzRhM2NjZmM1NzE3YmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHJvbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEx
NCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgVGhhaSBPcGVuIFNvdXJjZSBT
b2Z0d2FyZSBDZW50ZXIgTHRkCi0gICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBw
ZXJtaXNzaW9uLgotKi8KLQotI2lmbmRlZiBYbWxSb2xlX0lOQ0xVREVECi0jZGVmaW5lIFhtbFJv
bGVfSU5DTFVERUQgMQotCi0jaWZkZWYgX19WTVMKLS8qICAgICAgMCAgICAgICAgMSAgICAgICAg
IDIgICAgICAgICAzICAgICAgMCAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAzCi0gICAgICAg
IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEgKi8KLSNkZWZpbmUgWG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnRpdHkg
ICAgWG1sUHJvbG9nU3RhdGVJbml0RXh0ZXJuYWxFbnQKLSNlbmRpZgotCi0jaW5jbHVkZSAieG1s
dG9rLmgiCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotZW51
bSB7Ci0gIFhNTF9ST0xFX0VSUk9SID0gLTEsCi0gIFhNTF9ST0xFX05PTkUgPSAwLAotICBYTUxf
Uk9MRV9YTUxfREVDTCwKLSAgWE1MX1JPTEVfSU5TVEFOQ0VfU1RBUlQsCi0gIFhNTF9ST0xFX0RP
Q1RZUEVfTk9ORSwKLSAgWE1MX1JPTEVfRE9DVFlQRV9OQU1FLAotICBYTUxfUk9MRV9ET0NUWVBF
X1NZU1RFTV9JRCwKLSAgWE1MX1JPTEVfRE9DVFlQRV9QVUJMSUNfSUQsCi0gIFhNTF9ST0xFX0RP
Q1RZUEVfSU5URVJOQUxfU1VCU0VULAotICBYTUxfUk9MRV9ET0NUWVBFX0NMT1NFLAotICBYTUxf
Uk9MRV9HRU5FUkFMX0VOVElUWV9OQU1FLAotICBYTUxfUk9MRV9QQVJBTV9FTlRJVFlfTkFNRSwK
LSAgWE1MX1JPTEVfRU5USVRZX05PTkUsCi0gIFhNTF9ST0xFX0VOVElUWV9WQUxVRSwKLSAgWE1M
X1JPTEVfRU5USVRZX1NZU1RFTV9JRCwKLSAgWE1MX1JPTEVfRU5USVRZX1BVQkxJQ19JRCwKLSAg
WE1MX1JPTEVfRU5USVRZX0NPTVBMRVRFLAotICBYTUxfUk9MRV9FTlRJVFlfTk9UQVRJT05fTkFN
RSwKLSAgWE1MX1JPTEVfTk9UQVRJT05fTk9ORSwKLSAgWE1MX1JPTEVfTk9UQVRJT05fTkFNRSwK
LSAgWE1MX1JPTEVfTk9UQVRJT05fU1lTVEVNX0lELAotICBYTUxfUk9MRV9OT1RBVElPTl9OT19T
WVNURU1fSUQsCi0gIFhNTF9ST0xFX05PVEFUSU9OX1BVQkxJQ19JRCwKLSAgWE1MX1JPTEVfQVRU
UklCVVRFX05BTUUsCi0gIFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0NEQVRBLAotICBYTUxfUk9M
RV9BVFRSSUJVVEVfVFlQRV9JRCwKLSAgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfSURSRUYsCi0g
IFhNTF9ST0xFX0FUVFJJQlVURV9UWVBFX0lEUkVGUywKLSAgWE1MX1JPTEVfQVRUUklCVVRFX1RZ
UEVfRU5USVRZLAotICBYTUxfUk9MRV9BVFRSSUJVVEVfVFlQRV9FTlRJVElFUywKLSAgWE1MX1JP
TEVfQVRUUklCVVRFX1RZUEVfTk1UT0tFTiwKLSAgWE1MX1JPTEVfQVRUUklCVVRFX1RZUEVfTk1U
T0tFTlMsCi0gIFhNTF9ST0xFX0FUVFJJQlVURV9FTlVNX1ZBTFVFLAotICBYTUxfUk9MRV9BVFRS
SUJVVEVfTk9UQVRJT05fVkFMVUUsCi0gIFhNTF9ST0xFX0FUVExJU1RfTk9ORSwKLSAgWE1MX1JP
TEVfQVRUTElTVF9FTEVNRU5UX05BTUUsCi0gIFhNTF9ST0xFX0lNUExJRURfQVRUUklCVVRFX1ZB
TFVFLAotICBYTUxfUk9MRV9SRVFVSVJFRF9BVFRSSUJVVEVfVkFMVUUsCi0gIFhNTF9ST0xFX0RF
RkFVTFRfQVRUUklCVVRFX1ZBTFVFLAotICBYTUxfUk9MRV9GSVhFRF9BVFRSSUJVVEVfVkFMVUUs
Ci0gIFhNTF9ST0xFX0VMRU1FTlRfTk9ORSwKLSAgWE1MX1JPTEVfRUxFTUVOVF9OQU1FLAotICBY
TUxfUk9MRV9DT05URU5UX0FOWSwKLSAgWE1MX1JPTEVfQ09OVEVOVF9FTVBUWSwKLSAgWE1MX1JP
TEVfQ09OVEVOVF9QQ0RBVEEsCi0gIFhNTF9ST0xFX0dST1VQX09QRU4sCi0gIFhNTF9ST0xFX0dS
T1VQX0NMT1NFLAotICBYTUxfUk9MRV9HUk9VUF9DTE9TRV9SRVAsCi0gIFhNTF9ST0xFX0dST1VQ
X0NMT1NFX09QVCwKLSAgWE1MX1JPTEVfR1JPVVBfQ0xPU0VfUExVUywKLSAgWE1MX1JPTEVfR1JP
VVBfQ0hPSUNFLAotICBYTUxfUk9MRV9HUk9VUF9TRVFVRU5DRSwKLSAgWE1MX1JPTEVfQ09OVEVO
VF9FTEVNRU5ULAotICBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlRfUkVQLAotICBYTUxfUk9MRV9D
T05URU5UX0VMRU1FTlRfT1BULAotICBYTUxfUk9MRV9DT05URU5UX0VMRU1FTlRfUExVUywKLSAg
WE1MX1JPTEVfUEksCi0gIFhNTF9ST0xFX0NPTU1FTlQsCi0jaWZkZWYgWE1MX0RURAotICBYTUxf
Uk9MRV9URVhUX0RFQ0wsCi0gIFhNTF9ST0xFX0lHTk9SRV9TRUNULAotICBYTUxfUk9MRV9JTk5F
Ul9QQVJBTV9FTlRJVFlfUkVGLAotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLSAgWE1MX1JPTEVfUEFS
QU1fRU5USVRZX1JFRgotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcHJvbG9nX3N0YXRlIHsKLSAgaW50
IChQVFJDQUxMICpoYW5kbGVyKSAoc3RydWN0IHByb2xvZ19zdGF0ZSAqc3RhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB0b2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFTkNPRElORyAqZW5jKTsKLSAgdW5z
aWduZWQgbGV2ZWw7Ci0gIGludCByb2xlX25vbmU7Ci0jaWZkZWYgWE1MX0RURAotICB1bnNpZ25l
ZCBpbmNsdWRlTGV2ZWw7Ci0gIGludCBkb2N1bWVudEVudGl0eTsKLSAgaW50IGluRW50aXR5VmFs
dWU7Ci0jZW5kaWYgLyogWE1MX0RURCAqLwotfSBQUk9MT0dfU1RBVEU7Ci0KLXZvaWQgWG1sUHJv
bG9nU3RhdGVJbml0KFBST0xPR19TVEFURSAqKTsKLSNpZmRlZiBYTUxfRFRECi12b2lkIFhtbFBy
b2xvZ1N0YXRlSW5pdEV4dGVybmFsRW50aXR5KFBST0xPR19TVEFURSAqKTsKLSNlbmRpZiAvKiBY
TUxfRFREICovCi0KLSNkZWZpbmUgWG1sVG9rZW5Sb2xlKHN0YXRlLCB0b2ssIHB0ciwgZW5kLCBl
bmMpIFwKLSAoKChzdGF0ZSktPmhhbmRsZXIpKHN0YXRlLCB0b2ssIHB0ciwgZW5kLCBlbmMpKQot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogbm90IFhtbFJvbGVf
SU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRvay5jIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMDlkZmM3MmI5ZmM4NTM4NGYwNjg1MDI4
NGQyMWM5NmViYzFjZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9maWxlcy9saWIveG1sdG9rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUxICswLDAgQEAKLS8q
IENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRl
ciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCi0q
LwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUAotI2lu
Y2x1ZGUgIndpbmNvbmZpZy5oIgotI2VsaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQotI2luY2x1
ZGUgIm1hY2NvbmZpZy5oIgotI2VsaWYgZGVmaW5lZChfX2FtaWdhb3NfXykKLSNpbmNsdWRlICJh
bWlnYWNvbmZpZy5oIgotI2VsaWYgZGVmaW5lZChfX1dBVENPTUNfXykKLSNpbmNsdWRlICJ3YXRj
b21jb25maWcuaCIKLSNlbHNlCi0jaWZkZWYgSEFWRV9FWFBBVF9DT05GSUdfSAotI2luY2x1ZGUg
PGV4cGF0X2NvbmZpZy5oPgotI2VuZGlmCi0jZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RT
UCAqLwotCi0jaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwuaCIKLSNpbmNsdWRlICJpbnRlcm5hbC5o
IgotI2luY2x1ZGUgInhtbHRvay5oIgotI2luY2x1ZGUgIm5hbWV0YWIuaCIKLQotI2lmZGVmIFhN
TF9EVEQKLSNkZWZpbmUgSUdOT1JFX1NFQ1RJT05fVE9LX1ZUQUJMRSAsIFBSRUZJWChpZ25vcmVT
ZWN0aW9uVG9rKQotI2Vsc2UKLSNkZWZpbmUgSUdOT1JFX1NFQ1RJT05fVE9LX1ZUQUJMRSAvKiBh
cyBub3RoaW5nICovCi0jZW5kaWYKLQotI2RlZmluZSBWVEFCTEUxIFwKLSAgeyBQUkVGSVgocHJv
bG9nVG9rKSwgUFJFRklYKGNvbnRlbnRUb2spLCBcCi0gICAgUFJFRklYKGNkYXRhU2VjdGlvblRv
aykgSUdOT1JFX1NFQ1RJT05fVE9LX1ZUQUJMRSB9LCBcCi0gIHsgUFJFRklYKGF0dHJpYnV0ZVZh
bHVlVG9rKSwgUFJFRklYKGVudGl0eVZhbHVlVG9rKSB9LCBcCi0gIFBSRUZJWChzYW1lTmFtZSks
IFwKLSAgUFJFRklYKG5hbWVNYXRjaGVzQXNjaWkpLCBcCi0gIFBSRUZJWChuYW1lTGVuZ3RoKSwg
XAotICBQUkVGSVgoc2tpcFMpLCBcCi0gIFBSRUZJWChnZXRBdHRzKSwgXAotICBQUkVGSVgoY2hh
clJlZk51bWJlciksIFwKLSAgUFJFRklYKHByZWRlZmluZWRFbnRpdHlOYW1lKSwgXAotICBQUkVG
SVgodXBkYXRlUG9zaXRpb24pLCBcCi0gIFBSRUZJWChpc1B1YmxpY0lkKQotCi0jZGVmaW5lIFZU
QUJMRSBWVEFCTEUxLCBQUkVGSVgodG9VdGY4KSwgUFJFRklYKHRvVXRmMTYpCi0KLSNkZWZpbmUg
VUNTMl9HRVRfTkFNSU5HKHBhZ2VzLCBoaSwgbG8pIFwKLSAgIChuYW1pbmdCaXRtYXBbKHBhZ2Vz
W2hpXSA8PCAzKSArICgobG8pID4+IDUpXSAmICgxIDw8ICgobG8pICYgMHgxRikpKQotCi0vKiBB
IDIgYnl0ZSBVVEYtOCByZXByZXNlbnRhdGlvbiBzcGxpdHMgdGhlIGNoYXJhY3RlcnMgMTEgYml0
cyBiZXR3ZWVuCi0gICB0aGUgYm90dG9tIDUgYW5kIDYgYml0cyBvZiB0aGUgYnl0ZXMuICBXZSBu
ZWVkIDggYml0cyB0byBpbmRleCBpbnRvCi0gICBwYWdlcywgMyBiaXRzIHRvIGFkZCB0byB0aGF0
IGluZGV4IGFuZCA1IGJpdHMgdG8gZ2VuZXJhdGUgdGhlIG1hc2suCi0qLwotI2RlZmluZSBVVEY4
X0dFVF9OQU1JTkcyKHBhZ2VzLCBieXRlKSBcCi0gICAgKG5hbWluZ0JpdG1hcFsoKHBhZ2VzKVso
KChieXRlKVswXSkgPj4gMikgJiA3XSA8PCAzKSBcCi0gICAgICAgICAgICAgICAgICAgICAgKyAo
KCgoYnl0ZSlbMF0pICYgMykgPDwgMSkgXAotICAgICAgICAgICAgICAgICAgICAgICsgKCgoKGJ5
dGUpWzFdKSA+PiA1KSAmIDEpXSBcCi0gICAgICAgICAmICgxIDw8ICgoKGJ5dGUpWzFdKSAmIDB4
MUYpKSkKLQotLyogQSAzIGJ5dGUgVVRGLTggcmVwcmVzZW50YXRpb24gc3BsaXRzIHRoZSBjaGFy
YWN0ZXJzIDE2IGJpdHMgYmV0d2VlbgotICAgdGhlIGJvdHRvbSA0LCA2IGFuZCA2IGJpdHMgb2Yg
dGhlIGJ5dGVzLiAgV2UgbmVlZCA4IGJpdHMgdG8gaW5kZXgKLSAgIGludG8gcGFnZXMsIDMgYml0
cyB0byBhZGQgdG8gdGhhdCBpbmRleCBhbmQgNSBiaXRzIHRvIGdlbmVyYXRlIHRoZQotICAgbWFz
ay4KLSovCi0jZGVmaW5lIFVURjhfR0VUX05BTUlORzMocGFnZXMsIGJ5dGUpIFwKLSAgKG5hbWlu
Z0JpdG1hcFsoKHBhZ2VzKVsoKCgoYnl0ZSlbMF0pICYgMHhGKSA8PCA0KSBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgKCgoKGJ5dGUpWzFdKSA+PiAyKSAmIDB4RildIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgPDwgMykgXAotICAgICAgICAgICAgICAgICAgICAgICsgKCgoKGJ5
dGUpWzFdKSAmIDMpIDw8IDEpIFwKLSAgICAgICAgICAgICAgICAgICAgICArICgoKChieXRlKVsy
XSkgPj4gNSkgJiAxKV0gXAotICAgICAgICAgJiAoMSA8PCAoKChieXRlKVsyXSkgJiAweDFGKSkp
Ci0KLSNkZWZpbmUgVVRGOF9HRVRfTkFNSU5HKHBhZ2VzLCBwLCBuKSBcCi0gICgobikgPT0gMiBc
Ci0gID8gVVRGOF9HRVRfTkFNSU5HMihwYWdlcywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikocCkp
IFwKLSAgOiAoKG4pID09IDMgXAotICAgICA/IFVURjhfR0VUX05BTUlORzMocGFnZXMsIChjb25z
dCB1bnNpZ25lZCBjaGFyICopKHApKSBcCi0gICAgIDogMCkpCi0KLS8qIERldGVjdGlvbiBvZiBp
bnZhbGlkIFVURi04IHNlcXVlbmNlcyBpcyBiYXNlZCBvbiBUYWJsZSAzLjFCCi0gICBvZiBVbmlj
b2RlIDMuMjogaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3JlcG9ydHMvdHIyOC8KLSAg
IHdpdGggdGhlIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gb2Ygbm90IGFsbG93aW5nIHRoZSBVbmlj
b2RlCi0gICBjb2RlIHBvaW50cyAweEZGRkYgYW5kIDB4RkZGRSAoc2VxdWVuY2VzIEVGLEJGLEJG
IGFuZCBFRixCRixCRSkuCi0gICBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzOgotICAgICAoQSAmIDB4
ODApID09IDAgICAgIG1lYW5zIEEgPCAweDgwCi0gICBhbmQKLSAgICAgKEEgJiAweEMwKSA9PSAw
eEMwICBtZWFucyBBID4gMHhCRgotKi8KLQotI2RlZmluZSBVVEY4X0lOVkFMSUQyKHApIFwKLSAg
KCgqcCkgPCAweEMyIHx8ICgocClbMV0gJiAweDgwKSA9PSAwIHx8ICgocClbMV0gJiAweEMwKSA9
PSAweEMwKQotCi0jZGVmaW5lIFVURjhfSU5WQUxJRDMocCkgXAotICAoKChwKVsyXSAmIDB4ODAp
ID09IDAgXAotICB8fCBcCi0gICgoKnApID09IDB4RUYgJiYgKHApWzFdID09IDB4QkYgXAotICAg
ID8gXAotICAgIChwKVsyXSA+IDB4QkQgXAotICAgIDogXAotICAgICgocClbMl0gJiAweEMwKSA9
PSAweEMwKSBcCi0gIHx8IFwKLSAgKCgqcCkgPT0gMHhFMCBcCi0gICAgPyBcCi0gICAgKHApWzFd
IDwgMHhBMCB8fCAoKHApWzFdICYgMHhDMCkgPT0gMHhDMCBcCi0gICAgOiBcCi0gICAgKChwKVsx
XSAmIDB4ODApID09IDAgXAotICAgIHx8IFwKLSAgICAoKCpwKSA9PSAweEVEID8gKHApWzFdID4g
MHg5RiA6ICgocClbMV0gJiAweEMwKSA9PSAweEMwKSkpCi0KLSNkZWZpbmUgVVRGOF9JTlZBTElE
NChwKSBcCi0gICgoKHApWzNdICYgMHg4MCkgPT0gMCB8fCAoKHApWzNdICYgMHhDMCkgPT0gMHhD
MCBcCi0gIHx8IFwKLSAgKChwKVsyXSAmIDB4ODApID09IDAgfHwgKChwKVsyXSAmIDB4QzApID09
IDB4QzAgXAotICB8fCBcCi0gICgoKnApID09IDB4RjAgXAotICAgID8gXAotICAgIChwKVsxXSA8
IDB4OTAgfHwgKChwKVsxXSAmIDB4QzApID09IDB4QzAgXAotICAgIDogXAotICAgICgocClbMV0g
JiAweDgwKSA9PSAwIFwKLSAgICB8fCBcCi0gICAgKCgqcCkgPT0gMHhGNCA/IChwKVsxXSA+IDB4
OEYgOiAoKHApWzFdICYgMHhDMCkgPT0gMHhDMCkpKQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxM
Ci1pc05ldmVyKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCi17Ci0gIHJldHVy
biAwOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi11dGY4X2lzTmFtZTIoY29uc3QgRU5D
T0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAgcmV0dXJuIFVURjhfR0VUX05BTUlORzIo
bmFtZVBhZ2VzLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXApOwotfQotCi1zdGF0aWMgaW50IFBU
UkZBU1RDQUxMCi11dGY4X2lzTmFtZTMoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAq
cCkKLXsKLSAgcmV0dXJuIFVURjhfR0VUX05BTUlORzMobmFtZVBhZ2VzLCAoY29uc3QgdW5zaWdu
ZWQgY2hhciAqKXApOwotfQotCi0jZGVmaW5lIHV0ZjhfaXNOYW1lNCBpc05ldmVyCi0KLXN0YXRp
YyBpbnQgUFRSRkFTVENBTEwKLXV0ZjhfaXNObXN0cnQyKGNvbnN0IEVOQ09ESU5HICplbmMsIGNv
bnN0IGNoYXIgKnApCi17Ci0gIHJldHVybiBVVEY4X0dFVF9OQU1JTkcyKG5tc3RydFBhZ2VzLCAo
Y29uc3QgdW5zaWduZWQgY2hhciAqKXApOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi11
dGY4X2lzTm1zdHJ0Myhjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQotewotICBy
ZXR1cm4gVVRGOF9HRVRfTkFNSU5HMyhubXN0cnRQYWdlcywgKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KilwKTsKLX0KLQotI2RlZmluZSB1dGY4X2lzTm1zdHJ0NCBpc05ldmVyCi0KLXN0YXRpYyBpbnQg
UFRSRkFTVENBTEwKLXV0ZjhfaXNJbnZhbGlkMihjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBj
aGFyICpwKQotewotICByZXR1cm4gVVRGOF9JTlZBTElEMigoY29uc3QgdW5zaWduZWQgY2hhciAq
KXApOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi11dGY4X2lzSW52YWxpZDMoY29uc3Qg
RU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAgcmV0dXJuIFVURjhfSU5WQUxJRDMo
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwKTsKLX0KLQotc3RhdGljIGludCBQVFJGQVNUQ0FMTAot
dXRmOF9pc0ludmFsaWQ0KGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCi17Ci0g
IHJldHVybiBVVEY4X0lOVkFMSUQ0KChjb25zdCB1bnNpZ25lZCBjaGFyICopcCk7Ci19Ci0KLXN0
cnVjdCBub3JtYWxfZW5jb2RpbmcgewotICBFTkNPRElORyBlbmM7Ci0gIHVuc2lnbmVkIGNoYXIg
dHlwZVsyNTZdOwotI2lmZGVmIFhNTF9NSU5fU0laRQotICBpbnQgKFBUUkZBU1RDQUxMICpieXRl
VHlwZSkoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKLSAgaW50IChQVFJGQVNUQ0FM
TCAqaXNOYW1lTWluKShjb25zdCBFTkNPRElORyAqLCBjb25zdCBjaGFyICopOwotICBpbnQgKFBU
UkZBU1RDQUxMICppc05tc3RydE1pbikoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsK
LSAgaW50IChQVFJGQVNUQ0FMTCAqYnl0ZVRvQXNjaWkpKGNvbnN0IEVOQ09ESU5HICosIGNvbnN0
IGNoYXIgKik7Ci0gIGludCAoUFRSQ0FMTCAqY2hhck1hdGNoZXMpKGNvbnN0IEVOQ09ESU5HICos
IGNvbnN0IGNoYXIgKiwgaW50KTsKLSNlbmRpZiAvKiBYTUxfTUlOX1NJWkUgKi8KLSAgaW50IChQ
VFJGQVNUQ0FMTCAqaXNOYW1lMikoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKLSAg
aW50IChQVFJGQVNUQ0FMTCAqaXNOYW1lMykoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAq
KTsKLSAgaW50IChQVFJGQVNUQ0FMTCAqaXNOYW1lNCkoY29uc3QgRU5DT0RJTkcgKiwgY29uc3Qg
Y2hhciAqKTsKLSAgaW50IChQVFJGQVNUQ0FMTCAqaXNObXN0cnQyKShjb25zdCBFTkNPRElORyAq
LCBjb25zdCBjaGFyICopOwotICBpbnQgKFBUUkZBU1RDQUxMICppc05tc3RydDMpKGNvbnN0IEVO
Q09ESU5HICosIGNvbnN0IGNoYXIgKik7Ci0gIGludCAoUFRSRkFTVENBTEwgKmlzTm1zdHJ0NCko
Y29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKLSAgaW50IChQVFJGQVNUQ0FMTCAqaXNJ
bnZhbGlkMikoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKLSAgaW50IChQVFJGQVNU
Q0FMTCAqaXNJbnZhbGlkMykoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAqKTsKLSAgaW50
IChQVFJGQVNUQ0FMTCAqaXNJbnZhbGlkNCkoY29uc3QgRU5DT0RJTkcgKiwgY29uc3QgY2hhciAq
KTsKLX07Ci0KLSNkZWZpbmUgQVNfTk9STUFMX0VOQ09ESU5HKGVuYykgICAoKGNvbnN0IHN0cnVj
dCBub3JtYWxfZW5jb2RpbmcgKikgKGVuYykpCi0KLSNpZmRlZiBYTUxfTUlOX1NJWkUKLQotI2Rl
ZmluZSBTVEFOREFSRF9WVEFCTEUoRSkgXAotIEUgIyMgYnl0ZVR5cGUsIFwKLSBFICMjIGlzTmFt
ZU1pbiwgXAotIEUgIyMgaXNObXN0cnRNaW4sIFwKLSBFICMjIGJ5dGVUb0FzY2lpLCBcCi0gRSAj
IyBjaGFyTWF0Y2hlcywKLQotI2Vsc2UKLQotI2RlZmluZSBTVEFOREFSRF9WVEFCTEUoRSkgLyog
YXMgbm90aGluZyAqLwotCi0jZW5kaWYKLQotI2RlZmluZSBOT1JNQUxfVlRBQkxFKEUpIFwKLSBF
ICMjIGlzTmFtZTIsIFwKLSBFICMjIGlzTmFtZTMsIFwKLSBFICMjIGlzTmFtZTQsIFwKLSBFICMj
IGlzTm1zdHJ0MiwgXAotIEUgIyMgaXNObXN0cnQzLCBcCi0gRSAjIyBpc05tc3RydDQsIFwKLSBF
ICMjIGlzSW52YWxpZDIsIFwKLSBFICMjIGlzSW52YWxpZDMsIFwKLSBFICMjIGlzSW52YWxpZDQK
LQotc3RhdGljIGludCBGQVNUQ0FMTCBjaGVja0NoYXJSZWZOdW1iZXIoaW50KTsKLQotI2luY2x1
ZGUgInhtbHRva19pbXBsLmgiCi0jaW5jbHVkZSAiYXNjaWkuaCIKLQotI2lmZGVmIFhNTF9NSU5f
U0laRQotI2RlZmluZSBzYl9pc05hbWVNaW4gaXNOZXZlcgotI2RlZmluZSBzYl9pc05tc3RydE1p
biBpc05ldmVyCi0jZW5kaWYKLQotI2lmZGVmIFhNTF9NSU5fU0laRQotI2RlZmluZSBNSU5CUEMo
ZW5jKSAoKGVuYyktPm1pbkJ5dGVzUGVyQ2hhcikKLSNlbHNlCi0vKiBtaW5pbXVtIGJ5dGVzIHBl
ciBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgTUlOQlBDKGVuYykgMQotI2VuZGlmCi0KLSNkZWZpbmUg
U0JfQllURV9UWVBFKGVuYywgcCkgXAotICAoKChzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nICopKGVu
YykpLT50eXBlWyh1bnNpZ25lZCBjaGFyKSoocCldKQotCi0jaWZkZWYgWE1MX01JTl9TSVpFCi1z
dGF0aWMgaW50IFBUUkZBU1RDQUxMCi1zYl9ieXRlVHlwZShjb25zdCBFTkNPRElORyAqZW5jLCBj
b25zdCBjaGFyICpwKQotewotICByZXR1cm4gU0JfQllURV9UWVBFKGVuYywgcCk7Ci19Ci0jZGVm
aW5lIEJZVEVfVFlQRShlbmMsIHApIFwKLSAoQVNfTk9STUFMX0VOQ09ESU5HKGVuYyktPmJ5dGVU
eXBlKGVuYywgcCkpCi0jZWxzZQotI2RlZmluZSBCWVRFX1RZUEUoZW5jLCBwKSBTQl9CWVRFX1RZ
UEUoZW5jLCBwKQotI2VuZGlmCi0KLSNpZmRlZiBYTUxfTUlOX1NJWkUKLSNkZWZpbmUgQllURV9U
T19BU0NJSShlbmMsIHApIFwKLSAoQVNfTk9STUFMX0VOQ09ESU5HKGVuYyktPmJ5dGVUb0FzY2lp
KGVuYywgcCkpCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi1zYl9ieXRlVG9Bc2NpaShjb25zdCBF
TkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQotewotICByZXR1cm4gKnA7Ci19Ci0jZWxzZQot
I2RlZmluZSBCWVRFX1RPX0FTQ0lJKGVuYywgcCkgKCoocCkpCi0jZW5kaWYKLQotI2RlZmluZSBJ
U19OQU1FX0NIQVIoZW5jLCBwLCBuKSBcCi0gKEFTX05PUk1BTF9FTkNPRElORyhlbmMpLT5pc05h
bWUgIyMgbihlbmMsIHApKQotI2RlZmluZSBJU19OTVNUUlRfQ0hBUihlbmMsIHAsIG4pIFwKLSAo
QVNfTk9STUFMX0VOQ09ESU5HKGVuYyktPmlzTm1zdHJ0ICMjIG4oZW5jLCBwKSkKLSNkZWZpbmUg
SVNfSU5WQUxJRF9DSEFSKGVuYywgcCwgbikgXAotIChBU19OT1JNQUxfRU5DT0RJTkcoZW5jKS0+
aXNJbnZhbGlkICMjIG4oZW5jLCBwKSkKLQotI2lmZGVmIFhNTF9NSU5fU0laRQotI2RlZmluZSBJ
U19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcCkgXAotIChBU19OT1JNQUxfRU5DT0RJTkcoZW5jKS0+
aXNOYW1lTWluKGVuYywgcCkpCi0jZGVmaW5lIElTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHAp
IFwKLSAoQVNfTk9STUFMX0VOQ09ESU5HKGVuYyktPmlzTm1zdHJ0TWluKGVuYywgcCkpCi0jZWxz
ZQotI2RlZmluZSBJU19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcCkgKDApCi0jZGVmaW5lIElTX05N
U1RSVF9DSEFSX01JTkJQQyhlbmMsIHApICgwKQotI2VuZGlmCi0KLSNpZmRlZiBYTUxfTUlOX1NJ
WkUKLSNkZWZpbmUgQ0hBUl9NQVRDSEVTKGVuYywgcCwgYykgXAotIChBU19OT1JNQUxfRU5DT0RJ
TkcoZW5jKS0+Y2hhck1hdGNoZXMoZW5jLCBwLCBjKSkKLXN0YXRpYyBpbnQgUFRSQ0FMTAotc2Jf
Y2hhck1hdGNoZXMoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCwgaW50IGMpCi17
Ci0gIHJldHVybiAqcCA9PSBjOwotfQotI2Vsc2UKLS8qIGMgaXMgYW4gQVNDSUkgY2hhcmFjdGVy
ICovCi0jZGVmaW5lIENIQVJfTUFUQ0hFUyhlbmMsIHAsIGMpICgqKHApID09IGMpCi0jZW5kaWYK
LQotI2RlZmluZSBQUkVGSVgoaWRlbnQpIG5vcm1hbF8gIyMgaWRlbnQKLSNkZWZpbmUgWE1MX1RP
S19JTVBMX0MKLSNpbmNsdWRlICJ4bWx0b2tfaW1wbC5jIgotI3VuZGVmIFhNTF9UT0tfSU1QTF9D
Ci0KLSN1bmRlZiBNSU5CUEMKLSN1bmRlZiBCWVRFX1RZUEUKLSN1bmRlZiBCWVRFX1RPX0FTQ0lJ
Ci0jdW5kZWYgQ0hBUl9NQVRDSEVTCi0jdW5kZWYgSVNfTkFNRV9DSEFSCi0jdW5kZWYgSVNfTkFN
RV9DSEFSX01JTkJQQwotI3VuZGVmIElTX05NU1RSVF9DSEFSCi0jdW5kZWYgSVNfTk1TVFJUX0NI
QVJfTUlOQlBDCi0jdW5kZWYgSVNfSU5WQUxJRF9DSEFSCi0KLWVudW0geyAgLyogVVRGOF9jdmFs
TiBpcyB2YWx1ZSBvZiBtYXNrZWQgZmlyc3QgYnl0ZSBvZiBOIGJ5dGUgc2VxdWVuY2UgKi8KLSAg
VVRGOF9jdmFsMSA9IDB4MDAsCi0gIFVURjhfY3ZhbDIgPSAweGMwLAotICBVVEY4X2N2YWwzID0g
MHhlMCwKLSAgVVRGOF9jdmFsNCA9IDB4ZjAKLX07Ci0KLXN0YXRpYyB2b2lkIFBUUkNBTEwKLXV0
ZjhfdG9VdGY4KGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICBjb25zdCBjaGFyICoq
ZnJvbVAsIGNvbnN0IGNoYXIgKmZyb21MaW0sCi0gICAgICAgICAgICBjaGFyICoqdG9QLCBjb25z
dCBjaGFyICp0b0xpbSkKLXsKLSAgY2hhciAqdG87Ci0gIGNvbnN0IGNoYXIgKmZyb207Ci0gIGlm
IChmcm9tTGltIC0gKmZyb21QID4gdG9MaW0gLSAqdG9QKSB7Ci0gICAgLyogQXZvaWQgY29weWlu
ZyBwYXJ0aWFsIGNoYXJhY3RlcnMuICovCi0gICAgZm9yIChmcm9tTGltID0gKmZyb21QICsgKHRv
TGltIC0gKnRvUCk7IGZyb21MaW0gPiAqZnJvbVA7IGZyb21MaW0tLSkKLSAgICAgIGlmICgoKHVu
c2lnbmVkIGNoYXIpZnJvbUxpbVstMV0gJiAweGMwKSAhPSAweDgwKQotICAgICAgICBicmVhazsK
LSAgfQotICBmb3IgKHRvID0gKnRvUCwgZnJvbSA9ICpmcm9tUDsgZnJvbSAhPSBmcm9tTGltOyBm
cm9tKyssIHRvKyspCi0gICAgKnRvID0gKmZyb207Ci0gICpmcm9tUCA9IGZyb207Ci0gICp0b1Ag
PSB0bzsKLX0KLQotc3RhdGljIHZvaWQgUFRSQ0FMTAotdXRmOF90b1V0ZjE2KGNvbnN0IEVOQ09E
SU5HICplbmMsCi0gICAgICAgICAgICAgY29uc3QgY2hhciAqKmZyb21QLCBjb25zdCBjaGFyICpm
cm9tTGltLAotICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICoqdG9QLCBjb25zdCB1bnNpZ25l
ZCBzaG9ydCAqdG9MaW0pCi17Ci0gIHVuc2lnbmVkIHNob3J0ICp0byA9ICp0b1A7Ci0gIGNvbnN0
IGNoYXIgKmZyb20gPSAqZnJvbVA7Ci0gIHdoaWxlIChmcm9tICE9IGZyb21MaW0gJiYgdG8gIT0g
dG9MaW0pIHsKLSAgICBzd2l0Y2ggKCgoc3RydWN0IG5vcm1hbF9lbmNvZGluZyAqKWVuYyktPnR5
cGVbKHVuc2lnbmVkIGNoYXIpKmZyb21dKSB7Ci0gICAgY2FzZSBCVF9MRUFEMjoKLSAgICAgICp0
bysrID0gKHVuc2lnbmVkIHNob3J0KSgoKGZyb21bMF0gJiAweDFmKSA8PCA2KSB8IChmcm9tWzFd
ICYgMHgzZikpOwotICAgICAgZnJvbSArPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCVF9M
RUFEMzoKLSAgICAgICp0bysrID0gKHVuc2lnbmVkIHNob3J0KSgoKGZyb21bMF0gJiAweGYpIDw8
IDEyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChmcm9tWzFdICYgMHgzZikg
PDwgNikgfCAoZnJvbVsyXSAmIDB4M2YpKTsKLSAgICAgIGZyb20gKz0gMzsKLSAgICAgIGJyZWFr
OwotICAgIGNhc2UgQlRfTEVBRDQ6Ci0gICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbjsK
LSAgICAgICAgaWYgKHRvICsgMSA9PSB0b0xpbSkKLSAgICAgICAgICBnb3RvIGFmdGVyOwotICAg
ICAgICBuID0gKChmcm9tWzBdICYgMHg3KSA8PCAxOCkgfCAoKGZyb21bMV0gJiAweDNmKSA8PCAx
MikKLSAgICAgICAgICAgIHwgKChmcm9tWzJdICYgMHgzZikgPDwgNikgfCAoZnJvbVszXSAmIDB4
M2YpOwotICAgICAgICBuIC09IDB4MTAwMDA7Ci0gICAgICAgIHRvWzBdID0gKHVuc2lnbmVkIHNo
b3J0KSgobiA+PiAxMCkgfCAweEQ4MDApOwotICAgICAgICB0b1sxXSA9ICh1bnNpZ25lZCBzaG9y
dCkoKG4gJiAweDNGRikgfCAweERDMDApOwotICAgICAgICB0byArPSAyOwotICAgICAgICBmcm9t
ICs9IDQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgKnRvKysg
PSAqZnJvbSsrOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci1hZnRlcjoKLSAgKmZyb21QID0g
ZnJvbTsKLSAgKnRvUCA9IHRvOwotfQotCi0jaWZkZWYgWE1MX05TCi1zdGF0aWMgY29uc3Qgc3Ry
dWN0IG5vcm1hbF9lbmNvZGluZyB1dGY4X2VuY29kaW5nX25zID0gewotICB7IFZUQUJMRTEsIHV0
ZjhfdG9VdGY4LCB1dGY4X3RvVXRmMTYsIDEsIDEsIDAgfSwKLSAgewotI2luY2x1ZGUgImFzY2lp
dGFiLmgiCi0jaW5jbHVkZSAidXRmOHRhYi5oIgotICB9LAotICBTVEFOREFSRF9WVEFCTEUoc2Jf
KSBOT1JNQUxfVlRBQkxFKHV0ZjhfKQotfTsKLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qgc3RydWN0
IG5vcm1hbF9lbmNvZGluZyB1dGY4X2VuY29kaW5nID0gewotICB7IFZUQUJMRTEsIHV0ZjhfdG9V
dGY4LCB1dGY4X3RvVXRmMTYsIDEsIDEsIDAgfSwKLSAgewotI2RlZmluZSBCVF9DT0xPTiBCVF9O
TVNUUlQKLSNpbmNsdWRlICJhc2NpaXRhYi5oIgotI3VuZGVmIEJUX0NPTE9OCi0jaW5jbHVkZSAi
dXRmOHRhYi5oIgotICB9LAotICBTVEFOREFSRF9WVEFCTEUoc2JfKSBOT1JNQUxfVlRBQkxFKHV0
ZjhfKQotfTsKLQotI2lmZGVmIFhNTF9OUwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9l
bmNvZGluZyBpbnRlcm5hbF91dGY4X2VuY29kaW5nX25zID0gewotICB7IFZUQUJMRTEsIHV0Zjhf
dG9VdGY4LCB1dGY4X3RvVXRmMTYsIDEsIDEsIDAgfSwKLSAgewotI2luY2x1ZGUgImlhc2NpaXRh
Yi5oIgotI2luY2x1ZGUgInV0Zjh0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRBQkxFKHNiXykg
Tk9STUFMX1ZUQUJMRSh1dGY4XykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qgc3RydWN0
IG5vcm1hbF9lbmNvZGluZyBpbnRlcm5hbF91dGY4X2VuY29kaW5nID0gewotICB7IFZUQUJMRTEs
IHV0ZjhfdG9VdGY4LCB1dGY4X3RvVXRmMTYsIDEsIDEsIDAgfSwKLSAgewotI2RlZmluZSBCVF9D
T0xPTiBCVF9OTVNUUlQKLSNpbmNsdWRlICJpYXNjaWl0YWIuaCIKLSN1bmRlZiBCVF9DT0xPTgot
I2luY2x1ZGUgInV0Zjh0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRBQkxFKHNiXykgTk9STUFM
X1ZUQUJMRSh1dGY4XykKLX07Ci0KLXN0YXRpYyB2b2lkIFBUUkNBTEwKLWxhdGluMV90b1V0Zjgo
Y29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmZyb21QLCBj
b25zdCBjaGFyICpmcm9tTGltLAotICAgICAgICAgICAgICBjaGFyICoqdG9QLCBjb25zdCBjaGFy
ICp0b0xpbSkKLXsKLSAgZm9yICg7OykgewotICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICBpZiAo
KmZyb21QID09IGZyb21MaW0pCi0gICAgICBicmVhazsKLSAgICBjID0gKHVuc2lnbmVkIGNoYXIp
Kipmcm9tUDsKLSAgICBpZiAoYyAmIDB4ODApIHsKLSAgICAgIGlmICh0b0xpbSAtICp0b1AgPCAy
KQotICAgICAgICBicmVhazsKLSAgICAgICooKnRvUCkrKyA9IChjaGFyKSgoYyA+PiA2KSB8IFVU
RjhfY3ZhbDIpOwotICAgICAgKigqdG9QKSsrID0gKGNoYXIpKChjICYgMHgzZikgfCAweDgwKTsK
LSAgICAgICgqZnJvbVApKys7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgaWYgKCp0b1AgPT0g
dG9MaW0pCi0gICAgICAgIGJyZWFrOwotICAgICAgKigqdG9QKSsrID0gKigqZnJvbVApKys7Ci0g
ICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFBUUkNBTEwKLWxhdGluMV90b1V0ZjE2KGNvbnN0
IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZnJvbVAsIGNvbnN0
IGNoYXIgKmZyb21MaW0sCi0gICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqKnRvUCwgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnRvTGltKQotewotICB3aGlsZSAoKmZyb21QICE9IGZyb21MaW0g
JiYgKnRvUCAhPSB0b0xpbSkKLSAgICAqKCp0b1ApKysgPSAodW5zaWduZWQgY2hhcikqKCpmcm9t
UCkrKzsKLX0KLQotI2lmZGVmIFhNTF9OUwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9l
bmNvZGluZyBsYXRpbjFfZW5jb2RpbmdfbnMgPSB7Ci0gIHsgVlRBQkxFMSwgbGF0aW4xX3RvVXRm
OCwgbGF0aW4xX3RvVXRmMTYsIDEsIDAsIDAgfSwKLSAgewotI2luY2x1ZGUgImFzY2lpdGFiLmgi
Ci0jaW5jbHVkZSAibGF0aW4xdGFiLmgiCi0gIH0sCi0gIFNUQU5EQVJEX1ZUQUJMRShzYl8pCi19
OwotCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgbGF0aW4x
X2VuY29kaW5nID0gewotICB7IFZUQUJMRTEsIGxhdGluMV90b1V0ZjgsIGxhdGluMV90b1V0ZjE2
LCAxLCAwLCAwIH0sCi0gIHsKLSNkZWZpbmUgQlRfQ09MT04gQlRfTk1TVFJUCi0jaW5jbHVkZSAi
YXNjaWl0YWIuaCIKLSN1bmRlZiBCVF9DT0xPTgotI2luY2x1ZGUgImxhdGluMXRhYi5oIgotICB9
LAotICBTVEFOREFSRF9WVEFCTEUoc2JfKQotfTsKLQotc3RhdGljIHZvaWQgUFRSQ0FMTAotYXNj
aWlfdG9VdGY4KGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgY29uc3QgY2hhciAq
KmZyb21QLCBjb25zdCBjaGFyICpmcm9tTGltLAotICAgICAgICAgICAgIGNoYXIgKip0b1AsIGNv
bnN0IGNoYXIgKnRvTGltKQotewotICB3aGlsZSAoKmZyb21QICE9IGZyb21MaW0gJiYgKnRvUCAh
PSB0b0xpbSkKLSAgICAqKCp0b1ApKysgPSAqKCpmcm9tUCkrKzsKLX0KLQotI2lmZGVmIFhNTF9O
UwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9lbmNvZGluZyBhc2NpaV9lbmNvZGluZ19u
cyA9IHsKLSAgeyBWVEFCTEUxLCBhc2NpaV90b1V0ZjgsIGxhdGluMV90b1V0ZjE2LCAxLCAxLCAw
IH0sCi0gIHsKLSNpbmNsdWRlICJhc2NpaXRhYi5oIgotLyogQlRfTk9OWE1MID09IDAgKi8KLSAg
fSwKLSAgU1RBTkRBUkRfVlRBQkxFKHNiXykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qg
c3RydWN0IG5vcm1hbF9lbmNvZGluZyBhc2NpaV9lbmNvZGluZyA9IHsKLSAgeyBWVEFCTEUxLCBh
c2NpaV90b1V0ZjgsIGxhdGluMV90b1V0ZjE2LCAxLCAxLCAwIH0sCi0gIHsKLSNkZWZpbmUgQlRf
Q09MT04gQlRfTk1TVFJUCi0jaW5jbHVkZSAiYXNjaWl0YWIuaCIKLSN1bmRlZiBCVF9DT0xPTgot
LyogQlRfTk9OWE1MID09IDAgKi8KLSAgfSwKLSAgU1RBTkRBUkRfVlRBQkxFKHNiXykKLX07Ci0K
LXN0YXRpYyBpbnQgUFRSRkFTVENBTEwKLXVuaWNvZGVfYnl0ZV90eXBlKGNoYXIgaGksIGNoYXIg
bG8pCi17Ci0gIHN3aXRjaCAoKHVuc2lnbmVkIGNoYXIpaGkpIHsKLSAgY2FzZSAweEQ4OiBjYXNl
IDB4RDk6IGNhc2UgMHhEQTogY2FzZSAweERCOgotICAgIHJldHVybiBCVF9MRUFENDsKLSAgY2Fz
ZSAweERDOiBjYXNlIDB4REQ6IGNhc2UgMHhERTogY2FzZSAweERGOgotICAgIHJldHVybiBCVF9U
UkFJTDsKLSAgY2FzZSAweEZGOgotICAgIHN3aXRjaCAoKHVuc2lnbmVkIGNoYXIpbG8pIHsKLSAg
ICBjYXNlIDB4RkY6Ci0gICAgY2FzZSAweEZFOgotICAgICAgcmV0dXJuIEJUX05PTlhNTDsKLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIEJUX05PTkFTQ0lJOwotfQotCi0jZGVmaW5l
IERFRklORV9VVEYxNl9UT19VVEY4KEUpIFwKLXN0YXRpYyB2b2lkICBQVFJDQUxMIFwKLUUgIyMg
dG9VdGY4KGNvbnN0IEVOQ09ESU5HICplbmMsIFwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKipm
cm9tUCwgY29uc3QgY2hhciAqZnJvbUxpbSwgXAotICAgICAgICAgICAgY2hhciAqKnRvUCwgY29u
c3QgY2hhciAqdG9MaW0pIFwKLXsgXAotICBjb25zdCBjaGFyICpmcm9tOyBcCi0gIGZvciAoZnJv
bSA9ICpmcm9tUDsgZnJvbSAhPSBmcm9tTGltOyBmcm9tICs9IDIpIHsgXAotICAgIGludCBwbGFu
ZTsgXAotICAgIHVuc2lnbmVkIGNoYXIgbG8yOyBcCi0gICAgdW5zaWduZWQgY2hhciBsbyA9IEdF
VF9MTyhmcm9tKTsgXAotICAgIHVuc2lnbmVkIGNoYXIgaGkgPSBHRVRfSEkoZnJvbSk7IFwKLSAg
ICBzd2l0Y2ggKGhpKSB7IFwKLSAgICBjYXNlIDA6IFwKLSAgICAgIGlmIChsbyA8IDB4ODApIHsg
XAotICAgICAgICBpZiAoKnRvUCA9PSB0b0xpbSkgeyBcCi0gICAgICAgICAgKmZyb21QID0gZnJv
bTsgXAotICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9IFwKLSAgICAgICAgKigqdG9QKSsr
ID0gbG87IFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICAgIH0gXAotICAgICAgLyogZmFsbCB0aHJv
dWdoICovIFwKLSAgICBjYXNlIDB4MTogY2FzZSAweDI6IGNhc2UgMHgzOiBcCi0gICAgY2FzZSAw
eDQ6IGNhc2UgMHg1OiBjYXNlIDB4NjogY2FzZSAweDc6IFwKLSAgICAgIGlmICh0b0xpbSAtICAq
dG9QIDwgMikgeyBcCi0gICAgICAgICpmcm9tUCA9IGZyb207IFwKLSAgICAgICAgcmV0dXJuOyBc
Ci0gICAgICB9IFwKLSAgICAgICooKnRvUCkrKyA9ICgobG8gPj4gNikgfCAoaGkgPDwgMikgfCAg
VVRGOF9jdmFsMik7IFwKLSAgICAgICooKnRvUCkrKyA9ICgobG8gJiAweDNmKSB8IDB4ODApOyBc
Ci0gICAgICBicmVhazsgXAotICAgIGRlZmF1bHQ6IFwKLSAgICAgIGlmICh0b0xpbSAtICAqdG9Q
IDwgMykgIHsgXAotICAgICAgICAqZnJvbVAgPSBmcm9tOyBcCi0gICAgICAgIHJldHVybjsgXAot
ICAgICAgfSBcCi0gICAgICAvKiAxNiBiaXRzIGRpdmlkZWQgNCwgNiwgNiBhbW9uZ3N0IDMgYnl0
ZXMgKi8gXAotICAgICAgKigqdG9QKSsrID0gKChoaSA+PiA0KSB8IFVURjhfY3ZhbDMpOyBcCi0g
ICAgICAqKCp0b1ApKysgPSAoKChoaSAmIDB4ZikgPDwgMikgfCAobG8gPj4gNikgfCAweDgwKTsg
XAotICAgICAgKigqdG9QKSsrID0gKChsbyAmIDB4M2YpIHwgMHg4MCk7IFwKLSAgICAgIGJyZWFr
OyBcCi0gICAgY2FzZSAweEQ4OiBjYXNlIDB4RDk6IGNhc2UgMHhEQTogY2FzZSAweERCOiBcCi0g
ICAgICBpZiAodG9MaW0gLSAgKnRvUCA8IDQpIHsgXAotICAgICAgICAqZnJvbVAgPSBmcm9tOyBc
Ci0gICAgICAgIHJldHVybjsgXAotICAgICAgfSBcCi0gICAgICBwbGFuZSA9ICgoKGhpICYgMHgz
KSA8PCAyKSB8ICgobG8gPj4gNikgJiAweDMpKSArIDE7IFwKLSAgICAgICooKnRvUCkrKyA9ICgo
cGxhbmUgPj4gMikgfCBVVEY4X2N2YWw0KTsgXAotICAgICAgKigqdG9QKSsrID0gKCgobG8gPj4g
MikgJiAweEYpIHwgKChwbGFuZSAmIDB4MykgPDwgNCkgfCAweDgwKTsgXAotICAgICAgZnJvbSAr
PSAyOyBcCi0gICAgICBsbzIgPSBHRVRfTE8oZnJvbSk7IFwKLSAgICAgICooKnRvUCkrKyA9ICgo
KGxvICYgMHgzKSA8PCA0KSBcCi0gICAgICAgICAgICAgICAgICAgfCAoKEdFVF9ISShmcm9tKSAm
IDB4MykgPDwgMikgXAotICAgICAgICAgICAgICAgICAgIHwgKGxvMiA+PiA2KSBcCi0gICAgICAg
ICAgICAgICAgICAgfCAweDgwKTsgXAotICAgICAgKigqdG9QKSsrID0gKChsbzIgJiAweDNmKSB8
IDB4ODApOyBcCi0gICAgICBicmVhazsgXAotICAgIH0gXAotICB9IFwKLSAgKmZyb21QID0gZnJv
bTsgXAotfQotCi0jZGVmaW5lIERFRklORV9VVEYxNl9UT19VVEYxNihFKSBcCi1zdGF0aWMgdm9p
ZCAgUFRSQ0FMTCBcCi1FICMjIHRvVXRmMTYoY29uc3QgRU5DT0RJTkcgKmVuYywgXAotICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKipmcm9tUCwgY29uc3QgY2hhciAqZnJvbUxpbSwgXAotICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0ICoqdG9QLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqdG9MaW0p
IFwKLXsgXAotICAvKiBBdm9pZCBjb3B5aW5nIGZpcnN0IGhhbGYgb25seSBvZiBzdXJyb2dhdGUg
Ki8gXAotICBpZiAoZnJvbUxpbSAtICpmcm9tUCA+ICgodG9MaW0gLSAqdG9QKSA8PCAxKSBcCi0g
ICAgICAmJiAoR0VUX0hJKGZyb21MaW0gLSAyKSAmIDB4RjgpID09IDB4RDgpIFwKLSAgICBmcm9t
TGltIC09IDI7IFwKLSAgZm9yICg7ICpmcm9tUCAhPSBmcm9tTGltICYmICp0b1AgIT0gdG9MaW07
ICpmcm9tUCArPSAyKSBcCi0gICAgKigqdG9QKSsrID0gKEdFVF9ISSgqZnJvbVApIDw8IDgpIHwg
R0VUX0xPKCpmcm9tUCk7IFwKLX0KLQotI2RlZmluZSBTRVQyKHB0ciwgY2gpIFwKLSAgKCgocHRy
KVswXSA9ICgoY2gpICYgMHhmZikpLCAoKHB0cilbMV0gPSAoKGNoKSA+PiA4KSkpCi0jZGVmaW5l
IEdFVF9MTyhwdHIpICgodW5zaWduZWQgY2hhcikocHRyKVswXSkKLSNkZWZpbmUgR0VUX0hJKHB0
cikgKCh1bnNpZ25lZCBjaGFyKShwdHIpWzFdKQotCi1ERUZJTkVfVVRGMTZfVE9fVVRGOChsaXR0
bGUyXykKLURFRklORV9VVEYxNl9UT19VVEYxNihsaXR0bGUyXykKLQotI3VuZGVmIFNFVDIKLSN1
bmRlZiBHRVRfTE8KLSN1bmRlZiBHRVRfSEkKLQotI2RlZmluZSBTRVQyKHB0ciwgY2gpIFwKLSAg
KCgocHRyKVswXSA9ICgoY2gpID4+IDgpKSwgKChwdHIpWzFdID0gKChjaCkgJiAweEZGKSkpCi0j
ZGVmaW5lIEdFVF9MTyhwdHIpICgodW5zaWduZWQgY2hhcikocHRyKVsxXSkKLSNkZWZpbmUgR0VU
X0hJKHB0cikgKCh1bnNpZ25lZCBjaGFyKShwdHIpWzBdKQotCi1ERUZJTkVfVVRGMTZfVE9fVVRG
OChiaWcyXykKLURFRklORV9VVEYxNl9UT19VVEYxNihiaWcyXykKLQotI3VuZGVmIFNFVDIKLSN1
bmRlZiBHRVRfTE8KLSN1bmRlZiBHRVRfSEkKLQotI2RlZmluZSBMSVRUTEUyX0JZVEVfVFlQRShl
bmMsIHApIFwKLSAoKHApWzFdID09IDAgXAotICA/ICgoc3RydWN0IG5vcm1hbF9lbmNvZGluZyAq
KShlbmMpKS0+dHlwZVsodW5zaWduZWQgY2hhcikqKHApXSBcCi0gIDogdW5pY29kZV9ieXRlX3R5
cGUoKHApWzFdLCAocClbMF0pKQotI2RlZmluZSBMSVRUTEUyX0JZVEVfVE9fQVNDSUkoZW5jLCBw
KSAoKHApWzFdID09IDAgPyAocClbMF0gOiAtMSkKLSNkZWZpbmUgTElUVExFMl9DSEFSX01BVENI
RVMoZW5jLCBwLCBjKSAoKHApWzFdID09IDAgJiYgKHApWzBdID09IGMpCi0jZGVmaW5lIExJVFRM
RTJfSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApIFwKLSAgVUNTMl9HRVRfTkFNSU5HKG5hbWVQ
YWdlcywgKHVuc2lnbmVkIGNoYXIpcFsxXSwgKHVuc2lnbmVkIGNoYXIpcFswXSkKLSNkZWZpbmUg
TElUVExFMl9JU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKSBcCi0gIFVDUzJfR0VUX05BTUlO
RyhubXN0cnRQYWdlcywgKHVuc2lnbmVkIGNoYXIpcFsxXSwgKHVuc2lnbmVkIGNoYXIpcFswXSkK
LQotI2lmZGVmIFhNTF9NSU5fU0laRQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi1saXR0bGUy
X2J5dGVUeXBlKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnApCi17Ci0gIHJldHVy
biBMSVRUTEUyX0JZVEVfVFlQRShlbmMsIHApOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxM
Ci1saXR0bGUyX2J5dGVUb0FzY2lpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnAp
Ci17Ci0gIHJldHVybiBMSVRUTEUyX0JZVEVfVE9fQVNDSUkoZW5jLCBwKTsKLX0KLQotc3RhdGlj
IGludCBQVFJDQUxMCi1saXR0bGUyX2NoYXJNYXRjaGVzKGNvbnN0IEVOQ09ESU5HICplbmMsIGNv
bnN0IGNoYXIgKnAsIGludCBjKQotewotICByZXR1cm4gTElUVExFMl9DSEFSX01BVENIRVMoZW5j
LCBwLCBjKTsKLX0KLQotc3RhdGljIGludCBQVFJGQVNUQ0FMTAotbGl0dGxlMl9pc05hbWVNaW4o
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAgcmV0dXJuIExJVFRMRTJf
SVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxM
Ci1saXR0bGUyX2lzTm1zdHJ0TWluKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnAp
Ci17Ci0gIHJldHVybiBMSVRUTEUyX0lTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHApOwotfQot
Ci0jdW5kZWYgVlRBQkxFCi0jZGVmaW5lIFZUQUJMRSBWVEFCTEUxLCBsaXR0bGUyX3RvVXRmOCwg
bGl0dGxlMl90b1V0ZjE2Ci0KLSNlbHNlIC8qIG5vdCBYTUxfTUlOX1NJWkUgKi8KLQotI3VuZGVm
IFBSRUZJWAotI2RlZmluZSBQUkVGSVgoaWRlbnQpIGxpdHRsZTJfICMjIGlkZW50Ci0jZGVmaW5l
IE1JTkJQQyhlbmMpIDIKLS8qIENIQVJfTUFUQ0hFUyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgTUlO
QlBDIGJ5dGVzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgQllURV9UWVBFKGVuYywgcCkgTElUVExF
Ml9CWVRFX1RZUEUoZW5jLCBwKQotI2RlZmluZSBCWVRFX1RPX0FTQ0lJKGVuYywgcCkgTElUVExF
Ml9CWVRFX1RPX0FTQ0lJKGVuYywgcCkKLSNkZWZpbmUgQ0hBUl9NQVRDSEVTKGVuYywgcCwgYykg
TElUVExFMl9DSEFSX01BVENIRVMoZW5jLCBwLCBjKQotI2RlZmluZSBJU19OQU1FX0NIQVIoZW5j
LCBwLCBuKSAwCi0jZGVmaW5lIElTX05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwKSBMSVRUTEUyX0lT
X05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwKQotI2RlZmluZSBJU19OTVNUUlRfQ0hBUihlbmMsIHAs
IG4pICgwKQotI2RlZmluZSBJU19OTVNUUlRfQ0hBUl9NSU5CUEMoZW5jLCBwKSBMSVRUTEUyX0lT
X05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHApCi0KLSNkZWZpbmUgWE1MX1RPS19JTVBMX0MKLSNp
bmNsdWRlICJ4bWx0b2tfaW1wbC5jIgotI3VuZGVmIFhNTF9UT0tfSU1QTF9DCi0KLSN1bmRlZiBN
SU5CUEMKLSN1bmRlZiBCWVRFX1RZUEUKLSN1bmRlZiBCWVRFX1RPX0FTQ0lJCi0jdW5kZWYgQ0hB
Ul9NQVRDSEVTCi0jdW5kZWYgSVNfTkFNRV9DSEFSCi0jdW5kZWYgSVNfTkFNRV9DSEFSX01JTkJQ
QwotI3VuZGVmIElTX05NU1RSVF9DSEFSCi0jdW5kZWYgSVNfTk1TVFJUX0NIQVJfTUlOQlBDCi0j
dW5kZWYgSVNfSU5WQUxJRF9DSEFSCi0KLSNlbmRpZiAvKiBub3QgWE1MX01JTl9TSVpFICovCi0K
LSNpZmRlZiBYTUxfTlMKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBub3JtYWxfZW5jb2RpbmcgbGl0
dGxlMl9lbmNvZGluZ19ucyA9IHsKLSAgeyBWVEFCTEUsIDIsIDAsCi0jaWYgQllURU9SREVSID09
IDEyMzQKLSAgICAxCi0jZWxzZQotICAgIDAKLSNlbmRpZgotICB9LAotICB7Ci0jaW5jbHVkZSAi
YXNjaWl0YWIuaCIKLSNpbmNsdWRlICJsYXRpbjF0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRB
QkxFKGxpdHRsZTJfKQotfTsKLQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFs
X2VuY29kaW5nIGxpdHRsZTJfZW5jb2RpbmcgPSB7Ci0gIHsgVlRBQkxFLCAyLCAwLAotI2lmIEJZ
VEVPUkRFUiA9PSAxMjM0Ci0gICAgMQotI2Vsc2UKLSAgICAwCi0jZW5kaWYKLSAgfSwKLSAgewot
I2RlZmluZSBCVF9DT0xPTiBCVF9OTVNUUlQKLSNpbmNsdWRlICJhc2NpaXRhYi5oIgotI3VuZGVm
IEJUX0NPTE9OCi0jaW5jbHVkZSAibGF0aW4xdGFiLmgiCi0gIH0sCi0gIFNUQU5EQVJEX1ZUQUJM
RShsaXR0bGUyXykKLX07Ci0KLSNpZiBCWVRFT1JERVIgIT0gNDMyMQotCi0jaWZkZWYgWE1MX05T
Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIGludGVybmFsX2xpdHRsZTJf
ZW5jb2RpbmdfbnMgPSB7Ci0gIHsgVlRBQkxFLCAyLCAwLCAxIH0sCi0gIHsKLSNpbmNsdWRlICJp
YXNjaWl0YWIuaCIKLSNpbmNsdWRlICJsYXRpbjF0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRB
QkxFKGxpdHRsZTJfKQotfTsKLQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFs
X2VuY29kaW5nIGludGVybmFsX2xpdHRsZTJfZW5jb2RpbmcgPSB7Ci0gIHsgVlRBQkxFLCAyLCAw
LCAxIH0sCi0gIHsKLSNkZWZpbmUgQlRfQ09MT04gQlRfTk1TVFJUCi0jaW5jbHVkZSAiaWFzY2lp
dGFiLmgiCi0jdW5kZWYgQlRfQ09MT04KLSNpbmNsdWRlICJsYXRpbjF0YWIuaCIKLSAgfSwKLSAg
U1RBTkRBUkRfVlRBQkxFKGxpdHRsZTJfKQotfTsKLQotI2VuZGlmCi0KLQotI2RlZmluZSBCSUcy
X0JZVEVfVFlQRShlbmMsIHApIFwKLSAoKHApWzBdID09IDAgXAotICA/ICgoc3RydWN0IG5vcm1h
bF9lbmNvZGluZyAqKShlbmMpKS0+dHlwZVsodW5zaWduZWQgY2hhcikocClbMV1dIFwKLSAgOiB1
bmljb2RlX2J5dGVfdHlwZSgocClbMF0sIChwKVsxXSkpCi0jZGVmaW5lIEJJRzJfQllURV9UT19B
U0NJSShlbmMsIHApICgocClbMF0gPT0gMCA/IChwKVsxXSA6IC0xKQotI2RlZmluZSBCSUcyX0NI
QVJfTUFUQ0hFUyhlbmMsIHAsIGMpICgocClbMF0gPT0gMCAmJiAocClbMV0gPT0gYykKLSNkZWZp
bmUgQklHMl9JU19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcCkgXAotICBVQ1MyX0dFVF9OQU1JTkco
bmFtZVBhZ2VzLCAodW5zaWduZWQgY2hhcilwWzBdLCAodW5zaWduZWQgY2hhcilwWzFdKQotI2Rl
ZmluZSBCSUcyX0lTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHApIFwKLSAgVUNTMl9HRVRfTkFN
SU5HKG5tc3RydFBhZ2VzLCAodW5zaWduZWQgY2hhcilwWzBdLCAodW5zaWduZWQgY2hhcilwWzFd
KQotCi0jaWZkZWYgWE1MX01JTl9TSVpFCi0KLXN0YXRpYyBpbnQgUFRSRkFTVENBTEwKLWJpZzJf
Ynl0ZVR5cGUoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAgcmV0dXJu
IEJJRzJfQllURV9UWVBFKGVuYywgcCk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSRkFTVENBTEwKLWJp
ZzJfYnl0ZVRvQXNjaWkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAg
cmV0dXJuIEJJRzJfQllURV9UT19BU0NJSShlbmMsIHApOwotfQotCi1zdGF0aWMgaW50IFBUUkNB
TEwKLWJpZzJfY2hhck1hdGNoZXMoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCwg
aW50IGMpCi17Ci0gIHJldHVybiBCSUcyX0NIQVJfTUFUQ0hFUyhlbmMsIHAsIGMpOwotfQotCi1z
dGF0aWMgaW50IFBUUkZBU1RDQUxMCi1iaWcyX2lzTmFtZU1pbihjb25zdCBFTkNPRElORyAqZW5j
LCBjb25zdCBjaGFyICpwKQotewotICByZXR1cm4gQklHMl9JU19OQU1FX0NIQVJfTUlOQlBDKGVu
YywgcCk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSRkFTVENBTEwKLWJpZzJfaXNObXN0cnRNaW4oY29u
c3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkKLXsKLSAgcmV0dXJuIEJJRzJfSVNfTk1T
VFJUX0NIQVJfTUlOQlBDKGVuYywgcCk7Ci19Ci0KLSN1bmRlZiBWVEFCTEUKLSNkZWZpbmUgVlRB
QkxFIFZUQUJMRTEsIGJpZzJfdG9VdGY4LCBiaWcyX3RvVXRmMTYKLQotI2Vsc2UgLyogbm90IFhN
TF9NSU5fU0laRSAqLwotCi0jdW5kZWYgUFJFRklYCi0jZGVmaW5lIFBSRUZJWChpZGVudCkgYmln
Ml8gIyMgaWRlbnQKLSNkZWZpbmUgTUlOQlBDKGVuYykgMgotLyogQ0hBUl9NQVRDSEVTIGlzIGd1
YXJhbnRlZWQgdG8gaGF2ZSBNSU5CUEMgYnl0ZXMgYXZhaWxhYmxlLiAqLwotI2RlZmluZSBCWVRF
X1RZUEUoZW5jLCBwKSBCSUcyX0JZVEVfVFlQRShlbmMsIHApCi0jZGVmaW5lIEJZVEVfVE9fQVND
SUkoZW5jLCBwKSBCSUcyX0JZVEVfVE9fQVNDSUkoZW5jLCBwKQotI2RlZmluZSBDSEFSX01BVENI
RVMoZW5jLCBwLCBjKSBCSUcyX0NIQVJfTUFUQ0hFUyhlbmMsIHAsIGMpCi0jZGVmaW5lIElTX05B
TUVfQ0hBUihlbmMsIHAsIG4pIDAKLSNkZWZpbmUgSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHAp
IEJJRzJfSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHApCi0jZGVmaW5lIElTX05NU1RSVF9DSEFS
KGVuYywgcCwgbikgKDApCi0jZGVmaW5lIElTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHApIEJJ
RzJfSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcCkKLQotI2RlZmluZSBYTUxfVE9LX0lNUExf
QwotI2luY2x1ZGUgInhtbHRva19pbXBsLmMiCi0jdW5kZWYgWE1MX1RPS19JTVBMX0MKLQotI3Vu
ZGVmIE1JTkJQQwotI3VuZGVmIEJZVEVfVFlQRQotI3VuZGVmIEJZVEVfVE9fQVNDSUkKLSN1bmRl
ZiBDSEFSX01BVENIRVMKLSN1bmRlZiBJU19OQU1FX0NIQVIKLSN1bmRlZiBJU19OQU1FX0NIQVJf
TUlOQlBDCi0jdW5kZWYgSVNfTk1TVFJUX0NIQVIKLSN1bmRlZiBJU19OTVNUUlRfQ0hBUl9NSU5C
UEMKLSN1bmRlZiBJU19JTlZBTElEX0NIQVIKLQotI2VuZGlmIC8qIG5vdCBYTUxfTUlOX1NJWkUg
Ki8KLQotI2lmZGVmIFhNTF9OUwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9lbmNvZGlu
ZyBiaWcyX2VuY29kaW5nX25zID0gewotICB7IFZUQUJMRSwgMiwgMCwKLSNpZiBCWVRFT1JERVIg
PT0gNDMyMQotICAxCi0jZWxzZQotICAwCi0jZW5kaWYKLSAgfSwKLSAgewotI2luY2x1ZGUgImFz
Y2lpdGFiLmgiCi0jaW5jbHVkZSAibGF0aW4xdGFiLmgiCi0gIH0sCi0gIFNUQU5EQVJEX1ZUQUJM
RShiaWcyXykKLX07Ci0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5vcm1hbF9lbmNv
ZGluZyBiaWcyX2VuY29kaW5nID0gewotICB7IFZUQUJMRSwgMiwgMCwKLSNpZiBCWVRFT1JERVIg
PT0gNDMyMQotICAxCi0jZWxzZQotICAwCi0jZW5kaWYKLSAgfSwKLSAgewotI2RlZmluZSBCVF9D
T0xPTiBCVF9OTVNUUlQKLSNpbmNsdWRlICJhc2NpaXRhYi5oIgotI3VuZGVmIEJUX0NPTE9OCi0j
aW5jbHVkZSAibGF0aW4xdGFiLmgiCi0gIH0sCi0gIFNUQU5EQVJEX1ZUQUJMRShiaWcyXykKLX07
Ci0KLSNpZiBCWVRFT1JERVIgIT0gMTIzNAotCi0jaWZkZWYgWE1MX05TCi0KLXN0YXRpYyBjb25z
dCBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIGludGVybmFsX2JpZzJfZW5jb2RpbmdfbnMgPSB7Ci0g
IHsgVlRBQkxFLCAyLCAwLCAxIH0sCi0gIHsKLSNpbmNsdWRlICJpYXNjaWl0YWIuaCIKLSNpbmNs
dWRlICJsYXRpbjF0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRBQkxFKGJpZzJfKQotfTsKLQot
I2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9ybWFsX2VuY29kaW5nIGludGVybmFsX2Jp
ZzJfZW5jb2RpbmcgPSB7Ci0gIHsgVlRBQkxFLCAyLCAwLCAxIH0sCi0gIHsKLSNkZWZpbmUgQlRf
Q09MT04gQlRfTk1TVFJUCi0jaW5jbHVkZSAiaWFzY2lpdGFiLmgiCi0jdW5kZWYgQlRfQ09MT04K
LSNpbmNsdWRlICJsYXRpbjF0YWIuaCIKLSAgfSwKLSAgU1RBTkRBUkRfVlRBQkxFKGJpZzJfKQot
fTsKLQotI2VuZGlmCi0KLSN1bmRlZiBQUkVGSVgKLQotc3RhdGljIGludCBGQVNUQ0FMTAotc3Ry
ZXFjaShjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCi17Ci0gIGZvciAoOzspIHsKLSAg
ICBjaGFyIGMxID0gKnMxKys7Ci0gICAgY2hhciBjMiA9ICpzMisrOwotICAgIGlmIChBU0NJSV9h
IDw9IGMxICYmIGMxIDw9IEFTQ0lJX3opCi0gICAgICBjMSArPSBBU0NJSV9BIC0gQVNDSUlfYTsK
LSAgICBpZiAoQVNDSUlfYSA8PSBjMiAmJiBjMiA8PSBBU0NJSV96KQotICAgICAgYzIgKz0gQVND
SUlfQSAtIEFTQ0lJX2E7Ci0gICAgaWYgKGMxICE9IGMyKQotICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKCFjMSkKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiAxOwotfQotCi1zdGF0aWMgdm9p
ZCBQVFJDQUxMCi1pbml0VXBkYXRlUG9zaXRpb24oY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcHRyLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgUE9TSVRJT04g
KnBvcykKLXsKLSAgbm9ybWFsX3VwZGF0ZVBvc2l0aW9uKCZ1dGY4X2VuY29kaW5nLmVuYywgcHRy
LCBlbmQsIHBvcyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXRvQXNjaWkoY29uc3QgRU5DT0RJTkcgKmVu
YywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQpCi17Ci0gIGNoYXIgYnVmWzFdOwot
ICBjaGFyICpwID0gYnVmOwotICBYbWxVdGY4Q29udmVydChlbmMsICZwdHIsIGVuZCwgJnAsIHAg
KyAxKTsKLSAgaWYgKHAgPT0gYnVmKQotICAgIHJldHVybiAtMTsKLSAgZWxzZQotICAgIHJldHVy
biBidWZbMF07Ci19Ci0KLXN0YXRpYyBpbnQgRkFTVENBTEwKLWlzU3BhY2UoaW50IGMpCi17Ci0g
IHN3aXRjaCAoYykgewotICBjYXNlIDB4MjA6Ci0gIGNhc2UgMHhEOgotICBjYXNlIDB4QToKLSAg
Y2FzZSAweDk6Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIFJldHVy
biAxIGlmIHRoZXJlJ3MganVzdCBvcHRpb25hbCB3aGl0ZSBzcGFjZSBvciB0aGVyZSdzIGFuIFMK
LSAgIGZvbGxvd2VkIGJ5IG5hbWU9dmFsLgotKi8KLXN0YXRpYyBpbnQKLXBhcnNlUHNldWRvQXR0
cmlidXRlKGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmFtZVB0ciwKLSAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKipuYW1lRW5kUHRyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqKnZhbFB0ciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRy
KQotewotICBpbnQgYzsKLSAgY2hhciBvcGVuOwotICBpZiAocHRyID09IGVuZCkgewotICAgICpu
YW1lUHRyID0gTlVMTDsKLSAgICByZXR1cm4gMTsKLSAgfQotICBpZiAoIWlzU3BhY2UodG9Bc2Np
aShlbmMsIHB0ciwgZW5kKSkpIHsKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4g
MDsKLSAgfQotICBkbyB7Ci0gICAgcHRyICs9IGVuYy0+bWluQnl0ZXNQZXJDaGFyOwotICB9IHdo
aWxlIChpc1NwYWNlKHRvQXNjaWkoZW5jLCBwdHIsIGVuZCkpKTsKLSAgaWYgKHB0ciA9PSBlbmQp
IHsKLSAgICAqbmFtZVB0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgKm5hbWVQdHIg
PSBwdHI7Ci0gIGZvciAoOzspIHsKLSAgICBjID0gdG9Bc2NpaShlbmMsIHB0ciwgZW5kKTsKLSAg
ICBpZiAoYyA9PSAtMSkgewotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgaWYgKGMgPT0gQVNDSUlfRVFVQUxTKSB7Ci0gICAgICAqbmFtZUVuZFB0
ciA9IHB0cjsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaXNTcGFjZShjKSkgewotICAg
ICAgKm5hbWVFbmRQdHIgPSBwdHI7Ci0gICAgICBkbyB7Ci0gICAgICAgIHB0ciArPSBlbmMtPm1p
bkJ5dGVzUGVyQ2hhcjsKLSAgICAgIH0gd2hpbGUgKGlzU3BhY2UoYyA9IHRvQXNjaWkoZW5jLCBw
dHIsIGVuZCkpKTsKLSAgICAgIGlmIChjICE9IEFTQ0lJX0VRVUFMUykgewotICAgICAgICAqbmV4
dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gICAgcHRyICs9IGVuYy0+bWluQnl0ZXNQZXJDaGFyOwotICB9Ci0gIGlmIChwdHIg
PT0gKm5hbWVQdHIpIHsKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4gMDsKLSAg
fQotICBwdHIgKz0gZW5jLT5taW5CeXRlc1BlckNoYXI7Ci0gIGMgPSB0b0FzY2lpKGVuYywgcHRy
LCBlbmQpOwotICB3aGlsZSAoaXNTcGFjZShjKSkgewotICAgIHB0ciArPSBlbmMtPm1pbkJ5dGVz
UGVyQ2hhcjsKLSAgICBjID0gdG9Bc2NpaShlbmMsIHB0ciwgZW5kKTsKLSAgfQotICBpZiAoYyAh
PSBBU0NJSV9RVU9UICYmIGMgIT0gQVNDSUlfQVBPUykgewotICAgICpuZXh0VG9rUHRyID0gcHRy
OwotICAgIHJldHVybiAwOwotICB9Ci0gIG9wZW4gPSAoY2hhciljOwotICBwdHIgKz0gZW5jLT5t
aW5CeXRlc1BlckNoYXI7Ci0gICp2YWxQdHIgPSBwdHI7Ci0gIGZvciAoOzsgcHRyICs9IGVuYy0+
bWluQnl0ZXNQZXJDaGFyKSB7Ci0gICAgYyA9IHRvQXNjaWkoZW5jLCBwdHIsIGVuZCk7Ci0gICAg
aWYgKGMgPT0gb3BlbikKLSAgICAgIGJyZWFrOwotICAgIGlmICghKEFTQ0lJX2EgPD0gYyAmJiBj
IDw9IEFTQ0lJX3opCi0gICAgICAgICYmICEoQVNDSUlfQSA8PSBjICYmIGMgPD0gQVNDSUlfWikK
LSAgICAgICAgJiYgIShBU0NJSV8wIDw9IGMgJiYgYyA8PSBBU0NJSV85KQotICAgICAgICAmJiBj
ICE9IEFTQ0lJX1BFUklPRAotICAgICAgICAmJiBjICE9IEFTQ0lJX01JTlVTCi0gICAgICAgICYm
IGMgIT0gQVNDSUlfVU5ERVJTQ09SRSkgewotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLSAgKm5leHRUb2tQdHIgPSBwdHIgKyBlbmMtPm1pbkJ5
dGVzUGVyQ2hhcjsKLSAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIEtXX3ZlcnNp
b25bXSA9IHsKLSAgQVNDSUlfdiwgQVNDSUlfZSwgQVNDSUlfciwgQVNDSUlfcywgQVNDSUlfaSwg
QVNDSUlfbywgQVNDSUlfbiwgJ1wwJwotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgS1dfZW5jb2Rp
bmdbXSA9IHsKLSAgQVNDSUlfZSwgQVNDSUlfbiwgQVNDSUlfYywgQVNDSUlfbywgQVNDSUlfZCwg
QVNDSUlfaSwgQVNDSUlfbiwgQVNDSUlfZywgJ1wwJwotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIg
S1dfc3RhbmRhbG9uZVtdID0gewotICBBU0NJSV9zLCBBU0NJSV90LCBBU0NJSV9hLCBBU0NJSV9u
LCBBU0NJSV9kLCBBU0NJSV9hLCBBU0NJSV9sLCBBU0NJSV9vLAotICBBU0NJSV9uLCBBU0NJSV9l
LCAnXDAnCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciBLV195ZXNbXSA9IHsKLSAgQVNDSUlfeSwg
QVNDSUlfZSwgQVNDSUlfcywgICdcMCcKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIEtXX25vW10g
PSB7Ci0gIEFTQ0lJX24sIEFTQ0lJX28sICAnXDAnCi19OwotCi1zdGF0aWMgaW50Ci1kb1BhcnNl
WG1sRGVjbChjb25zdCBFTkNPRElORyAqKCplbmNvZGluZ0ZpbmRlcikoY29uc3QgRU5DT0RJTkcg
KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKSwKLSAgICAgICAgICAgICAgIGludCBpc0dlbmVyYWxUZXh0RW50aXR5
LAotICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKipiYWRQdHIsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICoq
dmVyc2lvblB0ciwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKip2ZXJzaW9uRW5kUHRyLAot
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmVuY29kaW5nTmFtZSwKLSAgICAgICAgICAgICAg
IGNvbnN0IEVOQ09ESU5HICoqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICBpbnQgKnN0YW5kYWxv
bmUpCi17Ci0gIGNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7Ci0gIGNvbnN0IGNoYXIgKm5hbWUgPSBO
VUxMOwotICBjb25zdCBjaGFyICpuYW1lRW5kID0gTlVMTDsKLSAgcHRyICs9IDUgKiBlbmMtPm1p
bkJ5dGVzUGVyQ2hhcjsKLSAgZW5kIC09IDIgKiBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKLSAgaWYg
KCFwYXJzZVBzZXVkb0F0dHJpYnV0ZShlbmMsIHB0ciwgZW5kLCAmbmFtZSwgJm5hbWVFbmQsICZ2
YWwsICZwdHIpCi0gICAgICB8fCAhbmFtZSkgewotICAgICpiYWRQdHIgPSBwdHI7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLSAgaWYgKCFYbWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgbmFtZSwgbmFtZUVu
ZCwgS1dfdmVyc2lvbikpIHsKLSAgICBpZiAoIWlzR2VuZXJhbFRleHRFbnRpdHkpIHsKLSAgICAg
ICpiYWRQdHIgPSBuYW1lOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0gIGVsc2Ugewot
ICAgIGlmICh2ZXJzaW9uUHRyKQotICAgICAgKnZlcnNpb25QdHIgPSB2YWw7Ci0gICAgaWYgKHZl
cnNpb25FbmRQdHIpCi0gICAgICAqdmVyc2lvbkVuZFB0ciA9IHB0cjsKLSAgICBpZiAoIXBhcnNl
UHNldWRvQXR0cmlidXRlKGVuYywgcHRyLCBlbmQsICZuYW1lLCAmbmFtZUVuZCwgJnZhbCwgJnB0
cikpIHsKLSAgICAgICpiYWRQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
aWYgKCFuYW1lKSB7Ci0gICAgICBpZiAoaXNHZW5lcmFsVGV4dEVudGl0eSkgewotICAgICAgICAv
KiBhIFRleHREZWNsIG11c3QgaGF2ZSBhbiBFbmNvZGluZ0RlY2wgKi8KLSAgICAgICAgKmJhZFB0
ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gMTsKLSAg
ICB9Ci0gIH0KLSAgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5jLCBuYW1lLCBuYW1lRW5kLCBL
V19lbmNvZGluZykpIHsKLSAgICBpbnQgYyA9IHRvQXNjaWkoZW5jLCB2YWwsIGVuZCk7Ci0gICAg
aWYgKCEoQVNDSUlfYSA8PSBjICYmIGMgPD0gQVNDSUlfeikgJiYgIShBU0NJSV9BIDw9IGMgJiYg
YyA8PSBBU0NJSV9aKSkgewotICAgICAgKmJhZFB0ciA9IHZhbDsKLSAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBpZiAoZW5jb2RpbmdOYW1lKQotICAgICAgKmVuY29kaW5nTmFtZSA9IHZhbDsK
LSAgICBpZiAoZW5jb2RpbmcpCi0gICAgICAqZW5jb2RpbmcgPSBlbmNvZGluZ0ZpbmRlcihlbmMs
IHZhbCwgcHRyIC0gZW5jLT5taW5CeXRlc1BlckNoYXIpOwotICAgIGlmICghcGFyc2VQc2V1ZG9B
dHRyaWJ1dGUoZW5jLCBwdHIsIGVuZCwgJm5hbWUsICZuYW1lRW5kLCAmdmFsLCAmcHRyKSkgewot
ICAgICAgKmJhZFB0ciA9IHB0cjsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIW5h
bWUpCi0gICAgICByZXR1cm4gMTsKLSAgfQotICBpZiAoIVhtbE5hbWVNYXRjaGVzQXNjaWkoZW5j
LCBuYW1lLCBuYW1lRW5kLCBLV19zdGFuZGFsb25lKQotICAgICAgfHwgaXNHZW5lcmFsVGV4dEVu
dGl0eSkgewotICAgICpiYWRQdHIgPSBuYW1lOwotICAgIHJldHVybiAwOwotICB9Ci0gIGlmIChY
bWxOYW1lTWF0Y2hlc0FzY2lpKGVuYywgdmFsLCBwdHIgLSBlbmMtPm1pbkJ5dGVzUGVyQ2hhciwg
S1dfeWVzKSkgewotICAgIGlmIChzdGFuZGFsb25lKQotICAgICAgKnN0YW5kYWxvbmUgPSAxOwot
ICB9Ci0gIGVsc2UgaWYgKFhtbE5hbWVNYXRjaGVzQXNjaWkoZW5jLCB2YWwsIHB0ciAtIGVuYy0+
bWluQnl0ZXNQZXJDaGFyLCBLV19ubykpIHsKLSAgICBpZiAoc3RhbmRhbG9uZSkKLSAgICAgICpz
dGFuZGFsb25lID0gMDsKLSAgfQotICBlbHNlIHsKLSAgICAqYmFkUHRyID0gdmFsOwotICAgIHJl
dHVybiAwOwotICB9Ci0gIHdoaWxlIChpc1NwYWNlKHRvQXNjaWkoZW5jLCBwdHIsIGVuZCkpKQot
ICAgIHB0ciArPSBlbmMtPm1pbkJ5dGVzUGVyQ2hhcjsKLSAgaWYgKHB0ciAhPSBlbmQpIHsKLSAg
ICAqYmFkUHRyID0gcHRyOwotICAgIHJldHVybiAwOwotICB9Ci0gIHJldHVybiAxOwotfQotCi1z
dGF0aWMgaW50IEZBU1RDQUxMCi1jaGVja0NoYXJSZWZOdW1iZXIoaW50IHJlc3VsdCkKLXsKLSAg
c3dpdGNoIChyZXN1bHQgPj4gOCkgewotICBjYXNlIDB4RDg6IGNhc2UgMHhEOTogY2FzZSAweERB
OiBjYXNlIDB4REI6Ci0gIGNhc2UgMHhEQzogY2FzZSAweEREOiBjYXNlIDB4REU6IGNhc2UgMHhE
RjoKLSAgICByZXR1cm4gLTE7Ci0gIGNhc2UgMDoKLSAgICBpZiAobGF0aW4xX2VuY29kaW5nLnR5
cGVbcmVzdWx0XSA9PSBCVF9OT05YTUwpCi0gICAgICByZXR1cm4gLTE7Ci0gICAgYnJlYWs7Ci0g
IGNhc2UgMHhGRjoKLSAgICBpZiAocmVzdWx0ID09IDB4RkZGRSB8fCByZXN1bHQgPT0gMHhGRkZG
KQotICAgICAgcmV0dXJuIC0xOwotICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWludCBGQVNUQ0FMTAotWG1sVXRmOEVuY29kZShpbnQgYywgY2hhciAqYnVmKQotewotICBl
bnVtIHsKLSAgICAvKiBtaW5OIGlzIG1pbmltdW0gbGVnYWwgcmVzdWx0aW5nIHZhbHVlIGZvciBO
IGJ5dGUgc2VxdWVuY2UgKi8KLSAgICBtaW4yID0gMHg4MCwKLSAgICBtaW4zID0gMHg4MDAsCi0g
ICAgbWluNCA9IDB4MTAwMDAKLSAgfTsKLQotICBpZiAoYyA8IDApCi0gICAgcmV0dXJuIDA7Ci0g
IGlmIChjIDwgbWluMikgewotICAgIGJ1ZlswXSA9IChjaGFyKShjIHwgVVRGOF9jdmFsMSk7Ci0g
ICAgcmV0dXJuIDE7Ci0gIH0KLSAgaWYgKGMgPCBtaW4zKSB7Ci0gICAgYnVmWzBdID0gKGNoYXIp
KChjID4+IDYpIHwgVVRGOF9jdmFsMik7Ci0gICAgYnVmWzFdID0gKGNoYXIpKChjICYgMHgzZikg
fCAweDgwKTsKLSAgICByZXR1cm4gMjsKLSAgfQotICBpZiAoYyA8IG1pbjQpIHsKLSAgICBidWZb
MF0gPSAoY2hhcikoKGMgPj4gMTIpIHwgVVRGOF9jdmFsMyk7Ci0gICAgYnVmWzFdID0gKGNoYXIp
KCgoYyA+PiA2KSAmIDB4M2YpIHwgMHg4MCk7Ci0gICAgYnVmWzJdID0gKGNoYXIpKChjICYgMHgz
ZikgfCAweDgwKTsKLSAgICByZXR1cm4gMzsKLSAgfQotICBpZiAoYyA8IDB4MTEwMDAwKSB7Ci0g
ICAgYnVmWzBdID0gKGNoYXIpKChjID4+IDE4KSB8IFVURjhfY3ZhbDQpOwotICAgIGJ1ZlsxXSA9
IChjaGFyKSgoKGMgPj4gMTIpICYgMHgzZikgfCAweDgwKTsKLSAgICBidWZbMl0gPSAoY2hhciko
KChjID4+IDYpICYgMHgzZikgfCAweDgwKTsKLSAgICBidWZbM10gPSAoY2hhcikoKGMgJiAweDNm
KSB8IDB4ODApOwotICAgIHJldHVybiA0OwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgRkFT
VENBTEwKLVhtbFV0ZjE2RW5jb2RlKGludCBjaGFyTnVtLCB1bnNpZ25lZCBzaG9ydCAqYnVmKQot
ewotICBpZiAoY2hhck51bSA8IDApCi0gICAgcmV0dXJuIDA7Ci0gIGlmIChjaGFyTnVtIDwgMHgx
MDAwMCkgewotICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBzaG9ydCljaGFyTnVtOwotICAgIHJldHVy
biAxOwotICB9Ci0gIGlmIChjaGFyTnVtIDwgMHgxMTAwMDApIHsKLSAgICBjaGFyTnVtIC09IDB4
MTAwMDA7Ci0gICAgYnVmWzBdID0gKHVuc2lnbmVkIHNob3J0KSgoY2hhck51bSA+PiAxMCkgKyAw
eEQ4MDApOwotICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBzaG9ydCkoKGNoYXJOdW0gJiAweDNGRikg
KyAweERDMDApOwotICAgIHJldHVybiAyOwotICB9Ci0gIHJldHVybiAwOwotfQotCi1zdHJ1Y3Qg
dW5rbm93bl9lbmNvZGluZyB7Ci0gIHN0cnVjdCBub3JtYWxfZW5jb2Rpbmcgbm9ybWFsOwotICBD
T05WRVJURVIgY29udmVydDsKLSAgdm9pZCAqdXNlckRhdGE7Ci0gIHVuc2lnbmVkIHNob3J0IHV0
ZjE2WzI1Nl07Ci0gIGNoYXIgdXRmOFsyNTZdWzRdOwotfTsKLQotI2RlZmluZSBBU19VTktOT1dO
X0VOQ09ESU5HKGVuYykgICgoY29uc3Qgc3RydWN0IHVua25vd25fZW5jb2RpbmcgKikgKGVuYykp
Ci0KLWludAotWG1sU2l6ZU9mVW5rbm93bkVuY29kaW5nKHZvaWQpCi17Ci0gIHJldHVybiBzaXpl
b2Yoc3RydWN0IHVua25vd25fZW5jb2RpbmcpOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxM
Ci11bmtub3duX2lzTmFtZShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwKQotewot
ICBjb25zdCBzdHJ1Y3QgdW5rbm93bl9lbmNvZGluZyAqdWVuYyA9IEFTX1VOS05PV05fRU5DT0RJ
TkcoZW5jKTsKLSAgaW50IGMgPSB1ZW5jLT5jb252ZXJ0KHVlbmMtPnVzZXJEYXRhLCBwKTsKLSAg
aWYgKGMgJiB+MHhGRkZGKQotICAgIHJldHVybiAwOwotICByZXR1cm4gVUNTMl9HRVRfTkFNSU5H
KG5hbWVQYWdlcywgYyA+PiA4LCBjICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSRkFTVENB
TEwKLXVua25vd25faXNObXN0cnQoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcCkK
LXsKLSAgY29uc3Qgc3RydWN0IHVua25vd25fZW5jb2RpbmcgKnVlbmMgPSBBU19VTktOT1dOX0VO
Q09ESU5HKGVuYyk7Ci0gIGludCBjID0gdWVuYy0+Y29udmVydCh1ZW5jLT51c2VyRGF0YSwgcCk7
Ci0gIGlmIChjICYgfjB4RkZGRikKLSAgICByZXR1cm4gMDsKLSAgcmV0dXJuIFVDUzJfR0VUX05B
TUlORyhubXN0cnRQYWdlcywgYyA+PiA4LCBjICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBpbnQgUFRS
RkFTVENBTEwKLXVua25vd25faXNJbnZhbGlkKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNo
YXIgKnApCi17Ci0gIGNvbnN0IHN0cnVjdCB1bmtub3duX2VuY29kaW5nICp1ZW5jID0gQVNfVU5L
Tk9XTl9FTkNPRElORyhlbmMpOwotICBpbnQgYyA9IHVlbmMtPmNvbnZlcnQodWVuYy0+dXNlckRh
dGEsIHApOwotICByZXR1cm4gKGMgJiB+MHhGRkZGKSB8fCBjaGVja0NoYXJSZWZOdW1iZXIoYykg
PCAwOwotfQotCi1zdGF0aWMgdm9pZCBQVFJDQUxMCi11bmtub3duX3RvVXRmOChjb25zdCBFTkNP
RElORyAqZW5jLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmZyb21QLCBjb25zdCBjaGFy
ICpmcm9tTGltLAotICAgICAgICAgICAgICAgY2hhciAqKnRvUCwgY29uc3QgY2hhciAqdG9MaW0p
Ci17Ci0gIGNvbnN0IHN0cnVjdCB1bmtub3duX2VuY29kaW5nICp1ZW5jID0gQVNfVU5LTk9XTl9F
TkNPRElORyhlbmMpOwotICBjaGFyIGJ1ZltYTUxfVVRGOF9FTkNPREVfTUFYXTsKLSAgZm9yICg7
OykgewotICAgIGNvbnN0IGNoYXIgKnV0Zjg7Ci0gICAgaW50IG47Ci0gICAgaWYgKCpmcm9tUCA9
PSBmcm9tTGltKQotICAgICAgYnJlYWs7Ci0gICAgdXRmOCA9IHVlbmMtPnV0ZjhbKHVuc2lnbmVk
IGNoYXIpKipmcm9tUF07Ci0gICAgbiA9ICp1dGY4Kys7Ci0gICAgaWYgKG4gPT0gMCkgewotICAg
ICAgaW50IGMgPSB1ZW5jLT5jb252ZXJ0KHVlbmMtPnVzZXJEYXRhLCAqZnJvbVApOwotICAgICAg
biA9IFhtbFV0ZjhFbmNvZGUoYywgYnVmKTsKLSAgICAgIGlmIChuID4gdG9MaW0gLSAqdG9QKQot
ICAgICAgICBicmVhazsKLSAgICAgIHV0ZjggPSBidWY7Ci0gICAgICAqZnJvbVAgKz0gKEFTX05P
Uk1BTF9FTkNPRElORyhlbmMpLT50eXBlWyh1bnNpZ25lZCBjaGFyKSoqZnJvbVBdCi0gICAgICAg
ICAgICAgICAgIC0gKEJUX0xFQUQyIC0gMikpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGlm
IChuID4gdG9MaW0gLSAqdG9QKQotICAgICAgICBicmVhazsKLSAgICAgICgqZnJvbVApKys7Ci0g
ICAgfQotICAgIGRvIHsKLSAgICAgICooKnRvUCkrKyA9ICp1dGY4Kys7Ci0gICAgfSB3aGlsZSAo
LS1uICE9IDApOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFBUUkNBTEwKLXVua25vd25fdG9VdGYx
Nihjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipmcm9t
UCwgY29uc3QgY2hhciAqZnJvbUxpbSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAq
KnRvUCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnRvTGltKQotewotICBjb25zdCBzdHJ1Y3QgdW5r
bm93bl9lbmNvZGluZyAqdWVuYyA9IEFTX1VOS05PV05fRU5DT0RJTkcoZW5jKTsKLSAgd2hpbGUg
KCpmcm9tUCAhPSBmcm9tTGltICYmICp0b1AgIT0gdG9MaW0pIHsKLSAgICB1bnNpZ25lZCBzaG9y
dCBjID0gdWVuYy0+dXRmMTZbKHVuc2lnbmVkIGNoYXIpKipmcm9tUF07Ci0gICAgaWYgKGMgPT0g
MCkgewotICAgICAgYyA9ICh1bnNpZ25lZCBzaG9ydCkKLSAgICAgICAgICB1ZW5jLT5jb252ZXJ0
KHVlbmMtPnVzZXJEYXRhLCAqZnJvbVApOwotICAgICAgKmZyb21QICs9IChBU19OT1JNQUxfRU5D
T0RJTkcoZW5jKS0+dHlwZVsodW5zaWduZWQgY2hhcikqKmZyb21QXQotICAgICAgICAgICAgICAg
ICAtIChCVF9MRUFEMiAtIDIpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgKCpmcm9tUCkrKzsK
LSAgICAqKCp0b1ApKysgPSBjOwotICB9Ci19Ci0KLUVOQ09ESU5HICoKLVhtbEluaXRVbmtub3du
RW5jb2Rpbmcodm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRhYmxlLAot
ICAgICAgICAgICAgICAgICAgICAgICBDT05WRVJURVIgY29udmVydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqdXNlckRhdGEpCi17Ci0gIGludCBpOwotICBzdHJ1Y3QgdW5rbm93bl9l
bmNvZGluZyAqZSA9IChzdHJ1Y3QgdW5rbm93bl9lbmNvZGluZyAqKW1lbTsKLSAgZm9yIChpID0g
MDsgaSA8IChpbnQpc2l6ZW9mKHN0cnVjdCBub3JtYWxfZW5jb2RpbmcpOyBpKyspCi0gICAgKChj
aGFyICopbWVtKVtpXSA9ICgoY2hhciAqKSZsYXRpbjFfZW5jb2RpbmcpW2ldOwotICBmb3IgKGkg
PSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaWYgKGxhdGluMV9lbmNvZGluZy50eXBlW2ldICE9IEJU
X09USEVSCi0gICAgICAgICYmIGxhdGluMV9lbmNvZGluZy50eXBlW2ldICE9IEJUX05PTlhNTAot
ICAgICAgICAmJiB0YWJsZVtpXSAhPSBpKQotICAgICAgcmV0dXJuIDA7Ci0gIGZvciAoaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotICAgIGludCBjID0gdGFibGVbaV07Ci0gICAgaWYgKGMgPT0gLTEp
IHsKLSAgICAgIGUtPm5vcm1hbC50eXBlW2ldID0gQlRfTUFMRk9STTsKLSAgICAgIC8qIFRoaXMg
c2hvdWxkbid0IHJlYWxseSBnZXQgdXNlZC4gKi8KLSAgICAgIGUtPnV0ZjE2W2ldID0gMHhGRkZG
OwotICAgICAgZS0+dXRmOFtpXVswXSA9IDE7Ci0gICAgICBlLT51dGY4W2ldWzFdID0gMDsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoYyA8IDApIHsKLSAgICAgIGlmIChjIDwgLTQpCi0gICAgICAgIHJl
dHVybiAwOwotICAgICAgZS0+bm9ybWFsLnR5cGVbaV0gPSAodW5zaWduZWQgY2hhcikoQlRfTEVB
RDIgLSAoYyArIDIpKTsKLSAgICAgIGUtPnV0ZjhbaV1bMF0gPSAwOwotICAgICAgZS0+dXRmMTZb
aV0gPSAwOwotICAgIH0KLSAgICBlbHNlIGlmIChjIDwgMHg4MCkgewotICAgICAgaWYgKGxhdGlu
MV9lbmNvZGluZy50eXBlW2NdICE9IEJUX09USEVSCi0gICAgICAgICAgJiYgbGF0aW4xX2VuY29k
aW5nLnR5cGVbY10gIT0gQlRfTk9OWE1MCi0gICAgICAgICAgJiYgYyAhPSBpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgIGUtPm5vcm1hbC50eXBlW2ldID0gbGF0aW4xX2VuY29kaW5nLnR5cGVb
Y107Ci0gICAgICBlLT51dGY4W2ldWzBdID0gMTsKLSAgICAgIGUtPnV0ZjhbaV1bMV0gPSAoY2hh
ciljOwotICAgICAgZS0+dXRmMTZbaV0gPSAodW5zaWduZWQgc2hvcnQpKGMgPT0gMCA/IDB4RkZG
RiA6IGMpOwotICAgIH0KLSAgICBlbHNlIGlmIChjaGVja0NoYXJSZWZOdW1iZXIoYykgPCAwKSB7
Ci0gICAgICBlLT5ub3JtYWwudHlwZVtpXSA9IEJUX05PTlhNTDsKLSAgICAgIC8qIFRoaXMgc2hv
dWxkbid0IHJlYWxseSBnZXQgdXNlZC4gKi8KLSAgICAgIGUtPnV0ZjE2W2ldID0gMHhGRkZGOwot
ICAgICAgZS0+dXRmOFtpXVswXSA9IDE7Ci0gICAgICBlLT51dGY4W2ldWzFdID0gMDsKLSAgICB9
Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAoYyA+IDB4RkZGRikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICBpZiAoVUNTMl9HRVRfTkFNSU5HKG5tc3RydFBhZ2VzLCBjID4+IDgsIGMgJiAweGZmKSkK
LSAgICAgICAgZS0+bm9ybWFsLnR5cGVbaV0gPSBCVF9OTVNUUlQ7Ci0gICAgICBlbHNlIGlmIChV
Q1MyX0dFVF9OQU1JTkcobmFtZVBhZ2VzLCBjID4+IDgsIGMgJiAweGZmKSkKLSAgICAgICAgZS0+
bm9ybWFsLnR5cGVbaV0gPSBCVF9OQU1FOwotICAgICAgZWxzZQotICAgICAgICBlLT5ub3JtYWwu
dHlwZVtpXSA9IEJUX09USEVSOwotICAgICAgZS0+dXRmOFtpXVswXSA9IChjaGFyKVhtbFV0ZjhF
bmNvZGUoYywgZS0+dXRmOFtpXSArIDEpOwotICAgICAgZS0+dXRmMTZbaV0gPSAodW5zaWduZWQg
c2hvcnQpYzsKLSAgICB9Ci0gIH0KLSAgZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKLSAgZS0+Y29u
dmVydCA9IGNvbnZlcnQ7Ci0gIGlmIChjb252ZXJ0KSB7Ci0gICAgZS0+bm9ybWFsLmlzTmFtZTIg
PSB1bmtub3duX2lzTmFtZTsKLSAgICBlLT5ub3JtYWwuaXNOYW1lMyA9IHVua25vd25faXNOYW1l
OwotICAgIGUtPm5vcm1hbC5pc05hbWU0ID0gdW5rbm93bl9pc05hbWU7Ci0gICAgZS0+bm9ybWFs
LmlzTm1zdHJ0MiA9IHVua25vd25faXNObXN0cnQ7Ci0gICAgZS0+bm9ybWFsLmlzTm1zdHJ0MyA9
IHVua25vd25faXNObXN0cnQ7Ci0gICAgZS0+bm9ybWFsLmlzTm1zdHJ0NCA9IHVua25vd25faXNO
bXN0cnQ7Ci0gICAgZS0+bm9ybWFsLmlzSW52YWxpZDIgPSB1bmtub3duX2lzSW52YWxpZDsKLSAg
ICBlLT5ub3JtYWwuaXNJbnZhbGlkMyA9IHVua25vd25faXNJbnZhbGlkOwotICAgIGUtPm5vcm1h
bC5pc0ludmFsaWQ0ID0gdW5rbm93bl9pc0ludmFsaWQ7Ci0gIH0KLSAgZS0+bm9ybWFsLmVuYy51
dGY4Q29udmVydCA9IHVua25vd25fdG9VdGY4OwotICBlLT5ub3JtYWwuZW5jLnV0ZjE2Q29udmVy
dCA9IHVua25vd25fdG9VdGYxNjsKLSAgcmV0dXJuICYoZS0+bm9ybWFsLmVuYyk7Ci19Ci0KLS8q
IElmIHRoaXMgZW51bWVyYXRpb24gaXMgY2hhbmdlZCwgZ2V0RW5jb2RpbmdJbmRleCBhbmQgZW5j
b2RpbmdzCi1tdXN0IGFsc28gYmUgY2hhbmdlZC4gKi8KLWVudW0gewotICBVTktOT1dOX0VOQyA9
IC0xLAotICBJU09fODg1OV8xX0VOQyA9IDAsCi0gIFVTX0FTQ0lJX0VOQywKLSAgVVRGXzhfRU5D
LAotICBVVEZfMTZfRU5DLAotICBVVEZfMTZCRV9FTkMsCi0gIFVURl8xNkxFX0VOQywKLSAgLyog
bXVzdCBtYXRjaCBlbmNvZGluZ05hbWVzIHVwIHRvIGhlcmUgKi8KLSAgTk9fRU5DCi19OwotCi1z
dGF0aWMgY29uc3QgY2hhciBLV19JU09fODg1OV8xW10gPSB7Ci0gIEFTQ0lJX0ksIEFTQ0lJX1Ms
IEFTQ0lJX08sIEFTQ0lJX01JTlVTLCBBU0NJSV84LCBBU0NJSV84LCBBU0NJSV81LCBBU0NJSV85
LAotICBBU0NJSV9NSU5VUywgQVNDSUlfMSwgJ1wwJwotfTsKLXN0YXRpYyBjb25zdCBjaGFyIEtX
X1VTX0FTQ0lJW10gPSB7Ci0gIEFTQ0lJX1UsIEFTQ0lJX1MsIEFTQ0lJX01JTlVTLCBBU0NJSV9B
LCBBU0NJSV9TLCBBU0NJSV9DLCBBU0NJSV9JLCBBU0NJSV9JLAotICAnXDAnCi19Owotc3RhdGlj
IGNvbnN0IGNoYXIgS1dfVVRGXzhbXSA9ICB7Ci0gIEFTQ0lJX1UsIEFTQ0lJX1QsIEFTQ0lJX0Ys
IEFTQ0lJX01JTlVTLCBBU0NJSV84LCAnXDAnCi19Owotc3RhdGljIGNvbnN0IGNoYXIgS1dfVVRG
XzE2W10gPSB7Ci0gIEFTQ0lJX1UsIEFTQ0lJX1QsIEFTQ0lJX0YsIEFTQ0lJX01JTlVTLCBBU0NJ
SV8xLCBBU0NJSV82LCAnXDAnCi19Owotc3RhdGljIGNvbnN0IGNoYXIgS1dfVVRGXzE2QkVbXSA9
IHsKLSAgQVNDSUlfVSwgQVNDSUlfVCwgQVNDSUlfRiwgQVNDSUlfTUlOVVMsIEFTQ0lJXzEsIEFT
Q0lJXzYsIEFTQ0lJX0IsIEFTQ0lJX0UsCi0gICdcMCcKLX07Ci1zdGF0aWMgY29uc3QgY2hhciBL
V19VVEZfMTZMRVtdID0gewotICBBU0NJSV9VLCBBU0NJSV9ULCBBU0NJSV9GLCBBU0NJSV9NSU5V
UywgQVNDSUlfMSwgQVNDSUlfNiwgQVNDSUlfTCwgQVNDSUlfRSwKLSAgJ1wwJwotfTsKLQotc3Rh
dGljIGludCBGQVNUQ0FMTAotZ2V0RW5jb2RpbmdJbmRleChjb25zdCBjaGFyICpuYW1lKQotewot
ICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVuY29kaW5nTmFtZXNbXSA9IHsKLSAgICBLV19J
U09fODg1OV8xLAotICAgIEtXX1VTX0FTQ0lJLAotICAgIEtXX1VURl84LAotICAgIEtXX1VURl8x
NiwKLSAgICBLV19VVEZfMTZCRSwKLSAgICBLV19VVEZfMTZMRSwKLSAgfTsKLSAgaW50IGk7Ci0g
IGlmIChuYW1lID09IE5VTEwpCi0gICAgcmV0dXJuIE5PX0VOQzsKLSAgZm9yIChpID0gMDsgaSA8
IChpbnQpKHNpemVvZihlbmNvZGluZ05hbWVzKS9zaXplb2YoZW5jb2RpbmdOYW1lc1swXSkpOyBp
KyspCi0gICAgaWYgKHN0cmVxY2kobmFtZSwgZW5jb2RpbmdOYW1lc1tpXSkpCi0gICAgICByZXR1
cm4gaTsKLSAgcmV0dXJuIFVOS05PV05fRU5DOwotfQotCi0vKiBGb3IgYmluYXJ5IGNvbXBhdGli
aWxpdHksIHdlIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgZW5jb2RpbmcKLSAgIHNwZWNpZmllZCBh
dCBpbml0aWFsaXphdGlvbiBpbiB0aGUgaXNVdGYxNiBtZW1iZXIuCi0qLwotCi0jZGVmaW5lIElO
SVRfRU5DX0lOREVYKGVuYykgKChpbnQpKGVuYyktPmluaXRFbmMuaXNVdGYxNikKLSNkZWZpbmUg
U0VUX0lOSVRfRU5DX0lOREVYKGVuYywgaSkgKChlbmMpLT5pbml0RW5jLmlzVXRmMTYgPSAoY2hh
cilpKQotCi0vKiBUaGlzIGlzIHdoYXQgZGV0ZWN0cyB0aGUgZW5jb2RpbmcuICBlbmNvZGluZ1Rh
YmxlIG1hcHMgZnJvbQotICAgZW5jb2RpbmcgaW5kaWNlcyB0byBlbmNvZGluZ3M7IElOSVRfRU5D
X0lOREVYKGVuYykgaXMgdGhlIGluZGV4IG9mCi0gICB0aGUgZXh0ZXJuYWwgKHByb3RvY29sKSBz
cGVjaWZpZWQgZW5jb2Rpbmc7IHN0YXRlIGlzCi0gICBYTUxfQ09OVEVOVF9TVEFURSBpZiB3ZSdy
ZSBwYXJzaW5nIGFuIGV4dGVybmFsIHRleHQgZW50aXR5LCBhbmQKLSAgIFhNTF9QUk9MT0dfU1RB
VEUgb3RoZXJ3aXNlLgotKi8KLQotCi1zdGF0aWMgaW50Ci1pbml0U2Nhbihjb25zdCBFTkNPRElO
RyAqIGNvbnN0ICplbmNvZGluZ1RhYmxlLAotICAgICAgICAgY29uc3QgSU5JVF9FTkNPRElORyAq
ZW5jLAotICAgICAgICAgaW50IHN0YXRlLAotICAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAg
ICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIp
Ci17Ci0gIGNvbnN0IEVOQ09ESU5HICoqZW5jUHRyOwotCi0gIGlmIChwdHIgPT0gZW5kKQotICAg
IHJldHVybiBYTUxfVE9LX05PTkU7Ci0gIGVuY1B0ciA9IGVuYy0+ZW5jUHRyOwotICBpZiAocHRy
ICsgMSA9PSBlbmQpIHsKLSAgICAvKiBvbmx5IGEgc2luZ2xlIGJ5dGUgYXZhaWxhYmxlIGZvciBh
dXRvLWRldGVjdGlvbiAqLwotI2lmbmRlZiBYTUxfRFREIC8qIEZJWE1FICovCi0gICAgLyogYSB3
ZWxsLWZvcm1lZCBkb2N1bWVudCBlbnRpdHkgbXVzdCBoYXZlIG1vcmUgdGhhbiBvbmUgYnl0ZSAq
LwotICAgIGlmIChzdGF0ZSAhPSBYTUxfQ09OVEVOVF9TVEFURSkKLSAgICAgIHJldHVybiBYTUxf
VE9LX1BBUlRJQUw7Ci0jZW5kaWYKLSAgICAvKiBzbyB3ZSdyZSBwYXJzaW5nIGFuIGV4dGVybmFs
IHRleHQgZW50aXR5Li4uICovCi0gICAgLyogaWYgVVRGLTE2IHdhcyBleHRlcm5hbGx5IHNwZWNp
ZmllZCwgdGhlbiB3ZSBuZWVkIGF0IGxlYXN0IDIgYnl0ZXMgKi8KLSAgICBzd2l0Y2ggKElOSVRf
RU5DX0lOREVYKGVuYykpIHsKLSAgICBjYXNlIFVURl8xNl9FTkM6Ci0gICAgY2FzZSBVVEZfMTZM
RV9FTkM6Ci0gICAgY2FzZSBVVEZfMTZCRV9FTkM6Ci0gICAgICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOwotICAgIH0KLSAgICBzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSpwdHIpIHsKLSAgICBjYXNl
IDB4RkU6Ci0gICAgY2FzZSAweEZGOgotICAgIGNhc2UgMHhFRjogLyogcG9zc2libHkgZmlyc3Qg
Ynl0ZSBvZiBVVEYtOCBCT00gKi8KLSAgICAgIGlmIChJTklUX0VOQ19JTkRFWChlbmMpID09IElT
T184ODU5XzFfRU5DCi0gICAgICAgICAgJiYgc3RhdGUgPT0gWE1MX0NPTlRFTlRfU1RBVEUpCi0g
ICAgICAgIGJyZWFrOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSAweDAwOgot
ICAgIGNhc2UgMHgzQzoKLSAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgfQotICB9
Ci0gIGVsc2UgewotICAgIHN3aXRjaCAoKCh1bnNpZ25lZCBjaGFyKXB0clswXSA8PCA4KSB8ICh1
bnNpZ25lZCBjaGFyKXB0clsxXSkgewotICAgIGNhc2UgMHhGRUZGOgotICAgICAgaWYgKElOSVRf
RU5DX0lOREVYKGVuYykgPT0gSVNPXzg4NTlfMV9FTkMKLSAgICAgICAgICAmJiBzdGF0ZSA9PSBY
TUxfQ09OVEVOVF9TVEFURSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0
ciArIDI7Ci0gICAgICAqZW5jUHRyID0gZW5jb2RpbmdUYWJsZVtVVEZfMTZCRV9FTkNdOwotICAg
ICAgcmV0dXJuIFhNTF9UT0tfQk9NOwotICAgIC8qIDAwIDNDIGlzIGhhbmRsZWQgaW4gdGhlIGRl
ZmF1bHQgY2FzZSAqLwotICAgIGNhc2UgMHgzQzAwOgotICAgICAgaWYgKChJTklUX0VOQ19JTkRF
WChlbmMpID09IFVURl8xNkJFX0VOQwotICAgICAgICAgICB8fCBJTklUX0VOQ19JTkRFWChlbmMp
ID09IFVURl8xNl9FTkMpCi0gICAgICAgICAgJiYgc3RhdGUgPT0gWE1MX0NPTlRFTlRfU1RBVEUp
Ci0gICAgICAgIGJyZWFrOwotICAgICAgKmVuY1B0ciA9IGVuY29kaW5nVGFibGVbVVRGXzE2TEVf
RU5DXTsKLSAgICAgIHJldHVybiBYbWxUb2soKmVuY1B0ciwgc3RhdGUsIHB0ciwgZW5kLCBuZXh0
VG9rUHRyKTsKLSAgICBjYXNlIDB4RkZGRToKLSAgICAgIGlmIChJTklUX0VOQ19JTkRFWChlbmMp
ID09IElTT184ODU5XzFfRU5DCi0gICAgICAgICAgJiYgc3RhdGUgPT0gWE1MX0NPTlRFTlRfU1RB
VEUpCi0gICAgICAgIGJyZWFrOwotICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyAyOwotICAgICAg
KmVuY1B0ciA9IGVuY29kaW5nVGFibGVbVVRGXzE2TEVfRU5DXTsKLSAgICAgIHJldHVybiBYTUxf
VE9LX0JPTTsKLSAgICBjYXNlIDB4RUZCQjoKLSAgICAgIC8qIE1heWJlIGEgVVRGLTggQk9NIChF
RiBCQiBCRikgKi8KLSAgICAgIC8qIElmIHRoZXJlJ3MgYW4gZXhwbGljaXRseSBzcGVjaWZpZWQg
KGV4dGVybmFsKSBlbmNvZGluZwotICAgICAgICAgb2YgSVNPLTg4NTktMSBvciBzb21lIGZsYXZv
dXIgb2YgVVRGLTE2Ci0gICAgICAgICBhbmQgdGhpcyBpcyBhbiBleHRlcm5hbCB0ZXh0IGVudGl0
eSwKLSAgICAgICAgIGRvbid0IGxvb2sgZm9yIHRoZSBCT00sCi0gICAgICAgICBiZWNhdXNlIGl0
IG1pZ2h0IGJlIGEgbGVnYWwgZGF0YS4KLSAgICAgICovCi0gICAgICBpZiAoc3RhdGUgPT0gWE1M
X0NPTlRFTlRfU1RBVEUpIHsKLSAgICAgICAgaW50IGUgPSBJTklUX0VOQ19JTkRFWChlbmMpOwot
ICAgICAgICBpZiAoZSA9PSBJU09fODg1OV8xX0VOQyB8fCBlID09IFVURl8xNkJFX0VOQwotICAg
ICAgICAgICAgfHwgZSA9PSBVVEZfMTZMRV9FTkMgfHwgZSA9PSBVVEZfMTZfRU5DKQotICAgICAg
ICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKHB0ciArIDIgPT0gZW5kKQotICAgICAgICBy
ZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKXB0clsyXSA9
PSAweEJGKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgMzsKLSAgICAgICAgKmVuY1B0
ciA9IGVuY29kaW5nVGFibGVbVVRGXzhfRU5DXTsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfQk9N
OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChwdHJbMF0g
PT0gJ1wwJykgewotICAgICAgICAvKiAwIGlzbid0IGEgbGVnYWwgZGF0YSBjaGFyYWN0ZXIuIEZ1
cnRoZXJtb3JlIGEgZG9jdW1lbnQKLSAgICAgICAgICAgZW50aXR5IGNhbiBvbmx5IHN0YXJ0IHdp
dGggQVNDSUkgY2hhcmFjdGVycy4gIFNvIHRoZSBvbmx5Ci0gICAgICAgICAgIHdheSB0aGlzIGNh
biBmYWlsIHRvIGJlIGJpZy1lbmRpYW4gVVRGLTE2IGlmIGl0IGl0J3MgYW4KLSAgICAgICAgICAg
ZXh0ZXJuYWwgcGFyc2VkIGdlbmVyYWwgZW50aXR5IHRoYXQncyBsYWJlbGxlZCBhcwotICAgICAg
ICAgICBVVEYtMTZMRS4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0YXRlID09IFhNTF9DT05U
RU5UX1NUQVRFICYmIElOSVRfRU5DX0lOREVYKGVuYykgPT0gVVRGXzE2TEVfRU5DKQotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAqZW5jUHRyID0gZW5jb2RpbmdUYWJsZVtVVEZfMTZCRV9FTkNd
OwotICAgICAgICByZXR1cm4gWG1sVG9rKCplbmNQdHIsIHN0YXRlLCBwdHIsIGVuZCwgbmV4dFRv
a1B0cik7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChwdHJbMV0gPT0gJ1wwJykgewotICAgICAg
ICAvKiBXZSBjb3VsZCByZWNvdmVyIGhlcmUgaW4gdGhlIGNhc2U6Ci0gICAgICAgICAgICAtIHBh
cnNpbmcgYW4gZXh0ZXJuYWwgZW50aXR5Ci0gICAgICAgICAgICAtIHNlY29uZCBieXRlIGlzIDAK
LSAgICAgICAgICAgIC0gbm8gZXh0ZXJuYWxseSBzcGVjaWZpZWQgZW5jb2RpbmcKLSAgICAgICAg
ICAgIC0gbm8gZW5jb2RpbmcgZGVjbGFyYXRpb24KLSAgICAgICAgICAgYnkgYXNzdW1pbmcgVVRG
LTE2TEUuICBCdXQgd2UgZG9uJ3QsIGJlY2F1c2UgdGhpcyB3b3VsZCBtZWFuIHdoZW4KLSAgICAg
ICAgICAgcHJlc2VudGVkIGp1c3Qgd2l0aCBhIHNpbmdsZSBieXRlLCB3ZSBjb3VsZG4ndCByZWxp
YWJseSBkZXRlcm1pbmUKLSAgICAgICAgICAgd2hldGhlciB3ZSBuZWVkZWQgZnVydGhlciBieXRl
cy4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0YXRlID09IFhNTF9DT05URU5UX1NUQVRFKQot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAqZW5jUHRyID0gZW5jb2RpbmdUYWJsZVtVVEZfMTZM
RV9FTkNdOwotICAgICAgICByZXR1cm4gWG1sVG9rKCplbmNQdHIsIHN0YXRlLCBwdHIsIGVuZCwg
bmV4dFRva1B0cik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgKmVuY1B0
ciA9IGVuY29kaW5nVGFibGVbSU5JVF9FTkNfSU5ERVgoZW5jKV07Ci0gIHJldHVybiBYbWxUb2so
KmVuY1B0ciwgc3RhdGUsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKTsKLX0KLQotCi0jZGVmaW5lIE5T
KHgpIHgKLSNkZWZpbmUgbnMoeCkgeAotI2RlZmluZSBYTUxfVE9LX05TX0MKLSNpbmNsdWRlICJ4
bWx0b2tfbnMuYyIKLSN1bmRlZiBYTUxfVE9LX05TX0MKLSN1bmRlZiBOUwotI3VuZGVmIG5zCi0K
LSNpZmRlZiBYTUxfTlMKLQotI2RlZmluZSBOUyh4KSB4ICMjIE5TCi0jZGVmaW5lIG5zKHgpIHgg
IyMgX25zCi0KLSNkZWZpbmUgWE1MX1RPS19OU19DCi0jaW5jbHVkZSAieG1sdG9rX25zLmMiCi0j
dW5kZWYgWE1MX1RPS19OU19DCi0KLSN1bmRlZiBOUwotI3VuZGVmIG5zCi0KLUVOQ09ESU5HICoK
LVhtbEluaXRVbmtub3duRW5jb2RpbmdOUyh2b2lkICptZW0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICp0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDT05WRVJURVIgY29u
dmVydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSkKLXsKLSAgRU5D
T0RJTkcgKmVuYyA9IFhtbEluaXRVbmtub3duRW5jb2RpbmcobWVtLCB0YWJsZSwgY29udmVydCwg
dXNlckRhdGEpOwotICBpZiAoZW5jKQotICAgICgoc3RydWN0IG5vcm1hbF9lbmNvZGluZyAqKWVu
YyktPnR5cGVbQVNDSUlfQ09MT05dID0gQlRfQ09MT047Ci0gIHJldHVybiBlbmM7Ci19Ci0KLSNl
bmRpZiAvKiBYTUxfTlMgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRvay5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1s
dG9rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhODY3YWE2YjQyOWNmOWFiMDcy
MWNlODllZTI4MWU5NTI5YmJmYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS9leHBhdC9maWxlcy9saWIveG1sdG9rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBA
QAotLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUg
Q2VudGVyIEx0ZAotICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lv
bi4KLSovCi0KLSNpZm5kZWYgWG1sVG9rX0lOQ0xVREVECi0jZGVmaW5lIFhtbFRva19JTkNMVURF
RCAxCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLyogVGhl
IGZvbGxvd2luZyB0b2tlbiBtYXkgYmUgcmV0dXJuZWQgYnkgWG1sQ29udGVudFRvayAqLwotI2Rl
ZmluZSBYTUxfVE9LX1RSQUlMSU5HX1JTUUIgLTUgLyogXSBvciBdXSBhdCB0aGUgZW5kIG9mIHRo
ZSBzY2FuOyBtaWdodCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQgb2YgaWxsZWdhbCBdXT4gc2VxdWVuY2UgKi8KLS8qIFRoZSBmb2xsb3dpbmcgdG9rZW5zIG1h
eSBiZSByZXR1cm5lZCBieSBib3RoIFhtbFByb2xvZ1RvayBhbmQKLSAgIFhtbENvbnRlbnRUb2su
Ci0qLwotI2RlZmluZSBYTUxfVE9LX05PTkUgLTQgICAgICAgICAgLyogVGhlIHN0cmluZyB0byBi
ZSBzY2FubmVkIGlzIGVtcHR5ICovCi0jZGVmaW5lIFhNTF9UT0tfVFJBSUxJTkdfQ1IgLTMgICAv
KiBBIENSIGF0IHRoZSBlbmQgb2YgdGhlIHNjYW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtaWdodCBiZSBwYXJ0IG9mIENSTEYgc2VxdWVuY2UgKi8KLSNkZWZpbmUgWE1M
X1RPS19QQVJUSUFMX0NIQVIgLTIgIC8qIG9ubHkgcGFydCBvZiBhIG11bHRpYnl0ZSBzZXF1ZW5j
ZSAqLwotI2RlZmluZSBYTUxfVE9LX1BBUlRJQUwgLTEgICAgICAgLyogb25seSBwYXJ0IG9mIGEg
dG9rZW4gKi8KLSNkZWZpbmUgWE1MX1RPS19JTlZBTElEIDAKLQotLyogVGhlIGZvbGxvd2luZyB0
b2tlbnMgYXJlIHJldHVybmVkIGJ5IFhtbENvbnRlbnRUb2s7IHNvbWUgYXJlIGFsc28KLSAgIHJl
dHVybmVkIGJ5IFhtbEF0dHJpYnV0ZVZhbHVlVG9rLCBYbWxFbnRpdHlUb2ssIFhtbENkYXRhU2Vj
dGlvblRvay4KLSovCi0jZGVmaW5lIFhNTF9UT0tfU1RBUlRfVEFHX1dJVEhfQVRUUyAxCi0jZGVm
aW5lIFhNTF9UT0tfU1RBUlRfVEFHX05PX0FUVFMgMgotI2RlZmluZSBYTUxfVE9LX0VNUFRZX0VM
RU1FTlRfV0lUSF9BVFRTIDMgLyogZW1wdHkgZWxlbWVudCB0YWcgPGUvPiAqLwotI2RlZmluZSBY
TUxfVE9LX0VNUFRZX0VMRU1FTlRfTk9fQVRUUyA0Ci0jZGVmaW5lIFhNTF9UT0tfRU5EX1RBRyA1
Ci0jZGVmaW5lIFhNTF9UT0tfREFUQV9DSEFSUyA2Ci0jZGVmaW5lIFhNTF9UT0tfREFUQV9ORVdM
SU5FIDcKLSNkZWZpbmUgWE1MX1RPS19DREFUQV9TRUNUX09QRU4gOAotI2RlZmluZSBYTUxfVE9L
X0VOVElUWV9SRUYgOQotI2RlZmluZSBYTUxfVE9LX0NIQVJfUkVGIDEwICAgICAgICAgICAgICAg
LyogbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgdG9r
ZW5zIG1heSBiZSByZXR1cm5lZCBieSBib3RoIFhtbFByb2xvZ1RvayBhbmQKLSAgIFhtbENvbnRl
bnRUb2suCi0qLwotI2RlZmluZSBYTUxfVE9LX1BJIDExICAgICAgICAgICAgICAgICAgICAgLyog
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAqLwotI2RlZmluZSBYTUxfVE9LX1hNTF9ERUNMIDEyICAg
ICAgICAgICAgICAgLyogWE1MIGRlY2wgb3IgdGV4dCBkZWNsICovCi0jZGVmaW5lIFhNTF9UT0tf
Q09NTUVOVCAxMwotI2RlZmluZSBYTUxfVE9LX0JPTSAxNCAgICAgICAgICAgICAgICAgICAgLyog
Qnl0ZSBvcmRlciBtYXJrICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgdG9rZW5zIGFyZSByZXR1cm5l
ZCBvbmx5IGJ5IFhtbFByb2xvZ1RvayAqLwotI2RlZmluZSBYTUxfVE9LX1BST0xPR19TIDE1Ci0j
ZGVmaW5lIFhNTF9UT0tfREVDTF9PUEVOIDE2ICAgICAgICAgICAgICAvKiA8IWZvbyAqLwotI2Rl
ZmluZSBYTUxfVE9LX0RFQ0xfQ0xPU0UgMTcgICAgICAgICAgICAgLyogPiAqLwotI2RlZmluZSBY
TUxfVE9LX05BTUUgMTgKLSNkZWZpbmUgWE1MX1RPS19OTVRPS0VOIDE5Ci0jZGVmaW5lIFhNTF9U
T0tfUE9VTkRfTkFNRSAyMCAgICAgICAgICAgICAvKiAjbmFtZSAqLwotI2RlZmluZSBYTUxfVE9L
X09SIDIxICAgICAgICAgICAgICAgICAgICAgLyogfCAqLwotI2RlZmluZSBYTUxfVE9LX1BFUkNF
TlQgMjIKLSNkZWZpbmUgWE1MX1RPS19PUEVOX1BBUkVOIDIzCi0jZGVmaW5lIFhNTF9UT0tfQ0xP
U0VfUEFSRU4gMjQKLSNkZWZpbmUgWE1MX1RPS19PUEVOX0JSQUNLRVQgMjUKLSNkZWZpbmUgWE1M
X1RPS19DTE9TRV9CUkFDS0VUIDI2Ci0jZGVmaW5lIFhNTF9UT0tfTElURVJBTCAyNwotI2RlZmlu
ZSBYTUxfVE9LX1BBUkFNX0VOVElUWV9SRUYgMjgKLSNkZWZpbmUgWE1MX1RPS19JTlNUQU5DRV9T
VEFSVCAyOQotCi0vKiBUaGUgZm9sbG93aW5nIG9jY3VyIG9ubHkgaW4gZWxlbWVudCB0eXBlIGRl
Y2xhcmF0aW9ucyAqLwotI2RlZmluZSBYTUxfVE9LX05BTUVfUVVFU1RJT04gMzAgICAgICAgICAg
LyogbmFtZT8gKi8KLSNkZWZpbmUgWE1MX1RPS19OQU1FX0FTVEVSSVNLIDMxICAgICAgICAgIC8q
IG5hbWUqICovCi0jZGVmaW5lIFhNTF9UT0tfTkFNRV9QTFVTIDMyICAgICAgICAgICAgICAvKiBu
YW1lKyAqLwotI2RlZmluZSBYTUxfVE9LX0NPTkRfU0VDVF9PUEVOIDMzICAgICAgICAgLyogPCFb
ICovCi0jZGVmaW5lIFhNTF9UT0tfQ09ORF9TRUNUX0NMT1NFIDM0ICAgICAgICAvKiBdXT4gKi8K
LSNkZWZpbmUgWE1MX1RPS19DTE9TRV9QQVJFTl9RVUVTVElPTiAzNSAgIC8qICk/ICovCi0jZGVm
aW5lIFhNTF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0sgMzYgICAvKiApKiAqLwotI2RlZmluZSBY
TUxfVE9LX0NMT1NFX1BBUkVOX1BMVVMgMzcgICAgICAgLyogKSsgKi8KLSNkZWZpbmUgWE1MX1RP
S19DT01NQSAzOAotCi0vKiBUaGUgZm9sbG93aW5nIHRva2VuIGlzIHJldHVybmVkIG9ubHkgYnkg
WG1sQXR0cmlidXRlVmFsdWVUb2sgKi8KLSNkZWZpbmUgWE1MX1RPS19BVFRSSUJVVEVfVkFMVUVf
UyAzOQotCi0vKiBUaGUgZm9sbG93aW5nIHRva2VuIGlzIHJldHVybmVkIG9ubHkgYnkgWG1sQ2Rh
dGFTZWN0aW9uVG9rICovCi0jZGVmaW5lIFhNTF9UT0tfQ0RBVEFfU0VDVF9DTE9TRSA0MAotCi0v
KiBXaXRoIG5hbWVzcGFjZSBwcm9jZXNzaW5nIHRoaXMgaXMgcmV0dXJuZWQgYnkgWG1sUHJvbG9n
VG9rIGZvciBhCi0gICBuYW1lIHdpdGggYSBjb2xvbi4KLSovCi0jZGVmaW5lIFhNTF9UT0tfUFJF
RklYRURfTkFNRSA0MQotCi0jaWZkZWYgWE1MX0RURAotI2RlZmluZSBYTUxfVE9LX0lHTk9SRV9T
RUNUIDQyCi0jZW5kaWYgLyogWE1MX0RURCAqLwotCi0jaWZkZWYgWE1MX0RURAotI2RlZmluZSBY
TUxfTl9TVEFURVMgNAotI2Vsc2UgLyogbm90IFhNTF9EVEQgKi8KLSNkZWZpbmUgWE1MX05fU1RB
VEVTIDMKLSNlbmRpZiAvKiBub3QgWE1MX0RURCAqLwotCi0jZGVmaW5lIFhNTF9QUk9MT0dfU1RB
VEUgMAotI2RlZmluZSBYTUxfQ09OVEVOVF9TVEFURSAxCi0jZGVmaW5lIFhNTF9DREFUQV9TRUNU
SU9OX1NUQVRFIDIKLSNpZmRlZiBYTUxfRFRECi0jZGVmaW5lIFhNTF9JR05PUkVfU0VDVElPTl9T
VEFURSAzCi0jZW5kaWYgLyogWE1MX0RURCAqLwotCi0jZGVmaW5lIFhNTF9OX0xJVEVSQUxfVFlQ
RVMgMgotI2RlZmluZSBYTUxfQVRUUklCVVRFX1ZBTFVFX0xJVEVSQUwgMAotI2RlZmluZSBYTUxf
RU5USVRZX1ZBTFVFX0xJVEVSQUwgMQotCi0vKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3Nl
ZCB0byBYbWxVdGY4RW5jb2RlIG11c3QgYmUgYXQgbGVhc3QgdGhpcy4gKi8KLSNkZWZpbmUgWE1M
X1VURjhfRU5DT0RFX01BWCA0Ci0vKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB0byBY
bWxVdGYxNkVuY29kZSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMuICovCi0jZGVmaW5lIFhNTF9VVEYx
Nl9FTkNPREVfTUFYIDIKLQotdHlwZWRlZiBzdHJ1Y3QgcG9zaXRpb24gewotICAvKiBmaXJzdCBs
aW5lIGFuZCBmaXJzdCBjb2x1bW4gYXJlIDAgbm90IDEgKi8KLSAgWE1MX1NpemUgbGluZU51bWJl
cjsKLSAgWE1MX1NpemUgY29sdW1uTnVtYmVyOwotfSBQT1NJVElPTjsKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICBjb25zdCBjaGFyICp2YWx1ZVB0cjsKLSAgY29u
c3QgY2hhciAqdmFsdWVFbmQ7Ci0gIGNoYXIgbm9ybWFsaXplZDsKLX0gQVRUUklCVVRFOwotCi1z
dHJ1Y3QgZW5jb2Rpbmc7Ci10eXBlZGVmIHN0cnVjdCBlbmNvZGluZyBFTkNPRElORzsKLQotdHlw
ZWRlZiBpbnQgKFBUUkNBTEwgKlNDQU5ORVIpKGNvbnN0IEVOQ09ESU5HICosCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICoqKTsKLQotc3RydWN0IGVuY29kaW5nIHsKLSAgU0NBTk5FUiBzY2FubmVyc1tY
TUxfTl9TVEFURVNdOwotICBTQ0FOTkVSIGxpdGVyYWxTY2FubmVyc1tYTUxfTl9MSVRFUkFMX1RZ
UEVTXTsKLSAgaW50IChQVFJDQUxMICpzYW1lTmFtZSkoY29uc3QgRU5DT0RJTkcgKiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICopOwotICBpbnQgKFBUUkNBTEwgKm5hbWVNYXRjaGVzQXNjaWkpKGNv
bnN0IEVOQ09ESU5HICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwotICBpbnQg
KFBUUkZBU1RDQUxMICpuYW1lTGVuZ3RoKShjb25zdCBFTkNPRElORyAqLCBjb25zdCBjaGFyICop
OwotICBjb25zdCBjaGFyICooUFRSRkFTVENBTEwgKnNraXBTKShjb25zdCBFTkNPRElORyAqLCBj
b25zdCBjaGFyICopOwotICBpbnQgKFBUUkNBTEwgKmdldEF0dHMpKGNvbnN0IEVOQ09ESU5HICpl
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBhdHRzTWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgIEFU
VFJJQlVURSAqYXR0cyk7Ci0gIGludCAoUFRSRkFTVENBTEwgKmNoYXJSZWZOdW1iZXIpKGNvbnN0
IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0cik7Ci0gIGludCAoUFRSQ0FMTCAqcHJlZGVm
aW5lZEVudGl0eU5hbWUpKGNvbnN0IEVOQ09ESU5HICosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKLSAgdm9pZCAoUFRSQ0FMTCAqdXBkYXRlUG9zaXRp
b24pKGNvbnN0IEVOQ09ESU5HICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTiAqKTsK
LSAgaW50IChQVFJDQUxMICppc1B1YmxpY0lkKShjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqKmJhZFB0cik7Ci0gIHZvaWQgKFBUUkNBTEwgKnV0ZjhDb252ZXJ0KShjb25z
dCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqKmZyb21QLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJv
bUxpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0b1AsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b0xpbSk7Ci0gIHZvaWQgKFBUUkNB
TEwgKnV0ZjE2Q29udmVydCkoY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICoqZnJvbVAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZnJvbUxpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCAqKnRvUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqdG9MaW0pOwotICBpbnQgbWluQnl0ZXNQZXJDaGFyOwot
ICBjaGFyIGlzVXRmODsKLSAgY2hhciBpc1V0ZjE2OwotfTsKLQotLyogU2NhbiB0aGUgc3RyaW5n
IHN0YXJ0aW5nIGF0IHB0ciB1bnRpbCB0aGUgZW5kIG9mIHRoZSBuZXh0IGNvbXBsZXRlCi0gICB0
b2tlbiwgYnV0IGRvIG5vdCBzY2FuIHBhc3QgZXB0ci4gIFJldHVybiBhbiBpbnRlZ2VyIGdpdmlu
ZyB0aGUKLSAgIHR5cGUgb2YgdG9rZW4uCi0KLSAgIFJldHVybiBYTUxfVE9LX05PTkUgd2hlbiBw
dHIgPT0gZXB0cjsgbmV4dFRva1B0ciB3aWxsIG5vdCBiZSBzZXQuCi0KLSAgIFJldHVybiBYTUxf
VE9LX1BBUlRJQUwgd2hlbiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBjb21wbGV0ZQot
ICAgdG9rZW47IG5leHRUb2tQdHIgd2lsbCBub3QgYmUgc2V0LgotCi0gICBSZXR1cm4gWE1MX1RP
S19JTlZBTElEIHdoZW4gdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCBhIHZhbGlkCi0gICB0b2tl
bjsgbmV4dFRva1B0ciB3aWxsIGJlIHNldCB0byBwb2ludCB0byB0aGUgY2hhcmFjdGVyIHdoaWNo
IG1hZGUKLSAgIHRoZSB0b2tlbiBpbnZhbGlkLgotCi0gICBPdGhlcndpc2UgdGhlIHN0cmluZyBz
dGFydHMgd2l0aCBhIHZhbGlkIHRva2VuOyBuZXh0VG9rUHRyIHdpbGwgYmUKLSAgIHNldCB0byBw
b2ludCB0byB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoYXQgdG9rZW4uCi0K
LSAgIEVhY2ggZGF0YSBjaGFyYWN0ZXIgY291bnRzIGFzIGEgc2luZ2xlIHRva2VuLCBidXQgYWRq
YWNlbnQgZGF0YQotICAgY2hhcmFjdGVycyBtYXkgYmUgcmV0dXJuZWQgdG9nZXRoZXIuICBTaW1p
bGFybHkgZm9yIGNoYXJhY3RlcnMgaW4KLSAgIHRoZSBwcm9sb2cgb3V0c2lkZSBsaXRlcmFscywg
Y29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgotKi8KLQotCi0jZGVmaW5lIFht
bFRvayhlbmMsIHN0YXRlLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICAoKChlbmMpLT5zY2Fu
bmVyc1tzdGF0ZV0pKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpKQotCi0jZGVmaW5lIFhtbFBy
b2xvZ1RvayhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCi0gICBYbWxUb2soZW5jLCBYTUxf
UFJPTE9HX1NUQVRFLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLQotI2RlZmluZSBYbWxDb250ZW50
VG9rKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgIFhtbFRvayhlbmMsIFhNTF9DT05U
RU5UX1NUQVRFLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLQotI2RlZmluZSBYbWxDZGF0YVNlY3Rp
b25Ub2soZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICAgWG1sVG9rKGVuYywgWE1MX0NE
QVRBX1NFQ1RJT05fU1RBVEUsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotCi0jaWZkZWYgWE1MX0RU
RAotCi0jZGVmaW5lIFhtbElnbm9yZVNlY3Rpb25Ub2soZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0
cikgXAotICAgWG1sVG9rKGVuYywgWE1MX0lHTk9SRV9TRUNUSU9OX1NUQVRFLCBwdHIsIGVuZCwg
bmV4dFRva1B0cikKLQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLQotLyogVGhpcyBpcyB1c2VkIGZv
ciBwZXJmb3JtaW5nIGEgMm5kLWxldmVsIHRva2VuaXphdGlvbiBvbiB0aGUgY29udGVudAotICAg
b2YgYSBsaXRlcmFsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZXR1cm5lZCBieSBYbWxUb2suCi0q
LwotI2RlZmluZSBYbWxMaXRlcmFsVG9rKGVuYywgbGl0ZXJhbFR5cGUsIHB0ciwgZW5kLCBuZXh0
VG9rUHRyKSBcCi0gICgoKGVuYyktPmxpdGVyYWxTY2FubmVyc1tsaXRlcmFsVHlwZV0pKGVuYywg
cHRyLCBlbmQsIG5leHRUb2tQdHIpKQotCi0jZGVmaW5lIFhtbEF0dHJpYnV0ZVZhbHVlVG9rKGVu
YywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgIFhtbExpdGVyYWxUb2soZW5jLCBYTUxfQVRU
UklCVVRFX1ZBTFVFX0xJVEVSQUwsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotCi0jZGVmaW5lIFht
bEVudGl0eVZhbHVlVG9rKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgIFhtbExpdGVy
YWxUb2soZW5jLCBYTUxfRU5USVRZX1ZBTFVFX0xJVEVSQUwsIHB0ciwgZW5kLCBuZXh0VG9rUHRy
KQotCi0jZGVmaW5lIFhtbFNhbWVOYW1lKGVuYywgcHRyMSwgcHRyMikgKCgoZW5jKS0+c2FtZU5h
bWUpKGVuYywgcHRyMSwgcHRyMikpCi0KLSNkZWZpbmUgWG1sTmFtZU1hdGNoZXNBc2NpaShlbmMs
IHB0cjEsIGVuZDEsIHB0cjIpIFwKLSAgKCgoZW5jKS0+bmFtZU1hdGNoZXNBc2NpaSkoZW5jLCBw
dHIxLCBlbmQxLCBwdHIyKSkKLQotI2RlZmluZSBYbWxOYW1lTGVuZ3RoKGVuYywgcHRyKSBcCi0g
ICgoKGVuYyktPm5hbWVMZW5ndGgpKGVuYywgcHRyKSkKLQotI2RlZmluZSBYbWxTa2lwUyhlbmMs
IHB0cikgXAotICAoKChlbmMpLT5za2lwUykoZW5jLCBwdHIpKQotCi0jZGVmaW5lIFhtbEdldEF0
dHJpYnV0ZXMoZW5jLCBwdHIsIGF0dHNNYXgsIGF0dHMpIFwKLSAgKCgoZW5jKS0+Z2V0QXR0cyko
ZW5jLCBwdHIsIGF0dHNNYXgsIGF0dHMpKQotCi0jZGVmaW5lIFhtbENoYXJSZWZOdW1iZXIoZW5j
LCBwdHIpIFwKLSAgKCgoZW5jKS0+Y2hhclJlZk51bWJlcikoZW5jLCBwdHIpKQotCi0jZGVmaW5l
IFhtbFByZWRlZmluZWRFbnRpdHlOYW1lKGVuYywgcHRyLCBlbmQpIFwKLSAgKCgoZW5jKS0+cHJl
ZGVmaW5lZEVudGl0eU5hbWUpKGVuYywgcHRyLCBlbmQpKQotCi0jZGVmaW5lIFhtbFVwZGF0ZVBv
c2l0aW9uKGVuYywgcHRyLCBlbmQsIHBvcykgXAotICAoKChlbmMpLT51cGRhdGVQb3NpdGlvbiko
ZW5jLCBwdHIsIGVuZCwgcG9zKSkKLQotI2RlZmluZSBYbWxJc1B1YmxpY0lkKGVuYywgcHRyLCBl
bmQsIGJhZFB0cikgXAotICAoKChlbmMpLT5pc1B1YmxpY0lkKShlbmMsIHB0ciwgZW5kLCBiYWRQ
dHIpKQotCi0jZGVmaW5lIFhtbFV0ZjhDb252ZXJ0KGVuYywgZnJvbVAsIGZyb21MaW0sIHRvUCwg
dG9MaW0pIFwKLSAgKCgoZW5jKS0+dXRmOENvbnZlcnQpKGVuYywgZnJvbVAsIGZyb21MaW0sIHRv
UCwgdG9MaW0pKQotCi0jZGVmaW5lIFhtbFV0ZjE2Q29udmVydChlbmMsIGZyb21QLCBmcm9tTGlt
LCB0b1AsIHRvTGltKSBcCi0gICgoKGVuYyktPnV0ZjE2Q29udmVydCkoZW5jLCBmcm9tUCwgZnJv
bUxpbSwgdG9QLCB0b0xpbSkpCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgRU5DT0RJTkcgaW5pdEVu
YzsKLSAgY29uc3QgRU5DT0RJTkcgKiplbmNQdHI7Ci19IElOSVRfRU5DT0RJTkc7Ci0KLWludCBY
bWxQYXJzZVhtbERlY2woaW50IGlzR2VuZXJhbFRleHRFbnRpdHksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnB0ciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqYmFkUHRyLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICoqdmVyc2lvblB0ciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnZlcnNp
b25FbmRQdHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmNvZGluZ05hbWVQ
dHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICoqbmFtZWRFbmNvZGluZ1B0
ciwKLSAgICAgICAgICAgICAgICAgICAgaW50ICpzdGFuZGFsb25lUHRyKTsKLQotaW50IFhtbElu
aXRFbmNvZGluZyhJTklUX0VOQ09ESU5HICosIGNvbnN0IEVOQ09ESU5HICoqLCBjb25zdCBjaGFy
ICpuYW1lKTsKLWNvbnN0IEVOQ09ESU5HICpYbWxHZXRVdGY4SW50ZXJuYWxFbmNvZGluZyh2b2lk
KTsKLWNvbnN0IEVOQ09ESU5HICpYbWxHZXRVdGYxNkludGVybmFsRW5jb2Rpbmcodm9pZCk7Ci1p
bnQgRkFTVENBTEwgWG1sVXRmOEVuY29kZShpbnQgY2hhck51bWJlciwgY2hhciAqYnVmKTsKLWlu
dCBGQVNUQ0FMTCBYbWxVdGYxNkVuY29kZShpbnQgY2hhck51bWJlciwgdW5zaWduZWQgc2hvcnQg
KmJ1Zik7Ci1pbnQgWG1sU2l6ZU9mVW5rbm93bkVuY29kaW5nKHZvaWQpOwotCi0KLXR5cGVkZWYg
aW50IChYTUxDQUxMICpDT05WRVJURVIpICh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqcCk7
Ci0KLUVOQ09ESU5HICoKLVhtbEluaXRVbmtub3duRW5jb2Rpbmcodm9pZCAqbWVtLAotICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICBDT05W
RVJURVIgY29udmVydCwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOwot
Ci1pbnQgWG1sUGFyc2VYbWxEZWNsTlMoaW50IGlzR2VuZXJhbFRleHRFbnRpdHksCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRU5DT0RJTkcgKmVuYywKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipiYWRQdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKnZlcnNpb25QdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKnZlcnNpb25FbmRQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqKmVuY29kaW5nTmFtZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBF
TkNPRElORyAqKm5hbWVkRW5jb2RpbmdQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpz
dGFuZGFsb25lUHRyKTsKLQotaW50IFhtbEluaXRFbmNvZGluZ05TKElOSVRfRU5DT0RJTkcgKiwg
Y29uc3QgRU5DT0RJTkcgKiosIGNvbnN0IGNoYXIgKm5hbWUpOwotY29uc3QgRU5DT0RJTkcgKlht
bEdldFV0ZjhJbnRlcm5hbEVuY29kaW5nTlModm9pZCk7Ci1jb25zdCBFTkNPRElORyAqWG1sR2V0
VXRmMTZJbnRlcm5hbEVuY29kaW5nTlModm9pZCk7Ci1FTkNPRElORyAqCi1YbWxJbml0VW5rbm93
bkVuY29kaW5nTlModm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdGFi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ09OVkVSVEVSIGNvbnZlcnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOwotI2lmZGVmIF9fY3BsdXNwbHVzCi19
Ci0jZW5kaWYKLQotI2VuZGlmIC8qIG5vdCBYbWxUb2tfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmls
ZXMvbGliL3htbHRva19pbXBsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfaW1wbC5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5YzI4OTViODc3MzllZjAzMWVjZDkzM2RmNGI5NWUyNDQxZjg5NjJi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3ht
bHRva19pbXBsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzgzICswLDAgQEAKLS8qIENvcHlyaWdo
dCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLSAg
IFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCi0qLwotCi0vKiBU
aGlzIGZpbGUgaXMgaW5jbHVkZWQhICovCi0jaWZkZWYgWE1MX1RPS19JTVBMX0MKLQotI2lmbmRl
ZiBJU19JTlZBTElEX0NIQVIKLSNkZWZpbmUgSVNfSU5WQUxJRF9DSEFSKGVuYywgcHRyLCBuKSAo
MCkKLSNlbmRpZgotCi0jZGVmaW5lIElOVkFMSURfTEVBRF9DQVNFKG4sIHB0ciwgbmV4dFRva1B0
cikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCi0gICAgICBpZiAoZW5kIC0gcHRyIDwgbikg
XAotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMX0NIQVI7IFwKLSAgICAgIGlmIChJU19J
TlZBTElEX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKLSAgICAgICAgKihuZXh0VG9rUHRyKSA9IChw
dHIpOyBcCi0gICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7IFwKLSAgICAgIH0gXAotICAg
ICAgcHRyICs9IG47IFwKLSAgICAgIGJyZWFrOwotCi0jZGVmaW5lIElOVkFMSURfQ0FTRVMocHRy
LCBuZXh0VG9rUHRyKSBcCi0gIElOVkFMSURfTEVBRF9DQVNFKDIsIHB0ciwgbmV4dFRva1B0cikg
XAotICBJTlZBTElEX0xFQURfQ0FTRSgzLCBwdHIsIG5leHRUb2tQdHIpIFwKLSAgSU5WQUxJRF9M
RUFEX0NBU0UoNCwgcHRyLCBuZXh0VG9rUHRyKSBcCi0gIGNhc2UgQlRfTk9OWE1MOiBcCi0gIGNh
c2UgQlRfTUFMRk9STTogXAotICBjYXNlIEJUX1RSQUlMOiBcCi0gICAgKihuZXh0VG9rUHRyKSA9
IChwdHIpOyBcCi0gICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLQotI2RlZmluZSBDSEVDS19O
QU1FX0NBU0UobiwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICAgY2FzZSBCVF9MRUFE
ICMjIG46IFwKLSAgICAgaWYgKGVuZCAtIHB0ciA8IG4pIFwKLSAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMX0NIQVI7IFwKLSAgICAgaWYgKCFJU19OQU1FX0NIQVIoZW5jLCBwdHIsIG4pKSB7
IFwKLSAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAotICAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7IFwKLSAgICAgfSBcCi0gICAgIHB0ciArPSBuOyBcCi0gICAgIGJyZWFrOwotCi0jZGVm
aW5lIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICBjYXNl
IEJUX05PTkFTQ0lJOiBcCi0gICAgaWYgKCFJU19OQU1FX0NIQVJfTUlOQlBDKGVuYywgcHRyKSkg
eyBcCi0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAotICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsgXAotICAgIH0gXAotICBjYXNlIEJUX05NU1RSVDogXAotICBjYXNlIEJUX0hFWDogXAot
ICBjYXNlIEJUX0RJR0lUOiBcCi0gIGNhc2UgQlRfTkFNRTogXAotICBjYXNlIEJUX01JTlVTOiBc
Ci0gICAgcHRyICs9IE1JTkJQQyhlbmMpOyBcCi0gICAgYnJlYWs7IFwKLSAgQ0hFQ0tfTkFNRV9D
QVNFKDIsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgQ0hFQ0tfTkFNRV9DQVNFKDMs
IGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgQ0hFQ0tfTkFNRV9DQVNFKDQsIGVuYywg
cHRyLCBlbmQsIG5leHRUb2tQdHIpCi0KLSNkZWZpbmUgQ0hFQ0tfTk1TVFJUX0NBU0UobiwgZW5j
LCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICAgY2FzZSBCVF9MRUFEICMjIG46IFwKLSAgICAg
aWYgKGVuZCAtIHB0ciA8IG4pIFwKLSAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMX0NIQVI7
IFwKLSAgICAgaWYgKCFJU19OTVNUUlRfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAotICAgICAgICpu
ZXh0VG9rUHRyID0gcHRyOyBcCi0gICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsgXAotICAg
ICB9IFwKLSAgICAgcHRyICs9IG47IFwKLSAgICAgYnJlYWs7Ci0KLSNkZWZpbmUgQ0hFQ0tfTk1T
VFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgY2FzZSBCVF9OT05BU0NJ
STogXAotICAgIGlmICghSVNfTk1TVFJUX0NIQVJfTUlOQlBDKGVuYywgcHRyKSkgeyBcCi0gICAg
ICAqbmV4dFRva1B0ciA9IHB0cjsgXAotICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsgXAot
ICAgIH0gXAotICBjYXNlIEJUX05NU1RSVDogXAotICBjYXNlIEJUX0hFWDogXAotICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsgXAotICAgIGJyZWFrOyBcCi0gIENIRUNLX05NU1RSVF9DQVNFKDIsIGVu
YywgcHRyLCBlbmQsIG5leHRUb2tQdHIpIFwKLSAgQ0hFQ0tfTk1TVFJUX0NBU0UoMywgZW5jLCBw
dHIsIGVuZCwgbmV4dFRva1B0cikgXAotICBDSEVDS19OTVNUUlRfQ0FTRSg0LCBlbmMsIHB0ciwg
ZW5kLCBuZXh0VG9rUHRyKQotCi0jaWZuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVgoaWRlbnQp
IGlkZW50Ci0jZW5kaWYKLQotLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICI8
IS0iICovCi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5Db21tZW50KShjb25zdCBF
TkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGlmIChwdHIgIT0gZW5k
KSB7Ci0gICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX01JTlVTKSkgewotICAg
ICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAg
IH0KLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAg
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgSU5WQUxJRF9DQVNFUyhw
dHIsIG5leHRUb2tQdHIpCi0gICAgICBjYXNlIEJUX01JTlVTOgotICAgICAgICBpZiAoKHB0ciAr
PSBNSU5CUEMoZW5jKSkgPT0gZW5kKQotICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
Ci0gICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX01JTlVTKSkgewotICAg
ICAgICAgIGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCi0gICAgICAgICAgICByZXR1
cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRy
LCBBU0NJSV9HVCkpIHsKLSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICAg
ICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgKm5leHRU
b2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19DT01N
RU5UOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LSAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLX0KLQotLyogcHRyIHBvaW50cyB0byBjaGFyYWN0
ZXIgZm9sbG93aW5nICI8ISIgKi8KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2NhbkRl
Y2wpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgaWYgKHB0
ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgc3dpdGNoIChCWVRFX1RZ
UEUoZW5jLCBwdHIpKSB7Ci0gIGNhc2UgQlRfTUlOVVM6Ci0gICAgcmV0dXJuIFBSRUZJWChzY2Fu
Q29tbWVudCkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgY2Fz
ZSBCVF9MU1FCOgotICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgcmV0
dXJuIFhNTF9UT0tfQ09ORF9TRUNUX09QRU47Ci0gIGNhc2UgQlRfTk1TVFJUOgotICBjYXNlIEJU
X0hFWDoKLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0g
ICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgfQot
ICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkg
ewotICAgIGNhc2UgQlRfUEVSQ05UOgotICAgICAgaWYgKHB0ciArIE1JTkJQQyhlbmMpID09IGVu
ZCkKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgIC8qIGRvbid0IGFsbG93
IDwhRU5USVRZJSBmb28gIndoYXRldmVyIj4gKi8KLSAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVu
YywgcHRyICsgTUlOQlBDKGVuYykpKSB7Ci0gICAgICBjYXNlIEJUX1M6IGNhc2UgQlRfQ1I6IGNh
c2UgQlRfTEY6IGNhc2UgQlRfUEVSQ05UOgotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAg
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgIH0KLSAgICAgIC8qIGZhbGwgdGhy
b3VnaCAqLwotICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKLSAgICAgICpu
ZXh0VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfREVDTF9PUEVOOwotICAgIGNh
c2UgQlRfTk1TVFJUOgotICAgIGNhc2UgQlRfSEVYOgotICAgICAgcHRyICs9IE1JTkJQQyhlbmMp
OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFhNTF9U
T0tfUEFSVElBTDsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoY2hlY2tQaVRhcmdl
dCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgaW50ICp0b2tQdHIpCi17Ci0gIGludCB1cHBlciA9IDA7
Ci0gICp0b2tQdHIgPSBYTUxfVE9LX1BJOwotICBpZiAoZW5kIC0gcHRyICE9IE1JTkJQQyhlbmMp
KjMpCi0gICAgcmV0dXJuIDE7Ci0gIHN3aXRjaCAoQllURV9UT19BU0NJSShlbmMsIHB0cikpIHsK
LSAgY2FzZSBBU0NJSV94OgotICAgIGJyZWFrOwotICBjYXNlIEFTQ0lJX1g6Ci0gICAgdXBwZXIg
PSAxOwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIHJldHVybiAxOwotICB9Ci0gIHB0ciAr
PSBNSU5CUEMoZW5jKTsKLSAgc3dpdGNoIChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgewotICBj
YXNlIEFTQ0lJX206Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQVNDSUlfTToKLSAgICB1cHBlciA9IDE7
Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgcHRyICs9IE1J
TkJQQyhlbmMpOwotICBzd2l0Y2ggKEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpKSB7Ci0gIGNhc2Ug
QVNDSUlfbDoKLSAgICBicmVhazsKLSAgY2FzZSBBU0NJSV9MOgotICAgIHVwcGVyID0gMTsKLSAg
ICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICByZXR1cm4gMTsKLSAgfQotICBpZiAodXBwZXIpCi0g
ICAgcmV0dXJuIDA7Ci0gICp0b2tQdHIgPSBYTUxfVE9LX1hNTF9ERUNMOwotICByZXR1cm4gMTsK
LX0KLQotLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICI8PyIgKi8KLQotc3Rh
dGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2NhblBpKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25z
dCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIg
KipuZXh0VG9rUHRyKQotewotICBpbnQgdG9rOwotICBjb25zdCBjaGFyICp0YXJnZXQgPSBwdHI7
Ci0gIGlmIChwdHIgPT0gZW5kKQotICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIs
IGVuZCwgbmV4dFRva1B0cikKLSAgZGVmYXVsdDoKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAg
ICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICB9Ci0gIHdoaWxlIChwdHIgIT0gZW5kKSB7Ci0g
ICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgQ0hFQ0tfTkFNRV9DQVNFUyhl
bmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2Fz
ZSBCVF9MRjoKLSAgICAgIGlmICghUFJFRklYKGNoZWNrUGlUYXJnZXQpKGVuYywgdGFyZ2V0LCBw
dHIsICZ0b2spKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAg
ICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7Ci0gICAgICAgIElOVkFMSURfQ0FTRVMocHRyLCBuZXh0VG9rUHRyKQotICAgICAgICBj
YXNlIEJUX1FVRVNUOgotICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICBp
ZiAocHRyID09IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAg
ICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7Ci0gICAgICAgICAg
ICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgICAgICAgcmV0dXJuIHRv
azsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgIGNhc2UgQlRfUVVFU1Q6
Ci0gICAgICBpZiAoIVBSRUZJWChjaGVja1BpVGFyZ2V0KShlbmMsIHRhcmdldCwgcHRyLCAmdG9r
KSkgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tf
SU5WQUxJRDsKLSAgICAgIH0KLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGlmIChw
dHIgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgaWYgKENI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0g
cHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgICB9Ci0gICAgICAv
KiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgfQotICByZXR1cm4gWE1M
X1RPS19QQVJUSUFMOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChzY2FuQ2RhdGFT
ZWN0aW9uKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikK
LXsKLSAgc3RhdGljIGNvbnN0IGNoYXIgQ0RBVEFfTFNRQltdID0geyBBU0NJSV9DLCBBU0NJSV9E
LCBBU0NJSV9BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJX1Qs
IEFTQ0lJX0EsIEFTQ0lJX0xTUUIgfTsKLSAgaW50IGk7Ci0gIC8qIENEQVRBWyAqLwotICBpZiAo
ZW5kIC0gcHRyIDwgNiAqIE1JTkJQQyhlbmMpKQotICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7
Ci0gIGZvciAoaSA9IDA7IGkgPCA2OyBpKyssIHB0ciArPSBNSU5CUEMoZW5jKSkgewotICAgIGlm
ICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBDREFUQV9MU1FCW2ldKSkgewotICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgfQot
ICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgcmV0dXJuIFhNTF9UT0tfQ0RBVEFfU0VDVF9PUEVOOwot
fQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChjZGF0YVNlY3Rpb25Ub2spKGNvbnN0IEVO
Q09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGlmIChwdHIgPT0g
ZW5kKQotICAgIHJldHVybiBYTUxfVE9LX05PTkU7Ci0gIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsK
LSAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKLSAgICBpZiAobiAmIChNSU5CUEMoZW5jKSAtIDEp
KSB7Ci0gICAgICBuICY9IH4oTUlOQlBDKGVuYykgLSAxKTsKLSAgICAgIGlmIChuID09IDApCi0g
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBlbmQgPSBwdHIgKyBuOwotICAg
IH0KLSAgfQotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgY2FzZSBCVF9SU1FC
OgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFT
Q0lJX1JTUUIpKQotICAgICAgYnJlYWs7Ci0gICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGlm
IChwdHIgPT0gZW5kKQotICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICBpZiAoIUNI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7Ci0gICAgICBwdHIgLT0gTUlOQlBDKGVu
Yyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMo
ZW5jKTsKLSAgICByZXR1cm4gWE1MX1RPS19DREFUQV9TRUNUX0NMT1NFOwotICBjYXNlIEJUX0NS
OgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgaWYgKEJZVEVfVFlQRShlbmMsIHB0cikgPT0gQlRf
TEYpCi0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0g
ICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdMSU5FOwotICBjYXNlIEJUX0xGOgotICAgICpuZXh0
VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdM
SU5FOwotICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4dFRva1B0cikKLSAgZGVmYXVsdDoKLSAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgYnJlYWs7Ci0gIH0KLSAgd2hpbGUgKHB0ciAhPSBlbmQp
IHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSNkZWZpbmUgTEVBRF9DQVNF
KG4pIFwKLSAgICBjYXNlIEJUX0xFQUQgIyMgbjogXAotICAgICAgaWYgKGVuZCAtIHB0ciA8IG4g
fHwgSVNfSU5WQUxJRF9DSEFSKGVuYywgcHRyLCBuKSkgeyBcCi0gICAgICAgICpuZXh0VG9rUHRy
ID0gcHRyOyBcCi0gICAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7IFwKLSAgICAgIH0g
XAotICAgICAgcHRyICs9IG47IFwKLSAgICAgIGJyZWFrOwotICAgIExFQURfQ0FTRSgyKSBMRUFE
X0NBU0UoMykgTEVBRF9DQVNFKDQpCi0jdW5kZWYgTEVBRF9DQVNFCi0gICAgY2FzZSBCVF9OT05Y
TUw6Ci0gICAgY2FzZSBCVF9NQUxGT1JNOgotICAgIGNhc2UgQlRfVFJBSUw6Ci0gICAgY2FzZSBC
VF9DUjoKLSAgICBjYXNlIEJUX0xGOgotICAgIGNhc2UgQlRfUlNRQjoKLSAgICAgICpuZXh0VG9r
UHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBkZWZhdWx0
OgotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0g
ICpuZXh0VG9rUHRyID0gcHRyOwotICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOwotfQotCi0v
KiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjwvIiAqLwotCi1zdGF0aWMgaW50
IFBUUkNBTEwKLVBSRUZJWChzY2FuRW5kVGFnKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBj
aGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFy
ICoqbmV4dFRva1B0cikKLXsKLSAgaWYgKHB0ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhNTF9UT0tf
UEFSVElBTDsKLSAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gIENIRUNLX05NU1RS
VF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICBkZWZhdWx0OgotICAgICpuZXh0
VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gIH0KLSAgd2hpbGUg
KHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICBD
SEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCi0gICAgY2FzZSBCVF9T
OiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAgICAgZm9yIChwdHIgKz0gTUlOQlBDKGVuYyk7
IHB0ciAhPSBlbmQ7IHB0ciArPSBNSU5CUEMoZW5jKSkgewotICAgICAgICBzd2l0Y2ggKEJZVEVf
VFlQRShlbmMsIHB0cikpIHsKLSAgICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJU
X0xGOgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJUX0dUOgotICAgICAgICAgICpu
ZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgICAgcmV0dXJuIFhNTF9UT0tf
RU5EX1RBRzsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsK
LSAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotI2lmZGVmIFhNTF9OUwotICAgIGNhc2UgQlRf
Q09MT046Ci0gICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIHFuYW1lIHN5bnRheCBoZXJlLAotICAg
ICAgICAgc2luY2UgZW5kLXRhZyBtdXN0IG1hdGNoIGV4YWN0bHkgKi8KLSAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBCVF9HVDoKLSAgICAg
ICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19F
TkRfVEFHOwotICAgIGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJl
dHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7Ci19Ci0KLS8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiJiNYIiAqLwot
Ci1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChzY2FuSGV4Q2hhclJlZikoY29uc3QgRU5DT0RJ
TkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBpZiAocHRyICE9IGVuZCkg
ewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIGNhc2UgQlRfRElHSVQ6
Ci0gICAgY2FzZSBCVF9IRVg6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgKm5l
eHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAg
ICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRyICE9IGVuZDsgcHRyICs9IE1JTkJQQyhlbmMp
KSB7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICAgIGNhc2UgQlRf
RElHSVQ6Ci0gICAgICBjYXNlIEJUX0hFWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJU
X1NFTUk6Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAg
IHJldHVybiBYTUxfVE9LX0NIQVJfUkVGOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19Ci0KLS8qIHB0ciBwb2ludHMg
dG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiJiMiICovCi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJF
RklYKHNjYW5DaGFyUmVmKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQ
dHIpCi17Ci0gIGlmIChwdHIgIT0gZW5kKSB7Ci0gICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0
ciwgQVNDSUlfeCkpCi0gICAgICByZXR1cm4gUFJFRklYKHNjYW5IZXhDaGFyUmVmKShlbmMsIHB0
ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOwotICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgewotICAgIGNhc2UgQlRfRElHSVQ6Ci0gICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZB
TElEOwotICAgIH0KLSAgICBmb3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRyICE9IGVuZDsgcHRy
ICs9IE1JTkJQQyhlbmMpKSB7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsK
LSAgICAgIGNhc2UgQlRfRElHSVQ6Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBCVF9TRU1J
OgotICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgICByZXR1
cm4gWE1MX1RPS19DSEFSX1JFRjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICpuZXh0VG9rUHRy
ID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgIH0K
LSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi0vKiBwdHIgcG9pbnRzIHRvIGNo
YXJhY3RlciBmb2xsb3dpbmcgIiYiICovCi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNj
YW5SZWYpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAq
ZW5kLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBpZiAo
cHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICBzd2l0Y2ggKEJZVEVf
VFlQRShlbmMsIHB0cikpIHsKLSAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5l
eHRUb2tQdHIpCi0gIGNhc2UgQlRfTlVNOgotICAgIHJldHVybiBQUkVGSVgoc2NhbkNoYXJSZWYp
KGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gIGRlZmF1bHQ6Ci0g
ICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgfQot
ICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkg
ewotICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICBj
YXNlIEJUX1NFTUk6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAg
ICAgcmV0dXJuIFhNTF9UT0tfRU5USVRZX1JFRjsKLSAgICBkZWZhdWx0OgotICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgfQot
ICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi0vKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3Rl
ciBmb2xsb3dpbmcgZmlyc3QgY2hhcmFjdGVyIG9mIGF0dHJpYnV0ZSBuYW1lICovCi0KLXN0YXRp
YyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5BdHRzKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25z
dCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqKm5leHRUb2tQdHIpCi17Ci0jaWZkZWYgWE1MX05TCi0gIGludCBoYWRDb2xvbiA9IDA7Ci0j
ZW5kaWYKLSAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKLSAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIp
Ci0jaWZkZWYgWE1MX05TCi0gICAgY2FzZSBCVF9DT0xPTjoKLSAgICAgIGlmIChoYWRDb2xvbikg
ewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKLSAgICAgIH0KLSAgICAgIGhhZENvbG9uID0gMTsKLSAgICAgIHB0ciArPSBNSU5CUEMo
ZW5jKTsKLSAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOwotICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgICBDSEVDS19O
TVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEJUX1M6IGNhc2UgQlRf
Q1I6IGNhc2UgQlRfTEY6Ci0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCB0OwotCi0gICAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICAg
ICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgdCA9IEJZVEVfVFlQRShlbmMsIHB0
cik7Ci0gICAgICAgIGlmICh0ID09IEJUX0VRVUFMUykKLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgc3dpdGNoICh0KSB7Ci0gICAgICAgIGNhc2UgQlRfUzoKLSAgICAgICAgY2FzZSBCVF9MRjoK
LSAgICAgICAgY2FzZSBCVF9DUjoKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19J
TlZBTElEOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAg
Y2FzZSBCVF9FUVVBTFM6Ci0gICAgICB7Ci0gICAgICAgIGludCBvcGVuOwotI2lmZGVmIFhNTF9O
UwotICAgICAgICBoYWRDb2xvbiA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICBpZiAocHRyID09IGVuZCkKLSAg
ICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgICAgb3BlbiA9IEJZVEVf
VFlQRShlbmMsIHB0cik7Ci0gICAgICAgICAgaWYgKG9wZW4gPT0gQlRfUVVPVCB8fCBvcGVuID09
IEJUX0FQT1MpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBzd2l0Y2ggKG9wZW4pIHsK
LSAgICAgICAgICBjYXNlIEJUX1M6Ci0gICAgICAgICAgY2FzZSBCVF9MRjoKLSAgICAgICAgICBj
YXNlIEJUX0NSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMp
OwotICAgICAgICAvKiBpbiBhdHRyaWJ1dGUgdmFsdWUgKi8KLSAgICAgICAgZm9yICg7Oykgewot
ICAgICAgICAgIGludCB0OwotICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgICB0ID0gQllURV9UWVBFKGVuYywgcHRy
KTsKLSAgICAgICAgICBpZiAodCA9PSBvcGVuKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgc3dpdGNoICh0KSB7Ci0gICAgICAgICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIp
Ci0gICAgICAgICAgY2FzZSBCVF9BTVA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlu
dCB0b2sgPSBQUkVGSVgoc2NhblJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCAmcHRy
KTsKLSAgICAgICAgICAgICAgaWYgKHRvayA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
ayA9PSBYTUxfVE9LX0lOVkFMSUQpCi0gICAgICAgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0
cjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgQlRfTFQ6Ci0gICAg
ICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5j
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRy
KSkgewotICAgICAgICBjYXNlIEJUX1M6Ci0gICAgICAgIGNhc2UgQlRfQ1I6Ci0gICAgICAgIGNh
c2UgQlRfTEY6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQlRfU09MOgotICAgICAg
ICAgIGdvdG8gc29sOwotICAgICAgICBjYXNlIEJUX0dUOgotICAgICAgICAgIGdvdG8gZ3Q7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgICAg
cmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgICAgfQotICAgICAgICAvKiBwdHIgcG9pbnRz
IHRvIGNsb3NpbmcgcXVvdGUgKi8KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICBpZiAocHRyID09IGVuZCkKLSAgICAgICAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBw
dHIpKSB7Ci0gICAgICAgICAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRU
b2tQdHIpCi0gICAgICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgY2FzZSBCVF9HVDoKLSAgICAgICAgICBndDoK
LSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgICAg
ICByZXR1cm4gWE1MX1RPS19TVEFSVF9UQUdfV0lUSF9BVFRTOwotICAgICAgICAgIGNhc2UgQlRf
U09MOgotICAgICAgICAgIHNvbDoKLSAgICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAg
ICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgICAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMOwotICAgICAgICAgICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dU
KSkgewotICAgICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgICAgICAgcmV0
dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpuZXh0VG9r
UHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgICAgICByZXR1cm4gWE1MX1RPS19FTVBU
WV9FTEVNRU5UX1dJVEhfQVRUUzsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKm5l
eHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1
cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFM
OwotfQotCi0vKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjwiICovCi0KLXN0
YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5MdCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29u
c3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFy
ICoqbmV4dFRva1B0cikKLXsKLSNpZmRlZiBYTUxfTlMKLSAgaW50IGhhZENvbG9uOwotI2VuZGlm
Ci0gIGlmIChwdHIgPT0gZW5kKQotICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIs
IGVuZCwgbmV4dFRva1B0cikKLSAgY2FzZSBCVF9FWENMOgotICAgIGlmICgocHRyICs9IE1JTkJQ
QyhlbmMpKSA9PSBlbmQpCi0gICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgIHN3aXRj
aCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIGNhc2UgQlRfTUlOVVM6Ci0gICAgICByZXR1
cm4gUFJFRklYKHNjYW5Db21tZW50KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRU
b2tQdHIpOwotICAgIGNhc2UgQlRfTFNRQjoKLSAgICAgIHJldHVybiBQUkVGSVgoc2NhbkNkYXRh
U2VjdGlvbikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kLCBuZXh0VG9rUHRyKTsKLSAgICB9Ci0gICAgKm5leHRUb2tQdHIg
PSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgY2FzZSBCVF9RVUVTVDoKLSAg
ICByZXR1cm4gUFJFRklYKHNjYW5QaSkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0
VG9rUHRyKTsKLSAgY2FzZSBCVF9TT0w6Ci0gICAgcmV0dXJuIFBSRUZJWChzY2FuRW5kVGFnKShl
bmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOwotICBkZWZhdWx0OgotICAg
ICpuZXh0VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gIH0KLSNp
ZmRlZiBYTUxfTlMKLSAgaGFkQ29sb24gPSAwOwotI2VuZGlmCi0gIC8qIHdlIGhhdmUgYSBzdGFy
dC10YWcgKi8KLSAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKLSAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQ
dHIpCi0jaWZkZWYgWE1MX05TCi0gICAgY2FzZSBCVF9DT0xPTjoKLSAgICAgIGlmIChoYWRDb2xv
bikgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tf
SU5WQUxJRDsKLSAgICAgIH0KLSAgICAgIGhhZENvbG9uID0gMTsKLSAgICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKLSAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMOwotICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgICBDSEVD
S19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZB
TElEOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEJUX1M6IGNhc2Ug
QlRfQ1I6IGNhc2UgQlRfTEY6Ci0gICAgICB7Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
LSAgICAgICAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICAgICAgICBzd2l0Y2ggKEJZVEVfVFlQ
RShlbmMsIHB0cikpIHsKLSAgICAgICAgICBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVu
ZCwgbmV4dFRva1B0cikKLSAgICAgICAgICBjYXNlIEJUX0dUOgotICAgICAgICAgICAgZ290byBn
dDsKLSAgICAgICAgICBjYXNlIEJUX1NPTDoKLSAgICAgICAgICAgIGdvdG8gc29sOwotICAgICAg
ICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKLSAgICAgICAgICAgIHB0ciAr
PSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgICAgIHJldHVybiBYTUxf
VE9LX0lOVkFMSUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBQUkVGSVgoc2NhbkF0
dHMpKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICB9Ci0gICAgY2FzZSBCVF9HVDoKLSAgICBndDoKLSAg
ICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RP
S19TVEFSVF9UQUdfTk9fQVRUUzsKLSAgICBjYXNlIEJUX1NPTDoKLSAgICBzb2w6Ci0gICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBpZiAocHRyID09IGVuZCkKLSAgICAgICAgcmV0dXJu
IFhNTF9UT0tfUEFSVElBTDsKLSAgICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJ
SV9HVCkpIHsKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxf
VE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhl
bmMpOwotICAgICAgcmV0dXJuIFhNTF9UT0tfRU1QVFlfRUxFTUVOVF9OT19BVFRTOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19Ci0KLXN0YXRp
YyBpbnQgUFRSQ0FMTAotUFJFRklYKGNvbnRlbnRUb2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNv
bnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1M
X1RPS19OT05FOwotICBpZiAoTUlOQlBDKGVuYykgPiAxKSB7Ci0gICAgc2l6ZV90IG4gPSBlbmQg
LSBwdHI7Ci0gICAgaWYgKG4gJiAoTUlOQlBDKGVuYykgLSAxKSkgewotICAgICAgbiAmPSB+KE1J
TkJQQyhlbmMpIC0gMSk7Ci0gICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOwotICAgICAgZW5kID0gcHRyICsgbjsKLSAgICB9Ci0gIH0KLSAgc3dpdGNoIChC
WVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gIGNhc2UgQlRfTFQ6Ci0gICAgcmV0dXJuIFBSRUZJWChz
Y2FuTHQpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gIGNhc2Ug
QlRfQU1QOgotICAgIHJldHVybiBQUkVGSVgoc2NhblJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5j
KSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgY2FzZSBCVF9DUjoKLSAgICBwdHIgKz0gTUlOQlBDKGVu
Yyk7Ci0gICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElOR19D
UjsKLSAgICBpZiAoQllURV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKLSAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19E
QVRBX05FV0xJTkU7Ci0gIGNhc2UgQlRfTEY6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5C
UEMoZW5jKTsKLSAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Ci0gIGNhc2UgQlRfUlNR
QjoKLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICBy
ZXR1cm4gWE1MX1RPS19UUkFJTElOR19SU1FCOwotICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywg
cHRyLCBBU0NJSV9SU1FCKSkKLSAgICAgIGJyZWFrOwotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
LSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIHJldHVybiBYTUxfVE9LX1RSQUlMSU5HX1JTUUI7
Ci0gICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkgewotICAgICAgcHRy
IC09IE1JTkJQQyhlbmMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgICpuZXh0VG9rUHRyID0g
cHRyOwotICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gIElOVkFMSURfQ0FTRVMocHRyLCBu
ZXh0VG9rUHRyKQotICBkZWZhdWx0OgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBicmVh
azsKLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVu
YywgcHRyKSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBu
OiBcCi0gICAgICBpZiAoZW5kIC0gcHRyIDwgbiB8fCBJU19JTlZBTElEX0NIQVIoZW5jLCBwdHIs
IG4pKSB7IFwKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7IFwKLSAgICAgICAgcmV0dXJuIFhN
TF9UT0tfREFUQV9DSEFSUzsgXAotICAgICAgfSBcCi0gICAgICBwdHIgKz0gbjsgXAotICAgICAg
YnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKLSN1bmRl
ZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJUX1JTUUI6Ci0gICAgICBpZiAocHRyICsgTUlOQlBDKGVu
YykgIT0gZW5kKSB7Ci0gICAgICAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciArIE1JTkJQ
QyhlbmMpLCBBU0NJSV9SU1FCKSkgewotICAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0g
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgICAgaWYgKHB0ciArIDIqTUlOQlBD
KGVuYykgIT0gZW5kKSB7Ci0gICAgICAgICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyICsg
MipNSU5CUEMoZW5jKSwgQVNDSUlfR1QpKSB7Ci0gICAgICAgICAgICAgcHRyICs9IE1JTkJQQyhl
bmMpOwotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICB9Ci0gICAgICAgICAgICpuZXh0
VG9rUHRyID0gcHRyICsgMipNSU5CUEMoZW5jKTsKLSAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tf
SU5WQUxJRDsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwot
ICAgIGNhc2UgQlRfQU1QOgotICAgIGNhc2UgQlRfTFQ6Ci0gICAgY2FzZSBCVF9OT05YTUw6Ci0g
ICAgY2FzZSBCVF9NQUxGT1JNOgotICAgIGNhc2UgQlRfVFJBSUw6Ci0gICAgY2FzZSBCVF9DUjoK
LSAgICBjYXNlIEJUX0xGOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4g
WE1MX1RPS19EQVRBX0NIQVJTOwotICAgIGRlZmF1bHQ6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVu
Yyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gIHJl
dHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci19Ci0KLS8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVy
IGZvbGxvd2luZyAiJSIgKi8KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2NhblBlcmNl
bnQpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5k
LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgaWYg
KHB0ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7Ci0gIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBu
ZXh0VG9rUHRyKQotICBjYXNlIEJUX1M6IGNhc2UgQlRfTEY6IGNhc2UgQlRfQ1I6IGNhc2UgQlRf
UEVSQ05UOgotICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX1BFUkNF
TlQ7Ci0gIGRlZmF1bHQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9U
T0tfSU5WQUxJRDsKLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllU
RV9UWVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwg
bmV4dFRva1B0cikKLSAgICBjYXNlIEJUX1NFTUk6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0ciAr
IE1JTkJQQyhlbmMpOwotICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSQU1fRU5USVRZX1JFRjsKLSAg
ICBkZWZhdWx0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RP
S19JTlZBTElEOwotICAgIH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi1z
dGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChzY2FuUG91bmROYW1lKShjb25zdCBFTkNPRElORyAq
ZW5jLCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgaWYgKHB0ciA9PSBlbmQpCi0gICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7
Ci0gIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICBkZWZh
dWx0OgotICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7
Ci0gIH0KLSAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKLSAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIp
Ci0gICAgY2FzZSBCVF9DUjogY2FzZSBCVF9MRjogY2FzZSBCVF9TOgotICAgIGNhc2UgQlRfUlBB
UjogY2FzZSBCVF9HVDogY2FzZSBCVF9QRVJDTlQ6IGNhc2UgQlRfVkVSQkFSOgotICAgICAgKm5l
eHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19QT1VORF9OQU1FOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiAtWE1MX1RPS19QT1VORF9OQU1FOwotfQotCi1z
dGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChzY2FuTGl0KShpbnQgb3BlbiwgY29uc3QgRU5DT0RJ
TkcgKmVuYywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVu
ZCwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgd2hpbGUg
KHB0ciAhPSBlbmQpIHsKLSAgICBpbnQgdCA9IEJZVEVfVFlQRShlbmMsIHB0cik7Ci0gICAgc3dp
dGNoICh0KSB7Ci0gICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpCi0gICAgY2FzZSBC
VF9RVU9UOgotICAgIGNhc2UgQlRfQVBPUzoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAg
ICAgIGlmICh0ICE9IG9wZW4pCi0gICAgICAgIGJyZWFrOwotICAgICAgaWYgKHB0ciA9PSBlbmQp
Ci0gICAgICAgIHJldHVybiAtWE1MX1RPS19MSVRFUkFMOwotICAgICAgKm5leHRUb2tQdHIgPSBw
dHI7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICAgIGNhc2UgQlRf
UzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKLSAgICAgIGNhc2UgQlRfR1Q6IGNhc2UgQlRfUEVS
Q05UOiBjYXNlIEJUX0xTUUI6Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0xJVEVSQUw7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAg
IGRlZmF1bHQ6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gIH0KLSAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLX0KLQotc3RhdGljIGludCBQVFJDQUxM
Ci1QUkVGSVgocHJvbG9nVG9rKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIs
IGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9r
UHRyKQotewotICBpbnQgdG9rOwotICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RP
S19OT05FOwotICBpZiAoTUlOQlBDKGVuYykgPiAxKSB7Ci0gICAgc2l6ZV90IG4gPSBlbmQgLSBw
dHI7Ci0gICAgaWYgKG4gJiAoTUlOQlBDKGVuYykgLSAxKSkgewotICAgICAgbiAmPSB+KE1JTkJQ
QyhlbmMpIC0gMSk7Ci0gICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMOwotICAgICAgZW5kID0gcHRyICsgbjsKLSAgICB9Ci0gIH0KLSAgc3dpdGNoIChCWVRF
X1RZUEUoZW5jLCBwdHIpKSB7Ci0gIGNhc2UgQlRfUVVPVDoKLSAgICByZXR1cm4gUFJFRklYKHNj
YW5MaXQpKEJUX1FVT1QsIGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7
Ci0gIGNhc2UgQlRfQVBPUzoKLSAgICByZXR1cm4gUFJFRklYKHNjYW5MaXQpKEJUX0FQT1MsIGVu
YywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gIGNhc2UgQlRfTFQ6Ci0g
ICAgewotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYgKHB0ciA9PSBlbmQpCi0g
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKLSAgICAgIGNhc2UgQlRfRVhDTDoKLSAgICAgICAgcmV0dXJuIFBSRUZJWChz
Y2FuRGVjbCkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgICAg
IGNhc2UgQlRfUVVFU1Q6Ci0gICAgICAgIHJldHVybiBQUkVGSVgoc2NhblBpKShlbmMsIHB0ciAr
IE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOwotICAgICAgY2FzZSBCVF9OTVNUUlQ6Ci0g
ICAgICBjYXNlIEJUX0hFWDoKLSAgICAgIGNhc2UgQlRfTk9OQVNDSUk6Ci0gICAgICBjYXNlIEJU
X0xFQUQyOgotICAgICAgY2FzZSBCVF9MRUFEMzoKLSAgICAgIGNhc2UgQlRfTEVBRDQ6Ci0gICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyIC0gTUlOQlBDKGVuYyk7Ci0gICAgICAgIHJldHVybiBYTUxf
VE9LX0lOU1RBTkNFX1NUQVJUOwotICAgICAgfQotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0g
ICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgY2FzZSBCVF9DUjoKLSAgICBp
ZiAocHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKSB7Ci0gICAgICAqbmV4dFRva1B0ciA9IGVuZDsK
LSAgICAgIC8qIGluZGljYXRlIHRoYXQgdGhpcyBtaWdodCBiZSBwYXJ0IG9mIGEgQ1IvTEYgcGFp
ciAqLwotICAgICAgcmV0dXJuIC1YTUxfVE9LX1BST0xPR19TOwotICAgIH0KLSAgICAvKiBmYWxs
IHRocm91Z2ggKi8KLSAgY2FzZSBCVF9TOiBjYXNlIEJUX0xGOgotICAgIGZvciAoOzspIHsKLSAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICBi
cmVhazsKLSAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgY2FzZSBC
VF9TOiBjYXNlIEJUX0xGOgotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQlRfQ1I6Ci0gICAg
ICAgIC8qIGRvbid0IHNwbGl0IENSL0xGIHBhaXIgKi8KLSAgICAgICAgaWYgKHB0ciArIE1JTkJQ
QyhlbmMpICE9IGVuZCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgLyogZmFsbCB0aHJvdWdo
ICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUFJPTE9HX1M7Ci0gICAgICB9Ci0gICAgfQotICAgICpuZXh0VG9rUHRy
ID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX1BST0xPR19TOwotICBjYXNlIEJUX1BFUkNOVDoK
LSAgICByZXR1cm4gUFJFRklYKHNjYW5QZXJjZW50KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBl
bmQsIG5leHRUb2tQdHIpOwotICBjYXNlIEJUX0NPTU1BOgotICAgICpuZXh0VG9rUHRyID0gcHRy
ICsgTUlOQlBDKGVuYyk7Ci0gICAgcmV0dXJuIFhNTF9UT0tfQ09NTUE7Ci0gIGNhc2UgQlRfTFNR
QjoKLSAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgIHJldHVybiBYTUxf
VE9LX09QRU5fQlJBQ0tFVDsKLSAgY2FzZSBCVF9SU1FCOgotICAgIHB0ciArPSBNSU5CUEMoZW5j
KTsKLSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIHJldHVybiAtWE1MX1RPS19DTE9TRV9CUkFD
S0VUOwotICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX1JTUUIpKSB7Ci0gICAg
ICBpZiAocHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMOwotICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBB
U0NJSV9HVCkpIHsKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyAyKk1JTkJQQyhlbmMpOwot
ICAgICAgICByZXR1cm4gWE1MX1RPS19DT05EX1NFQ1RfQ0xPU0U7Ci0gICAgICB9Ci0gICAgfQot
ICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX0NMT1NFX0JSQUNLRVQ7
Ci0gIGNhc2UgQlRfTFBBUjoKLSAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwot
ICAgIHJldHVybiBYTUxfVE9LX09QRU5fUEFSRU47Ci0gIGNhc2UgQlRfUlBBUjoKLSAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7Ci0gICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICByZXR1cm4gLVhNTF9U
T0tfQ0xPU0VfUEFSRU47Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAg
Y2FzZSBCVF9BU1Q6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAg
ICAgcmV0dXJuIFhNTF9UT0tfQ0xPU0VfUEFSRU5fQVNURVJJU0s7Ci0gICAgY2FzZSBCVF9RVUVT
VDoKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4g
WE1MX1RPS19DTE9TRV9QQVJFTl9RVUVTVElPTjsKLSAgICBjYXNlIEJUX1BMVVM6Ci0gICAgICAq
bmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgcmV0dXJuIFhNTF9UT0tfQ0xP
U0VfUEFSRU5fUExVUzsKLSAgICBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOiBjYXNlIEJUX1M6Ci0g
ICAgY2FzZSBCVF9HVDogY2FzZSBCVF9DT01NQTogY2FzZSBCVF9WRVJCQVI6Ci0gICAgY2FzZSBC
VF9SUEFSOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19D
TE9TRV9QQVJFTjsKLSAgICB9Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhN
TF9UT0tfSU5WQUxJRDsKLSAgY2FzZSBCVF9WRVJCQVI6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIg
KyBNSU5CUEMoZW5jKTsKLSAgICByZXR1cm4gWE1MX1RPS19PUjsKLSAgY2FzZSBCVF9HVDoKLSAg
ICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgIHJldHVybiBYTUxfVE9LX0RF
Q0xfQ0xPU0U7Ci0gIGNhc2UgQlRfTlVNOgotICAgIHJldHVybiBQUkVGSVgoc2NhblBvdW5kTmFt
ZSkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSNkZWZpbmUgTEVB
RF9DQVNFKG4pIFwKLSAgY2FzZSBCVF9MRUFEICMjIG46IFwKLSAgICBpZiAoZW5kIC0gcHRyIDwg
bikgXAotICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTF9DSEFSOyBcCi0gICAgaWYgKElTX05N
U1RSVF9DSEFSKGVuYywgcHRyLCBuKSkgeyBcCi0gICAgICBwdHIgKz0gbjsgXAotICAgICAgdG9r
ID0gWE1MX1RPS19OQU1FOyBcCi0gICAgICBicmVhazsgXAotICAgIH0gXAotICAgIGlmIChJU19O
QU1FX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKLSAgICAgIHB0ciArPSBuOyBcCi0gICAgICB0b2sg
PSBYTUxfVE9LX05NVE9LRU47IFwKLSAgICAgIGJyZWFrOyBcCi0gICAgfSBcCi0gICAgKm5leHRU
b2tQdHIgPSBwdHI7IFwKLSAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIExFQURfQ0FT
RSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDQpCi0jdW5kZWYgTEVBRF9DQVNFCi0gIGNhc2Ug
QlRfTk1TVFJUOgotICBjYXNlIEJUX0hFWDoKLSAgICB0b2sgPSBYTUxfVE9LX05BTUU7Ci0gICAg
cHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGJyZWFrOwotICBjYXNlIEJUX0RJR0lUOgotICBjYXNl
IEJUX05BTUU6Ci0gIGNhc2UgQlRfTUlOVVM6Ci0jaWZkZWYgWE1MX05TCi0gIGNhc2UgQlRfQ09M
T046Ci0jZW5kaWYKLSAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47Ci0gICAgcHRyICs9IE1JTkJQ
QyhlbmMpOwotICAgIGJyZWFrOwotICBjYXNlIEJUX05PTkFTQ0lJOgotICAgIGlmIChJU19OTVNU
UlRfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0g
ICAgICB0b2sgPSBYTUxfVE9LX05BTUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKElT
X05BTUVfQ0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7
Ci0gICAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAg
LyogZmFsbCB0aHJvdWdoICovCi0gIGRlZmF1bHQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0g
ICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewot
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMo
ZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICBjYXNlIEJUX0dUOiBjYXNlIEJUX1JQQVI6
IGNhc2UgQlRfQ09NTUE6Ci0gICAgY2FzZSBCVF9WRVJCQVI6IGNhc2UgQlRfTFNRQjogY2FzZSBC
VF9QRVJDTlQ6Ci0gICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAgICAg
Km5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gdG9rOwotI2lmZGVmIFhNTF9OUwotICAg
IGNhc2UgQlRfQ09MT046Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBzd2l0Y2gg
KHRvaykgewotICAgICAgY2FzZSBYTUxfVE9LX05BTUU6Ci0gICAgICAgIGlmIChwdHIgPT0gZW5k
KQotICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgIHRvayA9IFhNTF9U
T0tfUFJFRklYRURfTkFNRTsKLSAgICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7
Ci0gICAgICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0b2sgPSBYTUxfVE9LX05NVE9LRU47Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhNTF9UT0tf
UFJFRklYRURfTkFNRToKLSAgICAgICAgdG9rID0gWE1MX1RPS19OTVRPS0VOOwotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBCVF9QTFVTOgot
ICAgICAgaWYgKHRvayA9PSBYTUxfVE9LX05NVE9LRU4pICB7Ci0gICAgICAgICpuZXh0VG9rUHRy
ID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAg
Km5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgIHJldHVybiBYTUxfVE9LX05B
TUVfUExVUzsKLSAgICBjYXNlIEJUX0FTVDoKLSAgICAgIGlmICh0b2sgPT0gWE1MX1RPS19OTVRP
S0VOKSAgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9U
T0tfSU5WQUxJRDsKLSAgICAgIH0KLSAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVu
Yyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19OQU1FX0FTVEVSSVNLOwotICAgIGNhc2UgQlRfUVVF
U1Q6Ci0gICAgICBpZiAodG9rID09IFhNTF9UT0tfTk1UT0tFTikgIHsKLSAgICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0g
ICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgcmV0dXJuIFhNTF9U
T0tfTkFNRV9RVUVTVElPTjsKLSAgICBkZWZhdWx0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7
Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgIH0KLSAgfQotICByZXR1cm4gLXRv
azsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoYXR0cmlidXRlVmFsdWVUb2spKGNv
bnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgY29u
c3QgY2hhciAqc3RhcnQ7Ci0gIGlmIChwdHIgPT0gZW5kKQotICAgIHJldHVybiBYTUxfVE9LX05P
TkU7Ci0gIHN0YXJ0ID0gcHRyOwotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAo
QllURV9UWVBFKGVuYywgcHRyKSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICAgIGNhc2Ug
QlRfTEVBRCAjIyBuOiBwdHIgKz0gbjsgYnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FT
RSgzKSBMRUFEX0NBU0UoNCkKLSN1bmRlZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJUX0FNUDoKLSAg
ICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgIHJldHVybiBQUkVGSVgoc2NhblJlZikoZW5j
LCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgICAgICpuZXh0VG9rUHRy
ID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBjYXNlIEJUX0xU
OgotICAgICAgLyogdGhpcyBpcyBmb3IgaW5zaWRlIGVudGl0eSByZWZlcmVuY2VzICovCi0gICAg
ICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAg
Y2FzZSBCVF9MRjoKLSAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKLSAgICAgICAgKm5leHRUb2tQ
dHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdM
SU5FOwotICAgICAgfQotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1M
X1RPS19EQVRBX0NIQVJTOwotICAgIGNhc2UgQlRfQ1I6Ci0gICAgICBpZiAocHRyID09IHN0YXJ0
KSB7Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgaWYgKHB0ciA9PSBlbmQp
Ci0gICAgICAgICAgcmV0dXJuIFhNTF9UT0tfVFJBSUxJTkdfQ1I7Ci0gICAgICAgIGlmIChCWVRF
X1RZUEUoZW5jLCBwdHIpID09IEJUX0xGKQotICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
LSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFf
TkVXTElORTsKLSAgICAgIH0KLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJu
IFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBjYXNlIEJUX1M6Ci0gICAgICBpZiAocHRyID09IHN0
YXJ0KSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAg
IHJldHVybiBYTUxfVE9LX0FUVFJJQlVURV9WQUxVRV9TOwotICAgICAgfQotICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOwotICAgIGRlZmF1
bHQ6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0K
LSAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci19Ci0K
LXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKGVudGl0eVZhbHVlVG9rKShjb25zdCBFTkNPRElO
RyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGNvbnN0IGNoYXIgKnN0YXJ0
OwotICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RPS19OT05FOwotICBzdGFydCA9
IHB0cjsKLSAgd2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKLSNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKLSAgICBjYXNlIEJUX0xFQUQgIyMgbjog
cHRyICs9IG47IGJyZWFrOwotICAgIExFQURfQ0FTRSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNF
KDQpCi0jdW5kZWYgTEVBRF9DQVNFCi0gICAgY2FzZSBCVF9BTVA6Ci0gICAgICBpZiAocHRyID09
IHN0YXJ0KQotICAgICAgICByZXR1cm4gUFJFRklYKHNjYW5SZWYpKGVuYywgcHRyICsgTUlOQlBD
KGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAg
IHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci0gICAgY2FzZSBCVF9QRVJDTlQ6Ci0gICAgICBp
ZiAocHRyID09IHN0YXJ0KSB7Ci0gICAgICAgIGludCB0b2sgPSAgUFJFRklYKHNjYW5QZXJjZW50
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kLCBuZXh0VG9rUHRyKTsKLSAgICAgICAgcmV0dXJuICh0b2sgPT0gWE1MX1RP
S19QRVJDRU5UKSA/IFhNTF9UT0tfSU5WQUxJRCA6IHRvazsKLSAgICAgIH0KLSAgICAgICpuZXh0
VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBjYXNl
IEJUX0xGOgotICAgICAgaWYgKHB0ciA9PSBzdGFydCkgewotICAgICAgICAqbmV4dFRva1B0ciA9
IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7
Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9L
X0RBVEFfQ0hBUlM7Ci0gICAgY2FzZSBCVF9DUjoKLSAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsK
LSAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICBpZiAocHRyID09IGVuZCkKLSAg
ICAgICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElOR19DUjsKLSAgICAgICAgaWYgKEJZVEVfVFlQ
RShlbmMsIHB0cikgPT0gQlRfTEYpCi0gICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAg
ICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdM
SU5FOwotICAgICAgfQotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1M
X1RPS19EQVRBX0NIQVJTOwotICAgIGRlZmF1bHQ6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gIHJldHVy
biBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci19Ci0KLSNpZmRlZiBYTUxfRFRECi0KLXN0YXRpYyBpbnQg
UFRSQ0FMTAotUFJFRklYKGlnbm9yZVNlY3Rpb25Ub2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNv
bnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQs
IGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBpbnQgbGV2ZWwgPSAwOwotICBpZiAoTUlO
QlBDKGVuYykgPiAxKSB7Ci0gICAgc2l6ZV90IG4gPSBlbmQgLSBwdHI7Ci0gICAgaWYgKG4gJiAo
TUlOQlBDKGVuYykgLSAxKSkgewotICAgICAgbiAmPSB+KE1JTkJQQyhlbmMpIC0gMSk7Ci0gICAg
ICBlbmQgPSBwdHIgKyBuOwotICAgIH0KLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIElOVkFMSURfQ0FTRVMocHRyLCBu
ZXh0VG9rUHRyKQotICAgIGNhc2UgQlRfTFQ6Ci0gICAgICBpZiAoKHB0ciArPSBNSU5CUEMoZW5j
KSkgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgaWYgKENI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfRVhDTCkpIHsKLSAgICAgICAgaWYgKChwdHIgKz0g
TUlOQlBDKGVuYykpID09IGVuZCkKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwot
ICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9MU1FCKSkgewotICAgICAg
ICAgICsrbGV2ZWw7Ci0gICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEJUX1JTUUI6Ci0gICAgICBpZiAoKHB0ciAr
PSBNSU5CUEMoZW5jKSkgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwot
ICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfUlNRQikpIHsKLSAgICAgICAg
aWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09IGVuZCkKLSAgICAgICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOwotICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9HVCkp
IHsKLSAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgICAgaWYgKGxldmVsID09
IDApIHsKLSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICAgICAgcmV0dXJu
IFhNTF9UT0tfSUdOT1JFX1NFQ1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIC0tbGV2ZWw7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFhNTF9U
T0tfUEFSVElBTDsKLX0KLQotI2VuZGlmIC8qIFhNTF9EVEQgKi8KLQotc3RhdGljIGludCBQVFJD
QUxMCi1QUkVGSVgoaXNQdWJsaWNJZCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAq
cHRyLCBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmJh
ZFB0cikKLXsKLSAgcHRyICs9IE1JTkJQQyhlbmMpOwotICBlbmQgLT0gTUlOQlBDKGVuYyk7Ci0g
IGZvciAoOyBwdHIgIT0gZW5kOyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKLSAgICBzd2l0Y2ggKEJZ
VEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICBjYXNlIEJUX0RJR0lUOgotICAgIGNhc2UgQlRfSEVY
OgotICAgIGNhc2UgQlRfTUlOVVM6Ci0gICAgY2FzZSBCVF9BUE9TOgotICAgIGNhc2UgQlRfTFBB
UjoKLSAgICBjYXNlIEJUX1JQQVI6Ci0gICAgY2FzZSBCVF9QTFVTOgotICAgIGNhc2UgQlRfQ09N
TUE6Ci0gICAgY2FzZSBCVF9TT0w6Ci0gICAgY2FzZSBCVF9FUVVBTFM6Ci0gICAgY2FzZSBCVF9R
VUVTVDoKLSAgICBjYXNlIEJUX0NSOgotICAgIGNhc2UgQlRfTEY6Ci0gICAgY2FzZSBCVF9TRU1J
OgotICAgIGNhc2UgQlRfRVhDTDoKLSAgICBjYXNlIEJUX0FTVDoKLSAgICBjYXNlIEJUX1BFUkNO
VDoKLSAgICBjYXNlIEJUX05VTToKLSNpZmRlZiBYTUxfTlMKLSAgICBjYXNlIEJUX0NPTE9OOgot
I2VuZGlmCi0gICAgICBicmVhazsKLSAgICBjYXNlIEJUX1M6Ci0gICAgICBpZiAoQ0hBUl9NQVRD
SEVTKGVuYywgcHRyLCBBU0NJSV9UQUIpKSB7Ci0gICAgICAgICpiYWRQdHIgPSBwdHI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCVF9OQU1FOgot
ICAgIGNhc2UgQlRfTk1TVFJUOgotICAgICAgaWYgKCEoQllURV9UT19BU0NJSShlbmMsIHB0cikg
JiB+MHg3ZikpCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBzd2l0Y2ggKEJZ
VEVfVE9fQVNDSUkoZW5jLCBwdHIpKSB7Ci0gICAgICBjYXNlIDB4MjQ6IC8qICQgKi8KLSAgICAg
IGNhc2UgMHg0MDogLyogQCAqLwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICpiYWRQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgYnJl
YWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQotCi0vKiBUaGlzIG11c3Qgb25seSBiZSBj
YWxsZWQgZm9yIGEgd2VsbC1mb3JtZWQgc3RhcnQtdGFnIG9yIGVtcHR5Ci0gICBlbGVtZW50IHRh
Zy4gIFJldHVybnMgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLiAgUG9pbnRlcnMgdG8gdGhlCi0g
ICBmaXJzdCBhdHRzTWF4IGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBhdHRzLgotKi8KLQotc3Rh
dGljIGludCBQVFJDQUxMCi1QUkVGSVgoZ2V0QXR0cykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29u
c3QgY2hhciAqcHRyLAotICAgICAgICAgICAgICAgIGludCBhdHRzTWF4LCBBVFRSSUJVVEUgKmF0
dHMpCi17Ci0gIGVudW0geyBvdGhlciwgaW5OYW1lLCBpblZhbHVlIH0gc3RhdGUgPSBpbk5hbWU7
Ci0gIGludCBuQXR0cyA9IDA7Ci0gIGludCBvcGVuID0gMDsgLyogZGVmaW5lZCB3aGVuIHN0YXRl
ID09IGluVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24ganVzdCB0byBz
aHV0IHVwIGNvbXBpbGVycyAqLwotCi0gIGZvciAocHRyICs9IE1JTkJQQyhlbmMpOzsgcHRyICs9
IE1JTkJQQyhlbmMpKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0jZGVm
aW5lIFNUQVJUX05BTUUgXAotICAgICAgaWYgKHN0YXRlID09IG90aGVyKSB7IFwKLSAgICAgICAg
aWYgKG5BdHRzIDwgYXR0c01heCkgeyBcCi0gICAgICAgICAgYXR0c1tuQXR0c10ubmFtZSA9IHB0
cjsgXAotICAgICAgICAgIGF0dHNbbkF0dHNdLm5vcm1hbGl6ZWQgPSAxOyBcCi0gICAgICAgIH0g
XAotICAgICAgICBzdGF0ZSA9IGluTmFtZTsgXAotICAgICAgfQotI2RlZmluZSBMRUFEX0NBU0Uo
bikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBTVEFSVF9OQU1FIHB0ciArPSAobiAtIE1JTkJQ
QyhlbmMpKTsgYnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0Uo
NCkKLSN1bmRlZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJUX05PTkFTQ0lJOgotICAgIGNhc2UgQlRf
Tk1TVFJUOgotICAgIGNhc2UgQlRfSEVYOgotICAgICAgU1RBUlRfTkFNRQotICAgICAgYnJlYWs7
Ci0jdW5kZWYgU1RBUlRfTkFNRQotICAgIGNhc2UgQlRfUVVPVDoKLSAgICAgIGlmIChzdGF0ZSAh
PSBpblZhbHVlKSB7Ci0gICAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCi0gICAgICAgICAgYXR0
c1tuQXR0c10udmFsdWVQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgICAgc3RhdGUgPSBp
blZhbHVlOwotICAgICAgICBvcGVuID0gQlRfUVVPVDsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KG9wZW4gPT0gQlRfUVVPVCkgewotICAgICAgICBzdGF0ZSA9IG90aGVyOwotICAgICAgICBpZiAo
bkF0dHMgPCBhdHRzTWF4KQotICAgICAgICAgIGF0dHNbbkF0dHNdLnZhbHVlRW5kID0gcHRyOwot
ICAgICAgICBuQXR0cysrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCVF9BUE9T
OgotICAgICAgaWYgKHN0YXRlICE9IGluVmFsdWUpIHsKLSAgICAgICAgaWYgKG5BdHRzIDwgYXR0
c01heCkKLSAgICAgICAgICBhdHRzW25BdHRzXS52YWx1ZVB0ciA9IHB0ciArIE1JTkJQQyhlbmMp
OwotICAgICAgICBzdGF0ZSA9IGluVmFsdWU7Ci0gICAgICAgIG9wZW4gPSBCVF9BUE9TOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAob3BlbiA9PSBCVF9BUE9TKSB7Ci0gICAgICAgIHN0YXRlID0g
b3RoZXI7Ci0gICAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCi0gICAgICAgICAgYXR0c1tuQXR0
c10udmFsdWVFbmQgPSBwdHI7Ci0gICAgICAgIG5BdHRzKys7Ci0gICAgICB9Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIEJUX0FNUDoKLSAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCi0gICAgICAg
IGF0dHNbbkF0dHNdLm5vcm1hbGl6ZWQgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCVF9T
OgotICAgICAgaWYgKHN0YXRlID09IGluTmFtZSkKLSAgICAgICAgc3RhdGUgPSBvdGhlcjsKLSAg
ICAgIGVsc2UgaWYgKHN0YXRlID09IGluVmFsdWUKLSAgICAgICAgICAgICAgICYmIG5BdHRzIDwg
YXR0c01heAotICAgICAgICAgICAgICAgJiYgYXR0c1tuQXR0c10ubm9ybWFsaXplZAotICAgICAg
ICAgICAgICAgJiYgKHB0ciA9PSBhdHRzW25BdHRzXS52YWx1ZVB0cgotICAgICAgICAgICAgICAg
ICAgIHx8IEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpICE9IEFTQ0lJX1NQQUNFCi0gICAgICAgICAg
ICAgICAgICAgfHwgQllURV9UT19BU0NJSShlbmMsIHB0ciArIE1JTkJQQyhlbmMpKSA9PSBBU0NJ
SV9TUEFDRQotICAgICAgICAgICAgICAgICAgIHx8IEJZVEVfVFlQRShlbmMsIHB0ciArIE1JTkJQ
QyhlbmMpKSA9PSBvcGVuKSkKLSAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFsaXplZCA9IDA7Ci0g
ICAgICBicmVhazsKLSAgICBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAgICAgLyogVGhpcyBj
YXNlIGVuc3VyZXMgdGhhdCB0aGUgZmlyc3QgYXR0cmlidXRlIG5hbWUgaXMgY291bnRlZAotICAg
ICAgICAgQXBhcnQgZnJvbSB0aGF0IHdlIGNvdWxkIGp1c3QgY2hhbmdlIHN0YXRlIG9uIHRoZSBx
dW90ZS4gKi8KLSAgICAgIGlmIChzdGF0ZSA9PSBpbk5hbWUpCi0gICAgICAgIHN0YXRlID0gb3Ro
ZXI7Ci0gICAgICBlbHNlIGlmIChzdGF0ZSA9PSBpblZhbHVlICYmIG5BdHRzIDwgYXR0c01heCkK
LSAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFsaXplZCA9IDA7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIEJUX0dUOgotICAgIGNhc2UgQlRfU09MOgotICAgICAgaWYgKHN0YXRlICE9IGluVmFsdWUp
Ci0gICAgICAgIHJldHVybiBuQXR0czsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgLyogbm90IHJlYWNoZWQgKi8KLX0KLQotc3RhdGljIGlu
dCBQVFJGQVNUQ0FMTAotUFJFRklYKGNoYXJSZWZOdW1iZXIpKGNvbnN0IEVOQ09ESU5HICplbmMs
IGNvbnN0IGNoYXIgKnB0cikKLXsKLSAgaW50IHJlc3VsdCA9IDA7Ci0gIC8qIHNraXAgJiMgKi8K
LSAgcHRyICs9IDIqTUlOQlBDKGVuYyk7Ci0gIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFT
Q0lJX3gpKSB7Ci0gICAgZm9yIChwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgICAhQ0hBUl9N
QVRDSEVTKGVuYywgcHRyLCBBU0NJSV9TRU1JKTsKLSAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5j
KSkgewotICAgICAgaW50IGMgPSBCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKTsKLSAgICAgIHN3aXRj
aCAoYykgewotICAgICAgY2FzZSBBU0NJSV8wOiBjYXNlIEFTQ0lJXzE6IGNhc2UgQVNDSUlfMjog
Y2FzZSBBU0NJSV8zOiBjYXNlIEFTQ0lJXzQ6Ci0gICAgICBjYXNlIEFTQ0lJXzU6IGNhc2UgQVND
SUlfNjogY2FzZSBBU0NJSV83OiBjYXNlIEFTQ0lJXzg6IGNhc2UgQVNDSUlfOToKLSAgICAgICAg
cmVzdWx0IDw8PSA0OwotICAgICAgICByZXN1bHQgfD0gKGMgLSBBU0NJSV8wKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEFTQ0lJX0E6IGNhc2UgQVNDSUlfQjogY2FzZSBBU0NJSV9DOgot
ICAgICAgY2FzZSBBU0NJSV9EOiBjYXNlIEFTQ0lJX0U6IGNhc2UgQVNDSUlfRjoKLSAgICAgICAg
cmVzdWx0IDw8PSA0OwotICAgICAgICByZXN1bHQgKz0gMTAgKyAoYyAtIEFTQ0lJX0EpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgQVNDSUlfYTogY2FzZSBBU0NJSV9iOiBjYXNlIEFTQ0lJ
X2M6Ci0gICAgICBjYXNlIEFTQ0lJX2Q6IGNhc2UgQVNDSUlfZTogY2FzZSBBU0NJSV9mOgotICAg
ICAgICByZXN1bHQgPDw9IDQ7Ci0gICAgICAgIHJlc3VsdCArPSAxMCArIChjIC0gQVNDSUlfYSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKHJlc3VsdCA+PSAweDExMDAwMCkK
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBmb3IgKDsgIUNI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfU0VNSSk7IHB0ciArPSBNSU5CUEMoZW5jKSkgewot
ICAgICAgaW50IGMgPSBCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKTsKLSAgICAgIHJlc3VsdCAqPSAx
MDsKLSAgICAgIHJlc3VsdCArPSAoYyAtIEFTQ0lJXzApOwotICAgICAgaWYgKHJlc3VsdCA+PSAw
eDExMDAwMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotICByZXR1cm4gY2hlY2tD
aGFyUmVmTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHBy
ZWRlZmluZWRFbnRpdHlOYW1lKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCkKLXsKLSAgc3dp
dGNoICgoZW5kIC0gcHRyKS9NSU5CUEMoZW5jKSkgewotICBjYXNlIDI6Ci0gICAgaWYgKENIQVJf
TUFUQ0hFUyhlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBBU0NJSV90KSkgewotICAgICAgc3dpdGNo
IChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgewotICAgICAgY2FzZSBBU0NJSV9sOgotICAgICAg
ICByZXR1cm4gQVNDSUlfTFQ7Ci0gICAgICBjYXNlIEFTQ0lJX2c6Ci0gICAgICAgIHJldHVybiBB
U0NJSV9HVDsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgMzoKLSAgICBpZiAo
Q0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9hKSkgewotICAgICAgcHRyICs9IE1JTkJQQyhl
bmMpOwotICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfbSkpIHsKLSAgICAg
ICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRy
LCBBU0NJSV9wKSkKLSAgICAgICAgICByZXR1cm4gQVNDSUlfQU1QOwotICAgICAgfQotICAgIH0K
LSAgICBicmVhazsKLSAgY2FzZSA0OgotICAgIHN3aXRjaCAoQllURV9UT19BU0NJSShlbmMsIHB0
cikpIHsKLSAgICBjYXNlIEFTQ0lJX3E6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAg
ICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV91KSkgewotICAgICAgICBwdHIgKz0g
TUlOQlBDKGVuYyk7Ci0gICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX28p
KSB7Ci0gICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgIGlmIChDSEFSX01B
VENIRVMoZW5jLCBwdHIsIEFTQ0lJX3QpKQotICAgICAgICAgICAgcmV0dXJuIEFTQ0lJX1FVT1Q7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVNDSUlfYToKLSAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIs
IEFTQ0lJX3ApKSB7Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgaWYgKENI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfbykpIHsKLSAgICAgICAgICBwdHIgKz0gTUlOQlBD
KGVuYyk7Ci0gICAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfcykpCi0g
ICAgICAgICAgICByZXR1cm4gQVNDSUlfQVBPUzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAg
YnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwK
LVBSRUZJWChzYW1lTmFtZSkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyMSwg
Y29uc3QgY2hhciAqcHRyMikKLXsKLSAgZm9yICg7OykgewotICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyMSkpIHsKLSNkZWZpbmUgTEVBRF9DQVNFKG4pIFwKLSAgICBjYXNlIEJUX0xFQUQg
IyMgbjogXAotICAgICAgaWYgKCpwdHIxKysgIT0gKnB0cjIrKykgXAotICAgICAgICByZXR1cm4g
MDsKLSAgICBMRUFEX0NBU0UoNCkgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSgyKQotI3VuZGVmIExF
QURfQ0FTRQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICBpZiAoKnB0cjErKyAhPSAq
cHRyMisrKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRfTk9O
QVNDSUk6Ci0gICAgY2FzZSBCVF9OTVNUUlQ6Ci0jaWZkZWYgWE1MX05TCi0gICAgY2FzZSBCVF9D
T0xPTjoKLSNlbmRpZgotICAgIGNhc2UgQlRfSEVYOgotICAgIGNhc2UgQlRfRElHSVQ6Ci0gICAg
Y2FzZSBCVF9OQU1FOgotICAgIGNhc2UgQlRfTUlOVVM6Ci0gICAgICBpZiAoKnB0cjIrKyAhPSAq
cHRyMSsrKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsK
LSAgICAgICAgaWYgKCpwdHIyKysgIT0gKnB0cjErKykKLSAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKE1JTkJQQyhlbmMpID4gMikgewotICAgICAgICAgIGlmICgqcHRyMisrICE9ICpw
dHIxKyspCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICBpZiAoTUlOQlBDKGVuYykg
PiAzKSB7Ci0gICAgICAgICAgICBpZiAoKnB0cjIrKyAhPSAqcHRyMSsrKQotICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoTUlOQlBDKGVuYykgPT0gMSAmJiAqcHRyMSA9PSAq
cHRyMikKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0
cjIpKSB7Ci0gICAgICBjYXNlIEJUX0xFQUQyOgotICAgICAgY2FzZSBCVF9MRUFEMzoKLSAgICAg
IGNhc2UgQlRfTEVBRDQ6Ci0gICAgICBjYXNlIEJUX05PTkFTQ0lJOgotICAgICAgY2FzZSBCVF9O
TVNUUlQ6Ci0jaWZkZWYgWE1MX05TCi0gICAgICBjYXNlIEJUX0NPTE9OOgotI2VuZGlmCi0gICAg
ICBjYXNlIEJUX0hFWDoKLSAgICAgIGNhc2UgQlRfRElHSVQ6Ci0gICAgICBjYXNlIEJUX05BTUU6
Ci0gICAgICBjYXNlIEJUX01JTlVTOgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgfQotICAgIH0KLSAgfQotICAvKiBub3QgcmVhY2hl
ZCAqLwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChuYW1lTWF0Y2hlc0FzY2lpKShj
b25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZDEsIGNvbnN0IGNoYXIgKnB0cjIpCi17Ci0gIGZvciAoOyAq
cHRyMjsgcHRyMSArPSBNSU5CUEMoZW5jKSwgcHRyMisrKSB7Ci0gICAgaWYgKHB0cjEgPT0gZW5k
MSkKLSAgICAgIHJldHVybiAwOwotICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyMSwgKnB0
cjIpKQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIHB0cjEgPT0gZW5kMTsKLX0KLQot
c3RhdGljIGludCBQVFJGQVNUQ0FMTAotUFJFRklYKG5hbWVMZW5ndGgpKGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnB0cikKLXsKLSAgY29uc3QgY2hhciAqc3RhcnQgPSBwdHI7Ci0g
IGZvciAoOzspIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSNkZWZpbmUg
TEVBRF9DQVNFKG4pIFwKLSAgICBjYXNlIEJUX0xFQUQgIyMgbjogcHRyICs9IG47IGJyZWFrOwot
ICAgIExFQURfQ0FTRSgyKSBMRUFEX0NBU0UoMykgTEVBRF9DQVNFKDQpCi0jdW5kZWYgTEVBRF9D
QVNFCi0gICAgY2FzZSBCVF9OT05BU0NJSToKLSAgICBjYXNlIEJUX05NU1RSVDoKLSNpZmRlZiBY
TUxfTlMKLSAgICBjYXNlIEJUX0NPTE9OOgotI2VuZGlmCi0gICAgY2FzZSBCVF9IRVg6Ci0gICAg
Y2FzZSBCVF9ESUdJVDoKLSAgICBjYXNlIEJUX05BTUU6Ci0gICAgY2FzZSBCVF9NSU5VUzoKLSAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICByZXR1cm4gKGludCkocHRyIC0gc3RhcnQpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgY29u
c3QgY2hhciAqIFBUUkZBU1RDQUxMCi1QUkVGSVgoc2tpcFMpKGNvbnN0IEVOQ09ESU5HICplbmMs
IGNvbnN0IGNoYXIgKnB0cikKLXsKLSAgZm9yICg7OykgewotICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgewotICAgIGNhc2UgQlRfTEY6Ci0gICAgY2FzZSBCVF9DUjoKLSAgICBjYXNl
IEJUX1M6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgUFRS
Q0FMTAotUFJFRklYKHVwZGF0ZVBvc2l0aW9uKShjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgUE9TSVRJT04gKnBvcykK
LXsKLSAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRy
KSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCi0g
ICAgICBwdHIgKz0gbjsgXAotICAgICAgYnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FT
RSgzKSBMRUFEX0NBU0UoNCkKLSN1bmRlZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJUX0xGOgotICAg
ICAgcG9zLT5jb2x1bW5OdW1iZXIgPSAoWE1MX1NpemUpLTE7Ci0gICAgICBwb3MtPmxpbmVOdW1i
ZXIrKzsKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QlRfQ1I6Ci0gICAgICBwb3MtPmxpbmVOdW1iZXIrKzsKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5j
KTsKLSAgICAgIGlmIChwdHIgIT0gZW5kICYmIEJZVEVfVFlQRShlbmMsIHB0cikgPT0gQlRfTEYp
Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIHBvcy0+Y29sdW1uTnVtYmVyID0g
KFhNTF9TaXplKS0xOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHB0ciArPSBN
SU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBwb3MtPmNvbHVtbk51bWJlcisr
OwotICB9Ci19Ci0KLSN1bmRlZiBET19MRUFEX0NBU0UKLSN1bmRlZiBNVUxUSUJZVEVfQ0FTRVMK
LSN1bmRlZiBJTlZBTElEX0NBU0VTCi0jdW5kZWYgQ0hFQ0tfTkFNRV9DQVNFCi0jdW5kZWYgQ0hF
Q0tfTkFNRV9DQVNFUwotI3VuZGVmIENIRUNLX05NU1RSVF9DQVNFCi0jdW5kZWYgQ0hFQ0tfTk1T
VFJUX0NBU0VTCi0KLSNlbmRpZiAvKiBYTUxfVE9LX0lNUExfQyAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9s
aWIveG1sdG9rX2ltcGwuYy5vcmlnaW5hbCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRva19pbXBsLmMub3JpZ2luYWwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjg5NWI4NzczOWVmMDMxZWNkOTMzZGY0
Yjk1ZTI0NDFmODk2MmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBh
dC9maWxlcy9saWIveG1sdG9rX2ltcGwuYy5vcmlnaW5hbAorKysgL2Rldi9udWxsCkBAIC0xLDE3
ODMgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IFRoYWkgT3BlbiBTb3VyY2Ug
U29mdHdhcmUgQ2VudGVyIEx0ZAotICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcg
cGVybWlzc2lvbi4KLSovCi0KLS8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCEgKi8KLSNpZmRlZiBY
TUxfVE9LX0lNUExfQwotCi0jaWZuZGVmIElTX0lOVkFMSURfQ0hBUgotI2RlZmluZSBJU19JTlZB
TElEX0NIQVIoZW5jLCBwdHIsIG4pICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgSU5WQUxJRF9MRUFE
X0NBU0UobiwgcHRyLCBuZXh0VG9rUHRyKSBcCi0gICAgY2FzZSBCVF9MRUFEICMjIG46IFwKLSAg
ICAgIGlmIChlbmQgLSBwdHIgPCBuKSBcCi0gICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUxf
Q0hBUjsgXAotICAgICAgaWYgKElTX0lOVkFMSURfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAotICAg
ICAgICAqKG5leHRUb2tQdHIpID0gKHB0cik7IFwKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5W
QUxJRDsgXAotICAgICAgfSBcCi0gICAgICBwdHIgKz0gbjsgXAotICAgICAgYnJlYWs7Ci0KLSNk
ZWZpbmUgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpIFwKLSAgSU5WQUxJRF9MRUFEX0NB
U0UoMiwgcHRyLCBuZXh0VG9rUHRyKSBcCi0gIElOVkFMSURfTEVBRF9DQVNFKDMsIHB0ciwgbmV4
dFRva1B0cikgXAotICBJTlZBTElEX0xFQURfQ0FTRSg0LCBwdHIsIG5leHRUb2tQdHIpIFwKLSAg
Y2FzZSBCVF9OT05YTUw6IFwKLSAgY2FzZSBCVF9NQUxGT1JNOiBcCi0gIGNhc2UgQlRfVFJBSUw6
IFwKLSAgICAqKG5leHRUb2tQdHIpID0gKHB0cik7IFwKLSAgICByZXR1cm4gWE1MX1RPS19JTlZB
TElEOwotCi0jZGVmaW5lIENIRUNLX05BTUVfQ0FTRShuLCBlbmMsIHB0ciwgZW5kLCBuZXh0VG9r
UHRyKSBcCi0gICBjYXNlIEJUX0xFQUQgIyMgbjogXAotICAgICBpZiAoZW5kIC0gcHRyIDwgbikg
XAotICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUxfQ0hBUjsgXAotICAgICBpZiAoIUlTX05B
TUVfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAotICAgICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCi0g
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsgXAotICAgICB9IFwKLSAgICAgcHRyICs9IG47
IFwKLSAgICAgYnJlYWs7Ci0KLSNkZWZpbmUgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5k
LCBuZXh0VG9rUHRyKSBcCi0gIGNhc2UgQlRfTk9OQVNDSUk6IFwKLSAgICBpZiAoIUlTX05BTUVf
Q0hBUl9NSU5CUEMoZW5jLCBwdHIpKSB7IFwKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCi0g
ICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOyBcCi0gICAgfSBcCi0gIGNhc2UgQlRfTk1TVFJU
OiBcCi0gIGNhc2UgQlRfSEVYOiBcCi0gIGNhc2UgQlRfRElHSVQ6IFwKLSAgY2FzZSBCVF9OQU1F
OiBcCi0gIGNhc2UgQlRfTUlOVVM6IFwKLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7IFwKLSAgICBi
cmVhazsgXAotICBDSEVDS19OQU1FX0NBU0UoMiwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikg
XAotICBDSEVDS19OQU1FX0NBU0UoMywgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICBD
SEVDS19OQU1FX0NBU0UoNCwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLQotI2RlZmluZSBD
SEVDS19OTVNUUlRfQ0FTRShuLCBlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCi0gICBjYXNl
IEJUX0xFQUQgIyMgbjogXAotICAgICBpZiAoZW5kIC0gcHRyIDwgbikgXAotICAgICAgIHJldHVy
biBYTUxfVE9LX1BBUlRJQUxfQ0hBUjsgXAotICAgICBpZiAoIUlTX05NU1RSVF9DSEFSKGVuYywg
cHRyLCBuKSkgeyBcCi0gICAgICAgKm5leHRUb2tQdHIgPSBwdHI7IFwKLSAgICAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOyBcCi0gICAgIH0gXAotICAgICBwdHIgKz0gbjsgXAotICAgICBicmVh
azsKLQotI2RlZmluZSBDSEVDS19OTVNUUlRfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0
cikgXAotICBjYXNlIEJUX05PTkFTQ0lJOiBcCi0gICAgaWYgKCFJU19OTVNUUlRfQ0hBUl9NSU5C
UEMoZW5jLCBwdHIpKSB7IFwKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOyBcCi0gICAgICByZXR1
cm4gWE1MX1RPS19JTlZBTElEOyBcCi0gICAgfSBcCi0gIGNhc2UgQlRfTk1TVFJUOiBcCi0gIGNh
c2UgQlRfSEVYOiBcCi0gICAgcHRyICs9IE1JTkJQQyhlbmMpOyBcCi0gICAgYnJlYWs7IFwKLSAg
Q0hFQ0tfTk1TVFJUX0NBU0UoMiwgZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikgXAotICBDSEVD
S19OTVNUUlRfQ0FTRSgzLCBlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKSBcCi0gIENIRUNLX05N
U1RSVF9DQVNFKDQsIGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCi0KLSNpZm5kZWYgUFJFRklY
Ci0jZGVmaW5lIFBSRUZJWChpZGVudCkgaWRlbnQKLSNlbmRpZgotCi0vKiBwdHIgcG9pbnRzIHRv
IGNoYXJhY3RlciBmb2xsb3dpbmcgIjwhLSIgKi8KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVG
SVgoc2NhbkNvbW1lbnQpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0
cikKLXsKLSAgaWYgKHB0ciAhPSBlbmQpIHsKLSAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0
ciwgQVNDSUlfTUlOVVMpKSB7Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgfQotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICB3
aGlsZSAocHRyICE9IGVuZCkgewotICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7
Ci0gICAgICBJTlZBTElEX0NBU0VTKHB0ciwgbmV4dFRva1B0cikKLSAgICAgIGNhc2UgQlRfTUlO
VVM6Ci0gICAgICAgIGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCi0gICAgICAgICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0
ciwgQVNDSUlfTUlOVVMpKSB7Ci0gICAgICAgICAgaWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09
IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgICAgaWYg
KCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkgewotICAgICAgICAgICAgKm5leHRU
b2tQdHIgPSBwdHI7Ci0gICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAg
ICAgIH0KLSAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAg
ICAgIHJldHVybiBYTUxfVE9LX0NPTU1FTlQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi0v
KiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBmb2xsb3dpbmcgIjwhIiAqLwotCi1zdGF0aWMgaW50
IFBUUkNBTEwKLVBSRUZJWChzY2FuRGVjbCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hh
ciAqcHRyLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipu
ZXh0VG9rUHRyKQotewotICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RPS19QQVJU
SUFMOwotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgY2FzZSBCVF9NSU5VUzoK
LSAgICByZXR1cm4gUFJFRklYKHNjYW5Db21tZW50KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBl
bmQsIG5leHRUb2tQdHIpOwotICBjYXNlIEJUX0xTUUI6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIg
KyBNSU5CUEMoZW5jKTsKLSAgICByZXR1cm4gWE1MX1RPS19DT05EX1NFQ1RfT1BFTjsKLSAgY2Fz
ZSBCVF9OTVNUUlQ6Ci0gIGNhc2UgQlRfSEVYOgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAg
ICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOwotICB9Ci0gIHdoaWxlIChwdHIgIT0gZW5kKSB7Ci0gICAgc3dpdGNo
IChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgY2FzZSBCVF9QRVJDTlQ6Ci0gICAgICBpZiAo
cHRyICsgTUlOQlBDKGVuYykgPT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFM
OwotICAgICAgLyogZG9uJ3QgYWxsb3cgPCFFTlRJVFklIGZvbyAid2hhdGV2ZXIiPiAqLwotICAg
ICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSkpIHsKLSAgICAgIGNh
c2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjogY2FzZSBCVF9QRVJDTlQ6Ci0gICAgICAg
ICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAg
ICAgfQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NS
OiBjYXNlIEJUX0xGOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1M
X1RPS19ERUNMX09QRU47Ci0gICAgY2FzZSBCVF9OTVNUUlQ6Ci0gICAgY2FzZSBCVF9IRVg6Ci0g
ICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAg
IH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi1zdGF0aWMgaW50IFBUUkNB
TEwKLVBSRUZJWChjaGVja1BpVGFyZ2V0KShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFy
ICpwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBpbnQgKnRva1B0
cikKLXsKLSAgaW50IHVwcGVyID0gMDsKLSAgKnRva1B0ciA9IFhNTF9UT0tfUEk7Ci0gIGlmIChl
bmQgLSBwdHIgIT0gTUlOQlBDKGVuYykqMykKLSAgICByZXR1cm4gMTsKLSAgc3dpdGNoIChCWVRF
X1RPX0FTQ0lJKGVuYywgcHRyKSkgewotICBjYXNlIEFTQ0lJX3g6Ci0gICAgYnJlYWs7Ci0gIGNh
c2UgQVNDSUlfWDoKLSAgICB1cHBlciA9IDE7Ci0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAg
cmV0dXJuIDE7Ci0gIH0KLSAgcHRyICs9IE1JTkJQQyhlbmMpOwotICBzd2l0Y2ggKEJZVEVfVE9f
QVNDSUkoZW5jLCBwdHIpKSB7Ci0gIGNhc2UgQVNDSUlfbToKLSAgICBicmVhazsKLSAgY2FzZSBB
U0NJSV9NOgotICAgIHVwcGVyID0gMTsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICByZXR1
cm4gMTsKLSAgfQotICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gIHN3aXRjaCAoQllURV9UT19BU0NJ
SShlbmMsIHB0cikpIHsKLSAgY2FzZSBBU0NJSV9sOgotICAgIGJyZWFrOwotICBjYXNlIEFTQ0lJ
X0w6Ci0gICAgdXBwZXIgPSAxOwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIHJldHVybiAx
OwotICB9Ci0gIGlmICh1cHBlcikKLSAgICByZXR1cm4gMDsKLSAgKnRva1B0ciA9IFhNTF9UT0tf
WE1MX0RFQ0w7Ci0gIHJldHVybiAxOwotfQotCi0vKiBwdHIgcG9pbnRzIHRvIGNoYXJhY3RlciBm
b2xsb3dpbmcgIjw/IiAqLwotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChzY2FuUGkpKGNv
bnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGludCB0b2s7Ci0gIGNv
bnN0IGNoYXIgKnRhcmdldCA9IHB0cjsKLSAgaWYgKHB0ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKLSAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gIENIRUNL
X05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICBkZWZhdWx0OgotICAg
ICpuZXh0VG9rUHRyID0gcHRyOwotICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gIH0KLSAg
d2hpbGUgKHB0ciAhPSBlbmQpIHsKLSAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsK
LSAgICBDSEVDS19OQU1FX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCi0gICAgY2Fz
ZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAgICAgaWYgKCFQUkVGSVgoY2hlY2tQ
aVRhcmdldCkoZW5jLCB0YXJnZXQsIHB0ciwgJnRvaykpIHsKLSAgICAgICAgKm5leHRUb2tQdHIg
PSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0gICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgICAgICBz
d2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICAgICAgSU5WQUxJRF9DQVNFUyhwdHIs
IG5leHRUb2tQdHIpCi0gICAgICAgIGNhc2UgQlRfUVVFU1Q6Ci0gICAgICAgICAgcHRyICs9IE1J
TkJQQyhlbmMpOwotICAgICAgICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJu
IFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBB
U0NJSV9HVCkpIHsKLSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7
Ci0gICAgICAgICAgICByZXR1cm4gdG9rOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJ
QUw7Ci0gICAgY2FzZSBCVF9RVUVTVDoKLSAgICAgIGlmICghUFJFRklYKGNoZWNrUGlUYXJnZXQp
KGVuYywgdGFyZ2V0LCBwdHIsICZ0b2spKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAgcHRyICs9IE1J
TkJQQyhlbmMpOwotICAgICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICAgIHJldHVybiBYTUxfVE9L
X1BBUlRJQUw7Ci0gICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsK
LSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgICAgcmV0dXJu
IHRvazsKLSAgICAgIH0KLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0g
ICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19Ci0KLXN0YXRpYyBpbnQgUFRS
Q0FMTAotUFJFRklYKHNjYW5DZGF0YVNlY3Rpb24pKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0
IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNv
bnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBzdGF0aWMgY29uc3QgY2hhciBDREFUQV9MU1FC
W10gPSB7IEFTQ0lJX0MsIEFTQ0lJX0QsIEFTQ0lJX0EsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNDSUlfVCwgQVNDSUlfQSwgQVNDSUlfTFNRQiB9OwotICBpbnQgaTsK
LSAgLyogQ0RBVEFbICovCi0gIGlmIChlbmQgLSBwdHIgPCA2ICogTUlOQlBDKGVuYykpCi0gICAg
cmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgZm9yIChpID0gMDsgaSA8IDY7IGkrKywgcHRyICs9
IE1JTkJQQyhlbmMpKSB7Ci0gICAgaWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIENEQVRBX0xT
UUJbaV0pKSB7Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9L
X0lOVkFMSUQ7Ci0gICAgfQotICB9Ci0gICpuZXh0VG9rUHRyID0gcHRyOwotICByZXR1cm4gWE1M
X1RPS19DREFUQV9TRUNUX09QRU47Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKGNk
YXRhU2VjdGlvblRvaykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRv
a1B0cikKLXsKLSAgaWYgKHB0ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhNTF9UT0tfTk9ORTsKLSAg
aWYgKE1JTkJQQyhlbmMpID4gMSkgewotICAgIHNpemVfdCBuID0gZW5kIC0gcHRyOwotICAgIGlm
IChuICYgKE1JTkJQQyhlbmMpIC0gMSkpIHsKLSAgICAgIG4gJj0gfihNSU5CUEMoZW5jKSAtIDEp
OwotICAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAg
ICAgIGVuZCA9IHB0ciArIG47Ci0gICAgfQotICB9Ci0gIHN3aXRjaCAoQllURV9UWVBFKGVuYywg
cHRyKSkgewotICBjYXNlIEJUX1JTUUI6Ci0gICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGlm
IChwdHIgPT0gZW5kKQotICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICBpZiAoIUNI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfUlNRQikpCi0gICAgICBicmVhazsKLSAgICBwdHIg
Kz0gTUlOQlBDKGVuYyk7Ci0gICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICByZXR1cm4gWE1MX1RP
S19QQVJUSUFMOwotICAgIGlmICghQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9HVCkpIHsK
LSAgICAgIHB0ciAtPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAqbmV4
dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgIHJldHVybiBYTUxfVE9LX0NEQVRBX1NF
Q1RfQ0xPU0U7Ci0gIGNhc2UgQlRfQ1I6Ci0gICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGlm
IChwdHIgPT0gZW5kKQotICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICBpZiAoQllU
RV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAg
ICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Ci0g
IGNhc2UgQlRfTEY6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICBy
ZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Ci0gIElOVkFMSURfQ0FTRVMocHRyLCBuZXh0VG9r
UHRyKQotICBkZWZhdWx0OgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBicmVhazsKLSAg
fQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRy
KSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCi0g
ICAgICBpZiAoZW5kIC0gcHRyIDwgbiB8fCBJU19JTlZBTElEX0NIQVIoZW5jLCBwdHIsIG4pKSB7
IFwKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7IFwKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tf
REFUQV9DSEFSUzsgXAotICAgICAgfSBcCi0gICAgICBwdHIgKz0gbjsgXAotICAgICAgYnJlYWs7
Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKLSN1bmRlZiBMRUFE
X0NBU0UKLSAgICBjYXNlIEJUX05PTlhNTDoKLSAgICBjYXNlIEJUX01BTEZPUk06Ci0gICAgY2Fz
ZSBCVF9UUkFJTDoKLSAgICBjYXNlIEJUX0NSOgotICAgIGNhc2UgQlRfTEY6Ci0gICAgY2FzZSBC
VF9SU1FCOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19E
QVRBX0NIQVJTOwotICAgIGRlZmF1bHQ6Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gIHJldHVybiBYTUxf
VE9LX0RBVEFfQ0hBUlM7Ci19Ci0KLS8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2lu
ZyAiPC8iICovCi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5FbmRUYWcpKGNvbnN0
IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICplbmQsIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotICBpZiAocHRyID09IGVu
ZCkKLSAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKLSAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIp
Ci0gIGRlZmF1bHQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tf
SU5WQUxJRDsKLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIHN3aXRjaCAoQllURV9U
WVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4
dFRva1B0cikKLSAgICBjYXNlIEJUX1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6Ci0gICAgICBm
b3IgKHB0ciArPSBNSU5CUEMoZW5jKTsgcHRyICE9IGVuZDsgcHRyICs9IE1JTkJQQyhlbmMpKSB7
Ci0gICAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgICBjYXNlIEJU
X1M6IGNhc2UgQlRfQ1I6IGNhc2UgQlRfTEY6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQlRfR1Q6Ci0gICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAg
ICAgICAgICByZXR1cm4gWE1MX1RPS19FTkRfVEFHOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0jaWZk
ZWYgWE1MX05TCi0gICAgY2FzZSBCVF9DT0xPTjoKLSAgICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sg
cW5hbWUgc3ludGF4IGhlcmUsCi0gICAgICAgICBzaW5jZSBlbmQtdGFnIG11c3QgbWF0Y2ggZXhh
Y3RseSAqLwotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBjYXNlIEJUX0dUOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsK
LSAgICAgIHJldHVybiBYTUxfVE9LX0VORF9UQUc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICpuZXh0
VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICB9Ci0gIH0K
LSAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLX0KLQotLyogcHRyIHBvaW50cyB0byBjaGFyYWN0
ZXIgZm9sbG93aW5nICImI1giICovCi0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5I
ZXhDaGFyUmVmKShjb25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIp
Ci17Ci0gIGlmIChwdHIgIT0gZW5kKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIp
KSB7Ci0gICAgY2FzZSBCVF9ESUdJVDoKLSAgICBjYXNlIEJUX0hFWDoKLSAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxf
VE9LX0lOVkFMSUQ7Ci0gICAgfQotICAgIGZvciAocHRyICs9IE1JTkJQQyhlbmMpOyBwdHIgIT0g
ZW5kOyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKLSAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywg
cHRyKSkgewotICAgICAgY2FzZSBCVF9ESUdJVDoKLSAgICAgIGNhc2UgQlRfSEVYOgotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgQlRfU0VNSToKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIg
KyBNSU5CUEMoZW5jKTsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfQ0hBUl9SRUY7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9U
T0tfSU5WQUxJRDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFhNTF9UT0tfUEFSVElB
TDsKLX0KLQotLyogcHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICImIyIgKi8KLQot
c3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2NhbkNoYXJSZWYpKGNvbnN0IEVOQ09ESU5HICpl
bmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5k
LCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgaWYgKHB0ciAhPSBlbmQpIHsKLSAgICBp
ZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV94KSkKLSAgICAgIHJldHVybiBQUkVGSVgo
c2NhbkhleENoYXJSZWYpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7
Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgY2FzZSBCVF9ESUdJVDoK
LSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAg
ICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgfQotICAgIGZvciAocHRyICs9IE1JTkJQ
QyhlbmMpOyBwdHIgIT0gZW5kOyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKLSAgICAgIHN3aXRjaCAo
QllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgY2FzZSBCVF9ESUdJVDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEJUX1NFTUk6Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlO
QlBDKGVuYyk7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0NIQVJfUkVGOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19
Ci0KLS8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyAiJiIgKi8KLQotc3RhdGlj
IGludCBQVFJDQUxMCi1QUkVGSVgoc2NhblJlZikoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3Qg
Y2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
Km5leHRUb2tQdHIpCi17Ci0gIGlmIChwdHIgPT0gZW5kKQotICAgIHJldHVybiBYTUxfVE9LX1BB
UlRJQUw7Ci0gIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICBDSEVDS19OTVNUUlRf
Q0FTRVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgY2FzZSBCVF9OVU06Ci0gICAgcmV0
dXJuIFBSRUZJWChzY2FuQ2hhclJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0
VG9rUHRyKTsKLSAgZGVmYXVsdDoKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4g
WE1MX1RPS19JTlZBTElEOwotICB9Ci0gIHdoaWxlIChwdHIgIT0gZW5kKSB7Ci0gICAgc3dpdGNo
IChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwg
ZW5kLCBuZXh0VG9rUHRyKQotICAgIGNhc2UgQlRfU0VNSToKLSAgICAgICpuZXh0VG9rUHRyID0g
cHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19FTlRJVFlfUkVGOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9L
X0lOVkFMSUQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19Ci0KLS8q
IHB0ciBwb2ludHMgdG8gY2hhcmFjdGVyIGZvbGxvd2luZyBmaXJzdCBjaGFyYWN0ZXIgb2YgYXR0
cmlidXRlIG5hbWUgKi8KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2NhbkF0dHMpKGNv
bnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSNpZmRlZiBYTUxfTlMK
LSAgaW50IGhhZENvbG9uID0gMDsKLSNlbmRpZgotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMoZW5j
LCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSNpZmRlZiBYTUxfTlMKLSAgICBjYXNlIEJUX0NPTE9O
OgotICAgICAgaWYgKGhhZENvbG9uKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAg
ICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAgaGFkQ29sb24gPSAx
OwotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYgKHB0ciA9PSBlbmQpCi0gICAg
ICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMs
IHB0cikpIHsKLSAgICAgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9r
UHRyKQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAg
IHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSNlbmRpZgot
ICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKLSAgICAgIGZvciAoOzspIHsK
LSAgICAgICAgaW50IHQ7Ci0KLSAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICBp
ZiAocHRyID09IGVuZCkKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAg
ICB0ID0gQllURV9UWVBFKGVuYywgcHRyKTsKLSAgICAgICAgaWYgKHQgPT0gQlRfRVFVQUxTKQot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBzd2l0Y2ggKHQpIHsKLSAgICAgICAgY2FzZSBCVF9T
OgotICAgICAgICBjYXNlIEJUX0xGOgotICAgICAgICBjYXNlIEJUX0NSOgotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAg
ICAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAv
KiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIEJUX0VRVUFMUzoKLSAgICAgIHsKLSAgICAgICAg
aW50IG9wZW47Ci0jaWZkZWYgWE1MX05TCi0gICAgICAgIGhhZENvbG9uID0gMDsKLSNlbmRpZgot
ICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAg
ICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsK
LSAgICAgICAgICBvcGVuID0gQllURV9UWVBFKGVuYywgcHRyKTsKLSAgICAgICAgICBpZiAob3Bl
biA9PSBCVF9RVU9UIHx8IG9wZW4gPT0gQlRfQVBPUykKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIHN3aXRjaCAob3BlbikgewotICAgICAgICAgIGNhc2UgQlRfUzoKLSAgICAgICAgICBj
YXNlIEJUX0xGOgotICAgICAgICAgIGNhc2UgQlRfQ1I6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAg
ICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgIC8qIGluIGF0dHJpYnV0ZSB2YWx1ZSAq
LwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgaW50IHQ7Ci0gICAgICAgICAgaWYgKHB0
ciA9PSBlbmQpCi0gICAgICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgICAg
IHQgPSBCWVRFX1RZUEUoZW5jLCBwdHIpOwotICAgICAgICAgIGlmICh0ID09IG9wZW4pCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBzd2l0Y2ggKHQpIHsKLSAgICAgICAgICBJTlZBTElE
X0NBU0VTKHB0ciwgbmV4dFRva1B0cikKLSAgICAgICAgICBjYXNlIEJUX0FNUDoKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgaW50IHRvayA9IFBSRUZJWChzY2FuUmVmKShlbmMsIHB0ciAr
IE1JTkJQQyhlbmMpLCBlbmQsICZwdHIpOwotICAgICAgICAgICAgICBpZiAodG9rIDw9IDApIHsK
LSAgICAgICAgICAgICAgICBpZiAodG9rID09IFhNTF9UT0tfSU5WQUxJRCkKLSAgICAgICAgICAg
ICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICAgICAgICAgIHJldHVybiB0b2s7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgY2FzZSBCVF9MVDoKLSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAg
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgaWYgKHB0
ciA9PSBlbmQpCi0gICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgc3dp
dGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgICAgIGNhc2UgQlRfUzoKLSAgICAgICAg
Y2FzZSBCVF9DUjoKLSAgICAgICAgY2FzZSBCVF9MRjoKLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBCVF9TT0w6Ci0gICAgICAgICAgZ290byBzb2w7Ci0gICAgICAgIGNhc2UgQlRfR1Q6
Ci0gICAgICAgICAgZ290byBndDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAqbmV4dFRv
a1B0ciA9IHB0cjsKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgICB9
Ci0gICAgICAgIC8qIHB0ciBwb2ludHMgdG8gY2xvc2luZyBxdW90ZSAqLwotICAgICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgIGlmIChwdHIg
PT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgICAgICBz
d2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICAgICAgICBDSEVDS19OTVNUUlRfQ0FT
RVMoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICAgICAgICBjYXNlIEJUX1M6IGNhc2Ug
QlRfQ1I6IGNhc2UgQlRfTEY6Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBjYXNl
IEJUX0dUOgotICAgICAgICAgIGd0OgotICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBN
SU5CUEMoZW5jKTsKLSAgICAgICAgICAgIHJldHVybiBYTUxfVE9LX1NUQVJUX1RBR19XSVRIX0FU
VFM7Ci0gICAgICAgICAgY2FzZSBCVF9TT0w6Ci0gICAgICAgICAgc29sOgotICAgICAgICAgICAg
cHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICAg
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgICAgICBpZiAoIUNIQVJfTUFU
Q0hFUyhlbmMsIHB0ciwgQVNDSUlfR1QpKSB7Ci0gICAgICAgICAgICAgICpuZXh0VG9rUHRyID0g
cHRyOwotICAgICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgICAg
ICAgIHJldHVybiBYTUxfVE9LX0VNUFRZX0VMRU1FTlRfV0lUSF9BVFRTOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgICAgIHJldHVy
biBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRv
a1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgfQotICB9Ci0g
IHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci19Ci0KLS8qIHB0ciBwb2ludHMgdG8gY2hhcmFjdGVy
IGZvbGxvd2luZyAiPCIgKi8KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoc2Nhbkx0KShj
b25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewotI2lmZGVmIFhNTF9OUwot
ICBpbnQgaGFkQ29sb247Ci0jZW5kaWYKLSAgaWYgKHB0ciA9PSBlbmQpCi0gICAgcmV0dXJuIFhN
TF9UT0tfUEFSVElBTDsKLSAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gIENIRUNL
X05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICBjYXNlIEJUX0VYQ0w6
Ci0gICAgaWYgKChwdHIgKz0gTUlOQlBDKGVuYykpID09IGVuZCkKLSAgICAgIHJldHVybiBYTUxf
VE9LX1BBUlRJQUw7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgY2Fz
ZSBCVF9NSU5VUzoKLSAgICAgIHJldHVybiBQUkVGSVgoc2NhbkNvbW1lbnQpKGVuYywgcHRyICsg
TUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gICAgY2FzZSBCVF9MU1FCOgotICAgICAg
cmV0dXJuIFBSRUZJWChzY2FuQ2RhdGFTZWN0aW9uKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsIG5leHRUb2tQdHIpOwot
ICAgIH0KLSAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19JTlZBTElE
OwotICBjYXNlIEJUX1FVRVNUOgotICAgIHJldHVybiBQUkVGSVgoc2NhblBpKShlbmMsIHB0ciAr
IE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOwotICBjYXNlIEJUX1NPTDoKLSAgICByZXR1
cm4gUFJFRklYKHNjYW5FbmRUYWcpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRv
a1B0cik7Ci0gIGRlZmF1bHQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhN
TF9UT0tfSU5WQUxJRDsKLSAgfQotI2lmZGVmIFhNTF9OUwotICBoYWRDb2xvbiA9IDA7Ci0jZW5k
aWYKLSAgLyogd2UgaGF2ZSBhIHN0YXJ0LXRhZyAqLwotICB3aGlsZSAocHRyICE9IGVuZCkgewot
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMo
ZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSNpZmRlZiBYTUxfTlMKLSAgICBjYXNlIEJUX0NP
TE9OOgotICAgICAgaWYgKGhhZENvbG9uKSB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAgaGFkQ29sb24g
PSAxOwotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYgKHB0ciA9PSBlbmQpCi0g
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVFlQRShl
bmMsIHB0cikpIHsKLSAgICAgIENIRUNLX05NU1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0
VG9rUHRyKQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAg
ICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgQlRfUzogY2FzZSBCVF9DUjogY2FzZSBCVF9MRjoKLSAgICAgIHsKLSAgICAg
ICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICB3aGlsZSAocHRyICE9IGVuZCkgewotICAg
ICAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgICAgIENIRUNLX05N
U1RSVF9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICAgICAgICAgIGNhc2UgQlRf
R1Q6Ci0gICAgICAgICAgICBnb3RvIGd0OwotICAgICAgICAgIGNhc2UgQlRfU09MOgotICAgICAg
ICAgICAgZ290byBzb2w7Ci0gICAgICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJU
X0xGOgotICAgICAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgcmV0dXJuIFBSRUZJWChzY2FuQXR0cykoZW5jLCBwdHIsIGVuZCwgbmV4dFRva1B0cik7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAgICAgIH0KLSAgICBj
YXNlIEJUX0dUOgotICAgIGd0OgotICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5j
KTsKLSAgICAgIHJldHVybiBYTUxfVE9LX1NUQVJUX1RBR19OT19BVFRTOwotICAgIGNhc2UgQlRf
U09MOgotICAgIHNvbDoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGlmIChwdHIg
PT0gZW5kKQotICAgICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICAgICAgaWYgKCFDSEFS
X01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0
cjsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICAgIH0KLSAgICAgICpuZXh0
VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19FTVBUWV9F
TEVNRU5UX05PX0FUVFM7Ci0gICAgZGVmYXVsdDoKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFhNTF9U
T0tfUEFSVElBTDsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoY29udGVudFRvayko
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCi0g
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGlmIChwdHIg
PT0gZW5kKQotICAgIHJldHVybiBYTUxfVE9LX05PTkU7Ci0gIGlmIChNSU5CUEMoZW5jKSA+IDEp
IHsKLSAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKLSAgICBpZiAobiAmIChNSU5CUEMoZW5jKSAt
IDEpKSB7Ci0gICAgICBuICY9IH4oTUlOQlBDKGVuYykgLSAxKTsKLSAgICAgIGlmIChuID09IDAp
Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBlbmQgPSBwdHIgKyBuOwot
ICAgIH0KLSAgfQotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgY2FzZSBCVF9M
VDoKLSAgICByZXR1cm4gUFJFRklYKHNjYW5MdCkoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5k
LCBuZXh0VG9rUHRyKTsKLSAgY2FzZSBCVF9BTVA6Ci0gICAgcmV0dXJuIFBSRUZJWChzY2FuUmVm
KShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQdHIpOwotICBjYXNlIEJUX0NS
OgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBpZiAocHRyID09IGVuZCkKLSAgICAgIHJl
dHVybiBYTUxfVE9LX1RSQUlMSU5HX0NSOwotICAgIGlmIChCWVRFX1RZUEUoZW5jLCBwdHIpID09
IEJUX0xGKQotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICpuZXh0VG9rUHRyID0gcHRy
OwotICAgIHJldHVybiBYTUxfVE9LX0RBVEFfTkVXTElORTsKLSAgY2FzZSBCVF9MRjoKLSAgICAq
bmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgIHJldHVybiBYTUxfVE9LX0RBVEFf
TkVXTElORTsKLSAgY2FzZSBCVF9SU1FCOgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBp
ZiAocHRyID09IGVuZCkKLSAgICAgIHJldHVybiBYTUxfVE9LX1RSQUlMSU5HX1JTUUI7Ci0gICAg
aWYgKCFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX1JTUUIpKQotICAgICAgYnJlYWs7Ci0g
ICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgcmV0dXJu
IFhNTF9UT0tfVFJBSUxJTkdfUlNRQjsKLSAgICBpZiAoIUNIQVJfTUFUQ0hFUyhlbmMsIHB0ciwg
QVNDSUlfR1QpKSB7Ci0gICAgICBwdHIgLT0gTUlOQlBDKGVuYyk7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsK
LSAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpCi0gIGRlZmF1bHQ6Ci0gICAgcHRyICs9
IE1JTkJQQyhlbmMpOwotICAgIGJyZWFrOwotICB9Ci0gIHdoaWxlIChwdHIgIT0gZW5kKSB7Ci0g
ICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0jZGVmaW5lIExFQURfQ0FTRShuKSBc
Ci0gICAgY2FzZSBCVF9MRUFEICMjIG46IFwKLSAgICAgIGlmIChlbmQgLSBwdHIgPCBuIHx8IElT
X0lOVkFMSURfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAotICAgICAgICAqbmV4dFRva1B0ciA9IHB0
cjsgXAotICAgICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOyBcCi0gICAgICB9IFwKLSAg
ICAgIHB0ciArPSBuOyBcCi0gICAgICBicmVhazsKLSAgICBMRUFEX0NBU0UoMikgTEVBRF9DQVNF
KDMpIExFQURfQ0FTRSg0KQotI3VuZGVmIExFQURfQ0FTRQotICAgIGNhc2UgQlRfUlNRQjoKLSAg
ICAgIGlmIChwdHIgKyBNSU5CUEMoZW5jKSAhPSBlbmQpIHsKLSAgICAgICAgIGlmICghQ0hBUl9N
QVRDSEVTKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIEFTQ0lJX1JTUUIpKSB7Ci0gICAgICAgICAg
IHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAg
ICAgICBpZiAocHRyICsgMipNSU5CUEMoZW5jKSAhPSBlbmQpIHsKLSAgICAgICAgICAgaWYgKCFD
SEFSX01BVENIRVMoZW5jLCBwdHIgKyAyKk1JTkJQQyhlbmMpLCBBU0NJSV9HVCkpIHsKLSAgICAg
ICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgIH0KLSAgICAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyAyKk1JTkJQQyhlbmMpOwotICAg
ICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgICAgfQotICAgICAgfQotICAg
ICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBCVF9BTVA6Ci0gICAgY2FzZSBCVF9MVDoK
LSAgICBjYXNlIEJUX05PTlhNTDoKLSAgICBjYXNlIEJUX01BTEZPUk06Ci0gICAgY2FzZSBCVF9U
UkFJTDoKLSAgICBjYXNlIEJUX0NSOgotICAgIGNhc2UgQlRfTEY6Ci0gICAgICAqbmV4dFRva1B0
ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci0gICAgZGVmYXVsdDoK
LSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAq
bmV4dFRva1B0ciA9IHB0cjsKLSAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLX0KLQotLyog
cHRyIHBvaW50cyB0byBjaGFyYWN0ZXIgZm9sbG93aW5nICIlIiAqLwotCi1zdGF0aWMgaW50IFBU
UkNBTEwKLVBSRUZJWChzY2FuUGVyY2VudCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hh
ciAqcHRyLCBjb25zdCBjaGFyICplbmQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KipuZXh0VG9rUHRyKQotewotICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RPS19Q
QVJUSUFMOwotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgQ0hFQ0tfTk1TVFJU
X0NBU0VTKGVuYywgcHRyLCBlbmQsIG5leHRUb2tQdHIpCi0gIGNhc2UgQlRfUzogY2FzZSBCVF9M
RjogY2FzZSBCVF9DUjogY2FzZSBCVF9QRVJDTlQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0g
ICAgcmV0dXJuIFhNTF9UT0tfUEVSQ0VOVDsKLSAgZGVmYXVsdDoKLSAgICAqbmV4dFRva1B0ciA9
IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICB9Ci0gIHdoaWxlIChwdHIgIT0g
ZW5kKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgQ0hFQ0tfTkFN
RV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICAgIGNhc2UgQlRfU0VNSToKLSAg
ICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RP
S19QQVJBTV9FTlRJVFlfUkVGOwotICAgIGRlZmF1bHQ6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0
cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBY
TUxfVE9LX1BBUlRJQUw7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5Qb3Vu
ZE5hbWUpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAq
ZW5kLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipuZXh0VG9rUHRyKQotewot
ICBpZiAocHRyID09IGVuZCkKLSAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotICBzd2l0Y2gg
KEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgQ0hFQ0tfTk1TVFJUX0NBU0VTKGVuYywgcHRyLCBl
bmQsIG5leHRUb2tQdHIpCi0gIGRlZmF1bHQ6Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAg
cmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgfQotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIENIRUNLX05BTUVfQ0FTRVMoZW5j
LCBwdHIsIGVuZCwgbmV4dFRva1B0cikKLSAgICBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOiBjYXNl
IEJUX1M6Ci0gICAgY2FzZSBCVF9SUEFSOiBjYXNlIEJUX0dUOiBjYXNlIEJUX1BFUkNOVDogY2Fz
ZSBCVF9WRVJCQVI6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxf
VE9LX1BPVU5EX05BTUU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOwot
ICAgICAgcmV0dXJuIFhNTF9UT0tfSU5WQUxJRDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIC1YTUxf
VE9LX1BPVU5EX05BTUU7Ci19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNjYW5MaXQp
KGludCBvcGVuLCBjb25zdCBFTkNPRElORyAqZW5jLAotICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipu
ZXh0VG9rUHRyKQotewotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAgIGludCB0ID0gQllURV9U
WVBFKGVuYywgcHRyKTsKLSAgICBzd2l0Y2ggKHQpIHsKLSAgICBJTlZBTElEX0NBU0VTKHB0ciwg
bmV4dFRva1B0cikKLSAgICBjYXNlIEJUX1FVT1Q6Ci0gICAgY2FzZSBCVF9BUE9TOgotICAgICAg
cHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYgKHQgIT0gb3BlbikKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBpZiAocHRyID09IGVuZCkKLSAgICAgICAgcmV0dXJuIC1YTUxfVE9LX0xJVEVSQUw7
Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywg
cHRyKSkgewotICAgICAgY2FzZSBCVF9TOiBjYXNlIEJUX0NSOiBjYXNlIEJUX0xGOgotICAgICAg
Y2FzZSBCVF9HVDogY2FzZSBCVF9QRVJDTlQ6IGNhc2UgQlRfTFNRQjoKLSAgICAgICAgcmV0dXJu
IFhNTF9UT0tfTElURVJBTDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBYTUxfVE9L
X0lOVkFMSUQ7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5j
KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwot
fQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChwcm9sb2dUb2spKGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGludCB0b2s7Ci0gIGlmIChwdHIgPT0g
ZW5kKQotICAgIHJldHVybiBYTUxfVE9LX05PTkU7Ci0gIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsK
LSAgICBzaXplX3QgbiA9IGVuZCAtIHB0cjsKLSAgICBpZiAobiAmIChNSU5CUEMoZW5jKSAtIDEp
KSB7Ci0gICAgICBuICY9IH4oTUlOQlBDKGVuYykgLSAxKTsKLSAgICAgIGlmIChuID09IDApCi0g
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBlbmQgPSBwdHIgKyBuOwotICAg
IH0KLSAgfQotICBzd2l0Y2ggKEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgY2FzZSBCVF9RVU9U
OgotICAgIHJldHVybiBQUkVGSVgoc2NhbkxpdCkoQlRfUVVPVCwgZW5jLCBwdHIgKyBNSU5CUEMo
ZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgY2FzZSBCVF9BUE9TOgotICAgIHJldHVybiBQUkVG
SVgoc2NhbkxpdCkoQlRfQVBPUywgZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9r
UHRyKTsKLSAgY2FzZSBCVF9MVDoKLSAgICB7Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0g
ICAgICBpZiAocHRyID09IGVuZCkKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElBTDsKLSAg
ICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgICAgY2FzZSBCVF9FWENMOgot
ICAgICAgICByZXR1cm4gUFJFRklYKHNjYW5EZWNsKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBl
bmQsIG5leHRUb2tQdHIpOwotICAgICAgY2FzZSBCVF9RVUVTVDoKLSAgICAgICAgcmV0dXJuIFBS
RUZJWChzY2FuUGkpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0g
ICAgICBjYXNlIEJUX05NU1RSVDoKLSAgICAgIGNhc2UgQlRfSEVYOgotICAgICAgY2FzZSBCVF9O
T05BU0NJSToKLSAgICAgIGNhc2UgQlRfTEVBRDI6Ci0gICAgICBjYXNlIEJUX0xFQUQzOgotICAg
ICAgY2FzZSBCVF9MRUFENDoKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIgLSBNSU5CUEMoZW5j
KTsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfSU5TVEFOQ0VfU1RBUlQ7Ci0gICAgICB9Ci0gICAg
ICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0gICAg
fQotICBjYXNlIEJUX0NSOgotICAgIGlmIChwdHIgKyBNSU5CUEMoZW5jKSA9PSBlbmQpIHsKLSAg
ICAgICpuZXh0VG9rUHRyID0gZW5kOwotICAgICAgLyogaW5kaWNhdGUgdGhhdCB0aGlzIG1pZ2h0
IGJlIHBhcnQgb2YgYSBDUi9MRiBwYWlyICovCi0gICAgICByZXR1cm4gLVhNTF9UT0tfUFJPTE9H
X1M7Ci0gICAgfQotICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICBjYXNlIEJUX1M6IGNhc2UgQlRf
TEY6Ci0gICAgZm9yICg7OykgewotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYg
KHB0ciA9PSBlbmQpCi0gICAgICAgIGJyZWFrOwotICAgICAgc3dpdGNoIChCWVRFX1RZUEUoZW5j
LCBwdHIpKSB7Ci0gICAgICBjYXNlIEJUX1M6IGNhc2UgQlRfTEY6Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBCVF9DUjoKLSAgICAgICAgLyogZG9uJ3Qgc3BsaXQgQ1IvTEYgcGFpciAqLwot
ICAgICAgICBpZiAocHRyICsgTUlOQlBDKGVuYykgIT0gZW5kKQotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICpuZXh0
VG9rUHRyID0gcHRyOwotICAgICAgICByZXR1cm4gWE1MX1RPS19QUk9MT0dfUzsKLSAgICAgIH0K
LSAgICB9Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJuIFhNTF9UT0tfUFJPTE9H
X1M7Ci0gIGNhc2UgQlRfUEVSQ05UOgotICAgIHJldHVybiBQUkVGSVgoc2NhblBlcmNlbnQpKGVu
YywgcHRyICsgTUlOQlBDKGVuYyksIGVuZCwgbmV4dFRva1B0cik7Ci0gIGNhc2UgQlRfQ09NTUE6
Ci0gICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICByZXR1cm4gWE1MX1RP
S19DT01NQTsKLSAgY2FzZSBCVF9MU1FCOgotICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBD
KGVuYyk7Ci0gICAgcmV0dXJuIFhNTF9UT0tfT1BFTl9CUkFDS0VUOwotICBjYXNlIEJUX1JTUUI6
Ci0gICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgcmV0
dXJuIC1YTUxfVE9LX0NMT1NFX0JSQUNLRVQ7Ci0gICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0
ciwgQVNDSUlfUlNRQikpIHsKLSAgICAgIGlmIChwdHIgKyBNSU5CUEMoZW5jKSA9PSBlbmQpCi0g
ICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVu
YywgcHRyICsgTUlOQlBDKGVuYyksIEFTQ0lJX0dUKSkgewotICAgICAgICAqbmV4dFRva1B0ciA9
IHB0ciArIDIqTUlOQlBDKGVuYyk7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0NPTkRfU0VDVF9D
TE9TRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgcmV0dXJu
IFhNTF9UT0tfQ0xPU0VfQlJBQ0tFVDsKLSAgY2FzZSBCVF9MUEFSOgotICAgICpuZXh0VG9rUHRy
ID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgcmV0dXJuIFhNTF9UT0tfT1BFTl9QQVJFTjsKLSAg
Y2FzZSBCVF9SUEFSOgotICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICBpZiAocHRyID09IGVu
ZCkKLSAgICAgIHJldHVybiAtWE1MX1RPS19DTE9TRV9QQVJFTjsKLSAgICBzd2l0Y2ggKEJZVEVf
VFlQRShlbmMsIHB0cikpIHsKLSAgICBjYXNlIEJUX0FTVDoKLSAgICAgICpuZXh0VG9rUHRyID0g
cHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19DTE9TRV9QQVJFTl9BU1RF
UklTSzsKLSAgICBjYXNlIEJUX1FVRVNUOgotICAgICAgKm5leHRUb2tQdHIgPSBwdHIgKyBNSU5C
UEMoZW5jKTsKLSAgICAgIHJldHVybiBYTUxfVE9LX0NMT1NFX1BBUkVOX1FVRVNUSU9OOwotICAg
IGNhc2UgQlRfUExVUzoKLSAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0g
ICAgICByZXR1cm4gWE1MX1RPS19DTE9TRV9QQVJFTl9QTFVTOwotICAgIGNhc2UgQlRfQ1I6IGNh
c2UgQlRfTEY6IGNhc2UgQlRfUzoKLSAgICBjYXNlIEJUX0dUOiBjYXNlIEJUX0NPTU1BOiBjYXNl
IEJUX1ZFUkJBUjoKLSAgICBjYXNlIEJUX1JQQVI6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsK
LSAgICAgIHJldHVybiBYTUxfVE9LX0NMT1NFX1BBUkVOOwotICAgIH0KLSAgICAqbmV4dFRva1B0
ciA9IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICBjYXNlIEJUX1ZFUkJBUjoK
LSAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgIHJldHVybiBYTUxfVE9L
X09SOwotICBjYXNlIEJUX0dUOgotICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7
Ci0gICAgcmV0dXJuIFhNTF9UT0tfREVDTF9DTE9TRTsKLSAgY2FzZSBCVF9OVU06Ci0gICAgcmV0
dXJuIFBSRUZJWChzY2FuUG91bmROYW1lKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5l
eHRUb2tQdHIpOwotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICBjYXNlIEJUX0xFQUQgIyMgbjog
XAotICAgIGlmIChlbmQgLSBwdHIgPCBuKSBcCi0gICAgICByZXR1cm4gWE1MX1RPS19QQVJUSUFM
X0NIQVI7IFwKLSAgICBpZiAoSVNfTk1TVFJUX0NIQVIoZW5jLCBwdHIsIG4pKSB7IFwKLSAgICAg
IHB0ciArPSBuOyBcCi0gICAgICB0b2sgPSBYTUxfVE9LX05BTUU7IFwKLSAgICAgIGJyZWFrOyBc
Ci0gICAgfSBcCi0gICAgaWYgKElTX05BTUVfQ0hBUihlbmMsIHB0ciwgbikpIHsgXAotICAgICAg
cHRyICs9IG47IFwKLSAgICAgIHRvayA9IFhNTF9UT0tfTk1UT0tFTjsgXAotICAgICAgYnJlYWs7
IFwKLSAgICB9IFwKLSAgICAqbmV4dFRva1B0ciA9IHB0cjsgXAotICAgIHJldHVybiBYTUxfVE9L
X0lOVkFMSUQ7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKLSN1
bmRlZiBMRUFEX0NBU0UKLSAgY2FzZSBCVF9OTVNUUlQ6Ci0gIGNhc2UgQlRfSEVYOgotICAgIHRv
ayA9IFhNTF9UT0tfTkFNRTsKLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgYnJlYWs7Ci0g
IGNhc2UgQlRfRElHSVQ6Ci0gIGNhc2UgQlRfTkFNRToKLSAgY2FzZSBCVF9NSU5VUzoKLSNpZmRl
ZiBYTUxfTlMKLSAgY2FzZSBCVF9DT0xPTjoKLSNlbmRpZgotICAgIHRvayA9IFhNTF9UT0tfTk1U
T0tFTjsKLSAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQlRfTk9O
QVNDSUk6Ci0gICAgaWYgKElTX05NU1RSVF9DSEFSX01JTkJQQyhlbmMsIHB0cikpIHsKLSAgICAg
IHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIHRvayA9IFhNTF9UT0tfTkFNRTsKLSAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBpZiAoSVNfTkFNRV9DSEFSX01JTkJQQyhlbmMsIHB0cikpIHsKLSAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIHRvayA9IFhNTF9UT0tfTk1UT0tFTjsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgZGVmYXVsdDoKLSAg
ICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICB9Ci0g
IHdoaWxlIChwdHIgIT0gZW5kKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7
Ci0gICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKQotICAgIGNh
c2UgQlRfR1Q6IGNhc2UgQlRfUlBBUjogY2FzZSBCVF9DT01NQToKLSAgICBjYXNlIEJUX1ZFUkJB
UjogY2FzZSBCVF9MU1FCOiBjYXNlIEJUX1BFUkNOVDoKLSAgICBjYXNlIEJUX1M6IGNhc2UgQlRf
Q1I6IGNhc2UgQlRfTEY6Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiB0
b2s7Ci0jaWZkZWYgWE1MX05TCi0gICAgY2FzZSBCVF9DT0xPTjoKLSAgICAgIHB0ciArPSBNSU5C
UEMoZW5jKTsKLSAgICAgIHN3aXRjaCAodG9rKSB7Ci0gICAgICBjYXNlIFhNTF9UT0tfTkFNRToK
LSAgICAgICAgaWYgKHB0ciA9PSBlbmQpCi0gICAgICAgICAgcmV0dXJuIFhNTF9UT0tfUEFSVElB
TDsKLSAgICAgICAgdG9rID0gWE1MX1RPS19QUkVGSVhFRF9OQU1FOwotICAgICAgICBzd2l0Y2gg
KEJZVEVfVFlQRShlbmMsIHB0cikpIHsKLSAgICAgICAgQ0hFQ0tfTkFNRV9DQVNFUyhlbmMsIHB0
ciwgZW5kLCBuZXh0VG9rUHRyKQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHRvayA9IFhN
TF9UT0tfTk1UT0tFTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgWE1MX1RPS19QUkVGSVhFRF9OQU1FOgotICAgICAgICB0b2sgPSBYTUxf
VE9LX05NVE9LRU47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0jZW5k
aWYKLSAgICBjYXNlIEJUX1BMVVM6Ci0gICAgICBpZiAodG9rID09IFhNTF9UT0tfTk1UT0tFTikg
IHsKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICAgIHJldHVybiBYTUxfVE9LX0lO
VkFMSUQ7Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwot
ICAgICAgcmV0dXJuIFhNTF9UT0tfTkFNRV9QTFVTOwotICAgIGNhc2UgQlRfQVNUOgotICAgICAg
aWYgKHRvayA9PSBYTUxfVE9LX05NVE9LRU4pICB7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRy
OwotICAgICAgICByZXR1cm4gWE1MX1RPS19JTlZBTElEOwotICAgICAgfQotICAgICAgKm5leHRU
b2tQdHIgPSBwdHIgKyBNSU5CUEMoZW5jKTsKLSAgICAgIHJldHVybiBYTUxfVE9LX05BTUVfQVNU
RVJJU0s7Ci0gICAgY2FzZSBCVF9RVUVTVDoKLSAgICAgIGlmICh0b2sgPT0gWE1MX1RPS19OTVRP
S0VOKSAgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIFhNTF9U
T0tfSU5WQUxJRDsKLSAgICAgIH0KLSAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVu
Yyk7Ci0gICAgICByZXR1cm4gWE1MX1RPS19OQU1FX1FVRVNUSU9OOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0lOVkFMSUQ7Ci0g
ICAgfQotICB9Ci0gIHJldHVybiAtdG9rOwotfQotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJ
WChhdHRyaWJ1dGVWYWx1ZVRvaykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQsIGNvbnN0IGNoYXIg
KipuZXh0VG9rUHRyKQotewotICBjb25zdCBjaGFyICpzdGFydDsKLSAgaWYgKHB0ciA9PSBlbmQp
Ci0gICAgcmV0dXJuIFhNTF9UT0tfTk9ORTsKLSAgc3RhcnQgPSBwdHI7Ci0gIHdoaWxlIChwdHIg
IT0gZW5kKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0jZGVmaW5lIExF
QURfQ0FTRShuKSBcCi0gICAgY2FzZSBCVF9MRUFEICMjIG46IHB0ciArPSBuOyBicmVhazsKLSAg
ICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQotI3VuZGVmIExFQURfQ0FT
RQotICAgIGNhc2UgQlRfQU1QOgotICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgcmV0
dXJuIFBSRUZJWChzY2FuUmVmKShlbmMsIHB0ciArIE1JTkJQQyhlbmMpLCBlbmQsIG5leHRUb2tQ
dHIpOwotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19EQVRB
X0NIQVJTOwotICAgIGNhc2UgQlRfTFQ6Ci0gICAgICAvKiB0aGlzIGlzIGZvciBpbnNpZGUgZW50
aXR5IHJlZmVyZW5jZXMgKi8KLSAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJu
IFhNTF9UT0tfSU5WQUxJRDsKLSAgICBjYXNlIEJUX0xGOgotICAgICAgaWYgKHB0ciA9PSBzdGFy
dCkgewotICAgICAgICAqbmV4dFRva1B0ciA9IHB0ciArIE1JTkJQQyhlbmMpOwotICAgICAgICBy
ZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci0gICAgY2FzZSBCVF9DUjoK
LSAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKLSAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwot
ICAgICAgICBpZiAocHRyID09IGVuZCkKLSAgICAgICAgICByZXR1cm4gWE1MX1RPS19UUkFJTElO
R19DUjsKLSAgICAgICAgaWYgKEJZVEVfVFlQRShlbmMsIHB0cikgPT0gQlRfTEYpCi0gICAgICAg
ICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAg
ICAgcmV0dXJuIFhNTF9UT0tfREFUQV9ORVdMSU5FOwotICAgICAgfQotICAgICAgKm5leHRUb2tQ
dHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RPS19EQVRBX0NIQVJTOwotICAgIGNhc2UgQlRf
UzoKLSAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKLSAgICAgICAgKm5leHRUb2tQdHIgPSBwdHIg
KyBNSU5CUEMoZW5jKTsKLSAgICAgICAgcmV0dXJuIFhNTF9UT0tfQVRUUklCVVRFX1ZBTFVFX1M7
Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9L
X0RBVEFfQ0hBUlM7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAqbmV4dFRva1B0ciA9IHB0cjsKLSAgcmV0dXJuIFhN
TF9UT0tfREFUQV9DSEFSUzsKLX0KLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoZW50aXR5
VmFsdWVUb2spKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLCBjb25zdCBjaGFyICoqbmV4dFRva1B0cikK
LXsKLSAgY29uc3QgY2hhciAqc3RhcnQ7Ci0gIGlmIChwdHIgPT0gZW5kKQotICAgIHJldHVybiBY
TUxfVE9LX05PTkU7Ci0gIHN0YXJ0ID0gcHRyOwotICB3aGlsZSAocHRyICE9IGVuZCkgewotICAg
IHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAot
ICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBwdHIgKz0gbjsgYnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIp
IExFQURfQ0FTRSgzKSBMRUFEX0NBU0UoNCkKLSN1bmRlZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJU
X0FNUDoKLSAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgIHJldHVybiBQUkVGSVgoc2Nh
blJlZikoZW5jLCBwdHIgKyBNSU5CUEMoZW5jKSwgZW5kLCBuZXh0VG9rUHRyKTsKLSAgICAgICpu
ZXh0VG9rUHRyID0gcHRyOwotICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBj
YXNlIEJUX1BFUkNOVDoKLSAgICAgIGlmIChwdHIgPT0gc3RhcnQpIHsKLSAgICAgICAgaW50IHRv
ayA9ICBQUkVGSVgoc2NhblBlcmNlbnQpKGVuYywgcHRyICsgTUlOQlBDKGVuYyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQsIG5leHRUb2tQdHIpOwotICAgICAg
ICByZXR1cm4gKHRvayA9PSBYTUxfVE9LX1BFUkNFTlQpID8gWE1MX1RPS19JTlZBTElEIDogdG9r
OwotICAgICAgfQotICAgICAgKm5leHRUb2tQdHIgPSBwdHI7Ci0gICAgICByZXR1cm4gWE1MX1RP
S19EQVRBX0NIQVJTOwotICAgIGNhc2UgQlRfTEY6Ci0gICAgICBpZiAocHRyID09IHN0YXJ0KSB7
Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgIHJldHVy
biBYTUxfVE9LX0RBVEFfTkVXTElORTsKLSAgICAgIH0KLSAgICAgICpuZXh0VG9rUHRyID0gcHRy
OwotICAgICAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLSAgICBjYXNlIEJUX0NSOgotICAg
ICAgaWYgKHB0ciA9PSBzdGFydCkgewotICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAg
ICAgIGlmIChwdHIgPT0gZW5kKQotICAgICAgICAgIHJldHVybiBYTUxfVE9LX1RSQUlMSU5HX0NS
OwotICAgICAgICBpZiAoQllURV9UWVBFKGVuYywgcHRyKSA9PSBCVF9MRikKLSAgICAgICAgICBw
dHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgICpuZXh0VG9rUHRyID0gcHRyOwotICAgICAgICBy
ZXR1cm4gWE1MX1RPS19EQVRBX05FV0xJTkU7Ci0gICAgICB9Ci0gICAgICAqbmV4dFRva1B0ciA9
IHB0cjsKLSAgICAgIHJldHVybiBYTUxfVE9LX0RBVEFfQ0hBUlM7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAqbmV4
dFRva1B0ciA9IHB0cjsKLSAgcmV0dXJuIFhNTF9UT0tfREFUQV9DSEFSUzsKLX0KLQotI2lmZGVm
IFhNTF9EVEQKLQotc3RhdGljIGludCBQVFJDQUxMCi1QUkVGSVgoaWdub3JlU2VjdGlvblRvayko
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmVuZCwgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIGlu
dCBsZXZlbCA9IDA7Ci0gIGlmIChNSU5CUEMoZW5jKSA+IDEpIHsKLSAgICBzaXplX3QgbiA9IGVu
ZCAtIHB0cjsKLSAgICBpZiAobiAmIChNSU5CUEMoZW5jKSAtIDEpKSB7Ci0gICAgICBuICY9IH4o
TUlOQlBDKGVuYykgLSAxKTsKLSAgICAgIGVuZCA9IHB0ciArIG47Ci0gICAgfQotICB9Ci0gIHdo
aWxlIChwdHIgIT0gZW5kKSB7Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0g
ICAgSU5WQUxJRF9DQVNFUyhwdHIsIG5leHRUb2tQdHIpCi0gICAgY2FzZSBCVF9MVDoKLSAgICAg
IGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCi0gICAgICAgIHJldHVybiBYTUxfVE9L
X1BBUlRJQUw7Ci0gICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9FWENMKSkg
ewotICAgICAgICBpZiAoKHB0ciArPSBNSU5CUEMoZW5jKSkgPT0gZW5kKQotICAgICAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIs
IEFTQ0lJX0xTUUIpKSB7Ci0gICAgICAgICAgKytsZXZlbDsKLSAgICAgICAgICBwdHIgKz0gTUlO
QlBDKGVuYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRf
UlNRQjoKLSAgICAgIGlmICgocHRyICs9IE1JTkJQQyhlbmMpKSA9PSBlbmQpCi0gICAgICAgIHJl
dHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBB
U0NJSV9SU1FCKSkgewotICAgICAgICBpZiAoKHB0ciArPSBNSU5CUEMoZW5jKSkgPT0gZW5kKQot
ICAgICAgICAgIHJldHVybiBYTUxfVE9LX1BBUlRJQUw7Ci0gICAgICAgIGlmIChDSEFSX01BVENI
RVMoZW5jLCBwdHIsIEFTQ0lJX0dUKSkgewotICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
LSAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkgewotICAgICAgICAgICAgKm5leHRUb2tQdHIgPSBw
dHI7Ci0gICAgICAgICAgICByZXR1cm4gWE1MX1RPS19JR05PUkVfU0VDVDsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgLS1sZXZlbDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgfQotICByZXR1cm4gWE1MX1RPS19QQVJUSUFMOwotfQotCi0jZW5kaWYgLyogWE1MX0RU
RCAqLwotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChpc1B1YmxpY0lkKShjb25zdCBFTkNP
RElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsIGNvbnN0IGNoYXIgKmVuZCwKLSAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICoqYmFkUHRyKQotewotICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0g
IGVuZCAtPSBNSU5CUEMoZW5jKTsKLSAgZm9yICg7IHB0ciAhPSBlbmQ7IHB0ciArPSBNSU5CUEMo
ZW5jKSkgewotICAgIHN3aXRjaCAoQllURV9UWVBFKGVuYywgcHRyKSkgewotICAgIGNhc2UgQlRf
RElHSVQ6Ci0gICAgY2FzZSBCVF9IRVg6Ci0gICAgY2FzZSBCVF9NSU5VUzoKLSAgICBjYXNlIEJU
X0FQT1M6Ci0gICAgY2FzZSBCVF9MUEFSOgotICAgIGNhc2UgQlRfUlBBUjoKLSAgICBjYXNlIEJU
X1BMVVM6Ci0gICAgY2FzZSBCVF9DT01NQToKLSAgICBjYXNlIEJUX1NPTDoKLSAgICBjYXNlIEJU
X0VRVUFMUzoKLSAgICBjYXNlIEJUX1FVRVNUOgotICAgIGNhc2UgQlRfQ1I6Ci0gICAgY2FzZSBC
VF9MRjoKLSAgICBjYXNlIEJUX1NFTUk6Ci0gICAgY2FzZSBCVF9FWENMOgotICAgIGNhc2UgQlRf
QVNUOgotICAgIGNhc2UgQlRfUEVSQ05UOgotICAgIGNhc2UgQlRfTlVNOgotI2lmZGVmIFhNTF9O
UwotICAgIGNhc2UgQlRfQ09MT046Ci0jZW5kaWYKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRf
UzoKLSAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX1RBQikpIHsKLSAgICAg
ICAgKmJhZFB0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgICBicmVh
azsKLSAgICBjYXNlIEJUX05BTUU6Ci0gICAgY2FzZSBCVF9OTVNUUlQ6Ci0gICAgICBpZiAoIShC
WVRFX1RPX0FTQ0lJKGVuYywgcHRyKSAmIH4weDdmKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIHN3aXRjaCAoQllURV9UT19BU0NJSShlbmMsIHB0cikpIHsKLSAgICAgIGNh
c2UgMHgyNDogLyogJCAqLwotICAgICAgY2FzZSAweDQwOiAvKiBAICovCi0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKmJhZFB0ciA9IHB0cjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDE7Ci19Ci0K
LS8qIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBmb3IgYSB3ZWxsLWZvcm1lZCBzdGFydC10YWcg
b3IgZW1wdHkKLSAgIGVsZW1lbnQgdGFnLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0
ZXMuICBQb2ludGVycyB0byB0aGUKLSAgIGZpcnN0IGF0dHNNYXggYXR0cmlidXRlcyBhcmUgc3Rv
cmVkIGluIGF0dHMuCi0qLwotCi1zdGF0aWMgaW50IFBUUkNBTEwKLVBSRUZJWChnZXRBdHRzKShj
b25zdCBFTkNPRElORyAqZW5jLCBjb25zdCBjaGFyICpwdHIsCi0gICAgICAgICAgICAgICAgaW50
IGF0dHNNYXgsIEFUVFJJQlVURSAqYXR0cykKLXsKLSAgZW51bSB7IG90aGVyLCBpbk5hbWUsIGlu
VmFsdWUgfSBzdGF0ZSA9IGluTmFtZTsKLSAgaW50IG5BdHRzID0gMDsKLSAgaW50IG9wZW4gPSAw
OyAvKiBkZWZpbmVkIHdoZW4gc3RhdGUgPT0gaW5WYWx1ZTsKLSAgICAgICAgICAgICAgICAgICBp
bml0aWFsaXphdGlvbiBqdXN0IHRvIHNodXQgdXAgY29tcGlsZXJzICovCi0KLSAgZm9yIChwdHIg
Kz0gTUlOQlBDKGVuYyk7OyBwdHIgKz0gTUlOQlBDKGVuYykpIHsKLSAgICBzd2l0Y2ggKEJZVEVf
VFlQRShlbmMsIHB0cikpIHsKLSNkZWZpbmUgU1RBUlRfTkFNRSBcCi0gICAgICBpZiAoc3RhdGUg
PT0gb3RoZXIpIHsgXAotICAgICAgICBpZiAobkF0dHMgPCBhdHRzTWF4KSB7IFwKLSAgICAgICAg
ICBhdHRzW25BdHRzXS5uYW1lID0gcHRyOyBcCi0gICAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFs
aXplZCA9IDE7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIHN0YXRlID0gaW5OYW1lOyBcCi0gICAg
ICB9Ci0jZGVmaW5lIExFQURfQ0FTRShuKSBcCi0gICAgY2FzZSBCVF9MRUFEICMjIG46IFNUQVJU
X05BTUUgcHRyICs9IChuIC0gTUlOQlBDKGVuYykpOyBicmVhazsKLSAgICBMRUFEX0NBU0UoMikg
TEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQotI3VuZGVmIExFQURfQ0FTRQotICAgIGNhc2UgQlRf
Tk9OQVNDSUk6Ci0gICAgY2FzZSBCVF9OTVNUUlQ6Ci0gICAgY2FzZSBCVF9IRVg6Ci0gICAgICBT
VEFSVF9OQU1FCi0gICAgICBicmVhazsKLSN1bmRlZiBTVEFSVF9OQU1FCi0gICAgY2FzZSBCVF9R
VU9UOgotICAgICAgaWYgKHN0YXRlICE9IGluVmFsdWUpIHsKLSAgICAgICAgaWYgKG5BdHRzIDwg
YXR0c01heCkKLSAgICAgICAgICBhdHRzW25BdHRzXS52YWx1ZVB0ciA9IHB0ciArIE1JTkJQQyhl
bmMpOwotICAgICAgICBzdGF0ZSA9IGluVmFsdWU7Ci0gICAgICAgIG9wZW4gPSBCVF9RVU9UOwot
ICAgICAgfQotICAgICAgZWxzZSBpZiAob3BlbiA9PSBCVF9RVU9UKSB7Ci0gICAgICAgIHN0YXRl
ID0gb3RoZXI7Ci0gICAgICAgIGlmIChuQXR0cyA8IGF0dHNNYXgpCi0gICAgICAgICAgYXR0c1tu
QXR0c10udmFsdWVFbmQgPSBwdHI7Ci0gICAgICAgIG5BdHRzKys7Ci0gICAgICB9Ci0gICAgICBi
cmVhazsKLSAgICBjYXNlIEJUX0FQT1M6Ci0gICAgICBpZiAoc3RhdGUgIT0gaW5WYWx1ZSkgewot
ICAgICAgICBpZiAobkF0dHMgPCBhdHRzTWF4KQotICAgICAgICAgIGF0dHNbbkF0dHNdLnZhbHVl
UHRyID0gcHRyICsgTUlOQlBDKGVuYyk7Ci0gICAgICAgIHN0YXRlID0gaW5WYWx1ZTsKLSAgICAg
ICAgb3BlbiA9IEJUX0FQT1M7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChvcGVuID09IEJUX0FQ
T1MpIHsKLSAgICAgICAgc3RhdGUgPSBvdGhlcjsKLSAgICAgICAgaWYgKG5BdHRzIDwgYXR0c01h
eCkKLSAgICAgICAgICBhdHRzW25BdHRzXS52YWx1ZUVuZCA9IHB0cjsKLSAgICAgICAgbkF0dHMr
KzsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRfQU1QOgotICAgICAgaWYgKG5B
dHRzIDwgYXR0c01heCkKLSAgICAgICAgYXR0c1tuQXR0c10ubm9ybWFsaXplZCA9IDA7Ci0gICAg
ICBicmVhazsKLSAgICBjYXNlIEJUX1M6Ci0gICAgICBpZiAoc3RhdGUgPT0gaW5OYW1lKQotICAg
ICAgICBzdGF0ZSA9IG90aGVyOwotICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gaW5WYWx1ZQotICAg
ICAgICAgICAgICAgJiYgbkF0dHMgPCBhdHRzTWF4Ci0gICAgICAgICAgICAgICAmJiBhdHRzW25B
dHRzXS5ub3JtYWxpemVkCi0gICAgICAgICAgICAgICAmJiAocHRyID09IGF0dHNbbkF0dHNdLnZh
bHVlUHRyCi0gICAgICAgICAgICAgICAgICAgfHwgQllURV9UT19BU0NJSShlbmMsIHB0cikgIT0g
QVNDSUlfU1BBQ0UKLSAgICAgICAgICAgICAgICAgICB8fCBCWVRFX1RPX0FTQ0lJKGVuYywgcHRy
ICsgTUlOQlBDKGVuYykpID09IEFTQ0lJX1NQQUNFCi0gICAgICAgICAgICAgICAgICAgfHwgQllU
RV9UWVBFKGVuYywgcHRyICsgTUlOQlBDKGVuYykpID09IG9wZW4pKQotICAgICAgICBhdHRzW25B
dHRzXS5ub3JtYWxpemVkID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRfQ1I6IGNhc2Ug
QlRfTEY6Ci0gICAgICAvKiBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHRoZSBmaXJzdCBhdHRyaWJ1
dGUgbmFtZSBpcyBjb3VudGVkCi0gICAgICAgICBBcGFydCBmcm9tIHRoYXQgd2UgY291bGQganVz
dCBjaGFuZ2Ugc3RhdGUgb24gdGhlIHF1b3RlLiAqLwotICAgICAgaWYgKHN0YXRlID09IGluTmFt
ZSkKLSAgICAgICAgc3RhdGUgPSBvdGhlcjsKLSAgICAgIGVsc2UgaWYgKHN0YXRlID09IGluVmFs
dWUgJiYgbkF0dHMgPCBhdHRzTWF4KQotICAgICAgICBhdHRzW25BdHRzXS5ub3JtYWxpemVkID0g
MDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQlRfR1Q6Ci0gICAgY2FzZSBCVF9TT0w6Ci0gICAg
ICBpZiAoc3RhdGUgIT0gaW5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIG5BdHRzOwotICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvKiBub3QgcmVh
Y2hlZCAqLwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi1QUkVGSVgoY2hhclJlZk51bWJl
cikoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyKQotewotICBpbnQgcmVzdWx0
ID0gMDsKLSAgLyogc2tpcCAmIyAqLwotICBwdHIgKz0gMipNSU5CUEMoZW5jKTsKLSAgaWYgKENI
QVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfeCkpIHsKLSAgICBmb3IgKHB0ciArPSBNSU5CUEMo
ZW5jKTsKLSAgICAgICAgICFDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX1NFTUkpOwotICAg
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpKSB7Ci0gICAgICBpbnQgYyA9IEJZVEVfVE9fQVNDSUko
ZW5jLCBwdHIpOwotICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIEFTQ0lJXzA6IGNhc2Ug
QVNDSUlfMTogY2FzZSBBU0NJSV8yOiBjYXNlIEFTQ0lJXzM6IGNhc2UgQVNDSUlfNDoKLSAgICAg
IGNhc2UgQVNDSUlfNTogY2FzZSBBU0NJSV82OiBjYXNlIEFTQ0lJXzc6IGNhc2UgQVNDSUlfODog
Y2FzZSBBU0NJSV85OgotICAgICAgICByZXN1bHQgPDw9IDQ7Ci0gICAgICAgIHJlc3VsdCB8PSAo
YyAtIEFTQ0lJXzApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQVNDSUlfQTogY2FzZSBB
U0NJSV9COiBjYXNlIEFTQ0lJX0M6Ci0gICAgICBjYXNlIEFTQ0lJX0Q6IGNhc2UgQVNDSUlfRTog
Y2FzZSBBU0NJSV9GOgotICAgICAgICByZXN1bHQgPDw9IDQ7Ci0gICAgICAgIHJlc3VsdCArPSAx
MCArIChjIC0gQVNDSUlfQSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBU0NJSV9hOiBj
YXNlIEFTQ0lJX2I6IGNhc2UgQVNDSUlfYzoKLSAgICAgIGNhc2UgQVNDSUlfZDogY2FzZSBBU0NJ
SV9lOiBjYXNlIEFTQ0lJX2Y6Ci0gICAgICAgIHJlc3VsdCA8PD0gNDsKLSAgICAgICAgcmVzdWx0
ICs9IDEwICsgKGMgLSBBU0NJSV9hKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBp
ZiAocmVzdWx0ID49IDB4MTEwMDAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci0g
IGVsc2UgewotICAgIGZvciAoOyAhQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9TRU1JKTsg
cHRyICs9IE1JTkJQQyhlbmMpKSB7Ci0gICAgICBpbnQgYyA9IEJZVEVfVE9fQVNDSUkoZW5jLCBw
dHIpOwotICAgICAgcmVzdWx0ICo9IDEwOwotICAgICAgcmVzdWx0ICs9IChjIC0gQVNDSUlfMCk7
Ci0gICAgICBpZiAocmVzdWx0ID49IDB4MTEwMDAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
fQotICB9Ci0gIHJldHVybiBjaGVja0NoYXJSZWZOdW1iZXIocmVzdWx0KTsKLX0KLQotc3RhdGlj
IGludCBQVFJDQUxMCi1QUkVGSVgocHJlZGVmaW5lZEVudGl0eU5hbWUpKGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZW5kKQotewotICBzd2l0Y2ggKChlbmQgLSBwdHIpL01JTkJQQyhlbmMpKSB7Ci0g
IGNhc2UgMjoKLSAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyICsgTUlOQlBDKGVuYyksIEFT
Q0lJX3QpKSB7Ci0gICAgICBzd2l0Y2ggKEJZVEVfVE9fQVNDSUkoZW5jLCBwdHIpKSB7Ci0gICAg
ICBjYXNlIEFTQ0lJX2w6Ci0gICAgICAgIHJldHVybiBBU0NJSV9MVDsKLSAgICAgIGNhc2UgQVND
SUlfZzoKLSAgICAgICAgcmV0dXJuIEFTQ0lJX0dUOwotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgY2FzZSAzOgotICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX2EpKSB7
Ci0gICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywg
cHRyLCBBU0NJSV9tKSkgewotICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7Ci0gICAgICAgIGlm
IChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJX3ApKQotICAgICAgICAgIHJldHVybiBBU0NJ
SV9BTVA7Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICBjYXNlIDQ6Ci0gICAgc3dpdGNo
IChCWVRFX1RPX0FTQ0lJKGVuYywgcHRyKSkgewotICAgIGNhc2UgQVNDSUlfcToKLSAgICAgIHB0
ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgIGlmIChDSEFSX01BVENIRVMoZW5jLCBwdHIsIEFTQ0lJ
X3UpKSB7Ci0gICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgaWYgKENIQVJfTUFU
Q0hFUyhlbmMsIHB0ciwgQVNDSUlfbykpIHsKLSAgICAgICAgICBwdHIgKz0gTUlOQlBDKGVuYyk7
Ci0gICAgICAgICAgaWYgKENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfdCkpCi0gICAgICAg
ICAgICByZXR1cm4gQVNDSUlfUVVPVDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBU0NJSV9hOgotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYg
KENIQVJfTUFUQ0hFUyhlbmMsIHB0ciwgQVNDSUlfcCkpIHsKLSAgICAgICAgcHRyICs9IE1JTkJQ
QyhlbmMpOwotICAgICAgICBpZiAoQ0hBUl9NQVRDSEVTKGVuYywgcHRyLCBBU0NJSV9vKSkgewot
ICAgICAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsKLSAgICAgICAgICBpZiAoQ0hBUl9NQVRDSEVT
KGVuYywgcHRyLCBBU0NJSV9zKSkKLSAgICAgICAgICAgIHJldHVybiBBU0NJSV9BUE9TOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJFRklYKHNhbWVOYW1lKShjb25zdCBFTkNPRElORyAq
ZW5jLCBjb25zdCBjaGFyICpwdHIxLCBjb25zdCBjaGFyICpwdHIyKQotewotICBmb3IgKDs7KSB7
Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIxKSkgewotI2RlZmluZSBMRUFEX0NBU0Uo
bikgXAotICAgIGNhc2UgQlRfTEVBRCAjIyBuOiBcCi0gICAgICBpZiAoKnB0cjErKyAhPSAqcHRy
MisrKSBcCi0gICAgICAgIHJldHVybiAwOwotICAgIExFQURfQ0FTRSg0KSBMRUFEX0NBU0UoMykg
TEVBRF9DQVNFKDIpCi0jdW5kZWYgTEVBRF9DQVNFCi0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8K
LSAgICAgIGlmICgqcHRyMSsrICE9ICpwdHIyKyspCi0gICAgICAgIHJldHVybiAwOwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBCVF9OT05BU0NJSToKLSAgICBjYXNlIEJUX05NU1RSVDoKLSNpZmRl
ZiBYTUxfTlMKLSAgICBjYXNlIEJUX0NPTE9OOgotI2VuZGlmCi0gICAgY2FzZSBCVF9IRVg6Ci0g
ICAgY2FzZSBCVF9ESUdJVDoKLSAgICBjYXNlIEJUX05BTUU6Ci0gICAgY2FzZSBCVF9NSU5VUzoK
LSAgICAgIGlmICgqcHRyMisrICE9ICpwdHIxKyspCi0gICAgICAgIHJldHVybiAwOwotICAgICAg
aWYgKE1JTkJQQyhlbmMpID4gMSkgewotICAgICAgICBpZiAoKnB0cjIrKyAhPSAqcHRyMSsrKQot
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoTUlOQlBDKGVuYykgPiAyKSB7Ci0gICAg
ICAgICAgaWYgKCpwdHIyKysgIT0gKnB0cjErKykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgIGlmIChNSU5CUEMoZW5jKSA+IDMpIHsKLSAgICAgICAgICAgIGlmICgqcHRyMisrICE9
ICpwdHIxKyspCi0gICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChNSU5CUEMo
ZW5jKSA9PSAxICYmICpwdHIxID09ICpwdHIyKQotICAgICAgICByZXR1cm4gMTsKLSAgICAgIHN3
aXRjaCAoQllURV9UWVBFKGVuYywgcHRyMikpIHsKLSAgICAgIGNhc2UgQlRfTEVBRDI6Ci0gICAg
ICBjYXNlIEJUX0xFQUQzOgotICAgICAgY2FzZSBCVF9MRUFENDoKLSAgICAgIGNhc2UgQlRfTk9O
QVNDSUk6Ci0gICAgICBjYXNlIEJUX05NU1RSVDoKLSNpZmRlZiBYTUxfTlMKLSAgICAgIGNhc2Ug
QlRfQ09MT046Ci0jZW5kaWYKLSAgICAgIGNhc2UgQlRfSEVYOgotICAgICAgY2FzZSBCVF9ESUdJ
VDoKLSAgICAgIGNhc2UgQlRfTkFNRToKLSAgICAgIGNhc2UgQlRfTUlOVVM6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0gIC8qIG5vdCByZWFjaGVkICovCi19Ci0KLXN0YXRpYyBpbnQgUFRSQ0FMTAotUFJF
RklYKG5hbWVNYXRjaGVzQXNjaWkpKGNvbnN0IEVOQ09ESU5HICplbmMsIGNvbnN0IGNoYXIgKnB0
cjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kMSwgY29uc3QgY2hh
ciAqcHRyMikKLXsKLSAgZm9yICg7ICpwdHIyOyBwdHIxICs9IE1JTkJQQyhlbmMpLCBwdHIyKysp
IHsKLSAgICBpZiAocHRyMSA9PSBlbmQxKQotICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFDSEFS
X01BVENIRVMoZW5jLCBwdHIxLCAqcHRyMikpCi0gICAgICByZXR1cm4gMDsKLSAgfQotICByZXR1
cm4gcHRyMSA9PSBlbmQxOwotfQotCi1zdGF0aWMgaW50IFBUUkZBU1RDQUxMCi1QUkVGSVgobmFt
ZUxlbmd0aCkoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyKQotewotICBjb25z
dCBjaGFyICpzdGFydCA9IHB0cjsKLSAgZm9yICg7OykgewotICAgIHN3aXRjaCAoQllURV9UWVBF
KGVuYywgcHRyKSkgewotI2RlZmluZSBMRUFEX0NBU0UobikgXAotICAgIGNhc2UgQlRfTEVBRCAj
IyBuOiBwdHIgKz0gbjsgYnJlYWs7Ci0gICAgTEVBRF9DQVNFKDIpIExFQURfQ0FTRSgzKSBMRUFE
X0NBU0UoNCkKLSN1bmRlZiBMRUFEX0NBU0UKLSAgICBjYXNlIEJUX05PTkFTQ0lJOgotICAgIGNh
c2UgQlRfTk1TVFJUOgotI2lmZGVmIFhNTF9OUwotICAgIGNhc2UgQlRfQ09MT046Ci0jZW5kaWYK
LSAgICBjYXNlIEJUX0hFWDoKLSAgICBjYXNlIEJUX0RJR0lUOgotICAgIGNhc2UgQlRfTkFNRToK
LSAgICBjYXNlIEJUX01JTlVTOgotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAoaW50KShwdHIgLSBzdGFydCk7Ci0gICAg
fQotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogUFRSRkFTVENBTEwKLVBSRUZJWChza2lw
UykoY29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyKQotewotICBmb3IgKDs7KSB7
Ci0gICAgc3dpdGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0gICAgY2FzZSBCVF9MRjoKLSAg
ICBjYXNlIEJUX0NSOgotICAgIGNhc2UgQlRfUzoKLSAgICAgIHB0ciArPSBNSU5CUEMoZW5jKTsK
LSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gcHRyOwotICAgIH0KLSAg
fQotfQotCi1zdGF0aWMgdm9pZCBQVFJDQUxMCi1QUkVGSVgodXBkYXRlUG9zaXRpb24pKGNvbnN0
IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAg
ICAgICAgICBQT1NJVElPTiAqcG9zKQotewotICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgc3dp
dGNoIChCWVRFX1RZUEUoZW5jLCBwdHIpKSB7Ci0jZGVmaW5lIExFQURfQ0FTRShuKSBcCi0gICAg
Y2FzZSBCVF9MRUFEICMjIG46IFwKLSAgICAgIHB0ciArPSBuOyBcCi0gICAgICBicmVhazsKLSAg
ICBMRUFEX0NBU0UoMikgTEVBRF9DQVNFKDMpIExFQURfQ0FTRSg0KQotI3VuZGVmIExFQURfQ0FT
RQotICAgIGNhc2UgQlRfTEY6Ci0gICAgICBwb3MtPmNvbHVtbk51bWJlciA9IChYTUxfU2l6ZSkt
MTsKLSAgICAgIHBvcy0+bGluZU51bWJlcisrOwotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCVF9DUjoKLSAgICAgIHBvcy0+bGluZU51bWJlcisrOwot
ICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgaWYgKHB0ciAhPSBlbmQgJiYgQllURV9U
WVBFKGVuYywgcHRyKSA9PSBCVF9MRikKLSAgICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAg
ICAgcG9zLT5jb2x1bW5OdW1iZXIgPSAoWE1MX1NpemUpLTE7Ci0gICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgcHRyICs9IE1JTkJQQyhlbmMpOwotICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHBvcy0+Y29sdW1uTnVtYmVyKys7Ci0gIH0KLX0KLQotI3VuZGVmIERPX0xFQURfQ0FTRQot
I3VuZGVmIE1VTFRJQllURV9DQVNFUwotI3VuZGVmIElOVkFMSURfQ0FTRVMKLSN1bmRlZiBDSEVD
S19OQU1FX0NBU0UKLSN1bmRlZiBDSEVDS19OQU1FX0NBU0VTCi0jdW5kZWYgQ0hFQ0tfTk1TVFJU
X0NBU0UKLSN1bmRlZiBDSEVDS19OTVNUUlRfQ0FTRVMKLQotI2VuZGlmIC8qIFhNTF9UT0tfSU1Q
TF9DICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfaW1wbC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9maWxlcy9saWIveG1sdG9rX2lt
cGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEwZWE2MGE2NTdkNjYwNzcwODc4
ODA0ZTM5NjI0MjZlODRkNThlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfaW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAs
MCBAQAotLyoKLUNvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9wZW4gU291cmNlIFNvZnR3
YXJlIENlbnRlciBMdGQKLVNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Np
b24uCi0qLwotCi1lbnVtIHsKLSAgQlRfTk9OWE1MLAotICBCVF9NQUxGT1JNLAotICBCVF9MVCwK
LSAgQlRfQU1QLAotICBCVF9SU1FCLAotICBCVF9MRUFEMiwKLSAgQlRfTEVBRDMsCi0gIEJUX0xF
QUQ0LAotICBCVF9UUkFJTCwKLSAgQlRfQ1IsCi0gIEJUX0xGLAotICBCVF9HVCwKLSAgQlRfUVVP
VCwKLSAgQlRfQVBPUywKLSAgQlRfRVFVQUxTLAotICBCVF9RVUVTVCwKLSAgQlRfRVhDTCwKLSAg
QlRfU09MLAotICBCVF9TRU1JLAotICBCVF9OVU0sCi0gIEJUX0xTUUIsCi0gIEJUX1MsCi0gIEJU
X05NU1RSVCwKLSAgQlRfQ09MT04sCi0gIEJUX0hFWCwKLSAgQlRfRElHSVQsCi0gIEJUX05BTUUs
Ci0gIEJUX01JTlVTLAotICBCVF9PVEhFUiwgLyoga25vd24gbm90IHRvIGJlIGEgbmFtZSBvciBu
YW1lIHN0YXJ0IGNoYXJhY3RlciAqLwotICBCVF9OT05BU0NJSSwgLyogbWlnaHQgYmUgYSBuYW1l
IG9yIG5hbWUgc3RhcnQgY2hhcmFjdGVyICovCi0gIEJUX1BFUkNOVCwKLSAgQlRfTFBBUiwKLSAg
QlRfUlBBUiwKLSAgQlRfQVNULAotICBCVF9QTFVTLAotICBCVF9DT01NQSwKLSAgQlRfVkVSQkFS
Ci19OwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi94bWx0b2tfbnMu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQv
ZmlsZXMvbGliL3htbHRva19ucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2I4
OGZkZjRlM2VlYzMxYWY4NjZlZjdhYmEwNTg4ZDlkNzYxNGRlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZmlsZXMvbGliL3htbHRva19ucy5jCisrKyAvZGV2L251
bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBUaGFpIE9w
ZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLSAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZv
ciBjb3B5aW5nIHBlcm1pc3Npb24uCi0qLwotCi0vKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQhICov
Ci0jaWZkZWYgWE1MX1RPS19OU19DCi0KLWNvbnN0IEVOQ09ESU5HICoKLU5TKFhtbEdldFV0ZjhJ
bnRlcm5hbEVuY29kaW5nKSh2b2lkKQotewotICByZXR1cm4gJm5zKGludGVybmFsX3V0ZjhfZW5j
b2RpbmcpLmVuYzsKLX0KLQotY29uc3QgRU5DT0RJTkcgKgotTlMoWG1sR2V0VXRmMTZJbnRlcm5h
bEVuY29kaW5nKSh2b2lkKQotewotI2lmIEJZVEVPUkRFUiA9PSAxMjM0Ci0gIHJldHVybiAmbnMo
aW50ZXJuYWxfbGl0dGxlMl9lbmNvZGluZykuZW5jOwotI2VsaWYgQllURU9SREVSID09IDQzMjEK
LSAgcmV0dXJuICZucyhpbnRlcm5hbF9iaWcyX2VuY29kaW5nKS5lbmM7Ci0jZWxzZQotICBjb25z
dCBzaG9ydCBuID0gMTsKLSAgcmV0dXJuICgqKGNvbnN0IGNoYXIgKikmbgotICAgICAgICAgID8g
Jm5zKGludGVybmFsX2xpdHRsZTJfZW5jb2RpbmcpLmVuYwotICAgICAgICAgIDogJm5zKGludGVy
bmFsX2JpZzJfZW5jb2RpbmcpLmVuYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGNvbnN0IEVOQ09E
SU5HICogY29uc3QgTlMoZW5jb2RpbmdzKVtdID0gewotICAmbnMobGF0aW4xX2VuY29kaW5nKS5l
bmMsCi0gICZucyhhc2NpaV9lbmNvZGluZykuZW5jLAotICAmbnModXRmOF9lbmNvZGluZykuZW5j
LAotICAmbnMoYmlnMl9lbmNvZGluZykuZW5jLAotICAmbnMoYmlnMl9lbmNvZGluZykuZW5jLAot
ICAmbnMobGl0dGxlMl9lbmNvZGluZykuZW5jLAotICAmbnModXRmOF9lbmNvZGluZykuZW5jIC8q
IE5PX0VOQyAqLwotfTsKLQotc3RhdGljIGludCBQVFJDQUxMCi1OUyhpbml0U2NhblByb2xvZyko
Y29uc3QgRU5DT0RJTkcgKmVuYywgY29uc3QgY2hhciAqcHRyLCBjb25zdCBjaGFyICplbmQsCi0g
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm5leHRUb2tQdHIpCi17Ci0gIHJldHVybiBp
bml0U2NhbihOUyhlbmNvZGluZ3MpLCAoY29uc3QgSU5JVF9FTkNPRElORyAqKWVuYywKLSAgICAg
ICAgICAgICAgICAgIFhNTF9QUk9MT0dfU1RBVEUsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKTsKLX0K
LQotc3RhdGljIGludCBQVFJDQUxMCi1OUyhpbml0U2NhbkNvbnRlbnQpKGNvbnN0IEVOQ09ESU5H
ICplbmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kLAotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICoqbmV4dFRva1B0cikKLXsKLSAgcmV0dXJuIGluaXRTY2FuKE5TKGVu
Y29kaW5ncyksIChjb25zdCBJTklUX0VOQ09ESU5HICopZW5jLAotICAgICAgICAgICAgICAgICAg
WE1MX0NPTlRFTlRfU1RBVEUsIHB0ciwgZW5kLCBuZXh0VG9rUHRyKTsKLX0KLQotaW50Ci1OUyhY
bWxJbml0RW5jb2RpbmcpKElOSVRfRU5DT0RJTkcgKnAsIGNvbnN0IEVOQ09ESU5HICoqZW5jUHRy
LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQotewotICBpbnQgaSA9IGdl
dEVuY29kaW5nSW5kZXgobmFtZSk7Ci0gIGlmIChpID09IFVOS05PV05fRU5DKQotICAgIHJldHVy
biAwOwotICBTRVRfSU5JVF9FTkNfSU5ERVgocCwgaSk7Ci0gIHAtPmluaXRFbmMuc2Nhbm5lcnNb
WE1MX1BST0xPR19TVEFURV0gPSBOUyhpbml0U2NhblByb2xvZyk7Ci0gIHAtPmluaXRFbmMuc2Nh
bm5lcnNbWE1MX0NPTlRFTlRfU1RBVEVdID0gTlMoaW5pdFNjYW5Db250ZW50KTsKLSAgcC0+aW5p
dEVuYy51cGRhdGVQb3NpdGlvbiA9IGluaXRVcGRhdGVQb3NpdGlvbjsKLSAgcC0+ZW5jUHRyID0g
ZW5jUHRyOwotICAqZW5jUHRyID0gJihwLT5pbml0RW5jKTsKLSAgcmV0dXJuIDE7Ci19Ci0KLXN0
YXRpYyBjb25zdCBFTkNPRElORyAqCi1OUyhmaW5kRW5jb2RpbmcpKGNvbnN0IEVOQ09ESU5HICpl
bmMsIGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqZW5kKQotewotI2RlZmluZSBFTkNPRElO
R19NQVggMTI4Ci0gIGNoYXIgYnVmW0VOQ09ESU5HX01BWF07Ci0gIGNoYXIgKnAgPSBidWY7Ci0g
IGludCBpOwotICBYbWxVdGY4Q29udmVydChlbmMsICZwdHIsIGVuZCwgJnAsIHAgKyBFTkNPRElO
R19NQVggLSAxKTsKLSAgaWYgKHB0ciAhPSBlbmQpCi0gICAgcmV0dXJuIDA7Ci0gICpwID0gMDsK
LSAgaWYgKHN0cmVxY2koYnVmLCBLV19VVEZfMTYpICYmIGVuYy0+bWluQnl0ZXNQZXJDaGFyID09
IDIpCi0gICAgcmV0dXJuIGVuYzsKLSAgaSA9IGdldEVuY29kaW5nSW5kZXgoYnVmKTsKLSAgaWYg
KGkgPT0gVU5LTk9XTl9FTkMpCi0gICAgcmV0dXJuIDA7Ci0gIHJldHVybiBOUyhlbmNvZGluZ3Mp
W2ldOwotfQotCi1pbnQKLU5TKFhtbFBhcnNlWG1sRGVjbCkoaW50IGlzR2VuZXJhbFRleHRFbnRp
dHksCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5HICplbmMsCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZW5kLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqYmFkUHRyLAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdmVyc2lvblB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqKnZlcnNpb25FbmRQdHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiplbmNvZGluZ05hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEVOQ09ESU5H
ICoqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgIGludCAqc3RhbmRhbG9uZSkKLXsKLSAg
cmV0dXJuIGRvUGFyc2VYbWxEZWNsKE5TKGZpbmRFbmNvZGluZyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpc0dlbmVyYWxUZXh0RW50aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgZW5j
LAotICAgICAgICAgICAgICAgICAgICAgICAgcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgYmFkUHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgdmVyc2lvblB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25FbmRQdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ05hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmUpOwot
fQotCi0jZW5kaWYgLyogWE1MX1RPS19OU19DICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2V4cGF0L2Z1enovT1dORVJTIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9mdXp6L09X
TkVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIzMGY3ZDhiZjEzOTkzZGFkYTI5
N2M5MzA0YTYwNjczZjI3MzA4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L2V4cGF0L2Z1enovT1dORVJTCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1haXphdHNr
eUBjaHJvbWl1bS5vcmcKLW1tb3JvekBjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvZXhwYXQvZnV6ei9leHBhdF94
bWxfcGFyc2VfZnV6emVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS9leHBhdC9mdXp6L2V4cGF0X3htbF9wYXJzZV9mdXp6ZXIuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTIwNzEzNjMzOWMyMDc5OGEyOTEyNDhkY2I1MmU2MmY0
ODM5MmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9leHBhdC9mdXp6L2V4
cGF0X3htbF9wYXJzZV9mdXp6ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0v
LyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNp
bmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgInRoaXJk
X3BhcnR5L2V4cGF0L2ZpbGVzL2xpYi9leHBhdC5oIgotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1z
dGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4ga0VuY29kaW5ncyA9IHt7IlVURi0xNiIsICJVVEYtOCIs
ICJJU08tODg1OS0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
VVMtQVNDSUkiLCAiVVRGLTE2QkUiLCAiVVRGLTE2TEUiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJJTlZBTElERU5DT0RJTkcifX07Ci0KLS8vIEVudHJ5IHBvaW50
IGZvciBMaWJGdXp6ZXIuCi1leHRlcm4gIkMiIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIGNvbnN0IGNoYXIqIGRhdGFQdHIg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKTsKLQotICBmb3IgKGludCB1c2Vf
bnMgPSAwOyB1c2VfbnMgPD0gMTsgKyt1c2VfbnMpIHsKLSAgICBmb3IgKGF1dG8gZW5jIDoga0Vu
Y29kaW5ncykgewotICAgICAgWE1MX1BhcnNlciBwYXJzZXIgPQotICAgICAgICAgIHVzZV9ucyA/
IFhNTF9QYXJzZXJDcmVhdGVOUyhlbmMsICdcbicpIDogWE1MX1BhcnNlckNyZWF0ZShlbmMpOwot
ICAgICAgWE1MX1BhcnNlKHBhcnNlciwgZGF0YVB0ciwgc2l6ZSwgdHJ1ZSk7Ci0gICAgICBYTUxf
UGFyc2VyRnJlZShwYXJzZXIpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>