<?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>57288</bug_id>
          
          <creation_ts>2011-03-28 17:25:37 -0700</creation_ts>
          <short_desc>Move libtess from WebCore/thirdparty to ThirdParty</short_desc>
          <delta_ts>2011-04-12 14:39:22 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374911</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-28 17:25:37 -0700</bug_when>
    <thetext>Move libtess from WebCore/thirdparty to ThirdParty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374913</commentid>
    <comment_count>1</comment_count>
      <attachid>87243</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-28 17:28:34 -0700</bug_when>
    <thetext>Created attachment 87243
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374914</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-28 17:29:18 -0700</bug_when>
    <thetext>@kbr: Thoughts on execution?  I wasn&apos;t sure whether to trim &quot;ThirdParty&quot; from the include path...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374935</commentid>
    <comment_count>3</comment_count>
      <attachid>87247</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-28 18:25:46 -0700</bug_when>
    <thetext>Created attachment 87247
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374937</commentid>
    <comment_count>4</comment_count>
      <attachid>87247</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-28 18:28:39 -0700</bug_when>
    <thetext>Comment on attachment 87247
patch

Marking for review b/c it builds locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375637</commentid>
    <comment_count>5</comment_count>
      <attachid>87247</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-29 12:02:14 -0700</bug_when>
    <thetext>Comment on attachment 87247
patch

Thanks for moving and cleaning this up. It basically looks fine. There are some files which aren&apos;t showing up in the patch such as LICENSE.txt and GNUmakefile. I assume that these files do exist in the new directory and that they&apos;re just not showing up in the patch because there were no changes to the content. As long as you manually verify that all of the files exist in the new directory it looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384395</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-12 14:39:22 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/83641 and http://trac.webkit.org/changeset/83642</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87243</attachid>
            <date>2011-03-28 17:28:34 -0700</date>
            <delta_ts>2011-03-28 18:25:42 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-57288-20110328172833.patch</filename>
            <type>text/plain</type>
            <size>292895</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDMt
MjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxpYnRlc3MgZnJvbSBXZWJDb3JlL3Ro
aXJkcGFydHkgdG8gVGhpcmRQYXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTcyODgKKworICAgICAgICBXZSdyZSBwdXR0aW5nIHRoaXJkIHBhcnR5
IGNvZGUgaW4gU291cmNlL1RoaXJkUGFydHkgdGhlc2UgZGF5cy4KKworICAgICAgICAqIFNvdXJj
ZS9UaGlyZFBhcnR5L2dsdTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUuCisgICAgICAgICogU291cmNlL1RoaXJkUGFydHkvZ2x1L2dsdS5neXA6IEFkZGVkLgorCiAy
MDExLTAzLTI4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9SRUFETUUud2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2dsdS9SRUFETUUud2Via2l0CShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2dsdS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMyw4IEBAIFRoZSBm
b2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gb3JkZXIKICAgLSBUaGUgcmVtb3ZhbCBvZiBp
bmNsdXNpb24gb2YgR0wvZ2x1LmggYW5kIHJlcGxhY2VtZW50IHdpdGggYW4KICAgICBpbmNsdWRl
IG9mIGludGVybmFsX2dsdS5oLgogCi0gIC0gSW5jbHVkZXMgd2VyZSBtb2RpZmllZCB0byBiZSBz
Y29wZWQgd2l0aGluIHRoaXJkcGFydHkvZ2x1LyBhbmQKLSAgICB0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzLy4KKyAgLSBJbmNsdWRlcyB3ZXJlIG1vZGlmaWVkIHRvIGJlIHNjb3BlZCB3aXRoaW4gVGhp
cmRQYXJ0eS9nbHUvIGFuZAorICAgIFRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvLgogCiAgIC0gVGhl
IGVudHJ5IHBvaW50cyB0byB0aGUgdGVzc2VsbGF0b3Igd2VyZSBwcmVmaXhlZCB3aXRoIGludGVy
bmFsXwogICAgIHRvIGF2b2lkIHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55IGhvc3QgT1MgdmVy
c2lvbiBvZiBHTFUuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1Lmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1Lmd5cAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2dsdS9nbHUuZ3lwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
Cit7CisgICd0YXJnZXRzJzogW3sKKyAgICAndGFyZ2V0X25hbWUnOiAnbGlidGVzcycsCisgICAg
J3R5cGUnOiAnPChsaWJyYXJ5KScsCisgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICcuLi8u
LicsCisgICAgXSwKKyAgICAnc291cmNlcyc6IFsKKyAgICAgICdnbHVvcy5oJywKKyAgICAgICdp
bnRlcm5hbF9nbHUuaCcsCisgICAgICAnbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAnbGli
dGVzcy9kaWN0LmMnLAorICAgICAgJ2xpYnRlc3MvZGljdC5oJywKKyAgICAgICdsaWJ0ZXNzL2dl
b20uYycsCisgICAgICAnbGlidGVzcy9nZW9tLmgnLAorICAgICAgJ2xpYnRlc3MvbWVtYWxsb2Mu
YycsCisgICAgICAnbGlidGVzcy9tZW1hbGxvYy5oJywKKyAgICAgICdsaWJ0ZXNzL21lc2guYycs
CisgICAgICAnbGlidGVzcy9tZXNoLmgnLAorICAgICAgJ2xpYnRlc3Mvbm9ybWFsLmMnLAorICAg
ICAgJ2xpYnRlc3Mvbm9ybWFsLmgnLAorICAgICAgJ2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCcs
CisgICAgICAnbGlidGVzcy9wcmlvcml0eXEtc29ydC5oJywKKyAgICAgICdsaWJ0ZXNzL3ByaW9y
aXR5cS5jJywKKyAgICAgICdsaWJ0ZXNzL3ByaW9yaXR5cS5oJywKKyAgICAgICdsaWJ0ZXNzL3Jl
bmRlci5jJywKKyAgICAgICdsaWJ0ZXNzL3JlbmRlci5oJywKKyAgICAgICdsaWJ0ZXNzL3N3ZWVw
LmMnLAorICAgICAgJ2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAnbGlidGVzcy90ZXNzLmMnLAor
ICAgICAgJ2xpYnRlc3MvdGVzcy5oJywKKyAgICAgICdsaWJ0ZXNzL3Rlc3Ntb25vLmMnLAorICAg
ICAgJ2xpYnRlc3MvdGVzc21vbm8uaCcsCisgICAgXSwKKyAgfV0sCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2lmbmRlZiBJTlRFUk5BTF9HTFVfSF8KICNkZWZpbmUgSU5URVJOQUxfR0xVX0hfCiAKLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2dsdW9zLmgiCiAKIC8qIFByaW1pdGl2ZXMgKi8KICNkZWZpbmUgR0xfTElORV9MT09QICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvZGljdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL2RpY3QuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9kaWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKICovCiAKICNpbmNs
dWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlz
dC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNs
dWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKIAogLyogcmVhbGx5IF9fZ2xfZGljdExpc3RO
ZXdEaWN0ICovCiBEaWN0ICpkaWN0TmV3RGljdCggdm9pZCAqZnJhbWUsCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBA
QAogKi8KIAogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ds
dW9zLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9n
bHUvZ2x1b3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKIAogaW50IF9fZ2xfdmVydExl
cSggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYgKQogewpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvZ2VvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL2dlb20uaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9nZW9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpZm5k
ZWYgX19nZW9tX2hfCiAjZGVmaW5lIF9fZ2VvbV9oXwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9tZXNoLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNo
LmgiCiAKICNpZmRlZiBOT19CUkFOQ0hfQ09ORElUSU9OUwogLyogTUlQUyBhcmNoaXRlY3R1cmUg
aGFzIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIGV2YWx1YXRlIGJvb2xlYW4KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwkocmV2aXNpb24gODIxNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5jCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBACiAqLwogCiAjaW5jbHVkZSAic3RyaW5nLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvbWVtYWxsb2MuaCIKIAogaW50IF9fZ2xfbWVtSW5pdCggc2l6ZV90IG1heEZhc3Qg
KQogewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYwkocmV2aXNpb24gODIx
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDkgKzQxLDkgQEAKIAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0
ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5j
bHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxT
RSAwCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oCShyZXZpc2lvbiA4MjE3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQAogI2lmbmRlZiBfX21lc2hfaF8KICNkZWZpbmUgX19tZXNoX2hf
CiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKKyNpbmNsdWRlICJU
aGlyZFBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgR0xVbWVzaCBH
TFVtZXNoOyAKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJKHJl
dmlzaW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMCBAQAogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+
CiAjaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0j
aW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUg
IlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2xpYnRlc3Mvbm9ybWFsLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNz
LmgiCiAKICNkZWZpbmUgVFJVRSAxCiAjZGVmaW5lIEZBTFNFIDAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBACiAjaWZuZGVmIF9fbm9ybWFsX2hfCiAjZGVmaW5lIF9fbm9ybWFsX2hfCiAKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL3Rlc3MuaCIKIAogLyogX19nbF9wcm9qZWN0UG9seWdvbiggdGVzcyApIGRldGVy
bWluZXMgdGhlIHBvbHlnb24gbm9ybWFsCiAgKiBhbmQgcHJvamVjdCB2ZXJ0aWNlcyBvbnRvIHRo
ZSBwbGFuZSBvZiB0aGUgcG9seWdvbi4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL3ByaW9yaXR5cS1oZWFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1h
bGxvYy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAu
aCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisjaW5jbHVk
ZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oIgogCiAjZGVmaW5lIElO
SVRfU0laRQkzMgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEtc29ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3By
aW9yaXR5cS1zb3J0LmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QAogI2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCiAjZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRf
aF8KIAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCIK
KyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCiAKICN1
bmRlZiBQUWtleQogI3VuZGVmIFBRaGFuZGxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuYwkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE2
IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBMT05HX01B
WCAqLwogI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9z
LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1
ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9tZW1hbGxvYy5oIgogCiAvKiBJbmNsdWRlIGFsbCB0aGUgY29kZSBmb3IgdGhlIHJlZ3Vs
YXIgaGVhcC1iYXNlZCBxdWV1ZSBoZXJlLiAqLwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEtaGVhcC5jIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLWhlYXAuYyIKIAogLyogTm93IHJlZGVmaW5lIGFsbCB0aGUgZnVuY3Rpb24g
bmFtZXMgdG8gbWFwIHRvIHRoZWlyICJTb3J0IiB2ZXJzaW9ucy4gKi8KIAotI2luY2x1ZGUgInRo
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaCIKKyNpbmNsdWRlICJUaGlyZFBh
cnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgiCiAKIC8qIHJlYWxseSBfX2dsX3BxU29y
dE5ld1ByaW9yaXR5USAqLwogUHJpb3JpdHlRICpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQ
UWtleSBrZXkxLCBQUWtleSBrZXkyKSApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAog
I2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCiAjZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRfaF8K
IAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCiAKICN1bmRl
ZiBQUWtleQogI3VuZGVmIFBRaGFuZGxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVz
cy9yZW5kZXIuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuYwkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDEwIEBACiAKICNpbmNs
dWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvZ2x1
b3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRl
ICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkv
Z2x1L2xpYnRlc3MvdGVzcy5oIgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxTRSAwCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkocmV2aXNpb24gODIxNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQAogI2lmbmRlZiBfX3JlbmRlcl9oXwogI2RlZmluZSBfX3JlbmRl
cl9oXwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCisjaW5jbHVk
ZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCiAKIC8qIF9fZ2xfcmVuZGVyTWVzaCgg
dGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKICAq
IGZhbnMsIHN0cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZm
b3J0IGlzIG1hZGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwkocmV2
aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCSh3
b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTQgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4JCS8q
IExPTkdfTUFYICovCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgotI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCIKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9nbHVvcy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oIgorI2lu
Y2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgorI2luY2x1ZGUgIlRoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL21lc2guaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5o
IgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCIKKyNpbmNsdWRlICJU
aGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUg
RkFMU0UgMApJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpZm5kZWYgX19zd2VlcF9oXwogI2RlZmluZSBf
X3N3ZWVwX2hfCiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKIAogLyogX19nbF9jb21wdXRl
SW50ZXJpb3IoIHRlc3MgKSBjb21wdXRlcyB0aGUgcGxhbmFyIGFycmFuZ2VtZW50IHNwZWNpZmll
ZAogICogYnkgdGhlIGdpdmVuIGNvbnRvdXJzLCBhbmQgZnVydGhlciBzdWJkaXZpZGVzIHRoaXMg
YXJyYW5nZW1lbnQKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmMJKHJldmlz
aW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNCArNDMsMTQgQEAKICNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNs
dWRlIDxzdGRkZWYuaD4KIAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5j
bHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIK
LSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzbW9uby5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5j
bHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIK
KyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgiCisjaW5jbHVkZSAiVGhp
cmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy90ZXNzbW9uby5oIgogCiAjZGVmaW5lIEdMVV9URVNTX0RFRkFVTFRfVE9MRVJBTkNFIDAu
MAogI2RlZmluZSBHTFVfVEVTU19NRVNICQkxMDAxMTIJLyogdm9pZCAoKikoR0xVbWVzaCAqbWVz
aCkJICAgICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDEwIEBACiAKICNpbmNsdWRlIDxzZXRqbXAuaD4KIAotI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oIgotI2luY2x1ZGUgInRoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvZGljdC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
bWVzaC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgiCisj
aW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1LmgiCisjaW5jbHVkZSAiVGhpcmRQ
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVz
cy9tZXNoLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaCIK
IAogLyogVGhlIGJlZ2luL2VuZCBjYWxscyBtdXN0IGJlIHByb3Blcmx5IG5lc3RlZC4gIFdlIGtl
ZXAgdHJhY2sgb2YKICAqIHRoZSBjdXJyZW50IHN0YXRlIHRvIGVuZm9yY2UgdGhlIG9yZGVyaW5n
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5jCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxMCBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKLSNpbmNsdWRlICJ0aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3Rlc3Ntb25vLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvZ2x1b3MuaCIKKyNpbmNsdWRl
ICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Nt
b25vLmgiCiAKICNkZWZpbmUgQWRkV2luZGluZyhlRHN0LGVTcmMpCShlRHN0LT53aW5kaW5nICs9
IGVTcmMtPndpbmRpbmcsIFwKIAkJCQkgZURzdC0+U3ltLT53aW5kaW5nICs9IGVTcmMtPlN5bS0+
d2luZGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTc2KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjgg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxpYnRlc3MgZnJvbSBXZWJDb3JlL3RoaXJk
cGFydHkgdG8gVGhpcmRQYXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTcyODgKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgor
ICAgICAgICAgICAgLSBBZGQgbGlidGVzcyBhcyBhIGxlZ2l0IGRlcGVuZGVuY3kuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAgICAgLSBSZW1vdmUgbGlidGVzcyBmaWxlcyBmcm9t
IHRoZSBneXBpLgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1OiBSZW1vdmVkLgorCiAyMDExLTAz
LTI4ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDgyMTczKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01ODAxLDMx
ICs1ODAxLDYgQEAKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgnLAogICAgICAgICAgICAgJ3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCcsCiAgICAgICAgICAgICAnc3ZnL3Byb3BlcnRpZXMvU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUu
aCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCi0g
ICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMnLAotICAgICAgICAgICAg
J3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL2dlb20uYycsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9nZW9tLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2Mu
YycsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oJywKLSAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYycsCi0gICAgICAgICAgICAn
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvbm9ybWFsLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3Jp
dHlxLWhlYXAuaCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEtc29ydC5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5jJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oJywK
LSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jJywKLSAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oJywKLSAgICAgICAgICAgICd0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3Mvc3dlZXAuaCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90
ZXNzLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oJywKLSAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAotICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaCcsCiAgICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwJywKICAgICAgICAgICAgICd3ZWJhdWRp
by9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oJywKICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRp
b0J1ZmZlci5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgJy4uL3N2Zy9ncmFw
aGljcycsCiAgICAgICAnLi4vc3ZnL2dyYXBoaWNzL2ZpbHRlcnMnLAogICAgICAgJy4uL3N2Zy9w
cm9wZXJ0aWVzJywKLSAgICAgICcuLi90aGlyZHBhcnR5L2dsdScsCisgICAgICAnLi4vLi4vVGhp
cmRQYXJ0eS9nbHUnLAogICAgICAgJy4uL3dlYmF1ZGlvJywKICAgICAgICcuLi93ZWJzb2NrZXRz
JywKICAgICAgICcuLi93b3JrZXJzJywKQEAgLTk2Miw2ICs5NjIsNyBAQAogICAgICAgJ3R5cGUn
OiAnbm9uZScsCiAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAnd2ViY29yZV9iaW5k
aW5ncycsCisgICAgICAgICcuLi8uLi9UaGlyZFBhcnR5L2dsdS9nbHUuZ3lwOmxpYnRlc3MnLAog
ICAgICAgICAnLi4vLi4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwL0phdmFTY3Jp
cHRDb3JlLmd5cDp5YXJyJywKICAgICAgICAgJy4uLy4uL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXA6d3RmJywKICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLApAQCAtMTI0
Nyw4ICsxMjQ4LDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9M
b2NhbGl6ZWROdW1iZXJOb25lXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmVcXC5jcHAkJ10sCi0KLSAgICAgICAgWydp
bmNsdWRlJywgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvJ10sCiAgICAgICBdLAogICAgICAgJ2Nv
bmRpdGlvbnMnOiBbCiAgICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIicsIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0CShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMxICswLDAgQEAKLVNHSSBGUkVFIFNPRlRXQVJFIExJQ0VOU0Ug
QiAoVmVyc2lvbiAyLjAsIFNlcHQuIDE4LCAyMDA4KSAKLQotQ29weXJpZ2h0IChDKSBbZGF0ZXMg
b2YgZmlyc3QgcHVibGljYXRpb25dIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsCi1SaWdodHMg
UmVzZXJ2ZWQuCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz
c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iU29mdHdhcmUiKSwgdG8gZGVhbCBp
biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi13aXRob3V0IGxp
bWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
Ci1kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3
YXJlLCBhbmQgdG8KLXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5p
c2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1U
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIG9mIGZpcnN0IHB1
YmxpY2F0aW9uCi1hbmQgZWl0aGVyIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSByZWZlcmVu
Y2UgdG8gSFlQRVJMSU5LCi0iaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyJodHRw
Oi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvCi1zaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg
Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotU29mdHdhcmUuCi0KLVRIRSBT
T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAotRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX
QVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFORAotTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09OIEdS
QVBISUNTLCBJTkMuIEJFIExJQUJMRQotRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GCi1DT05UUkFDVCwgVE9SVCBPUiBPVEhF
UldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLVdJVEggVEhFIFNP
RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi1F
eGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBTaWxpY29uIEdy
YXBoaWNzLAotSW5jLiBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndp
c2UgdG8gcHJvbW90ZSB0aGUKLXNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNv
ZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotYXV0aG9yaXphdGlvbiBmcm9tIFNpbGljb24g
R3JhcGhpY3MsIEluYy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L1JFQURN
RS53ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVB
RE1FLndlYmtpdAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLVRoaXMg
aXMgYSBuZWFybHkgdmVyYmF0aW0gY29weSBvZiB0aGUgR0xVIHRlc3NlbGxhdG9yIHNvdXJjZSBj
b2RlIGZyb20KLVNHSSdzIE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24gYXQKLWh0dHA6Ly9v
c3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlLyAuIFBlcgotaHR0cDovL29zcy5zZ2kuY29t
L3Byb2plY3RzL0ZyZWVCLyAsIHRoZSBjb2RlIGlzIGNvdmVyZWQgdW5kZXIgdGhlIFNHSQotRnJl
ZSBTb2Z0d2FyZSBMaWNlbnNlIEIsIHZlcnNpb24gMi4wLCBhIGNvcHkgb2Ygd2hpY2ggaXMgaW4K
LUxJQ0VOU0UudHh0IGluIHRoaXMgZGlyZWN0b3J5LgotCi1UaGUgZm9sbG93aW5nIGNoYW5nZXMg
d2VyZSBtYWRlIGluIG9yZGVyIHRvIGluY29ycG9yYXRlIHRoaXMgY29kZToKLQotICAtIFRoZSBh
ZGRpdGlvbiBvZiBhIHNpbXBsaWZpZWQgZ2x1b3MuaCB0byBlbGltaW5hdGUgb3BlcmF0aW5nIHN5
c3RlbQotICAgIGRlcGVuZGVuY2llcy4KLQotICAtIFRoZSByZW1vdmFsIG9mIGluY2x1c2lvbiBv
ZiBHTC9nbHUuaCBhbmQgcmVwbGFjZW1lbnQgd2l0aCBhbgotICAgIGluY2x1ZGUgb2YgaW50ZXJu
YWxfZ2x1LmguCi0KLSAgLSBJbmNsdWRlcyB3ZXJlIG1vZGlmaWVkIHRvIGJlIHNjb3BlZCB3aXRo
aW4gdGhpcmRwYXJ0eS9nbHUvIGFuZAotICAgIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvLgotCi0g
IC0gVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgdGVzc2VsbGF0b3Igd2VyZSBwcmVmaXhlZCB3aXRo
IGludGVybmFsXwotICAgIHRvIGF2b2lkIHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55IGhvc3Qg
T1MgdmVyc2lvbiBvZiBHTFUuCi0KLSAgLSBJbiB0ZXNzLmMsIHRoZSBvYnNvbGV0ZSBlbnRyeSBw
b2ludHMgZ2x1QmVnaW5Qb2x5Z29uLAotICAgIGdsdU5leHRDb250b3VyIGFuZCBnbHVFbmRQb2x5
Z29uIGluIHRlc3MuYyB3ZXJlICNpZiAwJ2Qgb3V0LgotICAgIERlZmF1bHQgYnJhbmNoZXMgd2Vy
ZSBhZGRlZCB0byB0aGUgc3dpdGNoIHN0YXRlbWVudHMgaW4gR290b1N0YXRlLgotCi0gIC0gSW4g
bWVtYWxsb2MuaCwgdGhlIGluY2x1ZGUgb2YgbWFsbG9jLmggd2FzIGNoYW5nZWQgdG8gYW4gaW5j
bHVkZQotICAgIG9mIHN0ZGxpYi5oLgotCi0gIC0gSW4gbm9ybWFsLmMsIGFuIHVudXNlZCB2YXJp
YWJsZSAidyIgd2FzIHJlbW92ZWQgZnJvbQotICAgIF9fZ2xfcHJvamVjdFBvbHlnb24uICNpZiBn
dWFyZHMgd2VyZSBwbGFjZWQgYXJvdW5kIHRoZSBkZWZpbml0aW9uCi0gICAgb2YgdGhlIHVudXNl
ZCBOb3JtYWxpemUgZnVuY3Rpb24uCi0KLSAgLSBJbiBwcmlvcml0eXEtaGVhcC5jLCBhbiAjaW5j
bHVkZSBvZiA8bGltaXRzLmg+IHdhcyBhZGRlZC4KLQotICAtIEluIHN3ZWVwLmMsIElzV2luZGlu
Z0luc2lkZSgpIHdhcyBnaXZlbiBhIHJldHVybiB2YWx1ZSB0byBzaWxlbmNlIGEKLSAgICB3YXJu
aW5nLWFzLWVycm9yIGluIHJlbGVhc2UgYnVpbGRzLgotCi0gIC0gSW4gc3dlZXAuYywgRG9uZUVk
Z2VEaWN0KCkncyBmaXhlZEVkZ2VzIHdhcyB3cmFwcGVkIGluICNpbmRlZiBOREVCVUcsIHRvCi0g
ICAgc2lsZW5jZSBhIHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBidWlsZHMuCi0KLSAgLSBJ
biBwcmlvcml0eXEuYywgcmVuZGVyLmMsIGFuZCBvdGhlcnM6ICB0aGUgY29uc3RydWN0ICJpZigx
KS4uLmVsc2UiIHdhcwotICByZXBsYWNlZCB3aXRoICJkb3suLi59d2hpbGUoMSkiIHRvIHNpbGVu
Y2UgYSB3YXJuaW5nLWFzLWVycm9yIGluIE1hYyBidWlsZHMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90aGlyZHBhcnR5L2dsdS9nbHVvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2dsdW9zLmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgR0xVT1NfSF8KLSNkZWZpbmUgR0xVT1NfSF8KLQotLy8gVGhpcyBoZWFkZXIgcHJvdmlk
ZXMgdGhlIG1pbmltYWwgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIGNvbXBpbGUgdGhlCi0vLyBHTFUg
dGVzc2VsbGF0b3Igc291cmNlcy4KLSNkZWZpbmUgR0xBUElFTlRSWQotCi10eXBlZGVmIHVuc2ln
bmVkIGNoYXIgR0xib29sZWFuOwotdHlwZWRlZiBkb3VibGUgR0xkb3VibGU7Ci10eXBlZGVmIHVu
c2lnbmVkIGludCBHTGVudW07Ci10eXBlZGVmIGZsb2F0IEdMZmxvYXQ7Ci10eXBlZGVmIHZvaWQg
R0x2b2lkOwotCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0KLSNlbmRpZiAgLy8gR0xVT1NfSF8K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCShy
ZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFs
X2dsdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTAsIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgaGVhZGVyIGlz
IGEgc2tlbGV0b24gc3Vic3RpdHV0ZSBmb3IgR0wvZ2x1Lmggd2hpY2ggY29udGFpbnMKLS8vIG9u
bHkgdGhlIGRlZmluaXRpb25zLCBjb25zdGFudHMgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBu
ZWNlc3NhcnkKLS8vIHRvIGNvbXBpbGUgdGhlIEdMVSB0ZXNzZWxsYXRvci4KLQotI2lmbmRlZiBJ
TlRFUk5BTF9HTFVfSF8KLSNkZWZpbmUgSU5URVJOQUxfR0xVX0hfCi0KLSNpbmNsdWRlICJ0aGly
ZHBhcnR5L2dsdS9nbHVvcy5oIgotCi0vKiBQcmltaXRpdmVzICovCi0jZGVmaW5lIEdMX0xJTkVf
TE9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgR0xfVFJJQU5H
TEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHTF9UUklBTkdM
RV9TVFJJUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIEdMX1RSSUFOR0xF
X0ZBTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYKLQotLyogRXJyb3JDb2RlICovCi0j
ZGVmaW5lIEdMVV9JTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgICAxMDA5MDAKLSNkZWZp
bmUgR0xVX0lOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICAgIDEwMDkwMQotI2RlZmluZSBH
TFVfT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgICAgMTAwOTAyCi0KLS8qIFRlc3NDYWxs
YmFjayAqLwotI2RlZmluZSBHTFVfVEVTU19CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgMTAw
MTAwCi0jZGVmaW5lIEdMVV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDAK
LSNkZWZpbmUgR0xVX1RFU1NfVkVSVEVYICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMQotI2Rl
ZmluZSBHTFVfVkVSVEVYICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAxCi0jZGVmaW5l
IEdMVV9URVNTX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDIKLSNkZWZpbmUgR0xV
X0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMgotI2RlZmluZSBHTFVfVEVT
U19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAzCi0jZGVmaW5lIEdMVV9URVNTX0VE
R0VfRkxBRyAgICAgICAgICAgICAgICAgICAxMDAxMDQKLSNkZWZpbmUgR0xVX0VER0VfRkxBRyAg
ICAgICAgICAgICAgICAgICAgICAgIDEwMDEwNAotI2RlZmluZSBHTFVfVEVTU19DT01CSU5FICAg
ICAgICAgICAgICAgICAgICAgMTAwMTA1Ci0jZGVmaW5lIEdMVV9URVNTX0JFR0lOX0RBVEEgICAg
ICAgICAgICAgICAgICAxMDAxMDYKLSNkZWZpbmUgR0xVX1RFU1NfVkVSVEVYX0RBVEEgICAgICAg
ICAgICAgICAgIDEwMDEwNwotI2RlZmluZSBHTFVfVEVTU19FTkRfREFUQSAgICAgICAgICAgICAg
ICAgICAgMTAwMTA4Ci0jZGVmaW5lIEdMVV9URVNTX0VSUk9SX0RBVEEgICAgICAgICAgICAgICAg
ICAxMDAxMDkKLSNkZWZpbmUgR0xVX1RFU1NfRURHRV9GTEFHX0RBVEEgICAgICAgICAgICAgIDEw
MDExMAotI2RlZmluZSBHTFVfVEVTU19DT01CSU5FX0RBVEEgICAgICAgICAgICAgICAgMTAwMTEx
Ci0KLS8qIFRlc3NDb250b3VyICovCi0jZGVmaW5lIEdMVV9DVyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMDAxMjAKLSNkZWZpbmUgR0xVX0NDVyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEwMDEyMQotI2RlZmluZSBHTFVfSU5URVJJT1IgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAwMTIyCi0jZGVmaW5lIEdMVV9FWFRFUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAx
MDAxMjMKLSNkZWZpbmUgR0xVX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEy
NAotCi0vKiBUZXNzUHJvcGVydHkgKi8KLSNkZWZpbmUgR0xVX1RFU1NfV0lORElOR19SVUxFICAg
ICAgICAgICAgICAgIDEwMDE0MAotI2RlZmluZSBHTFVfVEVTU19CT1VOREFSWV9PTkxZICAgICAg
ICAgICAgICAgMTAwMTQxCi0jZGVmaW5lIEdMVV9URVNTX1RPTEVSQU5DRSAgICAgICAgICAgICAg
ICAgICAxMDAxNDIKLQotLyogVGVzc0Vycm9yICovCi0jZGVmaW5lIEdMVV9URVNTX0VSUk9SMSAg
ICAgICAgICAgICAgICAgICAgICAxMDAxNTEKLSNkZWZpbmUgR0xVX1RFU1NfRVJST1IyICAgICAg
ICAgICAgICAgICAgICAgIDEwMDE1MgotI2RlZmluZSBHTFVfVEVTU19FUlJPUjMgICAgICAgICAg
ICAgICAgICAgICAgMTAwMTUzCi0jZGVmaW5lIEdMVV9URVNTX0VSUk9SNCAgICAgICAgICAgICAg
ICAgICAgICAxMDAxNTQKLSNkZWZpbmUgR0xVX1RFU1NfRVJST1I1ICAgICAgICAgICAgICAgICAg
ICAgIDEwMDE1NQotI2RlZmluZSBHTFVfVEVTU19FUlJPUjYgICAgICAgICAgICAgICAgICAgICAg
MTAwMTU2Ci0jZGVmaW5lIEdMVV9URVNTX0VSUk9SNyAgICAgICAgICAgICAgICAgICAgICAxMDAx
NTcKLSNkZWZpbmUgR0xVX1RFU1NfRVJST1I4ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1OAot
I2RlZmluZSBHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT04gICAgICAgMTAwMTUxCi0jZGVm
aW5lIEdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiAgICAgICAxMDAxNTIKLSNkZWZpbmUg
R0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiAgICAgICAgIDEwMDE1MwotI2RlZmluZSBHTFVf
VEVTU19NSVNTSU5HX0VORF9DT05UT1VSICAgICAgICAgMTAwMTU0Ci0jZGVmaW5lIEdMVV9URVNT
X0NPT1JEX1RPT19MQVJHRSAgICAgICAgICAgICAxMDAxNTUKLSNkZWZpbmUgR0xVX1RFU1NfTkVF
RF9DT01CSU5FX0NBTExCQUNLICAgICAgIDEwMDE1NgotCi0vKiBUZXNzV2luZGluZyAqLwotI2Rl
ZmluZSBHTFVfVEVTU19XSU5ESU5HX09ERCAgICAgICAgICAgICAgICAgMTAwMTMwCi0jZGVmaW5l
IEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyAgICAgICAgICAgICAxMDAxMzEKLSNkZWZpbmUgR0xV
X1RFU1NfV0lORElOR19QT1NJVElWRSAgICAgICAgICAgIDEwMDEzMgotI2RlZmluZSBHTFVfVEVT
U19XSU5ESU5HX05FR0FUSVZFICAgICAgICAgICAgMTAwMTMzCi0jZGVmaW5lIEdMVV9URVNTX1dJ
TkRJTkdfQUJTX0dFUV9UV08gICAgICAgICAxMDAxMzQKLQotI2RlZmluZSBHTFVfVEVTU19NQVhf
Q09PUkQgMS4wZTE1MAotCi10eXBlZGVmIHN0cnVjdCBHTFV0ZXNzZWxhdG9yIEdMVXRlc3NlbGF0
b3I7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotZXh0ZXJu
IEdMVXRlc3NlbGF0b3IgKiBHTEFQSUVOVFJZIGludGVybmFsX2dsdU5ld1Rlc3Modm9pZCk7Ci1l
eHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdURlbGV0ZVRlc3MoR0xVdGVzc2VsYXRv
ciAqdGVzcyk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NQcm9wZXJ0
eShHTFV0ZXNzZWxhdG9yICp0ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHdoaWNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgdmFsdWUpOwotZXh0ZXJuIHZvaWQgR0xBUElF
TlRSWSBpbnRlcm5hbF9nbHVHZXRUZXNzUHJvcGVydHkoR0xVdGVzc2VsYXRvciAqdGVzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3
aGljaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZG91YmxlICp2YWx1ZSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRl
c3NOb3JtYWwoR0xVdGVzc2VsYXRvciAqdGVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgeik7Ci1leHRlcm4gdm9pZCBHTEFQSUVO
VFJZIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayhHTFV0ZXNzZWxhdG9yICp0ZXNzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdoaWNoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoR0xB
UElFTlRSWSAqZm4pKCkpOwotZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNz
VmVydGV4KEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xkb3VibGUgY29vcmRzWzNdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgR0xB
UElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKEdMVXRlc3NlbGF0b3IgKnRlc3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NCZWdpbkNv
bnRvdXIoR0xVdGVzc2VsYXRvciAqdGVzcyk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVy
bmFsX2dsdVRlc3NFbmRDb250b3VyKEdMVXRlc3NlbGF0b3IgKnRlc3MpOwotZXh0ZXJuIHZvaWQg
R0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzRW5kUG9seWdvbihHTFV0ZXNzZWxhdG9yICp0ZXNz
KTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmICAvLyBJTlRFUk5B
TF9HTFVfSF8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvR05V
bWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9HTlVtYWtlZmlsZQkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCAr
MCwwIEBACi0jIWdtYWtlCi0jCi0jIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRo
ZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotIyBtYWRlIHN1YmplY3QgdG8gYW4g
YWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0jIFNvZnR3
YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMg
b2YgdGhpcwotIyBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhl
IExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotIyB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0jIG9mIHRoZSBMaWNl
bnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAw
Ci0jIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBv
ciBhdDoKLSMKLSMgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0jCi0jIE5vdGUg
dGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmli
dXRlZCBvbiBhbgotIyAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVE
IFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSMgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRI
T1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0jIENPTkRJVElPTlMg
T0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQot
IyBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotIwotIyBPcmlnaW5h
bCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlv
biwKLSMgVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVk
IGJ5IFNpbGljb24gR3JhcGhpY3MsCi0jIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJp
Z2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotIyBDb3B5cmlnaHQgaW4g
YW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSMg
ZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgQWRkaXRpb25hbCBO
b3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMK
LSMgZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENv
ZGUgYXJlIFRoZQotIyBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24g
KFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotIyBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIp
IEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSMgMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0j
IFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5
OC4gVGhpcyBzb2Z0d2FyZQotIyB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0jIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBo
YXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotIyBjb21wbGlhbnQg
d2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSMKLSMgJERh
dGUkICRSZXZpc2lvbiQKLSMgJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRl
c3MvR05VbWFrZWZpbGUjOSAkCi0KLU9CSkVDVF9TVFlMRSA9IE4zMgotCi1pbmNsdWRlICQoUk9P
VCkvdXNyL2luY2x1ZGUvbWFrZS9jb21tb25kZWZzCi0KLVRBUkdFVCA9IGxpYnRlc3MuYQotCi1U
QVJHRVRTID0gJChUQVJHRVQpCi0KLUxDSU5DUyA9IC1JLi4vaW5jbHVkZQotCi0jIENvbXBpbGF0
aW9uIGZsYWdzOgotIwotIyAtRE5ERUJVRyBpcyBmb3IgdGhlIHByb2R1Y3Rpb24gY29kZTsgaXQg
cmVtb3ZlcyBhbGwgYXNzZXJ0aW9uIGNoZWNrcwotIyAgICAobm90ZSB0aGF0IDxhc3NlcnQuaD4g
bG9va3MgYXQgdGhpcyBzeW1ib2wpLgotIwotIyAtRE5PX01BTExPUFQgdXNlcyByZWd1bGFyIG1h
bGxvYyBpbnN0ZWFkIG9mIHRoZSBtYWxsb3B0KCkgdmVyc2lvbi4KLSMgICAqKioqKiBVbmxlc3Mg
eW91IHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IHVzZSAiLWxtYWxsb2MiIHRvIGxpbmsKLSMgICAq
KioqKiB5b3VyIGFwcGxpY2F0aW9uIQotIwotIyAtRE1FTU9SWV9ERUJVRyB0dXJucyBvbiB0aGUg
TV9ERUJVRyBvcHRpb24gb2YgbWFsbG9wdDsgdGhpcyBjYW4KLSMgICAgaW5jcmVhc2UgdGhlIHJ1
bm5pbmcgdGltZSBhIExPVC4KLSMKLSMgLURHTFVfVEVTU19BUElfRkxPQVQgY29tcGlsZXMgYSBz
aW5nbGUtcHJlY2lzaW9uIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCi0jCi0jIC1mbG9hdCBwcmV2
ZW50cyBhdXRvbWF0aWMgcHJvbW90aW9uIHRvIGRvdWJsZSBwcmVjaXNpb247IHRoaXMgd2lsbCBw
cm9kdWNlCi0jICAgIGZhc3RlciBjb2RlIHdoZW4gY29tcGlsZWQgd2l0aCAtREdMVV9URVNTX0FQ
SV9GTE9BVC4KLSMKLSMgLUROT19CUkFOQ0hfQ09ORElUSU9OUyB1c2VzICYgYW5kIHwgaW5zdGVh
ZCBvZiAmJiBhbmQgfHwgb24gYSBjb3VwbGUKLSMgICAgb2YgaGVhdmlseS11c2VkIHRlc3RzIChW
ZXJ0RXEgYW5kIFZlcnRMZXEpOyBzb21lIGNvbXBpbGVycyBjYW4gZ2VuZXJhdGUKLSMgICAgYmV0
dGVyIGNvZGUgd2l0aCB0aGVzZSAodXNlIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIGF2b2lkIGJy
YW5jaGluZykuCi0jCi0jIC1ERk9SX1RSSVRFX1RFU1RfUFJPR1JBTSBpcyAqb25seSogZm9yIHVz
ZSB3aXRoIHRoZSB0ZXN0IHByb2dyYW0gY2FsbGVkCi0jICAgICJ0cml0ZSIuICBJdCB1c2VzIHNv
bWUgdmFyaWFibGVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IHRoZSB0ZXN0IHByb2dyYW0sCi0jICAg
IHNvIHlvdSB3b24ndCBiZSBhYmxlIHRvIGxpbmsgaXQgd2l0aCBhbnl0aGluZyBlbHNlLgotCi1I
RklMRVMgPSBcCi0JZGljdC5oIFwKLQlkaWN0LWxpc3QuaCBcCi0JZ2VvbS5oIFwKLQltZW1hbGxv
Yy5oIFwKLQltZXNoLmggXAotCW5vcm1hbC5oIFwKLQlwcmlvcml0eXEtaGVhcC5oIFwKLQlwcmlv
cml0eXEtaGVhcC5jIFwKLQlwcmlvcml0eXEtc29ydC5oIFwKLQlwcmlvcml0eXEuaCBcCi0JcmVu
ZGVyLmggXAotCXN3ZWVwLmggXAotCXRlc3MuaCBcCi0JdGVzc21vbm8uaCBcCi0JJChOVUxMKQot
Ci1DRklMRVMgPSBcCi0JZGljdC5jIFwKLQlnZW9tLmMgXAotCW1lbWFsbG9jLmMgXAotCW1lc2gu
YyBcCi0Jbm9ybWFsLmMgXAotCXByaW9yaXR5cS5jIFwKLQlyZW5kZXIuYyBcCi0Jc3dlZXAuYyBc
Ci0JdGVzcy5jIFwKLQl0ZXNzbW9uby5jIFwKLQkkKE5VTEwpCi0KLWRlZmF1bHQgbGlicyBsaWJz
X2luc3RhbGwgaW5zdGFsbDogJChUQVJHRVQpCi0KLWhlYWRlcnMgaGVhZGVyc19pbnN0YWxsIGFw
cHM6Ci0KLSQoVEFSR0VUKTogJChPQkpFQ1RTKQotCSQoQVIpIGNybCAkQCAkKE9CSkVDVFMpOwot
Ci1pbmNsdWRlICQoQ09NTU9OUlVMRVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkod29ya2luZyBjb3B5KQpA
QCAtMSw2MSArMCwwIEBACi1YQ09NTSBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0
aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLVhDT01NIG1hZGUgc3ViamVjdCB0
byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLVhD
T01NIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUg
Y29udGVudHMgb2YgdGhpcwotWENPTU0gZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLVhDT01NIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkKLVhDT01NIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46
IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi1YQ09NTSBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRh
aW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci1YQ09NTSAKLVhDT01NIGh0dHA6Ly9vc3Mu
c2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotWENPTU0gCi1YQ09NTSBOb3RlIHRoYXQsIGFzIHByb3Zp
ZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLVhD
T01NICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElF
UyBBTkQgQ09ORElUSU9OUwotWENPTU0gRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJ
TUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi1YQ09NTSBDT05ESVRJT05TIE9G
IE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLVhD
T01NIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi1YQ09NTSAKLVhD
T01NIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIElt
cGxlbWVudGF0aW9uLAotWENPTU0gVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwg
MjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi1YQ09NTSBJbmMuIFRoZSBPcmln
aW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIElu
Yy4KLVhDT01NIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0
aWVzIGlzIGFzIGluZGljYXRlZAotWENPTU0gZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLVhDT01NIAotWENPTU0gQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhl
IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLVhDT01NIGVzdGFibGlzaGVkIGJ5
IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLVhDT01N
IE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIu
MSksIHJlbGVhc2VkCi1YQ09NTSBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNz
IFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLVhDT01NIDEuMyksIHJlbGVhc2VkIE5v
dmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotWENPTU0g
V2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4
LiBUaGlzIHNvZnR3YXJlCi1YQ09NTSB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZl
cnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi1YQ09NTSBwdWJsaXNoZWQgYnkgU0dJ
LCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLVhDT01N
IGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9u
LgotWENPTU0KLQotI2luY2x1ZGUgPExpYnJhcnkudG1wbD4KLQotT0JKUyA9IFwKLQlkaWN0Lm8g
XAotCWdlb20ubyBcCi0JbWVtYWxsb2MubyBcCi0JbWVzaC5vIFwKLQlub3JtYWwubyBcCi0JcHJp
b3JpdHlxLm8gXAotCXJlbmRlci5vIFwKLQlzd2VlcC5vIFwKLQl0ZXNzLm8gXAotCXRlc3Ntb25v
Lm8KLQotSU5DTFVERVMgPSBcCi0JLUkuLi9pbmNsdWRlIFwKLQktSSQoVE9QKS9pbmNsdWRlIFwK
LQktSSQoVE9QKS9pbmNsdWRlL0dMCi0KLURFRklORVMgPSBcCi0JLUROREVCVUcKLQotTm9ybWFs
TGlicmFyeU9iamVjdFJ1bGUoKQotCi1Ob3JtYWxMaWJyYXJ5VGFyZ2V0KHRlc3MsICQoT0JKUykp
Ci0KLURlcGVuZFRhcmdldCgpCi1DbGVhblRhcmdldCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQkocmV2aXNpb24gODIxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQkod29ya2luZyBjb3B5KQpA
QCAtMSw0NDcgKzAsMCBAQAotLyoKLSoqICRIZWFkZXI6IC9jdnMvcHJvamVjdHMvb2dsLXNhbXBs
ZS9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvUkVBRE1FLHYgMS4xIDIwMDAvMDQvMjYgMDU6NTM6
NTkgbGpwIEV4cCAkCi0qLwotCi1HZW5lcmFsIFBvbHlnb24gVGVzc2VsYXRpb24KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFRoaXMgbm90ZSBkZXNjcmliZXMgYSB0ZXNzZWxhdG9y
IGZvciBwb2x5Z29ucyBjb25zaXN0aW5nIG9mIG9uZSBvcgotICBtb3JlIGNsb3NlZCBjb250b3Vy
cy4gIEl0IGlzIGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudAotICBPcGVuR0wg
VXRpbGl0aWVzIHRlc3NlbGF0b3IsIGFuZCBpcyBpbnRlbmRlZCB0byByZXBsYWNlIGl0LiAgSGVy
ZSBpcwotICBhIHN1bW1hcnkgb2YgdGhlIG1ham9yIGRpZmZlcmVuY2VzOgotCi0gICAtIGlucHV0
IGNvbnRvdXJzIGNhbiBiZSBpbnRlcnNlY3RpbmcsIHNlbGYtaW50ZXJzZWN0aW5nLCBvciBkZWdl
bmVyYXRlLgotICAKLSAgIC0gc3VwcG9ydHMgYSBjaG9pY2Ugb2Ygc2V2ZXJhbCB3aW5kaW5nIHJ1
bGVzIGZvciBkZXRlcm1pbmluZyB3aGljaCBwYXJ0cwotICAgICBvZiB0aGUgcG9seWdvbiBhcmUg
b24gdGhlICJpbnRlcmlvciIuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvCi0gICAgIENT
RyBvcGVyYXRpb25zIG9uIHBvbHlnb25zLgotICAKLSAgIC0gYm91bmRhcnkgZXh0cmFjdGlvbjog
aW5zdGVhZCBvZiB0ZXNzZWxhdGluZyB0aGUgcG9seWdvbiwgcmV0dXJucyBhCi0gICAgIHNldCBv
ZiBjbG9zZWQgY29udG91cnMgd2hpY2ggc2VwYXJhdGUgdGhlIGludGVyaW9yIGZyb20gdGhlIGV4
dGVyaW9yLgotICAKLSAgIC0gcmV0dXJucyB0aGUgb3V0cHV0IGFzIGEgc21hbGwgbnVtYmVyIG9m
IHRyaWFuZ2xlIGZhbnMgYW5kIHN0cmlwcywKLSAgICAgcmF0aGVyIHRoYW4gYSBsaXN0IG9mIGlu
ZGVwZW5kZW50IHRyaWFuZ2xlcyAod2hlbiBwb3NzaWJsZSkuCi0gIAotICAgLSBvdXRwdXQgaXMg
YXZhaWxhYmxlIGFzIGFuIGV4cGxpY2l0IG1lc2ggKGEgcXVhZC1lZGdlIHN0cnVjdHVyZSksCi0g
ICAgIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgY2FsbGJhY2sgaW50ZXJmYWNlLgotICAKLSAg
IC0gdGhlIGFsZ29yaXRobSB1c2VkIGlzIGV4dHJlbWVseSByb2J1c3QuCi0KLQotVGhlIGludGVy
ZmFjZQotLS0tLS0tLS0tLS0tLQotCi0gIFRoZSB0ZXNzZWxhdG9yIHN0YXRlIGlzIG1haW50YWlu
ZWQgaW4gYSAidGVzc2VsYXRvciBvYmplY3QiLgotICBUaGVzZSBhcmUgYWxsb2NhdGVkIGFuZCBk
ZXN0cm95ZWQgdXNpbmcKLQotICAgICBHTFV0ZXNzZWxhdG9yICpnbHVOZXdUZXNzKCB2b2lkICk7
Ci0gICAgIHZvaWQgZ2x1RGVsZXRlVGVzcyggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0gIFNl
dmVyYWwgdGVzc2VsYXRvciBvYmplY3RzIG1heSBiZSB1c2VkIHNpbXVsdGFuZW91c2x5LgotCi0g
IElucHV0cwotICAtLS0tLS0KLSAgCi0gIFRoZSBpbnB1dCBjb250b3VycyBhcmUgc3BlY2lmaWVk
IHdpdGggdGhlIGZvbGxvd2luZyByb3V0aW5lczoKLQotICAgICB2b2lkIGdsdVRlc3NCZWdpblBv
bHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICAgdm9pZCBnbHVUZXNzQmVnaW5Db250
b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0gICAgIHZvaWQgZ2x1VGVzc1ZlcnRleCggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xVY29vcmQgY29vcmRzWzNdLCB2b2lkICpkYXRhICk7Ci0gICAg
IHZvaWQgZ2x1VGVzc0VuZENvbnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICAgdm9p
ZCBnbHVUZXNzRW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0gIFdpdGhpbiBl
YWNoIEJlZ2luUG9seWdvbi9FbmRQb2x5Z29uIHBhaXIsIHRoZXJlIGNhbiBiZSB6ZXJvIG9yIG1v
cmUKLSAgY2FsbHMgdG8gQmVnaW5Db250b3VyL0VuZENvbnRvdXIuICBXaXRoaW4gZWFjaCBjb250
b3VyLCB0aGVyZSBhcmUgemVybwotICBvciBtb3JlIGNhbGxzIHRvIGdsdVRlc3NWZXJ0ZXgoKS4g
IFRoZSB2ZXJ0aWNlcyBzcGVjaWZ5IGEgY2xvc2VkCi0gIGNvbnRvdXIgKHRoZSBsYXN0IHZlcnRl
eCBvZiBlYWNoIGNvbnRvdXIgaXMgYXV0b21hdGljYWxseSBsaW5rZWQgdG8KLSAgdGhlIGZpcnN0
KS4KLQotICAiY29vcmRzIiBnaXZlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4IGluIDMt
c3BhY2UuICBGb3IgdXNlZnVsCi0gIHJlc3VsdHMsIGFsbCB2ZXJ0aWNlcyBzaG91bGQgbGllIGlu
IHNvbWUgcGxhbmUsIHNpbmNlIHRoZSB2ZXJ0aWNlcwotICBhcmUgcHJvamVjdGVkIG9udG8gYSBw
bGFuZSBiZWZvcmUgdGVzc2VsYXRpb24uICAiZGF0YSIgaXMgYSBwb2ludGVyCi0gIHRvIGEgdXNl
ci1kZWZpbmVkIHZlcnRleCBzdHJ1Y3R1cmUsIHdoaWNoIHR5cGljYWxseSBjb250YWlucyBvdGhl
cgotICBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvbG9yLCB0ZXh0dXJlIGNvb3JkaW5hdGVzLCBub3Jt
YWwsIGV0Yy4gIEl0IGlzCi0gIHVzZWQgdG8gcmVmZXIgdG8gdGhlIHZlcnRleCBkdXJpbmcgcmVu
ZGVyaW5nLgotCi0gIFRoZSBsaWJyYXJ5IGNhbiBiZSBjb21waWxlZCBpbiBzaW5nbGUtIG9yIGRv
dWJsZS1wcmVjaXNpb247IHRoZSB0eXBlCi0gIEdMVWNvb3JkIHJlcHJlc2VudHMgZWl0aGVyICJm
bG9hdCIgb3IgImRvdWJsZSIgYWNjb3JkaW5nbHkuICBUaGUgR0xVCi0gIHZlcnNpb24gd2lsbCBi
ZSBhdmFpbGFibGUgaW4gZG91YmxlLXByZWNpc2lvbiBvbmx5LiAgQ29tcGlsZSB3aXRoCi0gIEdM
VV9URVNTX0FQSV9GTE9BVCBkZWZpbmVkIHRvIGdldCB0aGUgc2luZ2xlLXByZWNpc2lvbiB2ZXJz
aW9uLgotCi0gIFdoZW4gRW5kUG9seWdvbiBpcyBjYWxsZWQsIHRoZSB0ZXNzZWxhdGlvbiBhbGdv
cml0aG0gZGV0ZXJtaW5lcwotICB3aGljaCByZWdpb25zIGFyZSBpbnRlcmlvciB0byB0aGUgZ2l2
ZW4gY29udG91cnMsIGFjY29yZGluZyB0byBvbmUKLSAgb2Ygc2V2ZXJhbCAid2luZGluZyBydWxl
cyIgZGVzY3JpYmVkIGJlbG93LiAgVGhlIGludGVyaW9yIHJlZ2lvbnMKLSAgYXJlIHRoZW4gdGVz
c2VsYXRlZCwgYW5kIHRoZSBvdXRwdXQgaXMgcHJvdmlkZWQgYXMgY2FsbGJhY2tzLgotCi0KLSAg
UmVuZGVyaW5nIENhbGxiYWNrcwotICAtLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgQ2FsbGJhY2tz
IGFyZSBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudCB1c2luZwotCi0gICAgIHZvaWQgZ2x1VGVzc0Nh
bGxiYWNrKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gd2hpY2gsIHZvaWQgKCpmbikoKSk7
Ci0KLSAgSWYgImZuIiBpcyBOVUxMLCBhbnkgcHJldmlvdXNseSBkZWZpbmVkIGNhbGxiYWNrIGlz
IGRpc2NhcmRlZC4KLSAgCi0gIFRoZSBjYWxsYmFja3MgdXNlZCB0byBwcm92aWRlIG91dHB1dCBh
cmU6CS8qIHdoaWNoID09ICovCi0KLSAgICAgdm9pZCBiZWdpbiggR0xlbnVtIHR5cGUgKTsJCQkv
KiBHTFVfVEVTU19CRUdJTiAqLwotICAgICB2b2lkIGVkZ2VGbGFnKCBHTGJvb2xlYW4gZmxhZyAp
OwkJLyogR0xVX1RFU1NfRURHRV9GTEFHICovCi0gICAgIHZvaWQgdmVydGV4KCB2b2lkICpkYXRh
ICk7CQkJLyogR0xVX1RFU1NfVkVSVEVYICovCi0gICAgIHZvaWQgZW5kKCB2b2lkICk7CQkJCS8q
IEdMVV9URVNTX0VORCAqLwotCi0gIEFueSBvZiB0aGUgY2FsbGJhY2tzIG1heSBiZSBsZWZ0IHVu
ZGVmaW5lZDsgaWYgc28sIHRoZSBjb3JyZXNwb25kaW5nCi0gIGluZm9ybWF0aW9uIHdpbGwgbm90
IGJlIHN1cHBsaWVkIGR1cmluZyByZW5kZXJpbmcuCi0KLSAgVGhlICJiZWdpbiIgY2FsbGJhY2sg
aW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIHByaW1pdGl2ZTsgdHlwZSBpcyBvbmUKLSAgb2YgR0xf
VFJJQU5HTEVfU1RSSVAsIEdMX1RSSUFOR0xFX0ZBTiwgb3IgR0xfVFJJQU5HTEVTIChidXQgc2Vl
IHRoZQotICBub3RlcyBvbiAiYm91bmRhcnkgZXh0cmFjdGlvbiIgYmVsb3cpLgotICAKLSAgSXQg
aXMgZm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiAidmVydGV4IiBjYWxsYmFja3MsIHdoaWNoIHN1
cHBseSB0aGUKLSAgdmVydGljZXMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgZXhwZWN0ZWQgYnkgdGhl
IGNvcnJlc3BvbmRpbmcgZ2xCZWdpbigpCi0gIGNhbGwuICBBZnRlciB0aGUgbGFzdCB2ZXJ0ZXgg
b2YgYSBnaXZlbiBwcmltaXRpdmUsIHRoZXJlIGlzIGEgY2FsbGJhY2sKLSAgdG8gImVuZCIuCi0K
LSAgSWYgdGhlICJlZGdlRmxhZyIgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIG5vIHRyaWFuZ2xlIGZh
bnMgb3Igc3RyaXBzCi0gIHdpbGwgYmUgdXNlZC4gIFdoZW4gZWRnZUZsYWcgaXMgY2FsbGVkLCBp
ZiAiZmxhZyIgaXMgR0xfVFJVRSB0aGVuIGVhY2gKLSAgdmVydGV4IHdoaWNoIGZvbGxvd3MgYmVn
aW5zIGFuIGVkZ2Ugd2hpY2ggbGllcyBvbiB0aGUgcG9seWdvbiBib3VuZGFyeQotICAoaWUuIGFu
IGVkZ2Ugd2hpY2ggc2VwYXJhdGVzIGFuIGludGVyaW9yIHJlZ2lvbiBmcm9tIGFuIGV4dGVyaW9y
IG9uZSkuCi0gIElmICJmbGFnIiBpcyBHTF9GQUxTRSwgZWFjaCB2ZXJ0ZXggd2hpY2ggZm9sbG93
cyBiZWdpbnMgYW4gZWRnZSB3aGljaCBsaWVzCi0gIGluIHRoZSBwb2x5Z29uIGludGVyaW9yLiAg
ImVkZ2VGbGFnIiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0Ci0gIGNhbGwgdG8gInZl
cnRleCIuCi0KLSAgT3RoZXIgQ2FsbGJhY2tzCi0gIC0tLS0tLS0tLS0tLS0tLQotCi0gICB2b2lk
IG1lc2goIEdMVW1lc2ggKm1lc2ggKTsJCQkvKiBHTFVfVEVTU19NRVNIICovCi0KLSAgIC0gUmV0
dXJucyBhbiBleHBsaWNpdCBtZXNoLCByZXByZXNlbnRlZCB1c2luZyB0aGUgcXVhZC1lZGdlIHN0
cnVjdHVyZQotICAgICAoR3VpYmFzL1N0b2xmaSAnODUpLiAgT3RoZXIgaW1wbGVtZW50YXRpb25z
IG9mIHRoaXMgaW50ZXJmYWNlIG1pZ2h0Ci0gICAgIHVzZSBhIGRpZmZlcmVudCBtZXNoIHN0cnVj
dHVyZSwgc28gdGhpcyBpcyBhdmFpbGFibGUgb25seSBvbmx5IGFzIGFuCi0gICAgIFNHSSBleHRl
bnNpb24uICBXaGVuIHRoZSBtZXNoIGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBm
cmVlZAotICAgICB1c2luZwotCi0Jdm9pZCBnbHVEZWxldGVNZXNoKCBHTFVtZXNoICptZXNoICk7
Ci0KLSAgICAgVGhlcmUgaXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0
dXJlIGluIHRoZSBpbmNsdWRlCi0gICAgIGZpbGUgIm1lc2guaCIuICBGb3IgdGhlIGZ1bGwgZGV0
YWlscywgc2VlIEwuIEd1aWJhcyBhbmQgSi4gU3RvbGZpLAotICAgICBQcmltaXRpdmVzIGZvciB0
aGUgbWFuaXB1bGF0aW9uIG9mIGdlbmVyYWwgc3ViZGl2aXNpb25zIGFuZCB0aGUKLSAgICAgY29t
cHV0YXRpb24gb2YgVm9yb25vaSBkaWFncmFtcywgQUNNIFRyYW5zYWN0aW9ucyBvbiBHcmFwaGlj
cywKLSAgICAgNCgyKTo3NC0xMjMsIEFwcmlsIDE5ODUuICBGb3IgYW4gaW50cm9kdWN0aW9uLCBz
ZWUgdGhlIGNvdXJzZSBub3RlcwotICAgICBmb3IgQ1MzNDhhLCAiTWF0aGVtYXRpY2FsIEZvdW5k
YXRpb25zIG9mIENvbXB1dGVyIEdyYXBoaWNzIiwKLSAgICAgYXZhaWxhYmxlIGF0IHRoZSBTdGFu
Zm9yZCBib29rc3RvcmUgKGFuZCB0YXVnaHQgZHVyaW5nIHRoZSBmYWxsCi0gICAgIHF1YXJ0ZXIp
LgotCi0gICB2b2lkIGVycm9yKCBHTGVudW0gZXJybm8gKTsJCQkvKiBHTFVfVEVTU19FUlJPUiAq
LwotCi0gICAtIGVycm5vIGlzIG9uZSBvZglHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT04s
Ci0JCQlHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OLAotCQkJR0xVX1RFU1NfTUlTU0lOR19C
RUdJTl9DT05UT1VSLAotCQkJR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9VUiwKLQkJCUdMVV9U
RVNTX0NPT1JEX1RPT19MQVJHRSwKLQkJCUdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSwot
Ci0gICAgIFRoZSBmaXJzdCBmb3VyIGFyZSBvYnZpb3VzLiAgVGhlIGludGVyZmFjZSByZWNvdmVy
cyBmcm9tIHRoZXNlCi0gICAgIGVycm9ycyBieSBpbnNlcnRpbmcgdGhlIG1pc3NpbmcgY2FsbChz
KS4KLSAgCi0gICAgIEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRSBzYXlzIHRoYXQgc29tZSB2ZXJ0
ZXggY29vcmRpbmF0ZSBleGNlZWRlZAotICAgICB0aGUgcHJlZGVmaW5lZCBjb25zdGFudCBHTFVf
VEVTU19NQVhfQ09PUkQgaW4gYWJzb2x1dGUgdmFsdWUsIGFuZAotICAgICB0aGF0IHRoZSB2YWx1
ZSBoYXMgYmVlbiBjbGFtcGVkLiAgKENvb3JkaW5hdGUgdmFsdWVzIG11c3QgYmUgc21hbGwKLSAg
ICAgZW5vdWdoIHNvIHRoYXQgdHdvIGNhbiBiZSBtdWx0aXBsaWVkIHRvZ2V0aGVyIHdpdGhvdXQg
b3ZlcmZsb3cuKQotCi0gICAgIEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSyBzYXlzIHRo
YXQgdGhlIGFsZ29yaXRobSBkZXRlY3RlZCBhbgotICAgICBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0
d28gZWRnZXMgaW4gdGhlIGlucHV0IGRhdGEsIGFuZCB0aGUgImNvbWJpbmUiCi0gICAgIGNhbGxi
YWNrIChiZWxvdykgd2FzIG5vdCBwcm92aWRlZC4gIE5vIG91dHB1dCB3aWxsIGJlIGdlbmVyYXRl
ZC4KLQotCi0gICB2b2lkIGNvbWJpbmUoIEdMVWNvb3JkIGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0
XSwJLyogR0xVX1RFU1NfQ09NQklORSAqLwotCQkgR0xVY29vcmQgd2VpZ2h0WzRdLCB2b2lkICoq
b3V0RGF0YSApOwotCi0gICAtIFdoZW4gdGhlIGFsZ29yaXRobSBkZXRlY3RzIGFuIGludGVyc2Vj
dGlvbiwgb3Igd2lzaGVzIHRvIG1lcmdlCi0gICAgIGZlYXR1cmVzLCBpdCBuZWVkcyB0byBjcmVh
dGUgYSBuZXcgdmVydGV4LiAgVGhlIHZlcnRleCBpcyBkZWZpbmVkCi0gICAgIGFzIGEgbGluZWFy
IGNvbWJpbmF0aW9uIG9mIHVwIHRvIDQgZXhpc3RpbmcgdmVydGljZXMsIHJlZmVyZW5jZWQKLSAg
ICAgYnkgZGF0YVswLi4zXS4gIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGxpbmVhciBjb21iaW5h
dGlvbiBhcmUKLSAgICAgZ2l2ZW4gYnkgd2VpZ2h0WzAuLjNdOyB0aGVzZSB3ZWlnaHRzIGFsd2F5
cyBzdW0gdG8gMS4wLiAgQWxsIHZlcnRleAotICAgICBwb2ludGVycyBhcmUgdmFsaWQgZXZlbiB3
aGVuIHNvbWUgb2YgdGhlIHdlaWdodHMgYXJlIHplcm8uCi0gICAgICJjb29yZHMiIGdpdmVzIHRo
ZSBsb2NhdGlvbiBvZiB0aGUgbmV3IHZlcnRleC4KLQotICAgICBUaGUgdXNlciBtdXN0IGFsbG9j
YXRlIGFub3RoZXIgdmVydGV4LCBpbnRlcnBvbGF0ZSBwYXJhbWV0ZXJzCi0gICAgIHVzaW5nICJk
YXRhIiBhbmQgIndlaWdodHMiLCBhbmQgcmV0dXJuIHRoZSBuZXcgdmVydGV4IHBvaW50ZXIgaW4K
LSAgICAgIm91dERhdGEiLiAgVGhpcyBoYW5kbGUgaXMgc3VwcGxpZWQgZHVyaW5nIHJlbmRlcmlu
ZyBjYWxsYmFja3MuCi0gICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcG9seWdvbiBsaWVzIGluIGFu
IGFyYml0cmFyeSBwbGFuZSBpbiAzLXNwYWNlLAotICAgICBhbmQgd2UgYXNzb2NpYXRlIGEgY29s
b3Igd2l0aCBlYWNoIHZlcnRleCwgdGhlIGNvbWJpbmUgY2FsbGJhY2sgbWlnaHQKLSAgICAgbG9v
ayBsaWtlIHRoaXM6Ci0gICAgCi0gICAgIHZvaWQgbXlDb21iaW5lKCBHTFVjb29yZCBjb29yZHNb
M10sIFZFUlRFWCAqZFs0XSwKLSAgICAgICAgICAgICAgICAgICAgIEdMVWNvb3JkIHdbNF0sIFZF
UlRFWCAqKmRhdGFPdXQgKQotICAgICB7Ci0gICAgICAgIFZFUlRFWCAqbmV3ID0gbmV3X3ZlcnRl
eCgpOwotICAgICAgIAotICAgICAgICBuZXctPnggPSBjb29yZHNbMF07Ci0gICAgICAgIG5ldy0+
eSA9IGNvb3Jkc1sxXTsKLSAgICAgICAgbmV3LT56ID0gY29vcmRzWzJdOwotICAgICAgICBuZXct
PnIgPSB3WzBdKmRbMF0tPnIgKyB3WzFdKmRbMV0tPnIgKyB3WzJdKmRbMl0tPnIgKyB3WzNdKmRb
M10tPnI7Ci0gICAgICAgIG5ldy0+ZyA9IHdbMF0qZFswXS0+ZyArIHdbMV0qZFsxXS0+ZyArIHdb
Ml0qZFsyXS0+ZyArIHdbM10qZFszXS0+ZzsKLSAgICAgICAgbmV3LT5iID0gd1swXSpkWzBdLT5i
ICsgd1sxXSpkWzFdLT5iICsgd1syXSpkWzJdLT5iICsgd1szXSpkWzNdLT5iOwotICAgICAgICBu
ZXctPmEgPSB3WzBdKmRbMF0tPmEgKyB3WzFdKmRbMV0tPmEgKyB3WzJdKmRbMl0tPmEgKyB3WzNd
KmRbM10tPmE7Ci0gICAgICAgICpkYXRhT3V0ID0gbmV3OwotICAgICB9Ci0KLSAgICAgSWYgdGhl
IGFsZ29yaXRobSBkZXRlY3RzIGFuIGludGVyc2VjdGlvbiwgdGhlbiB0aGUgImNvbWJpbmUiIGNh
bGxiYWNrCi0gICAgIG11c3QgYmUgZGVmaW5lZCwgYW5kIG11c3Qgd3JpdGUgYSBub24tTlVMTCBw
b2ludGVyIGludG8gImRhdGFPdXQiLgotICAgICBPdGhlcndpc2UgdGhlIEdMVV9URVNTX05FRURf
Q09NQklORV9DQUxMQkFDSyBlcnJvciBvY2N1cnMsIGFuZCBubwotICAgICBvdXRwdXQgaXMgZ2Vu
ZXJhdGVkLiAgVGhpcyBpcyB0aGUgb25seSBlcnJvciB0aGF0IGNhbiBvY2N1ciBkdXJpbmcKLSAg
ICAgdGVzc2VsYXRpb24gYW5kIHJlbmRlcmluZy4KLQotCi0gIENvbnRyb2wgb3ZlciBUZXNzZWxh
dGlvbgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgCi0gICB2b2lkIGdsdVRlc3NQcm9w
ZXJ0eSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNoLCBHTFVjb29yZCB2YWx1ZSAp
OwotCi0gICBQcm9wZXJ0aWVzIGRlZmluZWQ6Ci0KLSAgICAtIEdMVV9URVNTX1dJTkRJTkdfUlVM
RS4gIFBvc3NpYmxlIHZhbHVlczoKLQotCSAgR0xVX1RFU1NfV0lORElOR19PREQKLQkgIEdMVV9U
RVNTX1dJTkRJTkdfTk9OWkVSTwotCSAgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRQotCSAgR0xV
X1RFU1NfV0lORElOR19ORUdBVElWRQotCSAgR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTwot
Ci0gICAgICBUaGUgaW5wdXQgY29udG91cnMgcGFyaXRpb24gdGhlIHBsYW5lIGludG8gcmVnaW9u
cy4gIEEgd2luZGluZwotICAgICAgcnVsZSBkZXRlcm1pbmVzIHdoaWNoIG9mIHRoZXNlIHJlZ2lv
bnMgYXJlIGluc2lkZSB0aGUgcG9seWdvbi4KLSAgICAgIAotICAgICAgRm9yIGEgc2luZ2xlIGNv
bnRvdXIgQywgdGhlIHdpbmRpbmcgbnVtYmVyIG9mIGEgcG9pbnQgeCBpcyBzaW1wbHkKLSAgICAg
IHRoZSBzaWduZWQgbnVtYmVyIG9mIHJldm9sdXRpb25zIHdlIG1ha2UgYXJvdW5kIHggYXMgd2Ug
dHJhdmVsCi0gICAgICBvbmNlIGFyb3VuZCBDICh3aGVyZSBDQ1cgaXMgcG9zaXRpdmUpLiAgV2hl
biB0aGVyZSBhcmUgc2V2ZXJhbAotICAgICAgY29udG91cnMsIHRoZSBpbmRpdmlkdWFsIHdpbmRp
bmcgbnVtYmVycyBhcmUgc3VtbWVkLiAgVGhpcwotICAgICAgcHJvY2VkdXJlIGFzc29jaWF0ZXMg
YSBzaWduZWQgaW50ZWdlciB2YWx1ZSB3aXRoIGVhY2ggcG9pbnQgeCBpbgotICAgICAgdGhlIHBs
YW5lLiAgTm90ZSB0aGF0IHRoZSB3aW5kaW5nIG51bWJlciBpcyB0aGUgc2FtZSBmb3IgYWxsCi0g
ICAgICBwb2ludHMgaW4gYSBzaW5nbGUgcmVnaW9uLgotCi0gICAgICBUaGUgd2luZGluZyBydWxl
IGNsYXNzaWZpZXMgYSByZWdpb24gYXMgImluc2lkZSIgaWYgaXRzIHdpbmRpbmcKLSAgICAgIG51
bWJlciBiZWxvbmdzIHRvIHRoZSBjaG9zZW4gY2F0ZWdvcnkgKG9kZCwgbm9uemVybywgcG9zaXRp
dmUsCi0gICAgICBuZWdhdGl2ZSwgb3IgYWJzb2x1dGUgdmFsdWUgb2YgYXQgbGVhc3QgdHdvKS4g
IFRoZSBjdXJyZW50IEdMVQotICAgICAgdGVzc2VsYXRvciBpbXBsZW1lbnRzIHRoZSAib2RkIiBy
dWxlLiAgVGhlICJub256ZXJvIiBydWxlIGlzIGFub3RoZXIKLSAgICAgIGNvbW1vbiB3YXkgdG8g
ZGVmaW5lIHRoZSBpbnRlcmlvci4gIFRoZSBvdGhlciB0aHJlZSBydWxlcyBhcmUKLSAgICAgIHVz
ZWZ1bCBmb3IgcG9seWdvbiBDU0cgb3BlcmF0aW9ucyAoc2VlIGJlbG93KS4KLQotICAgIC0gR0xV
X1RFU1NfQk9VTkRBUllfT05MWS4gIFZhbHVlczogVFJVRSAobm9uLXplcm8pIG9yIEZBTFNFICh6
ZXJvKS4KLQotICAgICAgSWYgVFJVRSwgcmV0dXJucyBhIHNldCBvZiBjbG9zZWQgY29udG91cnMg
d2hpY2ggc2VwYXJhdGUgdGhlCi0gICAgICBwb2x5Z29uIGludGVyaW9yIGFuZCBleHRlcmlvciAo
cmF0aGVyIHRoYW4gYSB0ZXNzZWxhdGlvbikuCi0gICAgICBFeHRlcmlvciBjb250b3VycyBhcmUg
b3JpZW50ZWQgQ0NXIHdpdGggcmVzcGVjdCB0byB0aGUgbm9ybWFsLAotICAgICAgaW50ZXJpb3Ig
Y29udG91cnMgYXJlIG9yaWVudGVkIENXLiAgVGhlIEdMVV9URVNTX0JFR0lOIGNhbGxiYWNrCi0g
ICAgICB1c2VzIHRoZSB0eXBlIEdMX0xJTkVfTE9PUCBmb3IgZWFjaCBjb250b3VyLgotICAgICAg
Ci0gICAgLSBHTFVfVEVTU19UT0xFUkFOQ0UuICBWYWx1ZTogYSByZWFsIG51bWJlciBiZXR3ZWVu
IDAuMCBhbmQgMS4wLgotCi0gICAgICBUaGlzIHNwZWNpZmllcyBhIHRvbGVyYW5jZSBmb3IgbWVy
Z2luZyBmZWF0dXJlcyB0byByZWR1Y2UgdGhlIHNpemUKLSAgICAgIG9mIHRoZSBvdXRwdXQuICBG
b3IgZXhhbXBsZSwgdHdvIHZlcnRpY2VzIHdoaWNoIGFyZSB2ZXJ5IGNsb3NlIHRvCi0gICAgICBl
YWNoIG90aGVyIG1pZ2h0IGJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHZlcnRleC4gIFRoZSB0b2xl
cmFuY2UKLSAgICAgIGlzIG11bHRpcGxpZWQgYnkgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZSBtYWdu
aXR1ZGUgb2YgYW55IGlucHV0IHZlcnRleDsKLSAgICAgIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhp
bXVtIGRpc3RhbmNlIHRoYXQgYW55IGZlYXR1cmUgY2FuIG1vdmUgYXMgdGhlCi0gICAgICByZXN1
bHQgb2YgYSBzaW5nbGUgbWVyZ2Ugb3BlcmF0aW9uLiAgSWYgYSBzaW5nbGUgZmVhdHVyZSB0YWtl
cyBwYXJ0Ci0gICAgICBpbiBzZXZlcmFsIG1lcmdlIG9wZXJhdGlvbnMsIHRoZSB0b3RhbCBkaXN0
YW5jZSBtb3ZlZCBjb3VsZCBiZSBsYXJnZXIuCi0KLSAgICAgIEZlYXR1cmUgbWVyZ2luZyBpcyBj
b21wbGV0ZWx5IG9wdGlvbmFsOyB0aGUgdG9sZXJhbmNlIGlzIG9ubHkgYSBoaW50LgotICAgICAg
VGhlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgdG8gbWVyZ2UgaW4gc29tZSBjYXNlcyBhbmQgbm90
IGluIG90aGVycywKLSAgICAgIG9yIHRvIG5ldmVyIG1lcmdlIGZlYXR1cmVzIGF0IGFsbC4gIFRo
ZSBkZWZhdWx0IHRvbGVyYW5jZSBpcyB6ZXJvLgotICAgICAgCi0gICAgICBUaGUgY3VycmVudCBp
bXBsZW1lbnRhdGlvbiBtZXJnZXMgdmVydGljZXMgb25seSBpZiB0aGV5IGFyZSBleGFjdGx5Ci0g
ICAgICBjb2luY2lkZW50LCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHRvbGVyYW5jZS4gIEEg
dmVydGV4IGlzCi0gICAgICBzcGxpY2VkIGludG8gYW4gZWRnZSBvbmx5IGlmIHRoZSBpbXBsZW1l
bnRhdGlvbiBpcyB1bmFibGUgdG8KLSAgICAgIGRpc3Rpbmd1aXNoIHdoaWNoIHNpZGUgb2YgdGhl
IGVkZ2UgdGhlIHZlcnRleCBsaWVzIG9uLgotICAgICAgVHdvIGVkZ2VzIGFyZSBtZXJnZWQgb25s
eSB3aGVuIGJvdGggZW5kcG9pbnRzIGFyZSBpZGVudGljYWwuCi0KLQotICAgdm9pZCBnbHVUZXNz
Tm9ybWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAotCQkgICAgICBHTFVjb29yZCB4LCBHTFVjb29y
ZCB5LCBHTFVjb29yZCB6ICkKLQotICAgIC0gTGV0cyB0aGUgdXNlciBzdXBwbHkgdGhlIHBvbHln
b24gbm9ybWFsLCBpZiBrbm93bi4gIEFsbCBpbnB1dCBkYXRhCi0gICAgICBpcyBwcm9qZWN0ZWQg
aW50byBhIHBsYW5lIHBlcnBlbmRpY3VsYXIgdG8gdGhlIG5vcm1hbCBiZWZvcmUKLSAgICAgIHRl
c3NlbGF0aW9uLiAgQWxsIG91dHB1dCB0cmlhbmdsZXMgYXJlIG9yaWVudGVkIENDVyB3aXRoCi0g
ICAgICByZXNwZWN0IHRvIHRoZSBub3JtYWwgKENXIG9yaWVudGF0aW9uIGNhbiBiZSBvYnRhaW5l
ZCBieQotICAgICAgcmV2ZXJzaW5nIHRoZSBzaWduIG9mIHRoZSBzdXBwbGllZCBub3JtYWwpLiAg
Rm9yIGV4YW1wbGUsIGlmCi0gICAgICB5b3Uga25vdyB0aGF0IGFsbCBwb2x5Z29ucyBsaWUgaW4g
dGhlIHgteSBwbGFuZSwgY2FsbAotICAgICAgImdsdVRlc3NOb3JtYWwodGVzcywgMC4wLCAwLjAs
IDEuMCkiIGJlZm9yZSByZW5kZXJpbmcgYW55IHBvbHlnb25zLgotICAgICAgCi0gICAgLSBJZiB0
aGUgc3VwcGxpZWQgbm9ybWFsIGlzICgwLDAsMCkgKHRoZSBkZWZhdWx0IHZhbHVlKSwgdGhlCi0g
ICAgICBub3JtYWwgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzLiAgVGhlIGRpcmVjdGlvbiBvZiB0
aGUgbm9ybWFsLAotICAgICAgdXAgdG8gaXRzIHNpZ24sIGlzIGZvdW5kIGJ5IGZpdHRpbmcgYSBw
bGFuZSB0byB0aGUgdmVydGljZXMsCi0gICAgICB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHZl
cnRpY2VzIGFyZSBjb25uZWN0ZWQuICBJdCBpcwotICAgICAgZXhwZWN0ZWQgdGhhdCB0aGUgaW5w
dXQgZGF0YSBsaWVzIGFwcHJveGltYXRlbHkgaW4gcGxhbmU7Ci0gICAgICBvdGhlcndpc2UgcHJv
amVjdGlvbiBwZXJwZW5kaWN1bGFyIHRvIHRoZSBjb21wdXRlZCBub3JtYWwgbWF5Ci0gICAgICBz
dWJzdGFudGlhbGx5IGNoYW5nZSB0aGUgZ2VvbWV0cnkuICBUaGUgc2lnbiBvZiB0aGUgbm9ybWFs
IGlzCi0gICAgICBjaG9zZW4gc28gdGhhdCB0aGUgc3VtIG9mIHRoZSBzaWduZWQgYXJlYXMgb2Yg
YWxsIGlucHV0IGNvbnRvdXJzCi0gICAgICBpcyBub24tbmVnYXRpdmUgKHdoZXJlIGEgQ0NXIGNv
bnRvdXIgaGFzIHBvc2l0aXZlIGFyZWEpLgotICAgIAotICAgIC0gVGhlIHN1cHBsaWVkIG5vcm1h
bCBwZXJzaXN0cyB1bnRpbCBpdCBpcyBjaGFuZ2VkIGJ5IGFub3RoZXIKLSAgICAgIGNhbGwgdG8g
Z2x1VGVzc05vcm1hbC4KLQotCi0gIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgR0xV
IHRlc3NlbGF0b3IKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gIFRoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIGlzIHRoZSBvbmUgZGVzY3JpYmVkIGFi
b3ZlLiAgVGhlIGZvbGxvd2luZwotICByb3V0aW5lcyBhcmUgb2Jzb2xldGUsIGFuZCBhcmUgcHJv
dmlkZWQgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKLQotICAgIHR5cGVkZWYgR0xV
dGVzc2VsYXRvciBHTFV0cmlhbmd1bGF0b3JPYmo7CS8qIG9ic29sZXRlIG5hbWUgKi8KLQotICAg
IHZvaWQgZ2x1QmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0gICAgdm9pZCBn
bHVOZXh0Q29udG91ciggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHR5cGUgKTsKLSAgICB2
b2lkIGdsdUVuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgCi0gICJ0eXBlIiBp
cyBvbmUgb2YgR0xVX0VYVEVSSU9SLCBHTFVfSU5URVJJT1IsIEdMVV9DQ1csIEdMVV9DVywgb3IK
LSAgR0xVX1VOS05PV04uICBJdCBpcyBpZ25vcmVkIGJ5IHRoZSBjdXJyZW50IEdMVSB0ZXNzZWxh
dG9yLgotICAKLSAgR0xVX0JFR0lOLCBHTFVfVkVSVEVYLCBHTFVfRU5ELCBHTFVfRVJST1IsIGFu
ZCBHTFVfRURHRV9GTEFHIGFyZSBkZWZpbmVkCi0gIGFzIHN5bm9ueW1zIGZvciBHTFVfVEVTU19C
RUdJTiwgR0xVX1RFU1NfVkVSVEVYLCBHTFVfVEVTU19FTkQsCi0gIEdMVV9URVNTX0VSUk9SLCBh
bmQgR0xVX1RFU1NfRURHRV9GTEFHLgotCi0KLVBvbHlnb24gQ1NHIG9wZXJhdGlvbnMKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICBUaGUgZmVhdHVyZXMgb2YgdGhlIHRlc3NlbGF0b3IgbWFr
ZSBpdCBlYXN5IHRvIGZpbmQgdGhlIHVuaW9uLCBkaWZmZXJlbmNlLAotICBvciBpbnRlcnNlY3Rp
b24gb2Ygc2V2ZXJhbCBwb2x5Z29ucy4KLQotICBGaXJzdCwgYXNzdW1lIHRoYXQgZWFjaCBwb2x5
Z29uIGlzIGRlZmluZWQgc28gdGhhdCB0aGUgd2luZGluZyBudW1iZXIKLSAgaXMgMCBmb3IgZWFj
aCBleHRlcmlvciByZWdpb24sIGFuZCAxIGZvciBlYWNoIGludGVyaW9yIHJlZ2lvbi4gIFVuZGVy
Ci0gIHRoaXMgbW9kZWwsIENDVyBjb250b3VycyBkZWZpbmUgdGhlIG91dGVyIGJvdW5kYXJ5IG9m
IHRoZSBwb2x5Z29uLCBhbmQKLSAgQ1cgY29udG91cnMgZGVmaW5lIGhvbGVzLiAgQ29udG91cnMg
bWF5IGJlIG5lc3RlZCwgYnV0IGEgbmVzdGVkCi0gIGNvbnRvdXIgbXVzdCBiZSBvcmllbnRlZCBv
cHBvc2l0ZWx5IGZyb20gdGhlIGNvbnRvdXIgdGhhdCBjb250YWlucyBpdC4KLQotICBJZiB0aGUg
b3JpZ2luYWwgcG9seWdvbnMgZG8gbm90IHNhdGlzZnkgdGhpcyBkZXNjcmlwdGlvbiwgdGhleSBj
YW4gYmUKLSAgY29udmVydGVkIHRvIHRoaXMgZm9ybSBieSBmaXJzdCBydW5uaW5nIHRoZSB0ZXNz
ZWxhdG9yIHdpdGggdGhlCi0gIEdMVV9URVNTX0JPVU5EQVJZX09OTFkgcHJvcGVydHkgdHVybmVk
IG9uLiAgVGhpcyByZXR1cm5zIGEgbGlzdCBvZgotICBjb250b3VycyBzYXRpc2Z5aW5nIHRoZSBy
ZXN0cmljdGlvbiBhYm92ZS4gIEJ5IGFsbG9jYXRpbmcgdHdvCi0gIHRlc3NlbGF0b3Igb2JqZWN0
cywgdGhlIGNhbGxiYWNrcyBmcm9tIG9uZSB0ZXNzZWxhdG9yIGNhbiBiZSBmZWQKLSAgZGlyZWN0
bHkgdG8gdGhlIGlucHV0IG9mIGFub3RoZXIuCi0KLSAgR2l2ZW4gdHdvIG9yIG1vcmUgcG9seWdv
bnMgb2YgdGhlIGZvcm0gYWJvdmUsIENTRyBvcGVyYXRpb25zIGNhbiBiZQotICBpbXBsZW1lbnRl
ZCBhcyBmb2xsb3dzOgotCi0gIFVuaW9uCi0gICAgIERyYXcgYWxsIHRoZSBpbnB1dCBjb250b3Vy
cyBhcyBhIHNpbmdsZSBwb2x5Z29uLiAgVGhlIHdpbmRpbmcgbnVtYmVyCi0gICAgIG9mIGVhY2gg
cmVzdWx0aW5nIHJlZ2lvbiBpcyB0aGUgbnVtYmVyIG9mIG9yaWdpbmFsIHBvbHlnb25zCi0gICAg
IHdoaWNoIGNvdmVyIGl0LiAgVGhlIHVuaW9uIGNhbiBiZSBleHRyYWN0ZWQgdXNpbmcgdGhlCi0g
ICAgIEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyBvciBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZF
IHdpbmRpbmcgcnVsZXMuCi0gICAgIE5vdGUgdGhhdCB3aXRoIHRoZSBub256ZXJvIHJ1bGUsIHdl
IHdvdWxkIGdldCB0aGUgc2FtZSByZXN1bHQgaWYKLSAgICAgYWxsIGNvbnRvdXIgb3JpZW50YXRp
b25zIHdlcmUgcmV2ZXJzZWQuCi0KLSAgSW50ZXJzZWN0aW9uICh0d28gcG9seWdvbnMgYXQgYSB0
aW1lIG9ubHkpCi0gICAgIERyYXcgYSBzaW5nbGUgcG9seWdvbiB1c2luZyB0aGUgY29udG91cnMg
ZnJvbSBib3RoIGlucHV0IHBvbHlnb25zLgotICAgICBFeHRyYWN0IHRoZSByZXN1bHQgdXNpbmcg
R0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTy4gIChTaW5jZSB0aGlzCi0gICAgIHdpbmRpbmcg
cnVsZSBsb29rcyBhdCB0aGUgYWJzb2x1dGUgdmFsdWUsIHJldmVyc2luZyBhbGwgY29udG91cgot
ICAgICBvcmllbnRhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSByZXN1bHQuKQotCi0gIERpZmZl
cmVuY2UKLSAgCi0gICAgIFN1cHBvc2Ugd2Ugd2FudCB0byBjb21wdXRlIEEgXCAoQiB1bmlvbiBD
IHVuaW9uIEQpLiAgRHJhdyBhIHNpbmdsZQotICAgICBwb2x5Z29uIGNvbnNpc3Rpbmcgb2YgdGhl
IHVubW9kaWZpZWQgY29udG91cnMgZnJvbSBBLCBmb2xsb3dlZCBieQotICAgICB0aGUgY29udG91
cnMgb2YgQixDLEQgd2l0aCB0aGUgdmVydGV4IG9yZGVyIHJldmVyc2VkICh0aGlzIGNoYW5nZXMK
LSAgICAgdGhlIHdpbmRpbmcgbnVtYmVyIG9mIHRoZSBpbnRlcmlvciByZWdpb25zIHRvIC0xKS4g
IFRvIGV4dHJhY3QgdGhlCi0gICAgIHJlc3VsdCwgdXNlIHRoZSBHTFVfVEVTU19XSU5ESU5HX1BP
U0lUSVZFIHJ1bGUuCi0gICAKLSAgICAgSWYgQixDLEQgYXJlIHRoZSByZXN1bHQgb2YgYSBHTFVf
VEVTU19CT1VOREFSWV9PTkxZIGNhbGwsIGFuCi0gICAgIGFsdGVybmF0aXZlIHRvIHJldmVyc2lu
ZyB0aGUgdmVydGV4IG9yZGVyIGlzIHRvIHJldmVyc2UgdGhlIHNpZ24gb2YKLSAgICAgdGhlIHN1
cHBsaWVkIG5vcm1hbC4gIEZvciBleGFtcGxlIGluIHRoZSB4LXkgcGxhbmUsIGNhbGwKLSAgICAg
Z2x1VGVzc05vcm1hbCggdGVzcywgMC4wLCAwLjAsIC0xLjAgKS4KLSAKLQotUGVyZm9ybWFuY2UK
LS0tLS0tLS0tLS0tCi0KLSAgVGhlIHRlc3NlbGF0b3IgaXMgbm90IGludGVuZGVkIGZvciBpbW1l
ZGlhdGUtbW9kZSByZW5kZXJpbmc7IHdoZW4KLSAgcG9zc2libGUgdGhlIG91dHB1dCBzaG91bGQg
YmUgY2FjaGVkIGluIGEgdXNlciBzdHJ1Y3R1cmUgb3IgZGlzcGxheQotICBsaXN0LiAgR2VuZXJh
bCBwb2x5Z29uIHRlc3NlbGF0aW9uIGlzIGFuIGluaGVyZW50bHkgZGlmZmljdWx0IHByb2JsZW0s
Ci0gIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGdvYWwgb2YgZXh0cmVtZSByb2J1c3RuZXNzLgotCi0g
IFRoZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyBhbiBlZmZvcnQgdG8gb3V0cHV0IGEgc21hbGwgbnVt
YmVyIG9mIGZhbnMKLSAgYW5kIHN0cmlwczsgdGhpcyBzaG91bGQgaW1wcm92ZSB0aGUgcmVuZGVy
aW5nIHBlcmZvcm1hbmNlIHdoZW4gdGhlCi0gIG91dHB1dCBpcyB1c2VkIGluIGEgZGlzcGxheSBs
aXN0LgotCi0gIFNpbmdsZS1jb250b3VyIGlucHV0IHBvbHlnb25zIGFyZSBmaXJzdCB0ZXN0ZWQg
dG8gc2VlIHdoZXRoZXIgdGhleSBjYW4KLSAgYmUgcmVuZGVyZWQgYXMgYSB0cmlhbmdsZSBmYW4g
d2l0aCByZXNwZWN0IHRvIHRoZSBmaXJzdCB2ZXJ0ZXggKHRvCi0gIGF2b2lkIHJ1bm5pbmcgdGhl
IGZ1bGwgZGVjb21wb3NpdGlvbiBhbGdvcml0aG0gb24gY29udmV4IHBvbHlnb25zKS4KLSAgTm9u
LWNvbnZleCBwb2x5Z29ucyBtYXkgYmUgcmVuZGVyZWQgYnkgdGhpcyAiZmFzdCBwYXRoIiBhcyB3
ZWxsLCBpZgotICB0aGUgYWxnb3JpdGhtIGdldHMgbHVja3kgaW4gaXRzIGNob2ljZSBvZiBhIHN0
YXJ0aW5nIHZlcnRleC4KLQotICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBmb2xsb3cgdGhlc2UgZ3Vp
ZGVsaW5lczoKLQotICAgLSBzdXBwbHkgdGhlIHBvbHlnb24gbm9ybWFsLCBpZiBhdmFpbGFibGUs
IHVzaW5nIGdsdVRlc3NOb3JtYWwoKS4KLSAgICAgVGhpcyByZXByZXNlbnRzIGFib3V0IDEwJSBv
ZiB0aGUgY29tcHV0YXRpb24gdGltZS4gIEZvciBleGFtcGxlLAotICAgICBpZiBhbGwgcG9seWdv
bnMgbGllIGluIHRoZSB4LXkgcGxhbmUsIHVzZSBnbHVUZXNzTm9ybWFsKHRlc3MsMCwwLDEpLgot
Ci0gICAtIHJlbmRlciBtYW55IHBvbHlnb25zIHVzaW5nIHRoZSBzYW1lIHRlc3NlbGF0b3Igb2Jq
ZWN0LCByYXRoZXIgdGhhbgotICAgICBhbGxvY2F0aW5nIGEgbmV3IHRlc3NlbGF0b3IgZm9yIGVh
Y2ggb25lLiAgKEluIGEgbXVsdGktdGhyZWFkZWQsCi0gICAgIG11bHRpLXByb2Nlc3NvciBlbnZp
cm9ubWVudCB5b3UgbWF5IGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UgdXNpbmcKLSAgICAgc2V2ZXJh
bCB0ZXNzZWxhdG9ycy4pCi0KLQotQ29tcGFyaXNvbiB3aXRoIHRoZSBHTFUgdGVzc2VsYXRvcgot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIE9uIHBvbHlnb25zIHdoaWNo
IG1ha2UgaXQgdGhyb3VnaCB0aGUgImZhc3QgcGF0aCIsIHRoZSB0ZXNzZWxhdG9yIGlzCi0gIDMg
dG8gNSB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgR0xVIHRlc3NlbGF0b3IuCi0KLSAgT24gcG9seWdv
bnMgd2hpY2ggZG9uJ3QgbWFrZSBpdCB0aHJvdWdoIHRoZSBmYXN0IHBhdGggKGJ1dCB3aGljaCBk
b24ndAotICBoYXZlIHNlbGYtaW50ZXJzZWN0aW9ucyBvciBkZWdlbmVyYWNpZXMpLCBpdCBpcyBh
Ym91dCAyIHRpbWVzIHNsb3dlci4KLQotICBPbiBwb2x5Z29ucyB3aXRoIHNlbGYtaW50ZXJzZWN0
aW9ucyBvciBkZWdlbmVyYWNlcywgdGhlcmUgaXMgbm90aGluZwotICB0byBjb21wYXJlIGFnYWlu
c3QuCi0KLSAgVGhlIG5ldyB0ZXNzZWxhdG9yIGdlbmVyYXRlcyBtYW55IG1vcmUgZmFucyBhbmQg
c3RyaXBzLCByZWR1Y2luZyB0aGUKLSAgbnVtYmVyIG9mIHZlcnRpY2VzIHRoYXQgbmVlZCB0byBi
ZSBzZW50IHRvIHRoZSBoYXJkd2FyZS4KLQotICBLZXkgdG8gdGhlIHN0YXRpc3RpY3M6Ci0KLQl2
ZXJ0CQludW1iZXIgb2YgaW5wdXQgdmVydGljZXMgb24gYWxsIGNvbnRvdXJzCi0JY250cgkJbnVt
YmVyIG9mIGlucHV0IGNvbnRvdXJzCi0JdHJpCQludW1iZXIgb2YgdHJpYW5nbGVzIGluIGFsbCBv
dXRwdXQgcHJpbWl0aXZlcwotCXN0cmlwCQludW1iZXIgb2YgdHJpYW5nbGUgc3RyaXBzCi0JZmFu
CQludW1iZXIgb2YgdHJpYW5nbGUgZmFucwotCWluZAkJbnVtYmVyIG9mIGluZGVwZW5kZW50IHRy
aWFuZ2xlcwotCW1zCQludW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZvciB0ZXNzZWxhdGlvbgotCQkJ
KG9uIGEgMTUwTUh6IFI0NDAwIEluZHkpCi0KLSAgQ29udmV4IHBvbHlnb24gZXhhbXBsZXM6Ci0K
LU5ldzogICAgIDMgdmVydCwgICAxIGNudHIsICAgICAxIHRyaSwgICAwIHN0cmlwLCAgIDAgZmFu
LCAgICAgMSBpbmQsICAwLjA0NTkgbXMKLU9sZDogICAgIDMgdmVydCwgICAxIGNudHIsICAgICAx
IHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgMSBpbmQsICAgMC4xNDkgbXMKLU5ldzogICAg
IDQgdmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBp
bmQsICAwLjA0NTkgbXMKLU9sZDogICAgIDQgdmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAw
IHN0cmlwLCAgIDAgZmFuLCAgICAgMiBpbmQsICAgMC4xNjEgbXMKLU5ldzogICAgMzYgdmVydCwg
ICAxIGNudHIsICAgIDM0IHRyaSwgICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBpbmQsICAgMC4x
NTMgbXMKLU9sZDogICAgMzYgdmVydCwgICAxIGNudHIsICAgIDM0IHRyaSwgICAwIHN0cmlwLCAg
IDAgZmFuLCAgICAzNCBpbmQsICAgMC42MjEgbXMKLQotICBDb25jYXZlIHNpbmdsZS1jb250b3Vy
IHBvbHlnb25zOgotCi1OZXc6ICAgICA1IHZlcnQsICAgMSBjbnRyLCAgICAgMyB0cmksICAgMCBz
dHJpcCwgICAxIGZhbiwgICAgIDAgaW5kLCAgIDAuMDUyIG1zCi1PbGQ6ICAgICA1IHZlcnQsICAg
MSBjbnRyLCAgICAgMyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDMgaW5kLCAgIDAuMjUy
IG1zCi1OZXc6ICAgIDE5IHZlcnQsICAgMSBjbnRyLCAgICAxNyB0cmksICAgMiBzdHJpcCwgICAy
IGZhbiwgICAgIDEgaW5kLCAgIDAuOTExIG1zCi1PbGQ6ICAgIDE5IHZlcnQsICAgMSBjbnRyLCAg
ICAxNyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgMTcgaW5kLCAgIDAuNTI5IG1zCi1OZXc6
ICAgMTUxIHZlcnQsICAgMSBjbnRyLCAgIDE0OSB0cmksICAxMyBzdHJpcCwgIDE4IGZhbiwgICAg
IDMgaW5kLCAgICA2LjgyIG1zCi1PbGQ6ICAgMTUxIHZlcnQsICAgMSBjbnRyLCAgIDE0OSB0cmks
ICAgMCBzdHJpcCwgICAzIGZhbiwgICAxNDMgaW5kLCAgICAgMi43IG1zCi1OZXc6ICAgNTc0IHZl
cnQsICAgMSBjbnRyLCAgIDU3MiB0cmksICA1OSBzdHJpcCwgIDU0IGZhbiwgICAgMTEgaW5kLCAg
ICAyNi42IG1zCi1PbGQ6ICAgNTc0IHZlcnQsICAgMSBjbnRyLCAgIDU3MiB0cmksICAgMCBzdHJp
cCwgIDMxIGZhbiwgICA0OTkgaW5kLCAgICAxMi40IG1zCi0KLSAgTXVsdGlwbGUgY29udG91cnMs
IGJ1dCBubyBpbnRlcnNlY3Rpb25zOgotCi1OZXc6ICAgICA3IHZlcnQsICAgMiBjbnRyLCAgICAg
NyB0cmksICAgMSBzdHJpcCwgICAwIGZhbiwgICAgIDAgaW5kLCAgIDAuNTI3IG1zCi1PbGQ6ICAg
ICA3IHZlcnQsICAgMiBjbnRyLCAgICAgNyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDcg
aW5kLCAgIDAuMjc0IG1zCi1OZXc6ICAgIDgxIHZlcnQsICAgNiBjbnRyLCAgICA4OSB0cmksICAg
OSBzdHJpcCwgICA3IGZhbiwgICAgIDYgaW5kLCAgICAzLjg4IG1zCi1PbGQ6ICAgIDgxIHZlcnQs
ICAgNiBjbnRyLCAgICA4OSB0cmksICAgMCBzdHJpcCwgIDEzIGZhbiwgICAgNjEgaW5kLCAgICAg
Mi4yIG1zCi1OZXc6ICAgMzkxIHZlcnQsICAxOSBjbnRyLCAgIDQxMyB0cmksICAzNyBzdHJpcCwg
IDMyIGZhbiwgICAgMjYgaW5kLCAgICAyMC4yIG1zCi1PbGQ6ICAgMzkxIHZlcnQsICAxOSBjbnRy
LCAgIDQxMyB0cmksICAgMCBzdHJpcCwgIDI1IGZhbiwgICAzNjMgaW5kLCAgICA4LjY4IG1zCi0K
LSAgU2VsZi1pbnRlcnNlY3RpbmcgYW5kIGRlZ2VuZXJhdGUgZXhhbXBsZXM6Ci0KLUJvd3RpZTog
IDQgdmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgMiBp
bmQsICAgMC40ODMgbXMKLVN0YXI6ICAgIDUgdmVydCwgICAxIGNudHIsICAgICA1IHRyaSwgICAw
IHN0cmlwLCAgIDAgZmFuLCAgICAgNSBpbmQsICAgIDAuOTEgbXMKLVJhbmRvbTogMjQgdmVydCwg
ICA3IGNudHIsICAgIDQ2IHRyaSwgICAyIHN0cmlwLCAgMTIgZmFuLCAgICAgNyBpbmQsICAgIDUu
MzIgbXMKLUZvbnQ6ICAzMzMgdmVydCwgICAyIGNudHIsICAgMzMxIHRyaSwgIDMyIHN0cmlwLCAg
MTYgZmFuLCAgICAgMyBpbmQsICAgIDE0LjEgbXMKLTogICAgICAxNjcgdmVydCwgIDM1IGNudHIs
ICAgMjU0IHRyaSwgICA4IHN0cmlwLCAgNTYgZmFuLCAgICA1MiBpbmQsICAgIDQ2LjMgbXMKLTog
ICAgICAgNzggdmVydCwgICAxIGNudHIsICAyNjc1IHRyaSwgMTQ4IHN0cmlwLCAyMDcgZmFuLCAg
IDE4MCBpbmQsICAgICAyNDMgbXMKLTogICAgMTI0ODAgdmVydCwgICAyIGNudHIsIDEyNDc4IHRy
aSwgNzM2IHN0cmlwLDEyNzUgZmFuLCAgICAgNSBpbmQsICAgIDEwMTAgbXMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvYWxnLW91dGxpbmUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9hbGctb3V0bGluZQkocmV2
aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2Fs
Zy1vdXRsaW5lCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyOSArMCwwIEBACi0vKgotKiogJEhlYWRl
cjogL2N2cy9wcm9qZWN0cy9vZ2wtc2FtcGxlL21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9hbGct
b3V0bGluZSx2IDEuMSAyMDAwLzA0LzI2IDA1OjUzOjU5IGxqcCBFeHAgJAotKi8KLQotVGhpcyBp
cyBvbmx5IGEgdmVyeSBicmllZiBvdmVydmlldy4gIFRoZXJlIGlzIHF1aXRlIGEgYml0IG9mCi1h
ZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KLQotCi1H
b2FscyBvZiByb2J1c3QgdGVzc2VsYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1UaGUgdGVzc2VsYXRpb24gYWxnb3JpdGhtIGlzIGZ1bmRhbWVudGFsbHkgYSAyRCBhbGdvcml0
aG0uICBXZQotaW5pdGlhbGx5IHByb2plY3QgYWxsIGRhdGEgaW50byBhIHBsYW5lOyBvdXIgZ29h
bCBpcyB0byByb2J1c3RseQotdGVzc2VsYXRlIHRoZSBwcm9qZWN0ZWQgZGF0YS4gIFRoZSBzYW1l
IHRvcG9sb2dpY2FsIHRlc3NlbGF0aW9uIGlzCi10aGVuIGFwcGxpZWQgdG8gdGhlIGlucHV0IGRh
dGEuCi0KLVRvcG9sb2dpY2FsbHksIHRoZSBvdXRwdXQgc2hvdWxkIGFsd2F5cyBiZSBhIHRlc3Nl
bGF0aW9uLiAgSWYgdGhlCi1pbnB1dCBpcyBldmVuIHNsaWdodGx5IG5vbi1wbGFuYXIsIHRoZW4g
c29tZSB0cmlhbmdsZXMgd2lsbAotbmVjZXNzYXJpbHkgYmUgYmFjay1mYWNpbmcgd2hlbiB2aWV3
ZWQgZnJvbSBzb21lIGFuZ2xlcywgYnV0IHRoZSBnb2FsCi1pcyB0byBtaW5pbWl6ZSB0aGlzIGVm
ZmVjdC4KLQotVGhlIGFsZ29yaXRobSBuZWVkcyBzb21lIGNhcGFiaWxpdHkgb2YgY2xlYW5pbmcg
dXAgdGhlIGlucHV0IGRhdGEgYXMKLXdlbGwgYXMgdGhlIG51bWVyaWNhbCBlcnJvcnMgaW4gaXRz
IG93biBjYWxjdWxhdGlvbnMuICBPbmUgd2F5IHRvIGRvCi10aGlzIGlzIHRvIHNwZWNpZnkgYSB0
b2xlcmFuY2UgYXMgZGVmaW5lZCBhYm92ZSwgYW5kIGNsZWFuIHVwIHRoZQotaW5wdXQgYW5kIG91
dHB1dCBkdXJpbmcgdGhlIGxpbmUgc3dlZXAgcHJvY2Vzcy4gIEF0IHRoZSB2ZXJ5IGxlYXN0LAot
dGhlIGFsZ29yaXRobSBtdXN0IGhhbmRsZSBjb2luY2lkZW50IHZlcnRpY2VzLCB2ZXJ0aWNlcyBp
bmNpZGVudCB0byBhbgotZWRnZSwgYW5kIGNvaW5jaWRlbnQgZWRnZXMuCi0KLQotUGhhc2VzIG9m
IHRoZSBhbGdvcml0aG0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIEZpbmQgdGhlIHBv
bHlnb24gbm9ybWFsIE4uCi0yLiBQcm9qZWN0IHRoZSB2ZXJ0ZXggZGF0YSBvbnRvIGEgcGxhbmUu
ICBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gICBwZXJwZW5kaWN1bGFyIHRvIHRoZSBub3JtYWws
IGVnLiB3ZSBjYW4gcHJvamVjdCBvbnRvIHRoZSBwbGFuZQotICAgcGVycGVuZGljdWxhciB0byB0
aGUgY29vcmRpbmF0ZSBheGlzIHdob3NlIGRvdCBwcm9kdWN0IHdpdGggTgotICAgaXMgbGFyZ2Vz
dC4KLTMuIFVzaW5nIGEgbGluZS1zd2VlcCBhbGdvcml0aG0sIHBhcnRpdGlvbiB0aGUgcGxhbmUg
aW50byB4LW1vbm90b25lCi0gICByZWdpb25zLiAgQW55IHZlcnRpY2FsIGxpbmUgaW50ZXJzZWN0
cyBhbiB4LW1vbm90b25lIHJlZ2lvbiBpbgotICAgYXQgbW9zdCBvbmUgaW50ZXJ2YWwuCi00LiBU
cmlhbmd1bGF0ZSB0aGUgeC1tb25vdG9uZSByZWdpb25zLgotNS4gR3JvdXAgdGhlIHRyaWFuZ2xl
cyBpbnRvIHN0cmlwcyBhbmQgZmFucy4KLQotCi1GaW5kaW5nIHRoZSBub3JtYWwgdmVjdG9yCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgY29tbW9uIHdheSB0byBmaW5kIGEgcG9seWdv
biBub3JtYWwgaXMgdG8gY29tcHV0ZSB0aGUgc2lnbmVkIGFyZWEKLXdoZW4gdGhlIHBvbHlnb24g
aXMgcHJvamVjdGVkIGFsb25nIHRoZSB0aHJlZSBjb29yZGluYXRlIGF4ZXMuICBXZQotY2FuJ3Qg
ZG8gdGhpcywgc2luY2UgY29udG91cnMgY2FuIGhhdmUgemVybyBhcmVhIHdpdGhvdXQgYmVpbmcK
LWRlZ2VuZXJhdGUgKGVnLiBhIGJvd3RpZSkuCi0KLVdlIGZpdCBhIHBsYW5lIHRvIHRoZSB2ZXJ0
ZXggZGF0YSwgaWdub3JpbmcgaG93IHRoZXkgYXJlIGNvbm5lY3RlZAotaW50byBjb250b3Vycy4g
IElkZWFsbHkgdGhpcyB3b3VsZCBiZSBhIGxlYXN0LXNxdWFyZXMgZml0OyBob3dldmVyIGZvcgot
b3VyIHB1cnBvc2UgdGhlIGFjY3VyYWN5IG9mIHRoZSBub3JtYWwgaXMgbm90IGltcG9ydGFudC4g
IEluc3RlYWQgd2UKLWZpbmQgdGhyZWUgdmVydGljZXMgd2hpY2ggYXJlIHdpZGVseSBzZXBhcmF0
ZWQsIGFuZCBjb21wdXRlIHRoZSBub3JtYWwKLXRvIHRoZSB0cmlhbmdsZSB0aGV5IGZvcm0uICBU
aGUgdmVydGljZXMgYXJlIGNob3NlbiBzbyB0aGF0IHRoZQotdHJpYW5nbGUgaGFzIGFuIGFyZWEg
YXQgbGVhc3QgMS9zcXJ0KDMpIHRpbWVzIHRoZSBsYXJnZXN0IGFyZWEgb2YgYW55Ci10cmlhbmds
ZSBmb3JtZWQgdXNpbmcgdGhlIGlucHV0IHZlcnRpY2VzLiAgCi0KLVRoZSBjb250b3VycyBkbyBh
ZmZlY3QgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBub3JtYWw7IGFmdGVyIGNvbXB1dGluZwotdGhl
IG5vcm1hbCwgd2UgY2hlY2sgdGhhdCB0aGUgc3VtIG9mIHRoZSBzaWduZWQgY29udG91ciBhcmVh
cyBpcwotbm9uLW5lZ2F0aXZlLCBhbmQgcmV2ZXJzZSB0aGUgbm9ybWFsIGlmIG5lY2Vzc2FyeS4K
LQotCi1Qcm9qZWN0aW5nIHRoZSB2ZXJ0aWNlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
V2UgcHJvamVjdCB0aGUgdmVydGljZXMgb250byBhIHBsYW5lIHBlcnBlbmRpY3VsYXIgdG8gb25l
IG9mIHRoZSB0aHJlZQotY29vcmRpbmF0ZSBheGVzLiAgVGhpcyBoZWxwcyBudW1lcmljYWwgYWNj
dXJhY3kgYnkgcmVtb3ZpbmcgYQotdHJhbnNmb3JtYXRpb24gc3RlcCBiZXR3ZWVuIHRoZSBvcmln
aW5hbCBpbnB1dCBkYXRhIGFuZCB0aGUgZGF0YQotcHJvY2Vzc2VkIGJ5IHRoZSBhbGdvcml0aG0u
ICBUaGUgcHJvamVjdGlvbiBhbHNvIGNvbXByZXNzZXMgdGhlIGlucHV0Ci1kYXRhOyB0aGUgMkQg
ZGlzdGFuY2UgYmV0d2VlbiB2ZXJ0aWNlcyBhZnRlciBwcm9qZWN0aW9uIG1heSBiZSBzbWFsbGVy
Ci10aGFuIHRoZSBvcmlnaW5hbCAyRCBkaXN0YW5jZS4gIEhvd2V2ZXIgYnkgY2hvb3NpbmcgdGhl
IGNvb3JkaW5hdGUKLWF4aXMgd2hvc2UgZG90IHByb2R1Y3Qgd2l0aCB0aGUgbm9ybWFsIGlzIGdy
ZWF0ZXN0LCB0aGUgY29tcHJlc3Npb24KLWZhY3RvciBpcyBhdCBtb3N0IDEvc3FydCgzKS4KLQot
RXZlbiB0aG91Z2ggdGhlICphY2N1cmFjeSogb2YgdGhlIG5vcm1hbCBpcyBub3QgdGhhdCBpbXBv
cnRhbnQgKHNpbmNlCi13ZSBhcmUgcHJvamVjdGluZyBwZXJwZW5kaWN1bGFyIHRvIGEgY29vcmRp
bmF0ZSBheGlzIGFueXdheSksIHRoZQotKnJvYnVzdG5lc3MqIG9mIHRoZSBjb21wdXRhdGlvbiBp
cyBpbXBvcnRhbnQuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUKLWFyZSBtYW55IHZlcnRpY2VzIHdo
aWNoIGxpZSBhbG1vc3QgYWxvbmcgYSBsaW5lLCBhbmQgb25lIHZlcnRleCBWCi13aGljaCBpcyB3
ZWxsLXNlcGFyYXRlZCBmcm9tIHRoZSBsaW5lLCB0aGVuIG91ciBub3JtYWwgY29tcHV0YXRpb24K
LXNob3VsZCBpbnZvbHZlIFYgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIHdpbGwgYmUgZ2FyYmFnZS4K
LQotVGhlIGFkdmFudGFnZSBvZiBwcm9qZWN0aW5nIHBlcnBlbmRpY3VsYXIgdG8gdGhlIHBvbHln
b24gbm9ybWFsIGlzCi10aGF0IGNvbXB1dGVkIGludGVyc2VjdGlvbiBwb2ludHMgd2lsbCBiZSBh
cyBjbG9zZSBhcyBwb3NzaWJsZSB0bwotdGhlaXIgaWRlYWwgbG9jYXRpb25zLiAgVG8gZ2V0IHRo
aXMgYmVoYXZpb3IsIGRlZmluZSBUUlVFX1BST0pFQ1QuCi0KLQotVGhlIExpbmUgU3dlZXAKLS0t
LS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSB0aHJlZSBkYXRhIHN0cnVjdHVyZXM6IHRoZSBtZXNo
LCB0aGUgZXZlbnQgcXVldWUsIGFuZCB0aGUKLWVkZ2UgZGljdGlvbmFyeS4KLQotVGhlIG1lc2gg
aXMgYSAicXVhZC1lZGdlIiBkYXRhIHN0cnVjdHVyZSB3aGljaCByZWNvcmRzIHRoZSB0b3BvbG9n
eSBvZgotdGhlIGN1cnJlbnQgZGVjb21wb3NpdGlvbjsgZm9yIGRldGFpbHMgc2VlIHRoZSBpbmNs
dWRlIGZpbGUgIm1lc2guaCIuCi0KLVRoZSBldmVudCBxdWV1ZSBzaW1wbHkgaG9sZHMgYWxsIHZl
cnRpY2VzIChib3RoIG9yaWdpbmFsIGFuZCBjb21wdXRlZAotb25lcyksIG9yZ2FuaXplZCBzbyB0
aGF0IHdlIGNhbiBxdWlja2x5IGV4dHJhY3QgdGhlIHZlcnRleCB3aXRoIHRoZQotbWluaW11bSB4
LWNvb3JkIChhbmQgYW1vbmcgdGhvc2UsIHRoZSBvbmUgd2l0aCB0aGUgbWluaW11bSB5LWNvb3Jk
KS4KLQotVGhlIGVkZ2UgZGljdGlvbmFyeSBkZXNjcmliZXMgdGhlIGN1cnJlbnQgaW50ZXJzZWN0
aW9uIG9mIHRoZSBzd2VlcAotbGluZSB3aXRoIHRoZSByZWdpb25zIG9mIHRoZSBwb2x5Z29uLiAg
VGhpcyBpcyBqdXN0IGFuIG9yZGVyaW5nIG9mIHRoZQotZWRnZXMgd2hpY2ggaW50ZXJzZWN0IHRo
ZSBzd2VlcCBsaW5lLCBzb3J0ZWQgYnkgdGhlaXIgY3VycmVudCBvcmRlciBvZgotaW50ZXJzZWN0
aW9uLiAgRm9yIGVhY2ggcGFpciBvZiBlZGdlcywgd2Ugc3RvcmUgc29tZSBpbmZvcm1hdGlvbiBh
Ym91dAotdGhlIG1vbm90b25lIHJlZ2lvbiBiZXR3ZWVuIHRoZW0gLS0gdGhlc2UgYXJlIGNhbGwg
ImFjdGl2ZSByZWdpb25zIgotKHNpbmNlIHRoZXkgYXJlIGNyb3NzZWQgYnkgdGhlIGN1cnJlbnQg
c3dlZXAgbGluZSkuCi0KLVRoZSBiYXNpYyBhbGdvcml0aG0gaXMgdG8gc3dlZXAgZnJvbSBsZWZ0
IHRvIHJpZ2h0LCBwcm9jZXNzaW5nIGVhY2gKLXZlcnRleC4gIFRoZSBwcm9jZXNzZWQgcG9ydGlv
biBvZiB0aGUgbWVzaCAobGVmdCBvZiB0aGUgc3dlZXAgbGluZSkgaXMKLWEgcGxhbmFyIGRlY29t
cG9zaXRpb24uICBBcyB3ZSBjcm9zcyBlYWNoIHZlcnRleCwgd2UgdXBkYXRlIHRoZSBtZXNoCi1h
bmQgdGhlIGVkZ2UgZGljdGlvbmFyeSwgdGhlbiB3ZSBjaGVjayBhbnkgbmV3bHkgYWRqYWNlbnQg
cGFpcnMgb2YKLWVkZ2VzIHRvIHNlZSBpZiB0aGV5IGludGVyc2VjdC4KLQotQSB2ZXJ0ZXggY2Fu
IGhhdmUgYW55IG51bWJlciBvZiBlZGdlcy4gIFZlcnRpY2VzIHdpdGggbWFueSBlZGdlcyBjYW4K
LWJlIGNyZWF0ZWQgYXMgdmVydGljZXMgYXJlIG1lcmdlZCBhbmQgaW50ZXJzZWN0aW9uIHBvaW50
cyBhcmUKLWNvbXB1dGVkLiAgRm9yIHVucHJvY2Vzc2VkIHZlcnRpY2VzIChyaWdodCBvZiB0aGUg
c3dlZXAgbGluZSksIHRoZXNlCi1lZGdlcyBhcmUgaW4gbm8gcGFydGljdWxhciBvcmRlciBhcm91
bmQgdGhlIHZlcnRleDsgZm9yIHByb2Nlc3NlZAotdmVydGljZXMsIHRoZSB0b3BvbG9naWNhbCBv
cmRlcmluZyBzaG91bGQgbWF0Y2ggdGhlIGdlb21ldHJpYyBvcmRlcmluZy4KLQotVGhlIHZlcnRl
eCBwcm9jZXNzaW5nIGhhcHBlbnMgaW4gdHdvIHBoYXNlczogZmlyc3Qgd2UgcHJvY2VzcyBhcmUg
dGhlCi1sZWZ0LWdvaW5nIGVkZ2VzIChhbGwgdGhlc2UgZWRnZXMgYXJlIGN1cnJlbnRseSBpbiB0
aGUgZWRnZQotZGljdGlvbmFyeSkuICBUaGlzIGludm9sdmVzOgotCi0gLSBkZWxldGluZyB0aGUg
bGVmdC1nb2luZyBlZGdlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5OwotIC0gcmVsaW5raW5nIHRoZSBt
ZXNoIGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWRnZXMgYXJvdW5k
Ci0gICB0aGUgZXZlbnQgdmVydGV4IG1hdGNoZXMgdGhlIG9yZGVyIGluIHRoZSBkaWN0aW9uYXJ5
OwotIC0gbWFya2luZyBhbnkgdGVybWluYXRlZCByZWdpb25zIChyZWdpb25zIHdoaWNoIGxpZSBi
ZXR3ZWVuIHR3byBsZWZ0LWdvaW5nCi0gICBlZGdlcykgYXMgZWl0aGVyICJpbnNpZGUiIG9yICJv
dXRzaWRlIiBhY2NvcmRpbmcgdG8gdGhlaXIgd2luZGluZyBudW1iZXIuCi0KLVdoZW4gdGhlcmUg
YXJlIG5vIGxlZnQtZ29pbmcgZWRnZXMsIGFuZCB0aGUgZXZlbnQgdmVydGV4IGlzIGluIGFuCi0i
aW50ZXJpb3IiIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGQgYW4gZWRnZSAodG8gc3BsaXQgdGhlIHJl
Z2lvbiBpbnRvCi1tb25vdG9uZSBwaWVjZXMpLiAgVG8gZG8gdGhpcyB3ZSBzaW1wbHkgam9pbiB0
aGUgZXZlbnQgdmVydGV4IHRvIHRoZQotcmlnaHRtb3N0IGxlZnQgZW5kcG9pbnQgb2YgdGhlIHVw
cGVyIG9yIGxvd2VyIGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcKLXJlZ2lvbi4KLQotVGhlbiB3ZSBw
cm9jZXNzIHRoZSByaWdodC1nb2luZyBlZGdlcy4gIFRoaXMgaW52b2x2ZXM6Ci0KLSAtIGluc2Vy
dGluZyB0aGUgZWRnZXMgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeTsKLSAtIGNvbXB1dGluZyB0aGUg
d2luZGluZyBudW1iZXIgb2YgYW55IG5ld2x5IGNyZWF0ZWQgYWN0aXZlIHJlZ2lvbnMuCi0gICBX
ZSBjYW4gY29tcHV0ZSB0aGlzIGluY3JlbWVudGFsbHkgdXNpbmcgdGhlIHdpbmRpbmcgb2YgZWFj
aCBlZGdlCi0gICB0aGF0IHdlIGNyb3NzIGFzIHdlIHdhbGsgdGhyb3VnaCB0aGUgZGljdGlvbmFy
eS4KLSAtIHJlbGlua2luZyB0aGUgbWVzaCBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIG9yZGVy
IG9mIHRoZXNlIGVkZ2VzIGFyb3VuZAotICAgdGhlIGV2ZW50IHZlcnRleCBtYXRjaGVzIHRoZSBv
cmRlciBpbiB0aGUgZGljdGlvbmFyeTsKLSAtIGNoZWNraW5nIGFueSBuZXdseSBhZGphY2VudCBl
ZGdlcyBmb3IgaW50ZXJzZWN0aW9uIGFuZC9vciBtZXJnaW5nLgotCi1JZiB0aGVyZSBhcmUgbm8g
cmlnaHQtZ29pbmcgZWRnZXMsIGFnYWluIHdlIG5lZWQgdG8gYWRkIG9uZSB0byBzcGxpdAotdGhl
IGNvbnRhaW5pbmcgcmVnaW9uIGludG8gbW9ub3RvbmUgcGllY2VzLiAgSW4gb3VyIGNhc2UgaXQg
aXMgbW9zdAotY29udmVuaWVudCB0byBhZGQgYW4gZWRnZSB0byB0aGUgbGVmdG1vc3QgcmlnaHQg
ZW5kcG9pbnQgb2YgZWl0aGVyCi1jb250YWluaW5nIGVkZ2U7IGhvd2V2ZXIgd2UgbWF5IG5lZWQg
dG8gY2hhbmdlIHRoaXMgbGF0ZXIgKHNlZSB0aGUKLWNvZGUgZm9yIGRldGFpbHMpLgotCi0KLUlu
dmFyaWFudHMKLS0tLS0tLS0tLS0KLQotVGhlc2UgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBpbnZh
cmlhbnRzIG1haW50YWluZWQgZHVyaW5nIHRoZSBzd2VlcC4KLVdlIGRlZmluZSBhIGZ1bmN0aW9u
IFZlcnRMZXEodjEsdjIpIHdoaWNoIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoCi12ZXJ0aWNl
cyBjcm9zcyB0aGUgc3dlZXAgbGluZSwgYW5kIGEgZnVuY3Rpb24gRWRnZUxlcShlMSxlMjsgbG9j
KQotd2hpY2ggc2F5cyB3aGV0aGVyIGUxIGlzIGJlbG93IGUyIGF0IHRoZSBzd2VlcCBldmVudCBs
b2NhdGlvbiAibG9jIi4KLVRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBvbmx5IGF0IHN3ZWVwIGV2
ZW50IGxvY2F0aW9ucyB3aGljaCBsaWUKLWJldHdlZW4gdGhlIHJpZ2h0bW9zdCBsZWZ0IGVuZHBv
aW50IG9mIHtlMSxlMn0sIGFuZCB0aGUgbGVmdG1vc3QgcmlnaHQKLWVuZHBvaW50IG9mIHtlMSxl
Mn0uCi0KLUludmFyaWFudHMgZm9yIHRoZSBFZGdlIERpY3Rpb25hcnkuCi0KLSAtIEVhY2ggcGFp
ciBvZiBhZGphY2VudCBlZGdlcyBlMj1TdWNjKGUxKSBzYXRpc2ZpZXMgRWRnZUxlcShlMSxlMikK
LSAgIGF0IGFueSB2YWxpZCBsb2NhdGlvbiBvZiB0aGUgc3dlZXAgZXZlbnQuCi0gLSBJZiBFZGdl
TGVxKGUyLGUxKSBhcyB3ZWxsIChhdCBhbnkgdmFsaWQgc3dlZXAgZXZlbnQpLCB0aGVuIGUxIGFu
ZCBlMgotICAgc2hhcmUgYSBjb21tb24gZW5kcG9pbnQuCi0gLSBGb3IgZWFjaCBlIGluIHRoZSBk
aWN0aW9uYXJ5LCBlLT5Ec3QgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ1dCBub3QgZS0+T3JnLgotIC0g
RWFjaCBlZGdlIGUgc2F0aXNmaWVzIFZlcnRMZXEoZS0+RHN0LGV2ZW50KSAmJiBWZXJ0TGVxKGV2
ZW50LGUtPk9yZykKLSAgIHdoZXJlICJldmVudCIgaXMgdGhlIGN1cnJlbnQgc3dlZXAgbGluZSBl
dmVudC4KLSAtIE5vIGVkZ2UgZSBoYXMgemVybyBsZW5ndGguCi0gLSBObyB0d28gZWRnZXMgaGF2
ZSBpZGVudGljYWwgbGVmdCBhbmQgcmlnaHQgZW5kcG9pbnRzLgotIAotSW52YXJpYW50cyBmb3Ig
dGhlIE1lc2ggKHRoZSBwcm9jZXNzZWQgcG9ydGlvbikuCi0KLSAtIFRoZSBwb3J0aW9uIG9mIHRo
ZSBtZXNoIGxlZnQgb2YgdGhlIHN3ZWVwIGxpbmUgaXMgYSBwbGFuYXIgZ3JhcGgsCi0gICBpZS4g
dGhlcmUgaXMgKnNvbWUqIHdheSB0byBlbWJlZCBpdCBpbiB0aGUgcGxhbmUuCi0gLSBObyBwcm9j
ZXNzZWQgZWRnZSBoYXMgemVybyBsZW5ndGguCi0gLSBObyB0d28gcHJvY2Vzc2VkIHZlcnRpY2Vz
IGhhdmUgaWRlbnRpY2FsIGNvb3JkaW5hdGVzLgotIC0gRWFjaCAiaW5zaWRlIiByZWdpb24gaXMg
bW9ub3RvbmUsIGllLiBjYW4gYmUgYnJva2VuIGludG8gdHdvIGNoYWlucwotICAgb2YgbW9ub3Rv
bmljYWxseSBpbmNyZWFzaW5nIHZlcnRpY2VzIGFjY29yZGluZyB0byBWZXJ0TGVxKHYxLHYyKQot
ICAgLSBhIG5vbi1pbnZhcmlhbnQ6IHRoZXNlIGNoYWlucyBtYXkgaW50ZXJzZWN0IChzbGlnaHRs
eSkgZHVlIHRvCi0gICAgIG51bWVyaWNhbCBlcnJvcnMsIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVj
dCB0aGUgYWxnb3JpdGhtJ3Mgb3BlcmF0aW9uLgotCi1JbnZhcmlhbnRzIGZvciB0aGUgU3dlZXAu
Ci0KLSAtIElmIGEgdmVydGV4IGhhcyBhbnkgbGVmdC1nb2luZyBlZGdlcywgdGhlbiB0aGVzZSBt
dXN0IGJlIGluIHRoZSBlZGdlCi0gICBkaWN0aW9uYXJ5IGF0IHRoZSB0aW1lIHRoZSB2ZXJ0ZXgg
aXMgcHJvY2Vzc2VkLgotIC0gSWYgYW4gZWRnZSBpcyBtYXJrZWQgImZpeFVwcGVyRWRnZSIgKGl0
IGlzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9kdWNlZAotICAgYnkgQ29ubmVjdFJpZ2h0VmVydGV4
KSwgdGhlbiBpdCBpcyB0aGUgb25seSByaWdodC1nb2luZyBlZGdlIGZyb20KLSAgIGl0cyBhc3Nv
Y2lhdGVkIHZlcnRleC4gIChUaGlzIHNheXMgdGhhdCB0aGVzZSBlZGdlcyBleGlzdCBvbmx5Ci0g
ICB3aGVuIGl0IGlzIG5lY2Vzc2FyeS4pCi0KLQotUm9idXN0bmVzcwotLS0tLS0tLS0tLQotCi1U
aGUga2V5IHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBhbGdvcml0aG0gaXMgbWFpbnRhaW5pbmcg
dGhlCi1pbnZhcmlhbnRzIGFib3ZlLCBlc3BlY2lhbGx5IHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9m
IHRoZSBlZGdlCi1kaWN0aW9uYXJ5LiAgV2UgYWNoaWV2ZSB0aGlzIGJ5OgotCi0gIDEuIFdyaXRp
bmcgdGhlIG51bWVyaWNhbCBjb21wdXRhdGlvbnMgZm9yIG1heGltdW0gcHJlY2lzaW9uIHJhdGhl
cgotICAgICB0aGFuIG1heGltdW0gc3BlZWQuCi0gICAgIAotICAyLiBNYWtpbmcgbm8gYXNzdW1w
dGlvbnMgYXQgYWxsIGFib3V0IHRoZSByZXN1bHRzIG9mIHRoZSBlZGdlCi0gICAgIGludGVyc2Vj
dGlvbiBjYWxjdWxhdGlvbnMgLS0gZm9yIHN1ZmZpY2llbnRseSBkZWdlbmVyYXRlIGlucHV0cywK
LSAgICAgdGhlIGNvbXB1dGVkIGxvY2F0aW9uIGlzIG5vdCBtdWNoIGJldHRlciB0aGFuIGEgcmFu
ZG9tIG51bWJlci4KLSAgICAgCi0gIDMuIFdoZW4gbnVtZXJpY2FsIGVycm9ycyB2aW9sYXRlIHRo
ZSBpbnZhcmlhbnRzLCByZXN0b3JlIHRoZW0KLSAgICAgYnkgbWFraW5nICp0b3BvbG9naWNhbCog
Y2hhbmdlcyB3aGVuIG5lY2Vzc2FyeSAoaWUuIHJlbGlua2luZwotICAgICB0aGUgbWVzaCBzdHJ1
Y3R1cmUpLgotICAgICAKLSAgICAgCi1Ucmlhbmd1bGF0aW9uIGFuZCBHcm91cGluZwotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2UgZmluaXNoIHRoZSBsaW5lIHN3ZWVwIGJlZm9yZSBk
b2luZyBhbnkgdHJpYW5ndWxhdGlvbi4gIFRoaXMgaXMKLWJlY2F1c2UgZXZlbiBhZnRlciBhIG1v
bm90b25lIHJlZ2lvbiBpcyBjb21wbGV0ZSwgdGhlcmUgY2FuIGJlIGZ1cnRoZXIKLWNoYW5nZXMg
dG8gaXRzIHZlcnRleCBkYXRhIGJlY2F1c2Ugb2YgZnVydGhlciB2ZXJ0ZXggbWVyZ2luZy4KLQot
QWZ0ZXIgdHJpYW5ndWxhdGluZyBhbGwgbW9ub3RvbmUgcmVnaW9ucywgd2Ugd2FudCB0byBncm91
cCB0aGUKLXRyaWFuZ2xlcyBpbnRvIGZhbnMgYW5kIHN0cmlwcy4gIFdlIGRvIHRoaXMgdXNpbmcg
YSBncmVlZHkgYXBwcm9hY2guCi1UaGUgdHJpYW5ndWxhdGlvbiBpdHNlbGYgaXMgbm90IG9wdGlt
aXplZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZgotcHJpbWl0aXZlczsgd2UganVzdCB0cnkgdG8g
Z2V0IGEgcmVhc29uYWJsZSBkZWNvbXBvc2l0aW9uIG9mIHRoZQotY29tcHV0ZWQgdHJpYW5ndWxh
dGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC1s
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9kaWN0LWxpc3QuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNyArMCww
IEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBw
b3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRp
dmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNl
bnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMK
LSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5z
ZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBh
dCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiog
QW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0
OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90
ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBM
SUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywg
V0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElU
SU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZP
UiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0q
KiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBs
ZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAs
IGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBD
b3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBp
bmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAK
LSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFt
bWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0
aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVt
OiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwg
MTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJz
aW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdy
YXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVs
ZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNp
bmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiog
cHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVk
IGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEg
U3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAx
OTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4v
Z2Z4L2xpYi9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19kaWN0
X2xpc3RfaF8KLSNkZWZpbmUgX19kaWN0X2xpc3RfaF8KLQotLyogVXNlICNkZWZpbmUncyBzbyB0
aGF0IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNk
ZWZpbmUgRGljdEtleQkJRGljdExpc3RLZXkKLSNkZWZpbmUgRGljdAkJRGljdExpc3QKLSNkZWZp
bmUgRGljdE5vZGUJRGljdExpc3ROb2RlCi0KLSNkZWZpbmUgZGljdE5ld0RpY3QoZnJhbWUsbGVx
KQkJX19nbF9kaWN0TGlzdE5ld0RpY3QoZnJhbWUsbGVxKQotI2RlZmluZSBkaWN0RGVsZXRlRGlj
dChkaWN0KQkJX19nbF9kaWN0TGlzdERlbGV0ZURpY3QoZGljdCkKLQotI2RlZmluZSBkaWN0U2Vh
cmNoKGRpY3Qsa2V5KQkJX19nbF9kaWN0TGlzdFNlYXJjaChkaWN0LGtleSkKLSNkZWZpbmUgZGlj
dEluc2VydChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RJbnNlcnQoZGljdCxrZXkpCi0jZGVmaW5l
IGRpY3RJbnNlcnRCZWZvcmUoZGljdCxub2RlLGtleSkJX19nbF9kaWN0TGlzdEluc2VydEJlZm9y
ZShkaWN0LG5vZGUsa2V5KQotI2RlZmluZSBkaWN0RGVsZXRlKGRpY3Qsbm9kZSkJCV9fZ2xfZGlj
dExpc3REZWxldGUoZGljdCxub2RlKQotCi0jZGVmaW5lIGRpY3RLZXkobikJCQlfX2dsX2RpY3RM
aXN0S2V5KG4pCi0jZGVmaW5lIGRpY3RTdWNjKG4pCQkJX19nbF9kaWN0TGlzdFN1Y2MobikKLSNk
ZWZpbmUgZGljdFByZWQobikJCQlfX2dsX2RpY3RMaXN0UHJlZChuKQotI2RlZmluZSBkaWN0TWlu
KGQpCQkJX19nbF9kaWN0TGlzdE1pbihkKQotI2RlZmluZSBkaWN0TWF4KGQpCQkJX19nbF9kaWN0
TGlzdE1heChkKQotCi0KLQotdHlwZWRlZiB2b2lkICpEaWN0S2V5OwotdHlwZWRlZiBzdHJ1Y3Qg
RGljdCBEaWN0OwotdHlwZWRlZiBzdHJ1Y3QgRGljdE5vZGUgRGljdE5vZGU7Ci0KLURpY3QJCSpk
aWN0TmV3RGljdCgKLQkJCXZvaWQgKmZyYW1lLAotCQkJaW50ICgqbGVxKSh2b2lkICpmcmFtZSwg
RGljdEtleSBrZXkxLCBEaWN0S2V5IGtleTIpICk7Ci0JCQkKLXZvaWQJCWRpY3REZWxldGVEaWN0
KCBEaWN0ICpkaWN0ICk7Ci0KLS8qIFNlYXJjaCByZXR1cm5zIHRoZSBub2RlIHdpdGggdGhlIHNt
YWxsZXN0IGtleSBncmVhdGVyIHRoYW4gb3IgZXF1YWwKLSAqIHRvIHRoZSBnaXZlbiBrZXkuICBJ
ZiB0aGVyZSBpcyBubyBzdWNoIGtleSwgcmV0dXJucyBhIG5vZGUgd2hvc2UKLSAqIGtleSBpcyBO
VUxMLiAgU2ltaWxhcmx5LCBTdWNjKE1heChkKSkgaGFzIGEgTlVMTCBrZXksIGV0Yy4KLSAqLwot
RGljdE5vZGUJKmRpY3RTZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICk7Ci1EaWN0Tm9k
ZQkqZGljdEluc2VydEJlZm9yZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUsIERpY3RLZXkg
a2V5ICk7Ci12b2lkCQlkaWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApOwot
Ci0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0S2V5KG4pCSgobiktPmtleSkKLSNkZWZpbmUJCV9fZ2xf
ZGljdExpc3RTdWNjKG4pCSgobiktPm5leHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0UHJlZChu
KQkoKG4pLT5wcmV2KQotI2RlZmluZQkJX19nbF9kaWN0TGlzdE1pbihkKQkoKGQpLT5oZWFkLm5l
eHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0TWF4KGQpCSgoZCktPmhlYWQucHJldikKLSNkZWZp
bmUJICAgICAgIF9fZ2xfZGljdExpc3RJbnNlcnQoZCxrKSAoZGljdEluc2VydEJlZm9yZSgoZCks
JihkKS0+aGVhZCwoaykpKQotCi0KLS8qKiogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKioqLwot
Ci1zdHJ1Y3QgRGljdE5vZGUgewotICBEaWN0S2V5CWtleTsKLSAgRGljdE5vZGUJKm5leHQ7Ci0g
IERpY3ROb2RlCSpwcmV2OwotfTsKLQotc3RydWN0IERpY3QgewotICBEaWN0Tm9kZQloZWFkOwot
ICB2b2lkCQkqZnJhbWU7Ci0gIGludAkJKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEs
IERpY3RLZXkga2V5Mik7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDExNyArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhl
IGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4g
YWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0
d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUg
TGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywg
MTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEz
NTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoq
IAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNT
IEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElO
Q0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAot
KiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBG
SVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5U
LgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkg
MjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3Jp
Z2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGll
cyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlv
biBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVu
Y3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiog
QXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJy
YXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3Bl
bkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24g
MS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNy
ZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRh
dGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5
IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFj
aCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2Rl
cG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9kaWN0LmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8
c3RkZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCIK
LSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0KLS8qIHJlYWxs
eSBfX2dsX2RpY3RMaXN0TmV3RGljdCAqLwotRGljdCAqZGljdE5ld0RpY3QoIHZvaWQgKmZyYW1l
LAotCQkgICBpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERpY3RLZXkga2V5
MikgKQotewotICBEaWN0ICpkaWN0ID0gKERpY3QgKikgbWVtQWxsb2MoIHNpemVvZiggRGljdCAp
KTsKLSAgRGljdE5vZGUgKmhlYWQ7Ci0KLSAgaWYgKGRpY3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7
Ci0KLSAgaGVhZCA9ICZkaWN0LT5oZWFkOwotCi0gIGhlYWQtPmtleSA9IE5VTEw7Ci0gIGhlYWQt
Pm5leHQgPSBoZWFkOwotICBoZWFkLT5wcmV2ID0gaGVhZDsKLQotICBkaWN0LT5mcmFtZSA9IGZy
YW1lOwotICBkaWN0LT5sZXEgPSBsZXE7Ci0KLSAgcmV0dXJuIGRpY3Q7Ci19Ci0KLS8qIHJlYWxs
eSBfX2dsX2RpY3RMaXN0RGVsZXRlRGljdCAqLwotdm9pZCBkaWN0RGVsZXRlRGljdCggRGljdCAq
ZGljdCApCi17Ci0gIERpY3ROb2RlICpub2RlOwotCi0gIGZvciggbm9kZSA9IGRpY3QtPmhlYWQu
bmV4dDsgbm9kZSAhPSAmZGljdC0+aGVhZDsgbm9kZSA9IG5vZGUtPm5leHQgKSB7Ci0gICAgbWVt
RnJlZSggbm9kZSApOwotICB9Ci0gIG1lbUZyZWUoIGRpY3QgKTsKLX0KLQotLyogcmVhbGx5IF9f
Z2xfZGljdExpc3RJbnNlcnRCZWZvcmUgKi8KLURpY3ROb2RlICpkaWN0SW5zZXJ0QmVmb3JlKCBE
aWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBrZXkgKQotewotICBEaWN0Tm9kZSAq
bmV3Tm9kZTsKLQotICBkbyB7Ci0gICAgbm9kZSA9IG5vZGUtPnByZXY7Ci0gIH0gd2hpbGUoIG5v
ZGUtPmtleSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3QtPmZyYW1lLCBub2RlLT5rZXks
IGtleSkpOwotCi0gIG5ld05vZGUgPSAoRGljdE5vZGUgKikgbWVtQWxsb2MoIHNpemVvZiggRGlj
dE5vZGUgKSk7Ci0gIGlmIChuZXdOb2RlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIG5ld05v
ZGUtPmtleSA9IGtleTsKLSAgbmV3Tm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0gIG5vZGUtPm5l
eHQtPnByZXYgPSBuZXdOb2RlOwotICBuZXdOb2RlLT5wcmV2ID0gbm9kZTsKLSAgbm9kZS0+bmV4
dCA9IG5ld05vZGU7Ci0KLSAgcmV0dXJuIG5ld05vZGU7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX2Rp
Y3RMaXN0RGVsZXRlICovCi12b2lkIGRpY3REZWxldGUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpu
b2RlICkgLypBUkdTVVNFRCovCi17Ci0gIG5vZGUtPm5leHQtPnByZXYgPSBub2RlLT5wcmV2Owot
ICBub2RlLT5wcmV2LT5uZXh0ID0gbm9kZS0+bmV4dDsKLSAgbWVtRnJlZSggbm9kZSApOwotfQot
Ci0vKiByZWFsbHkgX19nbF9kaWN0TGlzdFNlYXJjaCAqLwotRGljdE5vZGUgKmRpY3RTZWFyY2go
IERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICkKLXsKLSAgRGljdE5vZGUgKm5vZGUgPSAmZGljdC0+
aGVhZDsKLQotICBkbyB7Ci0gICAgbm9kZSA9IG5vZGUtPm5leHQ7Ci0gIH0gd2hpbGUoIG5vZGUt
PmtleSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3QtPmZyYW1lLCBrZXksIG5vZGUtPmtl
eSkpOwotCi0gIHJldHVybiBub2RlOwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9kaWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA3
ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0
ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRl
cm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJl
IExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2Yg
dGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNl
bnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAw
Ci0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwg
b3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0q
KiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5E
IElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVE
SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBD
T05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5F
U1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0q
KiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxl
IEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwg
MjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4K
LSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlz
IGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHBy
b2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlv
biB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBT
eXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJp
bCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkg
KFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0wo
UikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMp
LCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRl
ZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9u
Ci0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVy
aWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBK
dWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3Qv
bWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL2RpY3QuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19kaWN0
X2xpc3RfaF8KLSNkZWZpbmUgX19kaWN0X2xpc3RfaF8KLQotLyogVXNlICNkZWZpbmUncyBzbyB0
aGF0IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNk
ZWZpbmUgRGljdEtleQkJRGljdExpc3RLZXkKLSNkZWZpbmUgRGljdAkJRGljdExpc3QKLSNkZWZp
bmUgRGljdE5vZGUJRGljdExpc3ROb2RlCi0KLSNkZWZpbmUgZGljdE5ld0RpY3QoZnJhbWUsbGVx
KQkJX19nbF9kaWN0TGlzdE5ld0RpY3QoZnJhbWUsbGVxKQotI2RlZmluZSBkaWN0RGVsZXRlRGlj
dChkaWN0KQkJX19nbF9kaWN0TGlzdERlbGV0ZURpY3QoZGljdCkKLQotI2RlZmluZSBkaWN0U2Vh
cmNoKGRpY3Qsa2V5KQkJX19nbF9kaWN0TGlzdFNlYXJjaChkaWN0LGtleSkKLSNkZWZpbmUgZGlj
dEluc2VydChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RJbnNlcnQoZGljdCxrZXkpCi0jZGVmaW5l
IGRpY3RJbnNlcnRCZWZvcmUoZGljdCxub2RlLGtleSkJX19nbF9kaWN0TGlzdEluc2VydEJlZm9y
ZShkaWN0LG5vZGUsa2V5KQotI2RlZmluZSBkaWN0RGVsZXRlKGRpY3Qsbm9kZSkJCV9fZ2xfZGlj
dExpc3REZWxldGUoZGljdCxub2RlKQotCi0jZGVmaW5lIGRpY3RLZXkobikJCQlfX2dsX2RpY3RM
aXN0S2V5KG4pCi0jZGVmaW5lIGRpY3RTdWNjKG4pCQkJX19nbF9kaWN0TGlzdFN1Y2MobikKLSNk
ZWZpbmUgZGljdFByZWQobikJCQlfX2dsX2RpY3RMaXN0UHJlZChuKQotI2RlZmluZSBkaWN0TWlu
KGQpCQkJX19nbF9kaWN0TGlzdE1pbihkKQotI2RlZmluZSBkaWN0TWF4KGQpCQkJX19nbF9kaWN0
TGlzdE1heChkKQotCi0KLQotdHlwZWRlZiB2b2lkICpEaWN0S2V5OwotdHlwZWRlZiBzdHJ1Y3Qg
RGljdCBEaWN0OwotdHlwZWRlZiBzdHJ1Y3QgRGljdE5vZGUgRGljdE5vZGU7Ci0KLURpY3QJCSpk
aWN0TmV3RGljdCgKLQkJCXZvaWQgKmZyYW1lLAotCQkJaW50ICgqbGVxKSh2b2lkICpmcmFtZSwg
RGljdEtleSBrZXkxLCBEaWN0S2V5IGtleTIpICk7Ci0JCQkKLXZvaWQJCWRpY3REZWxldGVEaWN0
KCBEaWN0ICpkaWN0ICk7Ci0KLS8qIFNlYXJjaCByZXR1cm5zIHRoZSBub2RlIHdpdGggdGhlIHNt
YWxsZXN0IGtleSBncmVhdGVyIHRoYW4gb3IgZXF1YWwKLSAqIHRvIHRoZSBnaXZlbiBrZXkuICBJ
ZiB0aGVyZSBpcyBubyBzdWNoIGtleSwgcmV0dXJucyBhIG5vZGUgd2hvc2UKLSAqIGtleSBpcyBO
VUxMLiAgU2ltaWxhcmx5LCBTdWNjKE1heChkKSkgaGFzIGEgTlVMTCBrZXksIGV0Yy4KLSAqLwot
RGljdE5vZGUJKmRpY3RTZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICk7Ci1EaWN0Tm9k
ZQkqZGljdEluc2VydEJlZm9yZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUsIERpY3RLZXkg
a2V5ICk7Ci12b2lkCQlkaWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApOwot
Ci0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0S2V5KG4pCSgobiktPmtleSkKLSNkZWZpbmUJCV9fZ2xf
ZGljdExpc3RTdWNjKG4pCSgobiktPm5leHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0UHJlZChu
KQkoKG4pLT5wcmV2KQotI2RlZmluZQkJX19nbF9kaWN0TGlzdE1pbihkKQkoKGQpLT5oZWFkLm5l
eHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0TWF4KGQpCSgoZCktPmhlYWQucHJldikKLSNkZWZp
bmUJICAgICAgIF9fZ2xfZGljdExpc3RJbnNlcnQoZCxrKSAoZGljdEluc2VydEJlZm9yZSgoZCks
JihkKS0+aGVhZCwoaykpKQotCi0KLS8qKiogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKioqLwot
Ci1zdHJ1Y3QgRGljdE5vZGUgewotICBEaWN0S2V5CWtleTsKLSAgRGljdE5vZGUJKm5leHQ7Ci0g
IERpY3ROb2RlCSpwcmV2OwotfTsKLQotc3RydWN0IERpY3QgewotICBEaWN0Tm9kZQloZWFkOwot
ICB2b2lkCQkqZnJhbWU7Ci0gIGludAkJKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEs
IERpY3RLZXkga2V5Mik7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI3MSArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhl
IGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4g
YWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0
d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUg
TGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywg
MTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEz
NTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoq
IAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNT
IEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElO
Q0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAot
KiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBG
SVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5U
LgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkg
MjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3Jp
Z2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGll
cyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlv
biBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVu
Y3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiog
QXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJy
YXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3Bl
bkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24g
MS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNy
ZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRh
dGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5
IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFj
aCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2Rl
cG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9nZW9tLmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNpbmNsdWRlICJ0
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL2dlb20uaCIKLQotaW50IF9fZ2xfdmVydExlcSggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0
ZXggKnYgKQotewotICAvKiBSZXR1cm5zIFRSVUUgaWYgdSBpcyBsZXhpY29ncmFwaGljYWxseSA8
PSB2LiAqLwotCi0gIHJldHVybiBWZXJ0TGVxKCB1LCB2ICk7Ci19Ci0KLUdMZG91YmxlIF9fZ2xf
ZWRnZUV2YWwoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQotewot
ICAvKiBHaXZlbiB0aHJlZSB2ZXJ0aWNlcyB1LHYsdyBzdWNoIHRoYXQgVmVydExlcSh1LHYpICYm
IFZlcnRMZXEodix3KSwKLSAgICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdlIHV3
IGF0IHRoZSBzLWNvb3JkIG9mIHRoZSB2ZXJ0ZXggdi4KLSAgICogUmV0dXJucyB2LT50IC0gKHV3
KSh2LT5zKSwgaWUuIHRoZSBzaWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgotICAgKiBJZiB1
dyBpcyB2ZXJ0aWNhbCAoYW5kIHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMgemVy
by4KLSAgICoKLSAgICogVGhlIGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBhbmQg
c3RhYmxlLCBldmVuIHdoZW4gdgotICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIEluIHBh
cnRpY3VsYXIgaWYgd2Ugc2V0IHYtPnQgPSAwIGFuZAotICAgKiBsZXQgciBiZSB0aGUgbmVnYXRl
ZCByZXN1bHQgKHRoaXMgZXZhbHVhdGVzICh1dykodi0+cykpLCB0aGVuCi0gICAqIHIgaXMgZ3Vh
cmFudGVlZCB0byBzYXRpc2Z5IE1JTih1LT50LHctPnQpIDw9IHIgPD0gTUFYKHUtPnQsdy0+dCku
Ci0gICAqLwotICBHTGRvdWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVmVydExlcSggdSwg
diApICYmIFZlcnRMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+cyAtIHUtPnM7Ci0gIGdh
cFIgPSB3LT5zIC0gdi0+czsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewotICAgIGlmKCBn
YXBMIDwgZ2FwUiApIHsKLSAgICAgIHJldHVybiAodi0+dCAtIHUtPnQpICsgKHUtPnQgLSB3LT50
KSAqIChnYXBMIC8gKGdhcEwgKyBnYXBSKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAo
di0+dCAtIHctPnQpICsgKHctPnQgLSB1LT50KSAqIChnYXBSIC8gKGdhcEwgKyBnYXBSKSk7Ci0g
ICAgfQotICB9Ci0gIC8qIHZlcnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLUdMZG91
YmxlIF9fZ2xfZWRnZVNpZ24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXgg
KncgKQotewotICAvKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBFZGdlRXZh
bCh1LHYsdykgYnV0IHdoaWNoCi0gICAqIGlzIGNoZWFwZXIgdG8gZXZhbHVhdGUuICBSZXR1cm5z
ID4gMCwgPT0gMCAsIG9yIDwgMAotICAgKiBhcyB2IGlzIGFib3ZlLCBvbiwgb3IgYmVsb3cgdGhl
IGVkZ2UgdXcuCi0gICAqLwotICBHTGRvdWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVmVy
dExlcSggdSwgdiApICYmIFZlcnRMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+cyAtIHUt
PnM7Ci0gIGdhcFIgPSB3LT5zIC0gdi0+czsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewot
ICAgIHJldHVybiAodi0+dCAtIHctPnQpICogZ2FwTCArICh2LT50IC0gdS0+dCkgKiBnYXBSOwot
ICB9Ci0gIC8qIHZlcnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0gKiBEZWZpbmUgdmVyc2lvbnMgb2YgRWRnZVNpZ24sIEVkZ2VFdmFsIHdpdGggcyBh
bmQgdCB0cmFuc3Bvc2VkLgotICovCi0KLUdMZG91YmxlIF9fZ2xfdHJhbnNFdmFsKCBHTFV2ZXJ0
ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICkKLXsKLSAgLyogR2l2ZW4gdGhyZWUg
dmVydGljZXMgdSx2LHcgc3VjaCB0aGF0IFRyYW5zTGVxKHUsdikgJiYgVHJhbnNMZXEodix3KSwK
LSAgICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdlIHV3IGF0IHRoZSBzLWNvb3Jk
IG9mIHRoZSB2ZXJ0ZXggdi4KLSAgICogUmV0dXJucyB2LT5zIC0gKHV3KSh2LT50KSwgaWUuIHRo
ZSBzaWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgotICAgKiBJZiB1dyBpcyB2ZXJ0aWNhbCAo
YW5kIHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMgemVyby4KLSAgICoKLSAgICog
VGhlIGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBhbmQgc3RhYmxlLCBldmVuIHdo
ZW4gdgotICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIEluIHBhcnRpY3VsYXIgaWYgd2Ug
c2V0IHYtPnMgPSAwIGFuZAotICAgKiBsZXQgciBiZSB0aGUgbmVnYXRlZCByZXN1bHQgKHRoaXMg
ZXZhbHVhdGVzICh1dykodi0+dCkpLCB0aGVuCi0gICAqIHIgaXMgZ3VhcmFudGVlZCB0byBzYXRp
c2Z5IE1JTih1LT5zLHctPnMpIDw9IHIgPD0gTUFYKHUtPnMsdy0+cykuCi0gICAqLwotICBHTGRv
dWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVHJhbnNMZXEoIHUsIHYgKSAmJiBUcmFuc0xl
cSggdiwgdyApKTsKLSAgCi0gIGdhcEwgPSB2LT50IC0gdS0+dDsKLSAgZ2FwUiA9IHctPnQgLSB2
LT50OwotCi0gIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7Ci0gICAgaWYoIGdhcEwgPCBnYXBSICkg
ewotICAgICAgcmV0dXJuICh2LT5zIC0gdS0+cykgKyAodS0+cyAtIHctPnMpICogKGdhcEwgLyAo
Z2FwTCArIGdhcFIpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuICh2LT5zIC0gdy0+cykg
KyAody0+cyAtIHUtPnMpICogKGdhcFIgLyAoZ2FwTCArIGdhcFIpKTsKLSAgICB9Ci0gIH0KLSAg
LyogdmVydGljYWwgbGluZSAqLwotICByZXR1cm4gMDsKLX0KLQotR0xkb3VibGUgX19nbF90cmFu
c1NpZ24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQotewotICAv
KiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBUcmFuc0V2YWwodSx2LHcpIGJ1
dCB3aGljaAotICAgKiBpcyBjaGVhcGVyIHRvIGV2YWx1YXRlLiAgUmV0dXJucyA+IDAsID09IDAg
LCBvciA8IDAKLSAgICogYXMgdiBpcyBhYm92ZSwgb24sIG9yIGJlbG93IHRoZSBlZGdlIHV3Lgot
ICAgKi8KLSAgR0xkb3VibGUgZ2FwTCwgZ2FwUjsKLQotICBhc3NlcnQoIFRyYW5zTGVxKCB1LCB2
ICkgJiYgVHJhbnNMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+dCAtIHUtPnQ7Ci0gIGdh
cFIgPSB3LT50IC0gdi0+dDsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewotICAgIHJldHVy
biAodi0+cyAtIHctPnMpICogZ2FwTCArICh2LT5zIC0gdS0+cykgKiBnYXBSOwotICB9Ci0gIC8q
IHZlcnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotaW50IF9fZ2xfdmVydENDVygg
R0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApCi17Ci0gIC8qIEZvciBh
bG1vc3QtZGVnZW5lcmF0ZSBzaXR1YXRpb25zLCB0aGUgcmVzdWx0cyBhcmUgbm90IHJlbGlhYmxl
LgotICAgKiBVbmxlc3MgdGhlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgY2FuIGJlIHBlcmZv
cm1lZCB3aXRob3V0Ci0gICAqIHJvdW5kaW5nIGVycm9ycywgKmFueSogaW1wbGVtZW50YXRpb24g
d2lsbCBnaXZlIGluY29ycmVjdCByZXN1bHRzCi0gICAqIG9uIHNvbWUgZGVnZW5lcmF0ZSBpbnB1
dHMsIHNvIHRoZSBjbGllbnQgbXVzdCBoYXZlIHNvbWUgd2F5IHRvCi0gICAqIGhhbmRsZSB0aGlz
IHNpdHVhdGlvbi4KLSAgICovCi0gIHJldHVybiAodS0+cyoodi0+dCAtIHctPnQpICsgdi0+cyoo
dy0+dCAtIHUtPnQpICsgdy0+cyoodS0+dCAtIHYtPnQpKSA+PSAwOwotfQotCi0vKiBHaXZlbiBw
YXJhbWV0ZXJzIGEseCxiLHkgcmV0dXJucyB0aGUgdmFsdWUgKGIqeCthKnkpLyhhK2IpLAotICog
b3IgKHgreSkvMiBpZiBhPT1iPT0wLiAgSXQgcmVxdWlyZXMgdGhhdCBhLGIgPj0gMCwgYW5kIGVu
Zm9yY2VzCi0gKiB0aGlzIGluIHRoZSByYXJlIGNhc2UgdGhhdCBvbmUgYXJndW1lbnQgaXMgc2xp
Z2h0bHkgbmVnYXRpdmUuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZXh0cmVtZWx5IHN0YWJs
ZSBudW1lcmljYWxseS4KLSAqIEluIHBhcnRpY3VsYXIgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBy
ZXN1bHQgciBzYXRpc2ZpZXMKLSAqIE1JTih4LHkpIDw9IHIgPD0gTUFYKHgseSksIGFuZCB0aGUg
cmVzdWx0cyBhcmUgdmVyeSBhY2N1cmF0ZQotICogZXZlbiB3aGVuIGEgYW5kIGIgZGlmZmVyIGdy
ZWF0bHkgaW4gbWFnbml0dWRlLgotICovCi0jZGVmaW5lIFJlYWxJbnRlcnBvbGF0ZShhLHgsYix5
KQkJCVwKLSAgKGEgPSAoYSA8IDApID8gMCA6IGEsIGIgPSAoYiA8IDApID8gMCA6IGIsCQlcCi0g
ICgoYSA8PSBiKSA/ICgoYiA9PSAwKSA/ICgoeCt5KSAvIDIpCQkJXAotICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoeCArICh5LXgpICogKGEvKGErYikpKSkJXAotICAgICAgICAgICAgOiAoeSAr
ICh4LXkpICogKGIvKGErYikpKSkpCi0KLSNpZm5kZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JBTQot
I2RlZmluZSBJbnRlcnBvbGF0ZShhLHgsYix5KQlSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSkKLSNl
bHNlCi0KLS8qIENsYWltOiB0aGUgT05MWSBwcm9wZXJ0eSB0aGUgc3dlZXAgYWxnb3JpdGhtIHJl
bGllcyBvbiBpcyB0aGF0Ci0gKiBNSU4oeCx5KSA8PSByIDw9IE1BWCh4LHkpLiAgVGhpcyBpcyBh
IG5hc3R5IHdheSB0byB0ZXN0IHRoYXQuCi0gKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWV4dGVy
biBpbnQgUmFuZG9tSW50ZXJwb2xhdGU7Ci0KLUdMZG91YmxlIEludGVycG9sYXRlKCBHTGRvdWJs
ZSBhLCBHTGRvdWJsZSB4LCBHTGRvdWJsZSBiLCBHTGRvdWJsZSB5KQotewotcHJpbnRmKCIqKioq
KioqKioqKioqKioqKioqKiolZFxuIixSYW5kb21JbnRlcnBvbGF0ZSk7Ci0gIGlmKCBSYW5kb21J
bnRlcnBvbGF0ZSApIHsKLSAgICBhID0gMS4yICogZHJhbmQ0OCgpIC0gMC4xOwotICAgIGEgPSAo
YSA8IDApID8gMCA6ICgoYSA+IDEpID8gMSA6IGEpOwotICAgIGIgPSAxLjAgLSBhOwotICB9Ci0g
IHJldHVybiBSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSk7Ci19Ci0KLSNlbmRpZgotCi0jZGVmaW5l
IFN3YXAoYSxiKQlkbyB7IEdMVXZlcnRleCAqdCA9IGE7IGEgPSBiOyBiID0gdDsgfSB3aGlsZSgw
KQotCi12b2lkIF9fZ2xfZWRnZUludGVyc2VjdCggR0xVdmVydGV4ICpvMSwgR0xVdmVydGV4ICpk
MSwKLQkJCSBHTFV2ZXJ0ZXggKm8yLCBHTFV2ZXJ0ZXggKmQyLAotCQkJIEdMVXZlcnRleCAqdiAp
Ci0vKiBHaXZlbiBlZGdlcyAobzEsZDEpIGFuZCAobzIsZDIpLCBjb21wdXRlIHRoZWlyIHBvaW50
IG9mIGludGVyc2VjdGlvbi4KLSAqIFRoZSBjb21wdXRlZCBwb2ludCBpcyBndWFyYW50ZWVkIHRv
IGxpZSBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQotICogYm91bmRpbmcgcmVjdGFuZ2xlcyBk
ZWZpbmVkIGJ5IGVhY2ggZWRnZS4KLSAqLwotewotICBHTGRvdWJsZSB6MSwgejI7Ci0KLSAgLyog
VGhpcyBpcyBjZXJ0YWlubHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUg
aW50ZXJzZWN0aW9uCi0gICAqIG9mIHR3byBsaW5lIHNlZ21lbnRzLCBidXQgaXQgaXMgdmVyeSBu
dW1lcmljYWxseSBzdGFibGUuCi0gICAqCi0gICAqIFN0cmF0ZWd5OiBmaW5kIHRoZSB0d28gbWlk
ZGxlIHZlcnRpY2VzIGluIHRoZSBWZXJ0TGVxIG9yZGVyaW5nLAotICAgKiBhbmQgaW50ZXJwb2xh
dGUgdGhlIGludGVyc2VjdGlvbiBzLXZhbHVlIGZyb20gdGhlc2UuICBUaGVuIHJlcGVhdAotICAg
KiB1c2luZyB0aGUgVHJhbnNMZXEgb3JkZXJpbmcgdG8gZmluZCB0aGUgaW50ZXJzZWN0aW9uIHQt
dmFsdWUuCi0gICAqLwotCi0gIGlmKCAhIFZlcnRMZXEoIG8xLCBkMSApKSB7IFN3YXAoIG8xLCBk
MSApOyB9Ci0gIGlmKCAhIFZlcnRMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9Ci0g
IGlmKCAhIFZlcnRMZXEoIG8xLCBvMiApKSB7IFN3YXAoIG8xLCBvMiApOyBTd2FwKCBkMSwgZDIg
KTsgfQotCi0gIGlmKCAhIFZlcnRMZXEoIG8yLCBkMSApKSB7Ci0gICAgLyogVGVjaG5pY2FsbHks
IG5vIGludGVyc2VjdGlvbiAtLSBkbyBvdXIgYmVzdCAqLwotICAgIHYtPnMgPSAobzItPnMgKyBk
MS0+cykgLyAyOwotICB9IGVsc2UgaWYoIFZlcnRMZXEoIGQxLCBkMiApKSB7Ci0gICAgLyogSW50
ZXJwb2xhdGUgYmV0d2VlbiBvMiBhbmQgZDEgKi8KLSAgICB6MSA9IEVkZ2VFdmFsKCBvMSwgbzIs
IGQxICk7Ci0gICAgejIgPSBFZGdlRXZhbCggbzIsIGQxLCBkMiApOwotICAgIGlmKCB6MSt6MiA8
IDAgKSB7IHoxID0gLXoxOyB6MiA9IC16MjsgfQotICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSggejEs
IG8yLT5zLCB6MiwgZDEtPnMgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJbnRlcnBvbGF0ZSBiZXR3
ZWVuIG8yIGFuZCBkMiAqLwotICAgIHoxID0gRWRnZVNpZ24oIG8xLCBvMiwgZDEgKTsKLSAgICB6
MiA9IC1FZGdlU2lnbiggbzEsIGQyLCBkMSApOwotICAgIGlmKCB6MSt6MiA8IDAgKSB7IHoxID0g
LXoxOyB6MiA9IC16MjsgfQotICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSggejEsIG8yLT5zLCB6Miwg
ZDItPnMgKTsKLSAgfQotCi0gIC8qIE5vdyByZXBlYXQgdGhlIHByb2Nlc3MgZm9yIHQgKi8KLQot
ICBpZiggISBUcmFuc0xlcSggbzEsIGQxICkpIHsgU3dhcCggbzEsIGQxICk7IH0KLSAgaWYoICEg
VHJhbnNMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9Ci0gIGlmKCAhIFRyYW5zTGVx
KCBvMSwgbzIgKSkgeyBTd2FwKCBvMSwgbzIgKTsgU3dhcCggZDEsIGQyICk7IH0KLQotICBpZigg
ISBUcmFuc0xlcSggbzIsIGQxICkpIHsKLSAgICAvKiBUZWNobmljYWxseSwgbm8gaW50ZXJzZWN0
aW9uIC0tIGRvIG91ciBiZXN0ICovCi0gICAgdi0+dCA9IChvMi0+dCArIGQxLT50KSAvIDI7Ci0g
IH0gZWxzZSBpZiggVHJhbnNMZXEoIGQxLCBkMiApKSB7Ci0gICAgLyogSW50ZXJwb2xhdGUgYmV0
d2VlbiBvMiBhbmQgZDEgKi8KLSAgICB6MSA9IFRyYW5zRXZhbCggbzEsIG8yLCBkMSApOwotICAg
IHoyID0gVHJhbnNFdmFsKCBvMiwgZDEsIGQyICk7Ci0gICAgaWYoIHoxK3oyIDwgMCApIHsgejEg
PSAtejE7IHoyID0gLXoyOyB9Ci0gICAgdi0+dCA9IEludGVycG9sYXRlKCB6MSwgbzItPnQsIHoy
LCBkMS0+dCApOwotICB9IGVsc2UgewotICAgIC8qIEludGVycG9sYXRlIGJldHdlZW4gbzIgYW5k
IGQyICovCi0gICAgejEgPSBUcmFuc1NpZ24oIG8xLCBvMiwgZDEgKTsKLSAgICB6MiA9IC1UcmFu
c1NpZ24oIG8xLCBkMiwgZDEgKTsKLSAgICBpZiggejErejIgPCAwICkgeyB6MSA9IC16MTsgejIg
PSAtejI7IH0KLSAgICB2LT50ID0gSW50ZXJwb2xhdGUoIHoxLCBvMi0+dCwgejIsIGQyLT50ICk7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2Vv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
Z2VvbS5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvZ2VvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0qKiBM
aWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRo
aXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFz
IHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lv
biAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUg
c3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5v
dCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3Jh
cGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUg
UGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0
dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHBy
b3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4K
LSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElF
UyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU
QVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNI
QU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENv
ZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAot
KiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5
IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdo
dCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBh
bnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiog
ZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25h
bCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFj
ZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5h
bCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNh
dGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3Bl
bkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyks
IHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0
aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVy
IDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkg
U0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoq
IGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9u
LgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiog
JERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9s
aWJ0ZXNzL2dlb20uaCM1ICQKLSovCi0KLSNpZm5kZWYgX19nZW9tX2hfCi0jZGVmaW5lIF9fZ2Vv
bV9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLSNpZmRl
ZiBOT19CUkFOQ0hfQ09ORElUSU9OUwotLyogTUlQUyBhcmNoaXRlY3R1cmUgaGFzIHNwZWNpYWwg
aW5zdHJ1Y3Rpb25zIHRvIGV2YWx1YXRlIGJvb2xlYW4KLSAqIGNvbmRpdGlvbnMgLS0gbW9yZSBl
ZmZpY2llbnQgdGhhbiBicmFuY2hpbmcsIElGIHlvdSBjYW4gZ2V0IHRoZQotICogY29tcGlsZXIg
dG8gZ2VuZXJhdGUgdGhlIHJpZ2h0IGluc3RydWN0aW9ucyAoU0dJIGNvbXBpbGVyIGRvZXNuJ3Qp
Ci0gKi8KLSNkZWZpbmUgVmVydEVxKHUsdikJKCgodSktPnMgPT0gKHYpLT5zKSAmICgodSktPnQg
PT0gKHYpLT50KSkKLSNkZWZpbmUgVmVydExlcSh1LHYpCSgoKHUpLT5zIDwgKHYpLT5zKSB8IFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpLT5zID09ICh2KS0+cyAmICh1KS0+dCA8PSAo
diktPnQpKQotI2Vsc2UKLSNkZWZpbmUgVmVydEVxKHUsdikJKCh1KS0+cyA9PSAodiktPnMgJiYg
KHUpLT50ID09ICh2KS0+dCkKLSNkZWZpbmUgVmVydExlcSh1LHYpCSgoKHUpLT5zIDwgKHYpLT5z
KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1KS0+cyA9PSAodiktPnMgJiYgKHUp
LT50IDw9ICh2KS0+dCkpCi0jZW5kaWYKLQotI2RlZmluZSBFZGdlRXZhbCh1LHYsdykJX19nbF9l
ZGdlRXZhbCh1LHYsdykKLSNkZWZpbmUgRWRnZVNpZ24odSx2LHcpCV9fZ2xfZWRnZVNpZ24odSx2
LHcpCi0KLS8qIFZlcnNpb25zIG9mIFZlcnRMZXEsIEVkZ2VTaWduLCBFZGdlRXZhbCB3aXRoIHMg
YW5kIHQgdHJhbnNwb3NlZC4gKi8KLQotI2RlZmluZSBUcmFuc0xlcSh1LHYpCSgoKHUpLT50IDwg
KHYpLT50KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1KS0+dCA9PSAodiktPnQg
JiYgKHUpLT5zIDw9ICh2KS0+cykpCi0jZGVmaW5lIFRyYW5zRXZhbCh1LHYsdykJX19nbF90cmFu
c0V2YWwodSx2LHcpCi0jZGVmaW5lIFRyYW5zU2lnbih1LHYsdykJX19nbF90cmFuc1NpZ24odSx2
LHcpCi0KLQotI2RlZmluZSBFZGdlR29lc0xlZnQoZSkJCVZlcnRMZXEoIChlKS0+RHN0LCAoZSkt
Pk9yZyApCi0jZGVmaW5lIEVkZ2VHb2VzUmlnaHQoZSkJVmVydExlcSggKGUpLT5PcmcsIChlKS0+
RHN0ICkKLQotI2RlZmluZSBBQlMoeCkJKCh4KSA8IDAgPyAtKHgpIDogKHgpKQotI2RlZmluZSBW
ZXJ0TDFkaXN0KHUsdikJKEFCUyh1LT5zIC0gdi0+cykgKyBBQlModS0+dCAtIHYtPnQpKQotCi0j
ZGVmaW5lIFZlcnRDQ1codSx2LHcpCV9fZ2xfdmVydENDVyh1LHYsdykKLQotaW50CQlfX2dsX3Zl
cnRMZXEoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2ICk7Ci1HTGRvdWJsZQlfX2dsX2VkZ2VF
dmFsKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7Ci1HTGRvdWJs
ZQlfX2dsX2VkZ2VTaWduKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3
ICk7Ci1HTGRvdWJsZQlfX2dsX3RyYW5zRXZhbCggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYs
IEdMVXZlcnRleCAqdyApOwotR0xkb3VibGUJX19nbF90cmFuc1NpZ24oIEdMVXZlcnRleCAqdSwg
R0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKTsKLWludAkJX19nbF92ZXJ0Q0NXKCBHTFV2ZXJ0
ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7Ci12b2lkCQlfX2dsX2VkZ2VJbnRl
cnNlY3QoIEdMVXZlcnRleCAqbzEsIEdMVXZlcnRleCAqZDEsCi0JCQkJICAgIEdMVXZlcnRleCAq
bzIsIEdMVXZlcnRleCAqZDIsCi0JCQkJICAgIEdMVXZlcnRleCAqdiApOwotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9j
LmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9tZW1hbGxvYy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0qKiBM
aWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRo
aXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFz
IHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lv
biAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUg
c3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5v
dCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3Jh
cGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUg
UGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0
dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHBy
b3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4K
LSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElF
UyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU
QVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNI
QU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENv
ZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAot
KiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5
IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdo
dCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBh
bnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiog
ZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25h
bCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFj
ZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5h
bCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNh
dGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3Bl
bkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyks
IHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0
aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVy
IDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkg
U0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoq
IGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9u
LgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiog
JERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9s
aWJ0ZXNzL21lbWFsbG9jLmMjNSAkCi0qLwotCi0jaW5jbHVkZSAic3RyaW5nLmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotCi1pbnQgX19nbF9tZW1Jbml0
KCBzaXplX3QgbWF4RmFzdCApCi17Ci0jaWZuZGVmIE5PX01BTExPUFQKLS8qICBtYWxsb3B0KCBN
X01YRkFTVCwgbWF4RmFzdCApOyovCi0jaWZkZWYgTUVNT1JZX0RFQlVHCi0gIG1hbGxvcHQoIE1f
REVCVUcsIDEgKTsKLSNlbmRpZgotI2VuZGlmCi0gICByZXR1cm4gMTsKLX0KLQotI2lmZGVmIE1F
TU9SWV9ERUJVRwotdm9pZCAqX19nbF9tZW1BbGxvYyggc2l6ZV90IG4gKQotewotICByZXR1cm4g
bWVtc2V0KCBtYWxsb2MoIG4gKSwgMHhhNSwgbiApOwotfQotI2VuZGlmCi0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgJKHJldmlz
aW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1h
bGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFw
cGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBh
cmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRl
ZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRo
ZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBv
bmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoq
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIElu
Yy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwg
TW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Mu
c2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGlu
IHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJ
UyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09O
RElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFO
WSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElU
WSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBP
cmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lv
biAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24g
R3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5
MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlv
bnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJl
IGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2Ug
UHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVz
dGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFy
ZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVy
c2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2Vk
IE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiog
V2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4
LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQg
aGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFu
dCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSov
Ci0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRS
ZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL21l
bWFsbG9jLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fbWVtYWxsb2Nfc2ltcGxlX2hfCi0jZGVmaW5l
IF9fbWVtYWxsb2Nfc2ltcGxlX2hfCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmluZSBt
ZW1SZWFsbG9jCXJlYWxsb2MKLSNkZWZpbmUgbWVtRnJlZQkJZnJlZQotCi0jZGVmaW5lIG1lbUlu
aXQJCV9fZ2xfbWVtSW5pdAotLypleHRlcm4gdm9pZAkJX19nbF9tZW1Jbml0KCBzaXplX3QgKTsq
LwotZXh0ZXJuIGludAkJX19nbF9tZW1Jbml0KCBzaXplX3QgKTsKLQotI2lmbmRlZiBNRU1PUllf
REVCVUcKLSNkZWZpbmUgbWVtQWxsb2MJbWFsbG9jCi0jZWxzZQotI2RlZmluZSBtZW1BbGxvYwlf
X2dsX21lbUFsbG9jCi1leHRlcm4gdm9pZCAqCQlfX2dsX21lbUFsbG9jKCBzaXplX3QgKTsKLSNl
bmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3MvbWVzaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvbWVzaC5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVzaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5NiArMCwwIEBACi0v
KgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9u
cyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGlj
ZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIs
IFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZp
bGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91
IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0
aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiog
Ci0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0
LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdB
UlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9V
VCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBP
RiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0q
KiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmln
aW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRh
dGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVs
b3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBD
b3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmln
aHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0
ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFk
ZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBp
bnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUg
T3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNw
ZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsg
VGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0q
KiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNz
IHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQg
T2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlz
aGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJl
aW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lm
aWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0Lgot
KioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xp
Yi9nbHUvbGlidGVzcy9tZXNoLmMjNiAkCi0qLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5j
bHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNpbmNs
dWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0jaW5jbHVkZSAidGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5lIEZBTFNF
IDAKLQotc3RhdGljIEdMVXZlcnRleCAqYWxsb2NWZXJ0ZXgoKQotewotICAgcmV0dXJuIChHTFV2
ZXJ0ZXggKiltZW1BbGxvYyggc2l6ZW9mKCBHTFV2ZXJ0ZXggKSk7Ci19Ci0KLXN0YXRpYyBHTFVm
YWNlICphbGxvY0ZhY2UoKQotewotICAgcmV0dXJuIChHTFVmYWNlICopbWVtQWxsb2MoIHNpemVv
ZiggR0xVZmFjZSApKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiBVdGlsaXR5IFJv
dXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWxsb2NhdGUgYW5kIGZyZWUg
aGFsZi1lZGdlcyBpbiBwYWlycyBmb3IgZWZmaWNpZW5jeS4KLSAqIFRoZSAqb25seSogcGxhY2Ug
dGhhdCBzaG91bGQgdXNlIHRoaXMgZmFjdCBpcyBhbGxvY2F0aW9uL2ZyZWUuCi0gKi8KLXR5cGVk
ZWYgc3RydWN0IHsgR0xVaGFsZkVkZ2UgZSwgZVN5bTsgfSBFZGdlUGFpcjsKLQotLyogTWFrZUVk
Z2UgY3JlYXRlcyBhIG5ldyBwYWlyIG9mIGhhbGYtZWRnZXMgd2hpY2ggZm9ybSB0aGVpciBvd24g
bG9vcC4KLSAqIE5vIHZlcnRleCBvciBmYWNlIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYnV0
IHRoZXNlIG11c3QgYmUgYXNzaWduZWQKLSAqIGJlZm9yZSB0aGUgY3VycmVudCBlZGdlIG9wZXJh
dGlvbiBpcyBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBHTFVoYWxmRWRnZSAqTWFrZUVkZ2UoIEdM
VWhhbGZFZGdlICplTmV4dCApCi17Ci0gIEdMVWhhbGZFZGdlICplOwotICBHTFVoYWxmRWRnZSAq
ZVN5bTsKLSAgR0xVaGFsZkVkZ2UgKmVQcmV2OwotICBFZGdlUGFpciAqcGFpciA9IChFZGdlUGFp
ciAqKW1lbUFsbG9jKCBzaXplb2YoIEVkZ2VQYWlyICkpOwotICBpZiAocGFpciA9PSBOVUxMKSBy
ZXR1cm4gTlVMTDsKLQotICBlID0gJnBhaXItPmU7Ci0gIGVTeW0gPSAmcGFpci0+ZVN5bTsKLQot
ICAvKiBNYWtlIHN1cmUgZU5leHQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlZGdlIG9mIHRoZSBlZGdl
IHBhaXIgKi8KLSAgaWYoIGVOZXh0LT5TeW0gPCBlTmV4dCApIHsgZU5leHQgPSBlTmV4dC0+U3lt
OyB9Ci0KLSAgLyogSW5zZXJ0IGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCBiZWZvcmUg
ZU5leHQuCi0gICAqIE5vdGUgdGhhdCB0aGUgcHJldiBwb2ludGVyIGlzIHN0b3JlZCBpbiBTeW0t
Pm5leHQuCi0gICAqLwotICBlUHJldiA9IGVOZXh0LT5TeW0tPm5leHQ7Ci0gIGVTeW0tPm5leHQg
PSBlUHJldjsKLSAgZVByZXYtPlN5bS0+bmV4dCA9IGU7Ci0gIGUtPm5leHQgPSBlTmV4dDsKLSAg
ZU5leHQtPlN5bS0+bmV4dCA9IGVTeW07Ci0KLSAgZS0+U3ltID0gZVN5bTsKLSAgZS0+T25leHQg
PSBlOwotICBlLT5MbmV4dCA9IGVTeW07Ci0gIGUtPk9yZyA9IE5VTEw7Ci0gIGUtPkxmYWNlID0g
TlVMTDsKLSAgZS0+d2luZGluZyA9IDA7Ci0gIGUtPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7Ci0KLSAg
ZVN5bS0+U3ltID0gZTsKLSAgZVN5bS0+T25leHQgPSBlU3ltOwotICBlU3ltLT5MbmV4dCA9IGU7
Ci0gIGVTeW0tPk9yZyA9IE5VTEw7Ci0gIGVTeW0tPkxmYWNlID0gTlVMTDsKLSAgZVN5bS0+d2lu
ZGluZyA9IDA7Ci0gIGVTeW0tPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7Ci0KLSAgcmV0dXJuIGU7Ci19
Ci0KLS8qIFNwbGljZSggYSwgYiApIGlzIGJlc3QgZGVzY3JpYmVkIGJ5IHRoZSBHdWliYXMvU3Rv
bGZpIHBhcGVyIG9yIHRoZQotICogQ1MzNDhhIG5vdGVzIChzZWUgbWVzaC5oKS4gIEJhc2ljYWxs
eSBpdCBtb2RpZmllcyB0aGUgbWVzaCBzbyB0aGF0Ci0gKiBhLT5PbmV4dCBhbmQgYi0+T25leHQg
YXJlIGV4Y2hhbmdlZC4gIFRoaXMgY2FuIGhhdmUgdmFyaW91cyBlZmZlY3RzCi0gKiBkZXBlbmRp
bmcgb24gd2hldGhlciBhIGFuZCBiIGJlbG9uZyB0byBkaWZmZXJlbnQgZmFjZSBvciB2ZXJ0ZXgg
cmluZ3MuCi0gKiBGb3IgbW9yZSBleHBsYW5hdGlvbiBzZWUgX19nbF9tZXNoU3BsaWNlKCkgYmVs
b3cuCi0gKi8KLXN0YXRpYyB2b2lkIFNwbGljZSggR0xVaGFsZkVkZ2UgKmEsIEdMVWhhbGZFZGdl
ICpiICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmFPbmV4dCA9IGEtPk9uZXh0OwotICBHTFVoYWxmRWRn
ZSAqYk9uZXh0ID0gYi0+T25leHQ7Ci0KLSAgYU9uZXh0LT5TeW0tPkxuZXh0ID0gYjsKLSAgYk9u
ZXh0LT5TeW0tPkxuZXh0ID0gYTsKLSAgYS0+T25leHQgPSBiT25leHQ7Ci0gIGItPk9uZXh0ID0g
YU9uZXh0OwotfQotCi0vKiBNYWtlVmVydGV4KCBuZXdWZXJ0ZXgsIGVPcmlnLCB2TmV4dCApIGF0
dGFjaGVzIGEgbmV3IHZlcnRleCBhbmQgbWFrZXMgaXQgdGhlCi0gKiBvcmlnaW4gb2YgYWxsIGVk
Z2VzIGluIHRoZSB2ZXJ0ZXggbG9vcCB0byB3aGljaCBlT3JpZyBiZWxvbmdzLiAidk5leHQiIGdp
dmVzCi0gKiBhIHBsYWNlIHRvIGluc2VydCB0aGUgbmV3IHZlcnRleCBpbiB0aGUgZ2xvYmFsIHZl
cnRleCBsaXN0LiAgV2UgaW5zZXJ0Ci0gKiB0aGUgbmV3IHZlcnRleCAqYmVmb3JlKiB2TmV4dCBz
byB0aGF0IGFsZ29yaXRobXMgd2hpY2ggd2FsayB0aGUgdmVydGV4Ci0gKiBsaXN0IHdpbGwgbm90
IHNlZSB0aGUgbmV3bHkgY3JlYXRlZCB2ZXJ0aWNlcy4KLSAqLwotc3RhdGljIHZvaWQgTWFrZVZl
cnRleCggR0xVdmVydGV4ICpuZXdWZXJ0ZXgsIAotCQkJR0xVaGFsZkVkZ2UgKmVPcmlnLCBHTFV2
ZXJ0ZXggKnZOZXh0ICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIEdMVXZlcnRleCAqdlByZXY7
Ci0gIEdMVXZlcnRleCAqdk5ldyA9IG5ld1ZlcnRleDsKLQotICBhc3NlcnQodk5ldyAhPSBOVUxM
KTsKLQotICAvKiBpbnNlcnQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGJlZm9yZSB2
TmV4dCAqLwotICB2UHJldiA9IHZOZXh0LT5wcmV2OwotICB2TmV3LT5wcmV2ID0gdlByZXY7Ci0g
IHZQcmV2LT5uZXh0ID0gdk5ldzsKLSAgdk5ldy0+bmV4dCA9IHZOZXh0OwotICB2TmV4dC0+cHJl
diA9IHZOZXc7Ci0KLSAgdk5ldy0+YW5FZGdlID0gZU9yaWc7Ci0gIHZOZXctPmRhdGEgPSBOVUxM
OwotICAvKiBsZWF2ZSBjb29yZHMsIHMsIHQgdW5kZWZpbmVkICovCi0KLSAgLyogZml4IG90aGVy
IGVkZ2VzIG9uIHRoaXMgdmVydGV4IGxvb3AgKi8KLSAgZSA9IGVPcmlnOwotICBkbyB7Ci0gICAg
ZS0+T3JnID0gdk5ldzsKLSAgICBlID0gZS0+T25leHQ7Ci0gIH0gd2hpbGUoIGUgIT0gZU9yaWcg
KTsKLX0KLQotLyogTWFrZUZhY2UoIG5ld0ZhY2UsIGVPcmlnLCBmTmV4dCApIGF0dGFjaGVzIGEg
bmV3IGZhY2UgYW5kIG1ha2VzIGl0IHRoZSBsZWZ0Ci0gKiBmYWNlIG9mIGFsbCBlZGdlcyBpbiB0
aGUgZmFjZSBsb29wIHRvIHdoaWNoIGVPcmlnIGJlbG9uZ3MuICAiZk5leHQiIGdpdmVzCi0gKiBh
IHBsYWNlIHRvIGluc2VydCB0aGUgbmV3IGZhY2UgaW4gdGhlIGdsb2JhbCBmYWNlIGxpc3QuICBX
ZSBpbnNlcnQKLSAqIHRoZSBuZXcgZmFjZSAqYmVmb3JlKiBmTmV4dCBzbyB0aGF0IGFsZ29yaXRo
bXMgd2hpY2ggd2FsayB0aGUgZmFjZQotICogbGlzdCB3aWxsIG5vdCBzZWUgdGhlIG5ld2x5IGNy
ZWF0ZWQgZmFjZXMuCi0gKi8KLXN0YXRpYyB2b2lkIE1ha2VGYWNlKCBHTFVmYWNlICpuZXdGYWNl
LCBHTFVoYWxmRWRnZSAqZU9yaWcsIEdMVWZhY2UgKmZOZXh0ICkKLXsKLSAgR0xVaGFsZkVkZ2Ug
KmU7Ci0gIEdMVWZhY2UgKmZQcmV2OwotICBHTFVmYWNlICpmTmV3ID0gbmV3RmFjZTsKLQotICBh
c3NlcnQoZk5ldyAhPSBOVUxMKTsgCi0KLSAgLyogaW5zZXJ0IGluIGNpcmN1bGFyIGRvdWJseS1s
aW5rZWQgbGlzdCBiZWZvcmUgZk5leHQgKi8KLSAgZlByZXYgPSBmTmV4dC0+cHJldjsKLSAgZk5l
dy0+cHJldiA9IGZQcmV2OwotICBmUHJldi0+bmV4dCA9IGZOZXc7Ci0gIGZOZXctPm5leHQgPSBm
TmV4dDsKLSAgZk5leHQtPnByZXYgPSBmTmV3OwotCi0gIGZOZXctPmFuRWRnZSA9IGVPcmlnOwot
ICBmTmV3LT5kYXRhID0gTlVMTDsKLSAgZk5ldy0+dHJhaWwgPSBOVUxMOwotICBmTmV3LT5tYXJr
ZWQgPSBGQUxTRTsKLQotICAvKiBUaGUgbmV3IGZhY2UgaXMgbWFya2VkICJpbnNpZGUiIGlmIHRo
ZSBvbGQgb25lIHdhcy4gIFRoaXMgaXMgYQotICAgKiBjb252ZW5pZW5jZSBmb3IgdGhlIGNvbW1v
biBjYXNlIHdoZXJlIGEgZmFjZSBoYXMgYmVlbiBzcGxpdCBpbiB0d28uCi0gICAqLwotICBmTmV3
LT5pbnNpZGUgPSBmTmV4dC0+aW5zaWRlOwotCi0gIC8qIGZpeCBvdGhlciBlZGdlcyBvbiB0aGlz
IGZhY2UgbG9vcCAqLwotICBlID0gZU9yaWc7Ci0gIGRvIHsKLSAgICBlLT5MZmFjZSA9IGZOZXc7
Ci0gICAgZSA9IGUtPkxuZXh0OwotICB9IHdoaWxlKCBlICE9IGVPcmlnICk7Ci19Ci0KLS8qIEtp
bGxFZGdlKCBlRGVsICkgZGVzdHJveXMgYW4gZWRnZSAodGhlIGhhbGYtZWRnZXMgZURlbCBhbmQg
ZURlbC0+U3ltKSwKLSAqIGFuZCByZW1vdmVzIGZyb20gdGhlIGdsb2JhbCBlZGdlIGxpc3QuCi0g
Ki8KLXN0YXRpYyB2b2lkIEtpbGxFZGdlKCBHTFVoYWxmRWRnZSAqZURlbCApCi17Ci0gIEdMVWhh
bGZFZGdlICplUHJldiwgKmVOZXh0OwotCi0gIC8qIEhhbGYtZWRnZXMgYXJlIGFsbG9jYXRlZCBp
biBwYWlycywgc2VlIEVkZ2VQYWlyIGFib3ZlICovCi0gIGlmKCBlRGVsLT5TeW0gPCBlRGVsICkg
eyBlRGVsID0gZURlbC0+U3ltOyB9Ci0KLSAgLyogZGVsZXRlIGZyb20gY2lyY3VsYXIgZG91Ymx5
LWxpbmtlZCBsaXN0ICovCi0gIGVOZXh0ID0gZURlbC0+bmV4dDsKLSAgZVByZXYgPSBlRGVsLT5T
eW0tPm5leHQ7Ci0gIGVOZXh0LT5TeW0tPm5leHQgPSBlUHJldjsKLSAgZVByZXYtPlN5bS0+bmV4
dCA9IGVOZXh0OwotCi0gIG1lbUZyZWUoIGVEZWwgKTsKLX0KLQotCi0vKiBLaWxsVmVydGV4KCB2
RGVsICkgZGVzdHJveXMgYSB2ZXJ0ZXggYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgZ2xvYmFsCi0g
KiB2ZXJ0ZXggbGlzdC4gIEl0IHVwZGF0ZXMgdGhlIHZlcnRleCBsb29wIHRvIHBvaW50IHRvIGEg
Z2l2ZW4gbmV3IHZlcnRleC4KLSAqLwotc3RhdGljIHZvaWQgS2lsbFZlcnRleCggR0xVdmVydGV4
ICp2RGVsLCBHTFV2ZXJ0ZXggKm5ld09yZyApCi17Ci0gIEdMVWhhbGZFZGdlICplLCAqZVN0YXJ0
ID0gdkRlbC0+YW5FZGdlOwotICBHTFV2ZXJ0ZXggKnZQcmV2LCAqdk5leHQ7Ci0KLSAgLyogY2hh
bmdlIHRoZSBvcmlnaW4gb2YgYWxsIGFmZmVjdGVkIGVkZ2VzICovCi0gIGUgPSBlU3RhcnQ7Ci0g
IGRvIHsKLSAgICBlLT5PcmcgPSBuZXdPcmc7Ci0gICAgZSA9IGUtPk9uZXh0OwotICB9IHdoaWxl
KCBlICE9IGVTdGFydCApOwotCi0gIC8qIGRlbGV0ZSBmcm9tIGNpcmN1bGFyIGRvdWJseS1saW5r
ZWQgbGlzdCAqLwotICB2UHJldiA9IHZEZWwtPnByZXY7Ci0gIHZOZXh0ID0gdkRlbC0+bmV4dDsK
LSAgdk5leHQtPnByZXYgPSB2UHJldjsKLSAgdlByZXYtPm5leHQgPSB2TmV4dDsKLQotICBtZW1G
cmVlKCB2RGVsICk7Ci19Ci0KLS8qIEtpbGxGYWNlKCBmRGVsICkgZGVzdHJveXMgYSBmYWNlIGFu
ZCByZW1vdmVzIGl0IGZyb20gdGhlIGdsb2JhbCBmYWNlCi0gKiBsaXN0LiAgSXQgdXBkYXRlcyB0
aGUgZmFjZSBsb29wIHRvIHBvaW50IHRvIGEgZ2l2ZW4gbmV3IGZhY2UuCi0gKi8KLXN0YXRpYyB2
b2lkIEtpbGxGYWNlKCBHTFVmYWNlICpmRGVsLCBHTFVmYWNlICpuZXdMZmFjZSApCi17Ci0gIEdM
VWhhbGZFZGdlICplLCAqZVN0YXJ0ID0gZkRlbC0+YW5FZGdlOwotICBHTFVmYWNlICpmUHJldiwg
KmZOZXh0OwotCi0gIC8qIGNoYW5nZSB0aGUgbGVmdCBmYWNlIG9mIGFsbCBhZmZlY3RlZCBlZGdl
cyAqLwotICBlID0gZVN0YXJ0OwotICBkbyB7Ci0gICAgZS0+TGZhY2UgPSBuZXdMZmFjZTsKLSAg
ICBlID0gZS0+TG5leHQ7Ci0gIH0gd2hpbGUoIGUgIT0gZVN0YXJ0ICk7Ci0KLSAgLyogZGVsZXRl
IGZyb20gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0ICovCi0gIGZQcmV2ID0gZkRlbC0+cHJl
djsKLSAgZk5leHQgPSBmRGVsLT5uZXh0OwotICBmTmV4dC0+cHJldiA9IGZQcmV2OwotICBmUHJl
di0+bmV4dCA9IGZOZXh0OwotCi0gIG1lbUZyZWUoIGZEZWwgKTsKLX0KLQotCi0vKioqKioqKioq
KioqKioqKioqIEJhc2ljIEVkZ2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0vKiBfX2dsX21lc2hNYWtlRWRnZSBjcmVhdGVzIG9uZSBlZGdlLCB0d28gdmVydGljZXMsIGFu
ZCBhIGxvb3AgKGZhY2UpLgotICogVGhlIGxvb3AgY29uc2lzdHMgb2YgdGhlIHR3byBuZXcgaGFs
Zi1lZGdlcy4KLSAqLwotR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaE1ha2VFZGdlKCBHTFVtZXNoICpt
ZXNoICkKLXsKLSAgR0xVdmVydGV4ICpuZXdWZXJ0ZXgxPSBhbGxvY1ZlcnRleCgpOwotICBHTFV2
ZXJ0ZXggKm5ld1ZlcnRleDI9IGFsbG9jVmVydGV4KCk7Ci0gIEdMVWZhY2UgKm5ld0ZhY2U9IGFs
bG9jRmFjZSgpOwotICBHTFVoYWxmRWRnZSAqZTsKLQotICAvKiBpZiBhbnkgb25lIGlzIG51bGwg
dGhlbiBhbGwgZ2V0IGZyZWVkICovCi0gIGlmIChuZXdWZXJ0ZXgxID09IE5VTEwgfHwgbmV3VmVy
dGV4MiA9PSBOVUxMIHx8IG5ld0ZhY2UgPT0gTlVMTCkgewotICAgICBpZiAobmV3VmVydGV4MSAh
PSBOVUxMKSBtZW1GcmVlKG5ld1ZlcnRleDEpOwotICAgICBpZiAobmV3VmVydGV4MiAhPSBOVUxM
KSBtZW1GcmVlKG5ld1ZlcnRleDIpOwotICAgICBpZiAobmV3RmFjZSAhPSBOVUxMKSBtZW1GcmVl
KG5ld0ZhY2UpOyAgICAgCi0gICAgIHJldHVybiBOVUxMOwotICB9IAotCi0gIGUgPSBNYWtlRWRn
ZSggJm1lc2gtPmVIZWFkICk7Ci0gIGlmIChlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIE1h
a2VWZXJ0ZXgoIG5ld1ZlcnRleDEsIGUsICZtZXNoLT52SGVhZCApOwotICBNYWtlVmVydGV4KCBu
ZXdWZXJ0ZXgyLCBlLT5TeW0sICZtZXNoLT52SGVhZCApOwotICBNYWtlRmFjZSggbmV3RmFjZSwg
ZSwgJm1lc2gtPmZIZWFkICk7Ci0gIHJldHVybiBlOwotfQotICAKLQotLyogX19nbF9tZXNoU3Bs
aWNlKCBlT3JnLCBlRHN0ICkgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBmb3IgY2hhbmdpbmcgdGhl
Ci0gKiBtZXNoIGNvbm5lY3Rpdml0eSBhbmQgdG9wb2xvZ3kuICBJdCBjaGFuZ2VzIHRoZSBtZXNo
IHNvIHRoYXQKLSAqCWVPcmctPk9uZXh0IDwtIE9MRCggZURzdC0+T25leHQgKQotICoJZURzdC0+
T25leHQgPC0gT0xEKCBlT3JnLT5PbmV4dCApCi0gKiB3aGVyZSBPTEQoLi4uKSBtZWFucyB0aGUg
dmFsdWUgYmVmb3JlIHRoZSBtZXNoU3BsaWNlIG9wZXJhdGlvbi4KLSAqCi0gKiBUaGlzIGNhbiBo
YXZlIHR3byBlZmZlY3RzIG9uIHRoZSB2ZXJ0ZXggc3RydWN0dXJlOgotICogIC0gaWYgZU9yZy0+
T3JnICE9IGVEc3QtPk9yZywgdGhlIHR3byB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0g
KiAgLSBpZiBlT3JnLT5PcmcgPT0gZURzdC0+T3JnLCB0aGUgb3JpZ2luIGlzIHNwbGl0IGludG8g
dHdvIHZlcnRpY2VzCi0gKiBJbiBib3RoIGNhc2VzLCBlRHN0LT5PcmcgaXMgY2hhbmdlZCBhbmQg
ZU9yZy0+T3JnIGlzIHVudG91Y2hlZC4KLSAqCi0gKiBTaW1pbGFybHkgKGFuZCBpbmRlcGVuZGVu
dGx5KSBmb3IgdGhlIGZhY2Ugc3RydWN0dXJlLAotICogIC0gaWYgZU9yZy0+TGZhY2UgPT0gZURz
dC0+TGZhY2UsIG9uZSBsb29wIGlzIHNwbGl0IGludG8gdHdvCi0gKiAgLSBpZiBlT3JnLT5MZmFj
ZSAhPSBlRHN0LT5MZmFjZSwgdHdvIGRpc3RpbmN0IGxvb3BzIGFyZSBqb2luZWQgaW50byBvbmUK
LSAqIEluIGJvdGggY2FzZXMsIGVEc3QtPkxmYWNlIGlzIGNoYW5nZWQgYW5kIGVPcmctPkxmYWNl
IGlzIHVuYWZmZWN0ZWQuCi0gKgotICogU29tZSBzcGVjaWFsIGNhc2VzOgotICogSWYgZURzdCA9
PSBlT3JnLCB0aGUgb3BlcmF0aW9uIGhhcyBubyBlZmZlY3QuCi0gKiBJZiBlRHN0ID09IGVPcmct
PkxuZXh0LCB0aGUgbmV3IGZhY2Ugd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCi0gKiBJZiBlRHN0
ID09IGVPcmctPkxwcmV2LCB0aGUgb2xkIGZhY2Ugd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCi0g
KiBJZiBlRHN0ID09IGVPcmctPk9uZXh0LCB0aGUgbmV3IHZlcnRleCB3aWxsIGhhdmUgYSBzaW5n
bGUgZWRnZS4KLSAqIElmIGVEc3QgPT0gZU9yZy0+T3ByZXYsIHRoZSBvbGQgdmVydGV4IHdpbGwg
aGF2ZSBhIHNpbmdsZSBlZGdlLgotICovCi1pbnQgX19nbF9tZXNoU3BsaWNlKCBHTFVoYWxmRWRn
ZSAqZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKQotewotICBpbnQgam9pbmluZ0xvb3BzID0gRkFM
U0U7Ci0gIGludCBqb2luaW5nVmVydGljZXMgPSBGQUxTRTsKLQotICBpZiggZU9yZyA9PSBlRHN0
ICkgcmV0dXJuIDE7Ci0KLSAgaWYoIGVEc3QtPk9yZyAhPSBlT3JnLT5PcmcgKSB7Ci0gICAgLyog
V2UgYXJlIG1lcmdpbmcgdHdvIGRpc2pvaW50IHZlcnRpY2VzIC0tIGRlc3Ryb3kgZURzdC0+T3Jn
ICovCi0gICAgam9pbmluZ1ZlcnRpY2VzID0gVFJVRTsKLSAgICBLaWxsVmVydGV4KCBlRHN0LT5P
cmcsIGVPcmctPk9yZyApOwotICB9Ci0gIGlmKCBlRHN0LT5MZmFjZSAhPSBlT3JnLT5MZmFjZSAp
IHsKLSAgICAvKiBXZSBhcmUgY29ubmVjdGluZyB0d28gZGlzam9pbnQgbG9vcHMgLS0gZGVzdHJv
eSBlRHN0LT5MZmFjZSAqLwotICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7Ci0gICAgS2lsbEZhY2Uo
IGVEc3QtPkxmYWNlLCBlT3JnLT5MZmFjZSApOwotICB9Ci0KLSAgLyogQ2hhbmdlIHRoZSBlZGdl
IHN0cnVjdHVyZSAqLwotICBTcGxpY2UoIGVEc3QsIGVPcmcgKTsKLQotICBpZiggISBqb2luaW5n
VmVydGljZXMgKSB7Ci0gICAgR0xVdmVydGV4ICpuZXdWZXJ0ZXg9IGFsbG9jVmVydGV4KCk7Ci0g
ICAgaWYgKG5ld1ZlcnRleCA9PSBOVUxMKSByZXR1cm4gMDsKLQotICAgIC8qIFdlIHNwbGl0IG9u
ZSB2ZXJ0ZXggaW50byB0d28gLS0gdGhlIG5ldyB2ZXJ0ZXggaXMgZURzdC0+T3JnLgotICAgICAq
IE1ha2Ugc3VyZSB0aGUgb2xkIHZlcnRleCBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVkZ2UuCi0g
ICAgICovCi0gICAgTWFrZVZlcnRleCggbmV3VmVydGV4LCBlRHN0LCBlT3JnLT5PcmcgKTsKLSAg
ICBlT3JnLT5PcmctPmFuRWRnZSA9IGVPcmc7Ci0gIH0KLSAgaWYoICEgam9pbmluZ0xvb3BzICkg
ewotICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOyAgCi0gICAgaWYgKG5ld0ZhY2Ug
PT0gTlVMTCkgcmV0dXJuIDA7Ci0KLSAgICAvKiBXZSBzcGxpdCBvbmUgbG9vcCBpbnRvIHR3byAt
LSB0aGUgbmV3IGxvb3AgaXMgZURzdC0+TGZhY2UuCi0gICAgICogTWFrZSBzdXJlIHRoZSBvbGQg
ZmFjZSBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVkZ2UuCi0gICAgICovCi0gICAgTWFrZUZhY2Uo
IG5ld0ZhY2UsIGVEc3QsIGVPcmctPkxmYWNlICk7Ci0gICAgZU9yZy0+TGZhY2UtPmFuRWRnZSA9
IGVPcmc7Ci0gIH0KLQotICByZXR1cm4gMTsKLX0KLQotCi0vKiBfX2dsX21lc2hEZWxldGUoIGVE
ZWwgKSByZW1vdmVzIHRoZSBlZGdlIGVEZWwuICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlczoKLSAq
IGlmIChlRGVsLT5MZmFjZSAhPSBlRGVsLT5SZmFjZSksIHdlIGpvaW4gdHdvIGxvb3BzIGludG8g
b25lOyB0aGUgbG9vcAotICogZURlbC0+TGZhY2UgaXMgZGVsZXRlZC4gIE90aGVyd2lzZSwgd2Ug
YXJlIHNwbGl0dGluZyBvbmUgbG9vcCBpbnRvIHR3bzsKLSAqIHRoZSBuZXdseSBjcmVhdGVkIGxv
b3Agd2lsbCBjb250YWluIGVEZWwtPkRzdC4gIElmIHRoZSBkZWxldGlvbiBvZiBlRGVsCi0gKiB3
b3VsZCBjcmVhdGUgaXNvbGF0ZWQgdmVydGljZXMsIHRob3NlIGFyZSBkZWxldGVkIGFzIHdlbGwu
Ci0gKgotICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyB0d28gY2FsbHMg
dG8gX19nbF9tZXNoU3BsaWNlCi0gKiBwbHVzIGEgZmV3IGNhbGxzIHRvIG1lbUZyZWUsIGJ1dCB0
aGlzIHdvdWxkIGFsbG9jYXRlIGFuZCBkZWxldGUKLSAqIHVubmVjZXNzYXJ5IHZlcnRpY2VzIGFu
ZCBmYWNlcy4KLSAqLwotaW50IF9fZ2xfbWVzaERlbGV0ZSggR0xVaGFsZkVkZ2UgKmVEZWwgKQot
ewotICBHTFVoYWxmRWRnZSAqZURlbFN5bSA9IGVEZWwtPlN5bTsKLSAgaW50IGpvaW5pbmdMb29w
cyA9IEZBTFNFOwotCi0gIC8qIEZpcnN0IHN0ZXA6IGRpc2Nvbm5lY3QgdGhlIG9yaWdpbiB2ZXJ0
ZXggZURlbC0+T3JnLiAgV2UgbWFrZSBhbGwKLSAgICogY2hhbmdlcyB0byBnZXQgYSBjb25zaXN0
ZW50IG1lc2ggaW4gdGhpcyAiaW50ZXJtZWRpYXRlIiBzdGF0ZS4KLSAgICovCi0gIGlmKCBlRGVs
LT5MZmFjZSAhPSBlRGVsLT5SZmFjZSApIHsKLSAgICAvKiBXZSBhcmUgam9pbmluZyB0d28gbG9v
cHMgaW50byBvbmUgLS0gcmVtb3ZlIHRoZSBsZWZ0IGZhY2UgKi8KLSAgICBqb2luaW5nTG9vcHMg
PSBUUlVFOwotICAgIEtpbGxGYWNlKCBlRGVsLT5MZmFjZSwgZURlbC0+UmZhY2UgKTsKLSAgfQot
Ci0gIGlmKCBlRGVsLT5PbmV4dCA9PSBlRGVsICkgewotICAgIEtpbGxWZXJ0ZXgoIGVEZWwtPk9y
ZywgTlVMTCApOwotICB9IGVsc2UgewotICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGVEZWwtPk9yZyBh
bmQgZURlbC0+UmZhY2UgcG9pbnQgdG8gdmFsaWQgaGFsZi1lZGdlcyAqLwotICAgIGVEZWwtPlJm
YWNlLT5hbkVkZ2UgPSBlRGVsLT5PcHJldjsKLSAgICBlRGVsLT5PcmctPmFuRWRnZSA9IGVEZWwt
Pk9uZXh0OwotCi0gICAgU3BsaWNlKCBlRGVsLCBlRGVsLT5PcHJldiApOwotICAgIGlmKCAhIGpv
aW5pbmdMb29wcyApIHsKLSAgICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOwotICAg
ICAgaWYgKG5ld0ZhY2UgPT0gTlVMTCkgcmV0dXJuIDA7IAotCi0gICAgICAvKiBXZSBhcmUgc3Bs
aXR0aW5nIG9uZSBsb29wIGludG8gdHdvIC0tIGNyZWF0ZSBhIG5ldyBsb29wIGZvciBlRGVsLiAq
LwotICAgICAgTWFrZUZhY2UoIG5ld0ZhY2UsIGVEZWwsIGVEZWwtPkxmYWNlICk7Ci0gICAgfQot
ICB9Ci0KLSAgLyogQ2xhaW06IHRoZSBtZXNoIGlzIG5vdyBpbiBhIGNvbnNpc3RlbnQgc3RhdGUs
IGV4Y2VwdCB0aGF0IGVEZWwtPk9yZwotICAgKiBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQuICBOb3cg
d2UgZGlzY29ubmVjdCBlRGVsLT5Ec3QuCi0gICAqLwotICBpZiggZURlbFN5bS0+T25leHQgPT0g
ZURlbFN5bSApIHsKLSAgICBLaWxsVmVydGV4KCBlRGVsU3ltLT5PcmcsIE5VTEwgKTsKLSAgICBL
aWxsRmFjZSggZURlbFN5bS0+TGZhY2UsIE5VTEwgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBNYWtl
IHN1cmUgdGhhdCBlRGVsLT5Ec3QgYW5kIGVEZWwtPkxmYWNlIHBvaW50IHRvIHZhbGlkIGhhbGYt
ZWRnZXMgKi8KLSAgICBlRGVsLT5MZmFjZS0+YW5FZGdlID0gZURlbFN5bS0+T3ByZXY7Ci0gICAg
ZURlbFN5bS0+T3JnLT5hbkVkZ2UgPSBlRGVsU3ltLT5PbmV4dDsKLSAgICBTcGxpY2UoIGVEZWxT
eW0sIGVEZWxTeW0tPk9wcmV2ICk7Ci0gIH0KLQotICAvKiBBbnkgaXNvbGF0ZWQgdmVydGljZXMg
b3IgZmFjZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZWQuICovCi0gIEtpbGxFZGdlKCBlRGVsICk7
Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqIE90aGVyIEVkZ2Ug
T3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBbGwgdGhlc2Ugcm91dGlu
ZXMgY2FuIGJlIGltcGxlbWVudGVkIHdpdGggdGhlIGJhc2ljIGVkZ2UKLSAqIG9wZXJhdGlvbnMg
YWJvdmUuICBUaGV5IGFyZSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UgYW5kIGVmZmljaWVuY3ku
Ci0gKi8KLQotCi0vKiBfX2dsX21lc2hBZGRFZGdlVmVydGV4KCBlT3JnICkgY3JlYXRlcyBhIG5l
dyBlZGdlIGVOZXcgc3VjaCB0aGF0Ci0gKiBlTmV3ID09IGVPcmctPkxuZXh0LCBhbmQgZU5ldy0+
RHN0IGlzIGEgbmV3bHkgY3JlYXRlZCB2ZXJ0ZXguCi0gKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2
ZSB0aGUgc2FtZSBsZWZ0IGZhY2UuCi0gKi8KLUdMVWhhbGZFZGdlICpfX2dsX21lc2hBZGRFZGdl
VmVydGV4KCBHTFVoYWxmRWRnZSAqZU9yZyApCi17Ci0gIEdMVWhhbGZFZGdlICplTmV3U3ltOwot
ICBHTFVoYWxmRWRnZSAqZU5ldyA9IE1ha2VFZGdlKCBlT3JnICk7Ci0gIGlmIChlTmV3ID09IE5V
TEwpIHJldHVybiBOVUxMOwotCi0gIGVOZXdTeW0gPSBlTmV3LT5TeW07Ci0KLSAgLyogQ29ubmVj
dCB0aGUgbmV3IGVkZ2UgYXBwcm9wcmlhdGVseSAqLwotICBTcGxpY2UoIGVOZXcsIGVPcmctPkxu
ZXh0ICk7Ci0KLSAgLyogU2V0IHRoZSB2ZXJ0ZXggYW5kIGZhY2UgaW5mb3JtYXRpb24gKi8KLSAg
ZU5ldy0+T3JnID0gZU9yZy0+RHN0OwotICB7Ci0gICAgR0xVdmVydGV4ICpuZXdWZXJ0ZXg9IGFs
bG9jVmVydGV4KCk7Ci0gICAgaWYgKG5ld1ZlcnRleCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQot
ICAgIE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleCwgZU5ld1N5bSwgZU5ldy0+T3JnICk7Ci0gIH0KLSAg
ZU5ldy0+TGZhY2UgPSBlTmV3U3ltLT5MZmFjZSA9IGVPcmctPkxmYWNlOwotCi0gIHJldHVybiBl
TmV3OwotfQotCi0KLS8qIF9fZ2xfbWVzaFNwbGl0RWRnZSggZU9yZyApIHNwbGl0cyBlT3JnIGlu
dG8gdHdvIGVkZ2VzIGVPcmcgYW5kIGVOZXcsCi0gKiBzdWNoIHRoYXQgZU5ldyA9PSBlT3JnLT5M
bmV4dC4gIFRoZSBuZXcgdmVydGV4IGlzIGVPcmctPkRzdCA9PSBlTmV3LT5PcmcuCi0gKiBlT3Jn
IGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZWZ0IGZhY2UuCi0gKi8KLUdMVWhhbGZFZGdl
ICpfX2dsX21lc2hTcGxpdEVkZ2UoIEdMVWhhbGZFZGdlICplT3JnICkKLXsKLSAgR0xVaGFsZkVk
Z2UgKmVOZXc7Ci0gIEdMVWhhbGZFZGdlICp0ZW1wSGFsZkVkZ2U9IF9fZ2xfbWVzaEFkZEVkZ2VW
ZXJ0ZXgoIGVPcmcgKTsKLSAgaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsK
LQotICBlTmV3ID0gdGVtcEhhbGZFZGdlLT5TeW07Ci0KLSAgLyogRGlzY29ubmVjdCBlT3JnIGZy
b20gZU9yZy0+RHN0IGFuZCBjb25uZWN0IGl0IHRvIGVOZXctPk9yZyAqLwotICBTcGxpY2UoIGVP
cmctPlN5bSwgZU9yZy0+U3ltLT5PcHJldiApOwotICBTcGxpY2UoIGVPcmctPlN5bSwgZU5ldyAp
OwotCi0gIC8qIFNldCB0aGUgdmVydGV4IGFuZCBmYWNlIGluZm9ybWF0aW9uICovCi0gIGVPcmct
PkRzdCA9IGVOZXctPk9yZzsKLSAgZU5ldy0+RHN0LT5hbkVkZ2UgPSBlTmV3LT5TeW07CS8qIG1h
eSBoYXZlIHBvaW50ZWQgdG8gZU9yZy0+U3ltICovCi0gIGVOZXctPlJmYWNlID0gZU9yZy0+UmZh
Y2U7Ci0gIGVOZXctPndpbmRpbmcgPSBlT3JnLT53aW5kaW5nOwkvKiBjb3B5IG9sZCB3aW5kaW5n
IGluZm9ybWF0aW9uICovCi0gIGVOZXctPlN5bS0+d2luZGluZyA9IGVPcmctPlN5bS0+d2luZGlu
ZzsKLQotICByZXR1cm4gZU5ldzsKLX0KLQotCi0vKiBfX2dsX21lc2hDb25uZWN0KCBlT3JnLCBl
RHN0ICkgY3JlYXRlcyBhIG5ldyBlZGdlIGZyb20gZU9yZy0+RHN0Ci0gKiB0byBlRHN0LT5Pcmcs
IGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGhhbGYtZWRnZSBlTmV3LgotICogSWYgZU9y
Zy0+TGZhY2UgPT0gZURzdC0+TGZhY2UsIHRoaXMgc3BsaXRzIG9uZSBsb29wIGludG8gdHdvLAot
ICogYW5kIHRoZSBuZXdseSBjcmVhdGVkIGxvb3AgaXMgZU5ldy0+TGZhY2UuICBPdGhlcndpc2Us
IHR3byBkaXNqb2ludAotICogbG9vcHMgYXJlIG1lcmdlZCBpbnRvIG9uZSwgYW5kIHRoZSBsb29w
IGVEc3QtPkxmYWNlIGlzIGRlc3Ryb3llZC4KLSAqCi0gKiBJZiAoZU9yZyA9PSBlRHN0KSwgdGhl
IG5ldyBmYWNlIHdpbGwgaGF2ZSBvbmx5IHR3byBlZGdlcy4KLSAqIElmIChlT3JnLT5MbmV4dCA9
PSBlRHN0KSwgdGhlIG9sZCBmYWNlIGlzIHJlZHVjZWQgdG8gYSBzaW5nbGUgZWRnZS4KLSAqIElm
IChlT3JnLT5MbmV4dC0+TG5leHQgPT0gZURzdCksIHRoZSBvbGQgZmFjZSBpcyByZWR1Y2VkIHRv
IHR3byBlZGdlcy4KLSAqLwotR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaENvbm5lY3QoIEdMVWhhbGZF
ZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApCi17Ci0gIEdMVWhhbGZFZGdlICplTmV3U3lt
OwotICBpbnQgam9pbmluZ0xvb3BzID0gRkFMU0U7ICAKLSAgR0xVaGFsZkVkZ2UgKmVOZXcgPSBN
YWtlRWRnZSggZU9yZyApOwotICBpZiAoZU5ldyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBl
TmV3U3ltID0gZU5ldy0+U3ltOwotCi0gIGlmKCBlRHN0LT5MZmFjZSAhPSBlT3JnLT5MZmFjZSAp
IHsKLSAgICAvKiBXZSBhcmUgY29ubmVjdGluZyB0d28gZGlzam9pbnQgbG9vcHMgLS0gZGVzdHJv
eSBlRHN0LT5MZmFjZSAqLwotICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7Ci0gICAgS2lsbEZhY2Uo
IGVEc3QtPkxmYWNlLCBlT3JnLT5MZmFjZSApOwotICB9Ci0KLSAgLyogQ29ubmVjdCB0aGUgbmV3
IGVkZ2UgYXBwcm9wcmlhdGVseSAqLwotICBTcGxpY2UoIGVOZXcsIGVPcmctPkxuZXh0ICk7Ci0g
IFNwbGljZSggZU5ld1N5bSwgZURzdCApOwotCi0gIC8qIFNldCB0aGUgdmVydGV4IGFuZCBmYWNl
IGluZm9ybWF0aW9uICovCi0gIGVOZXctPk9yZyA9IGVPcmctPkRzdDsKLSAgZU5ld1N5bS0+T3Jn
ID0gZURzdC0+T3JnOwotICBlTmV3LT5MZmFjZSA9IGVOZXdTeW0tPkxmYWNlID0gZU9yZy0+TGZh
Y2U7Ci0KLSAgLyogTWFrZSBzdXJlIHRoZSBvbGQgZmFjZSBwb2ludHMgdG8gYSB2YWxpZCBoYWxm
LWVkZ2UgKi8KLSAgZU9yZy0+TGZhY2UtPmFuRWRnZSA9IGVOZXdTeW07Ci0KLSAgaWYoICEgam9p
bmluZ0xvb3BzICkgewotICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOwotICAgIGlm
IChuZXdGYWNlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gICAgLyogV2Ugc3BsaXQgb25lIGxv
b3AgaW50byB0d28gLS0gdGhlIG5ldyBsb29wIGlzIGVOZXctPkxmYWNlICovCi0gICAgTWFrZUZh
Y2UoIG5ld0ZhY2UsIGVOZXcsIGVPcmctPkxmYWNlICk7Ci0gIH0KLSAgcmV0dXJuIGVOZXc7Ci19
Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqIE90aGVyIE9wZXJhdGlvbnMgKioqKioqKioqKioq
KioqKioqKioqKi8KLQotLyogX19nbF9tZXNoWmFwRmFjZSggZlphcCApIGRlc3Ryb3lzIGEgZmFj
ZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZQotICogZ2xvYmFsIGZhY2UgbGlzdC4gIEFsbCBlZGdl
cyBvZiBmWmFwIHdpbGwgaGF2ZSBhIE5VTEwgcG9pbnRlciBhcyB0aGVpcgotICogbGVmdCBmYWNl
LiAgQW55IGVkZ2VzIHdoaWNoIGFsc28gaGF2ZSBhIE5VTEwgcG9pbnRlciBhcyB0aGVpciByaWdo
dCBmYWNlCi0gKiBhcmUgZGVsZXRlZCBlbnRpcmVseSAoYWxvbmcgd2l0aCBhbnkgaXNvbGF0ZWQg
dmVydGljZXMgdGhpcyBwcm9kdWNlcykuCi0gKiBBbiBlbnRpcmUgbWVzaCBjYW4gYmUgZGVsZXRl
ZCBieSB6YXBwaW5nIGl0cyBmYWNlcywgb25lIGF0IGEgdGltZSwKLSAqIGluIGFueSBvcmRlci4g
IFphcHBlZCBmYWNlcyBjYW5ub3QgYmUgdXNlZCBpbiBmdXJ0aGVyIG1lc2ggb3BlcmF0aW9ucyEK
LSAqLwotdm9pZCBfX2dsX21lc2haYXBGYWNlKCBHTFVmYWNlICpmWmFwICkKLXsKLSAgR0xVaGFs
ZkVkZ2UgKmVTdGFydCA9IGZaYXAtPmFuRWRnZTsKLSAgR0xVaGFsZkVkZ2UgKmUsICplTmV4dCwg
KmVTeW07Ci0gIEdMVWZhY2UgKmZQcmV2LCAqZk5leHQ7Ci0KLSAgLyogd2FsayBhcm91bmQgZmFj
ZSwgZGVsZXRpbmcgZWRnZXMgd2hvc2UgcmlnaHQgZmFjZSBpcyBhbHNvIE5VTEwgKi8KLSAgZU5l
eHQgPSBlU3RhcnQtPkxuZXh0OwotICBkbyB7Ci0gICAgZSA9IGVOZXh0OwotICAgIGVOZXh0ID0g
ZS0+TG5leHQ7Ci0KLSAgICBlLT5MZmFjZSA9IE5VTEw7Ci0gICAgaWYoIGUtPlJmYWNlID09IE5V
TEwgKSB7Ci0gICAgICAvKiBkZWxldGUgdGhlIGVkZ2UgLS0gc2VlIF9fZ2xfTWVzaERlbGV0ZSBh
Ym92ZSAqLwotCi0gICAgICBpZiggZS0+T25leHQgPT0gZSApIHsKLQlLaWxsVmVydGV4KCBlLT5P
cmcsIE5VTEwgKTsKLSAgICAgIH0gZWxzZSB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgZS0+T3JnIHBv
aW50cyB0byBhIHZhbGlkIGhhbGYtZWRnZSAqLwotCWUtPk9yZy0+YW5FZGdlID0gZS0+T25leHQ7
Ci0JU3BsaWNlKCBlLCBlLT5PcHJldiApOwotICAgICAgfQotICAgICAgZVN5bSA9IGUtPlN5bTsK
LSAgICAgIGlmKCBlU3ltLT5PbmV4dCA9PSBlU3ltICkgewotCUtpbGxWZXJ0ZXgoIGVTeW0tPk9y
ZywgTlVMTCApOwotICAgICAgfSBlbHNlIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCBlU3ltLT5Pcmcg
cG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdlICovCi0JZVN5bS0+T3JnLT5hbkVkZ2UgPSBlU3lt
LT5PbmV4dDsKLQlTcGxpY2UoIGVTeW0sIGVTeW0tPk9wcmV2ICk7Ci0gICAgICB9Ci0gICAgICBL
aWxsRWRnZSggZSApOwotICAgIH0KLSAgfSB3aGlsZSggZSAhPSBlU3RhcnQgKTsKLQotICAvKiBk
ZWxldGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgKi8KLSAgZlByZXYgPSBmWmFw
LT5wcmV2OwotICBmTmV4dCA9IGZaYXAtPm5leHQ7Ci0gIGZOZXh0LT5wcmV2ID0gZlByZXY7Ci0g
IGZQcmV2LT5uZXh0ID0gZk5leHQ7Ci0KLSAgbWVtRnJlZSggZlphcCApOwotfQotCi0KLS8qIF9f
Z2xfbWVzaE5ld01lc2goKSBjcmVhdGVzIGEgbmV3IG1lc2ggd2l0aCBubyBlZGdlcywgbm8gdmVy
dGljZXMsCi0gKiBhbmQgbm8gbG9vcHMgKHdoYXQgd2UgdXN1YWxseSBjYWxsIGEgImZhY2UiKS4K
LSAqLwotR0xVbWVzaCAqX19nbF9tZXNoTmV3TWVzaCggdm9pZCApCi17Ci0gIEdMVXZlcnRleCAq
djsKLSAgR0xVZmFjZSAqZjsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIEdMVWhhbGZFZGdlICplU3lt
OwotICBHTFVtZXNoICptZXNoID0gKEdMVW1lc2ggKiltZW1BbGxvYyggc2l6ZW9mKCBHTFVtZXNo
ICkpOwotICBpZiAobWVzaCA9PSBOVUxMKSB7Ci0gICAgIHJldHVybiBOVUxMOwotICB9Ci0gIAot
ICB2ID0gJm1lc2gtPnZIZWFkOwotICBmID0gJm1lc2gtPmZIZWFkOwotICBlID0gJm1lc2gtPmVI
ZWFkOwotICBlU3ltID0gJm1lc2gtPmVIZWFkU3ltOwotCi0gIHYtPm5leHQgPSB2LT5wcmV2ID0g
djsKLSAgdi0+YW5FZGdlID0gTlVMTDsKLSAgdi0+ZGF0YSA9IE5VTEw7Ci0KLSAgZi0+bmV4dCA9
IGYtPnByZXYgPSBmOwotICBmLT5hbkVkZ2UgPSBOVUxMOwotICBmLT5kYXRhID0gTlVMTDsKLSAg
Zi0+dHJhaWwgPSBOVUxMOwotICBmLT5tYXJrZWQgPSBGQUxTRTsKLSAgZi0+aW5zaWRlID0gRkFM
U0U7Ci0KLSAgZS0+bmV4dCA9IGU7Ci0gIGUtPlN5bSA9IGVTeW07Ci0gIGUtPk9uZXh0ID0gTlVM
TDsKLSAgZS0+TG5leHQgPSBOVUxMOwotICBlLT5PcmcgPSBOVUxMOwotICBlLT5MZmFjZSA9IE5V
TEw7Ci0gIGUtPndpbmRpbmcgPSAwOwotICBlLT5hY3RpdmVSZWdpb24gPSBOVUxMOwotCi0gIGVT
eW0tPm5leHQgPSBlU3ltOwotICBlU3ltLT5TeW0gPSBlOwotICBlU3ltLT5PbmV4dCA9IE5VTEw7
Ci0gIGVTeW0tPkxuZXh0ID0gTlVMTDsKLSAgZVN5bS0+T3JnID0gTlVMTDsKLSAgZVN5bS0+TGZh
Y2UgPSBOVUxMOwotICBlU3ltLT53aW5kaW5nID0gMDsKLSAgZVN5bS0+YWN0aXZlUmVnaW9uID0g
TlVMTDsKLQotICByZXR1cm4gbWVzaDsKLX0KLQotCi0vKiBfX2dsX21lc2hVbmlvbiggbWVzaDEs
IG1lc2gyICkgZm9ybXMgdGhlIHVuaW9uIG9mIGFsbCBzdHJ1Y3R1cmVzIGluCi0gKiBib3RoIG1l
c2hlcywgYW5kIHJldHVybnMgdGhlIG5ldyBtZXNoICh0aGUgb2xkIG1lc2hlcyBhcmUgZGVzdHJv
eWVkKS4KLSAqLwotR0xVbWVzaCAqX19nbF9tZXNoVW5pb24oIEdMVW1lc2ggKm1lc2gxLCBHTFVt
ZXNoICptZXNoMiApCi17Ci0gIEdMVWZhY2UgKmYxID0gJm1lc2gxLT5mSGVhZDsKLSAgR0xVdmVy
dGV4ICp2MSA9ICZtZXNoMS0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdlICplMSA9ICZtZXNoMS0+ZUhl
YWQ7Ci0gIEdMVWZhY2UgKmYyID0gJm1lc2gyLT5mSGVhZDsKLSAgR0xVdmVydGV4ICp2MiA9ICZt
ZXNoMi0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdlICplMiA9ICZtZXNoMi0+ZUhlYWQ7Ci0KLSAgLyog
QWRkIHRoZSBmYWNlcywgdmVydGljZXMsIGFuZCBlZGdlcyBvZiBtZXNoMiB0byB0aG9zZSBvZiBt
ZXNoMSAqLwotICBpZiggZjItPm5leHQgIT0gZjIgKSB7Ci0gICAgZjEtPnByZXYtPm5leHQgPSBm
Mi0+bmV4dDsKLSAgICBmMi0+bmV4dC0+cHJldiA9IGYxLT5wcmV2OwotICAgIGYyLT5wcmV2LT5u
ZXh0ID0gZjE7Ci0gICAgZjEtPnByZXYgPSBmMi0+cHJldjsKLSAgfQotCi0gIGlmKCB2Mi0+bmV4
dCAhPSB2MiApIHsKLSAgICB2MS0+cHJldi0+bmV4dCA9IHYyLT5uZXh0OwotICAgIHYyLT5uZXh0
LT5wcmV2ID0gdjEtPnByZXY7Ci0gICAgdjItPnByZXYtPm5leHQgPSB2MTsKLSAgICB2MS0+cHJl
diA9IHYyLT5wcmV2OwotICB9Ci0KLSAgaWYoIGUyLT5uZXh0ICE9IGUyICkgewotICAgIGUxLT5T
eW0tPm5leHQtPlN5bS0+bmV4dCA9IGUyLT5uZXh0OwotICAgIGUyLT5uZXh0LT5TeW0tPm5leHQg
PSBlMS0+U3ltLT5uZXh0OwotICAgIGUyLT5TeW0tPm5leHQtPlN5bS0+bmV4dCA9IGUxOwotICAg
IGUxLT5TeW0tPm5leHQgPSBlMi0+U3ltLT5uZXh0OwotICB9Ci0KLSAgbWVtRnJlZSggbWVzaDIg
KTsKLSAgcmV0dXJuIG1lc2gxOwotfQotCi0KLSNpZmRlZiBERUxFVEVfQllfWkFQUElORwotCi0v
KiBfX2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBzdG9yYWdlIGZvciBh
bnkgdmFsaWQgbWVzaC4KLSAqLwotdm9pZCBfX2dsX21lc2hEZWxldGVNZXNoKCBHTFVtZXNoICpt
ZXNoICkKLXsKLSAgR0xVZmFjZSAqZkhlYWQgPSAmbWVzaC0+ZkhlYWQ7Ci0KLSAgd2hpbGUoIGZI
ZWFkLT5uZXh0ICE9IGZIZWFkICkgewotICAgIF9fZ2xfbWVzaFphcEZhY2UoIGZIZWFkLT5uZXh0
ICk7Ci0gIH0KLSAgYXNzZXJ0KCBtZXNoLT52SGVhZC5uZXh0ID09ICZtZXNoLT52SGVhZCApOwot
Ci0gIG1lbUZyZWUoIG1lc2ggKTsKLX0KLQotI2Vsc2UKLQotLyogX19nbF9tZXNoRGVsZXRlTWVz
aCggbWVzaCApIHdpbGwgZnJlZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZhbGlkIG1lc2guCi0gKi8K
LXZvaWQgX19nbF9tZXNoRGVsZXRlTWVzaCggR0xVbWVzaCAqbWVzaCApCi17Ci0gIEdMVWZhY2Ug
KmYsICpmTmV4dDsKLSAgR0xVdmVydGV4ICp2LCAqdk5leHQ7Ci0gIEdMVWhhbGZFZGdlICplLCAq
ZU5leHQ7Ci0KLSAgZm9yKCBmID0gbWVzaC0+ZkhlYWQubmV4dDsgZiAhPSAmbWVzaC0+ZkhlYWQ7
IGYgPSBmTmV4dCApIHsKLSAgICBmTmV4dCA9IGYtPm5leHQ7Ci0gICAgbWVtRnJlZSggZiApOwot
ICB9Ci0KLSAgZm9yKCB2ID0gbWVzaC0+dkhlYWQubmV4dDsgdiAhPSAmbWVzaC0+dkhlYWQ7IHYg
PSB2TmV4dCApIHsKLSAgICB2TmV4dCA9IHYtPm5leHQ7Ci0gICAgbWVtRnJlZSggdiApOwotICB9
Ci0KLSAgZm9yKCBlID0gbWVzaC0+ZUhlYWQubmV4dDsgZSAhPSAmbWVzaC0+ZUhlYWQ7IGUgPSBl
TmV4dCApIHsKLSAgICAvKiBPbmUgY2FsbCBmcmVlcyBib3RoIGUgYW5kIGUtPlN5bSAoc2VlIEVk
Z2VQYWlyIGFib3ZlKSAqLwotICAgIGVOZXh0ID0gZS0+bmV4dDsKLSAgICBtZW1GcmVlKCBlICk7
Ci0gIH0KLQotICBtZW1GcmVlKCBtZXNoICk7Ci19Ci0KLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJV
RwotCi0vKiBfX2dsX21lc2hDaGVja01lc2goIG1lc2ggKSBjaGVja3MgYSBtZXNoIGZvciBzZWxm
LWNvbnNpc3RlbmN5LgotICovCi12b2lkIF9fZ2xfbWVzaENoZWNrTWVzaCggR0xVbWVzaCAqbWVz
aCApCi17Ci0gIEdMVWZhY2UgKmZIZWFkID0gJm1lc2gtPmZIZWFkOwotICBHTFV2ZXJ0ZXggKnZI
ZWFkID0gJm1lc2gtPnZIZWFkOwotICBHTFVoYWxmRWRnZSAqZUhlYWQgPSAmbWVzaC0+ZUhlYWQ7
Ci0gIEdMVWZhY2UgKmYsICpmUHJldjsKLSAgR0xVdmVydGV4ICp2LCAqdlByZXY7Ci0gIEdMVWhh
bGZFZGdlICplLCAqZVByZXY7Ci0KLSAgZlByZXYgPSBmSGVhZDsKLSAgZm9yKCBmUHJldiA9IGZI
ZWFkIDsgKGYgPSBmUHJldi0+bmV4dCkgIT0gZkhlYWQ7IGZQcmV2ID0gZikgewotICAgIGFzc2Vy
dCggZi0+cHJldiA9PSBmUHJldiApOwotICAgIGUgPSBmLT5hbkVkZ2U7Ci0gICAgZG8gewotICAg
ICAgYXNzZXJ0KCBlLT5TeW0gIT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5TeW0tPlN5bSA9PSBl
ICk7Ci0gICAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+U3ltID09IGUgKTsKLSAgICAgIGFz
c2VydCggZS0+T25leHQtPlN5bS0+TG5leHQgPT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5MZmFj
ZSA9PSBmICk7Ci0gICAgICBlID0gZS0+TG5leHQ7Ci0gICAgfSB3aGlsZSggZSAhPSBmLT5hbkVk
Z2UgKTsKLSAgfQotICBhc3NlcnQoIGYtPnByZXYgPT0gZlByZXYgJiYgZi0+YW5FZGdlID09IE5V
TEwgJiYgZi0+ZGF0YSA9PSBOVUxMICk7Ci0KLSAgdlByZXYgPSB2SGVhZDsKLSAgZm9yKCB2UHJl
diA9IHZIZWFkIDsgKHYgPSB2UHJldi0+bmV4dCkgIT0gdkhlYWQ7IHZQcmV2ID0gdikgewotICAg
IGFzc2VydCggdi0+cHJldiA9PSB2UHJldiApOwotICAgIGUgPSB2LT5hbkVkZ2U7Ci0gICAgZG8g
ewotICAgICAgYXNzZXJ0KCBlLT5TeW0gIT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5TeW0tPlN5
bSA9PSBlICk7Ci0gICAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+U3ltID09IGUgKTsKLSAg
ICAgIGFzc2VydCggZS0+T25leHQtPlN5bS0+TG5leHQgPT0gZSApOwotICAgICAgYXNzZXJ0KCBl
LT5PcmcgPT0gdiApOwotICAgICAgZSA9IGUtPk9uZXh0OwotICAgIH0gd2hpbGUoIGUgIT0gdi0+
YW5FZGdlICk7Ci0gIH0KLSAgYXNzZXJ0KCB2LT5wcmV2ID09IHZQcmV2ICYmIHYtPmFuRWRnZSA9
PSBOVUxMICYmIHYtPmRhdGEgPT0gTlVMTCApOwotCi0gIGVQcmV2ID0gZUhlYWQ7Ci0gIGZvcigg
ZVByZXYgPSBlSGVhZCA7IChlID0gZVByZXYtPm5leHQpICE9IGVIZWFkOyBlUHJldiA9IGUpIHsK
LSAgICBhc3NlcnQoIGUtPlN5bS0+bmV4dCA9PSBlUHJldi0+U3ltICk7Ci0gICAgYXNzZXJ0KCBl
LT5TeW0gIT0gZSApOwotICAgIGFzc2VydCggZS0+U3ltLT5TeW0gPT0gZSApOwotICAgIGFzc2Vy
dCggZS0+T3JnICE9IE5VTEwgKTsKLSAgICBhc3NlcnQoIGUtPkRzdCAhPSBOVUxMICk7Ci0gICAg
YXNzZXJ0KCBlLT5MbmV4dC0+T25leHQtPlN5bSA9PSBlICk7Ci0gICAgYXNzZXJ0KCBlLT5PbmV4
dC0+U3ltLT5MbmV4dCA9PSBlICk7Ci0gIH0KLSAgYXNzZXJ0KCBlLT5TeW0tPm5leHQgPT0gZVBy
ZXYtPlN5bQotICAgICAgICYmIGUtPlN5bSA9PSAmbWVzaC0+ZUhlYWRTeW0KLSAgICAgICAmJiBl
LT5TeW0tPlN5bSA9PSBlCi0gICAgICAgJiYgZS0+T3JnID09IE5VTEwgJiYgZS0+RHN0ID09IE5V
TEwKLSAgICAgICAmJiBlLT5MZmFjZSA9PSBOVUxMICYmIGUtPlJmYWNlID09IE5VTEwgKTsKLX0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21l
c2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L21lc2guaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL21lc2guaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSoq
IExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2Yg
dGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2Ug
YXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJz
aW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFy
ZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkg
bm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBH
cmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRy
ZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiog
aHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMg
cHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBh
bgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5U
SUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElN
SVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVS
Q0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFS
VElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwg
Q29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24s
Ci0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQg
YnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJp
Z2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGlu
IGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0q
KiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlv
bmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJm
YWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdp
bmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZp
Y2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4z
KSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRo
IHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9i
ZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBi
eSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwot
KiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRp
b24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0q
KiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1
L2xpYnRlc3MvbWVzaC5oIzUgJAotKi8KLQotI2lmbmRlZiBfX21lc2hfaF8KLSNkZWZpbmUgX19t
ZXNoX2hfCi0KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKLQotdHlw
ZWRlZiBzdHJ1Y3QgR0xVbWVzaCBHTFVtZXNoOyAKLQotdHlwZWRlZiBzdHJ1Y3QgR0xVdmVydGV4
IEdMVXZlcnRleDsKLXR5cGVkZWYgc3RydWN0IEdMVWZhY2UgR0xVZmFjZTsKLXR5cGVkZWYgc3Ry
dWN0IEdMVWhhbGZFZGdlIEdMVWhhbGZFZGdlOwotCi10eXBlZGVmIHN0cnVjdCBBY3RpdmVSZWdp
b24gQWN0aXZlUmVnaW9uOwkvKiBJbnRlcm5hbCBkYXRhICovCi0KLS8qIFRoZSBtZXNoIHN0cnVj
dHVyZSBpcyBzaW1pbGFyIGluIHNwaXJpdCwgbm90YXRpb24sIGFuZCBvcGVyYXRpb25zCi0gKiB0
byB0aGUgInF1YWQtZWRnZSIgc3RydWN0dXJlIChzZWUgTC4gR3VpYmFzIGFuZCBKLiBTdG9sZmks
IFByaW1pdGl2ZXMKLSAqIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9mIGdlbmVyYWwgc3ViZGl2aXNp
b25zIGFuZCB0aGUgY29tcHV0YXRpb24gb2YKLSAqIFZvcm9ub2kgZGlhZ3JhbXMsIEFDTSBUcmFu
c2FjdGlvbnMgb24gR3JhcGhpY3MsIDQoMik6NzQtMTIzLCBBcHJpbCAxOTg1KS4KLSAqIEZvciBh
IHNpbXBsaWZpZWQgZGVzY3JpcHRpb24sIHNlZSB0aGUgY291cnNlIG5vdGVzIGZvciBDUzM0OGEs
Ci0gKiAiTWF0aGVtYXRpY2FsIEZvdW5kYXRpb25zIG9mIENvbXB1dGVyIEdyYXBoaWNzIiwgYXZh
aWxhYmxlIGF0IHRoZQotICogU3RhbmZvcmQgYm9va3N0b3JlIChhbmQgdGF1Z2h0IGR1cmluZyB0
aGUgZmFsbCBxdWFydGVyKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGJvcnJvd3MgYSB0
aW55IHN1YnNldCBvZiB0aGUgZ3JhcGgtYmFzZWQgYXBwcm9hY2gKLSAqIHVzZSBpbiBNYW50eWxh
J3MgR2VvbWV0cmljIFdvcmsgQmVuY2ggKHNlZSBNLiBNYW50eWxhLCBBbiBJbnRyb2R1Y3Rpb24K
LSAqIHRvIFNvbGQgTW9kZWxpbmcsIENvbXB1dGVyIFNjaWVuY2UgUHJlc3MsIFJvY2t2aWxsZSwg
TWFyeWxhbmQsIDE5ODgpLgotICoKLSAqIFRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSBp
cyB0aGUgImhhbGYtZWRnZSIuICBUd28gaGFsZi1lZGdlcwotICogZ28gdG9nZXRoZXIgdG8gbWFr
ZSBhbiBlZGdlLCBidXQgdGhleSBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLgotICogRWFj
aCBoYWxmLWVkZ2UgaGFzIGEgcG9pbnRlciB0byBpdHMgbWF0ZSAodGhlICJzeW1tZXRyaWMiIGhh
bGYtZWRnZSBTeW0pLAotICogaXRzIG9yaWdpbiB2ZXJ0ZXggKE9yZyksIHRoZSBmYWNlIG9uIGl0
cyBsZWZ0IHNpZGUgKExmYWNlKSwgYW5kIHRoZQotICogYWRqYWNlbnQgaGFsZi1lZGdlcyBpbiB0
aGUgQ0NXIGRpcmVjdGlvbiBhcm91bmQgdGhlIG9yaWdpbiB2ZXJ0ZXgKLSAqIChPbmV4dCkgYW5k
IGFyb3VuZCB0aGUgbGVmdCBmYWNlIChMbmV4dCkuICBUaGVyZSBpcyBhbHNvIGEgIm5leHQiCi0g
KiBwb2ludGVyIGZvciB0aGUgZ2xvYmFsIGVkZ2UgbGlzdCAoc2VlIGJlbG93KS4KLSAqCi0gKiBU
aGUgbm90YXRpb24gdXNlZCBmb3IgbWVzaCBuYXZpZ2F0aW9uOgotICoJU3ltICAgPSB0aGUgbWF0
ZSBvZiBhIGhhbGYtZWRnZSAoc2FtZSBlZGdlLCBidXQgb3Bwb3NpdGUgZGlyZWN0aW9uKQotICoJ
T25leHQgPSBlZGdlIENDVyBhcm91bmQgb3JpZ2luIHZlcnRleCAoa2VlcCBzYW1lIG9yaWdpbikK
LSAqCURuZXh0ID0gZWRnZSBDQ1cgYXJvdW5kIGRlc3RpbmF0aW9uIHZlcnRleCAoa2VlcCBzYW1l
IGRlc3QpCi0gKglMbmV4dCA9IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKGRlc3QgYmVjb21l
cyBuZXcgb3JpZ2luKQotICoJUm5leHQgPSBlZGdlIENDVyBhcm91bmQgcmlnaHQgZmFjZSAob3Jp
Z2luIGJlY29tZXMgbmV3IGRlc3QpCi0gKgotICogInByZXYiIG1lYW5zIHRvIHN1YnN0aXR1dGUg
Q1cgZm9yIENDVyBpbiB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCi0gKgotICogVGhlIG1lc2gga2Vl
cHMgZ2xvYmFsIGxpc3RzIG9mIGFsbCB2ZXJ0aWNlcywgZmFjZXMsIGFuZCBlZGdlcywKLSAqIHN0
b3JlZCBhcyBkb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3RzIHdpdGggYSBkdW1teSBoZWFkZXIg
bm9kZS4KLSAqIFRoZSBtZXNoIHN0b3JlcyBwb2ludGVycyB0byB0aGVzZSBkdW1teSBoZWFkZXJz
ICh2SGVhZCwgZkhlYWQsIGVIZWFkKS4KLSAqCi0gKiBUaGUgY2lyY3VsYXIgZWRnZSBsaXN0IGlz
IHNwZWNpYWw7IHNpbmNlIGhhbGYtZWRnZXMgYWx3YXlzIG9jY3VyCi0gKiBpbiBwYWlycyAoZSBh
bmQgZS0+U3ltKSwgZWFjaCBoYWxmLWVkZ2Ugc3RvcmVzIGEgcG9pbnRlciBpbiBvbmx5Ci0gKiBv
bmUgZGlyZWN0aW9uLiAgU3RhcnRpbmcgYXQgZUhlYWQgYW5kIGZvbGxvd2luZyB0aGUgZS0+bmV4
dCBwb2ludGVycwotICogd2lsbCB2aXNpdCBlYWNoICplZGdlKiBvbmNlIChpZS4gZSBvciBlLT5T
eW0sIGJ1dCBub3QgYm90aCkuCi0gKiBlLT5TeW0gc3RvcmVzIGEgcG9pbnRlciBpbiB0aGUgb3Bw
b3NpdGUgZGlyZWN0aW9uLCB0aHVzIGl0IGlzCi0gKiBhbHdheXMgdHJ1ZSB0aGF0IGUtPlN5bS0+
bmV4dC0+U3ltLT5uZXh0ID09IGUuCi0gKgotICogRWFjaCB2ZXJ0ZXggaGFzIGEgcG9pbnRlciB0
byBuZXh0IGFuZCBwcmV2aW91cyB2ZXJ0aWNlcyBpbiB0aGUKLSAqIGNpcmN1bGFyIGxpc3QsIGFu
ZCBhIHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIHZlcnRleCBhcwotICogdGhlIG9y
aWdpbiAoTlVMTCBpZiB0aGlzIGlzIHRoZSBkdW1teSBoZWFkZXIpLiAgVGhlcmUgaXMgYWxzbyBh
Ci0gKiBmaWVsZCAiZGF0YSIgZm9yIGNsaWVudCBkYXRhLgotICoKLSAqIEVhY2ggZmFjZSBoYXMg
YSBwb2ludGVyIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBmYWNlcyBpbiB0aGUKLSAqIGNpcmN1
bGFyIGxpc3QsIGFuZCBhIHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIGZhY2UgYXMK
LSAqIHRoZSBsZWZ0IGZhY2UgKE5VTEwgaWYgdGhpcyBpcyB0aGUgZHVtbXkgaGVhZGVyKS4gIFRo
ZXJlIGlzIGFsc28KLSAqIGEgZmllbGQgImRhdGEiIGZvciBjbGllbnQgZGF0YS4KLSAqCi0gKiBO
b3RlIHRoYXQgd2hhdCB3ZSBjYWxsIGEgImZhY2UiIGlzIHJlYWxseSBhIGxvb3A7IGZhY2VzIG1h
eSBjb25zaXN0Ci0gKiBvZiBtb3JlIHRoYW4gb25lIGxvb3AgKGllLiBub3Qgc2ltcGx5IGNvbm5l
Y3RlZCksIGJ1dCB0aGVyZSBpcyBubwotICogcmVjb3JkIG9mIHRoaXMgaW4gdGhlIGRhdGEgc3Ry
dWN0dXJlLiAgVGhlIG1lc2ggbWF5IGNvbnNpc3Qgb2YKLSAqIHNldmVyYWwgZGlzY29ubmVjdGVk
IHJlZ2lvbnMsIHNvIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gdmlzaXQKLSAqIHRoZSBlbnRp
cmUgbWVzaCBieSBzdGFydGluZyBhdCBhIGhhbGYtZWRnZSBhbmQgdHJhdmVyc2luZyB0aGUgZWRn
ZQotICogc3RydWN0dXJlLgotICoKLSAqIFRoZSBtZXNoIGRvZXMgTk9UIHN1cHBvcnQgaXNvbGF0
ZWQgdmVydGljZXM7IGEgdmVydGV4IGlzIGRlbGV0ZWQgYWxvbmcKLSAqIHdpdGggaXRzIGxhc3Qg
ZWRnZS4gIFNpbWlsYXJseSB3aGVuIHR3byBmYWNlcyBhcmUgbWVyZ2VkLCBvbmUgb2YgdGhlCi0g
KiBmYWNlcyBpcyBkZWxldGVkIChzZWUgX19nbF9tZXNoRGVsZXRlIGJlbG93KS4gIEZvciBtZXNo
IG9wZXJhdGlvbnMsCi0gKiBhbGwgZmFjZSAobG9vcCkgYW5kIHZlcnRleCBwb2ludGVycyBtdXN0
IG5vdCBiZSBOVUxMLiAgSG93ZXZlciwgb25jZQotICogbWVzaCBtYW5pcHVsYXRpb24gaXMgZmlu
aXNoZWQsIF9fZ2xfTWVzaFphcEZhY2UgY2FuIGJlIHVzZWQgdG8gZGVsZXRlCi0gKiBmYWNlcyBv
ZiB0aGUgbWVzaCwgb25lIGF0IGEgdGltZS4gIEFsbCBleHRlcm5hbCBmYWNlcyBjYW4gYmUgInph
cHBlZCIKLSAqIGJlZm9yZSB0aGUgbWVzaCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50OyB0aGVu
IGEgTlVMTCBmYWNlIGluZGljYXRlcwotICogYSByZWdpb24gd2hpY2ggaXMgbm90IHBhcnQgb2Yg
dGhlIG91dHB1dCBwb2x5Z29uLgotICovCi0KLXN0cnVjdCBHTFV2ZXJ0ZXggewotICBHTFV2ZXJ0
ZXgJKm5leHQ7CQkvKiBuZXh0IHZlcnRleCAobmV2ZXIgTlVMTCkgKi8KLSAgR0xVdmVydGV4CSpw
cmV2OwkJLyogcHJldmlvdXMgdmVydGV4IChuZXZlciBOVUxMKSAqLwotICBHTFVoYWxmRWRnZQkq
YW5FZGdlOwkvKiBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgb3JpZ2luICovCi0gIHZvaWQJCSpkYXRh
OwkJLyogY2xpZW50J3MgZGF0YSAqLwotCi0gIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVu
KSAqLwotICBHTGRvdWJsZQljb29yZHNbM107CS8qIHZlcnRleCBsb2NhdGlvbiBpbiAzRCAqLwot
ICBHTGRvdWJsZQlzLCB0OwkJLyogcHJvamVjdGlvbiBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLwot
ICBsb25nCQlwcUhhbmRsZTsJLyogdG8gYWxsb3cgZGVsZXRpb24gZnJvbSBwcmlvcml0eSBxdWV1
ZSAqLwotfTsKLQotc3RydWN0IEdMVWZhY2UgewotICBHTFVmYWNlCSpuZXh0OwkJLyogbmV4dCBm
YWNlIChuZXZlciBOVUxMKSAqLwotICBHTFVmYWNlCSpwcmV2OwkJLyogcHJldmlvdXMgZmFjZSAo
bmV2ZXIgTlVMTCkgKi8KLSAgR0xVaGFsZkVkZ2UJKmFuRWRnZTsJLyogYSBoYWxmIGVkZ2Ugd2l0
aCB0aGlzIGxlZnQgZmFjZSAqLwotICB2b2lkCQkqZGF0YTsJCS8qIHJvb20gZm9yIGNsaWVudCdz
IGRhdGEgKi8KLQotICAvKiBJbnRlcm5hbCBkYXRhIChrZWVwIGhpZGRlbikgKi8KLSAgR0xVZmFj
ZQkqdHJhaWw7CQkvKiAic3RhY2siIGZvciBjb252ZXJzaW9uIHRvIHN0cmlwcyAqLwotICBHTGJv
b2xlYW4JbWFya2VkOwkJLyogZmxhZyBmb3IgY29udmVyc2lvbiB0byBzdHJpcHMgKi8KLSAgR0xi
b29sZWFuCWluc2lkZTsJCS8qIHRoaXMgZmFjZSBpcyBpbiB0aGUgcG9seWdvbiBpbnRlcmlvciAq
LwotfTsKLQotc3RydWN0IEdMVWhhbGZFZGdlIHsKLSAgR0xVaGFsZkVkZ2UJKm5leHQ7CQkvKiBk
b3VibHktbGlua2VkIGxpc3QgKHByZXY9PVN5bS0+bmV4dCkgKi8KLSAgR0xVaGFsZkVkZ2UJKlN5
bTsJCS8qIHNhbWUgZWRnZSwgb3Bwb3NpdGUgZGlyZWN0aW9uICovCi0gIEdMVWhhbGZFZGdlCSpP
bmV4dDsJCS8qIG5leHQgZWRnZSBDQ1cgYXJvdW5kIG9yaWdpbiAqLwotICBHTFVoYWxmRWRnZQkq
TG5leHQ7CQkvKiBuZXh0IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKi8KLSAgR0xVdmVydGV4
CSpPcmc7CQkvKiBvcmlnaW4gdmVydGV4IChPdmVydGV4IHRvbyBsb25nKSAqLwotICBHTFVmYWNl
CSpMZmFjZTsJCS8qIGxlZnQgZmFjZSAqLwotCi0gIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlk
ZGVuKSAqLwotICBBY3RpdmVSZWdpb24JKmFjdGl2ZVJlZ2lvbjsJLyogYSByZWdpb24gd2l0aCB0
aGlzIHVwcGVyIGVkZ2UgKHN3ZWVwLmMpICovCi0gIGludAkJd2luZGluZzsJLyogY2hhbmdlIGlu
IHdpbmRpbmcgbnVtYmVyIHdoZW4gY3Jvc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJvbSB0aGUgcmlnaHQgZmFjZSB0byB0aGUgbGVmdCBmYWNlICovCi19OwotCi0j
ZGVmaW5lCVJmYWNlCVN5bS0+TGZhY2UKLSNkZWZpbmUgRHN0CVN5bS0+T3JnCi0KLSNkZWZpbmUg
T3ByZXYJU3ltLT5MbmV4dAotI2RlZmluZSBMcHJldiAgIE9uZXh0LT5TeW0KLSNkZWZpbmUgRHBy
ZXYJTG5leHQtPlN5bQotI2RlZmluZSBScHJldglTeW0tPk9uZXh0Ci0jZGVmaW5lIERuZXh0CVJw
cmV2LT5TeW0JLyogMyBwb2ludGVycyAqLwotI2RlZmluZSBSbmV4dAlPcHJldi0+U3ltCS8qIDMg
cG9pbnRlcnMgKi8KLQotCi1zdHJ1Y3QgR0xVbWVzaCB7Ci0gIEdMVXZlcnRleAl2SGVhZDsJCS8q
IGR1bW15IGhlYWRlciBmb3IgdmVydGV4IGxpc3QgKi8KLSAgR0xVZmFjZQlmSGVhZDsJCS8qIGR1
bW15IGhlYWRlciBmb3IgZmFjZSBsaXN0ICovCi0gIEdMVWhhbGZFZGdlCWVIZWFkOwkJLyogZHVt
bXkgaGVhZGVyIGZvciBlZGdlIGxpc3QgKi8KLSAgR0xVaGFsZkVkZ2UJZUhlYWRTeW07CS8qIGFu
ZCBpdHMgc3ltbWV0cmljIGNvdW50ZXJwYXJ0ICovCi19OwotCi0vKiBUaGUgbWVzaCBvcGVyYXRp
b25zIGJlbG93IGhhdmUgdGhyZWUgbW90aXZhdGlvbnM6IGNvbXBsZXRlbmVzcywKLSAqIGNvbnZl
bmllbmNlLCBhbmQgZWZmaWNpZW5jeS4gIFRoZSBiYXNpYyBtZXNoIG9wZXJhdGlvbnMgYXJlIE1h
a2VFZGdlLAotICogU3BsaWNlLCBhbmQgRGVsZXRlLiAgQWxsIHRoZSBvdGhlciBlZGdlIG9wZXJh
dGlvbnMgY2FuIGJlIGltcGxlbWVudGVkCi0gKiBpbiB0ZXJtcyBvZiB0aGVzZS4gIFRoZSBvdGhl
ciBvcGVyYXRpb25zIGFyZSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UKLSAqIGFuZC9vciBlZmZp
Y2llbmN5LgotICoKLSAqIFdoZW4gYSBmYWNlIGlzIHNwbGl0IG9yIGEgdmVydGV4IGlzIGFkZGVk
LCB0aGV5IGFyZSBpbnNlcnRlZCBpbnRvIHRoZQotICogZ2xvYmFsIGxpc3QgKmJlZm9yZSogdGhl
IGV4aXN0aW5nIHZlcnRleCBvciBmYWNlIChpZS4gZS0+T3JnIG9yIGUtPkxmYWNlKS4KLSAqIFRo
aXMgbWFrZXMgaXQgZWFzaWVyIHRvIHByb2Nlc3MgYWxsIHZlcnRpY2VzIG9yIGZhY2VzIGluIHRo
ZSBnbG9iYWwgbGlzdHMKLSAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcHJvY2Vzc2luZyB0aGUg
c2FtZSBkYXRhIHR3aWNlLiAgQXMgYSBjb252ZW5pZW5jZSwKLSAqIHdoZW4gYSBmYWNlIGlzIHNw
bGl0LCB0aGUgImluc2lkZSIgZmxhZyBpcyBjb3BpZWQgZnJvbSB0aGUgb2xkIGZhY2UuCi0gKiBP
dGhlciBpbnRlcm5hbCBkYXRhICh2LT5kYXRhLCB2LT5hY3RpdmVSZWdpb24sIGYtPmRhdGEsIGYt
Pm1hcmtlZCwKLSAqIGYtPnRyYWlsLCBlLT53aW5kaW5nKSBpcyBzZXQgdG8gemVyby4KLSAqCi0g
KiAqKioqKioqKioqKioqKioqKioqKioqIEJhc2ljIEVkZ2UgT3BlcmF0aW9ucyAqKioqKioqKioq
KioqKioqKioqKioqKioqKgotICoKLSAqIF9fZ2xfbWVzaE1ha2VFZGdlKCBtZXNoICkgY3JlYXRl
cyBvbmUgZWRnZSwgdHdvIHZlcnRpY2VzLCBhbmQgYSBsb29wLgotICogVGhlIGxvb3AgKGZhY2Up
IGNvbnNpc3RzIG9mIHRoZSB0d28gbmV3IGhhbGYtZWRnZXMuCi0gKgotICogX19nbF9tZXNoU3Bs
aWNlKCBlT3JnLCBlRHN0ICkgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBmb3IgY2hhbmdpbmcgdGhl
Ci0gKiBtZXNoIGNvbm5lY3Rpdml0eSBhbmQgdG9wb2xvZ3kuICBJdCBjaGFuZ2VzIHRoZSBtZXNo
IHNvIHRoYXQKLSAqCWVPcmctPk9uZXh0IDwtIE9MRCggZURzdC0+T25leHQgKQotICoJZURzdC0+
T25leHQgPC0gT0xEKCBlT3JnLT5PbmV4dCApCi0gKiB3aGVyZSBPTEQoLi4uKSBtZWFucyB0aGUg
dmFsdWUgYmVmb3JlIHRoZSBtZXNoU3BsaWNlIG9wZXJhdGlvbi4KLSAqCi0gKiBUaGlzIGNhbiBo
YXZlIHR3byBlZmZlY3RzIG9uIHRoZSB2ZXJ0ZXggc3RydWN0dXJlOgotICogIC0gaWYgZU9yZy0+
T3JnICE9IGVEc3QtPk9yZywgdGhlIHR3byB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0g
KiAgLSBpZiBlT3JnLT5PcmcgPT0gZURzdC0+T3JnLCB0aGUgb3JpZ2luIGlzIHNwbGl0IGludG8g
dHdvIHZlcnRpY2VzCi0gKiBJbiBib3RoIGNhc2VzLCBlRHN0LT5PcmcgaXMgY2hhbmdlZCBhbmQg
ZU9yZy0+T3JnIGlzIHVudG91Y2hlZC4KLSAqCi0gKiBTaW1pbGFybHkgKGFuZCBpbmRlcGVuZGVu
dGx5KSBmb3IgdGhlIGZhY2Ugc3RydWN0dXJlLAotICogIC0gaWYgZU9yZy0+TGZhY2UgPT0gZURz
dC0+TGZhY2UsIG9uZSBsb29wIGlzIHNwbGl0IGludG8gdHdvCi0gKiAgLSBpZiBlT3JnLT5MZmFj
ZSAhPSBlRHN0LT5MZmFjZSwgdHdvIGRpc3RpbmN0IGxvb3BzIGFyZSBqb2luZWQgaW50byBvbmUK
LSAqIEluIGJvdGggY2FzZXMsIGVEc3QtPkxmYWNlIGlzIGNoYW5nZWQgYW5kIGVPcmctPkxmYWNl
IGlzIHVuYWZmZWN0ZWQuCi0gKgotICogX19nbF9tZXNoRGVsZXRlKCBlRGVsICkgcmVtb3ZlcyB0
aGUgZWRnZSBlRGVsLiAgVGhlcmUgYXJlIHNldmVyYWwgY2FzZXM6Ci0gKiBpZiAoZURlbC0+TGZh
Y2UgIT0gZURlbC0+UmZhY2UpLCB3ZSBqb2luIHR3byBsb29wcyBpbnRvIG9uZTsgdGhlIGxvb3AK
LSAqIGVEZWwtPkxmYWNlIGlzIGRlbGV0ZWQuICBPdGhlcndpc2UsIHdlIGFyZSBzcGxpdHRpbmcg
b25lIGxvb3AgaW50byB0d287Ci0gKiB0aGUgbmV3bHkgY3JlYXRlZCBsb29wIHdpbGwgY29udGFp
biBlRGVsLT5Ec3QuICBJZiB0aGUgZGVsZXRpb24gb2YgZURlbAotICogd291bGQgY3JlYXRlIGlz
b2xhdGVkIHZlcnRpY2VzLCB0aG9zZSBhcmUgZGVsZXRlZCBhcyB3ZWxsLgotICoKLSAqICoqKioq
KioqKioqKioqKioqKioqKiogT3RoZXIgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioq
KioqKioqKioqCi0gKgotICogX19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApIGNyZWF0ZXMg
YSBuZXcgZWRnZSBlTmV3IHN1Y2ggdGhhdAotICogZU5ldyA9PSBlT3JnLT5MbmV4dCwgYW5kIGVO
ZXctPkRzdCBpcyBhIG5ld2x5IGNyZWF0ZWQgdmVydGV4LgotICogZU9yZyBhbmQgZU5ldyB3aWxs
IGhhdmUgdGhlIHNhbWUgbGVmdCBmYWNlLgotICoKLSAqIF9fZ2xfbWVzaFNwbGl0RWRnZSggZU9y
ZyApIHNwbGl0cyBlT3JnIGludG8gdHdvIGVkZ2VzIGVPcmcgYW5kIGVOZXcsCi0gKiBzdWNoIHRo
YXQgZU5ldyA9PSBlT3JnLT5MbmV4dC4gIFRoZSBuZXcgdmVydGV4IGlzIGVPcmctPkRzdCA9PSBl
TmV3LT5PcmcuCi0gKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZWZ0IGZhY2Uu
Ci0gKgotICogX19nbF9tZXNoQ29ubmVjdCggZU9yZywgZURzdCApIGNyZWF0ZXMgYSBuZXcgZWRn
ZSBmcm9tIGVPcmctPkRzdAotICogdG8gZURzdC0+T3JnLCBhbmQgcmV0dXJucyB0aGUgY29ycmVz
cG9uZGluZyBoYWxmLWVkZ2UgZU5ldy4KLSAqIElmIGVPcmctPkxmYWNlID09IGVEc3QtPkxmYWNl
LCB0aGlzIHNwbGl0cyBvbmUgbG9vcCBpbnRvIHR3bywKLSAqIGFuZCB0aGUgbmV3bHkgY3JlYXRl
ZCBsb29wIGlzIGVOZXctPkxmYWNlLiAgT3RoZXJ3aXNlLCB0d28gZGlzam9pbnQKLSAqIGxvb3Bz
IGFyZSBtZXJnZWQgaW50byBvbmUsIGFuZCB0aGUgbG9vcCBlRHN0LT5MZmFjZSBpcyBkZXN0cm95
ZWQuCi0gKgotICogKioqKioqKioqKioqKioqKioqKioqKioqIE90aGVyIE9wZXJhdGlvbnMgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBfX2dsX21lc2hOZXdNZXNoKCkgY3Jl
YXRlcyBhIG5ldyBtZXNoIHdpdGggbm8gZWRnZXMsIG5vIHZlcnRpY2VzLAotICogYW5kIG5vIGxv
b3BzICh3aGF0IHdlIHVzdWFsbHkgY2FsbCBhICJmYWNlIikuCi0gKgotICogX19nbF9tZXNoVW5p
b24oIG1lc2gxLCBtZXNoMiApIGZvcm1zIHRoZSB1bmlvbiBvZiBhbGwgc3RydWN0dXJlcyBpbgot
ICogYm90aCBtZXNoZXMsIGFuZCByZXR1cm5zIHRoZSBuZXcgbWVzaCAodGhlIG9sZCBtZXNoZXMg
YXJlIGRlc3Ryb3llZCkuCi0gKgotICogX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCApIHdpbGwg
ZnJlZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZhbGlkIG1lc2guCi0gKgotICogX19nbF9tZXNoWmFw
RmFjZSggZlphcCApIGRlc3Ryb3lzIGEgZmFjZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZQotICog
Z2xvYmFsIGZhY2UgbGlzdC4gIEFsbCBlZGdlcyBvZiBmWmFwIHdpbGwgaGF2ZSBhIE5VTEwgcG9p
bnRlciBhcyB0aGVpcgotICogbGVmdCBmYWNlLiAgQW55IGVkZ2VzIHdoaWNoIGFsc28gaGF2ZSBh
IE5VTEwgcG9pbnRlciBhcyB0aGVpciByaWdodCBmYWNlCi0gKiBhcmUgZGVsZXRlZCBlbnRpcmVs
eSAoYWxvbmcgd2l0aCBhbnkgaXNvbGF0ZWQgdmVydGljZXMgdGhpcyBwcm9kdWNlcykuCi0gKiBB
biBlbnRpcmUgbWVzaCBjYW4gYmUgZGVsZXRlZCBieSB6YXBwaW5nIGl0cyBmYWNlcywgb25lIGF0
IGEgdGltZSwKLSAqIGluIGFueSBvcmRlci4gIFphcHBlZCBmYWNlcyBjYW5ub3QgYmUgdXNlZCBp
biBmdXJ0aGVyIG1lc2ggb3BlcmF0aW9ucyEKLSAqCi0gKiBfX2dsX21lc2hDaGVja01lc2goIG1l
c2ggKSBjaGVja3MgYSBtZXNoIGZvciBzZWxmLWNvbnNpc3RlbmN5LgotICovCi0KLUdMVWhhbGZF
ZGdlCSpfX2dsX21lc2hNYWtlRWRnZSggR0xVbWVzaCAqbWVzaCApOwotaW50CQlfX2dsX21lc2hT
cGxpY2UoIEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApOwotaW50CQlfX2ds
X21lc2hEZWxldGUoIEdMVWhhbGZFZGdlICplRGVsICk7Ci0KLUdMVWhhbGZFZGdlCSpfX2dsX21l
c2hBZGRFZGdlVmVydGV4KCBHTFVoYWxmRWRnZSAqZU9yZyApOwotR0xVaGFsZkVkZ2UJKl9fZ2xf
bWVzaFNwbGl0RWRnZSggR0xVaGFsZkVkZ2UgKmVPcmcgKTsKLUdMVWhhbGZFZGdlCSpfX2dsX21l
c2hDb25uZWN0KCBHTFVoYWxmRWRnZSAqZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKTsKLQotR0xV
bWVzaAkJKl9fZ2xfbWVzaE5ld01lc2goIHZvaWQgKTsKLUdMVW1lc2gJCSpfX2dsX21lc2hVbmlv
biggR0xVbWVzaCAqbWVzaDEsIEdMVW1lc2ggKm1lc2gyICk7Ci12b2lkCQlfX2dsX21lc2hEZWxl
dGVNZXNoKCBHTFVtZXNoICptZXNoICk7Ci12b2lkCQlfX2dsX21lc2haYXBGYWNlKCBHTFVmYWNl
ICpmWmFwICk7Ci0KLSNpZmRlZiBOREVCVUcKLSNkZWZpbmUJCV9fZ2xfbWVzaENoZWNrTWVzaCgg
bWVzaCApCi0jZWxzZQotdm9pZAkJX19nbF9tZXNoQ2hlY2tNZXNoKCBHTFVtZXNoICptZXNoICk7
Ci0jZW5kaWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL25vcm1hbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvbm9ybWFsLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuYwkod29ya2luZyBjb3B5KQpAQCAtMSwyNTkg
KzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRl
bnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVy
bmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUg
TGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0
aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vu
c2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAK
LSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBv
ciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoq
IE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBk
aXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQg
SU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJ
TkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENP
TkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVT
UyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoq
IAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUg
SW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAy
MDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFs
IENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgot
KiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMg
YXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
KiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJv
Z3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9u
IHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmls
IDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAo
VmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChS
KSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyks
IHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVk
IHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24K
LSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJp
ZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1
bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9t
YWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9z
LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL3Rlc3MuaCIKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0j
ZGVmaW5lIERvdCh1LHYpCSh1WzBdKnZbMF0gKyB1WzFdKnZbMV0gKyB1WzJdKnZbMl0pCi0KLSNp
ZiBkZWZpbmVkKEZPUl9UUklURV9URVNUX1BST0dSQU0pIHx8IGRlZmluZWQoVFJVRV9QUk9KRUNU
KQotc3RhdGljIHZvaWQgTm9ybWFsaXplKCBHTGRvdWJsZSB2WzNdICkKLXsKLSAgR0xkb3VibGUg
bGVuID0gdlswXSp2WzBdICsgdlsxXSp2WzFdICsgdlsyXSp2WzJdOwotCi0gIGFzc2VydCggbGVu
ID4gMCApOwotICBsZW4gPSBzcXJ0KCBsZW4gKTsKLSAgdlswXSAvPSBsZW47Ci0gIHZbMV0gLz0g
bGVuOwotICB2WzJdIC89IGxlbjsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIEFCUyh4KQkoKHgpIDwg
MCA/IC0oeCkgOiAoeCkpCi0KLXN0YXRpYyBpbnQgTG9uZ0F4aXMoIEdMZG91YmxlIHZbM10gKQot
ewotICBpbnQgaSA9IDA7Ci0KLSAgaWYoIEFCUyh2WzFdKSA+IEFCUyh2WzBdKSApIHsgaSA9IDE7
IH0KLSAgaWYoIEFCUyh2WzJdKSA+IEFCUyh2W2ldKSApIHsgaSA9IDI7IH0KLSAgcmV0dXJuIGk7
Ci19Ci0KLXN0YXRpYyB2b2lkIENvbXB1dGVOb3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdM
ZG91YmxlIG5vcm1bM10gKQotewotICBHTFV2ZXJ0ZXggKnYsICp2MSwgKnYyOwotICBHTGRvdWJs
ZSBjLCB0TGVuMiwgbWF4TGVuMjsKLSAgR0xkb3VibGUgbWF4VmFsWzNdLCBtaW5WYWxbM10sIGQx
WzNdLCBkMlszXSwgdE5vcm1bM107Ci0gIEdMVXZlcnRleCAqbWF4VmVydFszXSwgKm1pblZlcnRb
M107Ci0gIEdMVXZlcnRleCAqdkhlYWQgPSAmdGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIGludCBpOwot
Ci0gIG1heFZhbFswXSA9IG1heFZhbFsxXSA9IG1heFZhbFsyXSA9IC0yICogR0xVX1RFU1NfTUFY
X0NPT1JEOwotICBtaW5WYWxbMF0gPSBtaW5WYWxbMV0gPSBtaW5WYWxbMl0gPSAyICogR0xVX1RF
U1NfTUFYX0NPT1JEOwotCi0gIGZvciggdiA9IHZIZWFkLT5uZXh0OyB2ICE9IHZIZWFkOyB2ID0g
di0+bmV4dCApIHsKLSAgICBmb3IoIGkgPSAwOyBpIDwgMzsgKytpICkgewotICAgICAgYyA9IHYt
PmNvb3Jkc1tpXTsKLSAgICAgIGlmKCBjIDwgbWluVmFsW2ldICkgeyBtaW5WYWxbaV0gPSBjOyBt
aW5WZXJ0W2ldID0gdjsgfQotICAgICAgaWYoIGMgPiBtYXhWYWxbaV0gKSB7IG1heFZhbFtpXSA9
IGM7IG1heFZlcnRbaV0gPSB2OyB9Ci0gICAgfQotICB9Ci0KLSAgLyogRmluZCB0d28gdmVydGlj
ZXMgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IDEvc3FydCgzKSBvZiB0aGUgbWF4aW11bQotICAgKiBk
aXN0YW5jZSBiZXR3ZWVuIGFueSB0d28gdmVydGljZXMKLSAgICovCi0gIGkgPSAwOwotICBpZigg
bWF4VmFsWzFdIC0gbWluVmFsWzFdID4gbWF4VmFsWzBdIC0gbWluVmFsWzBdICkgeyBpID0gMTsg
fQotICBpZiggbWF4VmFsWzJdIC0gbWluVmFsWzJdID4gbWF4VmFsW2ldIC0gbWluVmFsW2ldICkg
eyBpID0gMjsgfQotICBpZiggbWluVmFsW2ldID49IG1heFZhbFtpXSApIHsKLSAgICAvKiBBbGwg
dmVydGljZXMgYXJlIHRoZSBzYW1lIC0tIG5vcm1hbCBkb2Vzbid0IG1hdHRlciAqLwotICAgIG5v
cm1bMF0gPSAwOyBub3JtWzFdID0gMDsgbm9ybVsyXSA9IDE7Ci0gICAgcmV0dXJuOwotICB9Ci0K
LSAgLyogTG9vayBmb3IgYSB0aGlyZCB2ZXJ0ZXggd2hpY2ggZm9ybXMgdGhlIHRyaWFuZ2xlIHdp
dGggbWF4aW11bSBhcmVhCi0gICAqIChMZW5ndGggb2Ygbm9ybWFsID09IHR3aWNlIHRoZSB0cmlh
bmdsZSBhcmVhKQotICAgKi8KLSAgbWF4TGVuMiA9IDA7Ci0gIHYxID0gbWluVmVydFtpXTsKLSAg
djIgPSBtYXhWZXJ0W2ldOwotICBkMVswXSA9IHYxLT5jb29yZHNbMF0gLSB2Mi0+Y29vcmRzWzBd
OwotICBkMVsxXSA9IHYxLT5jb29yZHNbMV0gLSB2Mi0+Y29vcmRzWzFdOwotICBkMVsyXSA9IHYx
LT5jb29yZHNbMl0gLSB2Mi0+Y29vcmRzWzJdOwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAh
PSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgZDJbMF0gPSB2LT5jb29yZHNbMF0gLSB2Mi0+
Y29vcmRzWzBdOwotICAgIGQyWzFdID0gdi0+Y29vcmRzWzFdIC0gdjItPmNvb3Jkc1sxXTsKLSAg
ICBkMlsyXSA9IHYtPmNvb3Jkc1syXSAtIHYyLT5jb29yZHNbMl07Ci0gICAgdE5vcm1bMF0gPSBk
MVsxXSpkMlsyXSAtIGQxWzJdKmQyWzFdOwotICAgIHROb3JtWzFdID0gZDFbMl0qZDJbMF0gLSBk
MVswXSpkMlsyXTsKLSAgICB0Tm9ybVsyXSA9IGQxWzBdKmQyWzFdIC0gZDFbMV0qZDJbMF07Ci0g
ICAgdExlbjIgPSB0Tm9ybVswXSp0Tm9ybVswXSArIHROb3JtWzFdKnROb3JtWzFdICsgdE5vcm1b
Ml0qdE5vcm1bMl07Ci0gICAgaWYoIHRMZW4yID4gbWF4TGVuMiApIHsKLSAgICAgIG1heExlbjIg
PSB0TGVuMjsKLSAgICAgIG5vcm1bMF0gPSB0Tm9ybVswXTsKLSAgICAgIG5vcm1bMV0gPSB0Tm9y
bVsxXTsKLSAgICAgIG5vcm1bMl0gPSB0Tm9ybVsyXTsKLSAgICB9Ci0gIH0KLQotICBpZiggbWF4
TGVuMiA8PSAwICkgewotICAgIC8qIEFsbCBwb2ludHMgbGllIG9uIGEgc2luZ2xlIGxpbmUgLS0g
YW55IGRlY2VudCBub3JtYWwgd2lsbCBkbyAqLwotICAgIG5vcm1bMF0gPSBub3JtWzFdID0gbm9y
bVsyXSA9IDA7Ci0gICAgbm9ybVtMb25nQXhpcyhkMSldID0gMTsKLSAgfQotfQotICAKLQotc3Rh
dGljIHZvaWQgQ2hlY2tPcmllbnRhdGlvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIEdM
ZG91YmxlIGFyZWE7Ci0gIEdMVWZhY2UgKmYsICpmSGVhZCA9ICZ0ZXNzLT5tZXNoLT5mSGVhZDsK
LSAgR0xVdmVydGV4ICp2LCAqdkhlYWQgPSAmdGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIEdMVWhhbGZF
ZGdlICplOwotCi0gIC8qIFdoZW4gd2UgY29tcHV0ZSB0aGUgbm9ybWFsIGF1dG9tYXRpY2FsbHks
IHdlIGNob29zZSB0aGUgb3JpZW50YXRpb24KLSAgICogc28gdGhhdCB0aGUgdGhlIHN1bSBvZiB0
aGUgc2lnbmVkIGFyZWFzIG9mIGFsbCBjb250b3VycyBpcyBub24tbmVnYXRpdmUuCi0gICAqLwot
ICBhcmVhID0gMDsKLSAgZm9yKCBmID0gZkhlYWQtPm5leHQ7IGYgIT0gZkhlYWQ7IGYgPSBmLT5u
ZXh0ICkgewotICAgIGUgPSBmLT5hbkVkZ2U7Ci0gICAgaWYoIGUtPndpbmRpbmcgPD0gMCApIGNv
bnRpbnVlOwotICAgIGRvIHsKLSAgICAgIGFyZWEgKz0gKGUtPk9yZy0+cyAtIGUtPkRzdC0+cykg
KiAoZS0+T3JnLT50ICsgZS0+RHN0LT50KTsKLSAgICAgIGUgPSBlLT5MbmV4dDsKLSAgICB9IHdo
aWxlKCBlICE9IGYtPmFuRWRnZSApOwotICB9Ci0gIGlmKCBhcmVhIDwgMCApIHsKLSAgICAvKiBS
ZXZlcnNlIHRoZSBvcmllbnRhdGlvbiBieSBmbGlwcGluZyBhbGwgdGhlIHQtY29vcmRpbmF0ZXMg
Ki8KLSAgICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7
Ci0gICAgICB2LT50ID0gLSB2LT50OwotICAgIH0KLSAgICB0ZXNzLT50VW5pdFswXSA9IC0gdGVz
cy0+dFVuaXRbMF07Ci0gICAgdGVzcy0+dFVuaXRbMV0gPSAtIHRlc3MtPnRVbml0WzFdOwotICAg
IHRlc3MtPnRVbml0WzJdID0gLSB0ZXNzLT50VW5pdFsyXTsKLSAgfQotfQotCi0jaWZkZWYgRk9S
X1RSSVRFX1RFU1RfUFJPR1JBTQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotZXh0ZXJuIGludCBSYW5k
b21Td2VlcDsKLSNkZWZpbmUgU19VTklUX1gJKFJhbmRvbVN3ZWVwID8gKDIqZHJhbmQ0OCgpLTEp
IDogMS4wKQotI2RlZmluZSBTX1VOSVRfWQkoUmFuZG9tU3dlZXAgPyAoMipkcmFuZDQ4KCktMSkg
OiAwLjApCi0jZWxzZQotI2lmIGRlZmluZWQoU0xBTlRFRF9TV0VFUCkgCi0vKiBUaGUgImZlYXR1
cmUgbWVyZ2luZyIgaXMgbm90IGludGVuZGVkIHRvIGJlIGNvbXBsZXRlLiAgVGhlcmUgYXJlCi0g
KiBzcGVjaWFsIGNhc2VzIHdoZXJlIGVkZ2VzIGFyZSBuZWFybHkgcGFyYWxsZWwgdG8gdGhlIHN3
ZWVwIGxpbmUKLSAqIHdoaWNoIGFyZSBub3QgaW1wbGVtZW50ZWQuICBUaGUgYWxnb3JpdGhtIHNo
b3VsZCBzdGlsbCBiZWhhdmUKLSAqIHJvYnVzdGx5IChpZS4gcHJvZHVjZSBhIHJlYXNvbmFibGUg
dGVzc2VsYXRpb24pIGluIHRoZSBwcmVzZW5jZQotICogb2Ygc3VjaCBlZGdlcywgaG93ZXZlciBp
dCBtYXkgbWlzcyBmZWF0dXJlcyB3aGljaCBjb3VsZCBoYXZlIGJlZW4KLSAqIG1lcmdlZC4gIFdl
IGNvdWxkIG1pbmltaXplIHRoaXMgZWZmZWN0IGJ5IGNob29zaW5nIHRoZSBzd2VlcCBsaW5lCi0g
KiBkaXJlY3Rpb24gdG8gYmUgc29tZXRoaW5nIHVudXN1YWwgKGllLiBub3QgcGFyYWxsZWwgdG8g
b25lIG9mIHRoZQotICogY29vcmRpbmF0ZSBheGVzKS4KLSAqLwotI2RlZmluZSBTX1VOSVRfWAkw
LjUwOTQxNTM5NTY0OTU1Mzg1CS8qIFByZS1ub3JtYWxpemVkICovCi0jZGVmaW5lIFNfVU5JVF9Z
CTAuODYwNTIwNzQ2MjIwMTA2MzMKLSNlbHNlCi0jZGVmaW5lIFNfVU5JVF9YCTEuMAotI2RlZmlu
ZSBTX1VOSVRfWQkwLjAKLSNlbmRpZgotI2VuZGlmCi0KLS8qIERldGVybWluZSB0aGUgcG9seWdv
biBub3JtYWwgYW5kIHByb2plY3QgdmVydGljZXMgb250byB0aGUgcGxhbmUKLSAqIG9mIHRoZSBw
b2x5Z29uLgotICovCi12b2lkIF9fZ2xfcHJvamVjdFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRl
c3MgKQotewotICBHTFV2ZXJ0ZXggKnYsICp2SGVhZCA9ICZ0ZXNzLT5tZXNoLT52SGVhZDsKLSAg
R0xkb3VibGUgbm9ybVszXTsKLSAgR0xkb3VibGUgKnNVbml0LCAqdFVuaXQ7Ci0gIGludCBpLCBj
b21wdXRlZE5vcm1hbCA9IEZBTFNFOwotCi0gIG5vcm1bMF0gPSB0ZXNzLT5ub3JtYWxbMF07Ci0g
IG5vcm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07Ci0gIG5vcm1bMl0gPSB0ZXNzLT5ub3JtYWxbMl07
Ci0gIGlmKCBub3JtWzBdID09IDAgJiYgbm9ybVsxXSA9PSAwICYmIG5vcm1bMl0gPT0gMCApIHsK
LSAgICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBub3JtICk7Ci0gICAgY29tcHV0ZWROb3JtYWwgPSBU
UlVFOwotICB9Ci0gIHNVbml0ID0gdGVzcy0+c1VuaXQ7Ci0gIHRVbml0ID0gdGVzcy0+dFVuaXQ7
Ci0gIGkgPSBMb25nQXhpcyggbm9ybSApOwotCi0jaWYgZGVmaW5lZChGT1JfVFJJVEVfVEVTVF9Q
Uk9HUkFNKSB8fCBkZWZpbmVkKFRSVUVfUFJPSkVDVCkKLSAgLyogQ2hvb3NlIHRoZSBpbml0aWFs
IHNVbml0IHZlY3RvciB0byBiZSBhcHByb3hpbWF0ZWx5IHBlcnBlbmRpY3VsYXIKLSAgICogdG8g
dGhlIG5vcm1hbC4KLSAgICovCi0gIE5vcm1hbGl6ZSggbm9ybSApOwotCi0gIHNVbml0W2ldID0g
MDsKLSAgc1VuaXRbKGkrMSklM10gPSBTX1VOSVRfWDsKLSAgc1VuaXRbKGkrMiklM10gPSBTX1VO
SVRfWTsKLQotICAvKiBOb3cgbWFrZSBpdCBleGFjdGx5IHBlcnBlbmRpY3VsYXIgKi8KLSAgdyA9
IERvdCggc1VuaXQsIG5vcm0gKTsKLSAgc1VuaXRbMF0gLT0gdyAqIG5vcm1bMF07Ci0gIHNVbml0
WzFdIC09IHcgKiBub3JtWzFdOwotICBzVW5pdFsyXSAtPSB3ICogbm9ybVsyXTsKLSAgTm9ybWFs
aXplKCBzVW5pdCApOwotCi0gIC8qIENob29zZSB0VW5pdCBzbyB0aGF0IChzVW5pdCx0VW5pdCxu
b3JtKSBmb3JtIGEgcmlnaHQtaGFuZGVkIGZyYW1lICovCi0gIHRVbml0WzBdID0gbm9ybVsxXSpz
VW5pdFsyXSAtIG5vcm1bMl0qc1VuaXRbMV07Ci0gIHRVbml0WzFdID0gbm9ybVsyXSpzVW5pdFsw
XSAtIG5vcm1bMF0qc1VuaXRbMl07Ci0gIHRVbml0WzJdID0gbm9ybVswXSpzVW5pdFsxXSAtIG5v
cm1bMV0qc1VuaXRbMF07Ci0gIE5vcm1hbGl6ZSggdFVuaXQgKTsKLSNlbHNlCi0gIC8qIFByb2pl
Y3QgcGVycGVuZGljdWxhciB0byBhIGNvb3JkaW5hdGUgYXhpcyAtLSBiZXR0ZXIgbnVtZXJpY2Fs
bHkgKi8KLSAgc1VuaXRbaV0gPSAwOwotICBzVW5pdFsoaSsxKSUzXSA9IFNfVU5JVF9YOwotICBz
VW5pdFsoaSsyKSUzXSA9IFNfVU5JVF9ZOwotICAKLSAgdFVuaXRbaV0gPSAwOwotICB0VW5pdFso
aSsxKSUzXSA9IChub3JtW2ldID4gMCkgPyAtU19VTklUX1kgOiBTX1VOSVRfWTsKLSAgdFVuaXRb
KGkrMiklM10gPSAobm9ybVtpXSA+IDApID8gU19VTklUX1ggOiAtU19VTklUX1g7Ci0jZW5kaWYK
LQotICAvKiBQcm9qZWN0IHRoZSB2ZXJ0aWNlcyBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLwotICBm
b3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgdi0+
cyA9IERvdCggdi0+Y29vcmRzLCBzVW5pdCApOwotICAgIHYtPnQgPSBEb3QoIHYtPmNvb3Jkcywg
dFVuaXQgKTsKLSAgfQotICBpZiggY29tcHV0ZWROb3JtYWwgKSB7Ci0gICAgQ2hlY2tPcmllbnRh
dGlvbiggdGVzcyApOwotICB9Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL25vcm1hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MiArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAot
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgot
KiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
Ci0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9ub3JtYWwuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19u
b3JtYWxfaF8KLSNkZWZpbmUgX19ub3JtYWxfaF8KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvdGVzcy5oIgotCi0vKiBfX2dsX3Byb2plY3RQb2x5Z29uKCB0ZXNzICkgZGV0ZXJt
aW5lcyB0aGUgcG9seWdvbiBub3JtYWwKLSAqIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhl
IHBsYW5lIG9mIHRoZSBwb2x5Z29uLgotICovCi12b2lkIF9fZ2xfcHJvamVjdFBvbHlnb24oIEdM
VXRlc3NlbGF0b3IgKnRlc3MgKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3Jp
dHlxLWhlYXAuYwkod29ya2luZyBjb3B5KQpAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSoqIExpY2Vu
c2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBm
aWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVy
bWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEu
MSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJq
ZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVz
ZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJr
d2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDov
L29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlk
ZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiog
IkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFO
RCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElP
TiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRB
QklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxB
UiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4g
VGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBW
ZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2ls
aWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChj
KSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBw
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNl
d2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5v
dGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwot
KiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENv
ZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9u
IChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVs
ZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBY
Ci0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTks
IDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ks
IGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29t
cGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0q
KgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0
ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLWhlYXAuYyM1ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNs
dWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9wcmlvcml0eXEtaGVhcC5oIgotCi0jZGVmaW5lIElOSVRfU0laRQkzMgotCi0jZGVmaW5lIFRS
VUUgMQotI2RlZmluZSBGQUxTRSAwCi0KLSNpZmRlZiBGT1JfVFJJVEVfVEVTVF9QUk9HUkFNCi0j
ZGVmaW5lIExFUSh4LHkpCSgqcHEtPmxlcSkoeCx5KQotI2Vsc2UKLS8qIFZpb2xhdGVzIG1vZHVs
YXJpdHksIGJ1dCBhIGxpdHRsZSBmYXN0ZXIgKi8KLSNpbmNsdWRlICJnZW9tLmgiCi0jZGVmaW5l
IExFUSh4LHkpCVZlcnRMZXEoKEdMVXZlcnRleCAqKXgsIChHTFV2ZXJ0ZXggKil5KQotI2VuZGlm
Ci0KLS8qIHJlYWxseSBfX2dsX3BxSGVhcE5ld1ByaW9yaXR5USAqLwotUHJpb3JpdHlRICpwcU5l
d1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSApCi17Ci0gIFBy
aW9yaXR5USAqcHEgPSAoUHJpb3JpdHlRICopbWVtQWxsb2MoIHNpemVvZiggUHJpb3JpdHlRICkp
OwotICBpZiAocHEgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAgcHEtPnNpemUgPSAwOwotICBw
cS0+bWF4ID0gSU5JVF9TSVpFOwotICBwcS0+bm9kZXMgPSAoUFFub2RlICopbWVtQWxsb2MoIChJ
TklUX1NJWkUgKyAxKSAqIHNpemVvZihwcS0+bm9kZXNbMF0pICk7Ci0gIGlmIChwcS0+bm9kZXMg
PT0gTlVMTCkgewotICAgICBtZW1GcmVlKHBxKTsKLSAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBwcS0+aGFuZGxlcyA9IChQUWhhbmRsZUVsZW0gKiltZW1BbGxvYyggKElOSVRfU0laRSArIDEp
ICogc2l6ZW9mKHBxLT5oYW5kbGVzWzBdKSApOwotICBpZiAocHEtPmhhbmRsZXMgPT0gTlVMTCkg
ewotICAgICBtZW1GcmVlKHBxLT5ub2Rlcyk7Ci0gICAgIG1lbUZyZWUocHEpOwotICAgICByZXR1
cm4gTlVMTDsKLSAgfQotCi0gIHBxLT5pbml0aWFsaXplZCA9IEZBTFNFOwotICBwcS0+ZnJlZUxp
c3QgPSAwOwotICBwcS0+bGVxID0gbGVxOwotCi0gIHBxLT5ub2Rlc1sxXS5oYW5kbGUgPSAxOwkv
KiBzbyB0aGF0IE1pbmltdW0oKSByZXR1cm5zIE5VTEwgKi8KLSAgcHEtPmhhbmRsZXNbMV0ua2V5
ID0gTlVMTDsKLSAgcmV0dXJuIHBxOwotfQotCi0vKiByZWFsbHkgX19nbF9wcUhlYXBEZWxldGVQ
cmlvcml0eVEgKi8KLXZvaWQgcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKQotewot
ICBtZW1GcmVlKCBwcS0+aGFuZGxlcyApOwotICBtZW1GcmVlKCBwcS0+bm9kZXMgKTsKLSAgbWVt
RnJlZSggcHEgKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBGbG9hdERvd24oIFByaW9yaXR5USAqcHEs
IGxvbmcgY3VyciApCi17Ci0gIFBRbm9kZSAqbiA9IHBxLT5ub2RlczsKLSAgUFFoYW5kbGVFbGVt
ICpoID0gcHEtPmhhbmRsZXM7Ci0gIFBRaGFuZGxlIGhDdXJyLCBoQ2hpbGQ7Ci0gIGxvbmcgY2hp
bGQ7Ci0KLSAgaEN1cnIgPSBuW2N1cnJdLmhhbmRsZTsKLSAgZm9yKCA7OyApIHsKLSAgICBjaGls
ZCA9IGN1cnIgPDwgMTsKLSAgICBpZiggY2hpbGQgPCBwcS0+c2l6ZSAmJiBMRVEoIGhbbltjaGls
ZCsxXS5oYW5kbGVdLmtleSwKLQkJCQkgaFtuW2NoaWxkXS5oYW5kbGVdLmtleSApKSB7Ci0gICAg
ICArK2NoaWxkOwotICAgIH0KLQotICAgIGFzc2VydChjaGlsZCA8PSBwcS0+bWF4KTsKLQotICAg
IGhDaGlsZCA9IG5bY2hpbGRdLmhhbmRsZTsKLSAgICBpZiggY2hpbGQgPiBwcS0+c2l6ZSB8fCBM
RVEoIGhbaEN1cnJdLmtleSwgaFtoQ2hpbGRdLmtleSApKSB7Ci0gICAgICBuW2N1cnJdLmhhbmRs
ZSA9IGhDdXJyOwotICAgICAgaFtoQ3Vycl0ubm9kZSA9IGN1cnI7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgbltjdXJyXS5oYW5kbGUgPSBoQ2hpbGQ7Ci0gICAgaFtoQ2hpbGRdLm5vZGUgPSBj
dXJyOwotICAgIGN1cnIgPSBjaGlsZDsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkIEZsb2F0VXAo
IFByaW9yaXR5USAqcHEsIGxvbmcgY3VyciApCi17Ci0gIFBRbm9kZSAqbiA9IHBxLT5ub2RlczsK
LSAgUFFoYW5kbGVFbGVtICpoID0gcHEtPmhhbmRsZXM7Ci0gIFBRaGFuZGxlIGhDdXJyLCBoUGFy
ZW50OwotICBsb25nIHBhcmVudDsKLQotICBoQ3VyciA9IG5bY3Vycl0uaGFuZGxlOwotICBmb3Io
IDs7ICkgewotICAgIHBhcmVudCA9IGN1cnIgPj4gMTsKLSAgICBoUGFyZW50ID0gbltwYXJlbnRd
LmhhbmRsZTsKLSAgICBpZiggcGFyZW50ID09IDAgfHwgTEVRKCBoW2hQYXJlbnRdLmtleSwgaFto
Q3Vycl0ua2V5ICkpIHsKLSAgICAgIG5bY3Vycl0uaGFuZGxlID0gaEN1cnI7Ci0gICAgICBoW2hD
dXJyXS5ub2RlID0gY3VycjsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBuW2N1cnJdLmhhbmRs
ZSA9IGhQYXJlbnQ7Ci0gICAgaFtoUGFyZW50XS5ub2RlID0gY3VycjsKLSAgICBjdXJyID0gcGFy
ZW50OwotICB9Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxSGVhcEluaXQgKi8KLXZvaWQgcHFJbml0
KCBQcmlvcml0eVEgKnBxICkKLXsKLSAgbG9uZyBpOwotCi0gIC8qIFRoaXMgbWV0aG9kIG9mIGJ1
aWxkaW5nIGEgaGVhcCBpcyBPKG4pLCByYXRoZXIgdGhhbiBPKG4gbGcgbikuICovCi0KLSAgZm9y
KCBpID0gcHEtPnNpemU7IGkgPj0gMTsgLS1pICkgewotICAgIEZsb2F0RG93biggcHEsIGkgKTsK
LSAgfQotICBwcS0+aW5pdGlhbGl6ZWQgPSBUUlVFOwotfQotCi0vKiByZWFsbHkgX19nbF9wcUhl
YXBJbnNlcnQgKi8KLS8qIHJldHVybnMgTE9OR19NQVggaWZmIG91dCBvZiBtZW1vcnkgKi8KLVBR
aGFuZGxlIHBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBrZXlOZXcgKQotewotICBsb25n
IGN1cnI7Ci0gIFBRaGFuZGxlIGZyZWU7Ci0KLSAgY3VyciA9ICsrIHBxLT5zaXplOwotICBpZigg
KGN1cnIqMikgPiBwcS0+bWF4ICkgewotICAgIFBRbm9kZSAqc2F2ZU5vZGVzPSBwcS0+bm9kZXM7
Ci0gICAgUFFoYW5kbGVFbGVtICpzYXZlSGFuZGxlcz0gcHEtPmhhbmRsZXM7Ci0KLSAgICAvKiBJ
ZiB0aGUgaGVhcCBvdmVyZmxvd3MsIGRvdWJsZSBpdHMgc2l6ZS4gKi8KLSAgICBwcS0+bWF4IDw8
PSAxOwotICAgIHBxLT5ub2RlcyA9IChQUW5vZGUgKiltZW1SZWFsbG9jKCBwcS0+bm9kZXMsIAot
CQkJCSAgICAgKHNpemVfdCkgCi0JCQkJICAgICAoKHBxLT5tYXggKyAxKSAqIHNpemVvZiggcHEt
Pm5vZGVzWzBdICkpKTsKLSAgICBpZiAocHEtPm5vZGVzID09IE5VTEwpIHsKLSAgICAgICBwcS0+
bm9kZXMgPSBzYXZlTm9kZXM7CS8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBvbiByZXR1cm4gKi8K
LSAgICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICAgIHBxLT5oYW5kbGVzID0gKFBRaGFu
ZGxlRWxlbSAqKW1lbVJlYWxsb2MoIHBxLT5oYW5kbGVzLAotCQkJICAgICAgICAgICAgICAgICAg
ICAgKHNpemVfdCkKLQkJCSAgICAgICAgICAgICAgICAgICAgICAoKHBxLT5tYXggKyAxKSAqIAot
CQkJCQkgICAgICAgc2l6ZW9mKCBwcS0+aGFuZGxlc1swXSApKSk7Ci0gICAgaWYgKHBxLT5oYW5k
bGVzID09IE5VTEwpIHsKLSAgICAgICBwcS0+aGFuZGxlcyA9IHNhdmVIYW5kbGVzOyAvKiByZXN0
b3JlIHB0ciB0byBmcmVlIHVwb24gcmV0dXJuICovCi0gICAgICAgcmV0dXJuIExPTkdfTUFYOwot
ICAgIH0KLSAgfQotCi0gIGlmKCBwcS0+ZnJlZUxpc3QgPT0gMCApIHsKLSAgICBmcmVlID0gY3Vy
cjsKLSAgfSBlbHNlIHsKLSAgICBmcmVlID0gcHEtPmZyZWVMaXN0OwotICAgIHBxLT5mcmVlTGlz
dCA9IHBxLT5oYW5kbGVzW2ZyZWVdLm5vZGU7Ci0gIH0KLQotICBwcS0+bm9kZXNbY3Vycl0uaGFu
ZGxlID0gZnJlZTsKLSAgcHEtPmhhbmRsZXNbZnJlZV0ubm9kZSA9IGN1cnI7Ci0gIHBxLT5oYW5k
bGVzW2ZyZWVdLmtleSA9IGtleU5ldzsKLQotICBpZiggcHEtPmluaXRpYWxpemVkICkgewotICAg
IEZsb2F0VXAoIHBxLCBjdXJyICk7Ci0gIH0KLSAgYXNzZXJ0KGZyZWUgIT0gTE9OR19NQVgpOwot
ICByZXR1cm4gZnJlZTsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFIZWFwRXh0cmFjdE1pbiAqLwot
UFFrZXkgcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFub2RlICpuID0gcHEt
Pm5vZGVzOwotICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsKLSAgUFFoYW5kbGUgaE1p
biA9IG5bMV0uaGFuZGxlOwotICBQUWtleSBtaW4gPSBoW2hNaW5dLmtleTsKLQotICBpZiggcHEt
PnNpemUgPiAwICkgewotICAgIG5bMV0uaGFuZGxlID0gbltwcS0+c2l6ZV0uaGFuZGxlOwotICAg
IGhbblsxXS5oYW5kbGVdLm5vZGUgPSAxOwotCi0gICAgaFtoTWluXS5rZXkgPSBOVUxMOwotICAg
IGhbaE1pbl0ubm9kZSA9IHBxLT5mcmVlTGlzdDsKLSAgICBwcS0+ZnJlZUxpc3QgPSBoTWluOwot
Ci0gICAgaWYoIC0tIHBxLT5zaXplID4gMCApIHsKLSAgICAgIEZsb2F0RG93biggcHEsIDEgKTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIG1pbjsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFIZWFwRGVs
ZXRlICovCi12b2lkIHBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBoQ3VyciApCi17
Ci0gIFBRbm9kZSAqbiA9IHBxLT5ub2RlczsKLSAgUFFoYW5kbGVFbGVtICpoID0gcHEtPmhhbmRs
ZXM7Ci0gIGxvbmcgY3VycjsKLQotICBhc3NlcnQoIGhDdXJyID49IDEgJiYgaEN1cnIgPD0gcHEt
Pm1heCAmJiBoW2hDdXJyXS5rZXkgIT0gTlVMTCApOwotCi0gIGN1cnIgPSBoW2hDdXJyXS5ub2Rl
OwotICBuW2N1cnJdLmhhbmRsZSA9IG5bcHEtPnNpemVdLmhhbmRsZTsKLSAgaFtuW2N1cnJdLmhh
bmRsZV0ubm9kZSA9IGN1cnI7Ci0KLSAgaWYoIGN1cnIgPD0gLS0gcHEtPnNpemUgKSB7Ci0gICAg
aWYoIGN1cnIgPD0gMSB8fCBMRVEoIGhbbltjdXJyPj4xXS5oYW5kbGVdLmtleSwgaFtuW2N1cnJd
LmhhbmRsZV0ua2V5ICkpIHsKLSAgICAgIEZsb2F0RG93biggcHEsIGN1cnIgKTsKLSAgICB9IGVs
c2UgewotICAgICAgRmxvYXRVcCggcHEsIGN1cnIgKTsKLSAgICB9Ci0gIH0KLSAgaFtoQ3Vycl0u
a2V5ID0gTlVMTDsKLSAgaFtoQ3Vycl0ubm9kZSA9IHBxLT5mcmVlTGlzdDsKLSAgcHEtPmZyZWVM
aXN0ID0gaEN1cnI7Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL3ByaW9yaXR5cS1oZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNv
dXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0
eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFk
ZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBT
R0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNl
IiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjog
TGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBW
aWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3By
b2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vu
c2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywg
d2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0q
KiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQg
V0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZB
Q1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENv
ZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCBy
ZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywK
LSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2ls
aWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25z
OiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiog
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4x
KSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lz
dGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIg
NCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lz
dGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29m
dHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBT
YW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJl
ZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBB
dXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAot
KiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19wcmlvcml0eXFfaGVhcF9oXwotI2RlZmluZSBfX3By
aW9yaXR5cV9oZWFwX2hfCi0KLS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAg
aW1wbGVtZW50YXRpb24gY2FuIHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFI
ZWFwS2V5Ci0jZGVmaW5lIFBRaGFuZGxlCQlQUUhlYXBIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlR
CQlQcmlvcml0eVFIZWFwCi0KLSNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxSGVh
cE5ld1ByaW9yaXR5UShsZXEpCi0jZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3Bx
SGVhcERlbGV0ZVByaW9yaXR5UShwcSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGlu
c2VydGlvbiBvZiBhIG5ldyBrZXkgKHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRy
YWN0aW9uIG9mIGEga2V5IHdob3NlIHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFF
eHRyYWN0TWluKS4gIERlbGV0aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9y
IHRoaXMgcHVycG9zZSBwcUluc2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxp
ZWQKLSAqIGFzIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNy
ZWF0ZWQgZWZmaWNpZW50bHkgYnkgY2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhl
biBjYWxsaW5nIHBxSW5pdC4gIEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICog
YmVmb3JlIGFueSBvcGVyYXRpb25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgot
ICogSWYgdGhlIGhlYXAgaXMgZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1
cm4gYSBOVUxMIGtleS4KLSAqIFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5
LgotICovCi0jZGVmaW5lIHBxSW5pdChwcSkJCV9fZ2xfcHFIZWFwSW5pdChwcSkKLSNkZWZpbmUg
cHFJbnNlcnQocHEsa2V5KQlfX2dsX3BxSGVhcEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWlu
aW11bShwcSkJCV9fZ2xfcHFIZWFwTWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBx
KQlfX2dsX3BxSGVhcEV4dHJhY3RNaW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJ
X19nbF9wcUhlYXBEZWxldGUocHEsaGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2ds
X3BxSGVhcElzRW1wdHkocHEpCi0KLQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUg
ZGF0YSBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBv
cmRpbmFyeSBoZWFwLiAgIm5vZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9k
ZXMgYXJlIHN0b3JlZCBpbiB0aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVh
cCBleGNlZWRzIGl0cyBhbGxvY2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMu
Ci0gKiBUaGUgY2hpbGRyZW4gb2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0g
KiBFYWNoIG5vZGUgc3RvcmVzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFj
aCBoYW5kbGUKLSAqIHN0b3JlcyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9k
ZSB3aGljaCBjdXJyZW50bHkKLSAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5k
bGVzW2ldLm5vZGVdLmhhbmRsZSA9PSBpKS4KLSAqLwotCi10eXBlZGVmIHZvaWQgKlBRa2V5Owot
dHlwZWRlZiBsb25nIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5
UTsKLQotdHlwZWRlZiBzdHJ1Y3QgeyBQUWhhbmRsZSBoYW5kbGU7IH0gUFFub2RlOwotdHlwZWRl
ZiBzdHJ1Y3QgeyBQUWtleSBrZXk7IFBRaGFuZGxlIG5vZGU7IH0gUFFoYW5kbGVFbGVtOwotCi1z
dHJ1Y3QgUHJpb3JpdHlRIHsKLSAgUFFub2RlCSpub2RlczsKLSAgUFFoYW5kbGVFbGVtCSpoYW5k
bGVzOwotICBsb25nCQlzaXplLCBtYXg7Ci0gIFBRaGFuZGxlCWZyZWVMaXN0OwotICBpbnQJCWlu
aXRpYWxpemVkOwotICBpbnQJCSgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKLX07Ci0g
IAotUHJpb3JpdHlRCSpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtl
eSBrZXkyKSApOwotdm9pZAkJcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsKLQot
dm9pZAkJcHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3Jp
dHlRICpwcSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBx
ICk7Ci12b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0K
LQotI2RlZmluZSBfX2dsX3BxSGVhcE1pbmltdW0ocHEpCSgocHEpLT5oYW5kbGVzWyhwcSktPm5v
ZGVzWzFdLmhhbmRsZV0ua2V5KQotI2RlZmluZSBfX2dsX3BxSGVhcElzRW1wdHkocHEpCSgocHEp
LT5zaXplID09IDApCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEtc29ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaAkocmV2aXNpb24gODIxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxp
Y2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUK
LSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBp
biB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAi
TGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5
IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4s
IGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91
bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dp
LmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRo
ZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIg
YmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElU
SU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJ
TVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwg
U0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9T
RSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmln
aW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAx
LjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3Jh
cGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0y
MDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhl
cmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJv
dmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFi
bGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBU
aGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lv
biAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5v
dmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2lu
ZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBU
aGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFz
IG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3
aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0v
KgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZp
c2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9y
aXR5cS1zb3J0LmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fcHJpb3JpdHlxX3NvcnRfaF8KLSNkZWZp
bmUgX19wcmlvcml0eXFfc29ydF9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9wcmlvcml0eXEtaGVhcC5oIgotCi0jdW5kZWYgUFFrZXkKLSN1bmRlZiBQUWhhbmRsZQotI3Vu
ZGVmIFByaW9yaXR5UQotI3VuZGVmIHBxTmV3UHJpb3JpdHlRCi0jdW5kZWYgcHFEZWxldGVQcmlv
cml0eVEKLSN1bmRlZiBwcUluaXQKLSN1bmRlZiBwcUluc2VydAotI3VuZGVmIHBxTWluaW11bQot
I3VuZGVmIHBxRXh0cmFjdE1pbgotI3VuZGVmIHBxRGVsZXRlCi0jdW5kZWYgcHFJc0VtcHR5Ci0K
LS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24gY2Fu
IHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFTb3J0S2V5Ci0jZGVmaW5lIFBR
aGFuZGxlCQlQUVNvcnRIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQcmlvcml0eVFTb3J0Ci0K
LSNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxU29ydE5ld1ByaW9yaXR5UShsZXEp
Ci0jZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5
UShwcSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2VydGlvbiBvZiBhIG5ldyBr
ZXkgKHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0aW9uIG9mIGEga2V5IHdo
b3NlIHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRyYWN0TWluKS4gIERlbGV0
aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRoaXMgcHVycG9zZSBwcUlu
c2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQKLSAqIGFzIHRoZSBhcmd1
bWVudC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0ZWQgZWZmaWNpZW50bHkg
YnkgY2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBjYWxsaW5nIHBxSW5pdC4g
IEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVmb3JlIGFueSBvcGVyYXRp
b25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICogSWYgdGhlIGhlYXAgaXMg
ZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4gYSBOVUxMIGtleS4KLSAq
IFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5LgotICovCi0jZGVmaW5lIHBx
SW5pdChwcSkJCV9fZ2xfcHFTb3J0SW5pdChwcSkKLSNkZWZpbmUgcHFJbnNlcnQocHEsa2V5KQlf
X2dsX3BxU29ydEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11bShwcSkJCV9fZ2xfcHFT
b3J0TWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlfX2dsX3BxU29ydEV4dHJh
Y3RNaW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19nbF9wcVNvcnREZWxldGUo
cHEsaGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3BxU29ydElzRW1wdHkocHEp
Ci0KLQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMg
YSBsaXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRpbmFyeSBoZWFwLiAgIm5v
ZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0
aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBleGNlZWRzIGl0cyBhbGxv
Y2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0gKiBUaGUgY2hpbGRyZW4g
b2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBFYWNoIG5vZGUgc3RvcmVz
IGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBoYW5kbGUKLSAqIHN0b3Jl
cyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3aGljaCBjdXJyZW50bHkK
LSAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVzW2ldLm5vZGVdLmhhbmRs
ZSA9PSBpKS4KLSAqLwotCi10eXBlZGVmIFBRSGVhcEtleSBQUWtleTsKLXR5cGVkZWYgUFFIZWFw
SGFuZGxlIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsKLQot
c3RydWN0IFByaW9yaXR5USB7Ci0gIFByaW9yaXR5UUhlYXAJKmhlYXA7Ci0gIFBRa2V5CQkqa2V5
czsKLSAgUFFrZXkJCSoqb3JkZXI7Ci0gIFBRaGFuZGxlCXNpemUsIG1heDsKLSAgaW50CQlpbml0
aWFsaXplZDsKLSAgaW50CQkoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5Mik7Ci19OwotICAK
LVByaW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkg
a2V5MikgKTsKLXZvaWQJCXBxRGVsZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICk7Ci0KLWlu
dAkJcHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlR
ICpwcSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7
Ci12b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLVBR
a2V5CQlwcU1pbmltdW0oIFByaW9yaXR5USAqcHEgKTsKLWludAkJcHFJc0VtcHR5KCBQcmlvcml0
eVEgKnBxICk7Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjY3ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0
byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0
byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoq
IFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29u
dGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9m
IHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZp
Y2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQw
NDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVl
QgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29m
dHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVY
UFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1F
RCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMg
QU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJ
VFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5H
RU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVu
R0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFu
dWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhp
Y3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBw
YXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxp
Y2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBj
b25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2Vk
Ci0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5
IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFu
ZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVy
c2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3
YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxl
bWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5k
ZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmlj
IFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6
IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jIzUgJAotKi8KLQot
I2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogTE9OR19NQVggKi8K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLQotLyogSW5jbHVk
ZSBhbGwgdGhlIGNvZGUgZm9yIHRoZSByZWd1bGFyIGhlYXAtYmFzZWQgcXVldWUgaGVyZS4gKi8K
LQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuYyIKLQot
LyogTm93IHJlZGVmaW5lIGFsbCB0aGUgZnVuY3Rpb24gbmFtZXMgdG8gbWFwIHRvIHRoZWlyICJT
b3J0IiB2ZXJzaW9ucy4gKi8KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJp
b3JpdHlxLXNvcnQuaCIKLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICovCi1Q
cmlvcml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtl
eTIpICkKLXsKLSAgUHJpb3JpdHlRICpwcSA9IChQcmlvcml0eVEgKiltZW1BbGxvYyggc2l6ZW9m
KCBQcmlvcml0eVEgKSk7Ci0gIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBwcS0+
aGVhcCA9IF9fZ2xfcHFIZWFwTmV3UHJpb3JpdHlRKCBsZXEgKTsKLSAgaWYgKHBxLT5oZWFwID09
IE5VTEwpIHsKLSAgICAgbWVtRnJlZShwcSk7Ci0gICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAg
cHEtPmtleXMgPSAoUFFIZWFwS2V5ICopbWVtQWxsb2MoIElOSVRfU0laRSAqIHNpemVvZihwcS0+
a2V5c1swXSkgKTsKLSAgaWYgKHBxLT5rZXlzID09IE5VTEwpIHsKLSAgICAgX19nbF9wcUhlYXBE
ZWxldGVQcmlvcml0eVEocHEtPmhlYXApOwotICAgICBtZW1GcmVlKHBxKTsKLSAgICAgcmV0dXJu
IE5VTEw7Ci0gIH0KLQotICBwcS0+c2l6ZSA9IDA7Ci0gIHBxLT5tYXggPSBJTklUX1NJWkU7Ci0g
IHBxLT5pbml0aWFsaXplZCA9IEZBTFNFOwotICBwcS0+bGVxID0gbGVxOwotICByZXR1cm4gcHE7
Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5USAqLwotdm9pZCBwcURl
bGV0ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApCi17Ci0gIGFzc2VydChwcSAhPSBOVUxMKTsg
Ci0gIGlmIChwcS0+aGVhcCAhPSBOVUxMKSBfX2dsX3BxSGVhcERlbGV0ZVByaW9yaXR5USggcHEt
PmhlYXAgKTsKLSAgaWYgKHBxLT5vcmRlciAhPSBOVUxMKSBtZW1GcmVlKCBwcS0+b3JkZXIgKTsK
LSAgaWYgKHBxLT5rZXlzICE9IE5VTEwpIG1lbUZyZWUoIHBxLT5rZXlzICk7Ci0gIG1lbUZyZWUo
IHBxICk7Ci19Ci0KLQotI2RlZmluZSBMVCh4LHkpCQkoISBMRVEoeSx4KSkKLSNkZWZpbmUgR1Qo
eCx5KQkJKCEgTEVRKHgseSkpCi0jZGVmaW5lIFN3YXAoYSxiKQlkb3tQUWtleSAqdG1wID0gKmE7
ICphID0gKmI7ICpiID0gdG1wO313aGlsZSgwKQotCi0vKiByZWFsbHkgX19nbF9wcVNvcnRJbml0
ICovCi1pbnQgcHFJbml0KCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgKipwLCAqKnIsICoq
aSwgKipqLCAqcGl2OwotICBzdHJ1Y3QgeyBQUWtleSAqKnAsICoqcjsgfSBTdGFja1s1MF0sICp0
b3AgPSBTdGFjazsKLSAgdW5zaWduZWQgbG9uZyBzZWVkID0gMjAxNjQ3MzI4MzsKLQotICAvKiBD
cmVhdGUgYW4gYXJyYXkgb2YgaW5kaXJlY3QgcG9pbnRlcnMgdG8gdGhlIGtleXMsIHNvIHRoYXQg
d2UKLSAgICogdGhlIGhhbmRsZXMgd2UgaGF2ZSByZXR1cm5lZCBhcmUgc3RpbGwgdmFsaWQuCi0g
ICAqLwotLyoKLSAgcHEtPm9yZGVyID0gKFBRSGVhcEtleSAqKiltZW1BbGxvYyggKHNpemVfdCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHEtPnNpemUgKiBzaXplb2YocHEt
Pm9yZGVyWzBdKSkgKTsKLSovCi0gIHBxLT5vcmRlciA9IChQUUhlYXBLZXkgKiopbWVtQWxsb2Mo
IChzaXplX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcS0+c2l6ZSsx
KSAqIHNpemVvZihwcS0+b3JkZXJbMF0pKSApOwotLyogdGhlIHByZXZpb3VzIGxpbmUgaXMgYSBw
YXRjaCB0byBjb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IElCTSAqLwotLyogbWFjaGluZXMg
cmV0dXJuIGEgbnVsbCBvbiBhIG1hbGxvYyBvZiB6ZXJvIGJ5dGVzICh1bmxpa2UgU0dJKSwgICAq
LwotLyogc28gd2UgaGF2ZSB0byBwdXQgaW4gdGhpcyBkZWZlbnNlIHRvIGd1YXJkIGFnYWluc3Qg
YSBtZW1vcnkgICAgICAqLwotLyogZmF1bHQgZm91ciBsaW5lcyBkb3duLiBmcm9tIGZvc3N1bUBh
dXN0aW4uaWJtLmNvbS4gICAgICAgICAgICAgICAqLwotICBpZiAocHEtPm9yZGVyID09IE5VTEwp
IHJldHVybiAwOwotCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIgPSBwICsgcHEtPnNpemUgLSAxOwot
ICBmb3IoIHBpdiA9IHBxLT5rZXlzLCBpID0gcDsgaSA8PSByOyArK3BpdiwgKytpICkgewotICAg
ICppID0gcGl2OwotICB9Ci0KLSAgLyogU29ydCB0aGUgaW5kaXJlY3QgcG9pbnRlcnMgaW4gZGVz
Y2VuZGluZyBvcmRlciwKLSAgICogdXNpbmcgcmFuZG9taXplZCBRdWlja3NvcnQKLSAgICovCi0g
IHRvcC0+cCA9IHA7IHRvcC0+ciA9IHI7ICsrdG9wOwotICB3aGlsZSggLS10b3AgPj0gU3RhY2sg
KSB7Ci0gICAgcCA9IHRvcC0+cDsKLSAgICByID0gdG9wLT5yOwotICAgIHdoaWxlKCByID4gcCAr
IDEwICkgewotICAgICAgc2VlZCA9IHNlZWQgKiAxNTM5NDE1ODIxICsgMTsKLSAgICAgIGkgPSBw
ICsgc2VlZCAlIChyIC0gcCArIDEpOwotICAgICAgcGl2ID0gKmk7Ci0gICAgICAqaSA9ICpwOwot
ICAgICAgKnAgPSBwaXY7Ci0gICAgICBpID0gcCAtIDE7Ci0gICAgICBqID0gciArIDE7Ci0gICAg
ICBkbyB7Ci0JZG8geyArK2k7IH0gd2hpbGUoIEdUKCAqKmksICpwaXYgKSk7Ci0JZG8geyAtLWo7
IH0gd2hpbGUoIExUKCAqKmosICpwaXYgKSk7Ci0JU3dhcCggaSwgaiApOwotICAgICAgfSB3aGls
ZSggaSA8IGogKTsKLSAgICAgIFN3YXAoIGksIGogKTsJLyogVW5kbyBsYXN0IHN3YXAgKi8KLSAg
ICAgIGlmKCBpIC0gcCA8IHIgLSBqICkgewotCXRvcC0+cCA9IGorMTsgdG9wLT5yID0gcjsgKyt0
b3A7Ci0JciA9IGktMTsKLSAgICAgIH0gZWxzZSB7Ci0JdG9wLT5wID0gcDsgdG9wLT5yID0gaS0x
OyArK3RvcDsKLQlwID0gaisxOwotICAgICAgfQotICAgIH0KLSAgICAvKiBJbnNlcnRpb24gc29y
dCBzbWFsbCBsaXN0cyAqLwotICAgIGZvciggaSA9IHArMTsgaSA8PSByOyArK2kgKSB7Ci0gICAg
ICBwaXYgPSAqaTsKLSAgICAgIGZvciggaiA9IGk7IGogPiBwICYmIExUKCAqKihqLTEpLCAqcGl2
ICk7IC0taiApIHsKLQkqaiA9ICooai0xKTsKLSAgICAgIH0KLSAgICAgICpqID0gcGl2OwotICAg
IH0KLSAgfQotICBwcS0+bWF4ID0gcHEtPnNpemU7Ci0gIHBxLT5pbml0aWFsaXplZCA9IFRSVUU7
Ci0gIF9fZ2xfcHFIZWFwSW5pdCggcHEtPmhlYXAgKTsJLyogYWx3YXlzIHN1Y2NlZWRzICovCi0K
LSNpZm5kZWYgTkRFQlVHCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIgPSBwICsgcHEtPnNpemUgLSAx
OwotICBmb3IoIGkgPSBwOyBpIDwgcjsgKytpICkgewotICAgIGFzc2VydCggTEVRKCAqKihpKzEp
LCAqKmkgKSk7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiAxOwotfQotCi0vKiByZWFsbHkgX19n
bF9wcVNvcnRJbnNlcnQgKi8KLS8qIHJldHVybnMgTE9OR19NQVggaWZmIG91dCBvZiBtZW1vcnkg
Ki8gCi1QUWhhbmRsZSBwcUluc2VydCggUHJpb3JpdHlRICpwcSwgUFFrZXkga2V5TmV3ICkKLXsK
LSAgbG9uZyBjdXJyOwotCi0gIGlmKCBwcS0+aW5pdGlhbGl6ZWQgKSB7Ci0gICAgcmV0dXJuIF9f
Z2xfcHFIZWFwSW5zZXJ0KCBwcS0+aGVhcCwga2V5TmV3ICk7Ci0gIH0KLSAgY3VyciA9IHBxLT5z
aXplOwotICBpZiggKysgcHEtPnNpemUgPj0gcHEtPm1heCApIHsKLSAgICBQUWtleSAqc2F2ZUtl
eT0gcHEtPmtleXM7Ci0KLSAgICAvKiBJZiB0aGUgaGVhcCBvdmVyZmxvd3MsIGRvdWJsZSBpdHMg
c2l6ZS4gKi8KLSAgICBwcS0+bWF4IDw8PSAxOwotICAgIHBxLT5rZXlzID0gKFBRSGVhcEtleSAq
KW1lbVJlYWxsb2MoIHBxLT5rZXlzLCAKLQkgCSAgICAgICAgICAgICAgICAgICAgICAgIChzaXpl
X3QpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBxLT5tYXggKiBzaXplb2Yo
IHBxLT5rZXlzWzBdICkpKTsKLSAgICBpZiAocHEtPmtleXMgPT0gTlVMTCkgewkKLSAgICAgICBw
cS0+a2V5cyA9IHNhdmVLZXk7CS8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBvbiByZXR1cm4gKi8K
LSAgICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICB9Ci0gIGFzc2VydChjdXJyICE9IExP
TkdfTUFYKTsJCi0gIHBxLT5rZXlzW2N1cnJdID0ga2V5TmV3OwotCi0gIC8qIE5lZ2F0aXZlIGhh
bmRsZXMgaW5kZXggdGhlIHNvcnRlZCBhcnJheS4gKi8KLSAgcmV0dXJuIC0oY3VycisxKTsKLX0K
LQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0RXh0cmFjdE1pbiAqLwotUFFrZXkgcHFFeHRyYWN0TWlu
KCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1pbiwgaGVhcE1pbjsKLQotICBpZigg
cHEtPnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9wcUhlYXBFeHRyYWN0TWluKCBwcS0+
aGVhcCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSk7Ci0gIGlm
KCAhIF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewotICAgIGhlYXBNaW4gPSBfX2ds
X3BxSGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExFUSggaGVhcE1pbiwgc29ydE1p
biApKSB7Ci0gICAgICByZXR1cm4gX19nbF9wcUhlYXBFeHRyYWN0TWluKCBwcS0+aGVhcCApOwot
ICAgIH0KLSAgfQotICBkbyB7Ci0gICAgLS0gcHEtPnNpemU7Ci0gIH0gd2hpbGUoIHBxLT5zaXpl
ID4gMCAmJiAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSkgPT0gTlVMTCApOwotICByZXR1cm4gc29y
dE1pbjsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0TWluaW11bSAqLwotUFFrZXkgcHFNaW5p
bXVtKCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1pbiwgaGVhcE1pbjsKLQotICBp
ZiggcHEtPnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9wcUhlYXBNaW5pbXVtKCBwcS0+
aGVhcCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSk7Ci0gIGlm
KCAhIF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewotICAgIGhlYXBNaW4gPSBfX2ds
X3BxSGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExFUSggaGVhcE1pbiwgc29ydE1p
biApKSB7Ci0gICAgICByZXR1cm4gaGVhcE1pbjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNvcnRN
aW47Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydElzRW1wdHkgKi8KLWludCBwcUlzRW1wdHko
IFByaW9yaXR5USAqcHEgKQotewotICByZXR1cm4gKHBxLT5zaXplID09IDApICYmIF9fZ2xfcHFI
ZWFwSXNFbXB0eSggcHEtPmhlYXAgKTsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0RGVsZXRl
ICovCi12b2lkIHBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBjdXJyICkKLXsKLSAg
aWYoIGN1cnIgPj0gMCApIHsKLSAgICBfX2dsX3BxSGVhcERlbGV0ZSggcHEtPmhlYXAsIGN1cnIg
KTsKLSAgICByZXR1cm47Ci0gIH0KLSAgY3VyciA9IC0oY3VycisxKTsKLSAgYXNzZXJ0KCBjdXJy
IDwgcHEtPm1heCAmJiBwcS0+a2V5c1tjdXJyXSAhPSBOVUxMICk7Ci0KLSAgcHEtPmtleXNbY3Vy
cl0gPSBOVUxMOwotICB3aGlsZSggcHEtPnNpemUgPiAwICYmICoocHEtPm9yZGVyW3BxLT5zaXpl
LTFdKSA9PSBOVUxMICkgewotICAgIC0tIHBxLT5zaXplOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgJKHJldmlz
aW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlv
cml0eXEuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2Ug
QXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxl
IGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0
dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0
IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQot
KiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywg
SW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5
LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQg
aW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFT
IElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBD
T05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQ
VVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhl
IE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJz
aW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNv
biBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAx
OTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hl
cmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGlj
ZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiog
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChW
ZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikg
R3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0q
KiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1
dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxp
YW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgot
Ki8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQg
JFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fcHJpb3JpdHlxX3NvcnRfaF8KLSNkZWZp
bmUgX19wcmlvcml0eXFfc29ydF9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9wcmlvcml0eXEtaGVhcC5oIgotCi0jdW5kZWYgUFFrZXkKLSN1bmRlZiBQUWhhbmRsZQotI3Vu
ZGVmIFByaW9yaXR5UQotI3VuZGVmIHBxTmV3UHJpb3JpdHlRCi0jdW5kZWYgcHFEZWxldGVQcmlv
cml0eVEKLSN1bmRlZiBwcUluaXQKLSN1bmRlZiBwcUluc2VydAotI3VuZGVmIHBxTWluaW11bQot
I3VuZGVmIHBxRXh0cmFjdE1pbgotI3VuZGVmIHBxRGVsZXRlCi0jdW5kZWYgcHFJc0VtcHR5Ci0K
LS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24gY2Fu
IHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFTb3J0S2V5Ci0jZGVmaW5lIFBR
aGFuZGxlCQlQUVNvcnRIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQcmlvcml0eVFTb3J0Ci0K
LSNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxU29ydE5ld1ByaW9yaXR5UShsZXEp
Ci0jZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5
UShwcSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2VydGlvbiBvZiBhIG5ldyBr
ZXkgKHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0aW9uIG9mIGEga2V5IHdo
b3NlIHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRyYWN0TWluKS4gIERlbGV0
aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRoaXMgcHVycG9zZSBwcUlu
c2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQKLSAqIGFzIHRoZSBhcmd1
bWVudC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0ZWQgZWZmaWNpZW50bHkg
YnkgY2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBjYWxsaW5nIHBxSW5pdC4g
IEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVmb3JlIGFueSBvcGVyYXRp
b25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICogSWYgdGhlIGhlYXAgaXMg
ZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4gYSBOVUxMIGtleS4KLSAq
IFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5LgotICovCi0jZGVmaW5lIHBx
SW5pdChwcSkJCV9fZ2xfcHFTb3J0SW5pdChwcSkKLSNkZWZpbmUgcHFJbnNlcnQocHEsa2V5KQlf
X2dsX3BxU29ydEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11bShwcSkJCV9fZ2xfcHFT
b3J0TWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlfX2dsX3BxU29ydEV4dHJh
Y3RNaW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19nbF9wcVNvcnREZWxldGUo
cHEsaGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3BxU29ydElzRW1wdHkocHEp
Ci0KLQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMg
YSBsaXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRpbmFyeSBoZWFwLiAgIm5v
ZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0
aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBleGNlZWRzIGl0cyBhbGxv
Y2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0gKiBUaGUgY2hpbGRyZW4g
b2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBFYWNoIG5vZGUgc3RvcmVz
IGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBoYW5kbGUKLSAqIHN0b3Jl
cyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3aGljaCBjdXJyZW50bHkK
LSAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVzW2ldLm5vZGVdLmhhbmRs
ZSA9PSBpKS4KLSAqLwotCi10eXBlZGVmIFBRSGVhcEtleSBQUWtleTsKLXR5cGVkZWYgUFFIZWFw
SGFuZGxlIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsKLQot
c3RydWN0IFByaW9yaXR5USB7Ci0gIFByaW9yaXR5UUhlYXAJKmhlYXA7Ci0gIFBRa2V5CQkqa2V5
czsKLSAgUFFrZXkJCSoqb3JkZXI7Ci0gIFBRaGFuZGxlCXNpemUsIG1heDsKLSAgaW50CQlpbml0
aWFsaXplZDsKLSAgaW50CQkoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5Mik7Ci19OwotICAK
LVByaW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkg
a2V5MikgKTsKLXZvaWQJCXBxRGVsZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICk7Ci0KLWlu
dAkJcHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlR
ICpwcSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7
Ci12b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLVBR
a2V5CQlwcU1pbmltdW0oIFByaW9yaXR5USAqcHEgKTsKLWludAkJcHFJc0VtcHR5KCBQcmlvcml0
eVEgKnBxICk7Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3JlbmRlci5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNTA1
ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0
ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRl
cm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJl
IExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2Yg
dGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNl
bnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAw
Ci0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwg
b3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0q
KiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5E
IElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVE
SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBD
T05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5F
U1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0q
KiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxl
IEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwg
MjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4K
LSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlz
IGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHBy
b2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlv
biB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBT
eXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJp
bCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkg
KFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0wo
UikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMp
LCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRl
ZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9u
Ci0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVy
aWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBK
dWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3Qv
bWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3JlbmRlci5jIzUgJAotKi8KLQotI2luY2x1ZGUgPGFz
c2VydC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ds
dW9zLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAot
Ci0vKiBUaGlzIHN0cnVjdHVyZSByZW1lbWJlcnMgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgYWJv
dXQgYSBwcmltaXRpdmUKLSAqIHRvIGJlIGFibGUgdG8gcmVuZGVyIGl0IGxhdGVyLCBvbmNlIHdl
IGhhdmUgZGV0ZXJtaW5lZCB3aGljaAotICogcHJpbWl0aXZlIGlzIGFibGUgdG8gdXNlIHRoZSBt
b3N0IHRyaWFuZ2xlcy4KLSAqLwotc3RydWN0IEZhY2VDb3VudCB7Ci0gIGxvbmcJCXNpemU7CQkv
KiBudW1iZXIgb2YgdHJpYW5nbGVzIHVzZWQgKi8KLSAgR0xVaGFsZkVkZ2UJKmVTdGFydDsJLyog
ZWRnZSB3aGVyZSB0aGlzIHByaW1pdGl2ZSBzdGFydHMgKi8KLSAgdm9pZAkJKCpyZW5kZXIpKEdM
VXRlc3NlbGF0b3IgKiwgR0xVaGFsZkVkZ2UgKiwgbG9uZyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIHJvdXRpbmUgdG8gcmVuZGVyIHRoaXMgcHJpbWl0aXZlICovCi19Owot
Ci1zdGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtRmFuKCBHTFVoYWxmRWRnZSAqZU9yaWcg
KTsKLXN0YXRpYyBzdHJ1Y3QgRmFjZUNvdW50IE1heGltdW1TdHJpcCggR0xVaGFsZkVkZ2UgKmVP
cmlnICk7Ci0KLXN0YXRpYyB2b2lkIFJlbmRlckZhbiggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xV
aGFsZkVkZ2UgKmVTdGFydCwgbG9uZyBzaXplICk7Ci1zdGF0aWMgdm9pZCBSZW5kZXJTdHJpcCgg
R0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmVTdGFydCwgbG9uZyBzaXplICk7Ci1z
dGF0aWMgdm9pZCBSZW5kZXJUcmlhbmdsZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVk
Z2UgKmVTdGFydCwKLQkJCSAgICBsb25nIHNpemUgKTsKLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4
aW11bUZhY2VHcm91cCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKTsKLXN0
YXRpYyB2b2lkIFJlbmRlckxvbmVseVRyaWFuZ2xlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xV
ZmFjZSAqaGVhZCApOwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiBTdHJpcHMgYW5k
IEZhbnMgZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKiovCi0KLS8qIF9fZ2xfcmVuZGVy
TWVzaCggdGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5n
bGUKLSAqIGZhbnMsIHN0cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRp
YWwgZWZmb3J0IGlzIG1hZGUKLSAqIHRvIHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMg
YXMgcG9zc2libGUgKGllLiB0byBtYWtlIHRoZSBmYW5zCi0gKiBhbmQgc3RyaXBzIGFzIGxhcmdl
IGFzIHBvc3NpYmxlKS4KLSAqCi0gKiBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBh
cyBjYWxsYmFja3MgKHNlZSB0aGUgYXBpKS4KLSAqLwotdm9pZCBfX2dsX3JlbmRlck1lc2goIEdM
VXRlc3NlbGF0b3IgKnRlc3MsIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmOwotCi0g
IC8qIE1ha2UgYSBsaXN0IG9mIHNlcGFyYXRlIHRyaWFuZ2xlcyBzbyB3ZSBjYW4gcmVuZGVyIHRo
ZW0gYWxsIGF0IG9uY2UgKi8KLSAgdGVzcy0+bG9uZWx5VHJpTGlzdCA9IE5VTEw7Ci0KLSAgZm9y
KCBmID0gbWVzaC0+ZkhlYWQubmV4dDsgZiAhPSAmbWVzaC0+ZkhlYWQ7IGYgPSBmLT5uZXh0ICkg
ewotICAgIGYtPm1hcmtlZCA9IEZBTFNFOwotICB9Ci0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5l
eHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gZi0+bmV4dCApIHsKLQotICAgIC8qIFdlIGV4YW1p
bmUgYWxsIGZhY2VzIGluIGFuIGFyYml0cmFyeSBvcmRlci4gIFdoZW5ldmVyIHdlIGZpbmQKLSAg
ICAgKiBhbiB1bnByb2Nlc3NlZCBmYWNlIEYsIHdlIG91dHB1dCBhIGdyb3VwIG9mIGZhY2VzIGlu
Y2x1ZGluZyBGCi0gICAgICogd2hvc2Ugc2l6ZSBpcyBtYXhpbXVtLgotICAgICAqLwotICAgIGlm
KCBmLT5pbnNpZGUgJiYgISBmLT5tYXJrZWQgKSB7Ci0gICAgICBSZW5kZXJNYXhpbXVtRmFjZUdy
b3VwKCB0ZXNzLCBmICk7Ci0gICAgICBhc3NlcnQoIGYtPm1hcmtlZCApOwotICAgIH0KLSAgfQot
ICBpZiggdGVzcy0+bG9uZWx5VHJpTGlzdCAhPSBOVUxMICkgewotICAgIFJlbmRlckxvbmVseVRy
aWFuZ2xlcyggdGVzcywgdGVzcy0+bG9uZWx5VHJpTGlzdCApOwotICAgIHRlc3MtPmxvbmVseVRy
aUxpc3QgPSBOVUxMOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11bUZhY2VH
cm91cCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKQotewotICAvKiBXZSB3
YW50IHRvIGZpbmQgdGhlIGxhcmdlc3QgdHJpYW5nbGUgZmFuIG9yIHN0cmlwIG9mIHVubWFya2Vk
IGZhY2VzCi0gICAqIHdoaWNoIGluY2x1ZGVzIHRoZSBnaXZlbiBmYWNlIGZPcmlnLiAgVGhlcmUg
YXJlIDMgcG9zc2libGUgZmFucwotICAgKiBwYXNzaW5nIHRocm91Z2ggZk9yaWcgKG9uZSBjZW50
ZXJlZCBhdCBlYWNoIHZlcnRleCksIGFuZCAzIHBvc3NpYmxlCi0gICAqIHN0cmlwcyAob25lIGZv
ciBlYWNoIENDVyBwZXJtdXRhdGlvbiBvZiB0aGUgdmVydGljZXMpLiAgT3VyIHN0cmF0ZWd5Ci0g
ICAqIGlzIHRvIHRyeSBhbGwgb2YgdGhlc2UsIGFuZCB0YWtlIHRoZSBwcmltaXRpdmUgd2hpY2gg
dXNlcyB0aGUgbW9zdAotICAgKiB0cmlhbmdsZXMgKGEgZ3JlZWR5IGFwcHJvYWNoKS4KLSAgICov
Ci0gIEdMVWhhbGZFZGdlICplID0gZk9yaWctPmFuRWRnZTsKLSAgc3RydWN0IEZhY2VDb3VudCBt
YXgsIG5ld0ZhY2U7Ci0KLSAgbWF4LnNpemUgPSAxOwotICBtYXguZVN0YXJ0ID0gZTsKLSAgbWF4
LnJlbmRlciA9ICZSZW5kZXJUcmlhbmdsZTsKLQotICBpZiggISB0ZXNzLT5mbGFnQm91bmRhcnkg
KSB7Ci0gICAgbmV3RmFjZSA9IE1heGltdW1GYW4oIGUgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1h
eC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1GYW4oIGUt
PkxuZXh0ICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsg
fQotICAgIG5ld0ZhY2UgPSBNYXhpbXVtRmFuKCBlLT5McHJldiApOyBpZiggbmV3RmFjZS5zaXpl
ID4gbWF4LnNpemUgKSB7IG1heCA9IG5ld0ZhY2U7IH0KLQotICAgIG5ld0ZhY2UgPSBNYXhpbXVt
U3RyaXAoIGUgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNl
OyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1TdHJpcCggZS0+TG5leHQgKTsgaWYoIG5ld0ZhY2Uu
c2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGlt
dW1TdHJpcCggZS0+THByZXYgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXgg
PSBuZXdGYWNlOyB9Ci0gIH0KLSAgKCoobWF4LnJlbmRlcikpKCB0ZXNzLCBtYXguZVN0YXJ0LCBt
YXguc2l6ZSApOwotfQotCi0KLS8qIE1hY3JvcyB3aGljaCBrZWVwIHRyYWNrIG9mIGZhY2VzIHdl
IGhhdmUgbWFya2VkIHRlbXBvcmFyaWx5LCBhbmQgYWxsb3cKLSAqIHVzIHRvIGJhY2t0cmFjayB3
aGVuIG5lY2Vzc2FyeS4gIFdpdGggdHJpYW5nbGUgZmFucywgdGhpcyBpcyBub3QKLSAqIHJlYWxs
eSBuZWNlc3NhcnksIHNpbmNlIHRoZSBvbmx5IGF3a3dhcmQgY2FzZSBpcyBhIGxvb3Agb2YgdHJp
YW5nbGVzCi0gKiBhcm91bmQgYSBzaW5nbGUgb3JpZ2luIHZlcnRleC4gIEhvd2V2ZXIgd2l0aCBz
dHJpcHMgdGhlIHNpdHVhdGlvbiBpcwotICogbW9yZSBjb21wbGljYXRlZCwgYW5kIHdlIG5lZWQg
YSBnZW5lcmFsIHRyYWNraW5nIG1ldGhvZCBsaWtlIHRoZQotICogb25lIGhlcmUuCi0gKi8KLSNk
ZWZpbmUgTWFya2VkKGYpCSghIChmKS0+aW5zaWRlIHx8IChmKS0+bWFya2VkKQotCi0jZGVmaW5l
IEFkZFRvVHJhaWwoZix0KQkoKGYpLT50cmFpbCA9ICh0KSwgKHQpID0gKGYpLCAoZiktPm1hcmtl
ZCA9IFRSVUUpCi0KLSNkZWZpbmUgRnJlZVRyYWlsKHQpCWRvIHsgXAotCQkJICB3aGlsZSggKHQp
ICE9IE5VTEwgKSB7IFwKLQkJCSAgICAodCktPm1hcmtlZCA9IEZBTFNFOyB0ID0gKHQpLT50cmFp
bDsgXAotCQkJICB9IFwKLQkJCX0gd2hpbGUoMCkgLyogYWJzb3JiIHRyYWlsaW5nIHNlbWljb2xv
biAqLwotCi0KLQotc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bUZhbiggR0xVaGFsZkVk
Z2UgKmVPcmlnICkKLXsKLSAgLyogZU9yaWctPkxmYWNlIGlzIHRoZSBmYWNlIHdlIHdhbnQgdG8g
cmVuZGVyLiAgV2Ugd2FudCB0byBmaW5kIHRoZSBzaXplCi0gICAqIG9mIGEgbWF4aW1hbCBmYW4g
YXJvdW5kIGVPcmlnLT5PcmcuICBUbyBkbyB0aGlzIHdlIGp1c3Qgd2FsayBhcm91bmQKLSAgICog
dGhlIG9yaWdpbiB2ZXJ0ZXggYXMgZmFyIGFzIHBvc3NpYmxlIGluIGJvdGggZGlyZWN0aW9ucy4K
LSAgICovCi0gIHN0cnVjdCBGYWNlQ291bnQgbmV3RmFjZSA9IHsgMCwgTlVMTCwgJlJlbmRlckZh
biB9OwotICBHTFVmYWNlICp0cmFpbCA9IE5VTEw7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIGZv
ciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+TGZhY2UgKTsgZSA9IGUtPk9uZXh0ICkgewotICAg
IEFkZFRvVHJhaWwoIGUtPkxmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXplOwotICB9
Ci0gIGZvciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+UmZhY2UgKTsgZSA9IGUtPk9wcmV2ICkg
ewotICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXpl
OwotICB9Ci0gIG5ld0ZhY2UuZVN0YXJ0ID0gZTsKLSAgLypMSU5URUQqLwotICBGcmVlVHJhaWwo
IHRyYWlsICk7Ci0gIHJldHVybiBuZXdGYWNlOwotfQotCi0KLSNkZWZpbmUgSXNFdmVuKG4pCSgo
KG4pICYgMSkgPT0gMCkKLQotc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bVN0cmlwKCBH
TFVoYWxmRWRnZSAqZU9yaWcgKQotewotICAvKiBIZXJlIHdlIGFyZSBsb29raW5nIGZvciBhIG1h
eGltYWwgc3RyaXAgdGhhdCBjb250YWlucyB0aGUgdmVydGljZXMKLSAgICogZU9yaWctPk9yZywg
ZU9yaWctPkRzdCwgZU9yaWctPkxuZXh0LT5Ec3QgKGluIHRoYXQgb3JkZXIgb3IgdGhlCi0gICAq
IHJldmVyc2UsIHN1Y2ggdGhhdCBhbGwgdHJpYW5nbGVzIGFyZSBvcmllbnRlZCBDQ1cpLgotICAg
KgotICAgKiBBZ2FpbiB3ZSB3YWxrIGZvcndhcmQgYW5kIGJhY2t3YXJkIGFzIGZhciBhcyBwb3Nz
aWJsZS4gIEhvd2V2ZXIgZm9yCi0gICAqIHN0cmlwcyB0aGVyZSBpcyBhIHR3aXN0OiB0byBnZXQg
Q0NXIG9yaWVudGF0aW9ucywgdGhlcmUgbXVzdCBiZQotICAgKiBhbiAqZXZlbiogbnVtYmVyIG9m
IHRyaWFuZ2xlcyBpbiB0aGUgc3RyaXAgb24gb25lIHNpZGUgb2YgZU9yaWcuCi0gICAqIFdlIHdh
bGsgdGhlIHN0cmlwIHN0YXJ0aW5nIG9uIGEgc2lkZSB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIHRy
aWFuZ2xlczsKLSAgICogaWYgYm90aCBzaWRlIGhhdmUgYW4gb2RkIG51bWJlciwgd2UgYXJlIGZv
cmNlZCB0byBzaG9ydGVuIG9uZSBzaWRlLgotICAgKi8KLSAgc3RydWN0IEZhY2VDb3VudCBuZXdG
YWNlID0geyAwLCBOVUxMLCAmUmVuZGVyU3RyaXAgfTsKLSAgbG9uZyBoZWFkU2l6ZSA9IDAsIHRh
aWxTaXplID0gMDsKLSAgR0xVZmFjZSAqdHJhaWwgPSBOVUxMOwotICBHTFVoYWxmRWRnZSAqZSwg
KmVUYWlsLCAqZUhlYWQ7Ci0KLSAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5MZmFjZSAp
OyArK3RhaWxTaXplLCBlID0gZS0+T25leHQgKSB7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2Us
IHRyYWlsICk7Ci0gICAgKyt0YWlsU2l6ZTsKLSAgICBlID0gZS0+RHByZXY7Ci0gICAgaWYoIE1h
cmtlZCggZS0+TGZhY2UgKSkgYnJlYWs7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRyYWls
ICk7Ci0gIH0KLSAgZVRhaWwgPSBlOwotCi0gIGZvciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+
UmZhY2UgKTsgKytoZWFkU2l6ZSwgZSA9IGUtPkRuZXh0ICkgewotICAgIEFkZFRvVHJhaWwoIGUt
PlJmYWNlLCB0cmFpbCApOwotICAgICsraGVhZFNpemU7Ci0gICAgZSA9IGUtPk9wcmV2OwotICAg
IGlmKCBNYXJrZWQoIGUtPlJmYWNlICkpIGJyZWFrOwotICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNl
LCB0cmFpbCApOwotICB9Ci0gIGVIZWFkID0gZTsKLQotICBuZXdGYWNlLnNpemUgPSB0YWlsU2l6
ZSArIGhlYWRTaXplOwotICBpZiggSXNFdmVuKCB0YWlsU2l6ZSApKSB7Ci0gICAgbmV3RmFjZS5l
U3RhcnQgPSBlVGFpbC0+U3ltOwotICB9IGVsc2UgaWYoIElzRXZlbiggaGVhZFNpemUgKSkgewot
ICAgIG5ld0ZhY2UuZVN0YXJ0ID0gZUhlYWQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQm90aCBzaWRl
cyBoYXZlIG9kZCBsZW5ndGgsIHdlIG11c3Qgc2hvcnRlbiBvbmUgb2YgdGhlbS4gIEluIGZhY3Qs
Ci0gICAgICogd2UgbXVzdCBzdGFydCBmcm9tIGVIZWFkIHRvIGd1YXJhbnRlZSBpbmNsdXNpb24g
b2YgZU9yaWctPkxmYWNlLgotICAgICAqLwotICAgIC0tbmV3RmFjZS5zaXplOwotICAgIG5ld0Zh
Y2UuZVN0YXJ0ID0gZUhlYWQtPk9uZXh0OwotICB9Ci0gIC8qTElOVEVEKi8KLSAgRnJlZVRyYWls
KCB0cmFpbCApOwotICByZXR1cm4gbmV3RmFjZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBSZW5kZXJU
cmlhbmdsZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUsIGxvbmcgc2l6ZSAp
Ci17Ci0gIC8qIEp1c3QgYWRkIHRoZSB0cmlhbmdsZSB0byBhIHRyaWFuZ2xlIGxpc3QsIHNvIHdl
IGNhbiByZW5kZXIgYWxsCi0gICAqIHRoZSBzZXBhcmF0ZSB0cmlhbmdsZXMgYXQgb25jZS4KLSAg
ICovCi0gIGFzc2VydCggc2l6ZSA9PSAxICk7Ci0gIEFkZFRvVHJhaWwoIGUtPkxmYWNlLCB0ZXNz
LT5sb25lbHlUcmlMaXN0ICk7Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTG9uZWx5VHJpYW5n
bGVzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVmYWNlICpmICkKLXsKLSAgLyogTm93IHdlIHJl
bmRlciBhbGwgdGhlIHNlcGFyYXRlIHRyaWFuZ2xlcyB3aGljaCBjb3VsZCBub3QgYmUKLSAgICog
Z3JvdXBlZCBpbnRvIGEgdHJpYW5nbGUgZmFuIG9yIHN0cmlwLgotICAgKi8KLSAgR0xVaGFsZkVk
Z2UgKmU7Ci0gIGludCBuZXdTdGF0ZTsKLSAgaW50IGVkZ2VTdGF0ZSA9IC0xOwkvKiBmb3JjZSBl
ZGdlIHN0YXRlIG91dHB1dCBmb3IgZmlyc3QgdmVydGV4ICovCi0KLSAgQ0FMTF9CRUdJTl9PUl9C
RUdJTl9EQVRBKCBHTF9UUklBTkdMRVMgKTsKLQotICBmb3IoIDsgZiAhPSBOVUxMOyBmID0gZi0+
dHJhaWwgKSB7Ci0gICAgLyogTG9vcCBvbmNlIGZvciBlYWNoIGVkZ2UgKHRoZXJlIHdpbGwgYWx3
YXlzIGJlIDMgZWRnZXMpICovCi0KLSAgICBlID0gZi0+YW5FZGdlOwotICAgIGRvIHsKLSAgICAg
IGlmKCB0ZXNzLT5mbGFnQm91bmRhcnkgKSB7Ci0JLyogU2V0IHRoZSAiZWRnZSBzdGF0ZSIgdG8g
VFJVRSBqdXN0IGJlZm9yZSB3ZSBvdXRwdXQgdGhlCi0JICogZmlyc3QgdmVydGV4IG9mIGVhY2gg
ZWRnZSBvbiB0aGUgcG9seWdvbiBib3VuZGFyeS4KLQkgKi8KLQluZXdTdGF0ZSA9ICEgZS0+UmZh
Y2UtPmluc2lkZTsKLQlpZiggZWRnZVN0YXRlICE9IG5ld1N0YXRlICkgewotCSAgZWRnZVN0YXRl
ID0gbmV3U3RhdGU7Ci0gICAgICAgICAgQ0FMTF9FREdFX0ZMQUdfT1JfRURHRV9GTEFHX0RBVEEo
IGVkZ2VTdGF0ZSApOwotCX0KLSAgICAgIH0KLSAgICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9E
QVRBKCBlLT5PcmctPmRhdGEgKTsKLQotICAgICAgZSA9IGUtPkxuZXh0OwotICAgIH0gd2hpbGUo
IGUgIT0gZi0+YW5FZGdlICk7Ci0gIH0KLSAgQ0FMTF9FTkRfT1JfRU5EX0RBVEEoKTsKLX0KLQot
Ci1zdGF0aWMgdm9pZCBSZW5kZXJGYW4oIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdl
ICplLCBsb25nIHNpemUgKQotewotICAvKiBSZW5kZXIgYXMgbWFueSBDQ1cgdHJpYW5nbGVzIGFz
IHBvc3NpYmxlIGluIGEgZmFuIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgZmFu
ICpzaG91bGQqIGNvbnRhaW4gZXhhY3RseSAic2l6ZSIgdHJpYW5nbGVzCi0gICAqIChvdGhlcndp
c2Ugd2UndmUgZ29vZmVkIHVwIHNvbWV3aGVyZSkuCi0gICAqLwotICBDQUxMX0JFR0lOX09SX0JF
R0lOX0RBVEEoIEdMX1RSSUFOR0xFX0ZBTiApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RB
VEEoIGUtPk9yZy0+ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRz
dC0+ZGF0YSApOyAKLQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBlLT5M
ZmFjZS0+bWFya2VkID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAg
IENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBh
c3NlcnQoIHNpemUgPT0gMCApOwotICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotfQotCi0KLXN0
YXRpYyB2b2lkIFJlbmRlclN0cmlwKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRnZSAq
ZSwgbG9uZyBzaXplICkKLXsKLSAgLyogUmVuZGVyIGFzIG1hbnkgQ0NXIHRyaWFuZ2xlcyBhcyBw
b3NzaWJsZSBpbiBhIHN0cmlwIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgc3Ry
aXAgKnNob3VsZCogY29udGFpbiBleGFjdGx5ICJzaXplIiB0cmlhbmdsZXMKLSAgICogKG90aGVy
d2lzZSB3ZSd2ZSBnb29mZWQgdXAgc29tZXdoZXJlKS4KLSAgICovCi0gIENBTExfQkVHSU5fT1Jf
QkVHSU5fREFUQSggR0xfVFJJQU5HTEVfU1RSSVAgKTsKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVY
X0RBVEEoIGUtPk9yZy0+ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUt
PkRzdC0+ZGF0YSApOyAKLQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBl
LT5MZmFjZS0+bWFya2VkID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPkRwcmV2Owot
ICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5PcmctPmRhdGEgKTsgCi0gICAgaWYo
IE1hcmtlZCggZS0+TGZhY2UgKSkgYnJlYWs7Ci0KLSAgICBlLT5MZmFjZS0+bWFya2VkID0gVFJV
RTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAgIENBTExfVkVSVEVYX09SX1ZF
UlRFWF9EQVRBKCBlLT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBhc3NlcnQoIHNpemUgPT0gMCAp
OwotICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioq
KioqKiogQm91bmRhcnkgY29udG91ciBkZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKi8K
LQotLyogX19nbF9yZW5kZXJCb3VuZGFyeSggdGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCwgYW5k
IG91dHB1dHMgb25lCi0gKiBjb250b3VyIGZvciBlYWNoIGZhY2UgbWFya2VkICJpbnNpZGUiLiAg
VGhlIHJlbmRlcmluZyBvdXRwdXQgaXMKLSAqIHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAoc2VlIHRo
ZSBhcGkpLgotICovCi12b2lkIF9fZ2xfcmVuZGVyQm91bmRhcnkoIEdMVXRlc3NlbGF0b3IgKnRl
c3MsIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmOwotICBHTFVoYWxmRWRnZSAqZTsK
LQotICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGYt
Pm5leHQgKSB7Ci0gICAgaWYoIGYtPmluc2lkZSApIHsKLSAgICAgIENBTExfQkVHSU5fT1JfQkVH
SU5fREFUQSggR0xfTElORV9MT09QICk7Ci0gICAgICBlID0gZi0+YW5FZGdlOwotICAgICAgZG8g
ewotICAgICAgICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+T3JnLT5kYXRhICk7IAot
CWUgPSBlLT5MbmV4dDsKLSAgICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5FZGdlICk7Ci0gICAgICBD
QUxMX0VORF9PUl9FTkRfREFUQSgpOwotICAgIH0KLSAgfQotfQotCi0KLS8qKioqKioqKioqKioq
KioqKioqKioqKiogUXVpY2stYW5kLWRpcnR5IGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioq
KioqLwotCi0jZGVmaW5lIFNJR05fSU5DT05TSVNURU5UIDIKLQotc3RhdGljIGludCBDb21wdXRl
Tm9ybWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBub3JtWzNdLCBpbnQgY2hlY2sg
KQotLyoKLSAqIElmIGNoZWNrPT1GQUxTRSwgd2UgY29tcHV0ZSB0aGUgcG9seWdvbiBub3JtYWwg
YW5kIHBsYWNlIGl0IGluIG5vcm1bXS4KLSAqIElmIGNoZWNrPT1UUlVFLCB3ZSBjaGVjayB0aGF0
IGVhY2ggdHJpYW5nbGUgaW4gdGhlIGZhbiBmcm9tIHYwIGhhcyBhCi0gKiBjb25zaXN0ZW50IG9y
aWVudGF0aW9uIHdpdGggcmVzcGVjdCB0byBub3JtW10uICBJZiB0cmlhbmdsZXMgYXJlCi0gKiBj
b25zaXN0ZW50bHkgb3JpZW50ZWQgQ0NXLCByZXR1cm4gMTsgaWYgQ1csIHJldHVybiAtMTsgaWYg
YWxsIHRyaWFuZ2xlcwotICogYXJlIGRlZ2VuZXJhdGUgcmV0dXJuIDA7IG90aGVyd2lzZSAobm8g
Y29uc2lzdGVudCBvcmllbnRhdGlvbikgcmV0dXJuCi0gKiBTSUdOX0lOQ09OU0lTVEVOVC4KLSAq
LwotewotICBDYWNoZWRWZXJ0ZXggKnYwID0gdGVzcy0+Y2FjaGU7Ci0gIENhY2hlZFZlcnRleCAq
dm4gPSB2MCArIHRlc3MtPmNhY2hlQ291bnQ7Ci0gIENhY2hlZFZlcnRleCAqdmM7Ci0gIEdMZG91
YmxlIGRvdCwgeGMsIHljLCB6YywgeHAsIHlwLCB6cCwgblszXTsKLSAgaW50IHNpZ24gPSAwOwot
Ci0gIC8qIEZpbmQgdGhlIHBvbHlnb24gbm9ybWFsLiAgSXQgaXMgaW1wb3J0YW50IHRvIGdldCBh
IHJlYXNvbmFibGUKLSAgICogbm9ybWFsIGV2ZW4gd2hlbiB0aGUgcG9seWdvbiBpcyBzZWxmLWlu
dGVyc2VjdGluZyAoZWcuIGEgYm93dGllKS4KLSAgICogT3RoZXJ3aXNlLCB0aGUgY29tcHV0ZWQg
bm9ybWFsIGNvdWxkIGJlIHZlcnkgdGlueSwgYnV0IHBlcnBlbmRpY3VsYXIKLSAgICogdG8gdGhl
IHRydWUgcGxhbmUgb2YgdGhlIHBvbHlnb24gZHVlIHRvIG51bWVyaWNhbCBub2lzZS4gIFRoZW4g
YWxsCi0gICAqIHRoZSB0cmlhbmdsZXMgd291bGQgYXBwZWFyIHRvIGJlIGRlZ2VuZXJhdGUgYW5k
IHdlIHdvdWxkIGluY29ycmVjdGx5Ci0gICAqIGRlY29tcG9zZSB0aGUgcG9seWdvbiBhcyBhIGZh
biAob3Igc2ltcGx5IG5vdCByZW5kZXIgaXQgYXQgYWxsKS4KLSAgICoKLSAgICogV2UgdXNlIGEg
c3VtLW9mLXRyaWFuZ2xlcyBub3JtYWwgYWxnb3JpdGhtIHJhdGhlciB0aGFuIHRoZSBtb3JlCi0g
ICAqIGVmZmljaWVudCBzdW0tb2YtdHJhcGV6b2lkcyBtZXRob2QgKHVzZWQgaW4gQ2hlY2tPcmll
bnRhdGlvbigpCi0gICAqIGluIG5vcm1hbC5jKS4gIFRoaXMgbGV0cyB1cyBleHBsaWNpdGx5IHJl
dmVyc2UgdGhlIHNpZ25lZCBhcmVhCi0gICAqIG9mIHNvbWUgdHJpYW5nbGVzIHRvIGdldCBhIHJl
YXNvbmFibGUgbm9ybWFsIGluIHRoZSBzZWxmLWludGVyc2VjdGluZwotICAgKiBjYXNlLgotICAg
Ki8KLSAgaWYoICEgY2hlY2sgKSB7Ci0gICAgbm9ybVswXSA9IG5vcm1bMV0gPSBub3JtWzJdID0g
MC4wOwotICB9Ci0KLSAgdmMgPSB2MCArIDE7Ci0gIHhjID0gdmMtPmNvb3Jkc1swXSAtIHYwLT5j
b29yZHNbMF07Ci0gIHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0gIHpjID0g
dmMtPmNvb3Jkc1syXSAtIHYwLT5jb29yZHNbMl07Ci0gIHdoaWxlKCArK3ZjIDwgdm4gKSB7Ci0g
ICAgeHAgPSB4YzsgeXAgPSB5YzsgenAgPSB6YzsKLSAgICB4YyA9IHZjLT5jb29yZHNbMF0gLSB2
MC0+Y29vcmRzWzBdOwotICAgIHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0g
ICAgemMgPSB2Yy0+Y29vcmRzWzJdIC0gdjAtPmNvb3Jkc1syXTsKLQotICAgIC8qIENvbXB1dGUg
KHZwIC0gdjApIGNyb3NzICh2YyAtIHYwKSAqLwotICAgIG5bMF0gPSB5cCp6YyAtIHpwKnljOwot
ICAgIG5bMV0gPSB6cCp4YyAtIHhwKnpjOwotICAgIG5bMl0gPSB4cCp5YyAtIHlwKnhjOwotCi0g
ICAgZG90ID0gblswXSpub3JtWzBdICsgblsxXSpub3JtWzFdICsgblsyXSpub3JtWzJdOwotICAg
IGlmKCAhIGNoZWNrICkgewotICAgICAgLyogUmV2ZXJzZSB0aGUgY29udHJpYnV0aW9uIG9mIGJh
Y2stZmFjaW5nIHRyaWFuZ2xlcyB0byBnZXQKLSAgICAgICAqIGEgcmVhc29uYWJsZSBub3JtYWwg
Zm9yIHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zIChzZWUgYWJvdmUpCi0gICAgICAgKi8KLSAg
ICAgIGlmKCBkb3QgPj0gMCApIHsKLQlub3JtWzBdICs9IG5bMF07IG5vcm1bMV0gKz0gblsxXTsg
bm9ybVsyXSArPSBuWzJdOwotICAgICAgfSBlbHNlIHsKLQlub3JtWzBdIC09IG5bMF07IG5vcm1b
MV0gLT0gblsxXTsgbm9ybVsyXSAtPSBuWzJdOwotICAgICAgfQotICAgIH0gZWxzZSBpZiggZG90
ICE9IDAgKSB7Ci0gICAgICAvKiBDaGVjayB0aGUgbmV3IG9yaWVudGF0aW9uIGZvciBjb25zaXN0
ZW5jeSB3aXRoIHByZXZpb3VzIHRyaWFuZ2xlcyAqLwotICAgICAgaWYoIGRvdCA+IDAgKSB7Ci0J
aWYoIHNpZ24gPCAwICkgcmV0dXJuIFNJR05fSU5DT05TSVNURU5UOwotCXNpZ24gPSAxOwotICAg
ICAgfSBlbHNlIHsKLQlpZiggc2lnbiA+IDAgKSByZXR1cm4gU0lHTl9JTkNPTlNJU1RFTlQ7Ci0J
c2lnbiA9IC0xOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2lnbjsKLX0KLQotLyog
X19nbF9yZW5kZXJDYWNoZSggdGVzcyApIHRha2VzIGEgc2luZ2xlIGNvbnRvdXIgYW5kIHRyaWVz
IHRvIHJlbmRlciBpdAotICogYXMgYSB0cmlhbmdsZSBmYW4uICBUaGlzIGhhbmRsZXMgY29udmV4
IHBvbHlnb25zLCBhcyB3ZWxsIGFzIHNvbWUKLSAqIG5vbi1jb252ZXggcG9seWdvbnMgaWYgd2Ug
Z2V0IGx1Y2t5LgotICoKLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgcG9seWdvbiB3YXMgc3VjY2Vz
c2Z1bGx5IHJlbmRlcmVkLiAgVGhlIHJlbmRlcmluZwotICogb3V0cHV0IGlzIHByb3ZpZGVkIGFz
IGNhbGxiYWNrcyAoc2VlIHRoZSBhcGkpLgotICovCi1HTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNo
ZSggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIENhY2hlZFZlcnRleCAqdjAgPSB0ZXNzLT5j
YWNoZTsKLSAgQ2FjaGVkVmVydGV4ICp2biA9IHYwICsgdGVzcy0+Y2FjaGVDb3VudDsKLSAgQ2Fj
aGVkVmVydGV4ICp2YzsKLSAgR0xkb3VibGUgbm9ybVszXTsKLSAgaW50IHNpZ247Ci0KLSAgaWYo
IHRlc3MtPmNhY2hlQ291bnQgPCAzICkgewotICAgIC8qIERlZ2VuZXJhdGUgY29udG91ciAtLSBu
byBvdXRwdXQgKi8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIG5vcm1bMF0gPSB0ZXNzLT5u
b3JtYWxbMF07Ci0gIG5vcm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07Ci0gIG5vcm1bMl0gPSB0ZXNz
LT5ub3JtYWxbMl07Ci0gIGlmKCBub3JtWzBdID09IDAgJiYgbm9ybVsxXSA9PSAwICYmIG5vcm1b
Ml0gPT0gMCApIHsKLSAgICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBub3JtLCBGQUxTRSApOwotICB9
Ci0KLSAgc2lnbiA9IENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0sIFRSVUUgKTsKLSAgaWYoIHNp
Z24gPT0gU0lHTl9JTkNPTlNJU1RFTlQgKSB7Ci0gICAgLyogRmFuIHRyaWFuZ2xlcyBkaWQgbm90
IGhhdmUgYSBjb25zaXN0ZW50IG9yaWVudGF0aW9uICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9
Ci0gIGlmKCBzaWduID09IDAgKSB7Ci0gICAgLyogQWxsIHRyaWFuZ2xlcyB3ZXJlIGRlZ2VuZXJh
dGUgKi8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIE1ha2Ugc3VyZSB3ZSBkbyB0aGUg
cmlnaHQgdGhpbmcgZm9yIGVhY2ggd2luZGluZyBydWxlICovCi0gIHN3aXRjaCggdGVzcy0+d2lu
ZGluZ1J1bGUgKSB7Ci0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6Ci0gIGNhc2UgR0xVX1RF
U1NfV0lORElOR19OT05aRVJPOgotICAgIGJyZWFrOwotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdf
UE9TSVRJVkU6Ci0gICAgaWYoIHNpZ24gPCAwICkgcmV0dXJuIFRSVUU7Ci0gICAgYnJlYWs7Ci0g
IGNhc2UgR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToKLSAgICBpZiggc2lnbiA+IDAgKSByZXR1
cm4gVFJVRTsKLSAgICBicmVhazsKLSAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdP
OgotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCB0
ZXNzLT5ib3VuZGFyeU9ubHkgPyBHTF9MSU5FX0xPT1AKLQkJCSAgOiAodGVzcy0+Y2FjaGVDb3Vu
dCA+IDMpID8gR0xfVFJJQU5HTEVfRkFOCi0JCQkgIDogR0xfVFJJQU5HTEVTICk7Ci0KLSAgQ0FM
TF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIHYwLT5kYXRhICk7IAotICBpZiggc2lnbiA+IDAgKSB7
Ci0gICAgZm9yKCB2YyA9IHYwKzE7IHZjIDwgdm47ICsrdmMgKSB7Ci0gICAgICBDQUxMX1ZFUlRF
WF9PUl9WRVJURVhfREFUQSggdmMtPmRhdGEgKTsgCi0gICAgfQotICB9IGVsc2UgewotICAgIGZv
ciggdmMgPSB2bi0xOyB2YyA+IHYwOyAtLXZjICkgewotICAgICAgQ0FMTF9WRVJURVhfT1JfVkVS
VEVYX0RBVEEoIHZjLT5kYXRhICk7IAotICAgIH0KLSAgfQotICBDQUxMX0VORF9PUl9FTkRfREFU
QSgpOwotICByZXR1cm4gVFJVRTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvcmVuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU5ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUg
ZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBh
bHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3
YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMg
b2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBM
aWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAx
NjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1
MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiog
Ci0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUg
aXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1Mg
QU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5D
TFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0q
KiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJ
VE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQu
Ci0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2Ft
cGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAy
NiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmln
aW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIElu
Yy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVz
IGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9u
IHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5j
dGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGlj
cyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBB
cHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJh
cnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVu
R0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAx
LjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3Jl
YXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0
aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkg
dmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lv
biAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNo
LCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVw
b3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3JlbmRlci5oIzUgJAotKi8KLQotI2lmbmRlZiBf
X3JlbmRlcl9oXwotI2RlZmluZSBfX3JlbmRlcl9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9tZXNoLmgiCi0KLS8qIF9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVzaCApIHRh
a2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKLSAqIGZhbnMsIHN0cmlwcywg
YW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZmb3J0IGlzIG1hZGUKLSAq
IHRvIHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMgYXMgcG9zc2libGUgKGllLiB0byBt
YWtlIHRoZSBmYW5zCi0gKiBhbmQgc3RyaXBzIGFzIGxhcmdlIGFzIHBvc3NpYmxlKS4KLSAqCi0g
KiBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBhcyBjYWxsYmFja3MgKHNlZSB0aGUg
YXBpKS4KLSAqLwotdm9pZCBfX2dsX3JlbmRlck1lc2goIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdM
VW1lc2ggKm1lc2ggKTsKLXZvaWQgX19nbF9yZW5kZXJCb3VuZGFyeSggR0xVdGVzc2VsYXRvciAq
dGVzcywgR0xVbWVzaCAqbWVzaCApOwotCi1HTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNoZSggR0xV
dGVzc2VsYXRvciAqdGVzcyApOwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNl
L1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEzNjIgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRv
IHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRv
IGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiog
U29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250
ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2Yg
dGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2Vydmlj
ZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0
My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVC
Ci0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0
d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQ
UkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVE
LCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBB
TkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElU
WSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdF
TUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5H
TCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51
YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhl
IE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBh
cnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGlj
YXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNv
bmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQK
LSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkg
TGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5k
IE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJz
aW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdh
cyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVt
ZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRl
bnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2
ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMg
VmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjog
Ly9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvc3dlZXAuYyM1ICQKLSovCi0KLSNpbmNs
dWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzZXRqbXAuaD4JCS8qIGxvbmdqbXAgKi8KLSNpbmNs
dWRlIDxsaW1pdHMuaD4JCS8qIExPTkdfTUFYICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvZGljdC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5o
IgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL3ByaW9yaXR5cS5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
c3dlZXAuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKLQotI2Rl
ZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0jaWZkZWYgRk9SX1RSSVRFX1RFU1RfUFJP
R1JBTQotZXh0ZXJuIHZvaWQgRGVidWdFdmVudCggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotI2Vs
c2UKLSNkZWZpbmUgRGVidWdFdmVudCggdGVzcyApCi0jZW5kaWYKLQotLyoKLSAqIEludmFyaWFu
dHMgZm9yIHRoZSBFZGdlIERpY3Rpb25hcnkuCi0gKiAtIGVhY2ggcGFpciBvZiBhZGphY2VudCBl
ZGdlcyBlMj1TdWNjKGUxKSBzYXRpc2ZpZXMgRWRnZUxlcShlMSxlMikKLSAqICAgYXQgYW55IHZh
bGlkIGxvY2F0aW9uIG9mIHRoZSBzd2VlcCBldmVudAotICogLSBpZiBFZGdlTGVxKGUyLGUxKSBh
cyB3ZWxsIChhdCBhbnkgdmFsaWQgc3dlZXAgZXZlbnQpLCB0aGVuIGUxIGFuZCBlMgotICogICBz
aGFyZSBhIGNvbW1vbiBlbmRwb2ludAotICogLSBmb3IgZWFjaCBlLCBlLT5Ec3QgaGFzIGJlZW4g
cHJvY2Vzc2VkLCBidXQgbm90IGUtPk9yZwotICogLSBlYWNoIGVkZ2UgZSBzYXRpc2ZpZXMgVmVy
dExlcShlLT5Ec3QsZXZlbnQpICYmIFZlcnRMZXEoZXZlbnQsZS0+T3JnKQotICogICB3aGVyZSAi
ZXZlbnQiIGlzIHRoZSBjdXJyZW50IHN3ZWVwIGxpbmUgZXZlbnQuCi0gKiAtIG5vIGVkZ2UgZSBo
YXMgemVybyBsZW5ndGgKLSAqCi0gKiBJbnZhcmlhbnRzIGZvciB0aGUgTWVzaCAodGhlIHByb2Nl
c3NlZCBwb3J0aW9uKS4KLSAqIC0gdGhlIHBvcnRpb24gb2YgdGhlIG1lc2ggbGVmdCBvZiB0aGUg
c3dlZXAgbGluZSBpcyBhIHBsYW5hciBncmFwaCwKLSAqICAgaWUuIHRoZXJlIGlzICpzb21lKiB3
YXkgdG8gZW1iZWQgaXQgaW4gdGhlIHBsYW5lCi0gKiAtIG5vIHByb2Nlc3NlZCBlZGdlIGhhcyB6
ZXJvIGxlbmd0aAotICogLSBubyB0d28gcHJvY2Vzc2VkIHZlcnRpY2VzIGhhdmUgaWRlbnRpY2Fs
IGNvb3JkaW5hdGVzCi0gKiAtIGVhY2ggImluc2lkZSIgcmVnaW9uIGlzIG1vbm90b25lLCBpZS4g
Y2FuIGJlIGJyb2tlbiBpbnRvIHR3byBjaGFpbnMKLSAqICAgb2YgbW9ub3RvbmljYWxseSBpbmNy
ZWFzaW5nIHZlcnRpY2VzIGFjY29yZGluZyB0byBWZXJ0TGVxKHYxLHYyKQotICogICAtIGEgbm9u
LWludmFyaWFudDogdGhlc2UgY2hhaW5zIG1heSBpbnRlcnNlY3QgKHZlcnkgc2xpZ2h0bHkpCi0g
KgotICogSW52YXJpYW50cyBmb3IgdGhlIFN3ZWVwLgotICogLSBpZiBub25lIG9mIHRoZSBlZGdl
cyBpbmNpZGVudCB0byB0aGUgZXZlbnQgdmVydGV4IGhhdmUgYW4gYWN0aXZlUmVnaW9uCi0gKiAg
IChpZS4gbm9uZSBvZiB0aGVzZSBlZGdlcyBhcmUgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeSksIHRo
ZW4gdGhlIHZlcnRleAotICogICBoYXMgb25seSByaWdodC1nb2luZyBlZGdlcy4KLSAqIC0gaWYg
YW4gZWRnZSBpcyBtYXJrZWQgImZpeFVwcGVyRWRnZSIgKGl0IGlzIGEgdGVtcG9yYXJ5IGVkZ2Ug
aW50cm9kdWNlZAotICogICBieSBDb25uZWN0UmlnaHRWZXJ0ZXgpLCB0aGVuIGl0IGlzIHRoZSBv
bmx5IHJpZ2h0LWdvaW5nIGVkZ2UgZnJvbQotICogICBpdHMgYXNzb2NpYXRlZCB2ZXJ0ZXguICAo
VGhpcyBzYXlzIHRoYXQgdGhlc2UgZWRnZXMgZXhpc3Qgb25seQotICogICB3aGVuIGl0IGlzIG5l
Y2Vzc2FyeS4pCi0gKi8KLQotI2RlZmluZSBNQVgoeCx5KQkoKHgpID49ICh5KSA/ICh4KSA6ICh5
KSkKLSNkZWZpbmUgTUlOKHgseSkJKCh4KSA8PSAoeSkgPyAoeCkgOiAoeSkpCi0KLS8qIFdoZW4g
d2UgbWVyZ2UgdHdvIGVkZ2VzIGludG8gb25lLCB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNvbWJp
bmVkCi0gKiB3aW5kaW5nIG9mIHRoZSBuZXcgZWRnZS4KLSAqLwotI2RlZmluZSBBZGRXaW5kaW5n
KGVEc3QsZVNyYykJKGVEc3QtPndpbmRpbmcgKz0gZVNyYy0+d2luZGluZywgXAotCQkJCSBlRHN0
LT5TeW0tPndpbmRpbmcgKz0gZVNyYy0+U3ltLT53aW5kaW5nKQotCi1zdGF0aWMgdm9pZCBTd2Vl
cEV2ZW50KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCApOwotc3RhdGlj
IHZvaWQgV2Fsa0RpcnR5UmVnaW9ucyggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9u
ICpyZWdVcCApOwotc3RhdGljIGludCBDaGVja0ZvclJpZ2h0U3BsaWNlKCBHTFV0ZXNzZWxhdG9y
ICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICk7Ci0KLXN0YXRpYyBpbnQgRWRnZUxlcSggR0xV
dGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWcxLAotCQkgICAgQWN0aXZlUmVnaW9u
ICpyZWcyICkKLS8qCi0gKiBCb3RoIGVkZ2VzIG11c3QgYmUgZGlyZWN0ZWQgZnJvbSByaWdodCB0
byBsZWZ0ICh0aGlzIGlzIHRoZSBjYW5vbmljYWwKLSAqIGRpcmVjdGlvbiBmb3IgdGhlIHVwcGVy
IGVkZ2Ugb2YgZWFjaCByZWdpb24pLgotICoKLSAqIFRoZSBzdHJhdGVneSBpcyB0byBldmFsdWF0
ZSBhICJ0IiB2YWx1ZSBmb3IgZWFjaCBlZGdlIGF0IHRoZQotICogY3VycmVudCBzd2VlcCBsaW5l
IHBvc2l0aW9uLCBnaXZlbiBieSB0ZXNzLT5ldmVudC4gIFRoZSBjYWxjdWxhdGlvbnMKLSAqIGFy
ZSBkZXNpZ25lZCB0byBiZSB2ZXJ5IHN0YWJsZSwgYnV0IG9mIGNvdXJzZSB0aGV5IGFyZSBub3Qg
cGVyZmVjdC4KLSAqCi0gKiBTcGVjaWFsIGNhc2U6IGlmIGJvdGggZWRnZSBkZXN0aW5hdGlvbnMg
YXJlIGF0IHRoZSBzd2VlcCBldmVudCwKLSAqIHdlIHNvcnQgdGhlIGVkZ2VzIGJ5IHNsb3BlICh0
aGV5IHdvdWxkIG90aGVyd2lzZSBjb21wYXJlIGVxdWFsbHkpLgotICovCi17Ci0gIEdMVXZlcnRl
eCAqZXZlbnQgPSB0ZXNzLT5ldmVudDsKLSAgR0xVaGFsZkVkZ2UgKmUxLCAqZTI7Ci0gIEdMZG91
YmxlIHQxLCB0MjsKLQotICBlMSA9IHJlZzEtPmVVcDsKLSAgZTIgPSByZWcyLT5lVXA7Ci0KLSAg
aWYoIGUxLT5Ec3QgPT0gZXZlbnQgKSB7Ci0gICAgaWYoIGUyLT5Ec3QgPT0gZXZlbnQgKSB7Ci0g
ICAgICAvKiBUd28gZWRnZXMgcmlnaHQgb2YgdGhlIHN3ZWVwIGxpbmUgd2hpY2ggbWVldCBhdCB0
aGUgc3dlZXAgZXZlbnQuCi0gICAgICAgKiBTb3J0IHRoZW0gYnkgc2xvcGUuCi0gICAgICAgKi8K
LSAgICAgIGlmKCBWZXJ0TGVxKCBlMS0+T3JnLCBlMi0+T3JnICkpIHsKLQlyZXR1cm4gRWRnZVNp
Z24oIGUyLT5Ec3QsIGUxLT5PcmcsIGUyLT5PcmcgKSA8PSAwOwotICAgICAgfQotICAgICAgcmV0
dXJuIEVkZ2VTaWduKCBlMS0+RHN0LCBlMi0+T3JnLCBlMS0+T3JnICkgPj0gMDsKLSAgICB9Ci0g
ICAgcmV0dXJuIEVkZ2VTaWduKCBlMi0+RHN0LCBldmVudCwgZTItPk9yZyApIDw9IDA7Ci0gIH0K
LSAgaWYoIGUyLT5Ec3QgPT0gZXZlbnQgKSB7Ci0gICAgcmV0dXJuIEVkZ2VTaWduKCBlMS0+RHN0
LCBldmVudCwgZTEtPk9yZyApID49IDA7Ci0gIH0KLQotICAvKiBHZW5lcmFsIGNhc2UgLSBjb21w
dXRlIHNpZ25lZCBkaXN0YW5jZSAqZnJvbSogZTEsIGUyIHRvIGV2ZW50ICovCi0gIHQxID0gRWRn
ZUV2YWwoIGUxLT5Ec3QsIGV2ZW50LCBlMS0+T3JnICk7Ci0gIHQyID0gRWRnZUV2YWwoIGUyLT5E
c3QsIGV2ZW50LCBlMi0+T3JnICk7Ci0gIHJldHVybiAodDEgPj0gdDIpOwotfQotCi0KLXN0YXRp
YyB2b2lkIERlbGV0ZVJlZ2lvbiggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpy
ZWcgKQotewotICBpZiggcmVnLT5maXhVcHBlckVkZ2UgKSB7Ci0gICAgLyogSXQgd2FzIGNyZWF0
ZWQgd2l0aCB6ZXJvIHdpbmRpbmcgbnVtYmVyLCBzbyBpdCBiZXR0ZXIgYmUKLSAgICAgKiBkZWxl
dGVkIHdpdGggemVybyB3aW5kaW5nIG51bWJlciAoaWUuIGl0IGJldHRlciBub3QgZ2V0IG1lcmdl
ZAotICAgICAqIHdpdGggYSByZWFsIGVkZ2UpLgotICAgICAqLwotICAgIGFzc2VydCggcmVnLT5l
VXAtPndpbmRpbmcgPT0gMCApOwotICB9Ci0gIHJlZy0+ZVVwLT5hY3RpdmVSZWdpb24gPSBOVUxM
OwotICBkaWN0RGVsZXRlKCB0ZXNzLT5kaWN0LCByZWctPm5vZGVVcCApOyAvKiBfX2dsX2RpY3RM
aXN0RGVsZXRlICovCi0gIG1lbUZyZWUoIHJlZyApOwotfQotCi0KLXN0YXRpYyBpbnQgRml4VXBw
ZXJFZGdlKCBBY3RpdmVSZWdpb24gKnJlZywgR0xVaGFsZkVkZ2UgKm5ld0VkZ2UgKQotLyoKLSAq
IFJlcGxhY2UgYW4gdXBwZXIgZWRnZSB3aGljaCBuZWVkcyBmaXhpbmcgKHNlZSBDb25uZWN0Umln
aHRWZXJ0ZXgpLgotICovCi17Ci0gIGFzc2VydCggcmVnLT5maXhVcHBlckVkZ2UgKTsKLSAgaWYg
KCAhX19nbF9tZXNoRGVsZXRlKCByZWctPmVVcCApICkgcmV0dXJuIDA7Ci0gIHJlZy0+Zml4VXBw
ZXJFZGdlID0gRkFMU0U7Ci0gIHJlZy0+ZVVwID0gbmV3RWRnZTsKLSAgbmV3RWRnZS0+YWN0aXZl
UmVnaW9uID0gcmVnOwotCi0gIHJldHVybiAxOyAKLX0KLQotc3RhdGljIEFjdGl2ZVJlZ2lvbiAq
VG9wTGVmdFJlZ2lvbiggQWN0aXZlUmVnaW9uICpyZWcgKQotewotICBHTFV2ZXJ0ZXggKm9yZyA9
IHJlZy0+ZVVwLT5Pcmc7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIC8qIEZpbmQgdGhlIHJlZ2lv
biBhYm92ZSB0aGUgdXBwZXJtb3N0IGVkZ2Ugd2l0aCB0aGUgc2FtZSBvcmlnaW4gKi8KLSAgZG8g
ewotICAgIHJlZyA9IFJlZ2lvbkFib3ZlKCByZWcgKTsKLSAgfSB3aGlsZSggcmVnLT5lVXAtPk9y
ZyA9PSBvcmcgKTsKLQotICAvKiBJZiB0aGUgZWRnZSBhYm92ZSB3YXMgYSB0ZW1wb3JhcnkgZWRn
ZSBpbnRyb2R1Y2VkIGJ5IENvbm5lY3RSaWdodFZlcnRleCwKLSAgICogbm93IGlzIHRoZSB0aW1l
IHRvIGZpeCBpdC4KLSAgICovCi0gIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKLSAgICBlID0g
X19nbF9tZXNoQ29ubmVjdCggUmVnaW9uQmVsb3cocmVnKS0+ZVVwLT5TeW0sIHJlZy0+ZVVwLT5M
bmV4dCApOwotICAgIGlmIChlID09IE5VTEwpIHJldHVybiBOVUxMOwotICAgIGlmICggIUZpeFVw
cGVyRWRnZSggcmVnLCBlICkgKSByZXR1cm4gTlVMTDsKLSAgICByZWcgPSBSZWdpb25BYm92ZSgg
cmVnICk7Ci0gIH0KLSAgcmV0dXJuIHJlZzsKLX0KLQotc3RhdGljIEFjdGl2ZVJlZ2lvbiAqVG9w
UmlnaHRSZWdpb24oIEFjdGl2ZVJlZ2lvbiAqcmVnICkKLXsKLSAgR0xVdmVydGV4ICpkc3QgPSBy
ZWctPmVVcC0+RHN0OwotCi0gIC8qIEZpbmQgdGhlIHJlZ2lvbiBhYm92ZSB0aGUgdXBwZXJtb3N0
IGVkZ2Ugd2l0aCB0aGUgc2FtZSBkZXN0aW5hdGlvbiAqLwotICBkbyB7Ci0gICAgcmVnID0gUmVn
aW9uQWJvdmUoIHJlZyApOwotICB9IHdoaWxlKCByZWctPmVVcC0+RHN0ID09IGRzdCApOwotICBy
ZXR1cm4gcmVnOwotfQotCi1zdGF0aWMgQWN0aXZlUmVnaW9uICpBZGRSZWdpb25CZWxvdyggR0xV
dGVzc2VsYXRvciAqdGVzcywKLQkJCQkgICAgIEFjdGl2ZVJlZ2lvbiAqcmVnQWJvdmUsCi0JCQkJ
ICAgICBHTFVoYWxmRWRnZSAqZU5ld1VwICkKLS8qCi0gKiBBZGQgYSBuZXcgYWN0aXZlIHJlZ2lv
biB0byB0aGUgc3dlZXAgbGluZSwgKnNvbWV3aGVyZSogYmVsb3cgInJlZ0Fib3ZlIgotICogKGFj
Y29yZGluZyB0byB3aGVyZSB0aGUgbmV3IGVkZ2UgYmVsb25ncyBpbiB0aGUgc3dlZXAtbGluZSBk
aWN0aW9uYXJ5KS4KLSAqIFRoZSB1cHBlciBlZGdlIG9mIHRoZSBuZXcgcmVnaW9uIHdpbGwgYmUg
ImVOZXdVcCIuCi0gKiBXaW5kaW5nIG51bWJlciBhbmQgImluc2lkZSIgZmxhZyBhcmUgbm90IHVw
ZGF0ZWQuCi0gKi8KLXsKLSAgQWN0aXZlUmVnaW9uICpyZWdOZXcgPSAoQWN0aXZlUmVnaW9uICop
bWVtQWxsb2MoIHNpemVvZiggQWN0aXZlUmVnaW9uICkpOwotICBpZiAocmVnTmV3ID09IE5VTEwp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOwotCi0gIHJlZ05ldy0+ZVVwID0gZU5ld1VwOwotICAvKiBf
X2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3JlICovIAotICByZWdOZXctPm5vZGVVcCA9IGRpY3RJbnNl
cnRCZWZvcmUoIHRlc3MtPmRpY3QsIHJlZ0Fib3ZlLT5ub2RlVXAsIHJlZ05ldyApOwotICBpZiAo
cmVnTmV3LT5ub2RlVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIHJlZ05ldy0+
Zml4VXBwZXJFZGdlID0gRkFMU0U7Ci0gIHJlZ05ldy0+c2VudGluZWwgPSBGQUxTRTsKLSAgcmVn
TmV3LT5kaXJ0eSA9IEZBTFNFOwotCi0gIGVOZXdVcC0+YWN0aXZlUmVnaW9uID0gcmVnTmV3Owot
ICByZXR1cm4gcmVnTmV3OwotfQotCi1zdGF0aWMgR0xib29sZWFuIElzV2luZGluZ0luc2lkZSgg
R0xVdGVzc2VsYXRvciAqdGVzcywgaW50IG4gKQotewotICBzd2l0Y2goIHRlc3MtPndpbmRpbmdS
dWxlICkgewotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfT0REOgotICAgIHJldHVybiAobiAmIDEp
OwotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoKLSAgICByZXR1cm4gKG4gIT0gMCk7
Ci0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToKLSAgICByZXR1cm4gKG4gPiAwKTsK
LSAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFOgotICAgIHJldHVybiAobiA8IDApOwot
ICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086Ci0gICAgcmV0dXJuIChuID49IDIp
IHx8IChuIDw9IC0yKTsKLSAgfQotICAvKkxJTlRFRCovCi0gIGFzc2VydCggRkFMU0UgKTsKLSAg
LypOT1RSRUFDSEVEKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ29tcHV0ZVdp
bmRpbmcoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnICkKLXsKLSAgcmVn
LT53aW5kaW5nTnVtYmVyID0gUmVnaW9uQWJvdmUocmVnKS0+d2luZGluZ051bWJlciArIHJlZy0+
ZVVwLT53aW5kaW5nOwotICByZWctPmluc2lkZSA9IElzV2luZGluZ0luc2lkZSggdGVzcywgcmVn
LT53aW5kaW5nTnVtYmVyICk7Ci19Ci0KLQotc3RhdGljIHZvaWQgRmluaXNoUmVnaW9uKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZyApCi0vKgotICogRGVsZXRlIGEgcmVn
aW9uIGZyb20gdGhlIHN3ZWVwIGxpbmUuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgdXBwZXIKLSAq
IGFuZCBsb3dlciBjaGFpbnMgb2YgYSByZWdpb24gbWVldCAoYXQgYSB2ZXJ0ZXggb24gdGhlIHN3
ZWVwIGxpbmUpLgotICogVGhlICJpbnNpZGUiIGZsYWcgaXMgY29waWVkIHRvIHRoZSBhcHByb3By
aWF0ZSBtZXNoIGZhY2UgKHdlIGNvdWxkCi0gKiBub3QgZG8gdGhpcyBiZWZvcmUgLS0gc2luY2Ug
dGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzaCBpcyBhbHdheXMKLSAqIGNoYW5naW5nLCB0aGlzIGZh
Y2UgbWF5IG5vdCBoYXZlIGV2ZW4gZXhpc3RlZCB1bnRpbCBub3cpLgotICovCi17Ci0gIEdMVWhh
bGZFZGdlICplID0gcmVnLT5lVXA7Ci0gIEdMVWZhY2UgKmYgPSBlLT5MZmFjZTsKLQotICBmLT5p
bnNpZGUgPSByZWctPmluc2lkZTsKLSAgZi0+YW5FZGdlID0gZTsgICAvKiBvcHRpbWl6YXRpb24g
Zm9yIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCkgKi8KLSAgRGVsZXRlUmVnaW9uKCB0
ZXNzLCByZWcgKTsKLX0KLQotCi1zdGF0aWMgR0xVaGFsZkVkZ2UgKkZpbmlzaExlZnRSZWdpb25z
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAotCSAgICAgICBBY3RpdmVSZWdpb24gKnJlZ0ZpcnN0LCBB
Y3RpdmVSZWdpb24gKnJlZ0xhc3QgKQotLyoKLSAqIFdlIGFyZSBnaXZlbiBhIHZlcnRleCB3aXRo
IG9uZSBvciBtb3JlIGxlZnQtZ29pbmcgZWRnZXMuICBBbGwgYWZmZWN0ZWQKLSAqIGVkZ2VzIHNo
b3VsZCBiZSBpbiB0aGUgZWRnZSBkaWN0aW9uYXJ5LiAgU3RhcnRpbmcgYXQgcmVnRmlyc3QtPmVV
cCwKLSAqIHdlIHdhbGsgZG93biBkZWxldGluZyBhbGwgcmVnaW9ucyB3aGVyZSBib3RoIGVkZ2Vz
IGhhdmUgdGhlIHNhbWUKLSAqIG9yaWdpbiB2T3JnLiAgQXQgdGhlIHNhbWUgdGltZSB3ZSBjb3B5
IHRoZSAiaW5zaWRlIiBmbGFnIGZyb20gdGhlCi0gKiBhY3RpdmUgcmVnaW9uIHRvIHRoZSBmYWNl
LCBzaW5jZSBhdCB0aGlzIHBvaW50IGVhY2ggZmFjZSB3aWxsIGJlbG9uZwotICogdG8gYXQgbW9z
dCBvbmUgcmVnaW9uICh0aGlzIHdhcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB1bnRpbCB0aGlzIHBv
aW50Ci0gKiBpbiB0aGUgc3dlZXApLiAgVGhlIHdhbGsgc3RvcHMgYXQgdGhlIHJlZ2lvbiBhYm92
ZSByZWdMYXN0OyBpZiByZWdMYXN0Ci0gKiBpcyBOVUxMIHdlIHdhbGsgYXMgZmFyIGFzIHBvc3Np
YmxlLiAgQXQgdGhlIHNhbWUgdGltZSB3ZSByZWxpbmsgdGhlCi0gKiBtZXNoIGlmIG5lY2Vzc2Fy
eSwgc28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgZWRnZXMgYXJvdW5kIHZPcmcgaXMgdGhlCi0gKiBz
YW1lIGFzIGluIHRoZSBkaWN0aW9uYXJ5LgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnLCAq
cmVnUHJldjsKLSAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKLQotICByZWdQcmV2ID0gcmVnRmly
c3Q7Ci0gIGVQcmV2ID0gcmVnRmlyc3QtPmVVcDsKLSAgd2hpbGUoIHJlZ1ByZXYgIT0gcmVnTGFz
dCApIHsKLSAgICByZWdQcmV2LT5maXhVcHBlckVkZ2UgPSBGQUxTRTsJLyogcGxhY2VtZW50IHdh
cyBPSyAqLwotICAgIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdQcmV2ICk7Ci0gICAgZSA9IHJlZy0+
ZVVwOwotICAgIGlmKCBlLT5PcmcgIT0gZVByZXYtPk9yZyApIHsKLSAgICAgIGlmKCAhIHJlZy0+
Zml4VXBwZXJFZGdlICkgewotCS8qIFJlbW92ZSB0aGUgbGFzdCBsZWZ0LWdvaW5nIGVkZ2UuICBF
dmVuIHRob3VnaCB0aGVyZSBhcmUgbm8gZnVydGhlcgotCSAqIGVkZ2VzIGluIHRoZSBkaWN0aW9u
YXJ5IHdpdGggdGhpcyBvcmlnaW4sIHRoZXJlIG1heSBiZSBmdXJ0aGVyCi0JICogc3VjaCBlZGdl
cyBpbiB0aGUgbWVzaCAoaWYgd2UgYXJlIGFkZGluZyBsZWZ0IGVkZ2VzIHRvIGEgdmVydGV4Ci0J
ICogdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCkuICBUaHVzIGl0IGlzIGltcG9ydGFu
dCB0byBjYWxsCi0JICogRmluaXNoUmVnaW9uIHJhdGhlciB0aGFuIGp1c3QgRGVsZXRlUmVnaW9u
LgotCSAqLwotCUZpbmlzaFJlZ2lvbiggdGVzcywgcmVnUHJldiApOwotCWJyZWFrOwotICAgICAg
fQotICAgICAgLyogSWYgdGhlIGVkZ2UgYmVsb3cgd2FzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9k
dWNlZCBieQotICAgICAgICogQ29ubmVjdFJpZ2h0VmVydGV4LCBub3cgaXMgdGhlIHRpbWUgdG8g
Zml4IGl0LgotICAgICAgICovCi0gICAgICBlID0gX19nbF9tZXNoQ29ubmVjdCggZVByZXYtPkxw
cmV2LCBlLT5TeW0gKTsKLSAgICAgIGlmIChlID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEp
OwotICAgICAgaWYgKCAhRml4VXBwZXJFZGdlKCByZWcsIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52
LDEpOwotICAgIH0KLQotICAgIC8qIFJlbGluayBlZGdlcyBzbyB0aGF0IGVQcmV2LT5PbmV4dCA9
PSBlICovCi0gICAgaWYoIGVQcmV2LT5PbmV4dCAhPSBlICkgewotICAgICAgaWYgKCAhX19nbF9t
ZXNoU3BsaWNlKCBlLT5PcHJldiwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgICBp
ZiAoICFfX2dsX21lc2hTcGxpY2UoIGVQcmV2LCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
LSAgICB9Ci0gICAgRmluaXNoUmVnaW9uKCB0ZXNzLCByZWdQcmV2ICk7CS8qIG1heSBjaGFuZ2Ug
cmVnLT5lVXAgKi8KLSAgICBlUHJldiA9IHJlZy0+ZVVwOwotICAgIHJlZ1ByZXYgPSByZWc7Ci0g
IH0KLSAgcmV0dXJuIGVQcmV2OwotfQotCi0KLXN0YXRpYyB2b2lkIEFkZFJpZ2h0RWRnZXMoIEdM
VXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsCi0gICAgICAgR0xVaGFsZkVk
Z2UgKmVGaXJzdCwgR0xVaGFsZkVkZ2UgKmVMYXN0LCBHTFVoYWxmRWRnZSAqZVRvcExlZnQsCi0g
ICAgICAgR0xib29sZWFuIGNsZWFuVXAgKQotLyoKLSAqIFB1cnBvc2U6IGluc2VydCByaWdodC1n
b2luZyBlZGdlcyBpbnRvIHRoZSBlZGdlIGRpY3Rpb25hcnksIGFuZCB1cGRhdGUKLSAqIHdpbmRp
bmcgbnVtYmVycyBhbmQgbWVzaCBjb25uZWN0aXZpdHkgYXBwcm9wcmlhdGVseS4gIEFsbCByaWdo
dC1nb2luZwotICogZWRnZXMgc2hhcmUgYSBjb21tb24gb3JpZ2luIHZPcmcuICBFZGdlcyBhcmUg
aW5zZXJ0ZWQgQ0NXIHN0YXJ0aW5nIGF0Ci0gKiBlRmlyc3Q7IHRoZSBsYXN0IGVkZ2UgaW5zZXJ0
ZWQgaXMgZUxhc3QtPk9wcmV2LiAgSWYgdk9yZyBoYXMgYW55Ci0gKiBsZWZ0LWdvaW5nIGVkZ2Vz
IGFscmVhZHkgcHJvY2Vzc2VkLCB0aGVuIGVUb3BMZWZ0IG11c3QgYmUgdGhlIGVkZ2UKLSAqIHN1
Y2ggdGhhdCBhbiBpbWFnaW5hcnkgdXB3YXJkIHZlcnRpY2FsIHNlZ21lbnQgZnJvbSB2T3JnIHdv
dWxkIGJlCi0gKiBjb250YWluZWQgYmV0d2VlbiBlVG9wTGVmdC0+T3ByZXYgYW5kIGVUb3BMZWZ0
OyBvdGhlcndpc2UgZVRvcExlZnQKLSAqIHNob3VsZCBiZSBOVUxMLgotICovCi17Ci0gIEFjdGl2
ZVJlZ2lvbiAqcmVnLCAqcmVnUHJldjsKLSAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKLSAgaW50
IGZpcnN0VGltZSA9IFRSVUU7Ci0KLSAgLyogSW5zZXJ0IHRoZSBuZXcgcmlnaHQtZ29pbmcgZWRn
ZXMgaW4gdGhlIGRpY3Rpb25hcnkgKi8KLSAgZSA9IGVGaXJzdDsKLSAgZG8gewotICAgIGFzc2Vy
dCggVmVydExlcSggZS0+T3JnLCBlLT5Ec3QgKSk7Ci0gICAgQWRkUmVnaW9uQmVsb3coIHRlc3Ms
IHJlZ1VwLCBlLT5TeW0gKTsKLSAgICBlID0gZS0+T25leHQ7Ci0gIH0gd2hpbGUgKCBlICE9IGVM
YXN0ICk7Ci0KLSAgLyogV2FsayAqYWxsKiByaWdodC1nb2luZyBlZGdlcyBmcm9tIGUtPk9yZywg
aW4gdGhlIGRpY3Rpb25hcnkgb3JkZXIsCi0gICAqIHVwZGF0aW5nIHRoZSB3aW5kaW5nIG51bWJl
cnMgb2YgZWFjaCByZWdpb24sIGFuZCByZS1saW5raW5nIHRoZSBtZXNoCi0gICAqIGVkZ2VzIHRv
IG1hdGNoIHRoZSBkaWN0aW9uYXJ5IG9yZGVyaW5nIChpZiBuZWNlc3NhcnkpLgotICAgKi8KLSAg
aWYoIGVUb3BMZWZ0ID09IE5VTEwgKSB7Ci0gICAgZVRvcExlZnQgPSBSZWdpb25CZWxvdyggcmVn
VXAgKS0+ZVVwLT5ScHJldjsKLSAgfQotICByZWdQcmV2ID0gcmVnVXA7Ci0gIGVQcmV2ID0gZVRv
cExlZnQ7Ci0gIGZvciggOzsgKSB7Ci0gICAgcmVnID0gUmVnaW9uQmVsb3coIHJlZ1ByZXYgKTsK
LSAgICBlID0gcmVnLT5lVXAtPlN5bTsKLSAgICBpZiggZS0+T3JnICE9IGVQcmV2LT5PcmcgKSBi
cmVhazsKLQotICAgIGlmKCBlLT5PbmV4dCAhPSBlUHJldiApIHsKLSAgICAgIC8qIFVubGluayBl
IGZyb20gaXRzIGN1cnJlbnQgcG9zaXRpb24sIGFuZCByZWxpbmsgYmVsb3cgZVByZXYgKi8KLSAg
ICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZS0+T3ByZXYsIGUgKSApIGxvbmdqbXAodGVzcy0+
ZW52LDEpOwotICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlUHJldi0+T3ByZXYsIGUgKSAp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIH0KLSAgICAvKiBDb21wdXRlIHRoZSB3aW5kaW5n
IG51bWJlciBhbmQgImluc2lkZSIgZmxhZyBmb3IgdGhlIG5ldyByZWdpb25zICovCi0gICAgcmVn
LT53aW5kaW5nTnVtYmVyID0gcmVnUHJldi0+d2luZGluZ051bWJlciAtIGUtPndpbmRpbmc7Ci0g
ICAgcmVnLT5pbnNpZGUgPSBJc1dpbmRpbmdJbnNpZGUoIHRlc3MsIHJlZy0+d2luZGluZ051bWJl
ciApOwotCi0gICAgLyogQ2hlY2sgZm9yIHR3byBvdXRnb2luZyBlZGdlcyB3aXRoIHNhbWUgc2xv
cGUgLS0gcHJvY2VzcyB0aGVzZQotICAgICAqIGJlZm9yZSBhbnkgaW50ZXJzZWN0aW9uIHRlc3Rz
IChzZWUgZXhhbXBsZSBpbiBfX2dsX2NvbXB1dGVJbnRlcmlvcikuCi0gICAgICovCi0gICAgcmVn
UHJldi0+ZGlydHkgPSBUUlVFOwotICAgIGlmKCAhIGZpcnN0VGltZSAmJiBDaGVja0ZvclJpZ2h0
U3BsaWNlKCB0ZXNzLCByZWdQcmV2ICkpIHsKLSAgICAgIEFkZFdpbmRpbmcoIGUsIGVQcmV2ICk7
Ci0gICAgICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ1ByZXYgKTsKLSAgICAgIGlmICggIV9fZ2xf
bWVzaERlbGV0ZSggZVByZXYgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIH0KLSAgICBm
aXJzdFRpbWUgPSBGQUxTRTsKLSAgICByZWdQcmV2ID0gcmVnOwotICAgIGVQcmV2ID0gZTsKLSAg
fQotICByZWdQcmV2LT5kaXJ0eSA9IFRSVUU7Ci0gIGFzc2VydCggcmVnUHJldi0+d2luZGluZ051
bWJlciAtIGUtPndpbmRpbmcgPT0gcmVnLT53aW5kaW5nTnVtYmVyICk7Ci0KLSAgaWYoIGNsZWFu
VXAgKSB7Ci0gICAgLyogQ2hlY2sgZm9yIGludGVyc2VjdGlvbnMgYmV0d2VlbiBuZXdseSBhZGph
Y2VudCBlZGdlcy4gKi8KLSAgICBXYWxrRGlydHlSZWdpb25zKCB0ZXNzLCByZWdQcmV2ICk7Ci0g
IH0KLX0KLQotCi1zdGF0aWMgdm9pZCBDYWxsQ29tYmluZSggR0xVdGVzc2VsYXRvciAqdGVzcywg
R0xVdmVydGV4ICppc2VjdCwKLQkJCSB2b2lkICpkYXRhWzRdLCBHTGZsb2F0IHdlaWdodHNbNF0s
IGludCBuZWVkZWQgKQotewotICBHTGRvdWJsZSBjb29yZHNbM107Ci0KLSAgLyogQ29weSBjb29y
ZCBkYXRhIGluIGNhc2UgdGhlIGNhbGxiYWNrIGNoYW5nZXMgaXQuICovCi0gIGNvb3Jkc1swXSA9
IGlzZWN0LT5jb29yZHNbMF07Ci0gIGNvb3Jkc1sxXSA9IGlzZWN0LT5jb29yZHNbMV07Ci0gIGNv
b3Jkc1syXSA9IGlzZWN0LT5jb29yZHNbMl07Ci0KLSAgaXNlY3QtPmRhdGEgPSBOVUxMOwotICBD
QUxMX0NPTUJJTkVfT1JfQ09NQklORV9EQVRBKCBjb29yZHMsIGRhdGEsIHdlaWdodHMsICZpc2Vj
dC0+ZGF0YSApOwotICBpZiggaXNlY3QtPmRhdGEgPT0gTlVMTCApIHsKLSAgICBpZiggISBuZWVk
ZWQgKSB7Ci0gICAgICBpc2VjdC0+ZGF0YSA9IGRhdGFbMF07Ci0gICAgfSBlbHNlIGlmKCAhIHRl
c3MtPmZhdGFsRXJyb3IgKSB7Ci0gICAgICAvKiBUaGUgb25seSB3YXkgZmF0YWwgZXJyb3IgaXMg
d2hlbiB0d28gZWRnZXMgYXJlIGZvdW5kIHRvIGludGVyc2VjdCwKLSAgICAgICAqIGJ1dCB0aGUg
dXNlciBoYXMgbm90IHByb3ZpZGVkIHRoZSBjYWxsYmFjayBuZWNlc3NhcnkgdG8gaGFuZGxlCi0g
ICAgICAgKiBnZW5lcmF0ZWQgaW50ZXJzZWN0aW9uIHBvaW50cy4KLSAgICAgICAqLwotICAgICAg
Q0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0sg
KTsKLSAgICAgIHRlc3MtPmZhdGFsRXJyb3IgPSBUUlVFOwotICAgIH0KLSAgfQotfQotCi1zdGF0
aWMgdm9pZCBTcGxpY2VNZXJnZVZlcnRpY2VzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxm
RWRnZSAqZTEsCi0JCQkJIEdMVWhhbGZFZGdlICplMiApCi0vKgotICogVHdvIHZlcnRpY2VzIHdp
dGggaWRlbnRpYWwgY29vcmRpbmF0ZXMgYXJlIGNvbWJpbmVkIGludG8gb25lLgotICogZTEtPk9y
ZyBpcyBrZXB0LCB3aGlsZSBlMi0+T3JnIGlzIGRpc2NhcmRlZC4KLSAqLwotewotICB2b2lkICpk
YXRhWzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0gIEdMZmxvYXQgd2VpZ2h0c1s0
XSA9IHsgMC41LCAwLjUsIDAuMCwgMC4wIH07Ci0KLSAgZGF0YVswXSA9IGUxLT5PcmctPmRhdGE7
Ci0gIGRhdGFbMV0gPSBlMi0+T3JnLT5kYXRhOwotICBDYWxsQ29tYmluZSggdGVzcywgZTEtPk9y
ZywgZGF0YSwgd2VpZ2h0cywgRkFMU0UgKTsKLSAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlMSwg
ZTIgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAKLX0KLQotc3RhdGljIHZvaWQgVmVydGV4V2Vp
Z2h0cyggR0xVdmVydGV4ICppc2VjdCwgR0xVdmVydGV4ICpvcmcsIEdMVXZlcnRleCAqZHN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqd2VpZ2h0cyApCi0vKgotICogRmlu
ZCBzb21lIHdlaWdodHMgd2hpY2ggZGVzY3JpYmUgaG93IHRoZSBpbnRlcnNlY3Rpb24gdmVydGV4
IGlzCi0gKiBhIGxpbmVhciBjb21iaW5hdGlvbiBvZiAib3JnIiBhbmQgImRlc3QiLiAgRWFjaCBv
ZiB0aGUgdHdvIGVkZ2VzCi0gKiB3aGljaCBnZW5lcmF0ZWQgImlzZWN0IiBpcyBhbGxvY2F0ZWQg
NTAlIG9mIHRoZSB3ZWlnaHQ7IGVhY2ggZWRnZQotICogc3BsaXRzIHRoZSB3ZWlnaHQgYmV0d2Vl
biBpdHMgb3JnIGFuZCBkc3QgYWNjb3JkaW5nIHRvIHRoZQotICogcmVsYXRpdmUgZGlzdGFuY2Ug
dG8gImlzZWN0Ii4KLSAqLwotewotICBHTGRvdWJsZSB0MSA9IFZlcnRMMWRpc3QoIG9yZywgaXNl
Y3QgKTsKLSAgR0xkb3VibGUgdDIgPSBWZXJ0TDFkaXN0KCBkc3QsIGlzZWN0ICk7Ci0KLSAgd2Vp
Z2h0c1swXSA9IDAuNSAqIHQyIC8gKHQxICsgdDIpOwotICB3ZWlnaHRzWzFdID0gMC41ICogdDEg
LyAodDEgKyB0Mik7Ci0gIGlzZWN0LT5jb29yZHNbMF0gKz0gd2VpZ2h0c1swXSpvcmctPmNvb3Jk
c1swXSArIHdlaWdodHNbMV0qZHN0LT5jb29yZHNbMF07Ci0gIGlzZWN0LT5jb29yZHNbMV0gKz0g
d2VpZ2h0c1swXSpvcmctPmNvb3Jkc1sxXSArIHdlaWdodHNbMV0qZHN0LT5jb29yZHNbMV07Ci0g
IGlzZWN0LT5jb29yZHNbMl0gKz0gd2VpZ2h0c1swXSpvcmctPmNvb3Jkc1syXSArIHdlaWdodHNb
MV0qZHN0LT5jb29yZHNbMl07Ci19Ci0KLQotc3RhdGljIHZvaWQgR2V0SW50ZXJzZWN0RGF0YSgg
R0xVdGVzc2VsYXRvciAqdGVzcywgR0xVdmVydGV4ICppc2VjdCwKLSAgICAgICBHTFV2ZXJ0ZXgg
Km9yZ1VwLCBHTFV2ZXJ0ZXggKmRzdFVwLAotICAgICAgIEdMVXZlcnRleCAqb3JnTG8sIEdMVXZl
cnRleCAqZHN0TG8gKQotLyoKLSAqIFdlJ3ZlIGNvbXB1dGVkIGEgbmV3IGludGVyc2VjdGlvbiBw
b2ludCwgbm93IHdlIG5lZWQgYSAiZGF0YSIgcG9pbnRlcgotICogZnJvbSB0aGUgdXNlciBzbyB0
aGF0IHdlIGNhbiByZWZlciB0byB0aGlzIG5ldyB2ZXJ0ZXggaW4gdGhlCi0gKiByZW5kZXJpbmcg
Y2FsbGJhY2tzLgotICovCi17Ci0gIHZvaWQgKmRhdGFbNF07Ci0gIEdMZmxvYXQgd2VpZ2h0c1s0
XTsKLQotICBkYXRhWzBdID0gb3JnVXAtPmRhdGE7Ci0gIGRhdGFbMV0gPSBkc3RVcC0+ZGF0YTsK
LSAgZGF0YVsyXSA9IG9yZ0xvLT5kYXRhOwotICBkYXRhWzNdID0gZHN0TG8tPmRhdGE7Ci0KLSAg
aXNlY3QtPmNvb3Jkc1swXSA9IGlzZWN0LT5jb29yZHNbMV0gPSBpc2VjdC0+Y29vcmRzWzJdID0g
MDsKLSAgVmVydGV4V2VpZ2h0cyggaXNlY3QsIG9yZ1VwLCBkc3RVcCwgJndlaWdodHNbMF0gKTsK
LSAgVmVydGV4V2VpZ2h0cyggaXNlY3QsIG9yZ0xvLCBkc3RMbywgJndlaWdodHNbMl0gKTsKLQot
ICBDYWxsQ29tYmluZSggdGVzcywgaXNlY3QsIGRhdGEsIHdlaWdodHMsIFRSVUUgKTsKLX0KLQot
c3RhdGljIGludCBDaGVja0ZvclJpZ2h0U3BsaWNlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3Rp
dmVSZWdpb24gKnJlZ1VwICkKLS8qCi0gKiBDaGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2Ug
b2YgInJlZ1VwIiwgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0gKiBlVXAtPk9yZyBpcyBhYm92ZSBl
TG8sIG9yIGVMby0+T3JnIGlzIGJlbG93IGVVcCAoZGVwZW5kaW5nIG9uIHdoaWNoCi0gKiBvcmln
aW4gaXMgbGVmdG1vc3QpLgotICoKLSAqIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gc3BsaWNlIHJp
Z2h0LWdvaW5nIGVkZ2VzIHdpdGggdGhlIHNhbWUKLSAqIGRlc3QgdmVydGV4IGFuZCBuZWFybHkg
aWRlbnRpY2FsIHNsb3BlcyAoaWUuIHdlIGNhbid0IGRpc3Rpbmd1aXNoCi0gKiB0aGUgc2xvcGVz
IG51bWVyaWNhbGx5KS4gIEhvd2V2ZXIgdGhlIHNwbGljaW5nIGNhbiBhbHNvIGhlbHAgdXMKLSAq
IHRvIHJlY292ZXIgZnJvbSBudW1lcmljYWwgZXJyb3JzLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2Ug
YXQgb25lCi0gKiBwb2ludCB3ZSBjaGVja2VkIGVVcCBhbmQgZUxvLCBhbmQgZGVjaWRlZCB0aGF0
IGVVcC0+T3JnIGlzIGJhcmVseQotICogYWJvdmUgZUxvLiAgVGhlbiBsYXRlciwgd2Ugc3BsaXQg
ZUxvIGludG8gdHdvIGVkZ2VzIChlZy4gZnJvbQotICogYSBzcGxpY2Ugb3BlcmF0aW9uIGxpa2Ug
dGhpcyBvbmUpLiAgVGhpcyBjYW4gY2hhbmdlIHRoZSByZXN1bHQgb2YKLSAqIG91ciB0ZXN0IHNv
IHRoYXQgbm93IGVVcC0+T3JnIGlzIGluY2lkZW50IHRvIGVMbywgb3IgYmFyZWx5IGJlbG93IGl0
LgotICogV2UgbXVzdCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uIHRvIG1haW50YWluIHRoZSBkaWN0
aW9uYXJ5IGludmFyaWFudHMuCi0gKgotICogT25lIHBvc3NpYmlsaXR5IGlzIHRvIGNoZWNrIHRo
ZXNlIGVkZ2VzIGZvciBpbnRlcnNlY3Rpb24gYWdhaW4KLSAqIChpZS4gQ2hlY2tGb3JJbnRlcnNl
Y3QpLiAgVGhpcyBpcyB3aGF0IHdlIGRvIGlmIHBvc3NpYmxlLiAgSG93ZXZlcgotICogQ2hlY2tG
b3JJbnRlcnNlY3QgcmVxdWlyZXMgdGhhdCB0ZXNzLT5ldmVudCBsaWVzIGJldHdlZW4gZVVwIGFu
ZCBlTG8sCi0gKiBzbyB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZmFsbCBiYWNrIG9uIHdoZW4g
dGhlIGludGVyc2VjdGlvbgotICogY2FsY3VsYXRpb24gZ2l2ZXMgdXMgYW4gdW51c2FibGUgYW5z
d2VyLiAgU28sIGZvciB0aG9zZSBjYXNlcyB3aGVyZQotICogd2UgY2FuJ3QgY2hlY2sgZm9yIGlu
dGVyc2VjdGlvbiwgdGhpcyByb3V0aW5lIGZpeGVzIHRoZSBwcm9ibGVtCi0gKiBieSBqdXN0IHNw
bGljaW5nIHRoZSBvZmZlbmRpbmcgdmVydGV4IGludG8gdGhlIG90aGVyIGVkZ2UuCi0gKiBUaGlz
IGlzIGEgZ3VhcmFudGVlZCBzb2x1dGlvbiwgbm8gbWF0dGVyIGhvdyBkZWdlbmVyYXRlIHRoaW5n
cyBnZXQuCi0gKiBCYXNpY2FsbHkgdGhpcyBpcyBhIGNvbWJpbmF0b3JpYWwgc29sdXRpb24gdG8g
YSBudW1lcmljYWwgcHJvYmxlbS4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVn
aW9uQmVsb3cocmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVVcDsKLSAgR0xV
aGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7Ci0KLSAgaWYoIFZlcnRMZXEoIGVVcC0+T3JnLCBl
TG8tPk9yZyApKSB7Ci0gICAgaWYoIEVkZ2VTaWduKCBlTG8tPkRzdCwgZVVwLT5PcmcsIGVMby0+
T3JnICkgPiAwICkgcmV0dXJuIEZBTFNFOwotCi0gICAgLyogZVVwLT5PcmcgYXBwZWFycyB0byBi
ZSBiZWxvdyBlTG8gKi8KLSAgICBpZiggISBWZXJ0RXEoIGVVcC0+T3JnLCBlTG8tPk9yZyApKSB7
Ci0gICAgICAvKiBTcGxpY2UgZVVwLT5PcmcgaW50byBlTG8gKi8KLSAgICAgIGlmICggX19nbF9t
ZXNoU3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwot
ICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAsIGVMby0+T3ByZXYgKSApIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOwotICAgICAgcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsK
LQotICAgIH0gZWxzZSBpZiggZVVwLT5PcmcgIT0gZUxvLT5PcmcgKSB7Ci0gICAgICAvKiBtZXJn
ZSB0aGUgdHdvIHZlcnRpY2VzLCBkaXNjYXJkaW5nIGVVcC0+T3JnICovCi0gICAgICBwcURlbGV0
ZSggdGVzcy0+cHEsIGVVcC0+T3JnLT5wcUhhbmRsZSApOyAvKiBfX2dsX3BxU29ydERlbGV0ZSAq
LwotICAgICAgU3BsaWNlTWVyZ2VWZXJ0aWNlcyggdGVzcywgZUxvLT5PcHJldiwgZVVwICk7Ci0g
ICAgfQotICB9IGVsc2UgewotICAgIGlmKCBFZGdlU2lnbiggZVVwLT5Ec3QsIGVMby0+T3JnLCBl
VXAtPk9yZyApIDwgMCApIHJldHVybiBGQUxTRTsKLQotICAgIC8qIGVMby0+T3JnIGFwcGVhcnMg
dG8gYmUgYWJvdmUgZVVwLCBzbyBzcGxpY2UgZUxvLT5PcmcgaW50byBlVXAgKi8KLSAgICBSZWdp
b25BYm92ZShyZWdVcCktPmRpcnR5ID0gcmVnVXAtPmRpcnR5ID0gVFJVRTsKLSAgICBpZiAoX19n
bF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEp
OwotICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5PcHJldiwgZVVwICkgKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGludCBDaGVj
a0ZvckxlZnRTcGxpY2UoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAg
KQotLyoKLSAqIENoZWNrIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRnZSBvZiAicmVnVXAiLCB0byBt
YWtlIHN1cmUgdGhhdCB0aGUKLSAqIGVVcC0+RHN0IGlzIGFib3ZlIGVMbywgb3IgZUxvLT5Ec3Qg
aXMgYmVsb3cgZVVwIChkZXBlbmRpbmcgb24gd2hpY2gKLSAqIGRlc3RpbmF0aW9uIGlzIHJpZ2h0
bW9zdCkuCi0gKgotICogVGhlb3JldGljYWxseSwgdGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWUu
ICBIb3dldmVyLCBzcGxpdHRpbmcgYW4gZWRnZQotICogaW50byB0d28gcGllY2VzIGNhbiBjaGFu
Z2UgdGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgdGVzdHMuICBGb3IgZXhhbXBsZSwKLSAqIHN1cHBv
c2UgYXQgb25lIHBvaW50IHdlIGNoZWNrZWQgZVVwIGFuZCBlTG8sIGFuZCBkZWNpZGVkIHRoYXQg
ZVVwLT5Ec3QKLSAqIGlzIGJhcmVseSBhYm92ZSBlTG8uICBUaGVuIGxhdGVyLCB3ZSBzcGxpdCBl
TG8gaW50byB0d28gZWRnZXMgKGVnLiBmcm9tCi0gKiBhIHNwbGljZSBvcGVyYXRpb24gbGlrZSB0
aGlzIG9uZSkuICBUaGlzIGNhbiBjaGFuZ2UgdGhlIHJlc3VsdCBvZgotICogdGhlIHRlc3Qgc28g
dGhhdCBub3cgZVVwLT5Ec3QgaXMgaW5jaWRlbnQgdG8gZUxvLCBvciBiYXJlbHkgYmVsb3cgaXQu
Ci0gKiBXZSBtdXN0IGNvcnJlY3QgdGhpcyBjb25kaXRpb24gdG8gbWFpbnRhaW4gdGhlIGRpY3Rp
b25hcnkgaW52YXJpYW50cwotICogKG90aGVyd2lzZSBuZXcgZWRnZXMgbWlnaHQgZ2V0IGluc2Vy
dGVkIGluIHRoZSB3cm9uZyBwbGFjZSBpbiB0aGUKLSAqIGRpY3Rpb25hcnksIGFuZCBiYWQgc3R1
ZmYgd2lsbCBoYXBwZW4pLgotICoKLSAqIFdlIGZpeCB0aGUgcHJvYmxlbSBieSBqdXN0IHNwbGlj
aW5nIHRoZSBvZmZlbmRpbmcgdmVydGV4IGludG8gdGhlCi0gKiBvdGhlciBlZGdlLgotICovCi17
Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnTG8gPSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZF
ZGdlICplVXAgPSByZWdVcC0+ZVVwOwotICBHTFVoYWxmRWRnZSAqZUxvID0gcmVnTG8tPmVVcDsK
LSAgR0xVaGFsZkVkZ2UgKmU7Ci0KLSAgYXNzZXJ0KCAhIFZlcnRFcSggZVVwLT5Ec3QsIGVMby0+
RHN0ICkpOwotCi0gIGlmKCBWZXJ0TGVxKCBlVXAtPkRzdCwgZUxvLT5Ec3QgKSkgewotICAgIGlm
KCBFZGdlU2lnbiggZVVwLT5Ec3QsIGVMby0+RHN0LCBlVXAtPk9yZyApIDwgMCApIHJldHVybiBG
QUxTRTsKLQotICAgIC8qIGVMby0+RHN0IGlzIGFib3ZlIGVVcCwgc28gc3BsaWNlIGVMby0+RHN0
IGludG8gZVVwICovCi0gICAgUmVnaW9uQWJvdmUocmVnVXApLT5kaXJ0eSA9IHJlZ1VwLT5kaXJ0
eSA9IFRSVUU7Ci0gICAgZSA9IF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwICk7Ci0gICAgaWYgKGUg
PT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgaWYgKCAhX19nbF9tZXNoU3BsaWNl
KCBlTG8tPlN5bSwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZS0+TGZhY2UtPmlu
c2lkZSA9IHJlZ1VwLT5pbnNpZGU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYoIEVkZ2VTaWduKCBlTG8t
PkRzdCwgZVVwLT5Ec3QsIGVMby0+T3JnICkgPiAwICkgcmV0dXJuIEZBTFNFOwotCi0gICAgLyog
ZVVwLT5Ec3QgaXMgYmVsb3cgZUxvLCBzbyBzcGxpY2UgZVVwLT5Ec3QgaW50byBlTG8gKi8KLSAg
ICByZWdVcC0+ZGlydHkgPSByZWdMby0+ZGlydHkgPSBUUlVFOwotICAgIGUgPSBfX2dsX21lc2hT
cGxpdEVkZ2UoIGVMbyApOwotICAgIGlmIChlID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEp
OyAgICAKLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVVcC0+TG5leHQsIGVMby0+U3ltICkg
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICBlLT5SZmFjZS0+aW5zaWRlID0gcmVnVXAtPmlu
c2lkZTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgaW50IENoZWNrRm9ySW50
ZXJzZWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICkKLS8qCi0g
KiBDaGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzIG9mIHRoZSBnaXZlbiByZWdpb24gdG8g
c2VlIGlmCi0gKiB0aGV5IGludGVyc2VjdC4gIElmIHNvLCBjcmVhdGUgdGhlIGludGVyc2VjdGlv
biBhbmQgYWRkIGl0Ci0gKiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgotICoKLSAqIFJldHVybnMg
VFJVRSBpZiBhZGRpbmcgdGhlIG5ldyBpbnRlcnNlY3Rpb24gcmVzdWx0ZWQgaW4gYSByZWN1cnNp
dmUKLSAqIGNhbGwgdG8gQWRkUmlnaHRFZGdlcygpOyBpbiB0aGlzIGNhc2UgYWxsICJkaXJ0eSIg
cmVnaW9ucyBoYXZlIGJlZW4KLSAqIGNoZWNrZWQgZm9yIGludGVyc2VjdGlvbnMsIGFuZCBwb3Nz
aWJseSByZWdVcCBoYXMgYmVlbiBkZWxldGVkLgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVn
TG8gPSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZFZGdlICplVXAgPSByZWdVcC0+ZVVw
OwotICBHTFVoYWxmRWRnZSAqZUxvID0gcmVnTG8tPmVVcDsKLSAgR0xVdmVydGV4ICpvcmdVcCA9
IGVVcC0+T3JnOwotICBHTFV2ZXJ0ZXggKm9yZ0xvID0gZUxvLT5Pcmc7Ci0gIEdMVXZlcnRleCAq
ZHN0VXAgPSBlVXAtPkRzdDsKLSAgR0xVdmVydGV4ICpkc3RMbyA9IGVMby0+RHN0OwotICBHTGRv
dWJsZSB0TWluVXAsIHRNYXhMbzsKLSAgR0xVdmVydGV4IGlzZWN0LCAqb3JnTWluOwotICBHTFVo
YWxmRWRnZSAqZTsKLQotICBhc3NlcnQoICEgVmVydEVxKCBkc3RMbywgZHN0VXAgKSk7Ci0gIGFz
c2VydCggRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVudCwgb3JnVXAgKSA8PSAwICk7Ci0gIGFz
c2VydCggRWRnZVNpZ24oIGRzdExvLCB0ZXNzLT5ldmVudCwgb3JnTG8gKSA+PSAwICk7Ci0gIGFz
c2VydCggb3JnVXAgIT0gdGVzcy0+ZXZlbnQgJiYgb3JnTG8gIT0gdGVzcy0+ZXZlbnQgKTsKLSAg
YXNzZXJ0KCAhIHJlZ1VwLT5maXhVcHBlckVkZ2UgJiYgISByZWdMby0+Zml4VXBwZXJFZGdlICk7
Ci0KLSAgaWYoIG9yZ1VwID09IG9yZ0xvICkgcmV0dXJuIEZBTFNFOwkvKiByaWdodCBlbmRwb2lu
dHMgYXJlIHRoZSBzYW1lICovCi0KLSAgdE1pblVwID0gTUlOKCBvcmdVcC0+dCwgZHN0VXAtPnQg
KTsKLSAgdE1heExvID0gTUFYKCBvcmdMby0+dCwgZHN0TG8tPnQgKTsKLSAgaWYoIHRNaW5VcCA+
IHRNYXhMbyApIHJldHVybiBGQUxTRTsJLyogdCByYW5nZXMgZG8gbm90IG92ZXJsYXAgKi8KLQot
ICBpZiggVmVydExlcSggb3JnVXAsIG9yZ0xvICkpIHsKLSAgICBpZiggRWRnZVNpZ24oIGRzdExv
LCBvcmdVcCwgb3JnTG8gKSA+IDAgKSByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgaWYo
IEVkZ2VTaWduKCBkc3RVcCwgb3JnTG8sIG9yZ1VwICkgPCAwICkgcmV0dXJuIEZBTFNFOwotICB9
Ci0KLSAgLyogQXQgdGhpcyBwb2ludCB0aGUgZWRnZXMgaW50ZXJzZWN0LCBhdCBsZWFzdCBtYXJn
aW5hbGx5ICovCi0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLQotICBfX2dsX2VkZ2VJbnRlcnNlY3Qo
IGRzdFVwLCBvcmdVcCwgZHN0TG8sIG9yZ0xvLCAmaXNlY3QgKTsKLSAgLyogVGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzIGFyZSBndWFyYW50ZWVkOiAqLwotICBhc3NlcnQoIE1JTiggb3JnVXAtPnQs
IGRzdFVwLT50ICkgPD0gaXNlY3QudCApOwotICBhc3NlcnQoIGlzZWN0LnQgPD0gTUFYKCBvcmdM
by0+dCwgZHN0TG8tPnQgKSk7Ci0gIGFzc2VydCggTUlOKCBkc3RMby0+cywgZHN0VXAtPnMgKSA8
PSBpc2VjdC5zICk7Ci0gIGFzc2VydCggaXNlY3QucyA8PSBNQVgoIG9yZ0xvLT5zLCBvcmdVcC0+
cyApKTsKLQotICBpZiggVmVydExlcSggJmlzZWN0LCB0ZXNzLT5ldmVudCApKSB7Ci0gICAgLyog
VGhlIGludGVyc2VjdGlvbiBwb2ludCBsaWVzIHNsaWdodGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBz
d2VlcCBsaW5lLAotICAgICAqIHNvIG1vdmUgaXQgdW50aWwgaXQnJ3Mgc2xpZ2h0bHkgdG8gdGhl
IHJpZ2h0IG9mIHRoZSBzd2VlcCBsaW5lLgotICAgICAqIChJZiB3ZSBoYWQgcGVyZmVjdCBudW1l
cmljYWwgcHJlY2lzaW9uLCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbgotICAgICAqIGluIHRoZSBm
aXJzdCBwbGFjZSkuICBUaGUgZWFzaWVzdCBhbmQgc2FmZXN0IHRoaW5nIHRvIGRvIGlzCi0gICAg
ICogcmVwbGFjZSB0aGUgaW50ZXJzZWN0aW9uIGJ5IHRlc3MtPmV2ZW50LgotICAgICAqLwotICAg
IGlzZWN0LnMgPSB0ZXNzLT5ldmVudC0+czsKLSAgICBpc2VjdC50ID0gdGVzcy0+ZXZlbnQtPnQ7
Ci0gIH0KLSAgLyogU2ltaWxhcmx5LCBpZiB0aGUgY29tcHV0ZWQgaW50ZXJzZWN0aW9uIGxpZXMg
dG8gdGhlIHJpZ2h0IG9mIHRoZQotICAgKiByaWdodG1vc3Qgb3JpZ2luICh3aGljaCBzaG91bGQg
cmFyZWx5IGhhcHBlbiksIGl0IGNhbiBjYXVzZQotICAgKiB1bmJlbGlldmFibGUgaW5lZmZpY2ll
bmN5IG9uIHN1ZmZpY2llbnRseSBkZWdlbmVyYXRlIGlucHV0cy4KLSAgICogKElmIHlvdSBoYXZl
IHRoZSB0ZXN0IHByb2dyYW0sIHRyeSBydW5uaW5nIHRlc3Q1NC5kIHdpdGggdGhlCi0gICAqICJY
IHpvb20iIG9wdGlvbiB0dXJuZWQgb24pLgotICAgKi8KLSAgb3JnTWluID0gVmVydExlcSggb3Jn
VXAsIG9yZ0xvICkgPyBvcmdVcCA6IG9yZ0xvOwotICBpZiggVmVydExlcSggb3JnTWluLCAmaXNl
Y3QgKSkgewotICAgIGlzZWN0LnMgPSBvcmdNaW4tPnM7Ci0gICAgaXNlY3QudCA9IG9yZ01pbi0+
dDsKLSAgfQotCi0gIGlmKCBWZXJ0RXEoICZpc2VjdCwgb3JnVXAgKSB8fCBWZXJ0RXEoICZpc2Vj
dCwgb3JnTG8gKSkgewotICAgIC8qIEVhc3kgY2FzZSAtLSBpbnRlcnNlY3Rpb24gYXQgb25lIG9m
IHRoZSByaWdodCBlbmRwb2ludHMgKi8KLSAgICAodm9pZCkgQ2hlY2tGb3JSaWdodFNwbGljZSgg
dGVzcywgcmVnVXAgKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiggICAgKCEgVmVy
dEVxKCBkc3RVcCwgdGVzcy0+ZXZlbnQgKQotCSAgJiYgRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5l
dmVudCwgJmlzZWN0ICkgPj0gMCkKLSAgICAgIHx8ICghIFZlcnRFcSggZHN0TG8sIHRlc3MtPmV2
ZW50ICkKLQkgICYmIEVkZ2VTaWduKCBkc3RMbywgdGVzcy0+ZXZlbnQsICZpc2VjdCApIDw9IDAg
KSkKLSAgewotICAgIC8qIFZlcnkgdW51c3VhbCAtLSB0aGUgbmV3IHVwcGVyIG9yIGxvd2VyIGVk
Z2Ugd291bGQgcGFzcyBvbiB0aGUKLSAgICAgKiB3cm9uZyBzaWRlIG9mIHRoZSBzd2VlcCBldmVu
dCwgb3IgdGhyb3VnaCBpdC4gIFRoaXMgY2FuIGhhcHBlbgotICAgICAqIGR1ZSB0byB2ZXJ5IHNt
YWxsIG51bWVyaWNhbCBlcnJvcnMgaW4gdGhlIGludGVyc2VjdGlvbiBjYWxjdWxhdGlvbi4KLSAg
ICAgKi8KLSAgICBpZiggZHN0TG8gPT0gdGVzcy0+ZXZlbnQgKSB7Ci0gICAgICAvKiBTcGxpY2Ug
ZHN0TG8gaW50byBlVXAsIGFuZCBwcm9jZXNzIHRoZSBuZXcgcmVnaW9uKHMpICovCi0gICAgICBp
ZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+
ZW52LDEpOwotICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlTG8tPlN5bSwgZVVwICkgKSBs
b25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIHJlZ1VwID0gVG9wTGVmdFJlZ2lvbiggcmVnVXAg
KTsKLSAgICAgIGlmIChyZWdVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAg
IGVVcCA9IFJlZ2lvbkJlbG93KHJlZ1VwKS0+ZVVwOwotICAgICAgRmluaXNoTGVmdFJlZ2lvbnMo
IHRlc3MsIFJlZ2lvbkJlbG93KHJlZ1VwKSwgcmVnTG8gKTsKLSAgICAgIEFkZFJpZ2h0RWRnZXMo
IHRlc3MsIHJlZ1VwLCBlVXAtPk9wcmV2LCBlVXAsIGVVcCwgVFJVRSApOwotICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotICAgIGlmKCBkc3RVcCA9PSB0ZXNzLT5ldmVudCApIHsKLSAgICAgIC8q
IFNwbGljZSBkc3RVcCBpbnRvIGVMbywgYW5kIHByb2Nlc3MgdGhlIG5ldyByZWdpb24ocykgKi8K
LSAgICAgIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2pt
cCh0ZXNzLT5lbnYsMSk7Ci0gICAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVVcC0+TG5leHQs
IGVMby0+T3ByZXYgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAKLSAgICAgIHJlZ0xvID0gcmVn
VXA7Ci0gICAgICByZWdVcCA9IFRvcFJpZ2h0UmVnaW9uKCByZWdVcCApOwotICAgICAgZSA9IFJl
Z2lvbkJlbG93KHJlZ1VwKS0+ZVVwLT5ScHJldjsKLSAgICAgIHJlZ0xvLT5lVXAgPSBlTG8tPk9w
cmV2OwotICAgICAgZUxvID0gRmluaXNoTGVmdFJlZ2lvbnMoIHRlc3MsIHJlZ0xvLCBOVUxMICk7
Ci0gICAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZUxvLT5PbmV4dCwgZVVwLT5ScHJl
diwgZSwgVFJVRSApOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIC8qIFNwZWNpYWwg
Y2FzZTogY2FsbGVkIGZyb20gQ29ubmVjdFJpZ2h0VmVydGV4LiAgSWYgZWl0aGVyCi0gICAgICog
ZWRnZSBwYXNzZXMgb24gdGhlIHdyb25nIHNpZGUgb2YgdGVzcy0+ZXZlbnQsIHNwbGl0IGl0Ci0g
ICAgICogKGFuZCB3YWl0IGZvciBDb25uZWN0UmlnaHRWZXJ0ZXggdG8gc3BsaWNlIGl0IGFwcHJv
cHJpYXRlbHkpLgotICAgICAqLwotICAgIGlmKCBFZGdlU2lnbiggZHN0VXAsIHRlc3MtPmV2ZW50
LCAmaXNlY3QgKSA+PSAwICkgewotICAgICAgUmVnaW9uQWJvdmUocmVnVXApLT5kaXJ0eSA9IHJl
Z1VwLT5kaXJ0eSA9IFRSVUU7Ci0gICAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5
bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgZVVwLT5PcmctPnMgPSB0
ZXNzLT5ldmVudC0+czsKLSAgICAgIGVVcC0+T3JnLT50ID0gdGVzcy0+ZXZlbnQtPnQ7Ci0gICAg
fQotICAgIGlmKCBFZGdlU2lnbiggZHN0TG8sIHRlc3MtPmV2ZW50LCAmaXNlY3QgKSA8PSAwICkg
ewotICAgICAgcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKLSAgICAgIGlmIChf
X2dsX21lc2hTcGxpdEVkZ2UoIGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYs
MSk7Ci0gICAgICBlTG8tPk9yZy0+cyA9IHRlc3MtPmV2ZW50LT5zOwotICAgICAgZUxvLT5Pcmct
PnQgPSB0ZXNzLT5ldmVudC0+dDsKLSAgICB9Ci0gICAgLyogbGVhdmUgdGhlIHJlc3QgZm9yIENv
bm5lY3RSaWdodFZlcnRleCAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIEdlbmVy
YWwgY2FzZSAtLSBzcGxpdCBib3RoIGVkZ2VzLCBzcGxpY2UgaW50byBuZXcgdmVydGV4LgotICAg
KiBXaGVuIHdlIGRvIHRoZSBzcGxpY2Ugb3BlcmF0aW9uLCB0aGUgb3JkZXIgb2YgdGhlIGFyZ3Vt
ZW50cyBpcwotICAgKiBhcmJpdHJhcnkgYXMgZmFyIGFzIGNvcnJlY3RuZXNzIGdvZXMuICBIb3dl
dmVyLCB3aGVuIHRoZSBvcGVyYXRpb24KLSAgICogY3JlYXRlcyBhIG5ldyBmYWNlLCB0aGUgd29y
ayBkb25lIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZgotICAgKiB0aGUgbmV3IGZhY2Uu
ICBXZSBleHBlY3QgdGhlIGZhY2VzIGluIHRoZSBwcm9jZXNzZWQgcGFydCBvZgotICAgKiB0aGUg
bWVzaCAoaWUuIGVVcC0+TGZhY2UpIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgZmFjZXMgaW4gdGhl
Ci0gICAqIHVucHJvY2Vzc2VkIG9yaWdpbmFsIGNvbnRvdXJzICh3aGljaCB3aWxsIGJlIGVMby0+
T3ByZXYtPkxmYWNlKS4KLSAgICovCi0gIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGVVcC0+U3lt
ICkgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGlmIChfX2dsX21lc2hTcGxpdEVk
Z2UoIGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGlmICggIV9f
Z2xfbWVzaFNwbGljZSggZUxvLT5PcHJldiwgZVVwICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
LSAgZVVwLT5PcmctPnMgPSBpc2VjdC5zOwotICBlVXAtPk9yZy0+dCA9IGlzZWN0LnQ7Ci0gIGVV
cC0+T3JnLT5wcUhhbmRsZSA9IHBxSW5zZXJ0KCB0ZXNzLT5wcSwgZVVwLT5PcmcgKTsgLyogX19n
bF9wcVNvcnRJbnNlcnQgKi8KLSAgaWYgKGVVcC0+T3JnLT5wcUhhbmRsZSA9PSBMT05HX01BWCkg
ewotICAgICBwcURlbGV0ZVByaW9yaXR5USh0ZXNzLT5wcSk7CS8qIF9fZ2xfcHFTb3J0RGVsZXRl
UHJpb3JpdHlRICovCi0gICAgIHRlc3MtPnBxID0gTlVMTDsKLSAgICAgbG9uZ2ptcCh0ZXNzLT5l
bnYsMSk7Ci0gIH0KLSAgR2V0SW50ZXJzZWN0RGF0YSggdGVzcywgZVVwLT5PcmcsIG9yZ1VwLCBk
c3RVcCwgb3JnTG8sIGRzdExvICk7Ci0gIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdV
cC0+ZGlydHkgPSByZWdMby0+ZGlydHkgPSBUUlVFOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0
YXRpYyB2b2lkIFdhbGtEaXJ0eVJlZ2lvbnMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJl
Z2lvbiAqcmVnVXAgKQotLyoKLSAqIFdoZW4gdGhlIHVwcGVyIG9yIGxvd2VyIGVkZ2Ugb2YgYW55
IHJlZ2lvbiBjaGFuZ2VzLCB0aGUgcmVnaW9uIGlzCi0gKiBtYXJrZWQgImRpcnR5Ii4gIFRoaXMg
cm91dGluZSB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgZGlydHkgcmVnaW9ucwotICogYW5kIG1ha2Vz
IHN1cmUgdGhhdCB0aGUgZGljdGlvbmFyeSBpbnZhcmlhbnRzIGFyZSBzYXRpc2ZpZWQKLSAqIChz
ZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlKS4gIE9mIGNvdXJz
ZQotICogbmV3IGRpcnR5IHJlZ2lvbnMgY2FuIGJlIGNyZWF0ZWQgYXMgd2UgbWFrZSBjaGFuZ2Vz
IHRvIHJlc3RvcmUKLSAqIHRoZSBpbnZhcmlhbnRzLgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAq
cmVnTG8gPSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZFZGdlICplVXAsICplTG87Ci0K
LSAgZm9yKCA7OyApIHsKLSAgICAvKiBGaW5kIHRoZSBsb3dlc3QgZGlydHkgcmVnaW9uICh3ZSB3
YWxrIGZyb20gdGhlIGJvdHRvbSB1cCkuICovCi0gICAgd2hpbGUoIHJlZ0xvLT5kaXJ0eSApIHsK
LSAgICAgIHJlZ1VwID0gcmVnTG87Ci0gICAgICByZWdMbyA9IFJlZ2lvbkJlbG93KHJlZ0xvKTsK
LSAgICB9Ci0gICAgaWYoICEgcmVnVXAtPmRpcnR5ICkgewotICAgICAgcmVnTG8gPSByZWdVcDsK
LSAgICAgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ1VwICk7Ci0gICAgICBpZiggcmVnVXAgPT0g
TlVMTCB8fCAhIHJlZ1VwLT5kaXJ0eSApIHsKLQkvKiBXZSd2ZSB3YWxrZWQgYWxsIHRoZSBkaXJ0
eSByZWdpb25zICovCi0JcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICByZWdVcC0+ZGlydHkg
PSBGQUxTRTsKLSAgICBlVXAgPSByZWdVcC0+ZVVwOwotICAgIGVMbyA9IHJlZ0xvLT5lVXA7Ci0K
LSAgICBpZiggZVVwLT5Ec3QgIT0gZUxvLT5Ec3QgKSB7Ci0gICAgICAvKiBDaGVjayB0aGF0IHRo
ZSBlZGdlIG9yZGVyaW5nIGlzIG9iZXllZCBhdCB0aGUgRHN0IHZlcnRpY2VzLiAqLwotICAgICAg
aWYoIENoZWNrRm9yTGVmdFNwbGljZSggdGVzcywgcmVnVXAgKSkgewotCi0JLyogSWYgdGhlIHVw
cGVyIG9yIGxvd2VyIGVkZ2Ugd2FzIG1hcmtlZCBmaXhVcHBlckVkZ2UsIHRoZW4KLQkgKiB3ZSBu
byBsb25nZXIgbmVlZCBpdCAoc2luY2UgdGhlc2UgZWRnZXMgYXJlIG5lZWRlZCBvbmx5IGZvcgot
CSAqIHZlcnRpY2VzIHdoaWNoIG90aGVyd2lzZSBoYXZlIG5vIHJpZ2h0LWdvaW5nIGVkZ2VzKS4K
LQkgKi8KLQlpZiggcmVnTG8tPmZpeFVwcGVyRWRnZSApIHsKLQkgIERlbGV0ZVJlZ2lvbiggdGVz
cywgcmVnTG8gKTsKLQkgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZUxvICkgKSBsb25nam1wKHRl
c3MtPmVudiwxKTsKLQkgIHJlZ0xvID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7Ci0JICBlTG8gPSBy
ZWdMby0+ZVVwOwotCX0gZWxzZSBpZiggcmVnVXAtPmZpeFVwcGVyRWRnZSApIHsKLQkgIERlbGV0
ZVJlZ2lvbiggdGVzcywgcmVnVXAgKTsKLQkgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZVVwICkg
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKLQkgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ0xvICk7
Ci0JICBlVXAgPSByZWdVcC0+ZVVwOwotCX0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYoIGVVcC0+
T3JnICE9IGVMby0+T3JnICkgewotICAgICAgaWYoICAgIGVVcC0+RHN0ICE9IGVMby0+RHN0Ci0J
ICAmJiAhIHJlZ1VwLT5maXhVcHBlckVkZ2UgJiYgISByZWdMby0+Zml4VXBwZXJFZGdlCi0gICAg
ICAgICAgJiYgKGVVcC0+RHN0ID09IHRlc3MtPmV2ZW50IHx8IGVMby0+RHN0ID09IHRlc3MtPmV2
ZW50KSApCi0gICAgICB7Ci0JLyogV2hlbiBhbGwgZWxzZSBmYWlscyBpbiBDaGVja0ZvckludGVy
c2VjdCgpLCBpdCB1c2VzIHRlc3MtPmV2ZW50Ci0JICogYXMgdGhlIGludGVyc2VjdGlvbiBsb2Nh
dGlvbi4gIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgaXQgcmVxdWlyZXMKLQkgKiB0aGF0IHRlc3Mt
PmV2ZW50IGxpZSBiZXR3ZWVuIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRnZXMsIGFuZCBhbHNvCi0J
ICogdGhhdCBuZWl0aGVyIG9mIHRoZXNlIGlzIG1hcmtlZCBmaXhVcHBlckVkZ2UgKHNpbmNlIGlu
IHRoZSB3b3JzdAotCSAqIGNhc2UgaXQgbWlnaHQgc3BsaWNlIG9uZSBvZiB0aGVzZSBlZGdlcyBp
bnRvIHRlc3MtPmV2ZW50LCBhbmQKLQkgKiB2aW9sYXRlIHRoZSBpbnZhcmlhbnQgdGhhdCBmaXhh
YmxlIGVkZ2VzIGFyZSB0aGUgb25seSByaWdodC1nb2luZwotCSAqIGVkZ2UgZnJvbSB0aGVpciBh
c3NvY2lhdGVkIHZlcnRleCkuCi0gICAgICAgICAqLwotCWlmKCBDaGVja0ZvckludGVyc2VjdCgg
dGVzcywgcmVnVXAgKSkgewotCSAgLyogV2Fsa0RpcnR5UmVnaW9ucygpIHdhcyBjYWxsZWQgcmVj
dXJzaXZlbHk7IHdlJ3JlIGRvbmUgKi8KLQkgIHJldHVybjsKLQl9Ci0gICAgICB9IGVsc2Ugewot
CS8qIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHVzZSBDaGVja0ZvckludGVyc2VjdCgpLCB0aGUgT3Jn
IHZlcnRpY2VzCi0JICogbWF5IHZpb2xhdGUgdGhlIGRpY3Rpb25hcnkgZWRnZSBvcmRlcmluZy4g
IENoZWNrIGFuZCBjb3JyZWN0IHRoaXMuCi0JICovCi0JKHZvaWQpIENoZWNrRm9yUmlnaHRTcGxp
Y2UoIHRlc3MsIHJlZ1VwICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmKCBlVXAtPk9yZyA9PSBl
TG8tPk9yZyAmJiBlVXAtPkRzdCA9PSBlTG8tPkRzdCApIHsKLSAgICAgIC8qIEEgZGVnZW5lcmF0
ZSBsb29wIGNvbnNpc3Rpbmcgb2Ygb25seSB0d28gZWRnZXMgLS0gZGVsZXRlIGl0LiAqLwotICAg
ICAgQWRkV2luZGluZyggZUxvLCBlVXAgKTsKLSAgICAgIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVn
VXAgKTsKLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZVVwICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKLSAgICAgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ0xvICk7Ci0gICAgfQotICB9
Ci19Ci0KLQotc3RhdGljIHZvaWQgQ29ubmVjdFJpZ2h0VmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0
ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwLAotCQkJICAgICAgICBHTFVoYWxmRWRnZSAqZUJvdHRv
bUxlZnQgKQotLyoKLSAqIFB1cnBvc2U6IGNvbm5lY3QgYSAicmlnaHQiIHZlcnRleCB2RXZlbnQg
KG9uZSB3aGVyZSBhbGwgZWRnZXMgZ28gbGVmdCkKLSAqIHRvIHRoZSB1bnByb2Nlc3NlZCBwb3J0
aW9uIG9mIHRoZSBtZXNoLiAgU2luY2UgdGhlcmUgYXJlIG5vIHJpZ2h0LWdvaW5nCi0gKiBlZGdl
cywgdHdvIHJlZ2lvbnMgKG9uZSBhYm92ZSB2RXZlbnQgYW5kIG9uZSBiZWxvdykgYXJlIGJlaW5n
IG1lcmdlZAotICogaW50byBvbmUuICAicmVnVXAiIGlzIHRoZSB1cHBlciBvZiB0aGVzZSB0d28g
cmVnaW9ucy4KLSAqCi0gKiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMgKGFk
ZGluZyBhIHJpZ2h0LWdvaW5nIGVkZ2UpOgotICogIC0gaWYgdGhlIHR3byByZWdpb25zIGJlaW5n
IG1lcmdlZCBhcmUgImluc2lkZSIsIHdlIG11c3QgYWRkIGFuIGVkZ2UKLSAqICAgIHRvIGtlZXAg
dGhlbSBzZXBhcmF0ZWQgKHRoZSBjb21iaW5lZCByZWdpb24gd291bGQgbm90IGJlIG1vbm90b25l
KS4KLSAqICAtIGluIGFueSBjYXNlLCB3ZSBtdXN0IGxlYXZlIHNvbWUgcmVjb3JkIG9mIHZFdmVu
dCBpbiB0aGUgZGljdGlvbmFyeSwKLSAqICAgIHNvIHRoYXQgd2UgY2FuIG1lcmdlIHZFdmVudCB3
aXRoIGZlYXR1cmVzIHRoYXQgd2UgaGF2ZSBub3Qgc2VlbiB5ZXQuCi0gKiAgICBGb3IgZXhhbXBs
ZSwgbWF5YmUgdGhlcmUgaXMgYSB2ZXJ0aWNhbCBlZGdlIHdoaWNoIHBhc3NlcyBqdXN0IHRvCi0g
KiAgICB0aGUgcmlnaHQgb2YgdkV2ZW50OyB3ZSB3b3VsZCBsaWtlIHRvIHNwbGljZSB2RXZlbnQg
aW50byB0aGlzIGVkZ2UuCi0gKgotICogSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBjb25uZWN0
IHZFdmVudCB0byBqdXN0IGFueSB2ZXJ0ZXguICBXZSBkb24nJ3QKLSAqIHdhbnQgdGhlIG5ldyBl
ZGdlIHRvIGNyb3NzIGFueSBvdGhlciBlZGdlczsgb3RoZXJ3aXNlIHdlIHdpbGwgY3JlYXRlCi0g
KiBpbnRlcnNlY3Rpb24gdmVydGljZXMgZXZlbiB3aGVuIHRoZSBpbnB1dCBkYXRhIGhhZCBubyBz
ZWxmLWludGVyc2VjdGlvbnMuCi0gKiAoVGhpcyBpcyBhIGJhZCB0aGluZzsgaWYgdGhlIHVzZXIn
cyBpbnB1dCBkYXRhIGhhcyBubyBpbnRlcnNlY3Rpb25zLAotICogd2UgZG9uJ3Qgd2FudCB0byBn
ZW5lcmF0ZSBhbnkgZmFsc2UgaW50ZXJzZWN0aW9ucyBvdXJzZWx2ZXMuKQotICoKLSAqIE91ciBl
dmVudHVhbCBnb2FsIGlzIHRvIGNvbm5lY3QgdkV2ZW50IHRvIHRoZSBsZWZ0bW9zdCB1bnByb2Nl
c3NlZAotICogdmVydGV4IG9mIHRoZSBjb21iaW5lZCByZWdpb24gKHRoZSB1bmlvbiBvZiByZWdV
cCBhbmQgcmVnTG8pLgotICogQnV0IGJlY2F1c2Ugb2YgdW5zZWVuIHZlcnRpY2VzIHdpdGggYWxs
IHJpZ2h0LWdvaW5nIGVkZ2VzLCBhbmQgYWxzbwotICogbmV3IHZlcnRpY2VzIHdoaWNoIG1heSBi
ZSBjcmVhdGVkIGJ5IGVkZ2UgaW50ZXJzZWN0aW9ucywgd2UgZG9uJyd0Ci0gKiBrbm93IHdoZXJl
IHRoYXQgbGVmdG1vc3QgdW5wcm9jZXNzZWQgdmVydGV4IGlzLiAgSW4gdGhlIG1lYW50aW1lLCB3
ZQotICogY29ubmVjdCB2RXZlbnQgdG8gdGhlIGNsb3Nlc3QgdmVydGV4IG9mIGVpdGhlciBjaGFp
biwgYW5kIG1hcmsgdGhlIHJlZ2lvbgotICogYXMgImZpeFVwcGVyRWRnZSIuICBUaGlzIGZsYWcg
c2F5cyB0byBkZWxldGUgYW5kIHJlY29ubmVjdCB0aGlzIGVkZ2UKLSAqIHRvIHRoZSBuZXh0IHBy
b2Nlc3NlZCB2ZXJ0ZXggb24gdGhlIGJvdW5kYXJ5IG9mIHRoZSBjb21iaW5lZCByZWdpb24uCi0g
KiBRdWl0ZSBwb3NzaWJseSB0aGUgdmVydGV4IHdlIGNvbm5lY3RlZCB0byB3aWxsIHR1cm4gb3V0
IHRvIGJlIHRoZQotICogY2xvc2VzdCBvbmUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJyd0IG5lZWQg
dG8gbWFrZSBhbnkgY2hhbmdlcy4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZU5ldzsKLSAgR0xV
aGFsZkVkZ2UgKmVUb3BMZWZ0ID0gZUJvdHRvbUxlZnQtPk9uZXh0OwotICBBY3RpdmVSZWdpb24g
KnJlZ0xvID0gUmVnaW9uQmVsb3cocmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAt
PmVVcDsKLSAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7Ci0gIGludCBkZWdlbmVyYXRl
ID0gRkFMU0U7Ci0KLSAgaWYoIGVVcC0+RHN0ICE9IGVMby0+RHN0ICkgewotICAgICh2b2lkKSBD
aGVja0ZvckludGVyc2VjdCggdGVzcywgcmVnVXAgKTsKLSAgfQotCi0gIC8qIFBvc3NpYmxlIG5l
dyBkZWdlbmVyYWNpZXM6IHVwcGVyIG9yIGxvd2VyIGVkZ2Ugb2YgcmVnVXAgbWF5IHBhc3MKLSAg
ICogdGhyb3VnaCB2RXZlbnQsIG9yIG1heSBjb2luY2lkZSB3aXRoIG5ldyBpbnRlcnNlY3Rpb24g
dmVydGV4Ci0gICAqLwotICBpZiggVmVydEVxKCBlVXAtPk9yZywgdGVzcy0+ZXZlbnQgKSkgewot
ICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZVRvcExlZnQtPk9wcmV2LCBlVXAgKSApIGxvbmdq
bXAodGVzcy0+ZW52LDEpOwotICAgIHJlZ1VwID0gVG9wTGVmdFJlZ2lvbiggcmVnVXAgKTsKLSAg
ICBpZiAocmVnVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZVRvcExlZnQg
PSBSZWdpb25CZWxvdyggcmVnVXAgKS0+ZVVwOwotICAgIEZpbmlzaExlZnRSZWdpb25zKCB0ZXNz
LCBSZWdpb25CZWxvdyhyZWdVcCksIHJlZ0xvICk7Ci0gICAgZGVnZW5lcmF0ZSA9IFRSVUU7Ci0g
IH0KLSAgaWYoIFZlcnRFcSggZUxvLT5PcmcsIHRlc3MtPmV2ZW50ICkpIHsKLSAgICBpZiAoICFf
X2dsX21lc2hTcGxpY2UoIGVCb3R0b21MZWZ0LCBlTG8tPk9wcmV2ICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKLSAgICBlQm90dG9tTGVmdCA9IEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCByZWdM
bywgTlVMTCApOwotICAgIGRlZ2VuZXJhdGUgPSBUUlVFOwotICB9Ci0gIGlmKCBkZWdlbmVyYXRl
ICkgewotICAgIEFkZFJpZ2h0RWRnZXMoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdC0+T25leHQs
IGVUb3BMZWZ0LCBlVG9wTGVmdCwgVFJVRSApOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIE5v
bi1kZWdlbmVyYXRlIHNpdHVhdGlvbiAtLSBuZWVkIHRvIGFkZCBhIHRlbXBvcmFyeSwgZml4YWJs
ZSBlZGdlLgotICAgKiBDb25uZWN0IHRvIHRoZSBjbG9zZXIgb2YgZUxvLT5PcmcsIGVVcC0+T3Jn
LgotICAgKi8KLSAgaWYoIFZlcnRMZXEoIGVMby0+T3JnLCBlVXAtPk9yZyApKSB7Ci0gICAgZU5l
dyA9IGVMby0+T3ByZXY7Ci0gIH0gZWxzZSB7Ci0gICAgZU5ldyA9IGVVcDsKLSAgfQotICBlTmV3
ID0gX19nbF9tZXNoQ29ubmVjdCggZUJvdHRvbUxlZnQtPkxwcmV2LCBlTmV3ICk7Ci0gIGlmIChl
TmV3ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotCi0gIC8qIFByZXZlbnQgY2xlYW51
cCwgb3RoZXJ3aXNlIGVOZXcgbWlnaHQgZGlzYXBwZWFyIGJlZm9yZSB3ZSd2ZSBldmVuCi0gICAq
IGhhZCBhIGNoYW5jZSB0byBtYXJrIGl0IGFzIGEgdGVtcG9yYXJ5IGVkZ2UuCi0gICAqLwotICBB
ZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZU5ldywgZU5ldy0+T25leHQsIGVOZXctPk9uZXh0
LCBGQUxTRSApOwotICBlTmV3LT5TeW0tPmFjdGl2ZVJlZ2lvbi0+Zml4VXBwZXJFZGdlID0gVFJV
RTsKLSAgV2Fsa0RpcnR5UmVnaW9ucyggdGVzcywgcmVnVXAgKTsKLX0KLQotLyogQmVjYXVzZSB2
ZXJ0aWNlcyBhdCBleGFjdGx5IHRoZSBzYW1lIGxvY2F0aW9uIGFyZSBtZXJnZWQgdG9nZXRoZXIK
LSAqIGJlZm9yZSB3ZSBwcm9jZXNzIHRoZSBzd2VlcCBldmVudCwgc29tZSBkZWdlbmVyYXRlIGNh
c2VzIGNhbid0IG9jY3VyLgotICogSG93ZXZlciBpZiBzb21lb25lIGV2ZW50dWFsbHkgbWFrZXMg
dGhlIG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQgdG8KLSAqIG1lcmdlIGZlYXR1cmVzIHdoaWNoIGFy
ZSBjbG9zZSB0b2dldGhlciwgdGhlIGNhc2VzIGJlbG93IG1hcmtlZAotICogVE9MRVJBTkNFX05P
TlpFUk8gd2lsbCBiZSB1c2VmdWwuICBUaGV5IHdlcmUgZGVidWdnZWQgYmVmb3JlIHRoZQotICog
Y29kZSB0byBtZXJnZSBpZGVudGljYWwgdmVydGljZXMgaW4gdGhlIG1haW4gbG9vcCB3YXMgYWRk
ZWQuCi0gKi8KLSNkZWZpbmUgVE9MRVJBTkNFX05PTlpFUk8JRkFMU0UKLQotc3RhdGljIHZvaWQg
Q29ubmVjdExlZnREZWdlbmVyYXRlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAotCQkJCSAgIEFjdGl2
ZVJlZ2lvbiAqcmVnVXAsIEdMVXZlcnRleCAqdkV2ZW50ICkKLS8qCi0gKiBUaGUgZXZlbnQgdmVy
dGV4IGxpZXMgZXhhY3R5IG9uIGFuIGFscmVhZHktcHJvY2Vzc2VkIGVkZ2Ugb3IgdmVydGV4Lgot
ICogQWRkaW5nIHRoZSBuZXcgdmVydGV4IGludm9sdmVzIHNwbGljaW5nIGl0IGludG8gdGhlIGFs
cmVhZHktcHJvY2Vzc2VkCi0gKiBwYXJ0IG9mIHRoZSBtZXNoLgotICovCi17Ci0gIEdMVWhhbGZF
ZGdlICplLCAqZVRvcExlZnQsICplVG9wUmlnaHQsICplTGFzdDsKLSAgQWN0aXZlUmVnaW9uICpy
ZWc7Ci0KLSAgZSA9IHJlZ1VwLT5lVXA7Ci0gIGlmKCBWZXJ0RXEoIGUtPk9yZywgdkV2ZW50ICkp
IHsKLSAgICAvKiBlLT5PcmcgaXMgYW4gdW5wcm9jZXNzZWQgdmVydGV4IC0ganVzdCBjb21iaW5l
IHRoZW0sIGFuZCB3YWl0Ci0gICAgICogZm9yIGUtPk9yZyB0byBiZSBwdWxsZWQgZnJvbSB0aGUg
cXVldWUKLSAgICAgKi8KLSAgICBhc3NlcnQoIFRPTEVSQU5DRV9OT05aRVJPICk7Ci0gICAgU3Bs
aWNlTWVyZ2VWZXJ0aWNlcyggdGVzcywgZSwgdkV2ZW50LT5hbkVkZ2UgKTsKLSAgICByZXR1cm47
Ci0gIH0KLSAgCi0gIGlmKCAhIFZlcnRFcSggZS0+RHN0LCB2RXZlbnQgKSkgewotICAgIC8qIEdl
bmVyYWwgY2FzZSAtLSBzcGxpY2UgdkV2ZW50IGludG8gZWRnZSBlIHdoaWNoIHBhc3NlcyB0aHJv
dWdoIGl0ICovCi0gICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZS0+U3ltICkgPT0gTlVMTCkg
bG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgaWYoIHJlZ1VwLT5maXhVcHBlckVkZ2UgKSB7Ci0g
ICAgICAvKiBUaGlzIGVkZ2Ugd2FzIGZpeGFibGUgLS0gZGVsZXRlIHVudXNlZCBwb3J0aW9uIG9m
IG9yaWdpbmFsIGVkZ2UgKi8KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZS0+T25leHQg
KSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgcmVnVXAtPmZpeFVwcGVyRWRnZSA9IEZB
TFNFOwotICAgIH0KLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIHZFdmVudC0+YW5FZGdlLCBl
ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2RXZlbnQg
KTsJLyogcmVjdXJzZSAqLwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIHZFdmVudCBjb2luY2lk
ZXMgd2l0aCBlLT5Ec3QsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLgotICAgKiBT
cGxpY2UgaW4gdGhlIGFkZGl0aW9uYWwgcmlnaHQtZ29pbmcgZWRnZXMuCi0gICAqLwotICBhc3Nl
cnQoIFRPTEVSQU5DRV9OT05aRVJPICk7Ci0gIHJlZ1VwID0gVG9wUmlnaHRSZWdpb24oIHJlZ1Vw
ICk7Ci0gIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdVcCApOwotICBlVG9wUmlnaHQgPSByZWctPmVV
cC0+U3ltOwotICBlVG9wTGVmdCA9IGVMYXN0ID0gZVRvcFJpZ2h0LT5PbmV4dDsKLSAgaWYoIHJl
Zy0+Zml4VXBwZXJFZGdlICkgewotICAgIC8qIEhlcmUgZS0+RHN0IGhhcyBvbmx5IGEgc2luZ2xl
IGZpeGFibGUgZWRnZSBnb2luZyByaWdodC4KLSAgICAgKiBXZSBjYW4gZGVsZXRlIGl0IHNpbmNl
IG5vdyB3ZSBoYXZlIHNvbWUgcmVhbCByaWdodC1nb2luZyBlZGdlcy4KLSAgICAgKi8KLSAgICBh
c3NlcnQoIGVUb3BMZWZ0ICE9IGVUb3BSaWdodCApOyAgIC8qIHRoZXJlIGFyZSBzb21lIGxlZnQg
ZWRnZXMgdG9vICovCi0gICAgRGVsZXRlUmVnaW9uKCB0ZXNzLCByZWcgKTsKLSAgICBpZiAoICFf
X2dsX21lc2hEZWxldGUoIGVUb3BSaWdodCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAg
ZVRvcFJpZ2h0ID0gZVRvcExlZnQtPk9wcmV2OwotICB9Ci0gIGlmICggIV9fZ2xfbWVzaFNwbGlj
ZSggdkV2ZW50LT5hbkVkZ2UsIGVUb3BSaWdodCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0g
IGlmKCAhIEVkZ2VHb2VzTGVmdCggZVRvcExlZnQgKSkgewotICAgIC8qIGUtPkRzdCBoYWQgbm8g
bGVmdC1nb2luZyBlZGdlcyAtLSBpbmRpY2F0ZSB0aGlzIHRvIEFkZFJpZ2h0RWRnZXMoKSAqLwot
ICAgIGVUb3BMZWZ0ID0gTlVMTDsKLSAgfQotICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwg
ZVRvcFJpZ2h0LT5PbmV4dCwgZUxhc3QsIGVUb3BMZWZ0LCBUUlVFICk7Ci19Ci0KLQotc3RhdGlj
IHZvaWQgQ29ubmVjdExlZnRWZXJ0ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAq
dkV2ZW50ICkKLS8qCi0gKiBQdXJwb3NlOiBjb25uZWN0IGEgImxlZnQiIHZlcnRleCAob25lIHdo
ZXJlIGJvdGggZWRnZXMgZ28gcmlnaHQpCi0gKiB0byB0aGUgcHJvY2Vzc2VkIHBvcnRpb24gb2Yg
dGhlIG1lc2guICBMZXQgUiBiZSB0aGUgYWN0aXZlIHJlZ2lvbgotICogY29udGFpbmluZyB2RXZl
bnQsIGFuZCBsZXQgVSBhbmQgTCBiZSB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2UKLSAqIGNoYWlu
cyBvZiBSLiAgVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgotICoKLSAqIC0gdGhlIG5vcm1h
bCBjYXNlOiBzcGxpdCBSIGludG8gdHdvIHJlZ2lvbnMsIGJ5IGNvbm5lY3RpbmcgdkV2ZW50IHRv
Ci0gKiAgIHRoZSByaWdodG1vc3QgdmVydGV4IG9mIFUgb3IgTCBseWluZyB0byB0aGUgbGVmdCBv
ZiB0aGUgc3dlZXAgbGluZQotICoKLSAqIC0gdGhlIGRlZ2VuZXJhdGUgY2FzZTogaWYgdkV2ZW50
IGlzIGNsb3NlIGVub3VnaCB0byBVIG9yIEwsIHdlCi0gKiAgIG1lcmdlIHZFdmVudCBpbnRvIHRo
YXQgZWRnZSBjaGFpbi4gIFRoZSBzdWJjYXNlcyBhcmU6Ci0gKgktIG1lcmdpbmcgd2l0aCB0aGUg
cmlnaHRtb3N0IHZlcnRleCBvZiBVIG9yIEwKLSAqCS0gbWVyZ2luZyB3aXRoIHRoZSBhY3RpdmUg
ZWRnZSBvZiBVIG9yIEwKLSAqCS0gbWVyZ2luZyB3aXRoIGFuIGFscmVhZHktcHJvY2Vzc2VkIHBv
cnRpb24gb2YgVSBvciBMCi0gKi8KLXsKLSAgQWN0aXZlUmVnaW9uICpyZWdVcCwgKnJlZ0xvLCAq
cmVnOwotICBHTFVoYWxmRWRnZSAqZVVwLCAqZUxvLCAqZU5ldzsKLSAgQWN0aXZlUmVnaW9uIHRt
cDsKLQotICAvKiBhc3NlcnQoIHZFdmVudC0+YW5FZGdlLT5PbmV4dC0+T25leHQgPT0gdkV2ZW50
LT5hbkVkZ2UgKTsgKi8KLQotICAvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgcmVnaW9u
IGNvbnRhaW5pbmcgdkV2ZW50ICovCi0gIHRtcC5lVXAgPSB2RXZlbnQtPmFuRWRnZS0+U3ltOwot
ICAvKiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fZ2xfZGljdExpc3RTZWFyY2ggKi8KLSAgcmVn
VXAgPSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdFNlYXJjaCggdGVzcy0+ZGljdCwgJnRt
cCApKTsKLSAgcmVnTG8gPSBSZWdpb25CZWxvdyggcmVnVXAgKTsKLSAgZVVwID0gcmVnVXAtPmVV
cDsKLSAgZUxvID0gcmVnTG8tPmVVcDsKLQotICAvKiBUcnkgbWVyZ2luZyB3aXRoIFUgb3IgTCBm
aXJzdCAqLwotICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0LCB2RXZlbnQsIGVVcC0+T3JnICkgPT0g
MCApIHsKLSAgICBDb25uZWN0TGVmdERlZ2VuZXJhdGUoIHRlc3MsIHJlZ1VwLCB2RXZlbnQgKTsK
LSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDb25uZWN0IHZFdmVudCB0byByaWdodG1vc3QgcHJv
Y2Vzc2VkIHZlcnRleCBvZiBlaXRoZXIgY2hhaW4uCi0gICAqIGUtPkRzdCBpcyB0aGUgdmVydGV4
IHRoYXQgd2Ugd2lsbCBjb25uZWN0IHRvIHZFdmVudC4KLSAgICovCi0gIHJlZyA9IFZlcnRMZXEo
IGVMby0+RHN0LCBlVXAtPkRzdCApID8gcmVnVXAgOiByZWdMbzsKLQotICBpZiggcmVnVXAtPmlu
c2lkZSB8fCByZWctPmZpeFVwcGVyRWRnZSkgewotICAgIGlmKCByZWcgPT0gcmVnVXAgKSB7Ci0g
ICAgICBlTmV3ID0gX19nbF9tZXNoQ29ubmVjdCggdkV2ZW50LT5hbkVkZ2UtPlN5bSwgZVVwLT5M
bmV4dCApOwotICAgICAgaWYgKGVOZXcgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIEdMVWhhbGZFZGdlICp0ZW1wSGFsZkVkZ2U9IF9fZ2xfbWVzaENv
bm5lY3QoIGVMby0+RG5leHQsIHZFdmVudC0+YW5FZGdlKTsKLSAgICAgIGlmICh0ZW1wSGFsZkVk
Z2UgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0KLSAgICAgIGVOZXcgPSB0ZW1wSGFs
ZkVkZ2UtPlN5bTsKLSAgICB9Ci0gICAgaWYoIHJlZy0+Zml4VXBwZXJFZGdlICkgewotICAgICAg
aWYgKCAhRml4VXBwZXJFZGdlKCByZWcsIGVOZXcgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBDb21wdXRlV2luZGluZyggdGVzcywgQWRkUmVnaW9uQmVsb3co
IHRlc3MsIHJlZ1VwLCBlTmV3ICkpOwotICAgIH0KLSAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2RXZl
bnQgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBUaGUgbmV3IHZlcnRleCBpcyBpbiBhIHJlZ2lvbiB3
aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHBvbHlnb24uCi0gICAgICogV2UgZG9uJyd0IG5l
ZWQgdG8gY29ubmVjdCB0aGlzIHZlcnRleCB0byB0aGUgcmVzdCBvZiB0aGUgbWVzaC4KLSAgICAg
Ki8KLSAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgdkV2ZW50LT5hbkVkZ2UsIHZFdmVu
dC0+YW5FZGdlLCBOVUxMLCBUUlVFICk7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZCBTd2VlcEV2
ZW50KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCApCi0vKgotICogRG9l
cyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB3aGVuIHRoZSBzd2VlcCBsaW5lIGNyb3NzZXMgYSB2ZXJ0
ZXguCi0gKiBVcGRhdGVzIHRoZSBtZXNoIGFuZCB0aGUgZWRnZSBkaWN0aW9uYXJ5LgotICovCi17
Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsICpyZWc7Ci0gIEdMVWhhbGZFZGdlICplLCAqZVRvcExl
ZnQsICplQm90dG9tTGVmdDsKLQotICB0ZXNzLT5ldmVudCA9IHZFdmVudDsJCS8qIGZvciBhY2Nl
c3MgaW4gRWRnZUxlcSgpICovCi0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLSAgCi0gIC8qIENoZWNr
IGlmIHRoaXMgdmVydGV4IGlzIHRoZSByaWdodCBlbmRwb2ludCBvZiBhbiBlZGdlIHRoYXQgaXMK
LSAgICogYWxyZWFkeSBpbiB0aGUgZGljdGlvbmFyeS4gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCBu
ZWVkIHRvIHdhc3RlCi0gICAqIHRpbWUgc2VhcmNoaW5nIGZvciB0aGUgbG9jYXRpb24gdG8gaW5z
ZXJ0IG5ldyBlZGdlcy4KLSAgICovCi0gIGUgPSB2RXZlbnQtPmFuRWRnZTsKLSAgd2hpbGUoIGUt
PmFjdGl2ZVJlZ2lvbiA9PSBOVUxMICkgewotICAgIGUgPSBlLT5PbmV4dDsKLSAgICBpZiggZSA9
PSB2RXZlbnQtPmFuRWRnZSApIHsKLSAgICAgIC8qIEFsbCBlZGdlcyBnbyByaWdodCAtLSBub3Qg
aW5jaWRlbnQgdG8gYW55IHByb2Nlc3NlZCBlZGdlcyAqLwotICAgICAgQ29ubmVjdExlZnRWZXJ0
ZXgoIHRlc3MsIHZFdmVudCApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIC8qIFBy
b2Nlc3NpbmcgY29uc2lzdHMgb2YgdHdvIHBoYXNlczogZmlyc3Qgd2UgImZpbmlzaCIgYWxsIHRo
ZQotICAgKiBhY3RpdmUgcmVnaW9ucyB3aGVyZSBib3RoIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRn
ZXMgdGVybWluYXRlCi0gICAqIGF0IHZFdmVudCAoaWUuIHZFdmVudCBpcyBjbG9zaW5nIG9mZiB0
aGVzZSByZWdpb25zKS4KLSAgICogV2UgbWFyayB0aGVzZSBmYWNlcyAiaW5zaWRlIiBvciAib3V0
c2lkZSIgdGhlIHBvbHlnb24gYWNjb3JkaW5nCi0gICAqIHRvIHRoZWlyIHdpbmRpbmcgbnVtYmVy
LCBhbmQgZGVsZXRlIHRoZSBlZGdlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LgotICAgKiBUaGlzIHRh
a2VzIGNhcmUgb2YgYWxsIHRoZSBsZWZ0LWdvaW5nIGVkZ2VzIGZyb20gdkV2ZW50LgotICAgKi8K
LSAgcmVnVXAgPSBUb3BMZWZ0UmVnaW9uKCBlLT5hY3RpdmVSZWdpb24gKTsKLSAgaWYgKHJlZ1Vw
ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICByZWcgPSBSZWdpb25CZWxvdyggcmVn
VXAgKTsKLSAgZVRvcExlZnQgPSByZWctPmVVcDsKLSAgZUJvdHRvbUxlZnQgPSBGaW5pc2hMZWZ0
UmVnaW9ucyggdGVzcywgcmVnLCBOVUxMICk7Ci0KLSAgLyogTmV4dCB3ZSBwcm9jZXNzIGFsbCB0
aGUgcmlnaHQtZ29pbmcgZWRnZXMgZnJvbSB2RXZlbnQuICBUaGlzCi0gICAqIGludm9sdmVzIGFk
ZGluZyB0aGUgZWRnZXMgdG8gdGhlIGRpY3Rpb25hcnksIGFuZCBjcmVhdGluZyB0aGUKLSAgICog
YXNzb2NpYXRlZCAiYWN0aXZlIHJlZ2lvbnMiIHdoaWNoIHJlY29yZCBpbmZvcm1hdGlvbiBhYm91
dCB0aGUKLSAgICogcmVnaW9ucyBiZXR3ZWVuIGFkamFjZW50IGRpY3Rpb25hcnkgZWRnZXMuCi0g
ICAqLwotICBpZiggZUJvdHRvbUxlZnQtPk9uZXh0ID09IGVUb3BMZWZ0ICkgewotICAgIC8qIE5v
IHJpZ2h0LWdvaW5nIGVkZ2VzIC0tIGFkZCBhIHRlbXBvcmFyeSAiZml4YWJsZSIgZWRnZSAqLwot
ICAgIENvbm5lY3RSaWdodFZlcnRleCggdGVzcywgcmVnVXAsIGVCb3R0b21MZWZ0ICk7Ci0gIH0g
ZWxzZSB7Ci0gICAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVCb3R0b21MZWZ0LT5PbmV4
dCwgZVRvcExlZnQsIGVUb3BMZWZ0LCBUUlVFICk7Ci0gIH0KLX0KLQotCi0vKiBNYWtlIHRoZSBz
ZW50aW5lbCBjb29yZGluYXRlcyBiaWcgZW5vdWdoIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlCi0g
KiBtZXJnZWQgd2l0aCByZWFsIGlucHV0IGZlYXR1cmVzLiAgKEV2ZW4gd2l0aCB0aGUgbGFyZ2Vz
dCBwb3NzaWJsZQotICogaW5wdXQgY29udG91ciBhbmQgdGhlIG1heGltdW0gdG9sZXJhbmNlIG9m
IDEuMCwgbm8gbWVyZ2luZyB3aWxsIGJlCi0gKiBkb25lIHdpdGggY29vcmRpbmF0ZXMgbGFyZ2Vy
IHRoYW4gMyAqIEdMVV9URVNTX01BWF9DT09SRCkuCi0gKi8KLSNkZWZpbmUgU0VOVElORUxfQ09P
UkQJKDQgKiBHTFVfVEVTU19NQVhfQ09PUkQpCi0KLXN0YXRpYyB2b2lkIEFkZFNlbnRpbmVsKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSB0ICkKLS8qCi0gKiBXZSBhZGQgdHdvIHNlbnRp
bmVsIGVkZ2VzIGFib3ZlIGFuZCBiZWxvdyBhbGwgb3RoZXIgZWRnZXMsCi0gKiB0byBhdm9pZCBz
cGVjaWFsIGNhc2VzIGF0IHRoZSB0b3AgYW5kIGJvdHRvbS4KLSAqLwotewotICBHTFVoYWxmRWRn
ZSAqZTsKLSAgQWN0aXZlUmVnaW9uICpyZWcgPSAoQWN0aXZlUmVnaW9uICopbWVtQWxsb2MoIHNp
emVvZiggQWN0aXZlUmVnaW9uICkpOwotICBpZiAocmVnID09IE5VTEwpIGxvbmdqbXAodGVzcy0+
ZW52LDEpOwotCi0gIGUgPSBfX2dsX21lc2hNYWtlRWRnZSggdGVzcy0+bWVzaCApOwotICBpZiAo
ZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLQotICBlLT5PcmctPnMgPSBTRU5USU5F
TF9DT09SRDsKLSAgZS0+T3JnLT50ID0gdDsKLSAgZS0+RHN0LT5zID0gLVNFTlRJTkVMX0NPT1JE
OwotICBlLT5Ec3QtPnQgPSB0OwotICB0ZXNzLT5ldmVudCA9IGUtPkRzdDsJCS8qIGluaXRpYWxp
emUgaXQgKi8KLQotICByZWctPmVVcCA9IGU7Ci0gIHJlZy0+d2luZGluZ051bWJlciA9IDA7Ci0g
IHJlZy0+aW5zaWRlID0gRkFMU0U7Ci0gIHJlZy0+Zml4VXBwZXJFZGdlID0gRkFMU0U7Ci0gIHJl
Zy0+c2VudGluZWwgPSBUUlVFOwotICByZWctPmRpcnR5ID0gRkFMU0U7Ci0gIHJlZy0+bm9kZVVw
ID0gZGljdEluc2VydCggdGVzcy0+ZGljdCwgcmVnICk7IC8qIF9fZ2xfZGljdExpc3RJbnNlcnRC
ZWZvcmUgKi8KLSAgaWYgKHJlZy0+bm9kZVVwID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEp
OwotfQotCi0KLXN0YXRpYyB2b2lkIEluaXRFZGdlRGljdCggR0xVdGVzc2VsYXRvciAqdGVzcyAp
Ci0vKgotICogV2UgbWFpbnRhaW4gYW4gb3JkZXJpbmcgb2YgZWRnZSBpbnRlcnNlY3Rpb25zIHdp
dGggdGhlIHN3ZWVwIGxpbmUuCi0gKiBUaGlzIG9yZGVyIGlzIG1haW50YWluZWQgaW4gYSBkeW5h
bWljIGRpY3Rpb25hcnkuCi0gKi8KLXsKLSAgLyogX19nbF9kaWN0TGlzdE5ld0RpY3QgKi8KLSAg
dGVzcy0+ZGljdCA9IGRpY3ROZXdEaWN0KCB0ZXNzLCAoaW50ICgqKSh2b2lkICosIERpY3RLZXks
IERpY3RLZXkpKSBFZGdlTGVxICk7Ci0gIGlmICh0ZXNzLT5kaWN0ID09IE5VTEwpIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOwotCi0gIEFkZFNlbnRpbmVsKCB0ZXNzLCAtU0VOVElORUxfQ09PUkQgKTsK
LSAgQWRkU2VudGluZWwoIHRlc3MsIFNFTlRJTkVMX0NPT1JEICk7Ci19Ci0KLQotc3RhdGljIHZv
aWQgRG9uZUVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgQWN0aXZlUmVnaW9u
ICpyZWc7Ci0jaWZuZGVmIE5ERUJVRwotICBpbnQgZml4ZWRFZGdlcyA9IDA7Ci0jZW5kaWYKLQot
ICAvKiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8KLSAgd2hpbGUo
IChyZWcgPSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSkg
IT0gTlVMTCApIHsKLSAgICAvKgotICAgICAqIEF0IHRoZSBlbmQgb2YgYWxsIHByb2Nlc3Npbmcs
IHRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb250YWluCi0gICAgICogb25seSB0aGUgdHdvIHNlbnRp
bmVsIGVkZ2VzLCBwbHVzIGF0IG1vc3Qgb25lICJmaXhhYmxlIiBlZGdlCi0gICAgICogY3JlYXRl
ZCBieSBDb25uZWN0UmlnaHRWZXJ0ZXgoKS4KLSAgICAgKi8KLSAgICBpZiggISByZWctPnNlbnRp
bmVsICkgewotICAgICAgYXNzZXJ0KCByZWctPmZpeFVwcGVyRWRnZSApOwotICAgICAgYXNzZXJ0
KCArK2ZpeGVkRWRnZXMgPT0gMSApOwotICAgIH0KLSAgICBhc3NlcnQoIHJlZy0+d2luZGluZ051
bWJlciA9PSAwICk7Ci0gICAgRGVsZXRlUmVnaW9uKCB0ZXNzLCByZWcgKTsKLS8qICAgIF9fZ2xf
bWVzaERlbGV0ZSggcmVnLT5lVXAgKTsqLwotICB9Ci0gIGRpY3REZWxldGVEaWN0KCB0ZXNzLT5k
aWN0ICk7CS8qIF9fZ2xfZGljdExpc3REZWxldGVEaWN0ICovCi19Ci0KLQotc3RhdGljIHZvaWQg
UmVtb3ZlRGVnZW5lcmF0ZUVkZ2VzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLS8qCi0gKiBSZW1v
dmUgemVyby1sZW5ndGggZWRnZXMsIGFuZCBjb250b3VycyB3aXRoIGZld2VyIHRoYW4gMyB2ZXJ0
aWNlcy4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0LCAqZUxuZXh0OwotICBHTFVo
YWxmRWRnZSAqZUhlYWQgPSAmdGVzcy0+bWVzaC0+ZUhlYWQ7Ci0KLSAgLypMSU5URUQqLwotICBm
b3IoIGUgPSBlSGVhZC0+bmV4dDsgZSAhPSBlSGVhZDsgZSA9IGVOZXh0ICkgewotICAgIGVOZXh0
ID0gZS0+bmV4dDsKLSAgICBlTG5leHQgPSBlLT5MbmV4dDsKLSAgICAKLSAgICBpZiggVmVydEVx
KCBlLT5PcmcsIGUtPkRzdCApICYmIGUtPkxuZXh0LT5MbmV4dCAhPSBlICkgewotICAgICAgLyog
WmVyby1sZW5ndGggZWRnZSwgY29udG91ciBoYXMgYXQgbGVhc3QgMyBlZGdlcyAqLwotICAgICAg
Ci0gICAgICBTcGxpY2VNZXJnZVZlcnRpY2VzKCB0ZXNzLCBlTG5leHQsIGUgKTsJLyogZGVsZXRl
cyBlLT5PcmcgKi8KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7IC8qIGUgaXMgYSBzZWxmLWxvb3AgKi8KLSAgICAgIGUgPSBlTG5leHQ7Ci0g
ICAgICBlTG5leHQgPSBlLT5MbmV4dDsKLSAgICB9Ci0gICAgaWYoIGVMbmV4dC0+TG5leHQgPT0g
ZSApIHsKLSAgICAgIC8qIERlZ2VuZXJhdGUgY29udG91ciAob25lIG9yIHR3byBlZGdlcykgKi8K
LSAgICAgIAotICAgICAgaWYoIGVMbmV4dCAhPSBlICkgewotCWlmKCBlTG5leHQgPT0gZU5leHQg
fHwgZUxuZXh0ID09IGVOZXh0LT5TeW0gKSB7IGVOZXh0ID0gZU5leHQtPm5leHQ7IH0KLQlpZiAo
ICFfX2dsX21lc2hEZWxldGUoIGVMbmV4dCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAg
ICB9Ci0gICAgICBpZiggZSA9PSBlTmV4dCB8fCBlID09IGVOZXh0LT5TeW0gKSB7IGVOZXh0ID0g
ZU5leHQtPm5leHQ7IH0KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgbG9uZ2pt
cCh0ZXNzLT5lbnYsMSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBpbnQgSW5pdFByaW9yaXR5
USggR0xVdGVzc2VsYXRvciAqdGVzcyApCi0vKgotICogSW5zZXJ0IGFsbCB2ZXJ0aWNlcyBpbnRv
IHRoZSBwcmlvcml0eSBxdWV1ZSB3aGljaCBkZXRlcm1pbmVzIHRoZQotICogb3JkZXIgaW4gd2hp
Y2ggdmVydGljZXMgY3Jvc3MgdGhlIHN3ZWVwIGxpbmUuCi0gKi8KLXsKLSAgUHJpb3JpdHlRICpw
cTsKLSAgR0xVdmVydGV4ICp2LCAqdkhlYWQ7Ci0KLSAgLyogX19nbF9wcVNvcnROZXdQcmlvcml0
eVEgKi8KLSAgcHEgPSB0ZXNzLT5wcSA9IHBxTmV3UHJpb3JpdHlRKCAoaW50ICgqKShQUWtleSwg
UFFrZXkpKSBfX2dsX3ZlcnRMZXEgKTsKLSAgaWYgKHBxID09IE5VTEwpIHJldHVybiAwOwotCi0g
IHZIZWFkID0gJnRlc3MtPm1lc2gtPnZIZWFkOwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAh
PSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgdi0+cHFIYW5kbGUgPSBwcUluc2VydCggcHEs
IHYgKTsgLyogX19nbF9wcVNvcnRJbnNlcnQgKi8KLSAgICBpZiAodi0+cHFIYW5kbGUgPT0gTE9O
R19NQVgpIGJyZWFrOwotICB9Ci0gIGlmICh2ICE9IHZIZWFkIHx8ICFwcUluaXQoIHBxICkgKSB7
IC8qIF9fZ2xfcHFTb3J0SW5pdCAqLwotICAgIHBxRGVsZXRlUHJpb3JpdHlRKHRlc3MtPnBxKTsJ
LyogX19nbF9wcVNvcnREZWxldGVQcmlvcml0eVEgKi8KLSAgICB0ZXNzLT5wcSA9IE5VTEw7Ci0g
ICAgcmV0dXJuIDA7Ci0gIH0KLQotICByZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgdm9pZCBEb25l
UHJpb3JpdHlRKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgcHFEZWxldGVQcmlvcml0eVEo
IHRlc3MtPnBxICk7IC8qIF9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRICovCi19Ci0KLQotc3Rh
dGljIGludCBSZW1vdmVEZWdlbmVyYXRlRmFjZXMoIEdMVW1lc2ggKm1lc2ggKQotLyoKLSAqIERl
bGV0ZSBhbnkgZGVnZW5lcmF0ZSBmYWNlcyB3aXRoIG9ubHkgdHdvIGVkZ2VzLiAgV2Fsa0RpcnR5
UmVnaW9ucygpCi0gKiB3aWxsIGNhdGNoIGFsbW9zdCBhbGwgb2YgdGhlc2UsIGJ1dCBpdCB3b24n
dCBjYXRjaCBkZWdlbmVyYXRlIGZhY2VzCi0gKiBwcm9kdWNlZCBieSBzcGxpY2Ugb3BlcmF0aW9u
cyBvbiBhbHJlYWR5LXByb2Nlc3NlZCBlZGdlcy4KLSAqIFRoZSB0d28gcGxhY2VzIHRoaXMgY2Fu
IGhhcHBlbiBhcmUgaW4gRmluaXNoTGVmdFJlZ2lvbnMoKSwgd2hlbgotICogd2Ugc3BsaWNlIGlu
IGEgInRlbXBvcmFyeSIgZWRnZSBwcm9kdWNlZCBieSBDb25uZWN0UmlnaHRWZXJ0ZXgoKSwKLSAq
IGFuZCBpbiBDaGVja0ZvckxlZnRTcGxpY2UoKSwgd2hlcmUgd2Ugc3BsaWNlIGFscmVhZHktcHJv
Y2Vzc2VkCi0gKiBlZGdlcyB0byBlbnN1cmUgdGhhdCBvdXIgZGljdGlvbmFyeSBpbnZhcmlhbnRz
IGFyZSBub3QgdmlvbGF0ZWQKLSAqIGJ5IG51bWVyaWNhbCBlcnJvcnMuCi0gKgotICogSW4gYm90
aCB0aGVzZSBjYXNlcyBpdCBpcyAqdmVyeSogZGFuZ2Vyb3VzIHRvIGRlbGV0ZSB0aGUgb2ZmZW5k
aW5nCi0gKiBlZGdlIGF0IHRoZSB0aW1lLCBzaW5jZSBvbmUgb2YgdGhlIHJvdXRpbmVzIGZ1cnRo
ZXIgdXAgdGhlIHN0YWNrCi0gKiB3aWxsIHNvbWV0aW1lcyBiZSBrZWVwaW5nIGEgcG9pbnRlciB0
byB0aGF0IGVkZ2UuCi0gKi8KLXsKLSAgR0xVZmFjZSAqZiwgKmZOZXh0OwotICBHTFVoYWxmRWRn
ZSAqZTsKLQotICAvKkxJTlRFRCovCi0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0g
Jm1lc2gtPmZIZWFkOyBmID0gZk5leHQgKSB7Ci0gICAgZk5leHQgPSBmLT5uZXh0OwotICAgIGUg
PSBmLT5hbkVkZ2U7Ci0gICAgYXNzZXJ0KCBlLT5MbmV4dCAhPSBlICk7Ci0KLSAgICBpZiggZS0+
TG5leHQtPkxuZXh0ID09IGUgKSB7Ci0gICAgICAvKiBBIGZhY2Ugd2l0aCBvbmx5IHR3byBlZGdl
cyAqLwotICAgICAgQWRkV2luZGluZyggZS0+T25leHQsIGUgKTsKLSAgICAgIGlmICggIV9fZ2xf
bWVzaERlbGV0ZSggZSApICkgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQot
Ci1pbnQgX19nbF9jb21wdXRlSW50ZXJpb3IoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotLyoKLSAq
IF9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdl
bWVudCBzcGVjaWZpZWQKLSAqIGJ5IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1cnRoZXIgc3Vi
ZGl2aWRlcyB0aGlzIGFycmFuZ2VtZW50Ci0gKiBpbnRvIHJlZ2lvbnMuICBFYWNoIHJlZ2lvbiBp
cyBtYXJrZWQgImluc2lkZSIgaWYgaXQgYmVsb25ncwotICogdG8gdGhlIHBvbHlnb24sIGFjY29y
ZGluZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAqIEVhY2ggaW50
ZXJpb3IgcmVnaW9uIGlzIGd1YXJhbnRlZWQgYmUgbW9ub3RvbmUuCi0gKi8KLXsKLSAgR0xVdmVy
dGV4ICp2LCAqdk5leHQ7Ci0KLSAgdGVzcy0+ZmF0YWxFcnJvciA9IEZBTFNFOwotCi0gIC8qIEVh
Y2ggdmVydGV4IGRlZmluZXMgYW4gZXZlbnQgZm9yIG91ciBzd2VlcCBsaW5lLiAgU3RhcnQgYnkg
aW5zZXJ0aW5nCi0gICAqIGFsbCB0aGUgdmVydGljZXMgaW4gYSBwcmlvcml0eSBxdWV1ZS4gIEV2
ZW50cyBhcmUgcHJvY2Vzc2VkIGluCi0gICAqIGxleGljb2dyYXBoaWMgb3JkZXIsIGllLgotICAg
KgotICAgKgllMSA8IGUyICBpZmYgIGUxLnggPCBlMi54IHx8IChlMS54ID09IGUyLnggJiYgZTEu
eSA8IGUyLnkpCi0gICAqLwotICBSZW1vdmVEZWdlbmVyYXRlRWRnZXMoIHRlc3MgKTsKLSAgaWYg
KCAhSW5pdFByaW9yaXR5USggdGVzcyApICkgcmV0dXJuIDA7IC8qIGlmIGVycm9yICovCi0gIElu
aXRFZGdlRGljdCggdGVzcyApOwotCi0gIC8qIF9fZ2xfcHFTb3J0RXh0cmFjdE1pbiAqLwotICB3
aGlsZSggKHYgPSAoR0xVdmVydGV4ICopcHFFeHRyYWN0TWluKCB0ZXNzLT5wcSApKSAhPSBOVUxM
ICkgewotICAgIGZvciggOzsgKSB7Ci0gICAgICB2TmV4dCA9IChHTFV2ZXJ0ZXggKilwcU1pbmlt
dW0oIHRlc3MtPnBxICk7IC8qIF9fZ2xfcHFTb3J0TWluaW11bSAqLwotICAgICAgaWYoIHZOZXh0
ID09IE5VTEwgfHwgISBWZXJ0RXEoIHZOZXh0LCB2ICkpIGJyZWFrOwotICAgICAgCi0gICAgICAv
KiBNZXJnZSB0b2dldGhlciBhbGwgdmVydGljZXMgYXQgZXhhY3RseSB0aGUgc2FtZSBsb2NhdGlv
bi4KLSAgICAgICAqIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBwcm9jZXNzaW5nIHRoZW0g
b25lIGF0IGEgdGltZSwKLSAgICAgICAqIHNpbXBsaWZpZXMgdGhlIGNvZGUgKHNlZSBDb25uZWN0
TGVmdERlZ2VuZXJhdGUpLCBhbmQgaXMgYWxzbwotICAgICAgICogaW1wb3J0YW50IGZvciBjb3Jy
ZWN0IGhhbmRsaW5nIG9mIGNlcnRhaW4gZGVnZW5lcmF0ZSBjYXNlcy4KLSAgICAgICAqIEZvciBl
eGFtcGxlLCBzdXBwb3NlIHRoZXJlIGFyZSB0d28gaWRlbnRpY2FsIGVkZ2VzIEEgYW5kIEIKLSAg
ICAgICAqIHRoYXQgYmVsb25nIHRvIGRpZmZlcmVudCBjb250b3VycyAoc28gd2l0aG91dCB0aGlz
IGNvZGUgdGhleSB3b3VsZAotICAgICAgICogYmUgcHJvY2Vzc2VkIGJ5IHNlcGFyYXRlIHN3ZWVw
IGV2ZW50cykuICBTdXBwb3NlIGFub3RoZXIgZWRnZSBDCi0gICAgICAgKiBjcm9zc2VzIEEgYW5k
IEIgZnJvbSBhYm92ZS4gIFdoZW4gQSBpcyBwcm9jZXNzZWQsIHdlIHNwbGl0IGl0Ci0gICAgICAg
KiBhdCBpdHMgaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggQy4gIEhvd2V2ZXIgdGhpcyBhbHNvIHNw
bGl0cyBDLAotICAgICAgICogc28gd2hlbiB3ZSBpbnNlcnQgQiB3ZSBtYXkgY29tcHV0ZSBhIHNs
aWdodGx5IGRpZmZlcmVudAotICAgICAgICogaW50ZXJzZWN0aW9uIHBvaW50LiAgVGhpcyBtaWdo
dCBsZWF2ZSB0d28gZWRnZXMgd2l0aCBhIHNtYWxsCi0gICAgICAgKiBnYXAgYmV0d2VlbiB0aGVt
LiAgVGhpcyBraW5kIG9mIGVycm9yIGlzIGVzcGVjaWFsbHkgb2J2aW91cwotICAgICAgICogd2hl
biB1c2luZyBib3VuZGFyeSBleHRyYWN0aW9uIChHTFVfVEVTU19CT1VOREFSWV9PTkxZKS4KLSAg
ICAgICAqLwotICAgICAgdk5leHQgPSAoR0xVdmVydGV4ICopcHFFeHRyYWN0TWluKCB0ZXNzLT5w
cSApOyAvKiBfX2dsX3BxU29ydEV4dHJhY3RNaW4qLwotICAgICAgU3BsaWNlTWVyZ2VWZXJ0aWNl
cyggdGVzcywgdi0+YW5FZGdlLCB2TmV4dC0+YW5FZGdlICk7Ci0gICAgfQotICAgIFN3ZWVwRXZl
bnQoIHRlc3MsIHYgKTsKLSAgfQotCi0gIC8qIFNldCB0ZXNzLT5ldmVudCBmb3IgZGVidWdnaW5n
IHB1cnBvc2VzICovCi0gIC8qIF9fR0xfRElDVExJU1RLRVkgKi8gLyogX19HTF9ESUNUTElTVE1J
TiAqLyAKLSAgdGVzcy0+ZXZlbnQgPSAoKEFjdGl2ZVJlZ2lvbiAqKSBkaWN0S2V5KCBkaWN0TWlu
KCB0ZXNzLT5kaWN0ICkpKS0+ZVVwLT5Pcmc7Ci0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLSAgRG9u
ZUVkZ2VEaWN0KCB0ZXNzICk7Ci0gIERvbmVQcmlvcml0eVEoIHRlc3MgKTsKLQotICBpZiAoICFS
ZW1vdmVEZWdlbmVyYXRlRmFjZXMoIHRlc3MtPm1lc2ggKSApIHJldHVybiAwOwotICBfX2dsX21l
c2hDaGVja01lc2goIHRlc3MtPm1lc2ggKTsKLQotICByZXR1cm4gMTsKLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgJKHJldmlzaW9uIDgy
MTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxp
dHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1h
ZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUg
U0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5z
ZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRo
ZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46
IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4g
VmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9w
cm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNl
bnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMs
IHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwot
KiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVE
IFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNG
QUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5E
IE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBD
b2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwg
cmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3Ms
Ci0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNp
bGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRl
ZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9u
czogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVk
IGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoq
IE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIu
MSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVy
IDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5
c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNv
ZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEg
U2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBi
ZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRo
ZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiog
QXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQK
LSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3N3ZWVwLmgjNSAk
Ci0qLwotCi0jaWZuZGVmIF9fc3dlZXBfaF8KLSNkZWZpbmUgX19zd2VlcF9oXwotCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLS8qIF9fZ2xfY29tcHV0ZUludGVy
aW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdlbWVudCBzcGVjaWZpZWQKLSAq
IGJ5IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1cnRoZXIgc3ViZGl2aWRlcyB0aGlzIGFycmFu
Z2VtZW50Ci0gKiBpbnRvIHJlZ2lvbnMuICBFYWNoIHJlZ2lvbiBpcyBtYXJrZWQgImluc2lkZSIg
aWYgaXQgYmVsb25ncwotICogdG8gdGhlIHBvbHlnb24sIGFjY29yZGluZyB0byB0aGUgcnVsZSBn
aXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAqIEVhY2ggaW50ZXJpb3IgcmVnaW9uIGlzIGd1
YXJhbnRlZWQgYmUgbW9ub3RvbmUuCi0gKi8KLWludCBfX2dsX2NvbXB1dGVJbnRlcmlvciggR0xV
dGVzc2VsYXRvciAqdGVzcyApOwotCi0KLS8qIFRoZSBmb2xsb3dpbmcgaXMgaGVyZSAqb25seSog
Zm9yIGFjY2VzcyBieSBkZWJ1Z2dpbmcgcm91dGluZXMgKi8KLQotI2luY2x1ZGUgImRpY3QuaCIK
LQotLyogRm9yIGVhY2ggcGFpciBvZiBhZGphY2VudCBlZGdlcyBjcm9zc2luZyB0aGUgc3dlZXAg
bGluZSwgdGhlcmUgaXMKLSAqIGFuIEFjdGl2ZVJlZ2lvbiB0byByZXByZXNlbnQgdGhlIHJlZ2lv
biBiZXR3ZWVuIHRoZW0uICBUaGUgYWN0aXZlCi0gKiByZWdpb25zIGFyZSBrZXB0IGluIHNvcnRl
ZCBvcmRlciBpbiBhIGR5bmFtaWMgZGljdGlvbmFyeS4gIEFzIHRoZQotICogc3dlZXAgbGluZSBj
cm9zc2VzIGVhY2ggdmVydGV4LCB3ZSB1cGRhdGUgdGhlIGFmZmVjdGVkIHJlZ2lvbnMuCi0gKi8K
LQotc3RydWN0IEFjdGl2ZVJlZ2lvbiB7Ci0gIEdMVWhhbGZFZGdlCSplVXA7CQkvKiB1cHBlciBl
ZGdlLCBkaXJlY3RlZCByaWdodCB0byBsZWZ0ICovCi0gIERpY3ROb2RlCSpub2RlVXA7CS8qIGRp
Y3Rpb25hcnkgbm9kZSBjb3JyZXNwb25kaW5nIHRvIGVVcCAqLwotICBpbnQJCXdpbmRpbmdOdW1i
ZXI7CS8qIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgYXJlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIGluc2lkZSB0aGUgcG9seWdvbiAqLwotICBHTGJvb2xlYW4J
aW5zaWRlOwkJLyogaXMgdGhpcyByZWdpb24gaW5zaWRlIHRoZSBwb2x5Z29uPyAqLwotICBHTGJv
b2xlYW4Jc2VudGluZWw7CS8qIG1hcmtzIGZha2UgZWRnZXMgYXQgdCA9ICsvLWluZmluaXR5ICov
Ci0gIEdMYm9vbGVhbglkaXJ0eTsJCS8qIG1hcmtzIHJlZ2lvbnMgd2hlcmUgdGhlIHVwcGVyIG9y
IGxvd2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVkZ2UgaGFzIGNoYW5n
ZWQsIGJ1dCB3ZSBoYXZlbid0IGNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogd2hldGhlciB0aGV5IGludGVyc2VjdCB5ZXQgKi8KLSAgR0xib29sZWFuCWZpeFVwcGVy
RWRnZTsJLyogbWFya3MgdGVtcG9yYXJ5IGVkZ2VzIGludHJvZHVjZWQgd2hlbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBwcm9jZXNzIGEgInJpZ2h0IHZlcnRleCIgKG9u
ZSB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFueSBlZGdlcyBs
ZWF2aW5nIHRvIHRoZSByaWdodCkgKi8KLX07Ci0KLSNkZWZpbmUgUmVnaW9uQmVsb3cocikJKChB
Y3RpdmVSZWdpb24gKikgZGljdEtleShkaWN0UHJlZCgociktPm5vZGVVcCkpKQotI2RlZmluZSBS
ZWdpb25BYm92ZShyKQkoKEFjdGl2ZVJlZ2lvbiAqKSBkaWN0S2V5KGRpY3RTdWNjKChyKS0+bm9k
ZVVwKSkpCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy90ZXNzLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy90ZXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNjM5ICswLDAgQEAK
LS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRp
b25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBs
aWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2Ug
QiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiog
ZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNp
bGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBo
aXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0q
KiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRo
YXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0
ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQg
V0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRI
T1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05T
IE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEK
LSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9y
aWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVu
dGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2
ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHly
aWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGlj
YXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiog
QWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5n
IGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRo
ZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEg
U3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5
OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24K
LSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhp
Y3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNl
ZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0
aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJs
aXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMg
YmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVj
aWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQu
Ci0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngv
bGliL2dsdS9saWJ0ZXNzL3Rlc3MuYyM3ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNp
bmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1h
bGxvYy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgotI2luY2x1
ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3N3ZWVwLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCi0jaW5j
bHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oIgotCi0jZGVmaW5lIEdMVV9U
RVNTX0RFRkFVTFRfVE9MRVJBTkNFIDAuMAotI2RlZmluZSBHTFVfVEVTU19NRVNICQkxMDAxMTIJ
Lyogdm9pZCAoKikoR0xVbWVzaCAqbWVzaCkJICAgICovCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVm
aW5lIEZBTFNFIDAKLQotLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9CZWdp
biggR0xlbnVtIHR5cGUgKSB7fQotLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkg
bm9FZGdlRmxhZyggR0xib29sZWFuIGJvdW5kYXJ5RWRnZSApIHt9Ci0vKkFSR1NVU0VEKi8gc3Rh
dGljIHZvaWQgR0xBUElFTlRSWSBub1ZlcnRleCggdm9pZCAqZGF0YSApIHt9Ci0vKkFSR1NVU0VE
Ki8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0VuZCggdm9pZCApIHt9Ci0vKkFSR1NVU0VEKi8g
c3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0Vycm9yKCBHTGVudW0gZXJybnVtICkge30KLS8qQVJH
U1VTRUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZIG5vQ29tYmluZSggR0xkb3VibGUgY29vcmRz
WzNdLCB2b2lkICpkYXRhWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipkYXRhT3V0ICkge30KLS8qQVJHU1VTRUQqLyBzdGF0
aWMgdm9pZCBHTEFQSUVOVFJZIG5vTWVzaCggR0xVbWVzaCAqbWVzaCApIHt9Ci0KLQotLypBUkdT
VVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vQmVnaW5EYXRhKCBHTGVudW0gdHlwZSwKLQkJ
CQkJICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVO
VFJZIF9fZ2xfbm9FZGdlRmxhZ0RhdGEoIEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UsIAotCQkJCSAg
ICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZ
IF9fZ2xfbm9WZXJ0ZXhEYXRhKCB2b2lkICpkYXRhLAotCQkJCQkgICAgICB2b2lkICpwb2x5Z29u
RGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FbmREYXRhKCB2
b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xf
bm9FcnJvckRhdGEoIEdMZW51bSBlcnJudW0sCi0JCQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEg
KSB7fQotLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vQ29tYmluZURhdGEoIEdM
ZG91YmxlIGNvb3Jkc1szXSwKLQkJCQkJICAgICAgIHZvaWQgKmRhdGFbNF0sCi0JCQkJCSAgICAg
ICBHTGZsb2F0IHdlaWdodFs0XSwKLQkJCQkJICAgICAgIHZvaWQgKipvdXREYXRhLAotCQkJCQkg
ICAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQotCi0vKiBIYWxmLWVkZ2VzIGFyZSBhbGxvY2F0
ZWQgaW4gcGFpcnMgKHNlZSBtZXNoLmMpICovCi10eXBlZGVmIHN0cnVjdCB7IEdMVWhhbGZFZGdl
IGUsIGVTeW07IH0gRWRnZVBhaXI7Ci0KLSNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChh
KSA6IChiKSkKLSNkZWZpbmUgTUFYX0ZBU1RfQUxMT0MJKE1BWChzaXplb2YoRWRnZVBhaXIpLCBc
Ci0JCQkgTUFYKHNpemVvZihHTFV2ZXJ0ZXgpLHNpemVvZihHTFVmYWNlKSkpKQotCi0KLUdMVXRl
c3NlbGF0b3IgKiBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVOZXdUZXNzKCB2b2lkICkKLXsKLSAg
R0xVdGVzc2VsYXRvciAqdGVzczsKLQotICAvKiBPbmx5IGluaXRpYWxpemUgZmllbGRzIHdoaWNo
IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBhcGkuICBPdGhlciBmaWVsZHMKLSAgICogYXJlIGluaXRp
YWxpemVkIHdoZXJlIHRoZXkgYXJlIHVzZWQuCi0gICAqLwotCi0gIGlmIChtZW1Jbml0KCBNQVhf
RkFTVF9BTExPQyApID09IDApIHsKLSAgICAgcmV0dXJuIDA7CQkJLyogb3V0IG9mIG1lbW9yeSAq
LwotICB9Ci0gIHRlc3MgPSAoR0xVdGVzc2VsYXRvciAqKW1lbUFsbG9jKCBzaXplb2YoIEdMVXRl
c3NlbGF0b3IgKSk7Ci0gIGlmICh0ZXNzID09IE5VTEwpIHsKLSAgICAgcmV0dXJuIDA7CQkJLyog
b3V0IG9mIG1lbW9yeSAqLwotICB9Ci0KLSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7Ci0KLSAg
dGVzcy0+bm9ybWFsWzBdID0gMDsKLSAgdGVzcy0+bm9ybWFsWzFdID0gMDsKLSAgdGVzcy0+bm9y
bWFsWzJdID0gMDsKLQotICB0ZXNzLT5yZWxUb2xlcmFuY2UgPSBHTFVfVEVTU19ERUZBVUxUX1RP
TEVSQU5DRTsKLSAgdGVzcy0+d2luZGluZ1J1bGUgPSBHTFVfVEVTU19XSU5ESU5HX09ERDsKLSAg
dGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gRkFMU0U7Ci0gIHRlc3MtPmJvdW5kYXJ5T25seSA9IEZBTFNF
OwotCi0gIHRlc3MtPmNhbGxCZWdpbiA9ICZub0JlZ2luOwotICB0ZXNzLT5jYWxsRWRnZUZsYWcg
PSAmbm9FZGdlRmxhZzsKLSAgdGVzcy0+Y2FsbFZlcnRleCA9ICZub1ZlcnRleDsKLSAgdGVzcy0+
Y2FsbEVuZCA9ICZub0VuZDsKLQotICB0ZXNzLT5jYWxsRXJyb3IgPSAmbm9FcnJvcjsKLSAgdGVz
cy0+Y2FsbENvbWJpbmUgPSAmbm9Db21iaW5lOwotICB0ZXNzLT5jYWxsTWVzaCA9ICZub01lc2g7
Ci0KLSAgdGVzcy0+Y2FsbEJlZ2luRGF0YT0gJl9fZ2xfbm9CZWdpbkRhdGE7Ci0gIHRlc3MtPmNh
bGxFZGdlRmxhZ0RhdGE9ICZfX2dsX25vRWRnZUZsYWdEYXRhOwotICB0ZXNzLT5jYWxsVmVydGV4
RGF0YT0gJl9fZ2xfbm9WZXJ0ZXhEYXRhOwotICB0ZXNzLT5jYWxsRW5kRGF0YT0gJl9fZ2xfbm9F
bmREYXRhOwotICB0ZXNzLT5jYWxsRXJyb3JEYXRhPSAmX19nbF9ub0Vycm9yRGF0YTsKLSAgdGVz
cy0+Y2FsbENvbWJpbmVEYXRhPSAmX19nbF9ub0NvbWJpbmVEYXRhOwotCi0gIHRlc3MtPnBvbHln
b25EYXRhPSBOVUxMOwotCi0gIHJldHVybiB0ZXNzOwotfQotCi1zdGF0aWMgdm9pZCBNYWtlRG9y
bWFudCggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIC8qIFJldHVybiB0aGUgdGVzc2VsbGF0
b3IgdG8gaXRzIG9yaWdpbmFsIGRvcm1hbnQgc3RhdGUuICovCi0KLSAgaWYoIHRlc3MtPm1lc2gg
IT0gTlVMTCApIHsKLSAgICBfX2dsX21lc2hEZWxldGVNZXNoKCB0ZXNzLT5tZXNoICk7Ci0gIH0K
LSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7Ci0gIHRlc3MtPmxhc3RFZGdlID0gTlVMTDsKLSAg
dGVzcy0+bWVzaCA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgUmVxdWlyZVN0YXRlKCB0ZXNzLCBzICkg
ICBpZiggdGVzcy0+c3RhdGUgIT0gcyApIEdvdG9TdGF0ZSh0ZXNzLHMpCi0KLXN0YXRpYyB2b2lk
IEdvdG9TdGF0ZSggR0xVdGVzc2VsYXRvciAqdGVzcywgZW51bSBUZXNzU3RhdGUgbmV3U3RhdGUg
KQotewotICB3aGlsZSggdGVzcy0+c3RhdGUgIT0gbmV3U3RhdGUgKSB7Ci0gICAgLyogV2UgY2hh
bmdlIHRoZSBjdXJyZW50IHN0YXRlIG9uZSBsZXZlbCBhdCBhIHRpbWUsIHRvIGdldCB0bwotICAg
ICAqIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgICAqLwotICAgIGlmKCB0ZXNzLT5zdGF0ZSA8IG5l
d1N0YXRlICkgewotICAgICAgc3dpdGNoKCB0ZXNzLT5zdGF0ZSApIHsKLSAgICAgIGNhc2UgVF9E
T1JNQU5UOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19CRUdJ
Tl9QT0xZR09OICk7Ci0JaW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbiggdGVzcywgTlVMTCAp
OwotCWJyZWFrOwotICAgICAgY2FzZSBUX0lOX1BPTFlHT046Ci0JQ0FMTF9FUlJPUl9PUl9FUlJP
Ul9EQVRBKCBHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIgKTsKLQlpbnRlcm5hbF9nbHVU
ZXNzQmVnaW5Db250b3VyKCB0ZXNzICk7Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBhc3NlcnQoMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICBzd2l0Y2goIHRlc3MtPnN0YXRlICkgewotICAgICAgY2FzZSBUX0lOX0NPTlRPVVI6Ci0JQ0FM
TF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSICk7Ci0J
aW50ZXJuYWxfZ2x1VGVzc0VuZENvbnRvdXIoIHRlc3MgKTsKLQlicmVhazsKLSAgICAgIGNhc2Ug
VF9JTl9QT0xZR09OOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lO
R19FTkRfUE9MWUdPTiApOwotCS8qIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNzICkgaXMgdG9vIG11
Y2ggd29yayEgKi8KLQlNYWtlRG9ybWFudCggdGVzcyApOwotCWJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgYXNzZXJ0KDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KLQotCi12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdURlbGV0ZVRlc3MoIEdMVXRl
c3NlbGF0b3IgKnRlc3MgKQotewotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfRE9STUFOVCApOwot
ICBtZW1GcmVlKCB0ZXNzICk7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVU
ZXNzUHJvcGVydHkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGljaCwgR0xkb3VibGUg
dmFsdWUgKQotewotICBHTGVudW0gd2luZGluZ1J1bGU7Ci0KLSAgc3dpdGNoKCB3aGljaCApIHsK
LSAgY2FzZSBHTFVfVEVTU19UT0xFUkFOQ0U6Ci0gICAgaWYoIHZhbHVlIDwgMC4wIHx8IHZhbHVl
ID4gMS4wICkgYnJlYWs7Ci0gICAgdGVzcy0+cmVsVG9sZXJhbmNlID0gdmFsdWU7Ci0gICAgcmV0
dXJuOwotCi0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19SVUxFOgotICAgIHdpbmRpbmdSdWxlID0g
KEdMZW51bSkgdmFsdWU7Ci0gICAgaWYoIHdpbmRpbmdSdWxlICE9IHZhbHVlICkgYnJlYWs7CS8q
IG5vdCBhbiBpbnRlZ2VyICovCi0KLSAgICBzd2l0Y2goIHdpbmRpbmdSdWxlICkgewotICAgIGNh
c2UgR0xVX1RFU1NfV0lORElOR19PREQ6Ci0gICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05PTlpF
Uk86Ci0gICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOgotICAgIGNhc2UgR0xVX1RF
U1NfV0lORElOR19ORUdBVElWRToKLSAgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9U
V086Ci0gICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9IHdpbmRpbmdSdWxlOwotICAgICAgcmV0dXJu
OwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgY2FzZSBHTFVfVEVTU19C
T1VOREFSWV9PTkxZOgotICAgIHRlc3MtPmJvdW5kYXJ5T25seSA9ICh2YWx1ZSAhPSAwKTsKLSAg
ICByZXR1cm47Ci0KLSAgZGVmYXVsdDoKLSAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdM
VV9JTlZBTElEX0VOVU0gKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgQ0FMTF9FUlJPUl9PUl9FUlJP
Ul9EQVRBKCBHTFVfSU5WQUxJRF9WQUxVRSApOwotfQotCi0vKiBSZXR1cm5zIHRlc3NlbGxhdG9y
IHByb3BlcnR5ICovCi12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdUdldFRlc3NQcm9wZXJ0
eSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNoLCBHTGRvdWJsZSAqdmFsdWUgKQot
ewotICAgc3dpdGNoICh3aGljaCkgewotICAgY2FzZSBHTFVfVEVTU19UT0xFUkFOQ0U6Ci0gICAg
ICAvKiB0b2xlcmFuY2Ugc2hvdWxkIGJlIGluIHJhbmdlIFswLi4xXSAqLwotICAgICAgYXNzZXJ0
KDAuMCA8PSB0ZXNzLT5yZWxUb2xlcmFuY2UgJiYgdGVzcy0+cmVsVG9sZXJhbmNlIDw9IDEuMCk7
Ci0gICAgICAqdmFsdWU9IHRlc3MtPnJlbFRvbGVyYW5jZTsKLSAgICAgIGJyZWFrOyAgICAKLSAg
IGNhc2UgR0xVX1RFU1NfV0lORElOR19SVUxFOgotICAgICAgYXNzZXJ0KHRlc3MtPndpbmRpbmdS
dWxlID09IEdMVV9URVNTX1dJTkRJTkdfT0REIHx8Ci0JICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9
PSBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8gfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09
IEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUgfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09
IEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUgfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09
IEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV08pOwotICAgICAgKnZhbHVlPSB0ZXNzLT53aW5k
aW5nUnVsZTsKLSAgICAgIGJyZWFrOwotICAgY2FzZSBHTFVfVEVTU19CT1VOREFSWV9PTkxZOgot
ICAgICAgYXNzZXJ0KHRlc3MtPmJvdW5kYXJ5T25seSA9PSBUUlVFIHx8IHRlc3MtPmJvdW5kYXJ5
T25seSA9PSBGQUxTRSk7Ci0gICAgICAqdmFsdWU9IHRlc3MtPmJvdW5kYXJ5T25seTsKLSAgICAg
IGJyZWFrOwotICAgZGVmYXVsdDoKLSAgICAgICp2YWx1ZT0gMC4wOwotICAgICAgQ0FMTF9FUlJP
Ul9PUl9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7Ci0gICAgICBicmVhazsKLSAgIH0K
LX0gLyogZ2x1R2V0VGVzc1Byb3BlcnR5KCkgKi8KLQotdm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5h
bF9nbHVUZXNzTm9ybWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSB4LCBHTGRvdWJs
ZSB5LCBHTGRvdWJsZSB6ICkKLXsKLSAgdGVzcy0+bm9ybWFsWzBdID0geDsKLSAgdGVzcy0+bm9y
bWFsWzFdID0geTsKLSAgdGVzcy0+bm9ybWFsWzJdID0gejsKLX0KLQotdm9pZCBHTEFQSUVOVFJZ
Ci1pbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2soIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3
aGljaCwgdm9pZCAoR0xBUElFTlRSWSAqZm4pKCkpCi17Ci0gIHN3aXRjaCggd2hpY2ggKSB7Ci0g
IGNhc2UgR0xVX1RFU1NfQkVHSU46Ci0gICAgdGVzcy0+Y2FsbEJlZ2luID0gKGZuID09IE5VTEwp
ID8gJm5vQmVnaW4gOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGVudW0pKSBmbjsKLSAgICByZXR1
cm47Ci0gIGNhc2UgR0xVX1RFU1NfQkVHSU5fREFUQToKLSAgICB0ZXNzLT5jYWxsQmVnaW5EYXRh
ID0gKGZuID09IE5VTEwpID8KLQkmX19nbF9ub0JlZ2luRGF0YSA6ICh2b2lkIChHTEFQSUVOVFJZ
ICopKEdMZW51bSwgdm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX0VE
R0VfRkxBRzoKLSAgICB0ZXNzLT5jYWxsRWRnZUZsYWcgPSAoZm4gPT0gTlVMTCkgPyAmbm9FZGdl
RmxhZyA6Ci0JCQkJCSh2b2lkIChHTEFQSUVOVFJZICopKEdMYm9vbGVhbikpIGZuOwotICAgIC8q
IElmIHRoZSBjbGllbnQgd2FudHMgYm91bmRhcnkgZWRnZXMgdG8gYmUgZmxhZ2dlZCwKLSAgICAg
KiB3ZSByZW5kZXIgZXZlcnl0aGluZyBhcyBzZXBhcmF0ZSB0cmlhbmdsZXMgKG5vIHN0cmlwcyBv
ciBmYW5zKS4KLSAgICAgKi8KLSAgICB0ZXNzLT5mbGFnQm91bmRhcnkgPSAoZm4gIT0gTlVMTCk7
Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX0VER0VfRkxBR19EQVRBOgotICAgIHRlc3Mt
PmNhbGxFZGdlRmxhZ0RhdGE9IChmbiA9PSBOVUxMKSA/Ci0JJl9fZ2xfbm9FZGdlRmxhZ0RhdGEg
OiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGJvb2xlYW4sIHZvaWQgKikpIGZuOyAKLSAgICAvKiBJ
ZiB0aGUgY2xpZW50IHdhbnRzIGJvdW5kYXJ5IGVkZ2VzIHRvIGJlIGZsYWdnZWQsCi0gICAgICog
d2UgcmVuZGVyIGV2ZXJ5dGhpbmcgYXMgc2VwYXJhdGUgdHJpYW5nbGVzIChubyBzdHJpcHMgb3Ig
ZmFucykuCi0gICAgICovCi0gICAgdGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gKGZuICE9IE5VTEwpOwot
ICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19WRVJURVg6Ci0gICAgdGVzcy0+Y2FsbFZlcnRl
eCA9IChmbiA9PSBOVUxMKSA/ICZub1ZlcnRleCA6Ci0JCQkJICAgICAgKHZvaWQgKEdMQVBJRU5U
UlkgKikodm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX1ZFUlRFWF9E
QVRBOgotICAgIHRlc3MtPmNhbGxWZXJ0ZXhEYXRhID0gKGZuID09IE5VTEwpID8KLQkmX19nbF9u
b1ZlcnRleERhdGEgOiAodm9pZCAoR0xBUElFTlRSWSAqKSh2b2lkICosIHZvaWQgKikpIGZuOwot
ICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FTkQ6Ci0gICAgdGVzcy0+Y2FsbEVuZCA9IChm
biA9PSBOVUxMKSA/ICZub0VuZCA6ICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQpKSBmbjsKLSAg
ICByZXR1cm47Ci0gIGNhc2UgR0xVX1RFU1NfRU5EX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbEVuZERh
dGEgPSAoZm4gPT0gTlVMTCkgPyAmX19nbF9ub0VuZERhdGEgOiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQgKikpIGZuOwot
ICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUjoKLSAgICB0ZXNzLT5jYWxsRXJyb3Ig
PSAoZm4gPT0gTlVMTCkgPyAmbm9FcnJvciA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMZW51bSkp
IGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUl9EQVRBOgotICAgIHRlc3Mt
PmNhbGxFcnJvckRhdGEgPSAoZm4gPT0gTlVMTCkgPwotCSZfX2dsX25vRXJyb3JEYXRhIDogKHZv
aWQgKEdMQVBJRU5UUlkgKikoR0xlbnVtLCB2b2lkICopKSBmbjsKLSAgICByZXR1cm47Ci0gIGNh
c2UgR0xVX1RFU1NfQ09NQklORToKLSAgICB0ZXNzLT5jYWxsQ29tYmluZSA9IChmbiA9PSBOVUxM
KSA/ICZub0NvbWJpbmUgOgotCSh2b2lkIChHTEFQSUVOVFJZICopKEdMZG91YmxlIFszXSx2b2lk
ICpbNF0sIEdMZmxvYXQgWzRdLCB2b2lkICoqICkpIGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBH
TFVfVEVTU19DT01CSU5FX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbENvbWJpbmVEYXRhID0gKGZuID09
IE5VTEwpID8gJl9fZ2xfbm9Db21iaW5lRGF0YSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xkb3VibGUgWzNdLAotCQkJ
CQkJICAgICB2b2lkICpbNF0sIAotCQkJCQkJICAgICBHTGZsb2F0IFs0XSwgCi0JCQkJCQkgICAg
IHZvaWQgKiosCi0JCQkJCQkgICAgIHZvaWQgKikpIGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBH
TFVfVEVTU19NRVNIOgotICAgIHRlc3MtPmNhbGxNZXNoID0gKGZuID09IE5VTEwpID8gJm5vTWVz
aCA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMVW1lc2ggKikpIGZuOwotICAgIHJldHVybjsKLSAg
ZGVmYXVsdDoKLSAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9JTlZBTElEX0VOVU0g
KTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGludCBBZGRWZXJ0ZXgoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MsIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIEdMVWhh
bGZFZGdlICplOwotCi0gIGUgPSB0ZXNzLT5sYXN0RWRnZTsKLSAgaWYoIGUgPT0gTlVMTCApIHsK
LSAgICAvKiBNYWtlIGEgc2VsZi1sb29wIChvbmUgdmVydGV4LCBvbmUgZWRnZSkuICovCi0KLSAg
ICBlID0gX19nbF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKLSAgICBpZiAoZSA9PSBOVUxM
KSByZXR1cm4gMDsKLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGUsIGUtPlN5bSApICkgcmV0
dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQ3JlYXRlIGEgbmV3IHZlcnRleCBhbmQgZWRnZSB3
aGljaCBpbW1lZGlhdGVseSBmb2xsb3cgZQotICAgICAqIGluIHRoZSBvcmRlcmluZyBhcm91bmQg
dGhlIGxlZnQgZmFjZS4KLSAgICAgKi8KLSAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlICkg
PT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgZSA9IGUtPkxuZXh0OwotICB9Ci0KLSAgLyogVGhlIG5l
dyB2ZXJ0ZXggaXMgbm93IGUtPk9yZy4gKi8KLSAgZS0+T3JnLT5kYXRhID0gZGF0YTsKLSAgZS0+
T3JnLT5jb29yZHNbMF0gPSBjb29yZHNbMF07Ci0gIGUtPk9yZy0+Y29vcmRzWzFdID0gY29vcmRz
WzFdOwotICBlLT5PcmctPmNvb3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgCi0gIC8qIFRoZSB3aW5k
aW5nIG9mIGFuIGVkZ2Ugc2F5cyBob3cgdGhlIHdpbmRpbmcgbnVtYmVyIGNoYW5nZXMgYXMgd2UK
LSAgICogY3Jvc3MgZnJvbSB0aGUgZWRnZScncyByaWdodCBmYWNlIHRvIGl0cyBsZWZ0IGZhY2Uu
ICBXZSBhZGQgdGhlCi0gICAqIHZlcnRpY2VzIGluIHN1Y2ggYW4gb3JkZXIgdGhhdCBhIENDVyBj
b250b3VyIHdpbGwgYWRkICsxIHRvCi0gICAqIHRoZSB3aW5kaW5nIG51bWJlciBvZiB0aGUgcmVn
aW9uIGluc2lkZSB0aGUgY29udG91ci4KLSAgICovCi0gIGUtPndpbmRpbmcgPSAxOwotICBlLT5T
eW0tPndpbmRpbmcgPSAtMTsKLQotICB0ZXNzLT5sYXN0RWRnZSA9IGU7Ci0KLSAgcmV0dXJuIDE7
Ci19Ci0KLQotc3RhdGljIHZvaWQgQ2FjaGVWZXJ0ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdM
ZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIENhY2hlZFZlcnRleCAqdiA9ICZ0
ZXNzLT5jYWNoZVt0ZXNzLT5jYWNoZUNvdW50XTsKLQotICB2LT5kYXRhID0gZGF0YTsKLSAgdi0+
Y29vcmRzWzBdID0gY29vcmRzWzBdOwotICB2LT5jb29yZHNbMV0gPSBjb29yZHNbMV07Ci0gIHYt
PmNvb3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgKyt0ZXNzLT5jYWNoZUNvdW50OwotfQotCi0KLXN0
YXRpYyBpbnQgRW1wdHlDYWNoZSggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIENhY2hlZFZl
cnRleCAqdiA9IHRlc3MtPmNhY2hlOwotICBDYWNoZWRWZXJ0ZXggKnZMYXN0OwotCi0gIHRlc3Mt
Pm1lc2ggPSBfX2dsX21lc2hOZXdNZXNoKCk7Ci0gIGlmICh0ZXNzLT5tZXNoID09IE5VTEwpIHJl
dHVybiAwOwotCi0gIGZvciggdkxhc3QgPSB2ICsgdGVzcy0+Y2FjaGVDb3VudDsgdiA8IHZMYXN0
OyArK3YgKSB7Ci0gICAgaWYgKCAhQWRkVmVydGV4KCB0ZXNzLCB2LT5jb29yZHMsIHYtPmRhdGEg
KSApIHJldHVybiAwOwotICB9Ci0gIHRlc3MtPmNhY2hlQ291bnQgPSAwOwotICB0ZXNzLT5lbXB0
eUNhY2hlID0gRkFMU0U7Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1p
bnRlcm5hbF9nbHVUZXNzVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29y
ZHNbM10sIHZvaWQgKmRhdGEgKQotewotICBpbnQgaSwgdG9vTGFyZ2UgPSBGQUxTRTsKLSAgR0xk
b3VibGUgeCwgY2xhbXBlZFszXTsKLQotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfSU5fQ09OVE9V
UiApOwotCi0gIGlmKCB0ZXNzLT5lbXB0eUNhY2hlICkgewotICAgIGlmICggIUVtcHR5Q2FjaGUo
IHRlc3MgKSApIHsKLSAgICAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9PVVRfT0Zf
TUVNT1JZICk7Ci0gICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0ZXNzLT5sYXN0RWRnZSA9IE5V
TEw7Ci0gIH0KLSAgZm9yKCBpID0gMDsgaSA8IDM7ICsraSApIHsKLSAgICB4ID0gY29vcmRzW2ld
OwotICAgIGlmKCB4IDwgLSBHTFVfVEVTU19NQVhfQ09PUkQgKSB7Ci0gICAgICB4ID0gLSBHTFVf
VEVTU19NQVhfQ09PUkQ7Ci0gICAgICB0b29MYXJnZSA9IFRSVUU7Ci0gICAgfQotICAgIGlmKCB4
ID4gR0xVX1RFU1NfTUFYX0NPT1JEICkgewotICAgICAgeCA9IEdMVV9URVNTX01BWF9DT09SRDsK
LSAgICAgIHRvb0xhcmdlID0gVFJVRTsKLSAgICB9Ci0gICAgY2xhbXBlZFtpXSA9IHg7Ci0gIH0K
LSAgaWYoIHRvb0xhcmdlICkgewotICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RF
U1NfQ09PUkRfVE9PX0xBUkdFICk7Ci0gIH0KLQotICBpZiggdGVzcy0+bWVzaCA9PSBOVUxMICkg
ewotICAgIGlmKCB0ZXNzLT5jYWNoZUNvdW50IDwgVEVTU19NQVhfQ0FDSEUgKSB7Ci0gICAgICBD
YWNoZVZlcnRleCggdGVzcywgY2xhbXBlZCwgZGF0YSApOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoICFFbXB0eUNhY2hlKCB0ZXNzICkgKSB7Ci0gICAgICAgQ0FMTF9FUlJPUl9PUl9F
UlJPUl9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICAgICAgIHJldHVybjsKLSAgICB9Ci0g
IH0KLSAgaWYgKCAhQWRkVmVydGV4KCB0ZXNzLCBjbGFtcGVkLCBkYXRhICkgKSB7Ci0gICAgICAg
Q0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICB9Ci19Ci0K
LQotdm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKCBHTFV0ZXNz
ZWxhdG9yICp0ZXNzLCB2b2lkICpkYXRhICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0RP
Uk1BTlQgKTsKLQotICB0ZXNzLT5zdGF0ZSA9IFRfSU5fUE9MWUdPTjsKLSAgdGVzcy0+Y2FjaGVD
b3VudCA9IDA7Ci0gIHRlc3MtPmVtcHR5Q2FjaGUgPSBGQUxTRTsKLSAgdGVzcy0+bWVzaCA9IE5V
TEw7Ci0KLSAgdGVzcy0+cG9seWdvbkRhdGE9IGRhdGE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZ
Ci1pbnRlcm5hbF9nbHVUZXNzQmVnaW5Db250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsK
LSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lOX1BPTFlHT04gKTsKLQotICB0ZXNzLT5zdGF0ZSA9
IFRfSU5fQ09OVE9VUjsKLSAgdGVzcy0+bGFzdEVkZ2UgPSBOVUxMOwotICBpZiggdGVzcy0+Y2Fj
aGVDb3VudCA+IDAgKSB7Ci0gICAgLyogSnVzdCBzZXQgYSBmbGFnIHNvIHdlIGRvbid0IGdldCBj
b25mdXNlZCBieSBlbXB0eSBjb250b3VycwotICAgICAqIC0tIHRoZXNlIGNhbiBiZSBnZW5lcmF0
ZWQgYWNjaWRlbnRhbGx5IHdpdGggdGhlIG9ic29sZXRlCi0gICAgICogTmV4dENvbnRvdXIoKSBp
bnRlcmZhY2UuCi0gICAgICovCi0gICAgdGVzcy0+ZW1wdHlDYWNoZSA9IFRSVUU7Ci0gIH0KLX0K
LQotCi12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKCBHTFV0ZXNz
ZWxhdG9yICp0ZXNzICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lOX0NPTlRPVVIgKTsK
LSAgdGVzcy0+c3RhdGUgPSBUX0lOX1BPTFlHT047Ci19Ci0KLXZvaWQgR0xBUElFTlRSWQotaW50
ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBHTFVt
ZXNoICptZXNoOwotCi0gIGlmIChzZXRqbXAodGVzcy0+ZW52KSAhPSAwKSB7CQotICAgICAvKiBj
b21lIGJhY2sgaGVyZSBpZiBvdXQgb2YgbWVtb3J5ICovCi0gICAgIENBTExfRVJST1JfT1JfRVJS
T1JfREFUQSggR0xVX09VVF9PRl9NRU1PUlkgKTsKLSAgICAgcmV0dXJuOwotICB9Ci0KLSAgUmVx
dWlyZVN0YXRlKCB0ZXNzLCBUX0lOX1BPTFlHT04gKTsKLSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1B
TlQ7Ci0KLSAgaWYoIHRlc3MtPm1lc2ggPT0gTlVMTCApIHsKLSAgICBpZiggISB0ZXNzLT5mbGFn
Qm91bmRhcnkgJiYgdGVzcy0+Y2FsbE1lc2ggPT0gJm5vTWVzaCApIHsKLQotICAgICAgLyogVHJ5
IHNvbWUgc3BlY2lhbCBjb2RlIHRvIG1ha2UgdGhlIGVhc3kgY2FzZXMgZ28gcXVpY2tseQotICAg
ICAgICogKGVnLiBjb252ZXggcG9seWdvbnMpLiAgVGhpcyBjb2RlIGRvZXMgTk9UIGhhbmRsZSBt
dWx0aXBsZSBjb250b3VycywKLSAgICAgICAqIGludGVyc2VjdGlvbnMsIGVkZ2UgZmxhZ3MsIGFu
ZCBvZiBjb3Vyc2UgaXQgZG9lcyBub3QgZ2VuZXJhdGUKLSAgICAgICAqIGFuIGV4cGxpY2l0IG1l
c2ggZWl0aGVyLgotICAgICAgICovCi0gICAgICBpZiggX19nbF9yZW5kZXJDYWNoZSggdGVzcyAp
KSB7Ci0JdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7IAotCXJldHVybjsKLSAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKCAhRW1wdHlDYWNoZSggdGVzcyApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7IC8q
IGNvdWxkJ3ZlIHVzZWQgYSBsYWJlbCovCi0gIH0KLQotICAvKiBEZXRlcm1pbmUgdGhlIHBvbHln
b24gbm9ybWFsIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhlIHBsYW5lCi0gICAqIG9mIHRo
ZSBwb2x5Z29uLgotICAgKi8KLSAgX19nbF9wcm9qZWN0UG9seWdvbiggdGVzcyApOwotCi0gIC8q
IF9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdl
bWVudCBzcGVjaWZpZWQKLSAgICogYnkgdGhlIGdpdmVuIGNvbnRvdXJzLCBhbmQgZnVydGhlciBz
dWJkaXZpZGVzIHRoaXMgYXJyYW5nZW1lbnQKLSAgICogaW50byByZWdpb25zLiAgRWFjaCByZWdp
b24gaXMgbWFya2VkICJpbnNpZGUiIGlmIGl0IGJlbG9uZ3MKLSAgICogdG8gdGhlIHBvbHlnb24s
IGFjY29yZGluZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAgICog
RWFjaCBpbnRlcmlvciByZWdpb24gaXMgZ3VhcmFudGVlZCBiZSBtb25vdG9uZS4KLSAgICovCi0g
IGlmICggIV9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgKSB7Ci0gICAgIGxvbmdqbXAodGVz
cy0+ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwgKi8KLSAgfQotCi0gIG1lc2ggPSB0
ZXNzLT5tZXNoOwotICBpZiggISB0ZXNzLT5mYXRhbEVycm9yICkgewotICAgIGludCByYyA9IDE7
Ci0KLSAgICAvKiBJZiB0aGUgdXNlciB3YW50cyBvbmx5IHRoZSBib3VuZGFyeSBjb250b3Vycywg
d2UgdGhyb3cgYXdheSBhbGwgZWRnZXMKLSAgICAgKiBleGNlcHQgdGhvc2Ugd2hpY2ggc2VwYXJh
dGUgdGhlIGludGVyaW9yIGZyb20gdGhlIGV4dGVyaW9yLgotICAgICAqIE90aGVyd2lzZSB3ZSB0
ZXNzZWxsYXRlIGFsbCB0aGUgcmVnaW9ucyBtYXJrZWQgImluc2lkZSIuCi0gICAgICovCi0gICAg
aWYoIHRlc3MtPmJvdW5kYXJ5T25seSApIHsKLSAgICAgIHJjID0gX19nbF9tZXNoU2V0V2luZGlu
Z051bWJlciggbWVzaCwgMSwgVFJVRSApOwotICAgIH0gZWxzZSB7Ci0gICAgICByYyA9IF9fZ2xf
bWVzaFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApOyAKLSAgICB9Ci0gICAgaWYgKHJjID09IDAp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwgKi8KLQotICAg
IF9fZ2xfbWVzaENoZWNrTWVzaCggbWVzaCApOwotCi0gICAgaWYoIHRlc3MtPmNhbGxCZWdpbiAh
PSAmbm9CZWdpbiB8fCB0ZXNzLT5jYWxsRW5kICE9ICZub0VuZAotICAgICAgIHx8IHRlc3MtPmNh
bGxWZXJ0ZXggIT0gJm5vVmVydGV4IHx8IHRlc3MtPmNhbGxFZGdlRmxhZyAhPSAmbm9FZGdlRmxh
ZyAKLSAgICAgICB8fCB0ZXNzLT5jYWxsQmVnaW5EYXRhICE9ICZfX2dsX25vQmVnaW5EYXRhIAot
ICAgICAgIHx8IHRlc3MtPmNhbGxFbmREYXRhICE9ICZfX2dsX25vRW5kRGF0YQotICAgICAgIHx8
IHRlc3MtPmNhbGxWZXJ0ZXhEYXRhICE9ICZfX2dsX25vVmVydGV4RGF0YQotICAgICAgIHx8IHRl
c3MtPmNhbGxFZGdlRmxhZ0RhdGEgIT0gJl9fZ2xfbm9FZGdlRmxhZ0RhdGEgKQotICAgIHsKLSAg
ICAgIGlmKCB0ZXNzLT5ib3VuZGFyeU9ubHkgKSB7Ci0JX19nbF9yZW5kZXJCb3VuZGFyeSggdGVz
cywgbWVzaCApOyAgLyogb3V0cHV0IGJvdW5kYXJ5IGNvbnRvdXJzICovCi0gICAgICB9IGVsc2Ug
ewotCV9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVzaCApOwkgICAvKiBvdXRwdXQgc3RyaXBzIGFu
ZCBmYW5zICovCi0gICAgICB9Ci0gICAgfQotICAgIGlmKCB0ZXNzLT5jYWxsTWVzaCAhPSAmbm9N
ZXNoICkgewotCi0gICAgICAvKiBUaHJvdyBhd2F5IHRoZSBleHRlcmlvciBmYWNlcywgc28gdGhh
dCBhbGwgZmFjZXMgYXJlIGludGVyaW9yLgotICAgICAgICogVGhpcyB3YXkgdGhlIHVzZXIgZG9l
c24ndCBoYXZlIHRvIGNoZWNrIHRoZSAiaW5zaWRlIiBmbGFnLAotICAgICAgICogYW5kIHdlIGRv
bid0IG5lZWQgdG8gZXZlbiByZXZlYWwgaXRzIGV4aXN0ZW5jZS4gIEl0IGFsc28gbGVhdmVzCi0g
ICAgICAgKiB0aGUgZnJlZWRvbSBmb3IgYW4gaW1wbGVtZW50YXRpb24gdG8gbm90IGdlbmVyYXRl
IHRoZSBleHRlcmlvcgotICAgICAgICogZmFjZXMgaW4gdGhlIGZpcnN0IHBsYWNlLgotICAgICAg
ICovCi0gICAgICBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2ggKTsKLSAgICAgICgqdGVz
cy0+Y2FsbE1lc2gpKCBtZXNoICk7CQkvKiB1c2VyIHdhbnRzIHRoZSBtZXNoIGl0c2VsZiAqLwot
ICAgICAgdGVzcy0+bWVzaCA9IE5VTEw7Ci0gICAgICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAgX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCAp
OwotICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsKLSAgdGVzcy0+bWVzaCA9IE5VTEw7Ci19Ci0K
LQotLypYWFhibHl0aGUgdW51c2VkIGZ1bmN0aW9uKi8KLSNpZiAwCi12b2lkIEdMQVBJRU5UUlkK
LWdsdURlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQotewotICBfX2dsX21lc2hEZWxldGVNZXNo
KCBtZXNoICk7Ci19Ci0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBPYnNvbGV0ZSBjYWxscyAtLSBmb3Ig
YmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi0jaWYgMAotdm9pZCBHTEFQSUVOVFJZCi1nbHVC
ZWdpblBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBnbHVUZXNzQmVnaW5Qb2x5
Z29uKCB0ZXNzLCBOVUxMICk7Ci0gIGdsdVRlc3NCZWdpbkNvbnRvdXIoIHRlc3MgKTsKLX0KLQot
Ci0vKkFSR1NVU0VEKi8KLXZvaWQgR0xBUElFTlRSWQotZ2x1TmV4dENvbnRvdXIoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MsIEdMZW51bSB0eXBlICkKLXsKLSAgZ2x1VGVzc0VuZENvbnRvdXIoIHRlc3Mg
KTsKLSAgZ2x1VGVzc0JlZ2luQ29udG91ciggdGVzcyApOwotfQotCi0KLXZvaWQgR0xBUElFTlRS
WQotZ2x1RW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIGdsdVRlc3NFbmRD
b250b3VyKCB0ZXNzICk7Ci0gIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNzICk7Ci19Ci0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCShy
ZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCwwIEBACi0vKgotKiogTGljZW5zZSBB
cHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUg
YXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0
ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0
aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qg
b25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0q
KiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXks
IE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3Nz
LnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBp
biB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMg
SVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENP
TkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBB
TlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJ
VFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBV
UlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUg
T3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNp
b24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29u
IEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5
OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRp
b25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVy
ZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNl
IFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBl
c3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBh
cmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZl
cnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNl
ZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoq
IFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5
OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0
IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlh
bnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0q
LwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAk
UmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90
ZXNzLmgjNiAkCi0qLwotCi0jaWZuZGVmIF9fdGVzc19oXwotI2RlZmluZSBfX3Rlc3NfaF8KLQot
I2luY2x1ZGUgPHNldGptcC5oPgotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvaW50ZXJuYWxf
Z2x1LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEuaCIKLQotLyogVGhlIGJlZ2luL2VuZCBjYWxscyBtdXN0IGJl
IHByb3Blcmx5IG5lc3RlZC4gIFdlIGtlZXAgdHJhY2sgb2YKLSAqIHRoZSBjdXJyZW50IHN0YXRl
IHRvIGVuZm9yY2UgdGhlIG9yZGVyaW5nLgotICovCi1lbnVtIFRlc3NTdGF0ZSB7IFRfRE9STUFO
VCwgVF9JTl9QT0xZR09OLCBUX0lOX0NPTlRPVVIgfTsKLQotLyogV2UgY2FjaGUgdmVydGV4IGRh
dGEgZm9yIHNpbmdsZS1jb250b3VyIHBvbHlnb25zIHNvIHRoYXQgd2UgY2FuCi0gKiB0cnkgYSBx
dWljay1hbmQtZGlydHkgZGVjb21wb3NpdGlvbiBmaXJzdC4KLSAqLwotI2RlZmluZSBURVNTX01B
WF9DQUNIRQkxMDAKLQotdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkVmVydGV4IHsKLSAgR0xkb3VibGUJ
Y29vcmRzWzNdOwotICB2b2lkCQkqZGF0YTsKLX0gQ2FjaGVkVmVydGV4OwotCi1zdHJ1Y3QgR0xV
dGVzc2VsYXRvciB7Ci0KLSAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9yIGNvbGxlY3RpbmcgdGhlIGlu
cHV0IGRhdGEgKioqLwotCi0gIGVudW0gVGVzc1N0YXRlIHN0YXRlOwkJLyogd2hhdCBiZWdpbi9l
bmQgY2FsbHMgaGF2ZSB3ZSBzZWVuPyAqLwotCi0gIEdMVWhhbGZFZGdlCSpsYXN0RWRnZTsJLyog
bGFzdEVkZ2UtPk9yZyBpcyB0aGUgbW9zdCByZWNlbnQgdmVydGV4ICovCi0gIEdMVW1lc2gJKm1l
c2g7CQkvKiBzdG9yZXMgdGhlIGlucHV0IGNvbnRvdXJzLCBhbmQgZXZlbnR1YWxseQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVzc2VsbGF0aW9uIGl0c2VsZiAqLwot
Ci0gIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsRXJyb3IpKCBHTGVudW0gZXJybnVtICk7Ci0KLSAg
LyoqKiBzdGF0ZSBuZWVkZWQgZm9yIHByb2plY3Rpbmcgb250byB0aGUgc3dlZXAgcGxhbmUgKioq
LwotCi0gIEdMZG91YmxlCW5vcm1hbFszXTsJLyogdXNlci1zcGVjaWZpZWQgbm9ybWFsIChpZiBw
cm92aWRlZCkgKi8KLSAgR0xkb3VibGUJc1VuaXRbM107CS8qIHVuaXQgdmVjdG9yIGluIHMtZGly
ZWN0aW9uIChkZWJ1Z2dpbmcpICovCi0gIEdMZG91YmxlCXRVbml0WzNdOwkvKiB1bml0IHZlY3Rv
ciBpbiB0LWRpcmVjdGlvbiAoZGVidWdnaW5nKSAqLwotCi0gIC8qKiogc3RhdGUgbmVlZGVkIGZv
ciB0aGUgbGluZSBzd2VlcCAqKiovCi0KLSAgR0xkb3VibGUJcmVsVG9sZXJhbmNlOwkvKiB0b2xl
cmFuY2UgZm9yIG1lcmdpbmcgZmVhdHVyZXMgKi8KLSAgR0xlbnVtCXdpbmRpbmdSdWxlOwkvKiBy
dWxlIGZvciBkZXRlcm1pbmluZyBwb2x5Z29uIGludGVyaW9yICovCi0gIEdMYm9vbGVhbglmYXRh
bEVycm9yOwkvKiBmYXRhbCBlcnJvcjogbmVlZGVkIGNvbWJpbmUgY2FsbGJhY2sgKi8KLQotICBE
aWN0CQkqZGljdDsJCS8qIGVkZ2UgZGljdGlvbmFyeSBmb3Igc3dlZXAgbGluZSAqLwotICBQcmlv
cml0eVEJKnBxOwkJLyogcHJpb3JpdHkgcXVldWUgb2YgdmVydGV4IGV2ZW50cyAqLwotICBHTFV2
ZXJ0ZXgJKmV2ZW50OwkJLyogY3VycmVudCBzd2VlcCBldmVudCBiZWluZyBwcm9jZXNzZWQgKi8K
LQotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbENvbWJpbmUpKCBHTGRvdWJsZSBjb29yZHNbM10s
IHZvaWQgKmRhdGFbNF0sCi0JCQkgICAgICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0
RGF0YSApOwotCi0gIC8qKiogc3RhdGUgbmVlZGVkIGZvciByZW5kZXJpbmcgY2FsbGJhY2tzIChz
ZWUgcmVuZGVyLmMpICoqKi8KLQotICBHTGJvb2xlYW4JZmxhZ0JvdW5kYXJ5OwkvKiBtYXJrIGJv
dW5kYXJ5IGVkZ2VzICh1c2UgRWRnZUZsYWcpICovCi0gIEdMYm9vbGVhbglib3VuZGFyeU9ubHk7
CS8qIEV4dHJhY3QgY29udG91cnMsIG5vdCB0cmlhbmdsZXMgKi8KLSAgR0xVZmFjZQkqbG9uZWx5
VHJpTGlzdDsKLSAgICAvKiBsaXN0IG9mIHRyaWFuZ2xlcyB3aGljaCBjb3VsZCBub3QgYmUgcmVu
ZGVyZWQgYXMgc3RyaXBzIG9yIGZhbnMgKi8KLQotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEJl
Z2luKSggR0xlbnVtIHR5cGUgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFZGdlRmxhZyko
IEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxWZXJ0
ZXgpKCB2b2lkICpkYXRhICk7Ci0gIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsRW5kKSggdm9pZCAp
OwotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbE1lc2gpKCBHTFVtZXNoICptZXNoICk7Ci0KLQot
ICAvKioqIHN0YXRlIG5lZWRlZCB0byBjYWNoZSBzaW5nbGUtY29udG91ciBwb2x5Z29ucyBmb3Ig
cmVuZGVyQ2FjaGUoKSAqLwotCi0gIEdMYm9vbGVhbgllbXB0eUNhY2hlOwkJLyogZW1wdHkgY2Fj
aGUgb24gbmV4dCB2ZXJ0ZXgoKSBjYWxsICovCi0gIGludAkJY2FjaGVDb3VudDsJCS8qIG51bWJl
ciBvZiBjYWNoZWQgdmVydGljZXMgKi8KLSAgQ2FjaGVkVmVydGV4CWNhY2hlW1RFU1NfTUFYX0NB
Q0hFXTsJLyogdGhlIHZlcnRleCBkYXRhICovCi0KLSAgLyoqKiByZW5kZXJpbmcgY2FsbGJhY2tz
IHRoYXQgYWxzbyBwYXNzIHBvbHlnb24gZGF0YSAgKioqLyAKLSAgdm9pZAkJKEdMQVBJRU5UUlkg
KmNhbGxCZWdpbkRhdGEpKCBHTGVudW0gdHlwZSwgdm9pZCAqcG9seWdvbkRhdGEgKTsKLSAgdm9p
ZAkJKEdMQVBJRU5UUlkgKmNhbGxFZGdlRmxhZ0RhdGEpKCBHTGJvb2xlYW4gYm91bmRhcnlFZGdl
LCAKLQkJCQkgICAgIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJCShHTEFQSUVOVFJZICpj
YWxsVmVydGV4RGF0YSkoIHZvaWQgKmRhdGEsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJ
CShHTEFQSUVOVFJZICpjYWxsRW5kRGF0YSkoIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJ
CShHTEFQSUVOVFJZICpjYWxsRXJyb3JEYXRhKSggR0xlbnVtIGVycm51bSwgdm9pZCAqcG9seWdv
bkRhdGEgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxDb21iaW5lRGF0YSkoIEdMZG91Ymxl
IGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKLQkJCQkgICAgR0xmbG9hdCB3ZWlnaHRbNF0sIHZv
aWQgKipvdXREYXRhLAotCQkJCSAgICB2b2lkICpwb2x5Z29uRGF0YSApOwotCi0gIGptcF9idWYg
ZW52OwkJCS8qIHBsYWNlIHRvIGp1bXAgdG8gd2hlbiBtZW1BbGxvY3MgZmFpbCAqLwotCi0gIHZv
aWQgKnBvbHlnb25EYXRhOwkJLyogY2xpZW50IGRhdGEgZm9yIGN1cnJlbnQgcG9seWdvbiAqLwot
fTsKLQotdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9CZWdpbkRhdGEoIEdMZW51bSB0eXBlLCB2b2lk
ICpwb2x5Z29uRGF0YSApOwotdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FZGdlRmxhZ0RhdGEoIEdM
Ym9vbGVhbiBib3VuZGFyeUVkZ2UsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12b2lkIEdMQVBJRU5U
UlkgX19nbF9ub1ZlcnRleERhdGEoIHZvaWQgKmRhdGEsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12
b2lkIEdMQVBJRU5UUlkgX19nbF9ub0VuZERhdGEoIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12b2lk
IEdMQVBJRU5UUlkgX19nbF9ub0Vycm9yRGF0YSggR0xlbnVtIGVycm51bSwgdm9pZCAqcG9seWdv
bkRhdGEgKTsKLXZvaWQgR0xBUElFTlRSWSBfX2dsX25vQ29tYmluZURhdGEoIEdMZG91YmxlIGNv
b3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKLQkJCSBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAqKm91
dERhdGEsCi0JCQkgdm9pZCAqcG9seWdvbkRhdGEgKTsKLQotI2RlZmluZSBDQUxMX0JFR0lOX09S
X0JFR0lOX0RBVEEoYSkgXAotICAgaWYgKHRlc3MtPmNhbGxCZWdpbkRhdGEgIT0gJl9fZ2xfbm9C
ZWdpbkRhdGEpIFwKLSAgICAgICgqdGVzcy0+Y2FsbEJlZ2luRGF0YSkoKGEpLHRlc3MtPnBvbHln
b25EYXRhKTsgXAotICAgZWxzZSAoKnRlc3MtPmNhbGxCZWdpbikoKGEpKTsKLQotI2RlZmluZSBD
QUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQShhKSBcCi0gICBpZiAodGVzcy0+Y2FsbFZlcnRleERh
dGEgIT0gJl9fZ2xfbm9WZXJ0ZXhEYXRhKSBcCi0gICAgICAoKnRlc3MtPmNhbGxWZXJ0ZXhEYXRh
KSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBcCi0gICBlbHNlICgqdGVzcy0+Y2FsbFZlcnRleCko
KGEpKTsKLQotI2RlZmluZSBDQUxMX0VER0VfRkxBR19PUl9FREdFX0ZMQUdfREFUQShhKSBcCi0g
ICBpZiAodGVzcy0+Y2FsbEVkZ2VGbGFnRGF0YSAhPSAmX19nbF9ub0VkZ2VGbGFnRGF0YSkgXAot
ICAgICAgKCp0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhKSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBc
Ci0gICBlbHNlICgqdGVzcy0+Y2FsbEVkZ2VGbGFnKSgoYSkpOwotCi0jZGVmaW5lIENBTExfRU5E
X09SX0VORF9EQVRBKCkgXAotICAgaWYgKHRlc3MtPmNhbGxFbmREYXRhICE9ICZfX2dsX25vRW5k
RGF0YSkgXAotICAgICAgKCp0ZXNzLT5jYWxsRW5kRGF0YSkodGVzcy0+cG9seWdvbkRhdGEpOyBc
Ci0gICBlbHNlICgqdGVzcy0+Y2FsbEVuZCkoKTsKLQotI2RlZmluZSBDQUxMX0NPTUJJTkVfT1Jf
Q09NQklORV9EQVRBKGEsYixjLGQpIFwKLSAgIGlmICh0ZXNzLT5jYWxsQ29tYmluZURhdGEgIT0g
Jl9fZ2xfbm9Db21iaW5lRGF0YSkgXAotICAgICAgKCp0ZXNzLT5jYWxsQ29tYmluZURhdGEpKChh
KSwoYiksKGMpLChkKSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKLSAgIGVsc2UgKCp0ZXNzLT5jYWxs
Q29tYmluZSkoKGEpLChiKSwoYyksKGQpKTsKLQotI2RlZmluZSBDQUxMX0VSUk9SX09SX0VSUk9S
X0RBVEEoYSkgXAotICAgaWYgKHRlc3MtPmNhbGxFcnJvckRhdGEgIT0gJl9fZ2xfbm9FcnJvckRh
dGEpIFwKLSAgICAgICgqdGVzcy0+Y2FsbEVycm9yRGF0YSkoKGEpLHRlc3MtPnBvbHlnb25EYXRh
KTsgXAotICAgZWxzZSAoKnRlc3MtPmNhbGxFcnJvcikoKGEpKTsKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5jCShy
ZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uYwkod29ya2luZyBjb3B5KQpAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSoqIExpY2Vu
c2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBm
aWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVy
bWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEu
MSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJq
ZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVz
ZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJr
d2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDov
L29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlk
ZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiog
IkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFO
RCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElP
TiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRB
QklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxB
UiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4g
VGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBW
ZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2ls
aWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChj
KSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBw
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNl
d2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5v
dGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwot
KiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENv
ZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9u
IChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVs
ZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBY
Ci0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTks
IDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ks
IGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29t
cGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0q
KgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0
ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRl
c3MvdGVzc21vbm8uYyM1ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9u
by5oIgotCi0jZGVmaW5lIEFkZFdpbmRpbmcoZURzdCxlU3JjKQkoZURzdC0+d2luZGluZyArPSBl
U3JjLT53aW5kaW5nLCBcCi0JCQkJIGVEc3QtPlN5bS0+d2luZGluZyArPSBlU3JjLT5TeW0tPndp
bmRpbmcpCi0KLS8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVzc2Vs
bGF0ZXMgYSBtb25vdG9uZSByZWdpb24KLSAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/PykgIFRo
ZSByZWdpb24gbXVzdCBjb25zaXN0IG9mIGEgc2luZ2xlCi0gKiBsb29wIG9mIGhhbGYtZWRnZXMg
KHNlZSBtZXNoLmgpIG9yaWVudGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcwotICogY2FzZSBt
ZWFucyB0aGF0IGFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9mIHRo
ZQotICogcmVnaW9uIGluIGEgc2luZ2xlIGludGVydmFsLiAgCi0gKgotICogVGVzc2VsbGF0aW9u
IGNvbnNpc3RzIG9mIGFkZGluZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YKLSAq
IGhhbGYtZWRnZXMpLCB0byBzcGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHRy
aWFuZ2xlcy4KLSAqCi0gKiBUaGUgYmFzaWMgaWRlYSBpcyBleHBsYWluZWQgaW4gUHJlcGFyYXRh
IGFuZCBTaGFtb3MgKHdoaWNoIEkgZG9uJyd0Ci0gKiBoYXZlIGhhbmR5IHJpZ2h0IG5vdyksIGFs
dGhvdWdoIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIG1vcmUKLSAqIGNvbXBsaWNhdGVkIHRoYW4g
dGhpcyBvbmUuICBUaGUgYXJlIHR3byBlZGdlIGNoYWlucywgYW4gdXBwZXIgY2hhaW4KLSAqIGFu
ZCBhIGxvd2VyIGNoYWluLiAgV2UgcHJvY2VzcyBhbGwgdmVydGljZXMgZnJvbSBib3RoIGNoYWlu
cyBpbiBvcmRlciwKLSAqIGZyb20gcmlnaHQgdG8gbGVmdC4KLSAqCi0gKiBUaGUgYWxnb3JpdGht
IGVuc3VyZXMgdGhhdCB0aGUgZm9sbG93aW5nIGludmFyaWFudCBob2xkcyBhZnRlciBlYWNoCi0g
KiB2ZXJ0ZXggaXMgcHJvY2Vzc2VkOiB0aGUgdW50ZXNzZWxsYXRlZCByZWdpb24gY29uc2lzdHMg
b2YgdHdvCi0gKiBjaGFpbnMsIHdoZXJlIG9uZSBjaGFpbiAoc2F5IHRoZSB1cHBlcikgaXMgYSBz
aW5nbGUgZWRnZSwgYW5kCi0gKiB0aGUgb3RoZXIgY2hhaW4gaXMgY29uY2F2ZS4gIFRoZSBsZWZ0
IHZlcnRleCBvZiB0aGUgc2luZ2xlIGVkZ2UKLSAqIGlzIGFsd2F5cyB0byB0aGUgbGVmdCBvZiBh
bGwgdmVydGljZXMgaW4gdGhlIGNvbmNhdmUgY2hhaW4uCi0gKgotICogRWFjaCBzdGVwIGNvbnNp
c3RzIG9mIGFkZGluZyB0aGUgcmlnaHRtb3N0IHVucHJvY2Vzc2VkIHZlcnRleCB0byBvbmUKLSAq
IG9mIHRoZSB0d28gY2hhaW5zLCBhbmQgZm9ybWluZyBhIGZhbiBvZiB0cmlhbmdsZXMgZnJvbSB0
aGUgcmlnaHRtb3N0Ci0gKiBvZiB0d28gY2hhaW4gZW5kcG9pbnRzLiAgRGV0ZXJtaW5pbmcgd2hl
dGhlciB3ZSBjYW4gYWRkIGVhY2ggdHJpYW5nbGUKLSAqIHRvIHRoZSBmYW4gaXMgYSBzaW1wbGUg
b3JpZW50YXRpb24gdGVzdC4gIEJ5IG1ha2luZyB0aGUgZmFuIGFzIGxhcmdlCi0gKiBhcyBwb3Nz
aWJsZSwgd2UgcmVzdG9yZSB0aGUgaW52YXJpYW50IChjaGVjayBpdCB5b3Vyc2VsZikuCi0gKi8K
LWludCBfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApCi17Ci0g
IEdMVWhhbGZFZGdlICp1cCwgKmxvOwotCi0gIC8qIEFsbCBlZGdlcyBhcmUgb3JpZW50ZWQgQ0NX
IGFyb3VuZCB0aGUgYm91bmRhcnkgb2YgdGhlIHJlZ2lvbi4KLSAgICogRmlyc3QsIGZpbmQgdGhl
IGhhbGYtZWRnZSB3aG9zZSBvcmlnaW4gdmVydGV4IGlzIHJpZ2h0bW9zdC4KLSAgICogU2luY2Ug
dGhlIHN3ZWVwIGdvZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBmYWNlLT5hbkVkZ2Ugc2hvdWxkCi0g
ICAqIGJlIGNsb3NlIHRvIHRoZSBlZGdlIHdlIHdhbnQuCi0gICAqLwotICB1cCA9IGZhY2UtPmFu
RWRnZTsKLSAgYXNzZXJ0KCB1cC0+TG5leHQgIT0gdXAgJiYgdXAtPkxuZXh0LT5MbmV4dCAhPSB1
cCApOwotCi0gIGZvciggOyBWZXJ0TGVxKCB1cC0+RHN0LCB1cC0+T3JnICk7IHVwID0gdXAtPkxw
cmV2ICkKLSAgICA7Ci0gIGZvciggOyBWZXJ0TGVxKCB1cC0+T3JnLCB1cC0+RHN0ICk7IHVwID0g
dXAtPkxuZXh0ICkKLSAgICA7Ci0gIGxvID0gdXAtPkxwcmV2OwotCi0gIHdoaWxlKCB1cC0+TG5l
eHQgIT0gbG8gKSB7Ci0gICAgaWYoIFZlcnRMZXEoIHVwLT5Ec3QsIGxvLT5PcmcgKSkgewotICAg
ICAgLyogdXAtPkRzdCBpcyBvbiB0aGUgbGVmdC4gIEl0IGlzIHNhZmUgdG8gZm9ybSB0cmlhbmds
ZXMgZnJvbSBsby0+T3JnLgotICAgICAgICogVGhlIEVkZ2VHb2VzTGVmdCB0ZXN0IGd1YXJhbnRl
ZXMgcHJvZ3Jlc3MgZXZlbiB3aGVuIHNvbWUgdHJpYW5nbGVzCi0gICAgICAgKiBhcmUgQ1csIGdp
dmVuIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjaGFpbnMgYXJlIHRydWx5IG1vbm90b25lLgot
ICAgICAgICovCi0gICAgICB3aGlsZSggbG8tPkxuZXh0ICE9IHVwICYmIChFZGdlR29lc0xlZnQo
IGxvLT5MbmV4dCApCi0JICAgICB8fCBFZGdlU2lnbiggbG8tPk9yZywgbG8tPkRzdCwgbG8tPkxu
ZXh0LT5Ec3QgKSA8PSAwICkpIHsKLQlHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21l
c2hDb25uZWN0KCBsby0+TG5leHQsIGxvICk7Ci0JaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSBy
ZXR1cm4gMDsKLQlsbyA9IHRlbXBIYWxmRWRnZS0+U3ltOwotICAgICAgfQotICAgICAgbG8gPSBs
by0+THByZXY7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGxvLT5PcmcgaXMgb24gdGhlIGxlZnQu
ICBXZSBjYW4gbWFrZSBDQ1cgdHJpYW5nbGVzIGZyb20gdXAtPkRzdC4gKi8KLSAgICAgIHdoaWxl
KCBsby0+TG5leHQgIT0gdXAgJiYgKEVkZ2VHb2VzUmlnaHQoIHVwLT5McHJldiApCi0JICAgICB8
fCBFZGdlU2lnbiggdXAtPkRzdCwgdXAtPk9yZywgdXAtPkxwcmV2LT5PcmcgKSA+PSAwICkpIHsK
LQlHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCB1cCwgdXAtPkxw
cmV2ICk7Ci0JaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKLQl1cCA9IHRlbXBI
YWxmRWRnZS0+U3ltOwotICAgICAgfQotICAgICAgdXAgPSB1cC0+TG5leHQ7Ci0gICAgfQotICB9
Ci0KLSAgLyogTm93IGxvLT5PcmcgPT0gdXAtPkRzdCA9PSB0aGUgbGVmdG1vc3QgdmVydGV4LiAg
VGhlIHJlbWFpbmluZyByZWdpb24KLSAgICogY2FuIGJlIHRlc3NlbGxhdGVkIGluIGEgZmFuIGZy
b20gdGhpcyBsZWZ0bW9zdCB2ZXJ0ZXguCi0gICAqLwotICBhc3NlcnQoIGxvLT5MbmV4dCAhPSB1
cCApOwotICB3aGlsZSggbG8tPkxuZXh0LT5MbmV4dCAhPSB1cCApIHsKLSAgICBHTFVoYWxmRWRn
ZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCBsby0+TG5leHQsIGxvICk7Ci0gICAg
aWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKLSAgICBsbyA9IHRlbXBIYWxmRWRn
ZS0+U3ltOwotICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyogX19nbF9tZXNoVGVzc2VsbGF0
ZUludGVyaW9yKCBtZXNoICkgdGVzc2VsbGF0ZXMgZWFjaCByZWdpb24gb2YKLSAqIHRoZSBtZXNo
IHdoaWNoIGlzIG1hcmtlZCAiaW5zaWRlIiB0aGUgcG9seWdvbi4gIEVhY2ggc3VjaCByZWdpb24K
LSAqIG11c3QgYmUgbW9ub3RvbmUuCi0gKi8KLWludCBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJp
b3IoIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmLCAqbmV4dDsKLQotICAvKkxJTlRF
RCovCi0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0g
bmV4dCApIHsKLSAgICAvKiBNYWtlIHN1cmUgd2UgZG9uJyd0IHRyeSB0byB0ZXNzZWxsYXRlIHRo
ZSBuZXcgdHJpYW5nbGVzLiAqLwotICAgIG5leHQgPSBmLT5uZXh0OwotICAgIGlmKCBmLT5pbnNp
ZGUgKSB7Ci0gICAgICBpZiAoICFfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggZiApICkg
cmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyogX19nbF9tZXNo
RGlzY2FyZEV4dGVyaW9yKCBtZXNoICkgemFwcyAoaWUuIHNldHMgdG8gTlVMTCkgYWxsIGZhY2Vz
Ci0gKiB3aGljaCBhcmUgbm90IG1hcmtlZCAiaW5zaWRlIiB0aGUgcG9seWdvbi4gIFNpbmNlIGZ1
cnRoZXIgbWVzaCBvcGVyYXRpb25zCi0gKiBvbiBOVUxMIGZhY2VzIGFyZSBub3QgYWxsb3dlZCwg
dGhlIG1haW4gcHVycG9zZSBpcyB0byBjbGVhbiB1cCB0aGUKLSAqIG1lc2ggc28gdGhhdCBleHRl
cmlvciBsb29wcyBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KLSAq
Lwotdm9pZCBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKQotewotICBH
TFVmYWNlICpmLCAqbmV4dDsKLQotICAvKkxJTlRFRCovCi0gIGZvciggZiA9IG1lc2gtPmZIZWFk
Lm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gbmV4dCApIHsKLSAgICAvKiBTaW5jZSBmIHdp
bGwgYmUgZGVzdHJveWVkLCBzYXZlIGl0cyBuZXh0IHBvaW50ZXIuICovCi0gICAgbmV4dCA9IGYt
Pm5leHQ7Ci0gICAgaWYoICEgZi0+aW5zaWRlICkgewotICAgICAgX19nbF9tZXNoWmFwRmFjZSgg
ZiApOwotICAgIH0KLSAgfQotfQotCi0jZGVmaW5lIE1BUktFRF9GT1JfREVMRVRJT04JMHg3ZmZm
ZmZmZgotCi0vKiBfX2dsX21lc2hTZXRXaW5kaW5nTnVtYmVyKCBtZXNoLCB2YWx1ZSwga2VlcE9u
bHlCb3VuZGFyeSApIHJlc2V0cyB0aGUKLSAqIHdpbmRpbmcgbnVtYmVycyBvbiBhbGwgZWRnZXMg
c28gdGhhdCByZWdpb25zIG1hcmtlZCAiaW5zaWRlIiB0aGUKLSAqIHBvbHlnb24gaGF2ZSBhIHdp
bmRpbmcgbnVtYmVyIG9mICJ2YWx1ZSIsIGFuZCByZWdpb25zIG91dHNpZGUKLSAqIGhhdmUgYSB3
aW5kaW5nIG51bWJlciBvZiAwLgotICoKLSAqIElmIGtlZXBPbmx5Qm91bmRhcnkgaXMgVFJVRSwg
aXQgYWxzbyBkZWxldGVzIGFsbCBlZGdlcyB3aGljaCBkbyBub3QKLSAqIHNlcGFyYXRlIGFuIGlu
dGVyaW9yIHJlZ2lvbiBmcm9tIGFuIGV4dGVyaW9yIG9uZS4KLSAqLwotaW50IF9fZ2xfbWVzaFNl
dFdpbmRpbmdOdW1iZXIoIEdMVW1lc2ggKm1lc2gsIGludCB2YWx1ZSwKLQkJCSAgICAgICAgR0xi
b29sZWFuIGtlZXBPbmx5Qm91bmRhcnkgKQotewotICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0Owot
Ci0gIGZvciggZSA9IG1lc2gtPmVIZWFkLm5leHQ7IGUgIT0gJm1lc2gtPmVIZWFkOyBlID0gZU5l
eHQgKSB7Ci0gICAgZU5leHQgPSBlLT5uZXh0OwotICAgIGlmKCBlLT5SZmFjZS0+aW5zaWRlICE9
IGUtPkxmYWNlLT5pbnNpZGUgKSB7Ci0KLSAgICAgIC8qIFRoaXMgaXMgYSBib3VuZGFyeSBlZGdl
IChvbmUgc2lkZSBpcyBpbnRlcmlvciwgb25lIGlzIGV4dGVyaW9yKS4gKi8KLSAgICAgIGUtPndp
bmRpbmcgPSAoZS0+TGZhY2UtPmluc2lkZSkgPyB2YWx1ZSA6IC12YWx1ZTsKLSAgICB9IGVsc2Ug
ewotCi0gICAgICAvKiBCb3RoIHJlZ2lvbnMgYXJlIGludGVyaW9yLCBvciBib3RoIGFyZSBleHRl
cmlvci4gKi8KLSAgICAgIGlmKCAhIGtlZXBPbmx5Qm91bmRhcnkgKSB7Ci0JZS0+d2luZGluZyA9
IDA7Ci0gICAgICB9IGVsc2UgewotCWlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgcmV0dXJu
IDA7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaAkocmV2aXNpb24g
ODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25v
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGlj
YWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQot
KiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGlu
IHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJM
aWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkg
dG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwg
YXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3Vu
dGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhl
IExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBi
YXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJ
T05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElN
UExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBT
QVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NF
LCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdp
bmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEu
Mi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFw
aGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIw
MDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVy
ZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92
aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJs
aXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRo
ZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9u
IDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92
ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5k
b3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRo
aXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMg
bm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdp
dGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8q
Ci0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlz
aW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvdGVzc21v
bm8uaCM1ICQKLSovCi0KLSNpZm5kZWYgX190ZXNzbW9ub19oXwotI2RlZmluZSBfX3Rlc3Ntb25v
X2hfCi0KLS8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVzc2VsbGF0
ZXMgYSBtb25vdG9uZSByZWdpb24KLSAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/PykgIFRoZSBy
ZWdpb24gbXVzdCBjb25zaXN0IG9mIGEgc2luZ2xlCi0gKiBsb29wIG9mIGhhbGYtZWRnZXMgKHNl
ZSBtZXNoLmgpIG9yaWVudGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcwotICogY2FzZSBtZWFu
cyB0aGF0IGFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9mIHRoZQot
ICogcmVnaW9uIGluIGEgc2luZ2xlIGludGVydmFsLiAgCi0gKgotICogVGVzc2VsbGF0aW9uIGNv
bnNpc3RzIG9mIGFkZGluZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YKLSAqIGhh
bGYtZWRnZXMpLCB0byBzcGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHRyaWFu
Z2xlcy4KLSAqCi0gKiBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIG1lc2ggKSB0ZXNzZWxs
YXRlcyBlYWNoIHJlZ2lvbiBvZgotICogdGhlIG1lc2ggd2hpY2ggaXMgbWFya2VkICJpbnNpZGUi
IHRoZSBwb2x5Z29uLiAgRWFjaCBzdWNoIHJlZ2lvbgotICogbXVzdCBiZSBtb25vdG9uZS4KLSAq
Ci0gKiBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2ggKSB6YXBzIChpZS4gc2V0cyB0byBO
VUxMKSBhbGwgZmFjZXMKLSAqIHdoaWNoIGFyZSBub3QgbWFya2VkICJpbnNpZGUiIHRoZSBwb2x5
Z29uLiAgU2luY2UgZnVydGhlciBtZXNoIG9wZXJhdGlvbnMKLSAqIG9uIE5VTEwgZmFjZXMgYXJl
IG5vdCBhbGxvd2VkLCB0aGUgbWFpbiBwdXJwb3NlIGlzIHRvIGNsZWFuIHVwIHRoZQotICogbWVz
aCBzbyB0aGF0IGV4dGVyaW9yIGxvb3BzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIGRhdGEg
c3RydWN0dXJlLgotICoKLSAqIF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIG1lc2gsIHZhbHVl
LCBrZWVwT25seUJvdW5kYXJ5ICkgcmVzZXRzIHRoZQotICogd2luZGluZyBudW1iZXJzIG9uIGFs
bCBlZGdlcyBzbyB0aGF0IHJlZ2lvbnMgbWFya2VkICJpbnNpZGUiIHRoZQotICogcG9seWdvbiBo
YXZlIGEgd2luZGluZyBudW1iZXIgb2YgInZhbHVlIiwgYW5kIHJlZ2lvbnMgb3V0c2lkZQotICog
aGF2ZSBhIHdpbmRpbmcgbnVtYmVyIG9mIDAuCi0gKgotICogSWYga2VlcE9ubHlCb3VuZGFyeSBp
cyBUUlVFLCBpdCBhbHNvIGRlbGV0ZXMgYWxsIGVkZ2VzIHdoaWNoIGRvIG5vdAotICogc2VwYXJh
dGUgYW4gaW50ZXJpb3IgcmVnaW9uIGZyb20gYW4gZXh0ZXJpb3Igb25lLgotICovCi0KLWludCBf
X2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApOwotaW50IF9fZ2xf
bWVzaFRlc3NlbGxhdGVJbnRlcmlvciggR0xVbWVzaCAqbWVzaCApOwotdm9pZCBfX2dsX21lc2hE
aXNjYXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKTsKLWludCBfX2dsX21lc2hTZXRXaW5kaW5n
TnVtYmVyKCBHTFVtZXNoICptZXNoLCBpbnQgdmFsdWUsCi0JCQkgICAgICAgIEdMYm9vbGVhbiBr
ZWVwT25seUJvdW5kYXJ5ICk7Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87247</attachid>
            <date>2011-03-28 18:25:46 -0700</date>
            <delta_ts>2011-03-29 12:02:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-57288-20110328182544.patch</filename>
            <type>text/plain</type>
            <size>293063</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDMt
MjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxpYnRlc3MgZnJvbSBXZWJDb3JlL3Ro
aXJkcGFydHkgdG8gVGhpcmRQYXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTcyODgKKworICAgICAgICBXZSdyZSBwdXR0aW5nIHRoaXJkIHBhcnR5
IGNvZGUgaW4gU291cmNlL1RoaXJkUGFydHkgdGhlc2UgZGF5cy4KKworICAgICAgICAqIFNvdXJj
ZS9UaGlyZFBhcnR5L2dsdTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUuCisgICAgICAgICogU291cmNlL1RoaXJkUGFydHkvZ2x1L2dsdS5neXA6IEFkZGVkLgorCiAy
MDExLTAzLTI4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9SRUFETUUud2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2dsdS9SRUFETUUud2Via2l0CShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2dsdS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMyw4IEBAIFRoZSBm
b2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gb3JkZXIKICAgLSBUaGUgcmVtb3ZhbCBvZiBp
bmNsdXNpb24gb2YgR0wvZ2x1LmggYW5kIHJlcGxhY2VtZW50IHdpdGggYW4KICAgICBpbmNsdWRl
IG9mIGludGVybmFsX2dsdS5oLgogCi0gIC0gSW5jbHVkZXMgd2VyZSBtb2RpZmllZCB0byBiZSBz
Y29wZWQgd2l0aGluIHRoaXJkcGFydHkvZ2x1LyBhbmQKLSAgICB0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzLy4KKyAgLSBJbmNsdWRlcyB3ZXJlIG1vZGlmaWVkIHRvIGJlIHNjb3BlZCB3aXRoaW4gVGhp
cmRQYXJ0eS9nbHUvIGFuZAorICAgIFRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvLgogCiAgIC0gVGhl
IGVudHJ5IHBvaW50cyB0byB0aGUgdGVzc2VsbGF0b3Igd2VyZSBwcmVmaXhlZCB3aXRoIGludGVy
bmFsXwogICAgIHRvIGF2b2lkIHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55IGhvc3QgT1MgdmVy
c2lvbiBvZiBHTFUuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1Lmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1Lmd5cAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2dsdS9nbHUuZ3lwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
Cit7CisgICd0YXJnZXRzJzogW3sKKyAgICAndGFyZ2V0X25hbWUnOiAnbGlidGVzcycsCisgICAg
J3R5cGUnOiAnPChsaWJyYXJ5KScsCisgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICcuLi8u
LicsCisgICAgXSwKKyAgICAnc291cmNlcyc6IFsKKyAgICAgICdnbHVvcy5oJywKKyAgICAgICdp
bnRlcm5hbF9nbHUuaCcsCisgICAgICAnbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAnbGli
dGVzcy9kaWN0LmMnLAorICAgICAgJ2xpYnRlc3MvZGljdC5oJywKKyAgICAgICdsaWJ0ZXNzL2dl
b20uYycsCisgICAgICAnbGlidGVzcy9nZW9tLmgnLAorICAgICAgJ2xpYnRlc3MvbWVtYWxsb2Mu
YycsCisgICAgICAnbGlidGVzcy9tZW1hbGxvYy5oJywKKyAgICAgICdsaWJ0ZXNzL21lc2guYycs
CisgICAgICAnbGlidGVzcy9tZXNoLmgnLAorICAgICAgJ2xpYnRlc3Mvbm9ybWFsLmMnLAorICAg
ICAgJ2xpYnRlc3Mvbm9ybWFsLmgnLAorICAgICAgJ2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCcs
CisgICAgICAnbGlidGVzcy9wcmlvcml0eXEtc29ydC5oJywKKyAgICAgICdsaWJ0ZXNzL3ByaW9y
aXR5cS5jJywKKyAgICAgICdsaWJ0ZXNzL3ByaW9yaXR5cS5oJywKKyAgICAgICdsaWJ0ZXNzL3Jl
bmRlci5jJywKKyAgICAgICdsaWJ0ZXNzL3JlbmRlci5oJywKKyAgICAgICdsaWJ0ZXNzL3N3ZWVw
LmMnLAorICAgICAgJ2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAnbGlidGVzcy90ZXNzLmMnLAor
ICAgICAgJ2xpYnRlc3MvdGVzcy5oJywKKyAgICAgICdsaWJ0ZXNzL3Rlc3Ntb25vLmMnLAorICAg
ICAgJ2xpYnRlc3MvdGVzc21vbm8uaCcsCisgICAgXSwKKyAgfV0sCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2lmbmRlZiBJTlRFUk5BTF9HTFVfSF8KICNkZWZpbmUgSU5URVJOQUxfR0xVX0hfCiAKLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2dsdW9zLmgiCiAKIC8qIFByaW1pdGl2ZXMgKi8KICNkZWZpbmUgR0xfTElORV9MT09QICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvZGljdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL2RpY3QuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9kaWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAKICovCiAKICNpbmNs
dWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlz
dC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNs
dWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKIAogLyogcmVhbGx5IF9fZ2xfZGljdExpc3RO
ZXdEaWN0ICovCiBEaWN0ICpkaWN0TmV3RGljdCggdm9pZCAqZnJhbWUsCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOSBA
QAogKi8KIAogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ds
dW9zLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9n
bHUvZ2x1b3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKIAogaW50IF9fZ2xfdmVydExl
cSggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYgKQogewpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvZ2VvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL2dlb20uaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9nZW9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpZm5k
ZWYgX19nZW9tX2hfCiAjZGVmaW5lIF9fZ2VvbV9oXwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9tZXNoLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNo
LmgiCiAKICNpZmRlZiBOT19CUkFOQ0hfQ09ORElUSU9OUwogLyogTUlQUyBhcmNoaXRlY3R1cmUg
aGFzIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIGV2YWx1YXRlIGJvb2xlYW4KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwkocmV2aXNpb24gODIxNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5jCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBACiAqLwogCiAjaW5jbHVkZSAic3RyaW5nLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvbWVtYWxsb2MuaCIKIAogaW50IF9fZ2xfbWVtSW5pdCggc2l6ZV90IG1heEZhc3Qg
KQogewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYwkocmV2aXNpb24gODIx
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDkgKzQxLDkgQEAKIAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0
ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5j
bHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxT
RSAwCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oCShyZXZpc2lvbiA4MjE3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQAogI2lmbmRlZiBfX21lc2hfaF8KICNkZWZpbmUgX19tZXNoX2hf
CiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKKyNpbmNsdWRlICJU
aGlyZFBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgR0xVbWVzaCBH
TFVtZXNoOyAKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJKHJl
dmlzaW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMCBAQAogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+
CiAjaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0j
aW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUg
IlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1
L2xpYnRlc3Mvbm9ybWFsLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNz
LmgiCiAKICNkZWZpbmUgVFJVRSAxCiAjZGVmaW5lIEZBTFNFIDAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBACiAjaWZuZGVmIF9fbm9ybWFsX2hfCiAjZGVmaW5lIF9fbm9ybWFsX2hfCiAKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL3Rlc3MuaCIKIAogLyogX19nbF9wcm9qZWN0UG9seWdvbiggdGVzcyApIGRldGVy
bWluZXMgdGhlIHBvbHlnb24gbm9ybWFsCiAgKiBhbmQgcHJvamVjdCB2ZXJ0aWNlcyBvbnRvIHRo
ZSBwbGFuZSBvZiB0aGUgcG9seWdvbi4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL3ByaW9yaXR5cS1oZWFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1h
bGxvYy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAu
aCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisjaW5jbHVk
ZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oIgogCiAjZGVmaW5lIElO
SVRfU0laRQkzMgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEtc29ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3By
aW9yaXR5cS1zb3J0LmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QAogI2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCiAjZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRf
aF8KIAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCIK
KyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCiAKICN1
bmRlZiBQUWtleQogI3VuZGVmIFBRaGFuZGxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuYwkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE2
IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBMT05HX01B
WCAqLwogI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9z
LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1
ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9tZW1hbGxvYy5oIgogCiAvKiBJbmNsdWRlIGFsbCB0aGUgY29kZSBmb3IgdGhlIHJlZ3Vs
YXIgaGVhcC1iYXNlZCBxdWV1ZSBoZXJlLiAqLwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEtaGVhcC5jIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLWhlYXAuYyIKIAogLyogTm93IHJlZGVmaW5lIGFsbCB0aGUgZnVuY3Rpb24g
bmFtZXMgdG8gbWFwIHRvIHRoZWlyICJTb3J0IiB2ZXJzaW9ucy4gKi8KIAotI2luY2x1ZGUgInRo
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaCIKKyNpbmNsdWRlICJUaGlyZFBh
cnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgiCiAKIC8qIHJlYWxseSBfX2dsX3BxU29y
dE5ld1ByaW9yaXR5USAqLwogUHJpb3JpdHlRICpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQ
UWtleSBrZXkxLCBQUWtleSBrZXkyKSApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAog
I2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCiAjZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRfaF8K
IAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCiAKICN1bmRl
ZiBQUWtleQogI3VuZGVmIFBRaGFuZGxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVz
cy9yZW5kZXIuYwkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuYwkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDEwIEBACiAKICNpbmNs
dWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvZ2x1
b3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRl
ICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkv
Z2x1L2xpYnRlc3MvdGVzcy5oIgogCiAjZGVmaW5lIFRSVUUgMQogI2RlZmluZSBGQUxTRSAwCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkocmV2aXNpb24gODIxNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQAogI2lmbmRlZiBfX3JlbmRlcl9oXwogI2RlZmluZSBfX3JlbmRl
cl9oXwogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCisjaW5jbHVk
ZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCiAKIC8qIF9fZ2xfcmVuZGVyTWVzaCgg
dGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKICAq
IGZhbnMsIHN0cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZm
b3J0IGlzIG1hZGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwkocmV2
aXNpb24gODIxNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCSh3
b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTQgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4JCS8q
IExPTkdfTUFYICovCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgotI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCIKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9nbHVvcy5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oIgorI2lu
Y2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgorI2luY2x1ZGUgIlRoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL21lc2guaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5o
IgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCIKKyNpbmNsdWRlICJU
aGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKIAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUg
RkFMU0UgMApJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpZm5kZWYgX19zd2VlcF9oXwogI2RlZmluZSBf
X3N3ZWVwX2hfCiAKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNp
bmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKIAogLyogX19nbF9jb21wdXRl
SW50ZXJpb3IoIHRlc3MgKSBjb21wdXRlcyB0aGUgcGxhbmFyIGFycmFuZ2VtZW50IHNwZWNpZmll
ZAogICogYnkgdGhlIGdpdmVuIGNvbnRvdXJzLCBhbmQgZnVydGhlciBzdWJkaXZpZGVzIHRoaXMg
YXJyYW5nZW1lbnQKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmMJKHJldmlz
aW9uIDgyMTczKQorKysgU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNCArNDMsMTQgQEAKICNpbmNsdWRlIDxzZXRqbXAuaD4KICNpbmNs
dWRlIDxzdGRkZWYuaD4KIAotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5j
bHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIK
LSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzbW9uby5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2dsdW9zLmgiCisjaW5j
bHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIlRoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIlRoaXJkUGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIK
KyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgiCisjaW5jbHVkZSAiVGhp
cmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy90ZXNzbW9uby5oIgogCiAjZGVmaW5lIEdMVV9URVNTX0RFRkFVTFRfVE9MRVJBTkNFIDAu
MAogI2RlZmluZSBHTFVfVEVTU19NRVNICQkxMDAxMTIJLyogdm9pZCAoKikoR0xVbWVzaCAqbWVz
aCkJICAgICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDEwIEBACiAKICNpbmNsdWRlIDxzZXRqbXAuaD4KIAotI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oIgotI2luY2x1ZGUgInRoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvZGljdC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
bWVzaC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgiCisj
aW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1LmgiCisjaW5jbHVkZSAiVGhpcmRQ
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVz
cy9tZXNoLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaCIK
IAogLyogVGhlIGJlZ2luL2VuZCBjYWxscyBtdXN0IGJlIHByb3Blcmx5IG5lc3RlZC4gIFdlIGtl
ZXAgdHJhY2sgb2YKICAqIHRoZSBjdXJyZW50IHN0YXRlIHRvIGVuZm9yY2UgdGhlIG9yZGVyaW5n
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5jCShyZXZpc2lv
biA4MjE3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxMCBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKLSNpbmNsdWRlICJ0aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3Rlc3Ntb25vLmgiCisjaW5jbHVkZSAiVGhpcmRQYXJ0eS9nbHUvZ2x1b3MuaCIKKyNpbmNsdWRl
ICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRlICJUaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Nt
b25vLmgiCiAKICNkZWZpbmUgQWRkV2luZGluZyhlRHN0LGVTcmMpCShlRHN0LT53aW5kaW5nICs9
IGVTcmMtPndpbmRpbmcsIFwKIAkJCQkgZURzdC0+U3ltLT53aW5kaW5nICs9IGVTcmMtPlN5bS0+
d2luZGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTc2KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMjgg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxpYnRlc3MgZnJvbSBXZWJDb3JlL3RoaXJk
cGFydHkgdG8gVGhpcmRQYXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTcyODgKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgor
ICAgICAgICAgICAgLSBBZGQgbGlidGVzcyBhcyBhIGxlZ2l0IGRlcGVuZGVuY3kuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAgICAgLSBSZW1vdmUgbGlidGVzcyBmaWxlcyBmcm9t
IHRoZSBneXBpLgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1OiBSZW1vdmVkLgorCiAyMDExLTAz
LTI4ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDgyMTczKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01ODAxLDMx
ICs1ODAxLDYgQEAKICAgICAgICAgICAgICdzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgnLAogICAgICAgICAgICAgJ3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYuaCcsCiAgICAgICAgICAgICAnc3ZnL3Byb3BlcnRpZXMvU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9nbHVvcy5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUu
aCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCi0g
ICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMnLAotICAgICAgICAgICAg
J3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL2dlb20uYycsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9nZW9tLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2Mu
YycsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oJywKLSAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYycsCi0gICAgICAgICAgICAn
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvbm9ybWFsLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3Mvbm9ybWFsLmgnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3Jp
dHlxLWhlYXAuaCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEtc29ydC5oJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5jJywKLSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oJywK
LSAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jJywKLSAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oJywKLSAgICAgICAgICAgICd0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3Mvc3dlZXAuaCcsCi0gICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90
ZXNzLmMnLAotICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oJywKLSAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAotICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaCcsCiAgICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwJywKICAgICAgICAgICAgICd3ZWJhdWRp
by9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oJywKICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRp
b0J1ZmZlci5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsNyBAQAogCiAgICAgJ3dlYmNvcmVfaW5j
bHVkZV9kaXJzJzogWwogICAgICAgJy4uLycsCisgICAgICAnLi4vLi4nLAogICAgICAgJy4uL2Fj
Y2Vzc2liaWxpdHknLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAg
Jy4uL2JpbmRpbmdzJywKQEAgLTIwMSw3ICsyMDIsNyBAQAogICAgICAgJy4uL3N2Zy9ncmFwaGlj
cycsCiAgICAgICAnLi4vc3ZnL2dyYXBoaWNzL2ZpbHRlcnMnLAogICAgICAgJy4uL3N2Zy9wcm9w
ZXJ0aWVzJywKLSAgICAgICcuLi90aGlyZHBhcnR5L2dsdScsCisgICAgICAnLi4vLi4vVGhpcmRQ
YXJ0eS9nbHUnLAogICAgICAgJy4uL3dlYmF1ZGlvJywKICAgICAgICcuLi93ZWJzb2NrZXRzJywK
ICAgICAgICcuLi93b3JrZXJzJywKQEAgLTk2Miw2ICs5NjMsNyBAQAogICAgICAgJ3R5cGUnOiAn
bm9uZScsCiAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAnd2ViY29yZV9iaW5kaW5n
cycsCisgICAgICAgICcuLi8uLi9UaGlyZFBhcnR5L2dsdS9nbHUuZ3lwOmxpYnRlc3MnLAogICAg
ICAgICAnLi4vLi4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwL0phdmFTY3JpcHRD
b3JlLmd5cDp5YXJyJywKICAgICAgICAgJy4uLy4uL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXA6d3RmJywKICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLApAQCAtMTI0Nyw4
ICsxMjQ5LDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9Mb2Nh
bGl6ZWROdW1iZXJOb25lXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmVcXC5jcHAkJ10sCi0KLSAgICAgICAgWydpbmNs
dWRlJywgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvJ10sCiAgICAgICBdLAogICAgICAgJ2NvbmRp
dGlvbnMnOiBbCiAgICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIicsIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0CShyZXZpc2lvbiA4
MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMxICswLDAgQEAKLVNHSSBGUkVFIFNPRlRXQVJFIExJQ0VOU0UgQiAo
VmVyc2lvbiAyLjAsIFNlcHQuIDE4LCAyMDA4KSAKLQotQ29weXJpZ2h0IChDKSBbZGF0ZXMgb2Yg
Zmlyc3QgcHVibGljYXRpb25dIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsCi1SaWdodHMgUmVz
ZXJ2ZWQuCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j
aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0
aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi13aXRob3V0IGxpbWl0
YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi1k
aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl
LCBhbmQgdG8KLXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hl
ZCB0byBkbyBzbywgc3ViamVjdCB0bwotdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIG9mIGZpcnN0IHB1Ymxp
Y2F0aW9uCi1hbmQgZWl0aGVyIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSByZWZlcmVuY2Ug
dG8gSFlQRVJMSU5LCi0iaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyJodHRwOi8v
b3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvCi1zaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotU29mdHdhcmUuCi0KLVRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAot
RVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORAotTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09OIEdSQVBI
SUNTLCBJTkMuIEJFIExJQUJMRQotRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GCi1DT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLVdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi1FeGNl
cHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBo
aWNzLAotSW5jLiBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2Ug
dG8gcHJvbW90ZSB0aGUKLXNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3
YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotYXV0aG9yaXphdGlvbiBmcm9tIFNpbGljb24gR3Jh
cGhpY3MsIEluYy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L1JFQURNRS53
ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1F
LndlYmtpdAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2ds
dS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLVRoaXMgaXMg
YSBuZWFybHkgdmVyYmF0aW0gY29weSBvZiB0aGUgR0xVIHRlc3NlbGxhdG9yIHNvdXJjZSBjb2Rl
IGZyb20KLVNHSSdzIE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24gYXQKLWh0dHA6Ly9vc3Mu
c2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlLyAuIFBlcgotaHR0cDovL29zcy5zZ2kuY29tL3By
b2plY3RzL0ZyZWVCLyAsIHRoZSBjb2RlIGlzIGNvdmVyZWQgdW5kZXIgdGhlIFNHSQotRnJlZSBT
b2Z0d2FyZSBMaWNlbnNlIEIsIHZlcnNpb24gMi4wLCBhIGNvcHkgb2Ygd2hpY2ggaXMgaW4KLUxJ
Q0VOU0UudHh0IGluIHRoaXMgZGlyZWN0b3J5LgotCi1UaGUgZm9sbG93aW5nIGNoYW5nZXMgd2Vy
ZSBtYWRlIGluIG9yZGVyIHRvIGluY29ycG9yYXRlIHRoaXMgY29kZToKLQotICAtIFRoZSBhZGRp
dGlvbiBvZiBhIHNpbXBsaWZpZWQgZ2x1b3MuaCB0byBlbGltaW5hdGUgb3BlcmF0aW5nIHN5c3Rl
bQotICAgIGRlcGVuZGVuY2llcy4KLQotICAtIFRoZSByZW1vdmFsIG9mIGluY2x1c2lvbiBvZiBH
TC9nbHUuaCBhbmQgcmVwbGFjZW1lbnQgd2l0aCBhbgotICAgIGluY2x1ZGUgb2YgaW50ZXJuYWxf
Z2x1LmguCi0KLSAgLSBJbmNsdWRlcyB3ZXJlIG1vZGlmaWVkIHRvIGJlIHNjb3BlZCB3aXRoaW4g
dGhpcmRwYXJ0eS9nbHUvIGFuZAotICAgIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvLgotCi0gIC0g
VGhlIGVudHJ5IHBvaW50cyB0byB0aGUgdGVzc2VsbGF0b3Igd2VyZSBwcmVmaXhlZCB3aXRoIGlu
dGVybmFsXwotICAgIHRvIGF2b2lkIHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55IGhvc3QgT1Mg
dmVyc2lvbiBvZiBHTFUuCi0KLSAgLSBJbiB0ZXNzLmMsIHRoZSBvYnNvbGV0ZSBlbnRyeSBwb2lu
dHMgZ2x1QmVnaW5Qb2x5Z29uLAotICAgIGdsdU5leHRDb250b3VyIGFuZCBnbHVFbmRQb2x5Z29u
IGluIHRlc3MuYyB3ZXJlICNpZiAwJ2Qgb3V0LgotICAgIERlZmF1bHQgYnJhbmNoZXMgd2VyZSBh
ZGRlZCB0byB0aGUgc3dpdGNoIHN0YXRlbWVudHMgaW4gR290b1N0YXRlLgotCi0gIC0gSW4gbWVt
YWxsb2MuaCwgdGhlIGluY2x1ZGUgb2YgbWFsbG9jLmggd2FzIGNoYW5nZWQgdG8gYW4gaW5jbHVk
ZQotICAgIG9mIHN0ZGxpYi5oLgotCi0gIC0gSW4gbm9ybWFsLmMsIGFuIHVudXNlZCB2YXJpYWJs
ZSAidyIgd2FzIHJlbW92ZWQgZnJvbQotICAgIF9fZ2xfcHJvamVjdFBvbHlnb24uICNpZiBndWFy
ZHMgd2VyZSBwbGFjZWQgYXJvdW5kIHRoZSBkZWZpbml0aW9uCi0gICAgb2YgdGhlIHVudXNlZCBO
b3JtYWxpemUgZnVuY3Rpb24uCi0KLSAgLSBJbiBwcmlvcml0eXEtaGVhcC5jLCBhbiAjaW5jbHVk
ZSBvZiA8bGltaXRzLmg+IHdhcyBhZGRlZC4KLQotICAtIEluIHN3ZWVwLmMsIElzV2luZGluZ0lu
c2lkZSgpIHdhcyBnaXZlbiBhIHJldHVybiB2YWx1ZSB0byBzaWxlbmNlIGEKLSAgICB3YXJuaW5n
LWFzLWVycm9yIGluIHJlbGVhc2UgYnVpbGRzLgotCi0gIC0gSW4gc3dlZXAuYywgRG9uZUVkZ2VE
aWN0KCkncyBmaXhlZEVkZ2VzIHdhcyB3cmFwcGVkIGluICNpbmRlZiBOREVCVUcsIHRvCi0gICAg
c2lsZW5jZSBhIHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBidWlsZHMuCi0KLSAgLSBJbiBw
cmlvcml0eXEuYywgcmVuZGVyLmMsIGFuZCBvdGhlcnM6ICB0aGUgY29uc3RydWN0ICJpZigxKS4u
LmVsc2UiIHdhcwotICByZXBsYWNlZCB3aXRoICJkb3suLi59d2hpbGUoMSkiIHRvIHNpbGVuY2Ug
YSB3YXJuaW5nLWFzLWVycm9yIGluIE1hYyBidWlsZHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9nbHVvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2dsdW9zLmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhp
cmRwYXJ0eS9nbHUvZ2x1b3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgR0xVT1NfSF8KLSNkZWZpbmUgR0xVT1NfSF8KLQotLy8gVGhpcyBoZWFkZXIgcHJvdmlkZXMg
dGhlIG1pbmltYWwgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIGNvbXBpbGUgdGhlCi0vLyBHTFUgdGVz
c2VsbGF0b3Igc291cmNlcy4KLSNkZWZpbmUgR0xBUElFTlRSWQotCi10eXBlZGVmIHVuc2lnbmVk
IGNoYXIgR0xib29sZWFuOwotdHlwZWRlZiBkb3VibGUgR0xkb3VibGU7Ci10eXBlZGVmIHVuc2ln
bmVkIGludCBHTGVudW07Ci10eXBlZGVmIGZsb2F0IEdMZmxvYXQ7Ci10eXBlZGVmIHZvaWQgR0x2
b2lkOwotCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0KLSNlbmRpZiAgLy8gR0xVT1NfSF8KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCShyZXZp
c2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVybmFsX2ds
dS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MTAsIEdvb2dsZSBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgaGVhZGVyIGlzIGEg
c2tlbGV0b24gc3Vic3RpdHV0ZSBmb3IgR0wvZ2x1Lmggd2hpY2ggY29udGFpbnMKLS8vIG9ubHkg
dGhlIGRlZmluaXRpb25zLCBjb25zdGFudHMgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBuZWNl
c3NhcnkKLS8vIHRvIGNvbXBpbGUgdGhlIEdMVSB0ZXNzZWxsYXRvci4KLQotI2lmbmRlZiBJTlRF
Uk5BTF9HTFVfSF8KLSNkZWZpbmUgSU5URVJOQUxfR0xVX0hfCi0KLSNpbmNsdWRlICJ0aGlyZHBh
cnR5L2dsdS9nbHVvcy5oIgotCi0vKiBQcmltaXRpdmVzICovCi0jZGVmaW5lIEdMX0xJTkVfTE9P
UCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgR0xfVFJJQU5HTEVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHTF9UUklBTkdMRV9T
VFJJUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIEdMX1RSSUFOR0xFX0ZB
TiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYKLQotLyogRXJyb3JDb2RlICovCi0jZGVm
aW5lIEdMVV9JTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgICAxMDA5MDAKLSNkZWZpbmUg
R0xVX0lOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICAgIDEwMDkwMQotI2RlZmluZSBHTFVf
T1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgICAgMTAwOTAyCi0KLS8qIFRlc3NDYWxsYmFj
ayAqLwotI2RlZmluZSBHTFVfVEVTU19CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAw
Ci0jZGVmaW5lIEdMVV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDAKLSNk
ZWZpbmUgR0xVX1RFU1NfVkVSVEVYICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMQotI2RlZmlu
ZSBHTFVfVkVSVEVYICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAxCi0jZGVmaW5lIEdM
VV9URVNTX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDIKLSNkZWZpbmUgR0xVX0VO
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMgotI2RlZmluZSBHTFVfVEVTU19F
UlJPUiAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAzCi0jZGVmaW5lIEdMVV9URVNTX0VER0Vf
RkxBRyAgICAgICAgICAgICAgICAgICAxMDAxMDQKLSNkZWZpbmUgR0xVX0VER0VfRkxBRyAgICAg
ICAgICAgICAgICAgICAgICAgIDEwMDEwNAotI2RlZmluZSBHTFVfVEVTU19DT01CSU5FICAgICAg
ICAgICAgICAgICAgICAgMTAwMTA1Ci0jZGVmaW5lIEdMVV9URVNTX0JFR0lOX0RBVEEgICAgICAg
ICAgICAgICAgICAxMDAxMDYKLSNkZWZpbmUgR0xVX1RFU1NfVkVSVEVYX0RBVEEgICAgICAgICAg
ICAgICAgIDEwMDEwNwotI2RlZmluZSBHTFVfVEVTU19FTkRfREFUQSAgICAgICAgICAgICAgICAg
ICAgMTAwMTA4Ci0jZGVmaW5lIEdMVV9URVNTX0VSUk9SX0RBVEEgICAgICAgICAgICAgICAgICAx
MDAxMDkKLSNkZWZpbmUgR0xVX1RFU1NfRURHRV9GTEFHX0RBVEEgICAgICAgICAgICAgIDEwMDEx
MAotI2RlZmluZSBHTFVfVEVTU19DT01CSU5FX0RBVEEgICAgICAgICAgICAgICAgMTAwMTExCi0K
LS8qIFRlc3NDb250b3VyICovCi0jZGVmaW5lIEdMVV9DVyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxMDAxMjAKLSNkZWZpbmUgR0xVX0NDVyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwMDEyMQotI2RlZmluZSBHTFVfSU5URVJJT1IgICAgICAgICAgICAgICAgICAgICAgICAg
MTAwMTIyCi0jZGVmaW5lIEdMVV9FWFRFUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAx
MjMKLSNkZWZpbmUgR0xVX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEyNAot
Ci0vKiBUZXNzUHJvcGVydHkgKi8KLSNkZWZpbmUgR0xVX1RFU1NfV0lORElOR19SVUxFICAgICAg
ICAgICAgICAgIDEwMDE0MAotI2RlZmluZSBHTFVfVEVTU19CT1VOREFSWV9PTkxZICAgICAgICAg
ICAgICAgMTAwMTQxCi0jZGVmaW5lIEdMVV9URVNTX1RPTEVSQU5DRSAgICAgICAgICAgICAgICAg
ICAxMDAxNDIKLQotLyogVGVzc0Vycm9yICovCi0jZGVmaW5lIEdMVV9URVNTX0VSUk9SMSAgICAg
ICAgICAgICAgICAgICAgICAxMDAxNTEKLSNkZWZpbmUgR0xVX1RFU1NfRVJST1IyICAgICAgICAg
ICAgICAgICAgICAgIDEwMDE1MgotI2RlZmluZSBHTFVfVEVTU19FUlJPUjMgICAgICAgICAgICAg
ICAgICAgICAgMTAwMTUzCi0jZGVmaW5lIEdMVV9URVNTX0VSUk9SNCAgICAgICAgICAgICAgICAg
ICAgICAxMDAxNTQKLSNkZWZpbmUgR0xVX1RFU1NfRVJST1I1ICAgICAgICAgICAgICAgICAgICAg
IDEwMDE1NQotI2RlZmluZSBHTFVfVEVTU19FUlJPUjYgICAgICAgICAgICAgICAgICAgICAgMTAw
MTU2Ci0jZGVmaW5lIEdMVV9URVNTX0VSUk9SNyAgICAgICAgICAgICAgICAgICAgICAxMDAxNTcK
LSNkZWZpbmUgR0xVX1RFU1NfRVJST1I4ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1OAotI2Rl
ZmluZSBHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT04gICAgICAgMTAwMTUxCi0jZGVmaW5l
IEdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiAgICAgICAxMDAxNTIKLSNkZWZpbmUgR0xV
X1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiAgICAgICAgIDEwMDE1MwotI2RlZmluZSBHTFVfVEVT
U19NSVNTSU5HX0VORF9DT05UT1VSICAgICAgICAgMTAwMTU0Ci0jZGVmaW5lIEdMVV9URVNTX0NP
T1JEX1RPT19MQVJHRSAgICAgICAgICAgICAxMDAxNTUKLSNkZWZpbmUgR0xVX1RFU1NfTkVFRF9D
T01CSU5FX0NBTExCQUNLICAgICAgIDEwMDE1NgotCi0vKiBUZXNzV2luZGluZyAqLwotI2RlZmlu
ZSBHTFVfVEVTU19XSU5ESU5HX09ERCAgICAgICAgICAgICAgICAgMTAwMTMwCi0jZGVmaW5lIEdM
VV9URVNTX1dJTkRJTkdfTk9OWkVSTyAgICAgICAgICAgICAxMDAxMzEKLSNkZWZpbmUgR0xVX1RF
U1NfV0lORElOR19QT1NJVElWRSAgICAgICAgICAgIDEwMDEzMgotI2RlZmluZSBHTFVfVEVTU19X
SU5ESU5HX05FR0FUSVZFICAgICAgICAgICAgMTAwMTMzCi0jZGVmaW5lIEdMVV9URVNTX1dJTkRJ
TkdfQUJTX0dFUV9UV08gICAgICAgICAxMDAxMzQKLQotI2RlZmluZSBHTFVfVEVTU19NQVhfQ09P
UkQgMS4wZTE1MAotCi10eXBlZGVmIHN0cnVjdCBHTFV0ZXNzZWxhdG9yIEdMVXRlc3NlbGF0b3I7
Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotZXh0ZXJuIEdM
VXRlc3NlbGF0b3IgKiBHTEFQSUVOVFJZIGludGVybmFsX2dsdU5ld1Rlc3Modm9pZCk7Ci1leHRl
cm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdURlbGV0ZVRlc3MoR0xVdGVzc2VsYXRvciAq
dGVzcyk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NQcm9wZXJ0eShH
TFV0ZXNzZWxhdG9yICp0ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdoaWNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xkb3VibGUgdmFsdWUpOwotZXh0ZXJuIHZvaWQgR0xBUElFTlRS
WSBpbnRlcm5hbF9nbHVHZXRUZXNzUHJvcGVydHkoR0xVdGVzc2VsYXRvciAqdGVzcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3aGlj
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZG91YmxlICp2YWx1ZSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NO
b3JtYWwoR0xVdGVzc2VsYXRvciAqdGVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGRvdWJsZSB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgeik7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZ
IGludGVybmFsX2dsdVRlc3NDYWxsYmFjayhHTFV0ZXNzZWxhdG9yICp0ZXNzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdoaWNoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoR0xBUElF
TlRSWSAqZm4pKCkpOwotZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzVmVy
dGV4KEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xkb3VibGUgY29vcmRzWzNdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgR0xBUElF
TlRSWSBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
ZGF0YSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NCZWdpbkNvbnRv
dXIoR0xVdGVzc2VsYXRvciAqdGVzcyk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFs
X2dsdVRlc3NFbmRDb250b3VyKEdMVXRlc3NlbGF0b3IgKnRlc3MpOwotZXh0ZXJuIHZvaWQgR0xB
UElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzRW5kUG9seWdvbihHTFV0ZXNzZWxhdG9yICp0ZXNzKTsK
LQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmICAvLyBJTlRFUk5BTF9H
TFVfSF8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvR05VbWFr
ZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9HTlVtYWtlZmlsZQkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCww
IEBACi0jIWdtYWtlCi0jCi0jIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBl
eHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotIyBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0jIFNvZnR3YXJl
IExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2Yg
dGhpcwotIyBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotIyB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0jIG9mIHRoZSBMaWNlbnNl
IGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0j
IEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBh
dDoKLSMKLSMgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0jCi0jIE5vdGUgdGhh
dCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbgotIyAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdB
UlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSMgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VU
IExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0jIENPTkRJVElPTlMgT0Yg
TUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotIyBQ
QVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotIwotIyBPcmlnaW5hbCBD
b2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwK
LSMgVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5
IFNpbGljb24gR3JhcGhpY3MsCi0jIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0
IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotIyBDb3B5cmlnaHQgaW4gYW55
IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSMgZWxz
ZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgQWRkaXRpb25hbCBOb3Rp
Y2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSMg
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQotIyBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZl
cnNpb24gMS4yLjEpLCByZWxlYXNlZAotIyBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSMgMS4zKSwgcmVsZWFzZWQg
Tm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0jIFdp
bmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4g
VGhpcyBzb2Z0d2FyZQotIyB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0jIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMg
bm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotIyBjb21wbGlhbnQgd2l0
aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSMKLSMgJERhdGUk
ICRSZXZpc2lvbiQKLSMgJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
R05VbWFrZWZpbGUjOSAkCi0KLU9CSkVDVF9TVFlMRSA9IE4zMgotCi1pbmNsdWRlICQoUk9PVCkv
dXNyL2luY2x1ZGUvbWFrZS9jb21tb25kZWZzCi0KLVRBUkdFVCA9IGxpYnRlc3MuYQotCi1UQVJH
RVRTID0gJChUQVJHRVQpCi0KLUxDSU5DUyA9IC1JLi4vaW5jbHVkZQotCi0jIENvbXBpbGF0aW9u
IGZsYWdzOgotIwotIyAtRE5ERUJVRyBpcyBmb3IgdGhlIHByb2R1Y3Rpb24gY29kZTsgaXQgcmVt
b3ZlcyBhbGwgYXNzZXJ0aW9uIGNoZWNrcwotIyAgICAobm90ZSB0aGF0IDxhc3NlcnQuaD4gbG9v
a3MgYXQgdGhpcyBzeW1ib2wpLgotIwotIyAtRE5PX01BTExPUFQgdXNlcyByZWd1bGFyIG1hbGxv
YyBpbnN0ZWFkIG9mIHRoZSBtYWxsb3B0KCkgdmVyc2lvbi4KLSMgICAqKioqKiBVbmxlc3MgeW91
IHVzZSB0aGlzIGZsYWcsIHlvdSBtdXN0IHVzZSAiLWxtYWxsb2MiIHRvIGxpbmsKLSMgICAqKioq
KiB5b3VyIGFwcGxpY2F0aW9uIQotIwotIyAtRE1FTU9SWV9ERUJVRyB0dXJucyBvbiB0aGUgTV9E
RUJVRyBvcHRpb24gb2YgbWFsbG9wdDsgdGhpcyBjYW4KLSMgICAgaW5jcmVhc2UgdGhlIHJ1bm5p
bmcgdGltZSBhIExPVC4KLSMKLSMgLURHTFVfVEVTU19BUElfRkxPQVQgY29tcGlsZXMgYSBzaW5n
bGUtcHJlY2lzaW9uIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCi0jCi0jIC1mbG9hdCBwcmV2ZW50
cyBhdXRvbWF0aWMgcHJvbW90aW9uIHRvIGRvdWJsZSBwcmVjaXNpb247IHRoaXMgd2lsbCBwcm9k
dWNlCi0jICAgIGZhc3RlciBjb2RlIHdoZW4gY29tcGlsZWQgd2l0aCAtREdMVV9URVNTX0FQSV9G
TE9BVC4KLSMKLSMgLUROT19CUkFOQ0hfQ09ORElUSU9OUyB1c2VzICYgYW5kIHwgaW5zdGVhZCBv
ZiAmJiBhbmQgfHwgb24gYSBjb3VwbGUKLSMgICAgb2YgaGVhdmlseS11c2VkIHRlc3RzIChWZXJ0
RXEgYW5kIFZlcnRMZXEpOyBzb21lIGNvbXBpbGVycyBjYW4gZ2VuZXJhdGUKLSMgICAgYmV0dGVy
IGNvZGUgd2l0aCB0aGVzZSAodXNlIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIGF2b2lkIGJyYW5j
aGluZykuCi0jCi0jIC1ERk9SX1RSSVRFX1RFU1RfUFJPR1JBTSBpcyAqb25seSogZm9yIHVzZSB3
aXRoIHRoZSB0ZXN0IHByb2dyYW0gY2FsbGVkCi0jICAgICJ0cml0ZSIuICBJdCB1c2VzIHNvbWUg
dmFyaWFibGVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IHRoZSB0ZXN0IHByb2dyYW0sCi0jICAgIHNv
IHlvdSB3b24ndCBiZSBhYmxlIHRvIGxpbmsgaXQgd2l0aCBhbnl0aGluZyBlbHNlLgotCi1IRklM
RVMgPSBcCi0JZGljdC5oIFwKLQlkaWN0LWxpc3QuaCBcCi0JZ2VvbS5oIFwKLQltZW1hbGxvYy5o
IFwKLQltZXNoLmggXAotCW5vcm1hbC5oIFwKLQlwcmlvcml0eXEtaGVhcC5oIFwKLQlwcmlvcml0
eXEtaGVhcC5jIFwKLQlwcmlvcml0eXEtc29ydC5oIFwKLQlwcmlvcml0eXEuaCBcCi0JcmVuZGVy
LmggXAotCXN3ZWVwLmggXAotCXRlc3MuaCBcCi0JdGVzc21vbm8uaCBcCi0JJChOVUxMKQotCi1D
RklMRVMgPSBcCi0JZGljdC5jIFwKLQlnZW9tLmMgXAotCW1lbWFsbG9jLmMgXAotCW1lc2guYyBc
Ci0Jbm9ybWFsLmMgXAotCXByaW9yaXR5cS5jIFwKLQlyZW5kZXIuYyBcCi0Jc3dlZXAuYyBcCi0J
dGVzcy5jIFwKLQl0ZXNzbW9uby5jIFwKLQkkKE5VTEwpCi0KLWRlZmF1bHQgbGlicyBsaWJzX2lu
c3RhbGwgaW5zdGFsbDogJChUQVJHRVQpCi0KLWhlYWRlcnMgaGVhZGVyc19pbnN0YWxsIGFwcHM6
Ci0KLSQoVEFSR0VUKTogJChPQkpFQ1RTKQotCSQoQVIpIGNybCAkQCAkKE9CSkVDVFMpOwotCi1p
bmNsdWRlICQoQ09NTU9OUlVMRVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL0ltYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAt
MSw2MSArMCwwIEBACi1YQ09NTSBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUg
ZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLVhDT01NIG1hZGUgc3ViamVjdCB0byBh
biBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLVhDT01N
IFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29u
dGVudHMgb2YgdGhpcwotWENPTU0gZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLVhDT01NIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkK
LVhDT01NIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExl
Z2FsIFNlcnZpY2VzLCAxNjAwCi1YQ09NTSBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4g
VmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci1YQ09NTSAKLVhDT01NIGh0dHA6Ly9vc3Muc2dp
LmNvbS9wcm9qZWN0cy9GcmVlQgotWENPTU0gCi1YQ09NTSBOb3RlIHRoYXQsIGFzIHByb3ZpZGVk
IGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLVhDT01N
ICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBB
TkQgQ09ORElUSU9OUwotWENPTU0gRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU
QVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi1YQ09NTSBDT05ESVRJT05TIE9GIE1F
UkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLVhDT01N
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi1YQ09NTSAKLVhDT01N
IE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxl
bWVudGF0aW9uLAotWENPTU0gVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAw
MCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi1YQ09NTSBJbmMuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4K
LVhDT01NIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVz
IGlzIGFzIGluZGljYXRlZAotWENPTU0gZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLVhDT01NIAotWENPTU0gQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFw
cGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLVhDT01NIGVzdGFibGlzaGVkIGJ5IFNH
SSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLVhDT01NIE9w
ZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSks
IHJlbGVhc2VkCi1YQ09NTSBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLVhDT01NIDEuMyksIHJlbGVhc2VkIE5vdmVt
YmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotWENPTU0gV2lu
ZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBU
aGlzIHNvZnR3YXJlCi1YQ09NTSB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi1YQ09NTSBwdWJsaXNoZWQgYnkgU0dJLCBi
dXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLVhDT01NIGNv
bXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgot
WENPTU0KLQotI2luY2x1ZGUgPExpYnJhcnkudG1wbD4KLQotT0JKUyA9IFwKLQlkaWN0Lm8gXAot
CWdlb20ubyBcCi0JbWVtYWxsb2MubyBcCi0JbWVzaC5vIFwKLQlub3JtYWwubyBcCi0JcHJpb3Jp
dHlxLm8gXAotCXJlbmRlci5vIFwKLQlzd2VlcC5vIFwKLQl0ZXNzLm8gXAotCXRlc3Ntb25vLm8K
LQotSU5DTFVERVMgPSBcCi0JLUkuLi9pbmNsdWRlIFwKLQktSSQoVE9QKS9pbmNsdWRlIFwKLQkt
SSQoVE9QKS9pbmNsdWRlL0dMCi0KLURFRklORVMgPSBcCi0JLUROREVCVUcKLQotTm9ybWFsTGli
cmFyeU9iamVjdFJ1bGUoKQotCi1Ob3JtYWxMaWJyYXJ5VGFyZ2V0KHRlc3MsICQoT0JKUykpCi0K
LURlcGVuZFRhcmdldCgpCi1DbGVhblRhcmdldCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQkod29ya2luZyBjb3B5KQpAQCAt
MSw0NDcgKzAsMCBAQAotLyoKLSoqICRIZWFkZXI6IC9jdnMvcHJvamVjdHMvb2dsLXNhbXBsZS9t
YWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvUkVBRE1FLHYgMS4xIDIwMDAvMDQvMjYgMDU6NTM6NTkg
bGpwIEV4cCAkCi0qLwotCi1HZW5lcmFsIFBvbHlnb24gVGVzc2VsYXRpb24KLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gIFRoaXMgbm90ZSBkZXNjcmliZXMgYSB0ZXNzZWxhdG9yIGZv
ciBwb2x5Z29ucyBjb25zaXN0aW5nIG9mIG9uZSBvcgotICBtb3JlIGNsb3NlZCBjb250b3Vycy4g
IEl0IGlzIGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudAotICBPcGVuR0wgVXRp
bGl0aWVzIHRlc3NlbGF0b3IsIGFuZCBpcyBpbnRlbmRlZCB0byByZXBsYWNlIGl0LiAgSGVyZSBp
cwotICBhIHN1bW1hcnkgb2YgdGhlIG1ham9yIGRpZmZlcmVuY2VzOgotCi0gICAtIGlucHV0IGNv
bnRvdXJzIGNhbiBiZSBpbnRlcnNlY3RpbmcsIHNlbGYtaW50ZXJzZWN0aW5nLCBvciBkZWdlbmVy
YXRlLgotICAKLSAgIC0gc3VwcG9ydHMgYSBjaG9pY2Ugb2Ygc2V2ZXJhbCB3aW5kaW5nIHJ1bGVz
IGZvciBkZXRlcm1pbmluZyB3aGljaCBwYXJ0cwotICAgICBvZiB0aGUgcG9seWdvbiBhcmUgb24g
dGhlICJpbnRlcmlvciIuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRvCi0gICAgIENTRyBv
cGVyYXRpb25zIG9uIHBvbHlnb25zLgotICAKLSAgIC0gYm91bmRhcnkgZXh0cmFjdGlvbjogaW5z
dGVhZCBvZiB0ZXNzZWxhdGluZyB0aGUgcG9seWdvbiwgcmV0dXJucyBhCi0gICAgIHNldCBvZiBj
bG9zZWQgY29udG91cnMgd2hpY2ggc2VwYXJhdGUgdGhlIGludGVyaW9yIGZyb20gdGhlIGV4dGVy
aW9yLgotICAKLSAgIC0gcmV0dXJucyB0aGUgb3V0cHV0IGFzIGEgc21hbGwgbnVtYmVyIG9mIHRy
aWFuZ2xlIGZhbnMgYW5kIHN0cmlwcywKLSAgICAgcmF0aGVyIHRoYW4gYSBsaXN0IG9mIGluZGVw
ZW5kZW50IHRyaWFuZ2xlcyAod2hlbiBwb3NzaWJsZSkuCi0gIAotICAgLSBvdXRwdXQgaXMgYXZh
aWxhYmxlIGFzIGFuIGV4cGxpY2l0IG1lc2ggKGEgcXVhZC1lZGdlIHN0cnVjdHVyZSksCi0gICAg
IGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgY2FsbGJhY2sgaW50ZXJmYWNlLgotICAKLSAgIC0g
dGhlIGFsZ29yaXRobSB1c2VkIGlzIGV4dHJlbWVseSByb2J1c3QuCi0KLQotVGhlIGludGVyZmFj
ZQotLS0tLS0tLS0tLS0tLQotCi0gIFRoZSB0ZXNzZWxhdG9yIHN0YXRlIGlzIG1haW50YWluZWQg
aW4gYSAidGVzc2VsYXRvciBvYmplY3QiLgotICBUaGVzZSBhcmUgYWxsb2NhdGVkIGFuZCBkZXN0
cm95ZWQgdXNpbmcKLQotICAgICBHTFV0ZXNzZWxhdG9yICpnbHVOZXdUZXNzKCB2b2lkICk7Ci0g
ICAgIHZvaWQgZ2x1RGVsZXRlVGVzcyggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0gIFNldmVy
YWwgdGVzc2VsYXRvciBvYmplY3RzIG1heSBiZSB1c2VkIHNpbXVsdGFuZW91c2x5LgotCi0gIElu
cHV0cwotICAtLS0tLS0KLSAgCi0gIFRoZSBpbnB1dCBjb250b3VycyBhcmUgc3BlY2lmaWVkIHdp
dGggdGhlIGZvbGxvd2luZyByb3V0aW5lczoKLQotICAgICB2b2lkIGdsdVRlc3NCZWdpblBvbHln
b24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICAgdm9pZCBnbHVUZXNzQmVnaW5Db250b3Vy
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0gICAgIHZvaWQgZ2x1VGVzc1ZlcnRleCggR0xVdGVz
c2VsYXRvciAqdGVzcywgR0xVY29vcmQgY29vcmRzWzNdLCB2b2lkICpkYXRhICk7Ci0gICAgIHZv
aWQgZ2x1VGVzc0VuZENvbnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICAgdm9pZCBn
bHVUZXNzRW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0gIFdpdGhpbiBlYWNo
IEJlZ2luUG9seWdvbi9FbmRQb2x5Z29uIHBhaXIsIHRoZXJlIGNhbiBiZSB6ZXJvIG9yIG1vcmUK
LSAgY2FsbHMgdG8gQmVnaW5Db250b3VyL0VuZENvbnRvdXIuICBXaXRoaW4gZWFjaCBjb250b3Vy
LCB0aGVyZSBhcmUgemVybwotICBvciBtb3JlIGNhbGxzIHRvIGdsdVRlc3NWZXJ0ZXgoKS4gIFRo
ZSB2ZXJ0aWNlcyBzcGVjaWZ5IGEgY2xvc2VkCi0gIGNvbnRvdXIgKHRoZSBsYXN0IHZlcnRleCBv
ZiBlYWNoIGNvbnRvdXIgaXMgYXV0b21hdGljYWxseSBsaW5rZWQgdG8KLSAgdGhlIGZpcnN0KS4K
LQotICAiY29vcmRzIiBnaXZlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4IGluIDMtc3Bh
Y2UuICBGb3IgdXNlZnVsCi0gIHJlc3VsdHMsIGFsbCB2ZXJ0aWNlcyBzaG91bGQgbGllIGluIHNv
bWUgcGxhbmUsIHNpbmNlIHRoZSB2ZXJ0aWNlcwotICBhcmUgcHJvamVjdGVkIG9udG8gYSBwbGFu
ZSBiZWZvcmUgdGVzc2VsYXRpb24uICAiZGF0YSIgaXMgYSBwb2ludGVyCi0gIHRvIGEgdXNlci1k
ZWZpbmVkIHZlcnRleCBzdHJ1Y3R1cmUsIHdoaWNoIHR5cGljYWxseSBjb250YWlucyBvdGhlcgot
ICBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvbG9yLCB0ZXh0dXJlIGNvb3JkaW5hdGVzLCBub3JtYWws
IGV0Yy4gIEl0IGlzCi0gIHVzZWQgdG8gcmVmZXIgdG8gdGhlIHZlcnRleCBkdXJpbmcgcmVuZGVy
aW5nLgotCi0gIFRoZSBsaWJyYXJ5IGNhbiBiZSBjb21waWxlZCBpbiBzaW5nbGUtIG9yIGRvdWJs
ZS1wcmVjaXNpb247IHRoZSB0eXBlCi0gIEdMVWNvb3JkIHJlcHJlc2VudHMgZWl0aGVyICJmbG9h
dCIgb3IgImRvdWJsZSIgYWNjb3JkaW5nbHkuICBUaGUgR0xVCi0gIHZlcnNpb24gd2lsbCBiZSBh
dmFpbGFibGUgaW4gZG91YmxlLXByZWNpc2lvbiBvbmx5LiAgQ29tcGlsZSB3aXRoCi0gIEdMVV9U
RVNTX0FQSV9GTE9BVCBkZWZpbmVkIHRvIGdldCB0aGUgc2luZ2xlLXByZWNpc2lvbiB2ZXJzaW9u
LgotCi0gIFdoZW4gRW5kUG9seWdvbiBpcyBjYWxsZWQsIHRoZSB0ZXNzZWxhdGlvbiBhbGdvcml0
aG0gZGV0ZXJtaW5lcwotICB3aGljaCByZWdpb25zIGFyZSBpbnRlcmlvciB0byB0aGUgZ2l2ZW4g
Y29udG91cnMsIGFjY29yZGluZyB0byBvbmUKLSAgb2Ygc2V2ZXJhbCAid2luZGluZyBydWxlcyIg
ZGVzY3JpYmVkIGJlbG93LiAgVGhlIGludGVyaW9yIHJlZ2lvbnMKLSAgYXJlIHRoZW4gdGVzc2Vs
YXRlZCwgYW5kIHRoZSBvdXRwdXQgaXMgcHJvdmlkZWQgYXMgY2FsbGJhY2tzLgotCi0KLSAgUmVu
ZGVyaW5nIENhbGxiYWNrcwotICAtLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgQ2FsbGJhY2tzIGFy
ZSBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudCB1c2luZwotCi0gICAgIHZvaWQgZ2x1VGVzc0NhbGxi
YWNrKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gd2hpY2gsIHZvaWQgKCpmbikoKSk7Ci0K
LSAgSWYgImZuIiBpcyBOVUxMLCBhbnkgcHJldmlvdXNseSBkZWZpbmVkIGNhbGxiYWNrIGlzIGRp
c2NhcmRlZC4KLSAgCi0gIFRoZSBjYWxsYmFja3MgdXNlZCB0byBwcm92aWRlIG91dHB1dCBhcmU6
CS8qIHdoaWNoID09ICovCi0KLSAgICAgdm9pZCBiZWdpbiggR0xlbnVtIHR5cGUgKTsJCQkvKiBH
TFVfVEVTU19CRUdJTiAqLwotICAgICB2b2lkIGVkZ2VGbGFnKCBHTGJvb2xlYW4gZmxhZyApOwkJ
LyogR0xVX1RFU1NfRURHRV9GTEFHICovCi0gICAgIHZvaWQgdmVydGV4KCB2b2lkICpkYXRhICk7
CQkJLyogR0xVX1RFU1NfVkVSVEVYICovCi0gICAgIHZvaWQgZW5kKCB2b2lkICk7CQkJCS8qIEdM
VV9URVNTX0VORCAqLwotCi0gIEFueSBvZiB0aGUgY2FsbGJhY2tzIG1heSBiZSBsZWZ0IHVuZGVm
aW5lZDsgaWYgc28sIHRoZSBjb3JyZXNwb25kaW5nCi0gIGluZm9ybWF0aW9uIHdpbGwgbm90IGJl
IHN1cHBsaWVkIGR1cmluZyByZW5kZXJpbmcuCi0KLSAgVGhlICJiZWdpbiIgY2FsbGJhY2sgaW5k
aWNhdGVzIHRoZSBzdGFydCBvZiBhIHByaW1pdGl2ZTsgdHlwZSBpcyBvbmUKLSAgb2YgR0xfVFJJ
QU5HTEVfU1RSSVAsIEdMX1RSSUFOR0xFX0ZBTiwgb3IgR0xfVFJJQU5HTEVTIChidXQgc2VlIHRo
ZQotICBub3RlcyBvbiAiYm91bmRhcnkgZXh0cmFjdGlvbiIgYmVsb3cpLgotICAKLSAgSXQgaXMg
Zm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiAidmVydGV4IiBjYWxsYmFja3MsIHdoaWNoIHN1cHBs
eSB0aGUKLSAgdmVydGljZXMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgZXhwZWN0ZWQgYnkgdGhlIGNv
cnJlc3BvbmRpbmcgZ2xCZWdpbigpCi0gIGNhbGwuICBBZnRlciB0aGUgbGFzdCB2ZXJ0ZXggb2Yg
YSBnaXZlbiBwcmltaXRpdmUsIHRoZXJlIGlzIGEgY2FsbGJhY2sKLSAgdG8gImVuZCIuCi0KLSAg
SWYgdGhlICJlZGdlRmxhZyIgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIG5vIHRyaWFuZ2xlIGZhbnMg
b3Igc3RyaXBzCi0gIHdpbGwgYmUgdXNlZC4gIFdoZW4gZWRnZUZsYWcgaXMgY2FsbGVkLCBpZiAi
ZmxhZyIgaXMgR0xfVFJVRSB0aGVuIGVhY2gKLSAgdmVydGV4IHdoaWNoIGZvbGxvd3MgYmVnaW5z
IGFuIGVkZ2Ugd2hpY2ggbGllcyBvbiB0aGUgcG9seWdvbiBib3VuZGFyeQotICAoaWUuIGFuIGVk
Z2Ugd2hpY2ggc2VwYXJhdGVzIGFuIGludGVyaW9yIHJlZ2lvbiBmcm9tIGFuIGV4dGVyaW9yIG9u
ZSkuCi0gIElmICJmbGFnIiBpcyBHTF9GQUxTRSwgZWFjaCB2ZXJ0ZXggd2hpY2ggZm9sbG93cyBi
ZWdpbnMgYW4gZWRnZSB3aGljaCBsaWVzCi0gIGluIHRoZSBwb2x5Z29uIGludGVyaW9yLiAgImVk
Z2VGbGFnIiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0Ci0gIGNhbGwgdG8gInZlcnRl
eCIuCi0KLSAgT3RoZXIgQ2FsbGJhY2tzCi0gIC0tLS0tLS0tLS0tLS0tLQotCi0gICB2b2lkIG1l
c2goIEdMVW1lc2ggKm1lc2ggKTsJCQkvKiBHTFVfVEVTU19NRVNIICovCi0KLSAgIC0gUmV0dXJu
cyBhbiBleHBsaWNpdCBtZXNoLCByZXByZXNlbnRlZCB1c2luZyB0aGUgcXVhZC1lZGdlIHN0cnVj
dHVyZQotICAgICAoR3VpYmFzL1N0b2xmaSAnODUpLiAgT3RoZXIgaW1wbGVtZW50YXRpb25zIG9m
IHRoaXMgaW50ZXJmYWNlIG1pZ2h0Ci0gICAgIHVzZSBhIGRpZmZlcmVudCBtZXNoIHN0cnVjdHVy
ZSwgc28gdGhpcyBpcyBhdmFpbGFibGUgb25seSBvbmx5IGFzIGFuCi0gICAgIFNHSSBleHRlbnNp
b24uICBXaGVuIHRoZSBtZXNoIGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBmcmVl
ZAotICAgICB1c2luZwotCi0Jdm9pZCBnbHVEZWxldGVNZXNoKCBHTFVtZXNoICptZXNoICk7Ci0K
LSAgICAgVGhlcmUgaXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJl
IGluIHRoZSBpbmNsdWRlCi0gICAgIGZpbGUgIm1lc2guaCIuICBGb3IgdGhlIGZ1bGwgZGV0YWls
cywgc2VlIEwuIEd1aWJhcyBhbmQgSi4gU3RvbGZpLAotICAgICBQcmltaXRpdmVzIGZvciB0aGUg
bWFuaXB1bGF0aW9uIG9mIGdlbmVyYWwgc3ViZGl2aXNpb25zIGFuZCB0aGUKLSAgICAgY29tcHV0
YXRpb24gb2YgVm9yb25vaSBkaWFncmFtcywgQUNNIFRyYW5zYWN0aW9ucyBvbiBHcmFwaGljcywK
LSAgICAgNCgyKTo3NC0xMjMsIEFwcmlsIDE5ODUuICBGb3IgYW4gaW50cm9kdWN0aW9uLCBzZWUg
dGhlIGNvdXJzZSBub3RlcwotICAgICBmb3IgQ1MzNDhhLCAiTWF0aGVtYXRpY2FsIEZvdW5kYXRp
b25zIG9mIENvbXB1dGVyIEdyYXBoaWNzIiwKLSAgICAgYXZhaWxhYmxlIGF0IHRoZSBTdGFuZm9y
ZCBib29rc3RvcmUgKGFuZCB0YXVnaHQgZHVyaW5nIHRoZSBmYWxsCi0gICAgIHF1YXJ0ZXIpLgot
Ci0gICB2b2lkIGVycm9yKCBHTGVudW0gZXJybm8gKTsJCQkvKiBHTFVfVEVTU19FUlJPUiAqLwot
Ci0gICAtIGVycm5vIGlzIG9uZSBvZglHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT04sCi0J
CQlHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OLAotCQkJR0xVX1RFU1NfTUlTU0lOR19CRUdJ
Tl9DT05UT1VSLAotCQkJR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9VUiwKLQkJCUdMVV9URVNT
X0NPT1JEX1RPT19MQVJHRSwKLQkJCUdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSwotCi0g
ICAgIFRoZSBmaXJzdCBmb3VyIGFyZSBvYnZpb3VzLiAgVGhlIGludGVyZmFjZSByZWNvdmVycyBm
cm9tIHRoZXNlCi0gICAgIGVycm9ycyBieSBpbnNlcnRpbmcgdGhlIG1pc3NpbmcgY2FsbChzKS4K
LSAgCi0gICAgIEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRSBzYXlzIHRoYXQgc29tZSB2ZXJ0ZXgg
Y29vcmRpbmF0ZSBleGNlZWRlZAotICAgICB0aGUgcHJlZGVmaW5lZCBjb25zdGFudCBHTFVfVEVT
U19NQVhfQ09PUkQgaW4gYWJzb2x1dGUgdmFsdWUsIGFuZAotICAgICB0aGF0IHRoZSB2YWx1ZSBo
YXMgYmVlbiBjbGFtcGVkLiAgKENvb3JkaW5hdGUgdmFsdWVzIG11c3QgYmUgc21hbGwKLSAgICAg
ZW5vdWdoIHNvIHRoYXQgdHdvIGNhbiBiZSBtdWx0aXBsaWVkIHRvZ2V0aGVyIHdpdGhvdXQgb3Zl
cmZsb3cuKQotCi0gICAgIEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSyBzYXlzIHRoYXQg
dGhlIGFsZ29yaXRobSBkZXRlY3RlZCBhbgotICAgICBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28g
ZWRnZXMgaW4gdGhlIGlucHV0IGRhdGEsIGFuZCB0aGUgImNvbWJpbmUiCi0gICAgIGNhbGxiYWNr
IChiZWxvdykgd2FzIG5vdCBwcm92aWRlZC4gIE5vIG91dHB1dCB3aWxsIGJlIGdlbmVyYXRlZC4K
LQotCi0gICB2b2lkIGNvbWJpbmUoIEdMVWNvb3JkIGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwJ
LyogR0xVX1RFU1NfQ09NQklORSAqLwotCQkgR0xVY29vcmQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0
RGF0YSApOwotCi0gICAtIFdoZW4gdGhlIGFsZ29yaXRobSBkZXRlY3RzIGFuIGludGVyc2VjdGlv
biwgb3Igd2lzaGVzIHRvIG1lcmdlCi0gICAgIGZlYXR1cmVzLCBpdCBuZWVkcyB0byBjcmVhdGUg
YSBuZXcgdmVydGV4LiAgVGhlIHZlcnRleCBpcyBkZWZpbmVkCi0gICAgIGFzIGEgbGluZWFyIGNv
bWJpbmF0aW9uIG9mIHVwIHRvIDQgZXhpc3RpbmcgdmVydGljZXMsIHJlZmVyZW5jZWQKLSAgICAg
YnkgZGF0YVswLi4zXS4gIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIGxpbmVhciBjb21iaW5hdGlv
biBhcmUKLSAgICAgZ2l2ZW4gYnkgd2VpZ2h0WzAuLjNdOyB0aGVzZSB3ZWlnaHRzIGFsd2F5cyBz
dW0gdG8gMS4wLiAgQWxsIHZlcnRleAotICAgICBwb2ludGVycyBhcmUgdmFsaWQgZXZlbiB3aGVu
IHNvbWUgb2YgdGhlIHdlaWdodHMgYXJlIHplcm8uCi0gICAgICJjb29yZHMiIGdpdmVzIHRoZSBs
b2NhdGlvbiBvZiB0aGUgbmV3IHZlcnRleC4KLQotICAgICBUaGUgdXNlciBtdXN0IGFsbG9jYXRl
IGFub3RoZXIgdmVydGV4LCBpbnRlcnBvbGF0ZSBwYXJhbWV0ZXJzCi0gICAgIHVzaW5nICJkYXRh
IiBhbmQgIndlaWdodHMiLCBhbmQgcmV0dXJuIHRoZSBuZXcgdmVydGV4IHBvaW50ZXIgaW4KLSAg
ICAgIm91dERhdGEiLiAgVGhpcyBoYW5kbGUgaXMgc3VwcGxpZWQgZHVyaW5nIHJlbmRlcmluZyBj
YWxsYmFja3MuCi0gICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcG9seWdvbiBsaWVzIGluIGFuIGFy
Yml0cmFyeSBwbGFuZSBpbiAzLXNwYWNlLAotICAgICBhbmQgd2UgYXNzb2NpYXRlIGEgY29sb3Ig
d2l0aCBlYWNoIHZlcnRleCwgdGhlIGNvbWJpbmUgY2FsbGJhY2sgbWlnaHQKLSAgICAgbG9vayBs
aWtlIHRoaXM6Ci0gICAgCi0gICAgIHZvaWQgbXlDb21iaW5lKCBHTFVjb29yZCBjb29yZHNbM10s
IFZFUlRFWCAqZFs0XSwKLSAgICAgICAgICAgICAgICAgICAgIEdMVWNvb3JkIHdbNF0sIFZFUlRF
WCAqKmRhdGFPdXQgKQotICAgICB7Ci0gICAgICAgIFZFUlRFWCAqbmV3ID0gbmV3X3ZlcnRleCgp
OwotICAgICAgIAotICAgICAgICBuZXctPnggPSBjb29yZHNbMF07Ci0gICAgICAgIG5ldy0+eSA9
IGNvb3Jkc1sxXTsKLSAgICAgICAgbmV3LT56ID0gY29vcmRzWzJdOwotICAgICAgICBuZXctPnIg
PSB3WzBdKmRbMF0tPnIgKyB3WzFdKmRbMV0tPnIgKyB3WzJdKmRbMl0tPnIgKyB3WzNdKmRbM10t
PnI7Ci0gICAgICAgIG5ldy0+ZyA9IHdbMF0qZFswXS0+ZyArIHdbMV0qZFsxXS0+ZyArIHdbMl0q
ZFsyXS0+ZyArIHdbM10qZFszXS0+ZzsKLSAgICAgICAgbmV3LT5iID0gd1swXSpkWzBdLT5iICsg
d1sxXSpkWzFdLT5iICsgd1syXSpkWzJdLT5iICsgd1szXSpkWzNdLT5iOwotICAgICAgICBuZXct
PmEgPSB3WzBdKmRbMF0tPmEgKyB3WzFdKmRbMV0tPmEgKyB3WzJdKmRbMl0tPmEgKyB3WzNdKmRb
M10tPmE7Ci0gICAgICAgICpkYXRhT3V0ID0gbmV3OwotICAgICB9Ci0KLSAgICAgSWYgdGhlIGFs
Z29yaXRobSBkZXRlY3RzIGFuIGludGVyc2VjdGlvbiwgdGhlbiB0aGUgImNvbWJpbmUiIGNhbGxi
YWNrCi0gICAgIG11c3QgYmUgZGVmaW5lZCwgYW5kIG11c3Qgd3JpdGUgYSBub24tTlVMTCBwb2lu
dGVyIGludG8gImRhdGFPdXQiLgotICAgICBPdGhlcndpc2UgdGhlIEdMVV9URVNTX05FRURfQ09N
QklORV9DQUxMQkFDSyBlcnJvciBvY2N1cnMsIGFuZCBubwotICAgICBvdXRwdXQgaXMgZ2VuZXJh
dGVkLiAgVGhpcyBpcyB0aGUgb25seSBlcnJvciB0aGF0IGNhbiBvY2N1ciBkdXJpbmcKLSAgICAg
dGVzc2VsYXRpb24gYW5kIHJlbmRlcmluZy4KLQotCi0gIENvbnRyb2wgb3ZlciBUZXNzZWxhdGlv
bgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgCi0gICB2b2lkIGdsdVRlc3NQcm9wZXJ0
eSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNoLCBHTFVjb29yZCB2YWx1ZSApOwot
Ci0gICBQcm9wZXJ0aWVzIGRlZmluZWQ6Ci0KLSAgICAtIEdMVV9URVNTX1dJTkRJTkdfUlVMRS4g
IFBvc3NpYmxlIHZhbHVlczoKLQotCSAgR0xVX1RFU1NfV0lORElOR19PREQKLQkgIEdMVV9URVNT
X1dJTkRJTkdfTk9OWkVSTwotCSAgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRQotCSAgR0xVX1RF
U1NfV0lORElOR19ORUdBVElWRQotCSAgR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTwotCi0g
ICAgICBUaGUgaW5wdXQgY29udG91cnMgcGFyaXRpb24gdGhlIHBsYW5lIGludG8gcmVnaW9ucy4g
IEEgd2luZGluZwotICAgICAgcnVsZSBkZXRlcm1pbmVzIHdoaWNoIG9mIHRoZXNlIHJlZ2lvbnMg
YXJlIGluc2lkZSB0aGUgcG9seWdvbi4KLSAgICAgIAotICAgICAgRm9yIGEgc2luZ2xlIGNvbnRv
dXIgQywgdGhlIHdpbmRpbmcgbnVtYmVyIG9mIGEgcG9pbnQgeCBpcyBzaW1wbHkKLSAgICAgIHRo
ZSBzaWduZWQgbnVtYmVyIG9mIHJldm9sdXRpb25zIHdlIG1ha2UgYXJvdW5kIHggYXMgd2UgdHJh
dmVsCi0gICAgICBvbmNlIGFyb3VuZCBDICh3aGVyZSBDQ1cgaXMgcG9zaXRpdmUpLiAgV2hlbiB0
aGVyZSBhcmUgc2V2ZXJhbAotICAgICAgY29udG91cnMsIHRoZSBpbmRpdmlkdWFsIHdpbmRpbmcg
bnVtYmVycyBhcmUgc3VtbWVkLiAgVGhpcwotICAgICAgcHJvY2VkdXJlIGFzc29jaWF0ZXMgYSBz
aWduZWQgaW50ZWdlciB2YWx1ZSB3aXRoIGVhY2ggcG9pbnQgeCBpbgotICAgICAgdGhlIHBsYW5l
LiAgTm90ZSB0aGF0IHRoZSB3aW5kaW5nIG51bWJlciBpcyB0aGUgc2FtZSBmb3IgYWxsCi0gICAg
ICBwb2ludHMgaW4gYSBzaW5nbGUgcmVnaW9uLgotCi0gICAgICBUaGUgd2luZGluZyBydWxlIGNs
YXNzaWZpZXMgYSByZWdpb24gYXMgImluc2lkZSIgaWYgaXRzIHdpbmRpbmcKLSAgICAgIG51bWJl
ciBiZWxvbmdzIHRvIHRoZSBjaG9zZW4gY2F0ZWdvcnkgKG9kZCwgbm9uemVybywgcG9zaXRpdmUs
Ci0gICAgICBuZWdhdGl2ZSwgb3IgYWJzb2x1dGUgdmFsdWUgb2YgYXQgbGVhc3QgdHdvKS4gIFRo
ZSBjdXJyZW50IEdMVQotICAgICAgdGVzc2VsYXRvciBpbXBsZW1lbnRzIHRoZSAib2RkIiBydWxl
LiAgVGhlICJub256ZXJvIiBydWxlIGlzIGFub3RoZXIKLSAgICAgIGNvbW1vbiB3YXkgdG8gZGVm
aW5lIHRoZSBpbnRlcmlvci4gIFRoZSBvdGhlciB0aHJlZSBydWxlcyBhcmUKLSAgICAgIHVzZWZ1
bCBmb3IgcG9seWdvbiBDU0cgb3BlcmF0aW9ucyAoc2VlIGJlbG93KS4KLQotICAgIC0gR0xVX1RF
U1NfQk9VTkRBUllfT05MWS4gIFZhbHVlczogVFJVRSAobm9uLXplcm8pIG9yIEZBTFNFICh6ZXJv
KS4KLQotICAgICAgSWYgVFJVRSwgcmV0dXJucyBhIHNldCBvZiBjbG9zZWQgY29udG91cnMgd2hp
Y2ggc2VwYXJhdGUgdGhlCi0gICAgICBwb2x5Z29uIGludGVyaW9yIGFuZCBleHRlcmlvciAocmF0
aGVyIHRoYW4gYSB0ZXNzZWxhdGlvbikuCi0gICAgICBFeHRlcmlvciBjb250b3VycyBhcmUgb3Jp
ZW50ZWQgQ0NXIHdpdGggcmVzcGVjdCB0byB0aGUgbm9ybWFsLAotICAgICAgaW50ZXJpb3IgY29u
dG91cnMgYXJlIG9yaWVudGVkIENXLiAgVGhlIEdMVV9URVNTX0JFR0lOIGNhbGxiYWNrCi0gICAg
ICB1c2VzIHRoZSB0eXBlIEdMX0xJTkVfTE9PUCBmb3IgZWFjaCBjb250b3VyLgotICAgICAgCi0g
ICAgLSBHTFVfVEVTU19UT0xFUkFOQ0UuICBWYWx1ZTogYSByZWFsIG51bWJlciBiZXR3ZWVuIDAu
MCBhbmQgMS4wLgotCi0gICAgICBUaGlzIHNwZWNpZmllcyBhIHRvbGVyYW5jZSBmb3IgbWVyZ2lu
ZyBmZWF0dXJlcyB0byByZWR1Y2UgdGhlIHNpemUKLSAgICAgIG9mIHRoZSBvdXRwdXQuICBGb3Ig
ZXhhbXBsZSwgdHdvIHZlcnRpY2VzIHdoaWNoIGFyZSB2ZXJ5IGNsb3NlIHRvCi0gICAgICBlYWNo
IG90aGVyIG1pZ2h0IGJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHZlcnRleC4gIFRoZSB0b2xlcmFu
Y2UKLSAgICAgIGlzIG11bHRpcGxpZWQgYnkgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZSBtYWduaXR1
ZGUgb2YgYW55IGlucHV0IHZlcnRleDsKLSAgICAgIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVt
IGRpc3RhbmNlIHRoYXQgYW55IGZlYXR1cmUgY2FuIG1vdmUgYXMgdGhlCi0gICAgICByZXN1bHQg
b2YgYSBzaW5nbGUgbWVyZ2Ugb3BlcmF0aW9uLiAgSWYgYSBzaW5nbGUgZmVhdHVyZSB0YWtlcyBw
YXJ0Ci0gICAgICBpbiBzZXZlcmFsIG1lcmdlIG9wZXJhdGlvbnMsIHRoZSB0b3RhbCBkaXN0YW5j
ZSBtb3ZlZCBjb3VsZCBiZSBsYXJnZXIuCi0KLSAgICAgIEZlYXR1cmUgbWVyZ2luZyBpcyBjb21w
bGV0ZWx5IG9wdGlvbmFsOyB0aGUgdG9sZXJhbmNlIGlzIG9ubHkgYSBoaW50LgotICAgICAgVGhl
IGltcGxlbWVudGF0aW9uIGlzIGZyZWUgdG8gbWVyZ2UgaW4gc29tZSBjYXNlcyBhbmQgbm90IGlu
IG90aGVycywKLSAgICAgIG9yIHRvIG5ldmVyIG1lcmdlIGZlYXR1cmVzIGF0IGFsbC4gIFRoZSBk
ZWZhdWx0IHRvbGVyYW5jZSBpcyB6ZXJvLgotICAgICAgCi0gICAgICBUaGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbiBtZXJnZXMgdmVydGljZXMgb25seSBpZiB0aGV5IGFyZSBleGFjdGx5Ci0gICAg
ICBjb2luY2lkZW50LCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHRvbGVyYW5jZS4gIEEgdmVy
dGV4IGlzCi0gICAgICBzcGxpY2VkIGludG8gYW4gZWRnZSBvbmx5IGlmIHRoZSBpbXBsZW1lbnRh
dGlvbiBpcyB1bmFibGUgdG8KLSAgICAgIGRpc3Rpbmd1aXNoIHdoaWNoIHNpZGUgb2YgdGhlIGVk
Z2UgdGhlIHZlcnRleCBsaWVzIG9uLgotICAgICAgVHdvIGVkZ2VzIGFyZSBtZXJnZWQgb25seSB3
aGVuIGJvdGggZW5kcG9pbnRzIGFyZSBpZGVudGljYWwuCi0KLQotICAgdm9pZCBnbHVUZXNzTm9y
bWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAotCQkgICAgICBHTFVjb29yZCB4LCBHTFVjb29yZCB5
LCBHTFVjb29yZCB6ICkKLQotICAgIC0gTGV0cyB0aGUgdXNlciBzdXBwbHkgdGhlIHBvbHlnb24g
bm9ybWFsLCBpZiBrbm93bi4gIEFsbCBpbnB1dCBkYXRhCi0gICAgICBpcyBwcm9qZWN0ZWQgaW50
byBhIHBsYW5lIHBlcnBlbmRpY3VsYXIgdG8gdGhlIG5vcm1hbCBiZWZvcmUKLSAgICAgIHRlc3Nl
bGF0aW9uLiAgQWxsIG91dHB1dCB0cmlhbmdsZXMgYXJlIG9yaWVudGVkIENDVyB3aXRoCi0gICAg
ICByZXNwZWN0IHRvIHRoZSBub3JtYWwgKENXIG9yaWVudGF0aW9uIGNhbiBiZSBvYnRhaW5lZCBi
eQotICAgICAgcmV2ZXJzaW5nIHRoZSBzaWduIG9mIHRoZSBzdXBwbGllZCBub3JtYWwpLiAgRm9y
IGV4YW1wbGUsIGlmCi0gICAgICB5b3Uga25vdyB0aGF0IGFsbCBwb2x5Z29ucyBsaWUgaW4gdGhl
IHgteSBwbGFuZSwgY2FsbAotICAgICAgImdsdVRlc3NOb3JtYWwodGVzcywgMC4wLCAwLjAsIDEu
MCkiIGJlZm9yZSByZW5kZXJpbmcgYW55IHBvbHlnb25zLgotICAgICAgCi0gICAgLSBJZiB0aGUg
c3VwcGxpZWQgbm9ybWFsIGlzICgwLDAsMCkgKHRoZSBkZWZhdWx0IHZhbHVlKSwgdGhlCi0gICAg
ICBub3JtYWwgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzLiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUg
bm9ybWFsLAotICAgICAgdXAgdG8gaXRzIHNpZ24sIGlzIGZvdW5kIGJ5IGZpdHRpbmcgYSBwbGFu
ZSB0byB0aGUgdmVydGljZXMsCi0gICAgICB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHZlcnRp
Y2VzIGFyZSBjb25uZWN0ZWQuICBJdCBpcwotICAgICAgZXhwZWN0ZWQgdGhhdCB0aGUgaW5wdXQg
ZGF0YSBsaWVzIGFwcHJveGltYXRlbHkgaW4gcGxhbmU7Ci0gICAgICBvdGhlcndpc2UgcHJvamVj
dGlvbiBwZXJwZW5kaWN1bGFyIHRvIHRoZSBjb21wdXRlZCBub3JtYWwgbWF5Ci0gICAgICBzdWJz
dGFudGlhbGx5IGNoYW5nZSB0aGUgZ2VvbWV0cnkuICBUaGUgc2lnbiBvZiB0aGUgbm9ybWFsIGlz
Ci0gICAgICBjaG9zZW4gc28gdGhhdCB0aGUgc3VtIG9mIHRoZSBzaWduZWQgYXJlYXMgb2YgYWxs
IGlucHV0IGNvbnRvdXJzCi0gICAgICBpcyBub24tbmVnYXRpdmUgKHdoZXJlIGEgQ0NXIGNvbnRv
dXIgaGFzIHBvc2l0aXZlIGFyZWEpLgotICAgIAotICAgIC0gVGhlIHN1cHBsaWVkIG5vcm1hbCBw
ZXJzaXN0cyB1bnRpbCBpdCBpcyBjaGFuZ2VkIGJ5IGFub3RoZXIKLSAgICAgIGNhbGwgdG8gZ2x1
VGVzc05vcm1hbC4KLQotCi0gIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgR0xVIHRl
c3NlbGF0b3IKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gIFRoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIGlzIHRoZSBvbmUgZGVzY3JpYmVkIGFib3Zl
LiAgVGhlIGZvbGxvd2luZwotICByb3V0aW5lcyBhcmUgb2Jzb2xldGUsIGFuZCBhcmUgcHJvdmlk
ZWQgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKLQotICAgIHR5cGVkZWYgR0xVdGVz
c2VsYXRvciBHTFV0cmlhbmd1bGF0b3JPYmo7CS8qIG9ic29sZXRlIG5hbWUgKi8KLQotICAgIHZv
aWQgZ2x1QmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0gICAgdm9pZCBnbHVO
ZXh0Q29udG91ciggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHR5cGUgKTsKLSAgICB2b2lk
IGdsdUVuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgCi0gICJ0eXBlIiBpcyBv
bmUgb2YgR0xVX0VYVEVSSU9SLCBHTFVfSU5URVJJT1IsIEdMVV9DQ1csIEdMVV9DVywgb3IKLSAg
R0xVX1VOS05PV04uICBJdCBpcyBpZ25vcmVkIGJ5IHRoZSBjdXJyZW50IEdMVSB0ZXNzZWxhdG9y
LgotICAKLSAgR0xVX0JFR0lOLCBHTFVfVkVSVEVYLCBHTFVfRU5ELCBHTFVfRVJST1IsIGFuZCBH
TFVfRURHRV9GTEFHIGFyZSBkZWZpbmVkCi0gIGFzIHN5bm9ueW1zIGZvciBHTFVfVEVTU19CRUdJ
TiwgR0xVX1RFU1NfVkVSVEVYLCBHTFVfVEVTU19FTkQsCi0gIEdMVV9URVNTX0VSUk9SLCBhbmQg
R0xVX1RFU1NfRURHRV9GTEFHLgotCi0KLVBvbHlnb24gQ1NHIG9wZXJhdGlvbnMKLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICBUaGUgZmVhdHVyZXMgb2YgdGhlIHRlc3NlbGF0b3IgbWFrZSBp
dCBlYXN5IHRvIGZpbmQgdGhlIHVuaW9uLCBkaWZmZXJlbmNlLAotICBvciBpbnRlcnNlY3Rpb24g
b2Ygc2V2ZXJhbCBwb2x5Z29ucy4KLQotICBGaXJzdCwgYXNzdW1lIHRoYXQgZWFjaCBwb2x5Z29u
IGlzIGRlZmluZWQgc28gdGhhdCB0aGUgd2luZGluZyBudW1iZXIKLSAgaXMgMCBmb3IgZWFjaCBl
eHRlcmlvciByZWdpb24sIGFuZCAxIGZvciBlYWNoIGludGVyaW9yIHJlZ2lvbi4gIFVuZGVyCi0g
IHRoaXMgbW9kZWwsIENDVyBjb250b3VycyBkZWZpbmUgdGhlIG91dGVyIGJvdW5kYXJ5IG9mIHRo
ZSBwb2x5Z29uLCBhbmQKLSAgQ1cgY29udG91cnMgZGVmaW5lIGhvbGVzLiAgQ29udG91cnMgbWF5
IGJlIG5lc3RlZCwgYnV0IGEgbmVzdGVkCi0gIGNvbnRvdXIgbXVzdCBiZSBvcmllbnRlZCBvcHBv
c2l0ZWx5IGZyb20gdGhlIGNvbnRvdXIgdGhhdCBjb250YWlucyBpdC4KLQotICBJZiB0aGUgb3Jp
Z2luYWwgcG9seWdvbnMgZG8gbm90IHNhdGlzZnkgdGhpcyBkZXNjcmlwdGlvbiwgdGhleSBjYW4g
YmUKLSAgY29udmVydGVkIHRvIHRoaXMgZm9ybSBieSBmaXJzdCBydW5uaW5nIHRoZSB0ZXNzZWxh
dG9yIHdpdGggdGhlCi0gIEdMVV9URVNTX0JPVU5EQVJZX09OTFkgcHJvcGVydHkgdHVybmVkIG9u
LiAgVGhpcyByZXR1cm5zIGEgbGlzdCBvZgotICBjb250b3VycyBzYXRpc2Z5aW5nIHRoZSByZXN0
cmljdGlvbiBhYm92ZS4gIEJ5IGFsbG9jYXRpbmcgdHdvCi0gIHRlc3NlbGF0b3Igb2JqZWN0cywg
dGhlIGNhbGxiYWNrcyBmcm9tIG9uZSB0ZXNzZWxhdG9yIGNhbiBiZSBmZWQKLSAgZGlyZWN0bHkg
dG8gdGhlIGlucHV0IG9mIGFub3RoZXIuCi0KLSAgR2l2ZW4gdHdvIG9yIG1vcmUgcG9seWdvbnMg
b2YgdGhlIGZvcm0gYWJvdmUsIENTRyBvcGVyYXRpb25zIGNhbiBiZQotICBpbXBsZW1lbnRlZCBh
cyBmb2xsb3dzOgotCi0gIFVuaW9uCi0gICAgIERyYXcgYWxsIHRoZSBpbnB1dCBjb250b3VycyBh
cyBhIHNpbmdsZSBwb2x5Z29uLiAgVGhlIHdpbmRpbmcgbnVtYmVyCi0gICAgIG9mIGVhY2ggcmVz
dWx0aW5nIHJlZ2lvbiBpcyB0aGUgbnVtYmVyIG9mIG9yaWdpbmFsIHBvbHlnb25zCi0gICAgIHdo
aWNoIGNvdmVyIGl0LiAgVGhlIHVuaW9uIGNhbiBiZSBleHRyYWN0ZWQgdXNpbmcgdGhlCi0gICAg
IEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyBvciBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFIHdp
bmRpbmcgcnVsZXMuCi0gICAgIE5vdGUgdGhhdCB3aXRoIHRoZSBub256ZXJvIHJ1bGUsIHdlIHdv
dWxkIGdldCB0aGUgc2FtZSByZXN1bHQgaWYKLSAgICAgYWxsIGNvbnRvdXIgb3JpZW50YXRpb25z
IHdlcmUgcmV2ZXJzZWQuCi0KLSAgSW50ZXJzZWN0aW9uICh0d28gcG9seWdvbnMgYXQgYSB0aW1l
IG9ubHkpCi0gICAgIERyYXcgYSBzaW5nbGUgcG9seWdvbiB1c2luZyB0aGUgY29udG91cnMgZnJv
bSBib3RoIGlucHV0IHBvbHlnb25zLgotICAgICBFeHRyYWN0IHRoZSByZXN1bHQgdXNpbmcgR0xV
X1RFU1NfV0lORElOR19BQlNfR0VRX1RXTy4gIChTaW5jZSB0aGlzCi0gICAgIHdpbmRpbmcgcnVs
ZSBsb29rcyBhdCB0aGUgYWJzb2x1dGUgdmFsdWUsIHJldmVyc2luZyBhbGwgY29udG91cgotICAg
ICBvcmllbnRhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSByZXN1bHQuKQotCi0gIERpZmZlcmVu
Y2UKLSAgCi0gICAgIFN1cHBvc2Ugd2Ugd2FudCB0byBjb21wdXRlIEEgXCAoQiB1bmlvbiBDIHVu
aW9uIEQpLiAgRHJhdyBhIHNpbmdsZQotICAgICBwb2x5Z29uIGNvbnNpc3Rpbmcgb2YgdGhlIHVu
bW9kaWZpZWQgY29udG91cnMgZnJvbSBBLCBmb2xsb3dlZCBieQotICAgICB0aGUgY29udG91cnMg
b2YgQixDLEQgd2l0aCB0aGUgdmVydGV4IG9yZGVyIHJldmVyc2VkICh0aGlzIGNoYW5nZXMKLSAg
ICAgdGhlIHdpbmRpbmcgbnVtYmVyIG9mIHRoZSBpbnRlcmlvciByZWdpb25zIHRvIC0xKS4gIFRv
IGV4dHJhY3QgdGhlCi0gICAgIHJlc3VsdCwgdXNlIHRoZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lU
SVZFIHJ1bGUuCi0gICAKLSAgICAgSWYgQixDLEQgYXJlIHRoZSByZXN1bHQgb2YgYSBHTFVfVEVT
U19CT1VOREFSWV9PTkxZIGNhbGwsIGFuCi0gICAgIGFsdGVybmF0aXZlIHRvIHJldmVyc2luZyB0
aGUgdmVydGV4IG9yZGVyIGlzIHRvIHJldmVyc2UgdGhlIHNpZ24gb2YKLSAgICAgdGhlIHN1cHBs
aWVkIG5vcm1hbC4gIEZvciBleGFtcGxlIGluIHRoZSB4LXkgcGxhbmUsIGNhbGwKLSAgICAgZ2x1
VGVzc05vcm1hbCggdGVzcywgMC4wLCAwLjAsIC0xLjAgKS4KLSAKLQotUGVyZm9ybWFuY2UKLS0t
LS0tLS0tLS0tCi0KLSAgVGhlIHRlc3NlbGF0b3IgaXMgbm90IGludGVuZGVkIGZvciBpbW1lZGlh
dGUtbW9kZSByZW5kZXJpbmc7IHdoZW4KLSAgcG9zc2libGUgdGhlIG91dHB1dCBzaG91bGQgYmUg
Y2FjaGVkIGluIGEgdXNlciBzdHJ1Y3R1cmUgb3IgZGlzcGxheQotICBsaXN0LiAgR2VuZXJhbCBw
b2x5Z29uIHRlc3NlbGF0aW9uIGlzIGFuIGluaGVyZW50bHkgZGlmZmljdWx0IHByb2JsZW0sCi0g
IGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGdvYWwgb2YgZXh0cmVtZSByb2J1c3RuZXNzLgotCi0gIFRo
ZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyBhbiBlZmZvcnQgdG8gb3V0cHV0IGEgc21hbGwgbnVtYmVy
IG9mIGZhbnMKLSAgYW5kIHN0cmlwczsgdGhpcyBzaG91bGQgaW1wcm92ZSB0aGUgcmVuZGVyaW5n
IHBlcmZvcm1hbmNlIHdoZW4gdGhlCi0gIG91dHB1dCBpcyB1c2VkIGluIGEgZGlzcGxheSBsaXN0
LgotCi0gIFNpbmdsZS1jb250b3VyIGlucHV0IHBvbHlnb25zIGFyZSBmaXJzdCB0ZXN0ZWQgdG8g
c2VlIHdoZXRoZXIgdGhleSBjYW4KLSAgYmUgcmVuZGVyZWQgYXMgYSB0cmlhbmdsZSBmYW4gd2l0
aCByZXNwZWN0IHRvIHRoZSBmaXJzdCB2ZXJ0ZXggKHRvCi0gIGF2b2lkIHJ1bm5pbmcgdGhlIGZ1
bGwgZGVjb21wb3NpdGlvbiBhbGdvcml0aG0gb24gY29udmV4IHBvbHlnb25zKS4KLSAgTm9uLWNv
bnZleCBwb2x5Z29ucyBtYXkgYmUgcmVuZGVyZWQgYnkgdGhpcyAiZmFzdCBwYXRoIiBhcyB3ZWxs
LCBpZgotICB0aGUgYWxnb3JpdGhtIGdldHMgbHVja3kgaW4gaXRzIGNob2ljZSBvZiBhIHN0YXJ0
aW5nIHZlcnRleC4KLQotICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBmb2xsb3cgdGhlc2UgZ3VpZGVs
aW5lczoKLQotICAgLSBzdXBwbHkgdGhlIHBvbHlnb24gbm9ybWFsLCBpZiBhdmFpbGFibGUsIHVz
aW5nIGdsdVRlc3NOb3JtYWwoKS4KLSAgICAgVGhpcyByZXByZXNlbnRzIGFib3V0IDEwJSBvZiB0
aGUgY29tcHV0YXRpb24gdGltZS4gIEZvciBleGFtcGxlLAotICAgICBpZiBhbGwgcG9seWdvbnMg
bGllIGluIHRoZSB4LXkgcGxhbmUsIHVzZSBnbHVUZXNzTm9ybWFsKHRlc3MsMCwwLDEpLgotCi0g
ICAtIHJlbmRlciBtYW55IHBvbHlnb25zIHVzaW5nIHRoZSBzYW1lIHRlc3NlbGF0b3Igb2JqZWN0
LCByYXRoZXIgdGhhbgotICAgICBhbGxvY2F0aW5nIGEgbmV3IHRlc3NlbGF0b3IgZm9yIGVhY2gg
b25lLiAgKEluIGEgbXVsdGktdGhyZWFkZWQsCi0gICAgIG11bHRpLXByb2Nlc3NvciBlbnZpcm9u
bWVudCB5b3UgbWF5IGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UgdXNpbmcKLSAgICAgc2V2ZXJhbCB0
ZXNzZWxhdG9ycy4pCi0KLQotQ29tcGFyaXNvbiB3aXRoIHRoZSBHTFUgdGVzc2VsYXRvcgotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIE9uIHBvbHlnb25zIHdoaWNoIG1h
a2UgaXQgdGhyb3VnaCB0aGUgImZhc3QgcGF0aCIsIHRoZSB0ZXNzZWxhdG9yIGlzCi0gIDMgdG8g
NSB0aW1lcyBmYXN0ZXIgdGhhbiB0aGUgR0xVIHRlc3NlbGF0b3IuCi0KLSAgT24gcG9seWdvbnMg
d2hpY2ggZG9uJ3QgbWFrZSBpdCB0aHJvdWdoIHRoZSBmYXN0IHBhdGggKGJ1dCB3aGljaCBkb24n
dAotICBoYXZlIHNlbGYtaW50ZXJzZWN0aW9ucyBvciBkZWdlbmVyYWNpZXMpLCBpdCBpcyBhYm91
dCAyIHRpbWVzIHNsb3dlci4KLQotICBPbiBwb2x5Z29ucyB3aXRoIHNlbGYtaW50ZXJzZWN0aW9u
cyBvciBkZWdlbmVyYWNlcywgdGhlcmUgaXMgbm90aGluZwotICB0byBjb21wYXJlIGFnYWluc3Qu
Ci0KLSAgVGhlIG5ldyB0ZXNzZWxhdG9yIGdlbmVyYXRlcyBtYW55IG1vcmUgZmFucyBhbmQgc3Ry
aXBzLCByZWR1Y2luZyB0aGUKLSAgbnVtYmVyIG9mIHZlcnRpY2VzIHRoYXQgbmVlZCB0byBiZSBz
ZW50IHRvIHRoZSBoYXJkd2FyZS4KLQotICBLZXkgdG8gdGhlIHN0YXRpc3RpY3M6Ci0KLQl2ZXJ0
CQludW1iZXIgb2YgaW5wdXQgdmVydGljZXMgb24gYWxsIGNvbnRvdXJzCi0JY250cgkJbnVtYmVy
IG9mIGlucHV0IGNvbnRvdXJzCi0JdHJpCQludW1iZXIgb2YgdHJpYW5nbGVzIGluIGFsbCBvdXRw
dXQgcHJpbWl0aXZlcwotCXN0cmlwCQludW1iZXIgb2YgdHJpYW5nbGUgc3RyaXBzCi0JZmFuCQlu
dW1iZXIgb2YgdHJpYW5nbGUgZmFucwotCWluZAkJbnVtYmVyIG9mIGluZGVwZW5kZW50IHRyaWFu
Z2xlcwotCW1zCQludW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZvciB0ZXNzZWxhdGlvbgotCQkJKG9u
IGEgMTUwTUh6IFI0NDAwIEluZHkpCi0KLSAgQ29udmV4IHBvbHlnb24gZXhhbXBsZXM6Ci0KLU5l
dzogICAgIDMgdmVydCwgICAxIGNudHIsICAgICAxIHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAg
ICAgMSBpbmQsICAwLjA0NTkgbXMKLU9sZDogICAgIDMgdmVydCwgICAxIGNudHIsICAgICAxIHRy
aSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgMSBpbmQsICAgMC4xNDkgbXMKLU5ldzogICAgIDQg
dmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBpbmQs
ICAwLjA0NTkgbXMKLU9sZDogICAgIDQgdmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAwIHN0
cmlwLCAgIDAgZmFuLCAgICAgMiBpbmQsICAgMC4xNjEgbXMKLU5ldzogICAgMzYgdmVydCwgICAx
IGNudHIsICAgIDM0IHRyaSwgICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBpbmQsICAgMC4xNTMg
bXMKLU9sZDogICAgMzYgdmVydCwgICAxIGNudHIsICAgIDM0IHRyaSwgICAwIHN0cmlwLCAgIDAg
ZmFuLCAgICAzNCBpbmQsICAgMC42MjEgbXMKLQotICBDb25jYXZlIHNpbmdsZS1jb250b3VyIHBv
bHlnb25zOgotCi1OZXc6ICAgICA1IHZlcnQsICAgMSBjbnRyLCAgICAgMyB0cmksICAgMCBzdHJp
cCwgICAxIGZhbiwgICAgIDAgaW5kLCAgIDAuMDUyIG1zCi1PbGQ6ICAgICA1IHZlcnQsICAgMSBj
bnRyLCAgICAgMyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDMgaW5kLCAgIDAuMjUyIG1z
Ci1OZXc6ICAgIDE5IHZlcnQsICAgMSBjbnRyLCAgICAxNyB0cmksICAgMiBzdHJpcCwgICAyIGZh
biwgICAgIDEgaW5kLCAgIDAuOTExIG1zCi1PbGQ6ICAgIDE5IHZlcnQsICAgMSBjbnRyLCAgICAx
NyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgMTcgaW5kLCAgIDAuNTI5IG1zCi1OZXc6ICAg
MTUxIHZlcnQsICAgMSBjbnRyLCAgIDE0OSB0cmksICAxMyBzdHJpcCwgIDE4IGZhbiwgICAgIDMg
aW5kLCAgICA2LjgyIG1zCi1PbGQ6ICAgMTUxIHZlcnQsICAgMSBjbnRyLCAgIDE0OSB0cmksICAg
MCBzdHJpcCwgICAzIGZhbiwgICAxNDMgaW5kLCAgICAgMi43IG1zCi1OZXc6ICAgNTc0IHZlcnQs
ICAgMSBjbnRyLCAgIDU3MiB0cmksICA1OSBzdHJpcCwgIDU0IGZhbiwgICAgMTEgaW5kLCAgICAy
Ni42IG1zCi1PbGQ6ICAgNTc0IHZlcnQsICAgMSBjbnRyLCAgIDU3MiB0cmksICAgMCBzdHJpcCwg
IDMxIGZhbiwgICA0OTkgaW5kLCAgICAxMi40IG1zCi0KLSAgTXVsdGlwbGUgY29udG91cnMsIGJ1
dCBubyBpbnRlcnNlY3Rpb25zOgotCi1OZXc6ICAgICA3IHZlcnQsICAgMiBjbnRyLCAgICAgNyB0
cmksICAgMSBzdHJpcCwgICAwIGZhbiwgICAgIDAgaW5kLCAgIDAuNTI3IG1zCi1PbGQ6ICAgICA3
IHZlcnQsICAgMiBjbnRyLCAgICAgNyB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDcgaW5k
LCAgIDAuMjc0IG1zCi1OZXc6ICAgIDgxIHZlcnQsICAgNiBjbnRyLCAgICA4OSB0cmksICAgOSBz
dHJpcCwgICA3IGZhbiwgICAgIDYgaW5kLCAgICAzLjg4IG1zCi1PbGQ6ICAgIDgxIHZlcnQsICAg
NiBjbnRyLCAgICA4OSB0cmksICAgMCBzdHJpcCwgIDEzIGZhbiwgICAgNjEgaW5kLCAgICAgMi4y
IG1zCi1OZXc6ICAgMzkxIHZlcnQsICAxOSBjbnRyLCAgIDQxMyB0cmksICAzNyBzdHJpcCwgIDMy
IGZhbiwgICAgMjYgaW5kLCAgICAyMC4yIG1zCi1PbGQ6ICAgMzkxIHZlcnQsICAxOSBjbnRyLCAg
IDQxMyB0cmksICAgMCBzdHJpcCwgIDI1IGZhbiwgICAzNjMgaW5kLCAgICA4LjY4IG1zCi0KLSAg
U2VsZi1pbnRlcnNlY3RpbmcgYW5kIGRlZ2VuZXJhdGUgZXhhbXBsZXM6Ci0KLUJvd3RpZTogIDQg
dmVydCwgICAxIGNudHIsICAgICAyIHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgMiBpbmQs
ICAgMC40ODMgbXMKLVN0YXI6ICAgIDUgdmVydCwgICAxIGNudHIsICAgICA1IHRyaSwgICAwIHN0
cmlwLCAgIDAgZmFuLCAgICAgNSBpbmQsICAgIDAuOTEgbXMKLVJhbmRvbTogMjQgdmVydCwgICA3
IGNudHIsICAgIDQ2IHRyaSwgICAyIHN0cmlwLCAgMTIgZmFuLCAgICAgNyBpbmQsICAgIDUuMzIg
bXMKLUZvbnQ6ICAzMzMgdmVydCwgICAyIGNudHIsICAgMzMxIHRyaSwgIDMyIHN0cmlwLCAgMTYg
ZmFuLCAgICAgMyBpbmQsICAgIDE0LjEgbXMKLTogICAgICAxNjcgdmVydCwgIDM1IGNudHIsICAg
MjU0IHRyaSwgICA4IHN0cmlwLCAgNTYgZmFuLCAgICA1MiBpbmQsICAgIDQ2LjMgbXMKLTogICAg
ICAgNzggdmVydCwgICAxIGNudHIsICAyNjc1IHRyaSwgMTQ4IHN0cmlwLCAyMDcgZmFuLCAgIDE4
MCBpbmQsICAgICAyNDMgbXMKLTogICAgMTI0ODAgdmVydCwgICAyIGNudHIsIDEyNDc4IHRyaSwg
NzM2IHN0cmlwLDEyNzUgZmFuLCAgICAgNSBpbmQsICAgIDEwMTAgbXMKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvYWxnLW91dGxpbmUKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9hbGctb3V0bGluZQkocmV2aXNp
b24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2FsZy1v
dXRsaW5lCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyOSArMCwwIEBACi0vKgotKiogJEhlYWRlcjog
L2N2cy9wcm9qZWN0cy9vZ2wtc2FtcGxlL21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9hbGctb3V0
bGluZSx2IDEuMSAyMDAwLzA0LzI2IDA1OjUzOjU5IGxqcCBFeHAgJAotKi8KLQotVGhpcyBpcyBv
bmx5IGEgdmVyeSBicmllZiBvdmVydmlldy4gIFRoZXJlIGlzIHF1aXRlIGEgYml0IG9mCi1hZGRp
dGlvbmFsIGRvY3VtZW50YXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KLQotCi1Hb2Fs
cyBvZiByb2J1c3QgdGVzc2VsYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1U
aGUgdGVzc2VsYXRpb24gYWxnb3JpdGhtIGlzIGZ1bmRhbWVudGFsbHkgYSAyRCBhbGdvcml0aG0u
ICBXZQotaW5pdGlhbGx5IHByb2plY3QgYWxsIGRhdGEgaW50byBhIHBsYW5lOyBvdXIgZ29hbCBp
cyB0byByb2J1c3RseQotdGVzc2VsYXRlIHRoZSBwcm9qZWN0ZWQgZGF0YS4gIFRoZSBzYW1lIHRv
cG9sb2dpY2FsIHRlc3NlbGF0aW9uIGlzCi10aGVuIGFwcGxpZWQgdG8gdGhlIGlucHV0IGRhdGEu
Ci0KLVRvcG9sb2dpY2FsbHksIHRoZSBvdXRwdXQgc2hvdWxkIGFsd2F5cyBiZSBhIHRlc3NlbGF0
aW9uLiAgSWYgdGhlCi1pbnB1dCBpcyBldmVuIHNsaWdodGx5IG5vbi1wbGFuYXIsIHRoZW4gc29t
ZSB0cmlhbmdsZXMgd2lsbAotbmVjZXNzYXJpbHkgYmUgYmFjay1mYWNpbmcgd2hlbiB2aWV3ZWQg
ZnJvbSBzb21lIGFuZ2xlcywgYnV0IHRoZSBnb2FsCi1pcyB0byBtaW5pbWl6ZSB0aGlzIGVmZmVj
dC4KLQotVGhlIGFsZ29yaXRobSBuZWVkcyBzb21lIGNhcGFiaWxpdHkgb2YgY2xlYW5pbmcgdXAg
dGhlIGlucHV0IGRhdGEgYXMKLXdlbGwgYXMgdGhlIG51bWVyaWNhbCBlcnJvcnMgaW4gaXRzIG93
biBjYWxjdWxhdGlvbnMuICBPbmUgd2F5IHRvIGRvCi10aGlzIGlzIHRvIHNwZWNpZnkgYSB0b2xl
cmFuY2UgYXMgZGVmaW5lZCBhYm92ZSwgYW5kIGNsZWFuIHVwIHRoZQotaW5wdXQgYW5kIG91dHB1
dCBkdXJpbmcgdGhlIGxpbmUgc3dlZXAgcHJvY2Vzcy4gIEF0IHRoZSB2ZXJ5IGxlYXN0LAotdGhl
IGFsZ29yaXRobSBtdXN0IGhhbmRsZSBjb2luY2lkZW50IHZlcnRpY2VzLCB2ZXJ0aWNlcyBpbmNp
ZGVudCB0byBhbgotZWRnZSwgYW5kIGNvaW5jaWRlbnQgZWRnZXMuCi0KLQotUGhhc2VzIG9mIHRo
ZSBhbGdvcml0aG0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEuIEZpbmQgdGhlIHBvbHln
b24gbm9ybWFsIE4uCi0yLiBQcm9qZWN0IHRoZSB2ZXJ0ZXggZGF0YSBvbnRvIGEgcGxhbmUuICBJ
dCBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gICBwZXJwZW5kaWN1bGFyIHRvIHRoZSBub3JtYWwsIGVn
LiB3ZSBjYW4gcHJvamVjdCBvbnRvIHRoZSBwbGFuZQotICAgcGVycGVuZGljdWxhciB0byB0aGUg
Y29vcmRpbmF0ZSBheGlzIHdob3NlIGRvdCBwcm9kdWN0IHdpdGggTgotICAgaXMgbGFyZ2VzdC4K
LTMuIFVzaW5nIGEgbGluZS1zd2VlcCBhbGdvcml0aG0sIHBhcnRpdGlvbiB0aGUgcGxhbmUgaW50
byB4LW1vbm90b25lCi0gICByZWdpb25zLiAgQW55IHZlcnRpY2FsIGxpbmUgaW50ZXJzZWN0cyBh
biB4LW1vbm90b25lIHJlZ2lvbiBpbgotICAgYXQgbW9zdCBvbmUgaW50ZXJ2YWwuCi00LiBUcmlh
bmd1bGF0ZSB0aGUgeC1tb25vdG9uZSByZWdpb25zLgotNS4gR3JvdXAgdGhlIHRyaWFuZ2xlcyBp
bnRvIHN0cmlwcyBhbmQgZmFucy4KLQotCi1GaW5kaW5nIHRoZSBub3JtYWwgdmVjdG9yCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgY29tbW9uIHdheSB0byBmaW5kIGEgcG9seWdvbiBu
b3JtYWwgaXMgdG8gY29tcHV0ZSB0aGUgc2lnbmVkIGFyZWEKLXdoZW4gdGhlIHBvbHlnb24gaXMg
cHJvamVjdGVkIGFsb25nIHRoZSB0aHJlZSBjb29yZGluYXRlIGF4ZXMuICBXZQotY2FuJ3QgZG8g
dGhpcywgc2luY2UgY29udG91cnMgY2FuIGhhdmUgemVybyBhcmVhIHdpdGhvdXQgYmVpbmcKLWRl
Z2VuZXJhdGUgKGVnLiBhIGJvd3RpZSkuCi0KLVdlIGZpdCBhIHBsYW5lIHRvIHRoZSB2ZXJ0ZXgg
ZGF0YSwgaWdub3JpbmcgaG93IHRoZXkgYXJlIGNvbm5lY3RlZAotaW50byBjb250b3Vycy4gIElk
ZWFsbHkgdGhpcyB3b3VsZCBiZSBhIGxlYXN0LXNxdWFyZXMgZml0OyBob3dldmVyIGZvcgotb3Vy
IHB1cnBvc2UgdGhlIGFjY3VyYWN5IG9mIHRoZSBub3JtYWwgaXMgbm90IGltcG9ydGFudC4gIElu
c3RlYWQgd2UKLWZpbmQgdGhyZWUgdmVydGljZXMgd2hpY2ggYXJlIHdpZGVseSBzZXBhcmF0ZWQs
IGFuZCBjb21wdXRlIHRoZSBub3JtYWwKLXRvIHRoZSB0cmlhbmdsZSB0aGV5IGZvcm0uICBUaGUg
dmVydGljZXMgYXJlIGNob3NlbiBzbyB0aGF0IHRoZQotdHJpYW5nbGUgaGFzIGFuIGFyZWEgYXQg
bGVhc3QgMS9zcXJ0KDMpIHRpbWVzIHRoZSBsYXJnZXN0IGFyZWEgb2YgYW55Ci10cmlhbmdsZSBm
b3JtZWQgdXNpbmcgdGhlIGlucHV0IHZlcnRpY2VzLiAgCi0KLVRoZSBjb250b3VycyBkbyBhZmZl
Y3QgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBub3JtYWw7IGFmdGVyIGNvbXB1dGluZwotdGhlIG5v
cm1hbCwgd2UgY2hlY2sgdGhhdCB0aGUgc3VtIG9mIHRoZSBzaWduZWQgY29udG91ciBhcmVhcyBp
cwotbm9uLW5lZ2F0aXZlLCBhbmQgcmV2ZXJzZSB0aGUgbm9ybWFsIGlmIG5lY2Vzc2FyeS4KLQot
Ci1Qcm9qZWN0aW5nIHRoZSB2ZXJ0aWNlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2Ug
cHJvamVjdCB0aGUgdmVydGljZXMgb250byBhIHBsYW5lIHBlcnBlbmRpY3VsYXIgdG8gb25lIG9m
IHRoZSB0aHJlZQotY29vcmRpbmF0ZSBheGVzLiAgVGhpcyBoZWxwcyBudW1lcmljYWwgYWNjdXJh
Y3kgYnkgcmVtb3ZpbmcgYQotdHJhbnNmb3JtYXRpb24gc3RlcCBiZXR3ZWVuIHRoZSBvcmlnaW5h
bCBpbnB1dCBkYXRhIGFuZCB0aGUgZGF0YQotcHJvY2Vzc2VkIGJ5IHRoZSBhbGdvcml0aG0uICBU
aGUgcHJvamVjdGlvbiBhbHNvIGNvbXByZXNzZXMgdGhlIGlucHV0Ci1kYXRhOyB0aGUgMkQgZGlz
dGFuY2UgYmV0d2VlbiB2ZXJ0aWNlcyBhZnRlciBwcm9qZWN0aW9uIG1heSBiZSBzbWFsbGVyCi10
aGFuIHRoZSBvcmlnaW5hbCAyRCBkaXN0YW5jZS4gIEhvd2V2ZXIgYnkgY2hvb3NpbmcgdGhlIGNv
b3JkaW5hdGUKLWF4aXMgd2hvc2UgZG90IHByb2R1Y3Qgd2l0aCB0aGUgbm9ybWFsIGlzIGdyZWF0
ZXN0LCB0aGUgY29tcHJlc3Npb24KLWZhY3RvciBpcyBhdCBtb3N0IDEvc3FydCgzKS4KLQotRXZl
biB0aG91Z2ggdGhlICphY2N1cmFjeSogb2YgdGhlIG5vcm1hbCBpcyBub3QgdGhhdCBpbXBvcnRh
bnQgKHNpbmNlCi13ZSBhcmUgcHJvamVjdGluZyBwZXJwZW5kaWN1bGFyIHRvIGEgY29vcmRpbmF0
ZSBheGlzIGFueXdheSksIHRoZQotKnJvYnVzdG5lc3MqIG9mIHRoZSBjb21wdXRhdGlvbiBpcyBp
bXBvcnRhbnQuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUKLWFyZSBtYW55IHZlcnRpY2VzIHdoaWNo
IGxpZSBhbG1vc3QgYWxvbmcgYSBsaW5lLCBhbmQgb25lIHZlcnRleCBWCi13aGljaCBpcyB3ZWxs
LXNlcGFyYXRlZCBmcm9tIHRoZSBsaW5lLCB0aGVuIG91ciBub3JtYWwgY29tcHV0YXRpb24KLXNo
b3VsZCBpbnZvbHZlIFYgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIHdpbGwgYmUgZ2FyYmFnZS4KLQot
VGhlIGFkdmFudGFnZSBvZiBwcm9qZWN0aW5nIHBlcnBlbmRpY3VsYXIgdG8gdGhlIHBvbHlnb24g
bm9ybWFsIGlzCi10aGF0IGNvbXB1dGVkIGludGVyc2VjdGlvbiBwb2ludHMgd2lsbCBiZSBhcyBj
bG9zZSBhcyBwb3NzaWJsZSB0bwotdGhlaXIgaWRlYWwgbG9jYXRpb25zLiAgVG8gZ2V0IHRoaXMg
YmVoYXZpb3IsIGRlZmluZSBUUlVFX1BST0pFQ1QuCi0KLQotVGhlIExpbmUgU3dlZXAKLS0tLS0t
LS0tLS0tLS0tCi0KLVRoZXJlIGFyZSB0aHJlZSBkYXRhIHN0cnVjdHVyZXM6IHRoZSBtZXNoLCB0
aGUgZXZlbnQgcXVldWUsIGFuZCB0aGUKLWVkZ2UgZGljdGlvbmFyeS4KLQotVGhlIG1lc2ggaXMg
YSAicXVhZC1lZGdlIiBkYXRhIHN0cnVjdHVyZSB3aGljaCByZWNvcmRzIHRoZSB0b3BvbG9neSBv
ZgotdGhlIGN1cnJlbnQgZGVjb21wb3NpdGlvbjsgZm9yIGRldGFpbHMgc2VlIHRoZSBpbmNsdWRl
IGZpbGUgIm1lc2guaCIuCi0KLVRoZSBldmVudCBxdWV1ZSBzaW1wbHkgaG9sZHMgYWxsIHZlcnRp
Y2VzIChib3RoIG9yaWdpbmFsIGFuZCBjb21wdXRlZAotb25lcyksIG9yZ2FuaXplZCBzbyB0aGF0
IHdlIGNhbiBxdWlja2x5IGV4dHJhY3QgdGhlIHZlcnRleCB3aXRoIHRoZQotbWluaW11bSB4LWNv
b3JkIChhbmQgYW1vbmcgdGhvc2UsIHRoZSBvbmUgd2l0aCB0aGUgbWluaW11bSB5LWNvb3JkKS4K
LQotVGhlIGVkZ2UgZGljdGlvbmFyeSBkZXNjcmliZXMgdGhlIGN1cnJlbnQgaW50ZXJzZWN0aW9u
IG9mIHRoZSBzd2VlcAotbGluZSB3aXRoIHRoZSByZWdpb25zIG9mIHRoZSBwb2x5Z29uLiAgVGhp
cyBpcyBqdXN0IGFuIG9yZGVyaW5nIG9mIHRoZQotZWRnZXMgd2hpY2ggaW50ZXJzZWN0IHRoZSBz
d2VlcCBsaW5lLCBzb3J0ZWQgYnkgdGhlaXIgY3VycmVudCBvcmRlciBvZgotaW50ZXJzZWN0aW9u
LiAgRm9yIGVhY2ggcGFpciBvZiBlZGdlcywgd2Ugc3RvcmUgc29tZSBpbmZvcm1hdGlvbiBhYm91
dAotdGhlIG1vbm90b25lIHJlZ2lvbiBiZXR3ZWVuIHRoZW0gLS0gdGhlc2UgYXJlIGNhbGwgImFj
dGl2ZSByZWdpb25zIgotKHNpbmNlIHRoZXkgYXJlIGNyb3NzZWQgYnkgdGhlIGN1cnJlbnQgc3dl
ZXAgbGluZSkuCi0KLVRoZSBiYXNpYyBhbGdvcml0aG0gaXMgdG8gc3dlZXAgZnJvbSBsZWZ0IHRv
IHJpZ2h0LCBwcm9jZXNzaW5nIGVhY2gKLXZlcnRleC4gIFRoZSBwcm9jZXNzZWQgcG9ydGlvbiBv
ZiB0aGUgbWVzaCAobGVmdCBvZiB0aGUgc3dlZXAgbGluZSkgaXMKLWEgcGxhbmFyIGRlY29tcG9z
aXRpb24uICBBcyB3ZSBjcm9zcyBlYWNoIHZlcnRleCwgd2UgdXBkYXRlIHRoZSBtZXNoCi1hbmQg
dGhlIGVkZ2UgZGljdGlvbmFyeSwgdGhlbiB3ZSBjaGVjayBhbnkgbmV3bHkgYWRqYWNlbnQgcGFp
cnMgb2YKLWVkZ2VzIHRvIHNlZSBpZiB0aGV5IGludGVyc2VjdC4KLQotQSB2ZXJ0ZXggY2FuIGhh
dmUgYW55IG51bWJlciBvZiBlZGdlcy4gIFZlcnRpY2VzIHdpdGggbWFueSBlZGdlcyBjYW4KLWJl
IGNyZWF0ZWQgYXMgdmVydGljZXMgYXJlIG1lcmdlZCBhbmQgaW50ZXJzZWN0aW9uIHBvaW50cyBh
cmUKLWNvbXB1dGVkLiAgRm9yIHVucHJvY2Vzc2VkIHZlcnRpY2VzIChyaWdodCBvZiB0aGUgc3dl
ZXAgbGluZSksIHRoZXNlCi1lZGdlcyBhcmUgaW4gbm8gcGFydGljdWxhciBvcmRlciBhcm91bmQg
dGhlIHZlcnRleDsgZm9yIHByb2Nlc3NlZAotdmVydGljZXMsIHRoZSB0b3BvbG9naWNhbCBvcmRl
cmluZyBzaG91bGQgbWF0Y2ggdGhlIGdlb21ldHJpYyBvcmRlcmluZy4KLQotVGhlIHZlcnRleCBw
cm9jZXNzaW5nIGhhcHBlbnMgaW4gdHdvIHBoYXNlczogZmlyc3Qgd2UgcHJvY2VzcyBhcmUgdGhl
Ci1sZWZ0LWdvaW5nIGVkZ2VzIChhbGwgdGhlc2UgZWRnZXMgYXJlIGN1cnJlbnRseSBpbiB0aGUg
ZWRnZQotZGljdGlvbmFyeSkuICBUaGlzIGludm9sdmVzOgotCi0gLSBkZWxldGluZyB0aGUgbGVm
dC1nb2luZyBlZGdlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5OwotIC0gcmVsaW5raW5nIHRoZSBtZXNo
IGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWRnZXMgYXJvdW5kCi0g
ICB0aGUgZXZlbnQgdmVydGV4IG1hdGNoZXMgdGhlIG9yZGVyIGluIHRoZSBkaWN0aW9uYXJ5Owot
IC0gbWFya2luZyBhbnkgdGVybWluYXRlZCByZWdpb25zIChyZWdpb25zIHdoaWNoIGxpZSBiZXR3
ZWVuIHR3byBsZWZ0LWdvaW5nCi0gICBlZGdlcykgYXMgZWl0aGVyICJpbnNpZGUiIG9yICJvdXRz
aWRlIiBhY2NvcmRpbmcgdG8gdGhlaXIgd2luZGluZyBudW1iZXIuCi0KLVdoZW4gdGhlcmUgYXJl
IG5vIGxlZnQtZ29pbmcgZWRnZXMsIGFuZCB0aGUgZXZlbnQgdmVydGV4IGlzIGluIGFuCi0iaW50
ZXJpb3IiIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGQgYW4gZWRnZSAodG8gc3BsaXQgdGhlIHJlZ2lv
biBpbnRvCi1tb25vdG9uZSBwaWVjZXMpLiAgVG8gZG8gdGhpcyB3ZSBzaW1wbHkgam9pbiB0aGUg
ZXZlbnQgdmVydGV4IHRvIHRoZQotcmlnaHRtb3N0IGxlZnQgZW5kcG9pbnQgb2YgdGhlIHVwcGVy
IG9yIGxvd2VyIGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcKLXJlZ2lvbi4KLQotVGhlbiB3ZSBwcm9j
ZXNzIHRoZSByaWdodC1nb2luZyBlZGdlcy4gIFRoaXMgaW52b2x2ZXM6Ci0KLSAtIGluc2VydGlu
ZyB0aGUgZWRnZXMgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeTsKLSAtIGNvbXB1dGluZyB0aGUgd2lu
ZGluZyBudW1iZXIgb2YgYW55IG5ld2x5IGNyZWF0ZWQgYWN0aXZlIHJlZ2lvbnMuCi0gICBXZSBj
YW4gY29tcHV0ZSB0aGlzIGluY3JlbWVudGFsbHkgdXNpbmcgdGhlIHdpbmRpbmcgb2YgZWFjaCBl
ZGdlCi0gICB0aGF0IHdlIGNyb3NzIGFzIHdlIHdhbGsgdGhyb3VnaCB0aGUgZGljdGlvbmFyeS4K
LSAtIHJlbGlua2luZyB0aGUgbWVzaCBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIG9yZGVyIG9m
IHRoZXNlIGVkZ2VzIGFyb3VuZAotICAgdGhlIGV2ZW50IHZlcnRleCBtYXRjaGVzIHRoZSBvcmRl
ciBpbiB0aGUgZGljdGlvbmFyeTsKLSAtIGNoZWNraW5nIGFueSBuZXdseSBhZGphY2VudCBlZGdl
cyBmb3IgaW50ZXJzZWN0aW9uIGFuZC9vciBtZXJnaW5nLgotCi1JZiB0aGVyZSBhcmUgbm8gcmln
aHQtZ29pbmcgZWRnZXMsIGFnYWluIHdlIG5lZWQgdG8gYWRkIG9uZSB0byBzcGxpdAotdGhlIGNv
bnRhaW5pbmcgcmVnaW9uIGludG8gbW9ub3RvbmUgcGllY2VzLiAgSW4gb3VyIGNhc2UgaXQgaXMg
bW9zdAotY29udmVuaWVudCB0byBhZGQgYW4gZWRnZSB0byB0aGUgbGVmdG1vc3QgcmlnaHQgZW5k
cG9pbnQgb2YgZWl0aGVyCi1jb250YWluaW5nIGVkZ2U7IGhvd2V2ZXIgd2UgbWF5IG5lZWQgdG8g
Y2hhbmdlIHRoaXMgbGF0ZXIgKHNlZSB0aGUKLWNvZGUgZm9yIGRldGFpbHMpLgotCi0KLUludmFy
aWFudHMKLS0tLS0tLS0tLS0KLQotVGhlc2UgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBpbnZhcmlh
bnRzIG1haW50YWluZWQgZHVyaW5nIHRoZSBzd2VlcC4KLVdlIGRlZmluZSBhIGZ1bmN0aW9uIFZl
cnRMZXEodjEsdjIpIHdoaWNoIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoCi12ZXJ0aWNlcyBj
cm9zcyB0aGUgc3dlZXAgbGluZSwgYW5kIGEgZnVuY3Rpb24gRWRnZUxlcShlMSxlMjsgbG9jKQot
d2hpY2ggc2F5cyB3aGV0aGVyIGUxIGlzIGJlbG93IGUyIGF0IHRoZSBzd2VlcCBldmVudCBsb2Nh
dGlvbiAibG9jIi4KLVRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBvbmx5IGF0IHN3ZWVwIGV2ZW50
IGxvY2F0aW9ucyB3aGljaCBsaWUKLWJldHdlZW4gdGhlIHJpZ2h0bW9zdCBsZWZ0IGVuZHBvaW50
IG9mIHtlMSxlMn0sIGFuZCB0aGUgbGVmdG1vc3QgcmlnaHQKLWVuZHBvaW50IG9mIHtlMSxlMn0u
Ci0KLUludmFyaWFudHMgZm9yIHRoZSBFZGdlIERpY3Rpb25hcnkuCi0KLSAtIEVhY2ggcGFpciBv
ZiBhZGphY2VudCBlZGdlcyBlMj1TdWNjKGUxKSBzYXRpc2ZpZXMgRWRnZUxlcShlMSxlMikKLSAg
IGF0IGFueSB2YWxpZCBsb2NhdGlvbiBvZiB0aGUgc3dlZXAgZXZlbnQuCi0gLSBJZiBFZGdlTGVx
KGUyLGUxKSBhcyB3ZWxsIChhdCBhbnkgdmFsaWQgc3dlZXAgZXZlbnQpLCB0aGVuIGUxIGFuZCBl
MgotICAgc2hhcmUgYSBjb21tb24gZW5kcG9pbnQuCi0gLSBGb3IgZWFjaCBlIGluIHRoZSBkaWN0
aW9uYXJ5LCBlLT5Ec3QgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ1dCBub3QgZS0+T3JnLgotIC0gRWFj
aCBlZGdlIGUgc2F0aXNmaWVzIFZlcnRMZXEoZS0+RHN0LGV2ZW50KSAmJiBWZXJ0TGVxKGV2ZW50
LGUtPk9yZykKLSAgIHdoZXJlICJldmVudCIgaXMgdGhlIGN1cnJlbnQgc3dlZXAgbGluZSBldmVu
dC4KLSAtIE5vIGVkZ2UgZSBoYXMgemVybyBsZW5ndGguCi0gLSBObyB0d28gZWRnZXMgaGF2ZSBp
ZGVudGljYWwgbGVmdCBhbmQgcmlnaHQgZW5kcG9pbnRzLgotIAotSW52YXJpYW50cyBmb3IgdGhl
IE1lc2ggKHRoZSBwcm9jZXNzZWQgcG9ydGlvbikuCi0KLSAtIFRoZSBwb3J0aW9uIG9mIHRoZSBt
ZXNoIGxlZnQgb2YgdGhlIHN3ZWVwIGxpbmUgaXMgYSBwbGFuYXIgZ3JhcGgsCi0gICBpZS4gdGhl
cmUgaXMgKnNvbWUqIHdheSB0byBlbWJlZCBpdCBpbiB0aGUgcGxhbmUuCi0gLSBObyBwcm9jZXNz
ZWQgZWRnZSBoYXMgemVybyBsZW5ndGguCi0gLSBObyB0d28gcHJvY2Vzc2VkIHZlcnRpY2VzIGhh
dmUgaWRlbnRpY2FsIGNvb3JkaW5hdGVzLgotIC0gRWFjaCAiaW5zaWRlIiByZWdpb24gaXMgbW9u
b3RvbmUsIGllLiBjYW4gYmUgYnJva2VuIGludG8gdHdvIGNoYWlucwotICAgb2YgbW9ub3Rvbmlj
YWxseSBpbmNyZWFzaW5nIHZlcnRpY2VzIGFjY29yZGluZyB0byBWZXJ0TGVxKHYxLHYyKQotICAg
LSBhIG5vbi1pbnZhcmlhbnQ6IHRoZXNlIGNoYWlucyBtYXkgaW50ZXJzZWN0IChzbGlnaHRseSkg
ZHVlIHRvCi0gICAgIG51bWVyaWNhbCBlcnJvcnMsIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCB0
aGUgYWxnb3JpdGhtJ3Mgb3BlcmF0aW9uLgotCi1JbnZhcmlhbnRzIGZvciB0aGUgU3dlZXAuCi0K
LSAtIElmIGEgdmVydGV4IGhhcyBhbnkgbGVmdC1nb2luZyBlZGdlcywgdGhlbiB0aGVzZSBtdXN0
IGJlIGluIHRoZSBlZGdlCi0gICBkaWN0aW9uYXJ5IGF0IHRoZSB0aW1lIHRoZSB2ZXJ0ZXggaXMg
cHJvY2Vzc2VkLgotIC0gSWYgYW4gZWRnZSBpcyBtYXJrZWQgImZpeFVwcGVyRWRnZSIgKGl0IGlz
IGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9kdWNlZAotICAgYnkgQ29ubmVjdFJpZ2h0VmVydGV4KSwg
dGhlbiBpdCBpcyB0aGUgb25seSByaWdodC1nb2luZyBlZGdlIGZyb20KLSAgIGl0cyBhc3NvY2lh
dGVkIHZlcnRleC4gIChUaGlzIHNheXMgdGhhdCB0aGVzZSBlZGdlcyBleGlzdCBvbmx5Ci0gICB3
aGVuIGl0IGlzIG5lY2Vzc2FyeS4pCi0KLQotUm9idXN0bmVzcwotLS0tLS0tLS0tLQotCi1UaGUg
a2V5IHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBhbGdvcml0aG0gaXMgbWFpbnRhaW5pbmcgdGhl
Ci1pbnZhcmlhbnRzIGFib3ZlLCBlc3BlY2lhbGx5IHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIHRo
ZSBlZGdlCi1kaWN0aW9uYXJ5LiAgV2UgYWNoaWV2ZSB0aGlzIGJ5OgotCi0gIDEuIFdyaXRpbmcg
dGhlIG51bWVyaWNhbCBjb21wdXRhdGlvbnMgZm9yIG1heGltdW0gcHJlY2lzaW9uIHJhdGhlcgot
ICAgICB0aGFuIG1heGltdW0gc3BlZWQuCi0gICAgIAotICAyLiBNYWtpbmcgbm8gYXNzdW1wdGlv
bnMgYXQgYWxsIGFib3V0IHRoZSByZXN1bHRzIG9mIHRoZSBlZGdlCi0gICAgIGludGVyc2VjdGlv
biBjYWxjdWxhdGlvbnMgLS0gZm9yIHN1ZmZpY2llbnRseSBkZWdlbmVyYXRlIGlucHV0cywKLSAg
ICAgdGhlIGNvbXB1dGVkIGxvY2F0aW9uIGlzIG5vdCBtdWNoIGJldHRlciB0aGFuIGEgcmFuZG9t
IG51bWJlci4KLSAgICAgCi0gIDMuIFdoZW4gbnVtZXJpY2FsIGVycm9ycyB2aW9sYXRlIHRoZSBp
bnZhcmlhbnRzLCByZXN0b3JlIHRoZW0KLSAgICAgYnkgbWFraW5nICp0b3BvbG9naWNhbCogY2hh
bmdlcyB3aGVuIG5lY2Vzc2FyeSAoaWUuIHJlbGlua2luZwotICAgICB0aGUgbWVzaCBzdHJ1Y3R1
cmUpLgotICAgICAKLSAgICAgCi1Ucmlhbmd1bGF0aW9uIGFuZCBHcm91cGluZwotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotV2UgZmluaXNoIHRoZSBsaW5lIHN3ZWVwIGJlZm9yZSBkb2lu
ZyBhbnkgdHJpYW5ndWxhdGlvbi4gIFRoaXMgaXMKLWJlY2F1c2UgZXZlbiBhZnRlciBhIG1vbm90
b25lIHJlZ2lvbiBpcyBjb21wbGV0ZSwgdGhlcmUgY2FuIGJlIGZ1cnRoZXIKLWNoYW5nZXMgdG8g
aXRzIHZlcnRleCBkYXRhIGJlY2F1c2Ugb2YgZnVydGhlciB2ZXJ0ZXggbWVyZ2luZy4KLQotQWZ0
ZXIgdHJpYW5ndWxhdGluZyBhbGwgbW9ub3RvbmUgcmVnaW9ucywgd2Ugd2FudCB0byBncm91cCB0
aGUKLXRyaWFuZ2xlcyBpbnRvIGZhbnMgYW5kIHN0cmlwcy4gIFdlIGRvIHRoaXMgdXNpbmcgYSBn
cmVlZHkgYXBwcm9hY2guCi1UaGUgdHJpYW5ndWxhdGlvbiBpdHNlbGYgaXMgbm90IG9wdGltaXpl
ZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZgotcHJpbWl0aXZlczsgd2UganVzdCB0cnkgdG8gZ2V0
IGEgcmVhc29uYWJsZSBkZWNvbXBvc2l0aW9uIG9mIHRoZQotY29tcHV0ZWQgdHJpYW5ndWxhdGlv
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC1saXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9k
aWN0LWxpc3QuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNyArMCwwIEBA
Ci0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0
aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUg
bGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNl
IEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoq
IGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4g
WW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBT
aWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1w
aGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0Ogot
KiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0
aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVE
IFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lU
SE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9O
UyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBB
Ci0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBP
cmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1l
bnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRl
dmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5
cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRp
Y2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoq
IEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWlu
ZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0
aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBB
IFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5
OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9u
Ci0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBo
aWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFz
ZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcg
dGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVi
bGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFz
IGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3Bl
Y2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0
LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4
L2xpYi9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19kaWN0X2xp
c3RfaF8KLSNkZWZpbmUgX19kaWN0X2xpc3RfaF8KLQotLyogVXNlICNkZWZpbmUncyBzbyB0aGF0
IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNkZWZp
bmUgRGljdEtleQkJRGljdExpc3RLZXkKLSNkZWZpbmUgRGljdAkJRGljdExpc3QKLSNkZWZpbmUg
RGljdE5vZGUJRGljdExpc3ROb2RlCi0KLSNkZWZpbmUgZGljdE5ld0RpY3QoZnJhbWUsbGVxKQkJ
X19nbF9kaWN0TGlzdE5ld0RpY3QoZnJhbWUsbGVxKQotI2RlZmluZSBkaWN0RGVsZXRlRGljdChk
aWN0KQkJX19nbF9kaWN0TGlzdERlbGV0ZURpY3QoZGljdCkKLQotI2RlZmluZSBkaWN0U2VhcmNo
KGRpY3Qsa2V5KQkJX19nbF9kaWN0TGlzdFNlYXJjaChkaWN0LGtleSkKLSNkZWZpbmUgZGljdElu
c2VydChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RJbnNlcnQoZGljdCxrZXkpCi0jZGVmaW5lIGRp
Y3RJbnNlcnRCZWZvcmUoZGljdCxub2RlLGtleSkJX19nbF9kaWN0TGlzdEluc2VydEJlZm9yZShk
aWN0LG5vZGUsa2V5KQotI2RlZmluZSBkaWN0RGVsZXRlKGRpY3Qsbm9kZSkJCV9fZ2xfZGljdExp
c3REZWxldGUoZGljdCxub2RlKQotCi0jZGVmaW5lIGRpY3RLZXkobikJCQlfX2dsX2RpY3RMaXN0
S2V5KG4pCi0jZGVmaW5lIGRpY3RTdWNjKG4pCQkJX19nbF9kaWN0TGlzdFN1Y2MobikKLSNkZWZp
bmUgZGljdFByZWQobikJCQlfX2dsX2RpY3RMaXN0UHJlZChuKQotI2RlZmluZSBkaWN0TWluKGQp
CQkJX19nbF9kaWN0TGlzdE1pbihkKQotI2RlZmluZSBkaWN0TWF4KGQpCQkJX19nbF9kaWN0TGlz
dE1heChkKQotCi0KLQotdHlwZWRlZiB2b2lkICpEaWN0S2V5OwotdHlwZWRlZiBzdHJ1Y3QgRGlj
dCBEaWN0OwotdHlwZWRlZiBzdHJ1Y3QgRGljdE5vZGUgRGljdE5vZGU7Ci0KLURpY3QJCSpkaWN0
TmV3RGljdCgKLQkJCXZvaWQgKmZyYW1lLAotCQkJaW50ICgqbGVxKSh2b2lkICpmcmFtZSwgRGlj
dEtleSBrZXkxLCBEaWN0S2V5IGtleTIpICk7Ci0JCQkKLXZvaWQJCWRpY3REZWxldGVEaWN0KCBE
aWN0ICpkaWN0ICk7Ci0KLS8qIFNlYXJjaCByZXR1cm5zIHRoZSBub2RlIHdpdGggdGhlIHNtYWxs
ZXN0IGtleSBncmVhdGVyIHRoYW4gb3IgZXF1YWwKLSAqIHRvIHRoZSBnaXZlbiBrZXkuICBJZiB0
aGVyZSBpcyBubyBzdWNoIGtleSwgcmV0dXJucyBhIG5vZGUgd2hvc2UKLSAqIGtleSBpcyBOVUxM
LiAgU2ltaWxhcmx5LCBTdWNjKE1heChkKSkgaGFzIGEgTlVMTCBrZXksIGV0Yy4KLSAqLwotRGlj
dE5vZGUJKmRpY3RTZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICk7Ci1EaWN0Tm9kZQkq
ZGljdEluc2VydEJlZm9yZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUsIERpY3RLZXkga2V5
ICk7Ci12b2lkCQlkaWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApOwotCi0j
ZGVmaW5lCQlfX2dsX2RpY3RMaXN0S2V5KG4pCSgobiktPmtleSkKLSNkZWZpbmUJCV9fZ2xfZGlj
dExpc3RTdWNjKG4pCSgobiktPm5leHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0UHJlZChuKQko
KG4pLT5wcmV2KQotI2RlZmluZQkJX19nbF9kaWN0TGlzdE1pbihkKQkoKGQpLT5oZWFkLm5leHQp
Ci0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0TWF4KGQpCSgoZCktPmhlYWQucHJldikKLSNkZWZpbmUJ
ICAgICAgIF9fZ2xfZGljdExpc3RJbnNlcnQoZCxrKSAoZGljdEluc2VydEJlZm9yZSgoZCksJihk
KS0+aGVhZCwoaykpKQotCi0KLS8qKiogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKioqLwotCi1z
dHJ1Y3QgRGljdE5vZGUgewotICBEaWN0S2V5CWtleTsKLSAgRGljdE5vZGUJKm5leHQ7Ci0gIERp
Y3ROb2RlCSpwcmV2OwotfTsKLQotc3RydWN0IERpY3QgewotICBEaWN0Tm9kZQloZWFkOwotICB2
b2lkCQkqZnJhbWU7Ci0gIGludAkJKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERp
Y3RLZXkga2V5Mik7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvZGljdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEx
NyArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAot
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgot
KiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
Ci0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9kaWN0LmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCIKLSNp
bmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0KLS8qIHJlYWxseSBf
X2dsX2RpY3RMaXN0TmV3RGljdCAqLwotRGljdCAqZGljdE5ld0RpY3QoIHZvaWQgKmZyYW1lLAot
CQkgICBpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERpY3RLZXkga2V5Mikg
KQotewotICBEaWN0ICpkaWN0ID0gKERpY3QgKikgbWVtQWxsb2MoIHNpemVvZiggRGljdCApKTsK
LSAgRGljdE5vZGUgKmhlYWQ7Ci0KLSAgaWYgKGRpY3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0K
LSAgaGVhZCA9ICZkaWN0LT5oZWFkOwotCi0gIGhlYWQtPmtleSA9IE5VTEw7Ci0gIGhlYWQtPm5l
eHQgPSBoZWFkOwotICBoZWFkLT5wcmV2ID0gaGVhZDsKLQotICBkaWN0LT5mcmFtZSA9IGZyYW1l
OwotICBkaWN0LT5sZXEgPSBsZXE7Ci0KLSAgcmV0dXJuIGRpY3Q7Ci19Ci0KLS8qIHJlYWxseSBf
X2dsX2RpY3RMaXN0RGVsZXRlRGljdCAqLwotdm9pZCBkaWN0RGVsZXRlRGljdCggRGljdCAqZGlj
dCApCi17Ci0gIERpY3ROb2RlICpub2RlOwotCi0gIGZvciggbm9kZSA9IGRpY3QtPmhlYWQubmV4
dDsgbm9kZSAhPSAmZGljdC0+aGVhZDsgbm9kZSA9IG5vZGUtPm5leHQgKSB7Ci0gICAgbWVtRnJl
ZSggbm9kZSApOwotICB9Ci0gIG1lbUZyZWUoIGRpY3QgKTsKLX0KLQotLyogcmVhbGx5IF9fZ2xf
ZGljdExpc3RJbnNlcnRCZWZvcmUgKi8KLURpY3ROb2RlICpkaWN0SW5zZXJ0QmVmb3JlKCBEaWN0
ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBrZXkgKQotewotICBEaWN0Tm9kZSAqbmV3
Tm9kZTsKLQotICBkbyB7Ci0gICAgbm9kZSA9IG5vZGUtPnByZXY7Ci0gIH0gd2hpbGUoIG5vZGUt
PmtleSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3QtPmZyYW1lLCBub2RlLT5rZXksIGtl
eSkpOwotCi0gIG5ld05vZGUgPSAoRGljdE5vZGUgKikgbWVtQWxsb2MoIHNpemVvZiggRGljdE5v
ZGUgKSk7Ci0gIGlmIChuZXdOb2RlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIG5ld05vZGUt
PmtleSA9IGtleTsKLSAgbmV3Tm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0gIG5vZGUtPm5leHQt
PnByZXYgPSBuZXdOb2RlOwotICBuZXdOb2RlLT5wcmV2ID0gbm9kZTsKLSAgbm9kZS0+bmV4dCA9
IG5ld05vZGU7Ci0KLSAgcmV0dXJuIG5ld05vZGU7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX2RpY3RM
aXN0RGVsZXRlICovCi12b2lkIGRpY3REZWxldGUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2Rl
ICkgLypBUkdTVVNFRCovCi17Ci0gIG5vZGUtPm5leHQtPnByZXYgPSBub2RlLT5wcmV2OwotICBu
b2RlLT5wcmV2LT5uZXh0ID0gbm9kZS0+bmV4dDsKLSAgbWVtRnJlZSggbm9kZSApOwotfQotCi0v
KiByZWFsbHkgX19nbF9kaWN0TGlzdFNlYXJjaCAqLwotRGljdE5vZGUgKmRpY3RTZWFyY2goIERp
Y3QgKmRpY3QsIERpY3RLZXkga2V5ICkKLXsKLSAgRGljdE5vZGUgKm5vZGUgPSAmZGljdC0+aGVh
ZDsKLQotICBkbyB7Ci0gICAgbm9kZSA9IG5vZGUtPm5leHQ7Ci0gIH0gd2hpbGUoIG5vZGUtPmtl
eSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3QtPmZyYW1lLCBrZXksIG5vZGUtPmtleSkp
OwotCi0gIHJldHVybiBub2RlOwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9kaWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9kaWN0LmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA3ICsw
LDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50
IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5h
dGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExp
Y2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhp
cwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNl
IGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0q
KiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3Ig
YXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBO
b3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlz
dHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElN
UExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5H
LCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05E
SVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1Mg
Rk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAK
LSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIElt
cGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAw
MCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoq
IENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFz
IGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoq
IAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dy
YW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3
aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAx
LCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZl
cnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikg
R3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCBy
ZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1
c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0q
KiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZp
ZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5
IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFp
bi9nZngvbGliL2dsdS9saWJ0ZXNzL2RpY3QuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19kaWN0X2xp
c3RfaF8KLSNkZWZpbmUgX19kaWN0X2xpc3RfaF8KLQotLyogVXNlICNkZWZpbmUncyBzbyB0aGF0
IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNkZWZp
bmUgRGljdEtleQkJRGljdExpc3RLZXkKLSNkZWZpbmUgRGljdAkJRGljdExpc3QKLSNkZWZpbmUg
RGljdE5vZGUJRGljdExpc3ROb2RlCi0KLSNkZWZpbmUgZGljdE5ld0RpY3QoZnJhbWUsbGVxKQkJ
X19nbF9kaWN0TGlzdE5ld0RpY3QoZnJhbWUsbGVxKQotI2RlZmluZSBkaWN0RGVsZXRlRGljdChk
aWN0KQkJX19nbF9kaWN0TGlzdERlbGV0ZURpY3QoZGljdCkKLQotI2RlZmluZSBkaWN0U2VhcmNo
KGRpY3Qsa2V5KQkJX19nbF9kaWN0TGlzdFNlYXJjaChkaWN0LGtleSkKLSNkZWZpbmUgZGljdElu
c2VydChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RJbnNlcnQoZGljdCxrZXkpCi0jZGVmaW5lIGRp
Y3RJbnNlcnRCZWZvcmUoZGljdCxub2RlLGtleSkJX19nbF9kaWN0TGlzdEluc2VydEJlZm9yZShk
aWN0LG5vZGUsa2V5KQotI2RlZmluZSBkaWN0RGVsZXRlKGRpY3Qsbm9kZSkJCV9fZ2xfZGljdExp
c3REZWxldGUoZGljdCxub2RlKQotCi0jZGVmaW5lIGRpY3RLZXkobikJCQlfX2dsX2RpY3RMaXN0
S2V5KG4pCi0jZGVmaW5lIGRpY3RTdWNjKG4pCQkJX19nbF9kaWN0TGlzdFN1Y2MobikKLSNkZWZp
bmUgZGljdFByZWQobikJCQlfX2dsX2RpY3RMaXN0UHJlZChuKQotI2RlZmluZSBkaWN0TWluKGQp
CQkJX19nbF9kaWN0TGlzdE1pbihkKQotI2RlZmluZSBkaWN0TWF4KGQpCQkJX19nbF9kaWN0TGlz
dE1heChkKQotCi0KLQotdHlwZWRlZiB2b2lkICpEaWN0S2V5OwotdHlwZWRlZiBzdHJ1Y3QgRGlj
dCBEaWN0OwotdHlwZWRlZiBzdHJ1Y3QgRGljdE5vZGUgRGljdE5vZGU7Ci0KLURpY3QJCSpkaWN0
TmV3RGljdCgKLQkJCXZvaWQgKmZyYW1lLAotCQkJaW50ICgqbGVxKSh2b2lkICpmcmFtZSwgRGlj
dEtleSBrZXkxLCBEaWN0S2V5IGtleTIpICk7Ci0JCQkKLXZvaWQJCWRpY3REZWxldGVEaWN0KCBE
aWN0ICpkaWN0ICk7Ci0KLS8qIFNlYXJjaCByZXR1cm5zIHRoZSBub2RlIHdpdGggdGhlIHNtYWxs
ZXN0IGtleSBncmVhdGVyIHRoYW4gb3IgZXF1YWwKLSAqIHRvIHRoZSBnaXZlbiBrZXkuICBJZiB0
aGVyZSBpcyBubyBzdWNoIGtleSwgcmV0dXJucyBhIG5vZGUgd2hvc2UKLSAqIGtleSBpcyBOVUxM
LiAgU2ltaWxhcmx5LCBTdWNjKE1heChkKSkgaGFzIGEgTlVMTCBrZXksIGV0Yy4KLSAqLwotRGlj
dE5vZGUJKmRpY3RTZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICk7Ci1EaWN0Tm9kZQkq
ZGljdEluc2VydEJlZm9yZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUsIERpY3RLZXkga2V5
ICk7Ci12b2lkCQlkaWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApOwotCi0j
ZGVmaW5lCQlfX2dsX2RpY3RMaXN0S2V5KG4pCSgobiktPmtleSkKLSNkZWZpbmUJCV9fZ2xfZGlj
dExpc3RTdWNjKG4pCSgobiktPm5leHQpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0UHJlZChuKQko
KG4pLT5wcmV2KQotI2RlZmluZQkJX19nbF9kaWN0TGlzdE1pbihkKQkoKGQpLT5oZWFkLm5leHQp
Ci0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0TWF4KGQpCSgoZCktPmhlYWQucHJldikKLSNkZWZpbmUJ
ICAgICAgIF9fZ2xfZGljdExpc3RJbnNlcnQoZCxrKSAoZGljdEluc2VydEJlZm9yZSgoZCksJihk
KS0+aGVhZCwoaykpKQotCi0KLS8qKiogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKioqLwotCi1z
dHJ1Y3QgRGljdE5vZGUgewotICBEaWN0S2V5CWtleTsKLSAgRGljdE5vZGUJKm5leHQ7Ci0gIERp
Y3ROb2RlCSpwcmV2OwotfTsKLQotc3RydWN0IERpY3QgewotICBEaWN0Tm9kZQloZWFkOwotICB2
b2lkCQkqZnJhbWU7Ci0gIGludAkJKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERp
Y3RLZXkga2V5Mik7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3
MSArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAot
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgot
KiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
Ci0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9nZW9tLmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNpbmNsdWRlICJ0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL2dlb20uaCIKLQotaW50IF9fZ2xfdmVydExlcSggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXgg
KnYgKQotewotICAvKiBSZXR1cm5zIFRSVUUgaWYgdSBpcyBsZXhpY29ncmFwaGljYWxseSA8PSB2
LiAqLwotCi0gIHJldHVybiBWZXJ0TGVxKCB1LCB2ICk7Ci19Ci0KLUdMZG91YmxlIF9fZ2xfZWRn
ZUV2YWwoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQotewotICAv
KiBHaXZlbiB0aHJlZSB2ZXJ0aWNlcyB1LHYsdyBzdWNoIHRoYXQgVmVydExlcSh1LHYpICYmIFZl
cnRMZXEodix3KSwKLSAgICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdlIHV3IGF0
IHRoZSBzLWNvb3JkIG9mIHRoZSB2ZXJ0ZXggdi4KLSAgICogUmV0dXJucyB2LT50IC0gKHV3KSh2
LT5zKSwgaWUuIHRoZSBzaWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgotICAgKiBJZiB1dyBp
cyB2ZXJ0aWNhbCAoYW5kIHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMgemVyby4K
LSAgICoKLSAgICogVGhlIGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBhbmQgc3Rh
YmxlLCBldmVuIHdoZW4gdgotICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIEluIHBhcnRp
Y3VsYXIgaWYgd2Ugc2V0IHYtPnQgPSAwIGFuZAotICAgKiBsZXQgciBiZSB0aGUgbmVnYXRlZCBy
ZXN1bHQgKHRoaXMgZXZhbHVhdGVzICh1dykodi0+cykpLCB0aGVuCi0gICAqIHIgaXMgZ3VhcmFu
dGVlZCB0byBzYXRpc2Z5IE1JTih1LT50LHctPnQpIDw9IHIgPD0gTUFYKHUtPnQsdy0+dCkuCi0g
ICAqLwotICBHTGRvdWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVmVydExlcSggdSwgdiAp
ICYmIFZlcnRMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+cyAtIHUtPnM7Ci0gIGdhcFIg
PSB3LT5zIC0gdi0+czsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewotICAgIGlmKCBnYXBM
IDwgZ2FwUiApIHsKLSAgICAgIHJldHVybiAodi0+dCAtIHUtPnQpICsgKHUtPnQgLSB3LT50KSAq
IChnYXBMIC8gKGdhcEwgKyBnYXBSKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAodi0+
dCAtIHctPnQpICsgKHctPnQgLSB1LT50KSAqIChnYXBSIC8gKGdhcEwgKyBnYXBSKSk7Ci0gICAg
fQotICB9Ci0gIC8qIHZlcnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLUdMZG91Ymxl
IF9fZ2xfZWRnZVNpZ24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncg
KQotewotICAvKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBFZGdlRXZhbCh1
LHYsdykgYnV0IHdoaWNoCi0gICAqIGlzIGNoZWFwZXIgdG8gZXZhbHVhdGUuICBSZXR1cm5zID4g
MCwgPT0gMCAsIG9yIDwgMAotICAgKiBhcyB2IGlzIGFib3ZlLCBvbiwgb3IgYmVsb3cgdGhlIGVk
Z2UgdXcuCi0gICAqLwotICBHTGRvdWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVmVydExl
cSggdSwgdiApICYmIFZlcnRMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+cyAtIHUtPnM7
Ci0gIGdhcFIgPSB3LT5zIC0gdi0+czsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewotICAg
IHJldHVybiAodi0+dCAtIHctPnQpICogZ2FwTCArICh2LT50IC0gdS0+dCkgKiBnYXBSOwotICB9
Ci0gIC8qIHZlcnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCi0gKiBEZWZpbmUgdmVyc2lvbnMgb2YgRWRnZVNpZ24sIEVkZ2VFdmFsIHdpdGggcyBhbmQg
dCB0cmFuc3Bvc2VkLgotICovCi0KLUdMZG91YmxlIF9fZ2xfdHJhbnNFdmFsKCBHTFV2ZXJ0ZXgg
KnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICkKLXsKLSAgLyogR2l2ZW4gdGhyZWUgdmVy
dGljZXMgdSx2LHcgc3VjaCB0aGF0IFRyYW5zTGVxKHUsdikgJiYgVHJhbnNMZXEodix3KSwKLSAg
ICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdlIHV3IGF0IHRoZSBzLWNvb3JkIG9m
IHRoZSB2ZXJ0ZXggdi4KLSAgICogUmV0dXJucyB2LT5zIC0gKHV3KSh2LT50KSwgaWUuIHRoZSBz
aWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgotICAgKiBJZiB1dyBpcyB2ZXJ0aWNhbCAoYW5k
IHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMgemVyby4KLSAgICoKLSAgICogVGhl
IGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBhbmQgc3RhYmxlLCBldmVuIHdoZW4g
dgotICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIEluIHBhcnRpY3VsYXIgaWYgd2Ugc2V0
IHYtPnMgPSAwIGFuZAotICAgKiBsZXQgciBiZSB0aGUgbmVnYXRlZCByZXN1bHQgKHRoaXMgZXZh
bHVhdGVzICh1dykodi0+dCkpLCB0aGVuCi0gICAqIHIgaXMgZ3VhcmFudGVlZCB0byBzYXRpc2Z5
IE1JTih1LT5zLHctPnMpIDw9IHIgPD0gTUFYKHUtPnMsdy0+cykuCi0gICAqLwotICBHTGRvdWJs
ZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVHJhbnNMZXEoIHUsIHYgKSAmJiBUcmFuc0xlcSgg
diwgdyApKTsKLSAgCi0gIGdhcEwgPSB2LT50IC0gdS0+dDsKLSAgZ2FwUiA9IHctPnQgLSB2LT50
OwotCi0gIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7Ci0gICAgaWYoIGdhcEwgPCBnYXBSICkgewot
ICAgICAgcmV0dXJuICh2LT5zIC0gdS0+cykgKyAodS0+cyAtIHctPnMpICogKGdhcEwgLyAoZ2Fw
TCArIGdhcFIpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuICh2LT5zIC0gdy0+cykgKyAo
dy0+cyAtIHUtPnMpICogKGdhcFIgLyAoZ2FwTCArIGdhcFIpKTsKLSAgICB9Ci0gIH0KLSAgLyog
dmVydGljYWwgbGluZSAqLwotICByZXR1cm4gMDsKLX0KLQotR0xkb3VibGUgX19nbF90cmFuc1Np
Z24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQotewotICAvKiBS
ZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBUcmFuc0V2YWwodSx2LHcpIGJ1dCB3
aGljaAotICAgKiBpcyBjaGVhcGVyIHRvIGV2YWx1YXRlLiAgUmV0dXJucyA+IDAsID09IDAgLCBv
ciA8IDAKLSAgICogYXMgdiBpcyBhYm92ZSwgb24sIG9yIGJlbG93IHRoZSBlZGdlIHV3LgotICAg
Ki8KLSAgR0xkb3VibGUgZ2FwTCwgZ2FwUjsKLQotICBhc3NlcnQoIFRyYW5zTGVxKCB1LCB2ICkg
JiYgVHJhbnNMZXEoIHYsIHcgKSk7Ci0gIAotICBnYXBMID0gdi0+dCAtIHUtPnQ7Ci0gIGdhcFIg
PSB3LT50IC0gdi0+dDsKLQotICBpZiggZ2FwTCArIGdhcFIgPiAwICkgewotICAgIHJldHVybiAo
di0+cyAtIHctPnMpICogZ2FwTCArICh2LT5zIC0gdS0+cykgKiBnYXBSOwotICB9Ci0gIC8qIHZl
cnRpY2FsIGxpbmUgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotaW50IF9fZ2xfdmVydENDVyggR0xV
dmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApCi17Ci0gIC8qIEZvciBhbG1v
c3QtZGVnZW5lcmF0ZSBzaXR1YXRpb25zLCB0aGUgcmVzdWx0cyBhcmUgbm90IHJlbGlhYmxlLgot
ICAgKiBVbmxlc3MgdGhlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgY2FuIGJlIHBlcmZvcm1l
ZCB3aXRob3V0Ci0gICAqIHJvdW5kaW5nIGVycm9ycywgKmFueSogaW1wbGVtZW50YXRpb24gd2ls
bCBnaXZlIGluY29ycmVjdCByZXN1bHRzCi0gICAqIG9uIHNvbWUgZGVnZW5lcmF0ZSBpbnB1dHMs
IHNvIHRoZSBjbGllbnQgbXVzdCBoYXZlIHNvbWUgd2F5IHRvCi0gICAqIGhhbmRsZSB0aGlzIHNp
dHVhdGlvbi4KLSAgICovCi0gIHJldHVybiAodS0+cyoodi0+dCAtIHctPnQpICsgdi0+cyoody0+
dCAtIHUtPnQpICsgdy0+cyoodS0+dCAtIHYtPnQpKSA+PSAwOwotfQotCi0vKiBHaXZlbiBwYXJh
bWV0ZXJzIGEseCxiLHkgcmV0dXJucyB0aGUgdmFsdWUgKGIqeCthKnkpLyhhK2IpLAotICogb3Ig
KHgreSkvMiBpZiBhPT1iPT0wLiAgSXQgcmVxdWlyZXMgdGhhdCBhLGIgPj0gMCwgYW5kIGVuZm9y
Y2VzCi0gKiB0aGlzIGluIHRoZSByYXJlIGNhc2UgdGhhdCBvbmUgYXJndW1lbnQgaXMgc2xpZ2h0
bHkgbmVnYXRpdmUuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZXh0cmVtZWx5IHN0YWJsZSBu
dW1lcmljYWxseS4KLSAqIEluIHBhcnRpY3VsYXIgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSByZXN1
bHQgciBzYXRpc2ZpZXMKLSAqIE1JTih4LHkpIDw9IHIgPD0gTUFYKHgseSksIGFuZCB0aGUgcmVz
dWx0cyBhcmUgdmVyeSBhY2N1cmF0ZQotICogZXZlbiB3aGVuIGEgYW5kIGIgZGlmZmVyIGdyZWF0
bHkgaW4gbWFnbml0dWRlLgotICovCi0jZGVmaW5lIFJlYWxJbnRlcnBvbGF0ZShhLHgsYix5KQkJ
CVwKLSAgKGEgPSAoYSA8IDApID8gMCA6IGEsIGIgPSAoYiA8IDApID8gMCA6IGIsCQlcCi0gICgo
YSA8PSBiKSA/ICgoYiA9PSAwKSA/ICgoeCt5KSAvIDIpCQkJXAotICAgICAgICAgICAgICAgICAg
ICAgICAgOiAoeCArICh5LXgpICogKGEvKGErYikpKSkJXAotICAgICAgICAgICAgOiAoeSArICh4
LXkpICogKGIvKGErYikpKSkpCi0KLSNpZm5kZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JBTQotI2Rl
ZmluZSBJbnRlcnBvbGF0ZShhLHgsYix5KQlSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSkKLSNlbHNl
Ci0KLS8qIENsYWltOiB0aGUgT05MWSBwcm9wZXJ0eSB0aGUgc3dlZXAgYWxnb3JpdGhtIHJlbGll
cyBvbiBpcyB0aGF0Ci0gKiBNSU4oeCx5KSA8PSByIDw9IE1BWCh4LHkpLiAgVGhpcyBpcyBhIG5h
c3R5IHdheSB0byB0ZXN0IHRoYXQuCi0gKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWV4dGVybiBp
bnQgUmFuZG9tSW50ZXJwb2xhdGU7Ci0KLUdMZG91YmxlIEludGVycG9sYXRlKCBHTGRvdWJsZSBh
LCBHTGRvdWJsZSB4LCBHTGRvdWJsZSBiLCBHTGRvdWJsZSB5KQotewotcHJpbnRmKCIqKioqKioq
KioqKioqKioqKioqKiolZFxuIixSYW5kb21JbnRlcnBvbGF0ZSk7Ci0gIGlmKCBSYW5kb21JbnRl
cnBvbGF0ZSApIHsKLSAgICBhID0gMS4yICogZHJhbmQ0OCgpIC0gMC4xOwotICAgIGEgPSAoYSA8
IDApID8gMCA6ICgoYSA+IDEpID8gMSA6IGEpOwotICAgIGIgPSAxLjAgLSBhOwotICB9Ci0gIHJl
dHVybiBSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSk7Ci19Ci0KLSNlbmRpZgotCi0jZGVmaW5lIFN3
YXAoYSxiKQlkbyB7IEdMVXZlcnRleCAqdCA9IGE7IGEgPSBiOyBiID0gdDsgfSB3aGlsZSgwKQot
Ci12b2lkIF9fZ2xfZWRnZUludGVyc2VjdCggR0xVdmVydGV4ICpvMSwgR0xVdmVydGV4ICpkMSwK
LQkJCSBHTFV2ZXJ0ZXggKm8yLCBHTFV2ZXJ0ZXggKmQyLAotCQkJIEdMVXZlcnRleCAqdiApCi0v
KiBHaXZlbiBlZGdlcyAobzEsZDEpIGFuZCAobzIsZDIpLCBjb21wdXRlIHRoZWlyIHBvaW50IG9m
IGludGVyc2VjdGlvbi4KLSAqIFRoZSBjb21wdXRlZCBwb2ludCBpcyBndWFyYW50ZWVkIHRvIGxp
ZSBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQotICogYm91bmRpbmcgcmVjdGFuZ2xlcyBkZWZp
bmVkIGJ5IGVhY2ggZWRnZS4KLSAqLwotewotICBHTGRvdWJsZSB6MSwgejI7Ci0KLSAgLyogVGhp
cyBpcyBjZXJ0YWlubHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgaW50
ZXJzZWN0aW9uCi0gICAqIG9mIHR3byBsaW5lIHNlZ21lbnRzLCBidXQgaXQgaXMgdmVyeSBudW1l
cmljYWxseSBzdGFibGUuCi0gICAqCi0gICAqIFN0cmF0ZWd5OiBmaW5kIHRoZSB0d28gbWlkZGxl
IHZlcnRpY2VzIGluIHRoZSBWZXJ0TGVxIG9yZGVyaW5nLAotICAgKiBhbmQgaW50ZXJwb2xhdGUg
dGhlIGludGVyc2VjdGlvbiBzLXZhbHVlIGZyb20gdGhlc2UuICBUaGVuIHJlcGVhdAotICAgKiB1
c2luZyB0aGUgVHJhbnNMZXEgb3JkZXJpbmcgdG8gZmluZCB0aGUgaW50ZXJzZWN0aW9uIHQtdmFs
dWUuCi0gICAqLwotCi0gIGlmKCAhIFZlcnRMZXEoIG8xLCBkMSApKSB7IFN3YXAoIG8xLCBkMSAp
OyB9Ci0gIGlmKCAhIFZlcnRMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9Ci0gIGlm
KCAhIFZlcnRMZXEoIG8xLCBvMiApKSB7IFN3YXAoIG8xLCBvMiApOyBTd2FwKCBkMSwgZDIgKTsg
fQotCi0gIGlmKCAhIFZlcnRMZXEoIG8yLCBkMSApKSB7Ci0gICAgLyogVGVjaG5pY2FsbHksIG5v
IGludGVyc2VjdGlvbiAtLSBkbyBvdXIgYmVzdCAqLwotICAgIHYtPnMgPSAobzItPnMgKyBkMS0+
cykgLyAyOwotICB9IGVsc2UgaWYoIFZlcnRMZXEoIGQxLCBkMiApKSB7Ci0gICAgLyogSW50ZXJw
b2xhdGUgYmV0d2VlbiBvMiBhbmQgZDEgKi8KLSAgICB6MSA9IEVkZ2VFdmFsKCBvMSwgbzIsIGQx
ICk7Ci0gICAgejIgPSBFZGdlRXZhbCggbzIsIGQxLCBkMiApOwotICAgIGlmKCB6MSt6MiA8IDAg
KSB7IHoxID0gLXoxOyB6MiA9IC16MjsgfQotICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSggejEsIG8y
LT5zLCB6MiwgZDEtPnMgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJbnRlcnBvbGF0ZSBiZXR3ZWVu
IG8yIGFuZCBkMiAqLwotICAgIHoxID0gRWRnZVNpZ24oIG8xLCBvMiwgZDEgKTsKLSAgICB6MiA9
IC1FZGdlU2lnbiggbzEsIGQyLCBkMSApOwotICAgIGlmKCB6MSt6MiA8IDAgKSB7IHoxID0gLXox
OyB6MiA9IC16MjsgfQotICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSggejEsIG8yLT5zLCB6MiwgZDIt
PnMgKTsKLSAgfQotCi0gIC8qIE5vdyByZXBlYXQgdGhlIHByb2Nlc3MgZm9yIHQgKi8KLQotICBp
ZiggISBUcmFuc0xlcSggbzEsIGQxICkpIHsgU3dhcCggbzEsIGQxICk7IH0KLSAgaWYoICEgVHJh
bnNMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9Ci0gIGlmKCAhIFRyYW5zTGVxKCBv
MSwgbzIgKSkgeyBTd2FwKCBvMSwgbzIgKTsgU3dhcCggZDEsIGQyICk7IH0KLQotICBpZiggISBU
cmFuc0xlcSggbzIsIGQxICkpIHsKLSAgICAvKiBUZWNobmljYWxseSwgbm8gaW50ZXJzZWN0aW9u
IC0tIGRvIG91ciBiZXN0ICovCi0gICAgdi0+dCA9IChvMi0+dCArIGQxLT50KSAvIDI7Ci0gIH0g
ZWxzZSBpZiggVHJhbnNMZXEoIGQxLCBkMiApKSB7Ci0gICAgLyogSW50ZXJwb2xhdGUgYmV0d2Vl
biBvMiBhbmQgZDEgKi8KLSAgICB6MSA9IFRyYW5zRXZhbCggbzEsIG8yLCBkMSApOwotICAgIHoy
ID0gVHJhbnNFdmFsKCBvMiwgZDEsIGQyICk7Ci0gICAgaWYoIHoxK3oyIDwgMCApIHsgejEgPSAt
ejE7IHoyID0gLXoyOyB9Ci0gICAgdi0+dCA9IEludGVycG9sYXRlKCB6MSwgbzItPnQsIHoyLCBk
MS0+dCApOwotICB9IGVsc2UgewotICAgIC8qIEludGVycG9sYXRlIGJldHdlZW4gbzIgYW5kIGQy
ICovCi0gICAgejEgPSBUcmFuc1NpZ24oIG8xLCBvMiwgZDEgKTsKLSAgICB6MiA9IC1UcmFuc1Np
Z24oIG8xLCBkMiwgZDEgKTsKLSAgICBpZiggejErejIgPCAwICkgeyB6MSA9IC16MTsgejIgPSAt
ejI7IH0KLSAgICB2LT50ID0gSW50ZXJwb2xhdGUoIHoxLCBvMi0+dCwgejIsIGQyLT50ICk7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2Vv
bS5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvZ2VvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0qKiBMaWNl
bnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMg
ZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBl
cm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAx
LjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3Vi
amVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1
c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhp
Y3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFy
a3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6
Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3Zp
ZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoq
ICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBB
TkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ
T04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5U
QUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUu
IFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiog
VmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNp
bGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAo
YykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkg
cG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxz
ZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBO
b3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMK
LSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBD
b2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlv
biAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdM
KFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJl
bGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUg
WAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5
LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIp
IHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJ
LCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNv
bXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgot
KioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERh
dGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0
ZXNzL2dlb20uaCM1ICQKLSovCi0KLSNpZm5kZWYgX19nZW9tX2hfCi0jZGVmaW5lIF9fZ2VvbV9o
XwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLSNpZmRlZiBO
T19CUkFOQ0hfQ09ORElUSU9OUwotLyogTUlQUyBhcmNoaXRlY3R1cmUgaGFzIHNwZWNpYWwgaW5z
dHJ1Y3Rpb25zIHRvIGV2YWx1YXRlIGJvb2xlYW4KLSAqIGNvbmRpdGlvbnMgLS0gbW9yZSBlZmZp
Y2llbnQgdGhhbiBicmFuY2hpbmcsIElGIHlvdSBjYW4gZ2V0IHRoZQotICogY29tcGlsZXIgdG8g
Z2VuZXJhdGUgdGhlIHJpZ2h0IGluc3RydWN0aW9ucyAoU0dJIGNvbXBpbGVyIGRvZXNuJ3QpCi0g
Ki8KLSNkZWZpbmUgVmVydEVxKHUsdikJKCgodSktPnMgPT0gKHYpLT5zKSAmICgodSktPnQgPT0g
KHYpLT50KSkKLSNkZWZpbmUgVmVydExlcSh1LHYpCSgoKHUpLT5zIDwgKHYpLT5zKSB8IFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAoKHUpLT5zID09ICh2KS0+cyAmICh1KS0+dCA8PSAodikt
PnQpKQotI2Vsc2UKLSNkZWZpbmUgVmVydEVxKHUsdikJKCh1KS0+cyA9PSAodiktPnMgJiYgKHUp
LT50ID09ICh2KS0+dCkKLSNkZWZpbmUgVmVydExlcSh1LHYpCSgoKHUpLT5zIDwgKHYpLT5zKSB8
fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1KS0+cyA9PSAodiktPnMgJiYgKHUpLT50
IDw9ICh2KS0+dCkpCi0jZW5kaWYKLQotI2RlZmluZSBFZGdlRXZhbCh1LHYsdykJX19nbF9lZGdl
RXZhbCh1LHYsdykKLSNkZWZpbmUgRWRnZVNpZ24odSx2LHcpCV9fZ2xfZWRnZVNpZ24odSx2LHcp
Ci0KLS8qIFZlcnNpb25zIG9mIFZlcnRMZXEsIEVkZ2VTaWduLCBFZGdlRXZhbCB3aXRoIHMgYW5k
IHQgdHJhbnNwb3NlZC4gKi8KLQotI2RlZmluZSBUcmFuc0xlcSh1LHYpCSgoKHUpLT50IDwgKHYp
LT50KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1KS0+dCA9PSAodiktPnQgJiYg
KHUpLT5zIDw9ICh2KS0+cykpCi0jZGVmaW5lIFRyYW5zRXZhbCh1LHYsdykJX19nbF90cmFuc0V2
YWwodSx2LHcpCi0jZGVmaW5lIFRyYW5zU2lnbih1LHYsdykJX19nbF90cmFuc1NpZ24odSx2LHcp
Ci0KLQotI2RlZmluZSBFZGdlR29lc0xlZnQoZSkJCVZlcnRMZXEoIChlKS0+RHN0LCAoZSktPk9y
ZyApCi0jZGVmaW5lIEVkZ2VHb2VzUmlnaHQoZSkJVmVydExlcSggKGUpLT5PcmcsIChlKS0+RHN0
ICkKLQotI2RlZmluZSBBQlMoeCkJKCh4KSA8IDAgPyAtKHgpIDogKHgpKQotI2RlZmluZSBWZXJ0
TDFkaXN0KHUsdikJKEFCUyh1LT5zIC0gdi0+cykgKyBBQlModS0+dCAtIHYtPnQpKQotCi0jZGVm
aW5lIFZlcnRDQ1codSx2LHcpCV9fZ2xfdmVydENDVyh1LHYsdykKLQotaW50CQlfX2dsX3ZlcnRM
ZXEoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2ICk7Ci1HTGRvdWJsZQlfX2dsX2VkZ2VFdmFs
KCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7Ci1HTGRvdWJsZQlf
X2dsX2VkZ2VTaWduKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7
Ci1HTGRvdWJsZQlfX2dsX3RyYW5zRXZhbCggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdM
VXZlcnRleCAqdyApOwotR0xkb3VibGUJX19nbF90cmFuc1NpZ24oIEdMVXZlcnRleCAqdSwgR0xV
dmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKTsKLWludAkJX19nbF92ZXJ0Q0NXKCBHTFV2ZXJ0ZXgg
KnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7Ci12b2lkCQlfX2dsX2VkZ2VJbnRlcnNl
Y3QoIEdMVXZlcnRleCAqbzEsIEdMVXZlcnRleCAqZDEsCi0JCQkJICAgIEdMVXZlcnRleCAqbzIs
IEdMVXZlcnRleCAqZDIsCi0JCQkJICAgIEdMVXZlcnRleCAqdiApOwotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMJ
KHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9tZW1hbGxvYy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0qKiBMaWNl
bnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMg
ZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBl
cm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAx
LjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3Vi
amVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1
c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhp
Y3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFy
a3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6
Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3Zp
ZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoq
ICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBB
TkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ
T04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5U
QUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUu
IFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiog
VmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNp
bGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAo
YykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkg
cG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxz
ZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBO
b3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMK
LSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBD
b2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlv
biAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdM
KFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJl
bGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUg
WAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5
LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIp
IHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJ
LCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNv
bXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgot
KioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERh
dGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0
ZXNzL21lbWFsbG9jLmMjNSAkCi0qLwotCi0jaW5jbHVkZSAic3RyaW5nLmgiCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgotCi1pbnQgX19nbF9tZW1Jbml0KCBz
aXplX3QgbWF4RmFzdCApCi17Ci0jaWZuZGVmIE5PX01BTExPUFQKLS8qICBtYWxsb3B0KCBNX01Y
RkFTVCwgbWF4RmFzdCApOyovCi0jaWZkZWYgTUVNT1JZX0RFQlVHCi0gIG1hbGxvcHQoIE1fREVC
VUcsIDEgKTsKLSNlbmRpZgotI2VuZGlmCi0gICByZXR1cm4gMTsKLX0KLQotI2lmZGVmIE1FTU9S
WV9ERUJVRwotdm9pZCAqX19nbF9tZW1BbGxvYyggc2l6ZV90IG4gKQotewotICByZXR1cm4gbWVt
c2V0KCBtYWxsb2MoIG4gKSwgMHhhNSwgbiApOwotfQotI2VuZGlmCi0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgJKHJldmlzaW9u
IDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxv
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxp
Y2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUK
LSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBp
biB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAi
TGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5
IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4s
IGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91
bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dp
LmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRo
ZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIg
YmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElU
SU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJ
TVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwg
U0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9T
RSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmln
aW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAx
LjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3Jh
cGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0y
MDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhl
cmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJv
dmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFi
bGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBU
aGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lv
biAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5v
dmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2lu
ZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBU
aGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFz
IG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3
aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0v
KgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZp
c2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL21lbWFs
bG9jLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fbWVtYWxsb2Nfc2ltcGxlX2hfCi0jZGVmaW5lIF9f
bWVtYWxsb2Nfc2ltcGxlX2hfCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmluZSBtZW1S
ZWFsbG9jCXJlYWxsb2MKLSNkZWZpbmUgbWVtRnJlZQkJZnJlZQotCi0jZGVmaW5lIG1lbUluaXQJ
CV9fZ2xfbWVtSW5pdAotLypleHRlcm4gdm9pZAkJX19nbF9tZW1Jbml0KCBzaXplX3QgKTsqLwot
ZXh0ZXJuIGludAkJX19nbF9tZW1Jbml0KCBzaXplX3QgKTsKLQotI2lmbmRlZiBNRU1PUllfREVC
VUcKLSNkZWZpbmUgbWVtQWxsb2MJbWFsbG9jCi0jZWxzZQotI2RlZmluZSBtZW1BbGxvYwlfX2ds
X21lbUFsbG9jCi1leHRlcm4gdm9pZCAqCQlfX2dsX21lbUFsbG9jKCBzaXplX3QgKTsKLSNlbmRp
ZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
bWVzaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3MvbWVzaC5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvbWVzaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5NiArMCwwIEBACi0vKgot
KiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBv
ZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5z
ZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZl
cnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUg
YXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1h
eSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29u
IEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVh
dHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0q
KiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBh
cyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJB
TlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBM
SU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBN
RVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQ
QVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5h
bCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlv
biwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3Bl
ZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5
cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQg
aW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQK
LSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0
aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRl
cmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3Jp
Z2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNp
ZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhl
IE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAx
LjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdp
dGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0
b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9w
ZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVk
IGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5n
Ci0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNh
dGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioK
LSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9n
bHUvbGlidGVzcy9tZXNoLmMjNiAkCi0qLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKLSNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5lIEZBTFNFIDAK
LQotc3RhdGljIEdMVXZlcnRleCAqYWxsb2NWZXJ0ZXgoKQotewotICAgcmV0dXJuIChHTFV2ZXJ0
ZXggKiltZW1BbGxvYyggc2l6ZW9mKCBHTFV2ZXJ0ZXggKSk7Ci19Ci0KLXN0YXRpYyBHTFVmYWNl
ICphbGxvY0ZhY2UoKQotewotICAgcmV0dXJuIChHTFVmYWNlICopbWVtQWxsb2MoIHNpemVvZigg
R0xVZmFjZSApKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiBVdGlsaXR5IFJvdXRp
bmVzICoqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWxsb2NhdGUgYW5kIGZyZWUgaGFs
Zi1lZGdlcyBpbiBwYWlycyBmb3IgZWZmaWNpZW5jeS4KLSAqIFRoZSAqb25seSogcGxhY2UgdGhh
dCBzaG91bGQgdXNlIHRoaXMgZmFjdCBpcyBhbGxvY2F0aW9uL2ZyZWUuCi0gKi8KLXR5cGVkZWYg
c3RydWN0IHsgR0xVaGFsZkVkZ2UgZSwgZVN5bTsgfSBFZGdlUGFpcjsKLQotLyogTWFrZUVkZ2Ug
Y3JlYXRlcyBhIG5ldyBwYWlyIG9mIGhhbGYtZWRnZXMgd2hpY2ggZm9ybSB0aGVpciBvd24gbG9v
cC4KLSAqIE5vIHZlcnRleCBvciBmYWNlIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYnV0IHRo
ZXNlIG11c3QgYmUgYXNzaWduZWQKLSAqIGJlZm9yZSB0aGUgY3VycmVudCBlZGdlIG9wZXJhdGlv
biBpcyBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBHTFVoYWxmRWRnZSAqTWFrZUVkZ2UoIEdMVWhh
bGZFZGdlICplTmV4dCApCi17Ci0gIEdMVWhhbGZFZGdlICplOwotICBHTFVoYWxmRWRnZSAqZVN5
bTsKLSAgR0xVaGFsZkVkZ2UgKmVQcmV2OwotICBFZGdlUGFpciAqcGFpciA9IChFZGdlUGFpciAq
KW1lbUFsbG9jKCBzaXplb2YoIEVkZ2VQYWlyICkpOwotICBpZiAocGFpciA9PSBOVUxMKSByZXR1
cm4gTlVMTDsKLQotICBlID0gJnBhaXItPmU7Ci0gIGVTeW0gPSAmcGFpci0+ZVN5bTsKLQotICAv
KiBNYWtlIHN1cmUgZU5leHQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlZGdlIG9mIHRoZSBlZGdlIHBh
aXIgKi8KLSAgaWYoIGVOZXh0LT5TeW0gPCBlTmV4dCApIHsgZU5leHQgPSBlTmV4dC0+U3ltOyB9
Ci0KLSAgLyogSW5zZXJ0IGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCBiZWZvcmUgZU5l
eHQuCi0gICAqIE5vdGUgdGhhdCB0aGUgcHJldiBwb2ludGVyIGlzIHN0b3JlZCBpbiBTeW0tPm5l
eHQuCi0gICAqLwotICBlUHJldiA9IGVOZXh0LT5TeW0tPm5leHQ7Ci0gIGVTeW0tPm5leHQgPSBl
UHJldjsKLSAgZVByZXYtPlN5bS0+bmV4dCA9IGU7Ci0gIGUtPm5leHQgPSBlTmV4dDsKLSAgZU5l
eHQtPlN5bS0+bmV4dCA9IGVTeW07Ci0KLSAgZS0+U3ltID0gZVN5bTsKLSAgZS0+T25leHQgPSBl
OwotICBlLT5MbmV4dCA9IGVTeW07Ci0gIGUtPk9yZyA9IE5VTEw7Ci0gIGUtPkxmYWNlID0gTlVM
TDsKLSAgZS0+d2luZGluZyA9IDA7Ci0gIGUtPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7Ci0KLSAgZVN5
bS0+U3ltID0gZTsKLSAgZVN5bS0+T25leHQgPSBlU3ltOwotICBlU3ltLT5MbmV4dCA9IGU7Ci0g
IGVTeW0tPk9yZyA9IE5VTEw7Ci0gIGVTeW0tPkxmYWNlID0gTlVMTDsKLSAgZVN5bS0+d2luZGlu
ZyA9IDA7Ci0gIGVTeW0tPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7Ci0KLSAgcmV0dXJuIGU7Ci19Ci0K
LS8qIFNwbGljZSggYSwgYiApIGlzIGJlc3QgZGVzY3JpYmVkIGJ5IHRoZSBHdWliYXMvU3RvbGZp
IHBhcGVyIG9yIHRoZQotICogQ1MzNDhhIG5vdGVzIChzZWUgbWVzaC5oKS4gIEJhc2ljYWxseSBp
dCBtb2RpZmllcyB0aGUgbWVzaCBzbyB0aGF0Ci0gKiBhLT5PbmV4dCBhbmQgYi0+T25leHQgYXJl
IGV4Y2hhbmdlZC4gIFRoaXMgY2FuIGhhdmUgdmFyaW91cyBlZmZlY3RzCi0gKiBkZXBlbmRpbmcg
b24gd2hldGhlciBhIGFuZCBiIGJlbG9uZyB0byBkaWZmZXJlbnQgZmFjZSBvciB2ZXJ0ZXggcmlu
Z3MuCi0gKiBGb3IgbW9yZSBleHBsYW5hdGlvbiBzZWUgX19nbF9tZXNoU3BsaWNlKCkgYmVsb3cu
Ci0gKi8KLXN0YXRpYyB2b2lkIFNwbGljZSggR0xVaGFsZkVkZ2UgKmEsIEdMVWhhbGZFZGdlICpi
ICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmFPbmV4dCA9IGEtPk9uZXh0OwotICBHTFVoYWxmRWRnZSAq
Yk9uZXh0ID0gYi0+T25leHQ7Ci0KLSAgYU9uZXh0LT5TeW0tPkxuZXh0ID0gYjsKLSAgYk9uZXh0
LT5TeW0tPkxuZXh0ID0gYTsKLSAgYS0+T25leHQgPSBiT25leHQ7Ci0gIGItPk9uZXh0ID0gYU9u
ZXh0OwotfQotCi0vKiBNYWtlVmVydGV4KCBuZXdWZXJ0ZXgsIGVPcmlnLCB2TmV4dCApIGF0dGFj
aGVzIGEgbmV3IHZlcnRleCBhbmQgbWFrZXMgaXQgdGhlCi0gKiBvcmlnaW4gb2YgYWxsIGVkZ2Vz
IGluIHRoZSB2ZXJ0ZXggbG9vcCB0byB3aGljaCBlT3JpZyBiZWxvbmdzLiAidk5leHQiIGdpdmVz
Ci0gKiBhIHBsYWNlIHRvIGluc2VydCB0aGUgbmV3IHZlcnRleCBpbiB0aGUgZ2xvYmFsIHZlcnRl
eCBsaXN0LiAgV2UgaW5zZXJ0Ci0gKiB0aGUgbmV3IHZlcnRleCAqYmVmb3JlKiB2TmV4dCBzbyB0
aGF0IGFsZ29yaXRobXMgd2hpY2ggd2FsayB0aGUgdmVydGV4Ci0gKiBsaXN0IHdpbGwgbm90IHNl
ZSB0aGUgbmV3bHkgY3JlYXRlZCB2ZXJ0aWNlcy4KLSAqLwotc3RhdGljIHZvaWQgTWFrZVZlcnRl
eCggR0xVdmVydGV4ICpuZXdWZXJ0ZXgsIAotCQkJR0xVaGFsZkVkZ2UgKmVPcmlnLCBHTFV2ZXJ0
ZXggKnZOZXh0ICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIEdMVXZlcnRleCAqdlByZXY7Ci0g
IEdMVXZlcnRleCAqdk5ldyA9IG5ld1ZlcnRleDsKLQotICBhc3NlcnQodk5ldyAhPSBOVUxMKTsK
LQotICAvKiBpbnNlcnQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGJlZm9yZSB2TmV4
dCAqLwotICB2UHJldiA9IHZOZXh0LT5wcmV2OwotICB2TmV3LT5wcmV2ID0gdlByZXY7Ci0gIHZQ
cmV2LT5uZXh0ID0gdk5ldzsKLSAgdk5ldy0+bmV4dCA9IHZOZXh0OwotICB2TmV4dC0+cHJldiA9
IHZOZXc7Ci0KLSAgdk5ldy0+YW5FZGdlID0gZU9yaWc7Ci0gIHZOZXctPmRhdGEgPSBOVUxMOwot
ICAvKiBsZWF2ZSBjb29yZHMsIHMsIHQgdW5kZWZpbmVkICovCi0KLSAgLyogZml4IG90aGVyIGVk
Z2VzIG9uIHRoaXMgdmVydGV4IGxvb3AgKi8KLSAgZSA9IGVPcmlnOwotICBkbyB7Ci0gICAgZS0+
T3JnID0gdk5ldzsKLSAgICBlID0gZS0+T25leHQ7Ci0gIH0gd2hpbGUoIGUgIT0gZU9yaWcgKTsK
LX0KLQotLyogTWFrZUZhY2UoIG5ld0ZhY2UsIGVPcmlnLCBmTmV4dCApIGF0dGFjaGVzIGEgbmV3
IGZhY2UgYW5kIG1ha2VzIGl0IHRoZSBsZWZ0Ci0gKiBmYWNlIG9mIGFsbCBlZGdlcyBpbiB0aGUg
ZmFjZSBsb29wIHRvIHdoaWNoIGVPcmlnIGJlbG9uZ3MuICAiZk5leHQiIGdpdmVzCi0gKiBhIHBs
YWNlIHRvIGluc2VydCB0aGUgbmV3IGZhY2UgaW4gdGhlIGdsb2JhbCBmYWNlIGxpc3QuICBXZSBp
bnNlcnQKLSAqIHRoZSBuZXcgZmFjZSAqYmVmb3JlKiBmTmV4dCBzbyB0aGF0IGFsZ29yaXRobXMg
d2hpY2ggd2FsayB0aGUgZmFjZQotICogbGlzdCB3aWxsIG5vdCBzZWUgdGhlIG5ld2x5IGNyZWF0
ZWQgZmFjZXMuCi0gKi8KLXN0YXRpYyB2b2lkIE1ha2VGYWNlKCBHTFVmYWNlICpuZXdGYWNlLCBH
TFVoYWxmRWRnZSAqZU9yaWcsIEdMVWZhY2UgKmZOZXh0ICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmU7
Ci0gIEdMVWZhY2UgKmZQcmV2OwotICBHTFVmYWNlICpmTmV3ID0gbmV3RmFjZTsKLQotICBhc3Nl
cnQoZk5ldyAhPSBOVUxMKTsgCi0KLSAgLyogaW5zZXJ0IGluIGNpcmN1bGFyIGRvdWJseS1saW5r
ZWQgbGlzdCBiZWZvcmUgZk5leHQgKi8KLSAgZlByZXYgPSBmTmV4dC0+cHJldjsKLSAgZk5ldy0+
cHJldiA9IGZQcmV2OwotICBmUHJldi0+bmV4dCA9IGZOZXc7Ci0gIGZOZXctPm5leHQgPSBmTmV4
dDsKLSAgZk5leHQtPnByZXYgPSBmTmV3OwotCi0gIGZOZXctPmFuRWRnZSA9IGVPcmlnOwotICBm
TmV3LT5kYXRhID0gTlVMTDsKLSAgZk5ldy0+dHJhaWwgPSBOVUxMOwotICBmTmV3LT5tYXJrZWQg
PSBGQUxTRTsKLQotICAvKiBUaGUgbmV3IGZhY2UgaXMgbWFya2VkICJpbnNpZGUiIGlmIHRoZSBv
bGQgb25lIHdhcy4gIFRoaXMgaXMgYQotICAgKiBjb252ZW5pZW5jZSBmb3IgdGhlIGNvbW1vbiBj
YXNlIHdoZXJlIGEgZmFjZSBoYXMgYmVlbiBzcGxpdCBpbiB0d28uCi0gICAqLwotICBmTmV3LT5p
bnNpZGUgPSBmTmV4dC0+aW5zaWRlOwotCi0gIC8qIGZpeCBvdGhlciBlZGdlcyBvbiB0aGlzIGZh
Y2UgbG9vcCAqLwotICBlID0gZU9yaWc7Ci0gIGRvIHsKLSAgICBlLT5MZmFjZSA9IGZOZXc7Ci0g
ICAgZSA9IGUtPkxuZXh0OwotICB9IHdoaWxlKCBlICE9IGVPcmlnICk7Ci19Ci0KLS8qIEtpbGxF
ZGdlKCBlRGVsICkgZGVzdHJveXMgYW4gZWRnZSAodGhlIGhhbGYtZWRnZXMgZURlbCBhbmQgZURl
bC0+U3ltKSwKLSAqIGFuZCByZW1vdmVzIGZyb20gdGhlIGdsb2JhbCBlZGdlIGxpc3QuCi0gKi8K
LXN0YXRpYyB2b2lkIEtpbGxFZGdlKCBHTFVoYWxmRWRnZSAqZURlbCApCi17Ci0gIEdMVWhhbGZF
ZGdlICplUHJldiwgKmVOZXh0OwotCi0gIC8qIEhhbGYtZWRnZXMgYXJlIGFsbG9jYXRlZCBpbiBw
YWlycywgc2VlIEVkZ2VQYWlyIGFib3ZlICovCi0gIGlmKCBlRGVsLT5TeW0gPCBlRGVsICkgeyBl
RGVsID0gZURlbC0+U3ltOyB9Ci0KLSAgLyogZGVsZXRlIGZyb20gY2lyY3VsYXIgZG91Ymx5LWxp
bmtlZCBsaXN0ICovCi0gIGVOZXh0ID0gZURlbC0+bmV4dDsKLSAgZVByZXYgPSBlRGVsLT5TeW0t
Pm5leHQ7Ci0gIGVOZXh0LT5TeW0tPm5leHQgPSBlUHJldjsKLSAgZVByZXYtPlN5bS0+bmV4dCA9
IGVOZXh0OwotCi0gIG1lbUZyZWUoIGVEZWwgKTsKLX0KLQotCi0vKiBLaWxsVmVydGV4KCB2RGVs
ICkgZGVzdHJveXMgYSB2ZXJ0ZXggYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgZ2xvYmFsCi0gKiB2
ZXJ0ZXggbGlzdC4gIEl0IHVwZGF0ZXMgdGhlIHZlcnRleCBsb29wIHRvIHBvaW50IHRvIGEgZ2l2
ZW4gbmV3IHZlcnRleC4KLSAqLwotc3RhdGljIHZvaWQgS2lsbFZlcnRleCggR0xVdmVydGV4ICp2
RGVsLCBHTFV2ZXJ0ZXggKm5ld09yZyApCi17Ci0gIEdMVWhhbGZFZGdlICplLCAqZVN0YXJ0ID0g
dkRlbC0+YW5FZGdlOwotICBHTFV2ZXJ0ZXggKnZQcmV2LCAqdk5leHQ7Ci0KLSAgLyogY2hhbmdl
IHRoZSBvcmlnaW4gb2YgYWxsIGFmZmVjdGVkIGVkZ2VzICovCi0gIGUgPSBlU3RhcnQ7Ci0gIGRv
IHsKLSAgICBlLT5PcmcgPSBuZXdPcmc7Ci0gICAgZSA9IGUtPk9uZXh0OwotICB9IHdoaWxlKCBl
ICE9IGVTdGFydCApOwotCi0gIC8qIGRlbGV0ZSBmcm9tIGNpcmN1bGFyIGRvdWJseS1saW5rZWQg
bGlzdCAqLwotICB2UHJldiA9IHZEZWwtPnByZXY7Ci0gIHZOZXh0ID0gdkRlbC0+bmV4dDsKLSAg
dk5leHQtPnByZXYgPSB2UHJldjsKLSAgdlByZXYtPm5leHQgPSB2TmV4dDsKLQotICBtZW1GcmVl
KCB2RGVsICk7Ci19Ci0KLS8qIEtpbGxGYWNlKCBmRGVsICkgZGVzdHJveXMgYSBmYWNlIGFuZCBy
ZW1vdmVzIGl0IGZyb20gdGhlIGdsb2JhbCBmYWNlCi0gKiBsaXN0LiAgSXQgdXBkYXRlcyB0aGUg
ZmFjZSBsb29wIHRvIHBvaW50IHRvIGEgZ2l2ZW4gbmV3IGZhY2UuCi0gKi8KLXN0YXRpYyB2b2lk
IEtpbGxGYWNlKCBHTFVmYWNlICpmRGVsLCBHTFVmYWNlICpuZXdMZmFjZSApCi17Ci0gIEdMVWhh
bGZFZGdlICplLCAqZVN0YXJ0ID0gZkRlbC0+YW5FZGdlOwotICBHTFVmYWNlICpmUHJldiwgKmZO
ZXh0OwotCi0gIC8qIGNoYW5nZSB0aGUgbGVmdCBmYWNlIG9mIGFsbCBhZmZlY3RlZCBlZGdlcyAq
LwotICBlID0gZVN0YXJ0OwotICBkbyB7Ci0gICAgZS0+TGZhY2UgPSBuZXdMZmFjZTsKLSAgICBl
ID0gZS0+TG5leHQ7Ci0gIH0gd2hpbGUoIGUgIT0gZVN0YXJ0ICk7Ci0KLSAgLyogZGVsZXRlIGZy
b20gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0ICovCi0gIGZQcmV2ID0gZkRlbC0+cHJldjsK
LSAgZk5leHQgPSBmRGVsLT5uZXh0OwotICBmTmV4dC0+cHJldiA9IGZQcmV2OwotICBmUHJldi0+
bmV4dCA9IGZOZXh0OwotCi0gIG1lbUZyZWUoIGZEZWwgKTsKLX0KLQotCi0vKioqKioqKioqKioq
KioqKioqIEJhc2ljIEVkZ2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwotCi0v
KiBfX2dsX21lc2hNYWtlRWRnZSBjcmVhdGVzIG9uZSBlZGdlLCB0d28gdmVydGljZXMsIGFuZCBh
IGxvb3AgKGZhY2UpLgotICogVGhlIGxvb3AgY29uc2lzdHMgb2YgdGhlIHR3byBuZXcgaGFsZi1l
ZGdlcy4KLSAqLwotR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaE1ha2VFZGdlKCBHTFVtZXNoICptZXNo
ICkKLXsKLSAgR0xVdmVydGV4ICpuZXdWZXJ0ZXgxPSBhbGxvY1ZlcnRleCgpOwotICBHTFV2ZXJ0
ZXggKm5ld1ZlcnRleDI9IGFsbG9jVmVydGV4KCk7Ci0gIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9j
RmFjZSgpOwotICBHTFVoYWxmRWRnZSAqZTsKLQotICAvKiBpZiBhbnkgb25lIGlzIG51bGwgdGhl
biBhbGwgZ2V0IGZyZWVkICovCi0gIGlmIChuZXdWZXJ0ZXgxID09IE5VTEwgfHwgbmV3VmVydGV4
MiA9PSBOVUxMIHx8IG5ld0ZhY2UgPT0gTlVMTCkgewotICAgICBpZiAobmV3VmVydGV4MSAhPSBO
VUxMKSBtZW1GcmVlKG5ld1ZlcnRleDEpOwotICAgICBpZiAobmV3VmVydGV4MiAhPSBOVUxMKSBt
ZW1GcmVlKG5ld1ZlcnRleDIpOwotICAgICBpZiAobmV3RmFjZSAhPSBOVUxMKSBtZW1GcmVlKG5l
d0ZhY2UpOyAgICAgCi0gICAgIHJldHVybiBOVUxMOwotICB9IAotCi0gIGUgPSBNYWtlRWRnZSgg
Jm1lc2gtPmVIZWFkICk7Ci0gIGlmIChlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIE1ha2VW
ZXJ0ZXgoIG5ld1ZlcnRleDEsIGUsICZtZXNoLT52SGVhZCApOwotICBNYWtlVmVydGV4KCBuZXdW
ZXJ0ZXgyLCBlLT5TeW0sICZtZXNoLT52SGVhZCApOwotICBNYWtlRmFjZSggbmV3RmFjZSwgZSwg
Jm1lc2gtPmZIZWFkICk7Ci0gIHJldHVybiBlOwotfQotICAKLQotLyogX19nbF9tZXNoU3BsaWNl
KCBlT3JnLCBlRHN0ICkgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBmb3IgY2hhbmdpbmcgdGhlCi0g
KiBtZXNoIGNvbm5lY3Rpdml0eSBhbmQgdG9wb2xvZ3kuICBJdCBjaGFuZ2VzIHRoZSBtZXNoIHNv
IHRoYXQKLSAqCWVPcmctPk9uZXh0IDwtIE9MRCggZURzdC0+T25leHQgKQotICoJZURzdC0+T25l
eHQgPC0gT0xEKCBlT3JnLT5PbmV4dCApCi0gKiB3aGVyZSBPTEQoLi4uKSBtZWFucyB0aGUgdmFs
dWUgYmVmb3JlIHRoZSBtZXNoU3BsaWNlIG9wZXJhdGlvbi4KLSAqCi0gKiBUaGlzIGNhbiBoYXZl
IHR3byBlZmZlY3RzIG9uIHRoZSB2ZXJ0ZXggc3RydWN0dXJlOgotICogIC0gaWYgZU9yZy0+T3Jn
ICE9IGVEc3QtPk9yZywgdGhlIHR3byB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0gKiAg
LSBpZiBlT3JnLT5PcmcgPT0gZURzdC0+T3JnLCB0aGUgb3JpZ2luIGlzIHNwbGl0IGludG8gdHdv
IHZlcnRpY2VzCi0gKiBJbiBib3RoIGNhc2VzLCBlRHN0LT5PcmcgaXMgY2hhbmdlZCBhbmQgZU9y
Zy0+T3JnIGlzIHVudG91Y2hlZC4KLSAqCi0gKiBTaW1pbGFybHkgKGFuZCBpbmRlcGVuZGVudGx5
KSBmb3IgdGhlIGZhY2Ugc3RydWN0dXJlLAotICogIC0gaWYgZU9yZy0+TGZhY2UgPT0gZURzdC0+
TGZhY2UsIG9uZSBsb29wIGlzIHNwbGl0IGludG8gdHdvCi0gKiAgLSBpZiBlT3JnLT5MZmFjZSAh
PSBlRHN0LT5MZmFjZSwgdHdvIGRpc3RpbmN0IGxvb3BzIGFyZSBqb2luZWQgaW50byBvbmUKLSAq
IEluIGJvdGggY2FzZXMsIGVEc3QtPkxmYWNlIGlzIGNoYW5nZWQgYW5kIGVPcmctPkxmYWNlIGlz
IHVuYWZmZWN0ZWQuCi0gKgotICogU29tZSBzcGVjaWFsIGNhc2VzOgotICogSWYgZURzdCA9PSBl
T3JnLCB0aGUgb3BlcmF0aW9uIGhhcyBubyBlZmZlY3QuCi0gKiBJZiBlRHN0ID09IGVPcmctPkxu
ZXh0LCB0aGUgbmV3IGZhY2Ugd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCi0gKiBJZiBlRHN0ID09
IGVPcmctPkxwcmV2LCB0aGUgb2xkIGZhY2Ugd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCi0gKiBJ
ZiBlRHN0ID09IGVPcmctPk9uZXh0LCB0aGUgbmV3IHZlcnRleCB3aWxsIGhhdmUgYSBzaW5nbGUg
ZWRnZS4KLSAqIElmIGVEc3QgPT0gZU9yZy0+T3ByZXYsIHRoZSBvbGQgdmVydGV4IHdpbGwgaGF2
ZSBhIHNpbmdsZSBlZGdlLgotICovCi1pbnQgX19nbF9tZXNoU3BsaWNlKCBHTFVoYWxmRWRnZSAq
ZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKQotewotICBpbnQgam9pbmluZ0xvb3BzID0gRkFMU0U7
Ci0gIGludCBqb2luaW5nVmVydGljZXMgPSBGQUxTRTsKLQotICBpZiggZU9yZyA9PSBlRHN0ICkg
cmV0dXJuIDE7Ci0KLSAgaWYoIGVEc3QtPk9yZyAhPSBlT3JnLT5PcmcgKSB7Ci0gICAgLyogV2Ug
YXJlIG1lcmdpbmcgdHdvIGRpc2pvaW50IHZlcnRpY2VzIC0tIGRlc3Ryb3kgZURzdC0+T3JnICov
Ci0gICAgam9pbmluZ1ZlcnRpY2VzID0gVFJVRTsKLSAgICBLaWxsVmVydGV4KCBlRHN0LT5Pcmcs
IGVPcmctPk9yZyApOwotICB9Ci0gIGlmKCBlRHN0LT5MZmFjZSAhPSBlT3JnLT5MZmFjZSApIHsK
LSAgICAvKiBXZSBhcmUgY29ubmVjdGluZyB0d28gZGlzam9pbnQgbG9vcHMgLS0gZGVzdHJveSBl
RHN0LT5MZmFjZSAqLwotICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7Ci0gICAgS2lsbEZhY2UoIGVE
c3QtPkxmYWNlLCBlT3JnLT5MZmFjZSApOwotICB9Ci0KLSAgLyogQ2hhbmdlIHRoZSBlZGdlIHN0
cnVjdHVyZSAqLwotICBTcGxpY2UoIGVEc3QsIGVPcmcgKTsKLQotICBpZiggISBqb2luaW5nVmVy
dGljZXMgKSB7Ci0gICAgR0xVdmVydGV4ICpuZXdWZXJ0ZXg9IGFsbG9jVmVydGV4KCk7Ci0gICAg
aWYgKG5ld1ZlcnRleCA9PSBOVUxMKSByZXR1cm4gMDsKLQotICAgIC8qIFdlIHNwbGl0IG9uZSB2
ZXJ0ZXggaW50byB0d28gLS0gdGhlIG5ldyB2ZXJ0ZXggaXMgZURzdC0+T3JnLgotICAgICAqIE1h
a2Ugc3VyZSB0aGUgb2xkIHZlcnRleCBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVkZ2UuCi0gICAg
ICovCi0gICAgTWFrZVZlcnRleCggbmV3VmVydGV4LCBlRHN0LCBlT3JnLT5PcmcgKTsKLSAgICBl
T3JnLT5PcmctPmFuRWRnZSA9IGVPcmc7Ci0gIH0KLSAgaWYoICEgam9pbmluZ0xvb3BzICkgewot
ICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOyAgCi0gICAgaWYgKG5ld0ZhY2UgPT0g
TlVMTCkgcmV0dXJuIDA7Ci0KLSAgICAvKiBXZSBzcGxpdCBvbmUgbG9vcCBpbnRvIHR3byAtLSB0
aGUgbmV3IGxvb3AgaXMgZURzdC0+TGZhY2UuCi0gICAgICogTWFrZSBzdXJlIHRoZSBvbGQgZmFj
ZSBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVkZ2UuCi0gICAgICovCi0gICAgTWFrZUZhY2UoIG5l
d0ZhY2UsIGVEc3QsIGVPcmctPkxmYWNlICk7Ci0gICAgZU9yZy0+TGZhY2UtPmFuRWRnZSA9IGVP
cmc7Ci0gIH0KLQotICByZXR1cm4gMTsKLX0KLQotCi0vKiBfX2dsX21lc2hEZWxldGUoIGVEZWwg
KSByZW1vdmVzIHRoZSBlZGdlIGVEZWwuICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlczoKLSAqIGlm
IChlRGVsLT5MZmFjZSAhPSBlRGVsLT5SZmFjZSksIHdlIGpvaW4gdHdvIGxvb3BzIGludG8gb25l
OyB0aGUgbG9vcAotICogZURlbC0+TGZhY2UgaXMgZGVsZXRlZC4gIE90aGVyd2lzZSwgd2UgYXJl
IHNwbGl0dGluZyBvbmUgbG9vcCBpbnRvIHR3bzsKLSAqIHRoZSBuZXdseSBjcmVhdGVkIGxvb3Ag
d2lsbCBjb250YWluIGVEZWwtPkRzdC4gIElmIHRoZSBkZWxldGlvbiBvZiBlRGVsCi0gKiB3b3Vs
ZCBjcmVhdGUgaXNvbGF0ZWQgdmVydGljZXMsIHRob3NlIGFyZSBkZWxldGVkIGFzIHdlbGwuCi0g
KgotICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyB0d28gY2FsbHMgdG8g
X19nbF9tZXNoU3BsaWNlCi0gKiBwbHVzIGEgZmV3IGNhbGxzIHRvIG1lbUZyZWUsIGJ1dCB0aGlz
IHdvdWxkIGFsbG9jYXRlIGFuZCBkZWxldGUKLSAqIHVubmVjZXNzYXJ5IHZlcnRpY2VzIGFuZCBm
YWNlcy4KLSAqLwotaW50IF9fZ2xfbWVzaERlbGV0ZSggR0xVaGFsZkVkZ2UgKmVEZWwgKQotewot
ICBHTFVoYWxmRWRnZSAqZURlbFN5bSA9IGVEZWwtPlN5bTsKLSAgaW50IGpvaW5pbmdMb29wcyA9
IEZBTFNFOwotCi0gIC8qIEZpcnN0IHN0ZXA6IGRpc2Nvbm5lY3QgdGhlIG9yaWdpbiB2ZXJ0ZXgg
ZURlbC0+T3JnLiAgV2UgbWFrZSBhbGwKLSAgICogY2hhbmdlcyB0byBnZXQgYSBjb25zaXN0ZW50
IG1lc2ggaW4gdGhpcyAiaW50ZXJtZWRpYXRlIiBzdGF0ZS4KLSAgICovCi0gIGlmKCBlRGVsLT5M
ZmFjZSAhPSBlRGVsLT5SZmFjZSApIHsKLSAgICAvKiBXZSBhcmUgam9pbmluZyB0d28gbG9vcHMg
aW50byBvbmUgLS0gcmVtb3ZlIHRoZSBsZWZ0IGZhY2UgKi8KLSAgICBqb2luaW5nTG9vcHMgPSBU
UlVFOwotICAgIEtpbGxGYWNlKCBlRGVsLT5MZmFjZSwgZURlbC0+UmZhY2UgKTsKLSAgfQotCi0g
IGlmKCBlRGVsLT5PbmV4dCA9PSBlRGVsICkgewotICAgIEtpbGxWZXJ0ZXgoIGVEZWwtPk9yZywg
TlVMTCApOwotICB9IGVsc2UgewotICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGVEZWwtPk9yZyBhbmQg
ZURlbC0+UmZhY2UgcG9pbnQgdG8gdmFsaWQgaGFsZi1lZGdlcyAqLwotICAgIGVEZWwtPlJmYWNl
LT5hbkVkZ2UgPSBlRGVsLT5PcHJldjsKLSAgICBlRGVsLT5PcmctPmFuRWRnZSA9IGVEZWwtPk9u
ZXh0OwotCi0gICAgU3BsaWNlKCBlRGVsLCBlRGVsLT5PcHJldiApOwotICAgIGlmKCAhIGpvaW5p
bmdMb29wcyApIHsKLSAgICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOwotICAgICAg
aWYgKG5ld0ZhY2UgPT0gTlVMTCkgcmV0dXJuIDA7IAotCi0gICAgICAvKiBXZSBhcmUgc3BsaXR0
aW5nIG9uZSBsb29wIGludG8gdHdvIC0tIGNyZWF0ZSBhIG5ldyBsb29wIGZvciBlRGVsLiAqLwot
ICAgICAgTWFrZUZhY2UoIG5ld0ZhY2UsIGVEZWwsIGVEZWwtPkxmYWNlICk7Ci0gICAgfQotICB9
Ci0KLSAgLyogQ2xhaW06IHRoZSBtZXNoIGlzIG5vdyBpbiBhIGNvbnNpc3RlbnQgc3RhdGUsIGV4
Y2VwdCB0aGF0IGVEZWwtPk9yZwotICAgKiBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQuICBOb3cgd2Ug
ZGlzY29ubmVjdCBlRGVsLT5Ec3QuCi0gICAqLwotICBpZiggZURlbFN5bS0+T25leHQgPT0gZURl
bFN5bSApIHsKLSAgICBLaWxsVmVydGV4KCBlRGVsU3ltLT5PcmcsIE5VTEwgKTsKLSAgICBLaWxs
RmFjZSggZURlbFN5bS0+TGZhY2UsIE5VTEwgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBNYWtlIHN1
cmUgdGhhdCBlRGVsLT5Ec3QgYW5kIGVEZWwtPkxmYWNlIHBvaW50IHRvIHZhbGlkIGhhbGYtZWRn
ZXMgKi8KLSAgICBlRGVsLT5MZmFjZS0+YW5FZGdlID0gZURlbFN5bS0+T3ByZXY7Ci0gICAgZURl
bFN5bS0+T3JnLT5hbkVkZ2UgPSBlRGVsU3ltLT5PbmV4dDsKLSAgICBTcGxpY2UoIGVEZWxTeW0s
IGVEZWxTeW0tPk9wcmV2ICk7Ci0gIH0KLQotICAvKiBBbnkgaXNvbGF0ZWQgdmVydGljZXMgb3Ig
ZmFjZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZWQuICovCi0gIEtpbGxFZGdlKCBlRGVsICk7Ci0K
LSAgcmV0dXJuIDE7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqIE90aGVyIEVkZ2UgT3Bl
cmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBBbGwgdGhlc2Ugcm91dGluZXMg
Y2FuIGJlIGltcGxlbWVudGVkIHdpdGggdGhlIGJhc2ljIGVkZ2UKLSAqIG9wZXJhdGlvbnMgYWJv
dmUuICBUaGV5IGFyZSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UgYW5kIGVmZmljaWVuY3kuCi0g
Ki8KLQotCi0vKiBfX2dsX21lc2hBZGRFZGdlVmVydGV4KCBlT3JnICkgY3JlYXRlcyBhIG5ldyBl
ZGdlIGVOZXcgc3VjaCB0aGF0Ci0gKiBlTmV3ID09IGVPcmctPkxuZXh0LCBhbmQgZU5ldy0+RHN0
IGlzIGEgbmV3bHkgY3JlYXRlZCB2ZXJ0ZXguCi0gKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0
aGUgc2FtZSBsZWZ0IGZhY2UuCi0gKi8KLUdMVWhhbGZFZGdlICpfX2dsX21lc2hBZGRFZGdlVmVy
dGV4KCBHTFVoYWxmRWRnZSAqZU9yZyApCi17Ci0gIEdMVWhhbGZFZGdlICplTmV3U3ltOwotICBH
TFVoYWxmRWRnZSAqZU5ldyA9IE1ha2VFZGdlKCBlT3JnICk7Ci0gIGlmIChlTmV3ID09IE5VTEwp
IHJldHVybiBOVUxMOwotCi0gIGVOZXdTeW0gPSBlTmV3LT5TeW07Ci0KLSAgLyogQ29ubmVjdCB0
aGUgbmV3IGVkZ2UgYXBwcm9wcmlhdGVseSAqLwotICBTcGxpY2UoIGVOZXcsIGVPcmctPkxuZXh0
ICk7Ci0KLSAgLyogU2V0IHRoZSB2ZXJ0ZXggYW5kIGZhY2UgaW5mb3JtYXRpb24gKi8KLSAgZU5l
dy0+T3JnID0gZU9yZy0+RHN0OwotICB7Ci0gICAgR0xVdmVydGV4ICpuZXdWZXJ0ZXg9IGFsbG9j
VmVydGV4KCk7Ci0gICAgaWYgKG5ld1ZlcnRleCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICAg
IE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleCwgZU5ld1N5bSwgZU5ldy0+T3JnICk7Ci0gIH0KLSAgZU5l
dy0+TGZhY2UgPSBlTmV3U3ltLT5MZmFjZSA9IGVPcmctPkxmYWNlOwotCi0gIHJldHVybiBlTmV3
OwotfQotCi0KLS8qIF9fZ2xfbWVzaFNwbGl0RWRnZSggZU9yZyApIHNwbGl0cyBlT3JnIGludG8g
dHdvIGVkZ2VzIGVPcmcgYW5kIGVOZXcsCi0gKiBzdWNoIHRoYXQgZU5ldyA9PSBlT3JnLT5MbmV4
dC4gIFRoZSBuZXcgdmVydGV4IGlzIGVPcmctPkRzdCA9PSBlTmV3LT5PcmcuCi0gKiBlT3JnIGFu
ZCBlTmV3IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZWZ0IGZhY2UuCi0gKi8KLUdMVWhhbGZFZGdlICpf
X2dsX21lc2hTcGxpdEVkZ2UoIEdMVWhhbGZFZGdlICplT3JnICkKLXsKLSAgR0xVaGFsZkVkZ2Ug
KmVOZXc7Ci0gIEdMVWhhbGZFZGdlICp0ZW1wSGFsZkVkZ2U9IF9fZ2xfbWVzaEFkZEVkZ2VWZXJ0
ZXgoIGVPcmcgKTsKLSAgaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQot
ICBlTmV3ID0gdGVtcEhhbGZFZGdlLT5TeW07Ci0KLSAgLyogRGlzY29ubmVjdCBlT3JnIGZyb20g
ZU9yZy0+RHN0IGFuZCBjb25uZWN0IGl0IHRvIGVOZXctPk9yZyAqLwotICBTcGxpY2UoIGVPcmct
PlN5bSwgZU9yZy0+U3ltLT5PcHJldiApOwotICBTcGxpY2UoIGVPcmctPlN5bSwgZU5ldyApOwot
Ci0gIC8qIFNldCB0aGUgdmVydGV4IGFuZCBmYWNlIGluZm9ybWF0aW9uICovCi0gIGVPcmctPkRz
dCA9IGVOZXctPk9yZzsKLSAgZU5ldy0+RHN0LT5hbkVkZ2UgPSBlTmV3LT5TeW07CS8qIG1heSBo
YXZlIHBvaW50ZWQgdG8gZU9yZy0+U3ltICovCi0gIGVOZXctPlJmYWNlID0gZU9yZy0+UmZhY2U7
Ci0gIGVOZXctPndpbmRpbmcgPSBlT3JnLT53aW5kaW5nOwkvKiBjb3B5IG9sZCB3aW5kaW5nIGlu
Zm9ybWF0aW9uICovCi0gIGVOZXctPlN5bS0+d2luZGluZyA9IGVPcmctPlN5bS0+d2luZGluZzsK
LQotICByZXR1cm4gZU5ldzsKLX0KLQotCi0vKiBfX2dsX21lc2hDb25uZWN0KCBlT3JnLCBlRHN0
ICkgY3JlYXRlcyBhIG5ldyBlZGdlIGZyb20gZU9yZy0+RHN0Ci0gKiB0byBlRHN0LT5PcmcsIGFu
ZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGhhbGYtZWRnZSBlTmV3LgotICogSWYgZU9yZy0+
TGZhY2UgPT0gZURzdC0+TGZhY2UsIHRoaXMgc3BsaXRzIG9uZSBsb29wIGludG8gdHdvLAotICog
YW5kIHRoZSBuZXdseSBjcmVhdGVkIGxvb3AgaXMgZU5ldy0+TGZhY2UuICBPdGhlcndpc2UsIHR3
byBkaXNqb2ludAotICogbG9vcHMgYXJlIG1lcmdlZCBpbnRvIG9uZSwgYW5kIHRoZSBsb29wIGVE
c3QtPkxmYWNlIGlzIGRlc3Ryb3llZC4KLSAqCi0gKiBJZiAoZU9yZyA9PSBlRHN0KSwgdGhlIG5l
dyBmYWNlIHdpbGwgaGF2ZSBvbmx5IHR3byBlZGdlcy4KLSAqIElmIChlT3JnLT5MbmV4dCA9PSBl
RHN0KSwgdGhlIG9sZCBmYWNlIGlzIHJlZHVjZWQgdG8gYSBzaW5nbGUgZWRnZS4KLSAqIElmIChl
T3JnLT5MbmV4dC0+TG5leHQgPT0gZURzdCksIHRoZSBvbGQgZmFjZSBpcyByZWR1Y2VkIHRvIHR3
byBlZGdlcy4KLSAqLwotR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaENvbm5lY3QoIEdMVWhhbGZFZGdl
ICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApCi17Ci0gIEdMVWhhbGZFZGdlICplTmV3U3ltOwot
ICBpbnQgam9pbmluZ0xvb3BzID0gRkFMU0U7ICAKLSAgR0xVaGFsZkVkZ2UgKmVOZXcgPSBNYWtl
RWRnZSggZU9yZyApOwotICBpZiAoZU5ldyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBlTmV3
U3ltID0gZU5ldy0+U3ltOwotCi0gIGlmKCBlRHN0LT5MZmFjZSAhPSBlT3JnLT5MZmFjZSApIHsK
LSAgICAvKiBXZSBhcmUgY29ubmVjdGluZyB0d28gZGlzam9pbnQgbG9vcHMgLS0gZGVzdHJveSBl
RHN0LT5MZmFjZSAqLwotICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7Ci0gICAgS2lsbEZhY2UoIGVE
c3QtPkxmYWNlLCBlT3JnLT5MZmFjZSApOwotICB9Ci0KLSAgLyogQ29ubmVjdCB0aGUgbmV3IGVk
Z2UgYXBwcm9wcmlhdGVseSAqLwotICBTcGxpY2UoIGVOZXcsIGVPcmctPkxuZXh0ICk7Ci0gIFNw
bGljZSggZU5ld1N5bSwgZURzdCApOwotCi0gIC8qIFNldCB0aGUgdmVydGV4IGFuZCBmYWNlIGlu
Zm9ybWF0aW9uICovCi0gIGVOZXctPk9yZyA9IGVPcmctPkRzdDsKLSAgZU5ld1N5bS0+T3JnID0g
ZURzdC0+T3JnOwotICBlTmV3LT5MZmFjZSA9IGVOZXdTeW0tPkxmYWNlID0gZU9yZy0+TGZhY2U7
Ci0KLSAgLyogTWFrZSBzdXJlIHRoZSBvbGQgZmFjZSBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVk
Z2UgKi8KLSAgZU9yZy0+TGZhY2UtPmFuRWRnZSA9IGVOZXdTeW07Ci0KLSAgaWYoICEgam9pbmlu
Z0xvb3BzICkgewotICAgIEdMVWZhY2UgKm5ld0ZhY2U9IGFsbG9jRmFjZSgpOwotICAgIGlmIChu
ZXdGYWNlID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gICAgLyogV2Ugc3BsaXQgb25lIGxvb3Ag
aW50byB0d28gLS0gdGhlIG5ldyBsb29wIGlzIGVOZXctPkxmYWNlICovCi0gICAgTWFrZUZhY2Uo
IG5ld0ZhY2UsIGVOZXcsIGVPcmctPkxmYWNlICk7Ci0gIH0KLSAgcmV0dXJuIGVOZXc7Ci19Ci0K
LQotLyoqKioqKioqKioqKioqKioqKioqIE90aGVyIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioq
KioqKioqKi8KLQotLyogX19nbF9tZXNoWmFwRmFjZSggZlphcCApIGRlc3Ryb3lzIGEgZmFjZSBh
bmQgcmVtb3ZlcyBpdCBmcm9tIHRoZQotICogZ2xvYmFsIGZhY2UgbGlzdC4gIEFsbCBlZGdlcyBv
ZiBmWmFwIHdpbGwgaGF2ZSBhIE5VTEwgcG9pbnRlciBhcyB0aGVpcgotICogbGVmdCBmYWNlLiAg
QW55IGVkZ2VzIHdoaWNoIGFsc28gaGF2ZSBhIE5VTEwgcG9pbnRlciBhcyB0aGVpciByaWdodCBm
YWNlCi0gKiBhcmUgZGVsZXRlZCBlbnRpcmVseSAoYWxvbmcgd2l0aCBhbnkgaXNvbGF0ZWQgdmVy
dGljZXMgdGhpcyBwcm9kdWNlcykuCi0gKiBBbiBlbnRpcmUgbWVzaCBjYW4gYmUgZGVsZXRlZCBi
eSB6YXBwaW5nIGl0cyBmYWNlcywgb25lIGF0IGEgdGltZSwKLSAqIGluIGFueSBvcmRlci4gIFph
cHBlZCBmYWNlcyBjYW5ub3QgYmUgdXNlZCBpbiBmdXJ0aGVyIG1lc2ggb3BlcmF0aW9ucyEKLSAq
Lwotdm9pZCBfX2dsX21lc2haYXBGYWNlKCBHTFVmYWNlICpmWmFwICkKLXsKLSAgR0xVaGFsZkVk
Z2UgKmVTdGFydCA9IGZaYXAtPmFuRWRnZTsKLSAgR0xVaGFsZkVkZ2UgKmUsICplTmV4dCwgKmVT
eW07Ci0gIEdMVWZhY2UgKmZQcmV2LCAqZk5leHQ7Ci0KLSAgLyogd2FsayBhcm91bmQgZmFjZSwg
ZGVsZXRpbmcgZWRnZXMgd2hvc2UgcmlnaHQgZmFjZSBpcyBhbHNvIE5VTEwgKi8KLSAgZU5leHQg
PSBlU3RhcnQtPkxuZXh0OwotICBkbyB7Ci0gICAgZSA9IGVOZXh0OwotICAgIGVOZXh0ID0gZS0+
TG5leHQ7Ci0KLSAgICBlLT5MZmFjZSA9IE5VTEw7Ci0gICAgaWYoIGUtPlJmYWNlID09IE5VTEwg
KSB7Ci0gICAgICAvKiBkZWxldGUgdGhlIGVkZ2UgLS0gc2VlIF9fZ2xfTWVzaERlbGV0ZSBhYm92
ZSAqLwotCi0gICAgICBpZiggZS0+T25leHQgPT0gZSApIHsKLQlLaWxsVmVydGV4KCBlLT5Pcmcs
IE5VTEwgKTsKLSAgICAgIH0gZWxzZSB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgZS0+T3JnIHBvaW50
cyB0byBhIHZhbGlkIGhhbGYtZWRnZSAqLwotCWUtPk9yZy0+YW5FZGdlID0gZS0+T25leHQ7Ci0J
U3BsaWNlKCBlLCBlLT5PcHJldiApOwotICAgICAgfQotICAgICAgZVN5bSA9IGUtPlN5bTsKLSAg
ICAgIGlmKCBlU3ltLT5PbmV4dCA9PSBlU3ltICkgewotCUtpbGxWZXJ0ZXgoIGVTeW0tPk9yZywg
TlVMTCApOwotICAgICAgfSBlbHNlIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCBlU3ltLT5PcmcgcG9p
bnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdlICovCi0JZVN5bS0+T3JnLT5hbkVkZ2UgPSBlU3ltLT5P
bmV4dDsKLQlTcGxpY2UoIGVTeW0sIGVTeW0tPk9wcmV2ICk7Ci0gICAgICB9Ci0gICAgICBLaWxs
RWRnZSggZSApOwotICAgIH0KLSAgfSB3aGlsZSggZSAhPSBlU3RhcnQgKTsKLQotICAvKiBkZWxl
dGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgKi8KLSAgZlByZXYgPSBmWmFwLT5w
cmV2OwotICBmTmV4dCA9IGZaYXAtPm5leHQ7Ci0gIGZOZXh0LT5wcmV2ID0gZlByZXY7Ci0gIGZQ
cmV2LT5uZXh0ID0gZk5leHQ7Ci0KLSAgbWVtRnJlZSggZlphcCApOwotfQotCi0KLS8qIF9fZ2xf
bWVzaE5ld01lc2goKSBjcmVhdGVzIGEgbmV3IG1lc2ggd2l0aCBubyBlZGdlcywgbm8gdmVydGlj
ZXMsCi0gKiBhbmQgbm8gbG9vcHMgKHdoYXQgd2UgdXN1YWxseSBjYWxsIGEgImZhY2UiKS4KLSAq
LwotR0xVbWVzaCAqX19nbF9tZXNoTmV3TWVzaCggdm9pZCApCi17Ci0gIEdMVXZlcnRleCAqdjsK
LSAgR0xVZmFjZSAqZjsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIEdMVWhhbGZFZGdlICplU3ltOwot
ICBHTFVtZXNoICptZXNoID0gKEdMVW1lc2ggKiltZW1BbGxvYyggc2l6ZW9mKCBHTFVtZXNoICkp
OwotICBpZiAobWVzaCA9PSBOVUxMKSB7Ci0gICAgIHJldHVybiBOVUxMOwotICB9Ci0gIAotICB2
ID0gJm1lc2gtPnZIZWFkOwotICBmID0gJm1lc2gtPmZIZWFkOwotICBlID0gJm1lc2gtPmVIZWFk
OwotICBlU3ltID0gJm1lc2gtPmVIZWFkU3ltOwotCi0gIHYtPm5leHQgPSB2LT5wcmV2ID0gdjsK
LSAgdi0+YW5FZGdlID0gTlVMTDsKLSAgdi0+ZGF0YSA9IE5VTEw7Ci0KLSAgZi0+bmV4dCA9IGYt
PnByZXYgPSBmOwotICBmLT5hbkVkZ2UgPSBOVUxMOwotICBmLT5kYXRhID0gTlVMTDsKLSAgZi0+
dHJhaWwgPSBOVUxMOwotICBmLT5tYXJrZWQgPSBGQUxTRTsKLSAgZi0+aW5zaWRlID0gRkFMU0U7
Ci0KLSAgZS0+bmV4dCA9IGU7Ci0gIGUtPlN5bSA9IGVTeW07Ci0gIGUtPk9uZXh0ID0gTlVMTDsK
LSAgZS0+TG5leHQgPSBOVUxMOwotICBlLT5PcmcgPSBOVUxMOwotICBlLT5MZmFjZSA9IE5VTEw7
Ci0gIGUtPndpbmRpbmcgPSAwOwotICBlLT5hY3RpdmVSZWdpb24gPSBOVUxMOwotCi0gIGVTeW0t
Pm5leHQgPSBlU3ltOwotICBlU3ltLT5TeW0gPSBlOwotICBlU3ltLT5PbmV4dCA9IE5VTEw7Ci0g
IGVTeW0tPkxuZXh0ID0gTlVMTDsKLSAgZVN5bS0+T3JnID0gTlVMTDsKLSAgZVN5bS0+TGZhY2Ug
PSBOVUxMOwotICBlU3ltLT53aW5kaW5nID0gMDsKLSAgZVN5bS0+YWN0aXZlUmVnaW9uID0gTlVM
TDsKLQotICByZXR1cm4gbWVzaDsKLX0KLQotCi0vKiBfX2dsX21lc2hVbmlvbiggbWVzaDEsIG1l
c2gyICkgZm9ybXMgdGhlIHVuaW9uIG9mIGFsbCBzdHJ1Y3R1cmVzIGluCi0gKiBib3RoIG1lc2hl
cywgYW5kIHJldHVybnMgdGhlIG5ldyBtZXNoICh0aGUgb2xkIG1lc2hlcyBhcmUgZGVzdHJveWVk
KS4KLSAqLwotR0xVbWVzaCAqX19nbF9tZXNoVW5pb24oIEdMVW1lc2ggKm1lc2gxLCBHTFVtZXNo
ICptZXNoMiApCi17Ci0gIEdMVWZhY2UgKmYxID0gJm1lc2gxLT5mSGVhZDsKLSAgR0xVdmVydGV4
ICp2MSA9ICZtZXNoMS0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdlICplMSA9ICZtZXNoMS0+ZUhlYWQ7
Ci0gIEdMVWZhY2UgKmYyID0gJm1lc2gyLT5mSGVhZDsKLSAgR0xVdmVydGV4ICp2MiA9ICZtZXNo
Mi0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdlICplMiA9ICZtZXNoMi0+ZUhlYWQ7Ci0KLSAgLyogQWRk
IHRoZSBmYWNlcywgdmVydGljZXMsIGFuZCBlZGdlcyBvZiBtZXNoMiB0byB0aG9zZSBvZiBtZXNo
MSAqLwotICBpZiggZjItPm5leHQgIT0gZjIgKSB7Ci0gICAgZjEtPnByZXYtPm5leHQgPSBmMi0+
bmV4dDsKLSAgICBmMi0+bmV4dC0+cHJldiA9IGYxLT5wcmV2OwotICAgIGYyLT5wcmV2LT5uZXh0
ID0gZjE7Ci0gICAgZjEtPnByZXYgPSBmMi0+cHJldjsKLSAgfQotCi0gIGlmKCB2Mi0+bmV4dCAh
PSB2MiApIHsKLSAgICB2MS0+cHJldi0+bmV4dCA9IHYyLT5uZXh0OwotICAgIHYyLT5uZXh0LT5w
cmV2ID0gdjEtPnByZXY7Ci0gICAgdjItPnByZXYtPm5leHQgPSB2MTsKLSAgICB2MS0+cHJldiA9
IHYyLT5wcmV2OwotICB9Ci0KLSAgaWYoIGUyLT5uZXh0ICE9IGUyICkgewotICAgIGUxLT5TeW0t
Pm5leHQtPlN5bS0+bmV4dCA9IGUyLT5uZXh0OwotICAgIGUyLT5uZXh0LT5TeW0tPm5leHQgPSBl
MS0+U3ltLT5uZXh0OwotICAgIGUyLT5TeW0tPm5leHQtPlN5bS0+bmV4dCA9IGUxOwotICAgIGUx
LT5TeW0tPm5leHQgPSBlMi0+U3ltLT5uZXh0OwotICB9Ci0KLSAgbWVtRnJlZSggbWVzaDIgKTsK
LSAgcmV0dXJuIG1lc2gxOwotfQotCi0KLSNpZmRlZiBERUxFVEVfQllfWkFQUElORwotCi0vKiBf
X2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBzdG9yYWdlIGZvciBhbnkg
dmFsaWQgbWVzaC4KLSAqLwotdm9pZCBfX2dsX21lc2hEZWxldGVNZXNoKCBHTFVtZXNoICptZXNo
ICkKLXsKLSAgR0xVZmFjZSAqZkhlYWQgPSAmbWVzaC0+ZkhlYWQ7Ci0KLSAgd2hpbGUoIGZIZWFk
LT5uZXh0ICE9IGZIZWFkICkgewotICAgIF9fZ2xfbWVzaFphcEZhY2UoIGZIZWFkLT5uZXh0ICk7
Ci0gIH0KLSAgYXNzZXJ0KCBtZXNoLT52SGVhZC5uZXh0ID09ICZtZXNoLT52SGVhZCApOwotCi0g
IG1lbUZyZWUoIG1lc2ggKTsKLX0KLQotI2Vsc2UKLQotLyogX19nbF9tZXNoRGVsZXRlTWVzaCgg
bWVzaCApIHdpbGwgZnJlZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZhbGlkIG1lc2guCi0gKi8KLXZv
aWQgX19nbF9tZXNoRGVsZXRlTWVzaCggR0xVbWVzaCAqbWVzaCApCi17Ci0gIEdMVWZhY2UgKmYs
ICpmTmV4dDsKLSAgR0xVdmVydGV4ICp2LCAqdk5leHQ7Ci0gIEdMVWhhbGZFZGdlICplLCAqZU5l
eHQ7Ci0KLSAgZm9yKCBmID0gbWVzaC0+ZkhlYWQubmV4dDsgZiAhPSAmbWVzaC0+ZkhlYWQ7IGYg
PSBmTmV4dCApIHsKLSAgICBmTmV4dCA9IGYtPm5leHQ7Ci0gICAgbWVtRnJlZSggZiApOwotICB9
Ci0KLSAgZm9yKCB2ID0gbWVzaC0+dkhlYWQubmV4dDsgdiAhPSAmbWVzaC0+dkhlYWQ7IHYgPSB2
TmV4dCApIHsKLSAgICB2TmV4dCA9IHYtPm5leHQ7Ci0gICAgbWVtRnJlZSggdiApOwotICB9Ci0K
LSAgZm9yKCBlID0gbWVzaC0+ZUhlYWQubmV4dDsgZSAhPSAmbWVzaC0+ZUhlYWQ7IGUgPSBlTmV4
dCApIHsKLSAgICAvKiBPbmUgY2FsbCBmcmVlcyBib3RoIGUgYW5kIGUtPlN5bSAoc2VlIEVkZ2VQ
YWlyIGFib3ZlKSAqLwotICAgIGVOZXh0ID0gZS0+bmV4dDsKLSAgICBtZW1GcmVlKCBlICk7Ci0g
IH0KLQotICBtZW1GcmVlKCBtZXNoICk7Ci19Ci0KLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwot
Ci0vKiBfX2dsX21lc2hDaGVja01lc2goIG1lc2ggKSBjaGVja3MgYSBtZXNoIGZvciBzZWxmLWNv
bnNpc3RlbmN5LgotICovCi12b2lkIF9fZ2xfbWVzaENoZWNrTWVzaCggR0xVbWVzaCAqbWVzaCAp
Ci17Ci0gIEdMVWZhY2UgKmZIZWFkID0gJm1lc2gtPmZIZWFkOwotICBHTFV2ZXJ0ZXggKnZIZWFk
ID0gJm1lc2gtPnZIZWFkOwotICBHTFVoYWxmRWRnZSAqZUhlYWQgPSAmbWVzaC0+ZUhlYWQ7Ci0g
IEdMVWZhY2UgKmYsICpmUHJldjsKLSAgR0xVdmVydGV4ICp2LCAqdlByZXY7Ci0gIEdMVWhhbGZF
ZGdlICplLCAqZVByZXY7Ci0KLSAgZlByZXYgPSBmSGVhZDsKLSAgZm9yKCBmUHJldiA9IGZIZWFk
IDsgKGYgPSBmUHJldi0+bmV4dCkgIT0gZkhlYWQ7IGZQcmV2ID0gZikgewotICAgIGFzc2VydCgg
Zi0+cHJldiA9PSBmUHJldiApOwotICAgIGUgPSBmLT5hbkVkZ2U7Ci0gICAgZG8gewotICAgICAg
YXNzZXJ0KCBlLT5TeW0gIT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5TeW0tPlN5bSA9PSBlICk7
Ci0gICAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+U3ltID09IGUgKTsKLSAgICAgIGFzc2Vy
dCggZS0+T25leHQtPlN5bS0+TG5leHQgPT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5MZmFjZSA9
PSBmICk7Ci0gICAgICBlID0gZS0+TG5leHQ7Ci0gICAgfSB3aGlsZSggZSAhPSBmLT5hbkVkZ2Ug
KTsKLSAgfQotICBhc3NlcnQoIGYtPnByZXYgPT0gZlByZXYgJiYgZi0+YW5FZGdlID09IE5VTEwg
JiYgZi0+ZGF0YSA9PSBOVUxMICk7Ci0KLSAgdlByZXYgPSB2SGVhZDsKLSAgZm9yKCB2UHJldiA9
IHZIZWFkIDsgKHYgPSB2UHJldi0+bmV4dCkgIT0gdkhlYWQ7IHZQcmV2ID0gdikgewotICAgIGFz
c2VydCggdi0+cHJldiA9PSB2UHJldiApOwotICAgIGUgPSB2LT5hbkVkZ2U7Ci0gICAgZG8gewot
ICAgICAgYXNzZXJ0KCBlLT5TeW0gIT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5TeW0tPlN5bSA9
PSBlICk7Ci0gICAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+U3ltID09IGUgKTsKLSAgICAg
IGFzc2VydCggZS0+T25leHQtPlN5bS0+TG5leHQgPT0gZSApOwotICAgICAgYXNzZXJ0KCBlLT5P
cmcgPT0gdiApOwotICAgICAgZSA9IGUtPk9uZXh0OwotICAgIH0gd2hpbGUoIGUgIT0gdi0+YW5F
ZGdlICk7Ci0gIH0KLSAgYXNzZXJ0KCB2LT5wcmV2ID09IHZQcmV2ICYmIHYtPmFuRWRnZSA9PSBO
VUxMICYmIHYtPmRhdGEgPT0gTlVMTCApOwotCi0gIGVQcmV2ID0gZUhlYWQ7Ci0gIGZvciggZVBy
ZXYgPSBlSGVhZCA7IChlID0gZVByZXYtPm5leHQpICE9IGVIZWFkOyBlUHJldiA9IGUpIHsKLSAg
ICBhc3NlcnQoIGUtPlN5bS0+bmV4dCA9PSBlUHJldi0+U3ltICk7Ci0gICAgYXNzZXJ0KCBlLT5T
eW0gIT0gZSApOwotICAgIGFzc2VydCggZS0+U3ltLT5TeW0gPT0gZSApOwotICAgIGFzc2VydCgg
ZS0+T3JnICE9IE5VTEwgKTsKLSAgICBhc3NlcnQoIGUtPkRzdCAhPSBOVUxMICk7Ci0gICAgYXNz
ZXJ0KCBlLT5MbmV4dC0+T25leHQtPlN5bSA9PSBlICk7Ci0gICAgYXNzZXJ0KCBlLT5PbmV4dC0+
U3ltLT5MbmV4dCA9PSBlICk7Ci0gIH0KLSAgYXNzZXJ0KCBlLT5TeW0tPm5leHQgPT0gZVByZXYt
PlN5bQotICAgICAgICYmIGUtPlN5bSA9PSAmbWVzaC0+ZUhlYWRTeW0KLSAgICAgICAmJiBlLT5T
eW0tPlN5bSA9PSBlCi0gICAgICAgJiYgZS0+T3JnID09IE5VTEwgJiYgZS0+RHN0ID09IE5VTEwK
LSAgICAgICAmJiBlLT5MZmFjZSA9PSBOVUxMICYmIGUtPlJmYWNlID09IE5VTEwgKTsKLX0KLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21l
c2guaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL21lc2guaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSoqIExp
Y2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhp
cyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMg
cGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9u
IDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBz
dWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90
IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFw
aGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQ
YXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJv
dmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgot
KiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVT
IEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRB
VElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hB
TlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElD
VUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29k
ZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0q
KiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkg
U2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0
IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFu
eSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBl
bHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFs
IE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNl
cwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFs
IENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0
aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwg
cmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRo
ZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIg
MTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0wo
UikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBT
R0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiog
Y29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24u
Ci0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAk
RGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xp
YnRlc3MvbWVzaC5oIzUgJAotKi8KLQotI2lmbmRlZiBfX21lc2hfaF8KLSNkZWZpbmUgX19tZXNo
X2hfCi0KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKLQotdHlwZWRl
ZiBzdHJ1Y3QgR0xVbWVzaCBHTFVtZXNoOyAKLQotdHlwZWRlZiBzdHJ1Y3QgR0xVdmVydGV4IEdM
VXZlcnRleDsKLXR5cGVkZWYgc3RydWN0IEdMVWZhY2UgR0xVZmFjZTsKLXR5cGVkZWYgc3RydWN0
IEdMVWhhbGZFZGdlIEdMVWhhbGZFZGdlOwotCi10eXBlZGVmIHN0cnVjdCBBY3RpdmVSZWdpb24g
QWN0aXZlUmVnaW9uOwkvKiBJbnRlcm5hbCBkYXRhICovCi0KLS8qIFRoZSBtZXNoIHN0cnVjdHVy
ZSBpcyBzaW1pbGFyIGluIHNwaXJpdCwgbm90YXRpb24sIGFuZCBvcGVyYXRpb25zCi0gKiB0byB0
aGUgInF1YWQtZWRnZSIgc3RydWN0dXJlIChzZWUgTC4gR3VpYmFzIGFuZCBKLiBTdG9sZmksIFBy
aW1pdGl2ZXMKLSAqIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9mIGdlbmVyYWwgc3ViZGl2aXNpb25z
IGFuZCB0aGUgY29tcHV0YXRpb24gb2YKLSAqIFZvcm9ub2kgZGlhZ3JhbXMsIEFDTSBUcmFuc2Fj
dGlvbnMgb24gR3JhcGhpY3MsIDQoMik6NzQtMTIzLCBBcHJpbCAxOTg1KS4KLSAqIEZvciBhIHNp
bXBsaWZpZWQgZGVzY3JpcHRpb24sIHNlZSB0aGUgY291cnNlIG5vdGVzIGZvciBDUzM0OGEsCi0g
KiAiTWF0aGVtYXRpY2FsIEZvdW5kYXRpb25zIG9mIENvbXB1dGVyIEdyYXBoaWNzIiwgYXZhaWxh
YmxlIGF0IHRoZQotICogU3RhbmZvcmQgYm9va3N0b3JlIChhbmQgdGF1Z2h0IGR1cmluZyB0aGUg
ZmFsbCBxdWFydGVyKS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGJvcnJvd3MgYSB0aW55
IHN1YnNldCBvZiB0aGUgZ3JhcGgtYmFzZWQgYXBwcm9hY2gKLSAqIHVzZSBpbiBNYW50eWxhJ3Mg
R2VvbWV0cmljIFdvcmsgQmVuY2ggKHNlZSBNLiBNYW50eWxhLCBBbiBJbnRyb2R1Y3Rpb24KLSAq
IHRvIFNvbGQgTW9kZWxpbmcsIENvbXB1dGVyIFNjaWVuY2UgUHJlc3MsIFJvY2t2aWxsZSwgTWFy
eWxhbmQsIDE5ODgpLgotICoKLSAqIFRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSBpcyB0
aGUgImhhbGYtZWRnZSIuICBUd28gaGFsZi1lZGdlcwotICogZ28gdG9nZXRoZXIgdG8gbWFrZSBh
biBlZGdlLCBidXQgdGhleSBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLgotICogRWFjaCBo
YWxmLWVkZ2UgaGFzIGEgcG9pbnRlciB0byBpdHMgbWF0ZSAodGhlICJzeW1tZXRyaWMiIGhhbGYt
ZWRnZSBTeW0pLAotICogaXRzIG9yaWdpbiB2ZXJ0ZXggKE9yZyksIHRoZSBmYWNlIG9uIGl0cyBs
ZWZ0IHNpZGUgKExmYWNlKSwgYW5kIHRoZQotICogYWRqYWNlbnQgaGFsZi1lZGdlcyBpbiB0aGUg
Q0NXIGRpcmVjdGlvbiBhcm91bmQgdGhlIG9yaWdpbiB2ZXJ0ZXgKLSAqIChPbmV4dCkgYW5kIGFy
b3VuZCB0aGUgbGVmdCBmYWNlIChMbmV4dCkuICBUaGVyZSBpcyBhbHNvIGEgIm5leHQiCi0gKiBw
b2ludGVyIGZvciB0aGUgZ2xvYmFsIGVkZ2UgbGlzdCAoc2VlIGJlbG93KS4KLSAqCi0gKiBUaGUg
bm90YXRpb24gdXNlZCBmb3IgbWVzaCBuYXZpZ2F0aW9uOgotICoJU3ltICAgPSB0aGUgbWF0ZSBv
ZiBhIGhhbGYtZWRnZSAoc2FtZSBlZGdlLCBidXQgb3Bwb3NpdGUgZGlyZWN0aW9uKQotICoJT25l
eHQgPSBlZGdlIENDVyBhcm91bmQgb3JpZ2luIHZlcnRleCAoa2VlcCBzYW1lIG9yaWdpbikKLSAq
CURuZXh0ID0gZWRnZSBDQ1cgYXJvdW5kIGRlc3RpbmF0aW9uIHZlcnRleCAoa2VlcCBzYW1lIGRl
c3QpCi0gKglMbmV4dCA9IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKGRlc3QgYmVjb21lcyBu
ZXcgb3JpZ2luKQotICoJUm5leHQgPSBlZGdlIENDVyBhcm91bmQgcmlnaHQgZmFjZSAob3JpZ2lu
IGJlY29tZXMgbmV3IGRlc3QpCi0gKgotICogInByZXYiIG1lYW5zIHRvIHN1YnN0aXR1dGUgQ1cg
Zm9yIENDVyBpbiB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCi0gKgotICogVGhlIG1lc2gga2VlcHMg
Z2xvYmFsIGxpc3RzIG9mIGFsbCB2ZXJ0aWNlcywgZmFjZXMsIGFuZCBlZGdlcywKLSAqIHN0b3Jl
ZCBhcyBkb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3RzIHdpdGggYSBkdW1teSBoZWFkZXIgbm9k
ZS4KLSAqIFRoZSBtZXNoIHN0b3JlcyBwb2ludGVycyB0byB0aGVzZSBkdW1teSBoZWFkZXJzICh2
SGVhZCwgZkhlYWQsIGVIZWFkKS4KLSAqCi0gKiBUaGUgY2lyY3VsYXIgZWRnZSBsaXN0IGlzIHNw
ZWNpYWw7IHNpbmNlIGhhbGYtZWRnZXMgYWx3YXlzIG9jY3VyCi0gKiBpbiBwYWlycyAoZSBhbmQg
ZS0+U3ltKSwgZWFjaCBoYWxmLWVkZ2Ugc3RvcmVzIGEgcG9pbnRlciBpbiBvbmx5Ci0gKiBvbmUg
ZGlyZWN0aW9uLiAgU3RhcnRpbmcgYXQgZUhlYWQgYW5kIGZvbGxvd2luZyB0aGUgZS0+bmV4dCBw
b2ludGVycwotICogd2lsbCB2aXNpdCBlYWNoICplZGdlKiBvbmNlIChpZS4gZSBvciBlLT5TeW0s
IGJ1dCBub3QgYm90aCkuCi0gKiBlLT5TeW0gc3RvcmVzIGEgcG9pbnRlciBpbiB0aGUgb3Bwb3Np
dGUgZGlyZWN0aW9uLCB0aHVzIGl0IGlzCi0gKiBhbHdheXMgdHJ1ZSB0aGF0IGUtPlN5bS0+bmV4
dC0+U3ltLT5uZXh0ID09IGUuCi0gKgotICogRWFjaCB2ZXJ0ZXggaGFzIGEgcG9pbnRlciB0byBu
ZXh0IGFuZCBwcmV2aW91cyB2ZXJ0aWNlcyBpbiB0aGUKLSAqIGNpcmN1bGFyIGxpc3QsIGFuZCBh
IHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIHZlcnRleCBhcwotICogdGhlIG9yaWdp
biAoTlVMTCBpZiB0aGlzIGlzIHRoZSBkdW1teSBoZWFkZXIpLiAgVGhlcmUgaXMgYWxzbyBhCi0g
KiBmaWVsZCAiZGF0YSIgZm9yIGNsaWVudCBkYXRhLgotICoKLSAqIEVhY2ggZmFjZSBoYXMgYSBw
b2ludGVyIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBmYWNlcyBpbiB0aGUKLSAqIGNpcmN1bGFy
IGxpc3QsIGFuZCBhIHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIGZhY2UgYXMKLSAq
IHRoZSBsZWZ0IGZhY2UgKE5VTEwgaWYgdGhpcyBpcyB0aGUgZHVtbXkgaGVhZGVyKS4gIFRoZXJl
IGlzIGFsc28KLSAqIGEgZmllbGQgImRhdGEiIGZvciBjbGllbnQgZGF0YS4KLSAqCi0gKiBOb3Rl
IHRoYXQgd2hhdCB3ZSBjYWxsIGEgImZhY2UiIGlzIHJlYWxseSBhIGxvb3A7IGZhY2VzIG1heSBj
b25zaXN0Ci0gKiBvZiBtb3JlIHRoYW4gb25lIGxvb3AgKGllLiBub3Qgc2ltcGx5IGNvbm5lY3Rl
ZCksIGJ1dCB0aGVyZSBpcyBubwotICogcmVjb3JkIG9mIHRoaXMgaW4gdGhlIGRhdGEgc3RydWN0
dXJlLiAgVGhlIG1lc2ggbWF5IGNvbnNpc3Qgb2YKLSAqIHNldmVyYWwgZGlzY29ubmVjdGVkIHJl
Z2lvbnMsIHNvIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gdmlzaXQKLSAqIHRoZSBlbnRpcmUg
bWVzaCBieSBzdGFydGluZyBhdCBhIGhhbGYtZWRnZSBhbmQgdHJhdmVyc2luZyB0aGUgZWRnZQot
ICogc3RydWN0dXJlLgotICoKLSAqIFRoZSBtZXNoIGRvZXMgTk9UIHN1cHBvcnQgaXNvbGF0ZWQg
dmVydGljZXM7IGEgdmVydGV4IGlzIGRlbGV0ZWQgYWxvbmcKLSAqIHdpdGggaXRzIGxhc3QgZWRn
ZS4gIFNpbWlsYXJseSB3aGVuIHR3byBmYWNlcyBhcmUgbWVyZ2VkLCBvbmUgb2YgdGhlCi0gKiBm
YWNlcyBpcyBkZWxldGVkIChzZWUgX19nbF9tZXNoRGVsZXRlIGJlbG93KS4gIEZvciBtZXNoIG9w
ZXJhdGlvbnMsCi0gKiBhbGwgZmFjZSAobG9vcCkgYW5kIHZlcnRleCBwb2ludGVycyBtdXN0IG5v
dCBiZSBOVUxMLiAgSG93ZXZlciwgb25jZQotICogbWVzaCBtYW5pcHVsYXRpb24gaXMgZmluaXNo
ZWQsIF9fZ2xfTWVzaFphcEZhY2UgY2FuIGJlIHVzZWQgdG8gZGVsZXRlCi0gKiBmYWNlcyBvZiB0
aGUgbWVzaCwgb25lIGF0IGEgdGltZS4gIEFsbCBleHRlcm5hbCBmYWNlcyBjYW4gYmUgInphcHBl
ZCIKLSAqIGJlZm9yZSB0aGUgbWVzaCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50OyB0aGVuIGEg
TlVMTCBmYWNlIGluZGljYXRlcwotICogYSByZWdpb24gd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhl
IG91dHB1dCBwb2x5Z29uLgotICovCi0KLXN0cnVjdCBHTFV2ZXJ0ZXggewotICBHTFV2ZXJ0ZXgJ
Km5leHQ7CQkvKiBuZXh0IHZlcnRleCAobmV2ZXIgTlVMTCkgKi8KLSAgR0xVdmVydGV4CSpwcmV2
OwkJLyogcHJldmlvdXMgdmVydGV4IChuZXZlciBOVUxMKSAqLwotICBHTFVoYWxmRWRnZQkqYW5F
ZGdlOwkvKiBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgb3JpZ2luICovCi0gIHZvaWQJCSpkYXRhOwkJ
LyogY2xpZW50J3MgZGF0YSAqLwotCi0gIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVuKSAq
LwotICBHTGRvdWJsZQljb29yZHNbM107CS8qIHZlcnRleCBsb2NhdGlvbiBpbiAzRCAqLwotICBH
TGRvdWJsZQlzLCB0OwkJLyogcHJvamVjdGlvbiBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLwotICBs
b25nCQlwcUhhbmRsZTsJLyogdG8gYWxsb3cgZGVsZXRpb24gZnJvbSBwcmlvcml0eSBxdWV1ZSAq
LwotfTsKLQotc3RydWN0IEdMVWZhY2UgewotICBHTFVmYWNlCSpuZXh0OwkJLyogbmV4dCBmYWNl
IChuZXZlciBOVUxMKSAqLwotICBHTFVmYWNlCSpwcmV2OwkJLyogcHJldmlvdXMgZmFjZSAobmV2
ZXIgTlVMTCkgKi8KLSAgR0xVaGFsZkVkZ2UJKmFuRWRnZTsJLyogYSBoYWxmIGVkZ2Ugd2l0aCB0
aGlzIGxlZnQgZmFjZSAqLwotICB2b2lkCQkqZGF0YTsJCS8qIHJvb20gZm9yIGNsaWVudCdzIGRh
dGEgKi8KLQotICAvKiBJbnRlcm5hbCBkYXRhIChrZWVwIGhpZGRlbikgKi8KLSAgR0xVZmFjZQkq
dHJhaWw7CQkvKiAic3RhY2siIGZvciBjb252ZXJzaW9uIHRvIHN0cmlwcyAqLwotICBHTGJvb2xl
YW4JbWFya2VkOwkJLyogZmxhZyBmb3IgY29udmVyc2lvbiB0byBzdHJpcHMgKi8KLSAgR0xib29s
ZWFuCWluc2lkZTsJCS8qIHRoaXMgZmFjZSBpcyBpbiB0aGUgcG9seWdvbiBpbnRlcmlvciAqLwot
fTsKLQotc3RydWN0IEdMVWhhbGZFZGdlIHsKLSAgR0xVaGFsZkVkZ2UJKm5leHQ7CQkvKiBkb3Vi
bHktbGlua2VkIGxpc3QgKHByZXY9PVN5bS0+bmV4dCkgKi8KLSAgR0xVaGFsZkVkZ2UJKlN5bTsJ
CS8qIHNhbWUgZWRnZSwgb3Bwb3NpdGUgZGlyZWN0aW9uICovCi0gIEdMVWhhbGZFZGdlCSpPbmV4
dDsJCS8qIG5leHQgZWRnZSBDQ1cgYXJvdW5kIG9yaWdpbiAqLwotICBHTFVoYWxmRWRnZQkqTG5l
eHQ7CQkvKiBuZXh0IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKi8KLSAgR0xVdmVydGV4CSpP
cmc7CQkvKiBvcmlnaW4gdmVydGV4IChPdmVydGV4IHRvbyBsb25nKSAqLwotICBHTFVmYWNlCSpM
ZmFjZTsJCS8qIGxlZnQgZmFjZSAqLwotCi0gIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVu
KSAqLwotICBBY3RpdmVSZWdpb24JKmFjdGl2ZVJlZ2lvbjsJLyogYSByZWdpb24gd2l0aCB0aGlz
IHVwcGVyIGVkZ2UgKHN3ZWVwLmMpICovCi0gIGludAkJd2luZGluZzsJLyogY2hhbmdlIGluIHdp
bmRpbmcgbnVtYmVyIHdoZW4gY3Jvc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJvbSB0aGUgcmlnaHQgZmFjZSB0byB0aGUgbGVmdCBmYWNlICovCi19OwotCi0jZGVm
aW5lCVJmYWNlCVN5bS0+TGZhY2UKLSNkZWZpbmUgRHN0CVN5bS0+T3JnCi0KLSNkZWZpbmUgT3By
ZXYJU3ltLT5MbmV4dAotI2RlZmluZSBMcHJldiAgIE9uZXh0LT5TeW0KLSNkZWZpbmUgRHByZXYJ
TG5leHQtPlN5bQotI2RlZmluZSBScHJldglTeW0tPk9uZXh0Ci0jZGVmaW5lIERuZXh0CVJwcmV2
LT5TeW0JLyogMyBwb2ludGVycyAqLwotI2RlZmluZSBSbmV4dAlPcHJldi0+U3ltCS8qIDMgcG9p
bnRlcnMgKi8KLQotCi1zdHJ1Y3QgR0xVbWVzaCB7Ci0gIEdMVXZlcnRleAl2SGVhZDsJCS8qIGR1
bW15IGhlYWRlciBmb3IgdmVydGV4IGxpc3QgKi8KLSAgR0xVZmFjZQlmSGVhZDsJCS8qIGR1bW15
IGhlYWRlciBmb3IgZmFjZSBsaXN0ICovCi0gIEdMVWhhbGZFZGdlCWVIZWFkOwkJLyogZHVtbXkg
aGVhZGVyIGZvciBlZGdlIGxpc3QgKi8KLSAgR0xVaGFsZkVkZ2UJZUhlYWRTeW07CS8qIGFuZCBp
dHMgc3ltbWV0cmljIGNvdW50ZXJwYXJ0ICovCi19OwotCi0vKiBUaGUgbWVzaCBvcGVyYXRpb25z
IGJlbG93IGhhdmUgdGhyZWUgbW90aXZhdGlvbnM6IGNvbXBsZXRlbmVzcywKLSAqIGNvbnZlbmll
bmNlLCBhbmQgZWZmaWNpZW5jeS4gIFRoZSBiYXNpYyBtZXNoIG9wZXJhdGlvbnMgYXJlIE1ha2VF
ZGdlLAotICogU3BsaWNlLCBhbmQgRGVsZXRlLiAgQWxsIHRoZSBvdGhlciBlZGdlIG9wZXJhdGlv
bnMgY2FuIGJlIGltcGxlbWVudGVkCi0gKiBpbiB0ZXJtcyBvZiB0aGVzZS4gIFRoZSBvdGhlciBv
cGVyYXRpb25zIGFyZSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UKLSAqIGFuZC9vciBlZmZpY2ll
bmN5LgotICoKLSAqIFdoZW4gYSBmYWNlIGlzIHNwbGl0IG9yIGEgdmVydGV4IGlzIGFkZGVkLCB0
aGV5IGFyZSBpbnNlcnRlZCBpbnRvIHRoZQotICogZ2xvYmFsIGxpc3QgKmJlZm9yZSogdGhlIGV4
aXN0aW5nIHZlcnRleCBvciBmYWNlIChpZS4gZS0+T3JnIG9yIGUtPkxmYWNlKS4KLSAqIFRoaXMg
bWFrZXMgaXQgZWFzaWVyIHRvIHByb2Nlc3MgYWxsIHZlcnRpY2VzIG9yIGZhY2VzIGluIHRoZSBn
bG9iYWwgbGlzdHMKLSAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcHJvY2Vzc2luZyB0aGUgc2Ft
ZSBkYXRhIHR3aWNlLiAgQXMgYSBjb252ZW5pZW5jZSwKLSAqIHdoZW4gYSBmYWNlIGlzIHNwbGl0
LCB0aGUgImluc2lkZSIgZmxhZyBpcyBjb3BpZWQgZnJvbSB0aGUgb2xkIGZhY2UuCi0gKiBPdGhl
ciBpbnRlcm5hbCBkYXRhICh2LT5kYXRhLCB2LT5hY3RpdmVSZWdpb24sIGYtPmRhdGEsIGYtPm1h
cmtlZCwKLSAqIGYtPnRyYWlsLCBlLT53aW5kaW5nKSBpcyBzZXQgdG8gemVyby4KLSAqCi0gKiAq
KioqKioqKioqKioqKioqKioqKioqIEJhc2ljIEVkZ2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioq
KioqKioqKioqKioqKgotICoKLSAqIF9fZ2xfbWVzaE1ha2VFZGdlKCBtZXNoICkgY3JlYXRlcyBv
bmUgZWRnZSwgdHdvIHZlcnRpY2VzLCBhbmQgYSBsb29wLgotICogVGhlIGxvb3AgKGZhY2UpIGNv
bnNpc3RzIG9mIHRoZSB0d28gbmV3IGhhbGYtZWRnZXMuCi0gKgotICogX19nbF9tZXNoU3BsaWNl
KCBlT3JnLCBlRHN0ICkgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBmb3IgY2hhbmdpbmcgdGhlCi0g
KiBtZXNoIGNvbm5lY3Rpdml0eSBhbmQgdG9wb2xvZ3kuICBJdCBjaGFuZ2VzIHRoZSBtZXNoIHNv
IHRoYXQKLSAqCWVPcmctPk9uZXh0IDwtIE9MRCggZURzdC0+T25leHQgKQotICoJZURzdC0+T25l
eHQgPC0gT0xEKCBlT3JnLT5PbmV4dCApCi0gKiB3aGVyZSBPTEQoLi4uKSBtZWFucyB0aGUgdmFs
dWUgYmVmb3JlIHRoZSBtZXNoU3BsaWNlIG9wZXJhdGlvbi4KLSAqCi0gKiBUaGlzIGNhbiBoYXZl
IHR3byBlZmZlY3RzIG9uIHRoZSB2ZXJ0ZXggc3RydWN0dXJlOgotICogIC0gaWYgZU9yZy0+T3Jn
ICE9IGVEc3QtPk9yZywgdGhlIHR3byB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0gKiAg
LSBpZiBlT3JnLT5PcmcgPT0gZURzdC0+T3JnLCB0aGUgb3JpZ2luIGlzIHNwbGl0IGludG8gdHdv
IHZlcnRpY2VzCi0gKiBJbiBib3RoIGNhc2VzLCBlRHN0LT5PcmcgaXMgY2hhbmdlZCBhbmQgZU9y
Zy0+T3JnIGlzIHVudG91Y2hlZC4KLSAqCi0gKiBTaW1pbGFybHkgKGFuZCBpbmRlcGVuZGVudGx5
KSBmb3IgdGhlIGZhY2Ugc3RydWN0dXJlLAotICogIC0gaWYgZU9yZy0+TGZhY2UgPT0gZURzdC0+
TGZhY2UsIG9uZSBsb29wIGlzIHNwbGl0IGludG8gdHdvCi0gKiAgLSBpZiBlT3JnLT5MZmFjZSAh
PSBlRHN0LT5MZmFjZSwgdHdvIGRpc3RpbmN0IGxvb3BzIGFyZSBqb2luZWQgaW50byBvbmUKLSAq
IEluIGJvdGggY2FzZXMsIGVEc3QtPkxmYWNlIGlzIGNoYW5nZWQgYW5kIGVPcmctPkxmYWNlIGlz
IHVuYWZmZWN0ZWQuCi0gKgotICogX19nbF9tZXNoRGVsZXRlKCBlRGVsICkgcmVtb3ZlcyB0aGUg
ZWRnZSBlRGVsLiAgVGhlcmUgYXJlIHNldmVyYWwgY2FzZXM6Ci0gKiBpZiAoZURlbC0+TGZhY2Ug
IT0gZURlbC0+UmZhY2UpLCB3ZSBqb2luIHR3byBsb29wcyBpbnRvIG9uZTsgdGhlIGxvb3AKLSAq
IGVEZWwtPkxmYWNlIGlzIGRlbGV0ZWQuICBPdGhlcndpc2UsIHdlIGFyZSBzcGxpdHRpbmcgb25l
IGxvb3AgaW50byB0d287Ci0gKiB0aGUgbmV3bHkgY3JlYXRlZCBsb29wIHdpbGwgY29udGFpbiBl
RGVsLT5Ec3QuICBJZiB0aGUgZGVsZXRpb24gb2YgZURlbAotICogd291bGQgY3JlYXRlIGlzb2xh
dGVkIHZlcnRpY2VzLCB0aG9zZSBhcmUgZGVsZXRlZCBhcyB3ZWxsLgotICoKLSAqICoqKioqKioq
KioqKioqKioqKioqKiogT3RoZXIgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioq
KioqKioqCi0gKgotICogX19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApIGNyZWF0ZXMgYSBu
ZXcgZWRnZSBlTmV3IHN1Y2ggdGhhdAotICogZU5ldyA9PSBlT3JnLT5MbmV4dCwgYW5kIGVOZXct
PkRzdCBpcyBhIG5ld2x5IGNyZWF0ZWQgdmVydGV4LgotICogZU9yZyBhbmQgZU5ldyB3aWxsIGhh
dmUgdGhlIHNhbWUgbGVmdCBmYWNlLgotICoKLSAqIF9fZ2xfbWVzaFNwbGl0RWRnZSggZU9yZyAp
IHNwbGl0cyBlT3JnIGludG8gdHdvIGVkZ2VzIGVPcmcgYW5kIGVOZXcsCi0gKiBzdWNoIHRoYXQg
ZU5ldyA9PSBlT3JnLT5MbmV4dC4gIFRoZSBuZXcgdmVydGV4IGlzIGVPcmctPkRzdCA9PSBlTmV3
LT5PcmcuCi0gKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZWZ0IGZhY2UuCi0g
KgotICogX19nbF9tZXNoQ29ubmVjdCggZU9yZywgZURzdCApIGNyZWF0ZXMgYSBuZXcgZWRnZSBm
cm9tIGVPcmctPkRzdAotICogdG8gZURzdC0+T3JnLCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9u
ZGluZyBoYWxmLWVkZ2UgZU5ldy4KLSAqIElmIGVPcmctPkxmYWNlID09IGVEc3QtPkxmYWNlLCB0
aGlzIHNwbGl0cyBvbmUgbG9vcCBpbnRvIHR3bywKLSAqIGFuZCB0aGUgbmV3bHkgY3JlYXRlZCBs
b29wIGlzIGVOZXctPkxmYWNlLiAgT3RoZXJ3aXNlLCB0d28gZGlzam9pbnQKLSAqIGxvb3BzIGFy
ZSBtZXJnZWQgaW50byBvbmUsIGFuZCB0aGUgbG9vcCBlRHN0LT5MZmFjZSBpcyBkZXN0cm95ZWQu
Ci0gKgotICogKioqKioqKioqKioqKioqKioqKioqKioqIE90aGVyIE9wZXJhdGlvbnMgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBfX2dsX21lc2hOZXdNZXNoKCkgY3JlYXRl
cyBhIG5ldyBtZXNoIHdpdGggbm8gZWRnZXMsIG5vIHZlcnRpY2VzLAotICogYW5kIG5vIGxvb3Bz
ICh3aGF0IHdlIHVzdWFsbHkgY2FsbCBhICJmYWNlIikuCi0gKgotICogX19nbF9tZXNoVW5pb24o
IG1lc2gxLCBtZXNoMiApIGZvcm1zIHRoZSB1bmlvbiBvZiBhbGwgc3RydWN0dXJlcyBpbgotICog
Ym90aCBtZXNoZXMsIGFuZCByZXR1cm5zIHRoZSBuZXcgbWVzaCAodGhlIG9sZCBtZXNoZXMgYXJl
IGRlc3Ryb3llZCkuCi0gKgotICogX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCApIHdpbGwgZnJl
ZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZhbGlkIG1lc2guCi0gKgotICogX19nbF9tZXNoWmFwRmFj
ZSggZlphcCApIGRlc3Ryb3lzIGEgZmFjZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZQotICogZ2xv
YmFsIGZhY2UgbGlzdC4gIEFsbCBlZGdlcyBvZiBmWmFwIHdpbGwgaGF2ZSBhIE5VTEwgcG9pbnRl
ciBhcyB0aGVpcgotICogbGVmdCBmYWNlLiAgQW55IGVkZ2VzIHdoaWNoIGFsc28gaGF2ZSBhIE5V
TEwgcG9pbnRlciBhcyB0aGVpciByaWdodCBmYWNlCi0gKiBhcmUgZGVsZXRlZCBlbnRpcmVseSAo
YWxvbmcgd2l0aCBhbnkgaXNvbGF0ZWQgdmVydGljZXMgdGhpcyBwcm9kdWNlcykuCi0gKiBBbiBl
bnRpcmUgbWVzaCBjYW4gYmUgZGVsZXRlZCBieSB6YXBwaW5nIGl0cyBmYWNlcywgb25lIGF0IGEg
dGltZSwKLSAqIGluIGFueSBvcmRlci4gIFphcHBlZCBmYWNlcyBjYW5ub3QgYmUgdXNlZCBpbiBm
dXJ0aGVyIG1lc2ggb3BlcmF0aW9ucyEKLSAqCi0gKiBfX2dsX21lc2hDaGVja01lc2goIG1lc2gg
KSBjaGVja3MgYSBtZXNoIGZvciBzZWxmLWNvbnNpc3RlbmN5LgotICovCi0KLUdMVWhhbGZFZGdl
CSpfX2dsX21lc2hNYWtlRWRnZSggR0xVbWVzaCAqbWVzaCApOwotaW50CQlfX2dsX21lc2hTcGxp
Y2UoIEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApOwotaW50CQlfX2dsX21l
c2hEZWxldGUoIEdMVWhhbGZFZGdlICplRGVsICk7Ci0KLUdMVWhhbGZFZGdlCSpfX2dsX21lc2hB
ZGRFZGdlVmVydGV4KCBHTFVoYWxmRWRnZSAqZU9yZyApOwotR0xVaGFsZkVkZ2UJKl9fZ2xfbWVz
aFNwbGl0RWRnZSggR0xVaGFsZkVkZ2UgKmVPcmcgKTsKLUdMVWhhbGZFZGdlCSpfX2dsX21lc2hD
b25uZWN0KCBHTFVoYWxmRWRnZSAqZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKTsKLQotR0xVbWVz
aAkJKl9fZ2xfbWVzaE5ld01lc2goIHZvaWQgKTsKLUdMVW1lc2gJCSpfX2dsX21lc2hVbmlvbigg
R0xVbWVzaCAqbWVzaDEsIEdMVW1lc2ggKm1lc2gyICk7Ci12b2lkCQlfX2dsX21lc2hEZWxldGVN
ZXNoKCBHTFVtZXNoICptZXNoICk7Ci12b2lkCQlfX2dsX21lc2haYXBGYWNlKCBHTFVmYWNlICpm
WmFwICk7Ci0KLSNpZmRlZiBOREVCVUcKLSNkZWZpbmUJCV9fZ2xfbWVzaENoZWNrTWVzaCggbWVz
aCApCi0jZWxzZQotdm9pZAkJX19nbF9tZXNoQ2hlY2tNZXNoKCBHTFVtZXNoICptZXNoICk7Ci0j
ZW5kaWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL25vcm1hbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3Mvbm9ybWFsLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuYwkod29ya2luZyBjb3B5KQpAQCAtMSwyNTkgKzAs
MCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQg
cG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0
aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGlj
ZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlz
Ci0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vu
c2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2Ug
YXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoq
IEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBh
dDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5v
dGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0
cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1Q
TElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcs
IFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJ
VElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBG
T1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAot
KiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1w
bGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAw
LCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENv
ZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiog
Q29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMg
aW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiog
Ci0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3Jh
bW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdp
dGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3Rl
bTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEs
IDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVy
c2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBH
cmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJl
bGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVz
aW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoq
IHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmll
ZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4x
IFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkg
MTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWlu
L2dmeC9saWIvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMjNSAkCi0qLwotCi0jaW5jbHVkZSA8YXNzZXJ0
Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgi
Ci0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3Rlc3MuaCIKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0jZGVm
aW5lIERvdCh1LHYpCSh1WzBdKnZbMF0gKyB1WzFdKnZbMV0gKyB1WzJdKnZbMl0pCi0KLSNpZiBk
ZWZpbmVkKEZPUl9UUklURV9URVNUX1BST0dSQU0pIHx8IGRlZmluZWQoVFJVRV9QUk9KRUNUKQot
c3RhdGljIHZvaWQgTm9ybWFsaXplKCBHTGRvdWJsZSB2WzNdICkKLXsKLSAgR0xkb3VibGUgbGVu
ID0gdlswXSp2WzBdICsgdlsxXSp2WzFdICsgdlsyXSp2WzJdOwotCi0gIGFzc2VydCggbGVuID4g
MCApOwotICBsZW4gPSBzcXJ0KCBsZW4gKTsKLSAgdlswXSAvPSBsZW47Ci0gIHZbMV0gLz0gbGVu
OwotICB2WzJdIC89IGxlbjsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIEFCUyh4KQkoKHgpIDwgMCA/
IC0oeCkgOiAoeCkpCi0KLXN0YXRpYyBpbnQgTG9uZ0F4aXMoIEdMZG91YmxlIHZbM10gKQotewot
ICBpbnQgaSA9IDA7Ci0KLSAgaWYoIEFCUyh2WzFdKSA+IEFCUyh2WzBdKSApIHsgaSA9IDE7IH0K
LSAgaWYoIEFCUyh2WzJdKSA+IEFCUyh2W2ldKSApIHsgaSA9IDI7IH0KLSAgcmV0dXJuIGk7Ci19
Ci0KLXN0YXRpYyB2b2lkIENvbXB1dGVOb3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZG91
YmxlIG5vcm1bM10gKQotewotICBHTFV2ZXJ0ZXggKnYsICp2MSwgKnYyOwotICBHTGRvdWJsZSBj
LCB0TGVuMiwgbWF4TGVuMjsKLSAgR0xkb3VibGUgbWF4VmFsWzNdLCBtaW5WYWxbM10sIGQxWzNd
LCBkMlszXSwgdE5vcm1bM107Ci0gIEdMVXZlcnRleCAqbWF4VmVydFszXSwgKm1pblZlcnRbM107
Ci0gIEdMVXZlcnRleCAqdkhlYWQgPSAmdGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIGludCBpOwotCi0g
IG1heFZhbFswXSA9IG1heFZhbFsxXSA9IG1heFZhbFsyXSA9IC0yICogR0xVX1RFU1NfTUFYX0NP
T1JEOwotICBtaW5WYWxbMF0gPSBtaW5WYWxbMV0gPSBtaW5WYWxbMl0gPSAyICogR0xVX1RFU1Nf
TUFYX0NPT1JEOwotCi0gIGZvciggdiA9IHZIZWFkLT5uZXh0OyB2ICE9IHZIZWFkOyB2ID0gdi0+
bmV4dCApIHsKLSAgICBmb3IoIGkgPSAwOyBpIDwgMzsgKytpICkgewotICAgICAgYyA9IHYtPmNv
b3Jkc1tpXTsKLSAgICAgIGlmKCBjIDwgbWluVmFsW2ldICkgeyBtaW5WYWxbaV0gPSBjOyBtaW5W
ZXJ0W2ldID0gdjsgfQotICAgICAgaWYoIGMgPiBtYXhWYWxbaV0gKSB7IG1heFZhbFtpXSA9IGM7
IG1heFZlcnRbaV0gPSB2OyB9Ci0gICAgfQotICB9Ci0KLSAgLyogRmluZCB0d28gdmVydGljZXMg
c2VwYXJhdGVkIGJ5IGF0IGxlYXN0IDEvc3FydCgzKSBvZiB0aGUgbWF4aW11bQotICAgKiBkaXN0
YW5jZSBiZXR3ZWVuIGFueSB0d28gdmVydGljZXMKLSAgICovCi0gIGkgPSAwOwotICBpZiggbWF4
VmFsWzFdIC0gbWluVmFsWzFdID4gbWF4VmFsWzBdIC0gbWluVmFsWzBdICkgeyBpID0gMTsgfQot
ICBpZiggbWF4VmFsWzJdIC0gbWluVmFsWzJdID4gbWF4VmFsW2ldIC0gbWluVmFsW2ldICkgeyBp
ID0gMjsgfQotICBpZiggbWluVmFsW2ldID49IG1heFZhbFtpXSApIHsKLSAgICAvKiBBbGwgdmVy
dGljZXMgYXJlIHRoZSBzYW1lIC0tIG5vcm1hbCBkb2Vzbid0IG1hdHRlciAqLwotICAgIG5vcm1b
MF0gPSAwOyBub3JtWzFdID0gMDsgbm9ybVsyXSA9IDE7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAg
LyogTG9vayBmb3IgYSB0aGlyZCB2ZXJ0ZXggd2hpY2ggZm9ybXMgdGhlIHRyaWFuZ2xlIHdpdGgg
bWF4aW11bSBhcmVhCi0gICAqIChMZW5ndGggb2Ygbm9ybWFsID09IHR3aWNlIHRoZSB0cmlhbmds
ZSBhcmVhKQotICAgKi8KLSAgbWF4TGVuMiA9IDA7Ci0gIHYxID0gbWluVmVydFtpXTsKLSAgdjIg
PSBtYXhWZXJ0W2ldOwotICBkMVswXSA9IHYxLT5jb29yZHNbMF0gLSB2Mi0+Y29vcmRzWzBdOwot
ICBkMVsxXSA9IHYxLT5jb29yZHNbMV0gLSB2Mi0+Y29vcmRzWzFdOwotICBkMVsyXSA9IHYxLT5j
b29yZHNbMl0gLSB2Mi0+Y29vcmRzWzJdOwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2
SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgZDJbMF0gPSB2LT5jb29yZHNbMF0gLSB2Mi0+Y29v
cmRzWzBdOwotICAgIGQyWzFdID0gdi0+Y29vcmRzWzFdIC0gdjItPmNvb3Jkc1sxXTsKLSAgICBk
MlsyXSA9IHYtPmNvb3Jkc1syXSAtIHYyLT5jb29yZHNbMl07Ci0gICAgdE5vcm1bMF0gPSBkMVsx
XSpkMlsyXSAtIGQxWzJdKmQyWzFdOwotICAgIHROb3JtWzFdID0gZDFbMl0qZDJbMF0gLSBkMVsw
XSpkMlsyXTsKLSAgICB0Tm9ybVsyXSA9IGQxWzBdKmQyWzFdIC0gZDFbMV0qZDJbMF07Ci0gICAg
dExlbjIgPSB0Tm9ybVswXSp0Tm9ybVswXSArIHROb3JtWzFdKnROb3JtWzFdICsgdE5vcm1bMl0q
dE5vcm1bMl07Ci0gICAgaWYoIHRMZW4yID4gbWF4TGVuMiApIHsKLSAgICAgIG1heExlbjIgPSB0
TGVuMjsKLSAgICAgIG5vcm1bMF0gPSB0Tm9ybVswXTsKLSAgICAgIG5vcm1bMV0gPSB0Tm9ybVsx
XTsKLSAgICAgIG5vcm1bMl0gPSB0Tm9ybVsyXTsKLSAgICB9Ci0gIH0KLQotICBpZiggbWF4TGVu
MiA8PSAwICkgewotICAgIC8qIEFsbCBwb2ludHMgbGllIG9uIGEgc2luZ2xlIGxpbmUgLS0gYW55
IGRlY2VudCBub3JtYWwgd2lsbCBkbyAqLwotICAgIG5vcm1bMF0gPSBub3JtWzFdID0gbm9ybVsy
XSA9IDA7Ci0gICAgbm9ybVtMb25nQXhpcyhkMSldID0gMTsKLSAgfQotfQotICAKLQotc3RhdGlj
IHZvaWQgQ2hlY2tPcmllbnRhdGlvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIEdMZG91
YmxlIGFyZWE7Ci0gIEdMVWZhY2UgKmYsICpmSGVhZCA9ICZ0ZXNzLT5tZXNoLT5mSGVhZDsKLSAg
R0xVdmVydGV4ICp2LCAqdkhlYWQgPSAmdGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdl
ICplOwotCi0gIC8qIFdoZW4gd2UgY29tcHV0ZSB0aGUgbm9ybWFsIGF1dG9tYXRpY2FsbHksIHdl
IGNob29zZSB0aGUgb3JpZW50YXRpb24KLSAgICogc28gdGhhdCB0aGUgdGhlIHN1bSBvZiB0aGUg
c2lnbmVkIGFyZWFzIG9mIGFsbCBjb250b3VycyBpcyBub24tbmVnYXRpdmUuCi0gICAqLwotICBh
cmVhID0gMDsKLSAgZm9yKCBmID0gZkhlYWQtPm5leHQ7IGYgIT0gZkhlYWQ7IGYgPSBmLT5uZXh0
ICkgewotICAgIGUgPSBmLT5hbkVkZ2U7Ci0gICAgaWYoIGUtPndpbmRpbmcgPD0gMCApIGNvbnRp
bnVlOwotICAgIGRvIHsKLSAgICAgIGFyZWEgKz0gKGUtPk9yZy0+cyAtIGUtPkRzdC0+cykgKiAo
ZS0+T3JnLT50ICsgZS0+RHN0LT50KTsKLSAgICAgIGUgPSBlLT5MbmV4dDsKLSAgICB9IHdoaWxl
KCBlICE9IGYtPmFuRWRnZSApOwotICB9Ci0gIGlmKCBhcmVhIDwgMCApIHsKLSAgICAvKiBSZXZl
cnNlIHRoZSBvcmllbnRhdGlvbiBieSBmbGlwcGluZyBhbGwgdGhlIHQtY29vcmRpbmF0ZXMgKi8K
LSAgICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0g
ICAgICB2LT50ID0gLSB2LT50OwotICAgIH0KLSAgICB0ZXNzLT50VW5pdFswXSA9IC0gdGVzcy0+
dFVuaXRbMF07Ci0gICAgdGVzcy0+dFVuaXRbMV0gPSAtIHRlc3MtPnRVbml0WzFdOwotICAgIHRl
c3MtPnRVbml0WzJdID0gLSB0ZXNzLT50VW5pdFsyXTsKLSAgfQotfQotCi0jaWZkZWYgRk9SX1RS
SVRFX1RFU1RfUFJPR1JBTQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotZXh0ZXJuIGludCBSYW5kb21T
d2VlcDsKLSNkZWZpbmUgU19VTklUX1gJKFJhbmRvbVN3ZWVwID8gKDIqZHJhbmQ0OCgpLTEpIDog
MS4wKQotI2RlZmluZSBTX1VOSVRfWQkoUmFuZG9tU3dlZXAgPyAoMipkcmFuZDQ4KCktMSkgOiAw
LjApCi0jZWxzZQotI2lmIGRlZmluZWQoU0xBTlRFRF9TV0VFUCkgCi0vKiBUaGUgImZlYXR1cmUg
bWVyZ2luZyIgaXMgbm90IGludGVuZGVkIHRvIGJlIGNvbXBsZXRlLiAgVGhlcmUgYXJlCi0gKiBz
cGVjaWFsIGNhc2VzIHdoZXJlIGVkZ2VzIGFyZSBuZWFybHkgcGFyYWxsZWwgdG8gdGhlIHN3ZWVw
IGxpbmUKLSAqIHdoaWNoIGFyZSBub3QgaW1wbGVtZW50ZWQuICBUaGUgYWxnb3JpdGhtIHNob3Vs
ZCBzdGlsbCBiZWhhdmUKLSAqIHJvYnVzdGx5IChpZS4gcHJvZHVjZSBhIHJlYXNvbmFibGUgdGVz
c2VsYXRpb24pIGluIHRoZSBwcmVzZW5jZQotICogb2Ygc3VjaCBlZGdlcywgaG93ZXZlciBpdCBt
YXkgbWlzcyBmZWF0dXJlcyB3aGljaCBjb3VsZCBoYXZlIGJlZW4KLSAqIG1lcmdlZC4gIFdlIGNv
dWxkIG1pbmltaXplIHRoaXMgZWZmZWN0IGJ5IGNob29zaW5nIHRoZSBzd2VlcCBsaW5lCi0gKiBk
aXJlY3Rpb24gdG8gYmUgc29tZXRoaW5nIHVudXN1YWwgKGllLiBub3QgcGFyYWxsZWwgdG8gb25l
IG9mIHRoZQotICogY29vcmRpbmF0ZSBheGVzKS4KLSAqLwotI2RlZmluZSBTX1VOSVRfWAkwLjUw
OTQxNTM5NTY0OTU1Mzg1CS8qIFByZS1ub3JtYWxpemVkICovCi0jZGVmaW5lIFNfVU5JVF9ZCTAu
ODYwNTIwNzQ2MjIwMTA2MzMKLSNlbHNlCi0jZGVmaW5lIFNfVU5JVF9YCTEuMAotI2RlZmluZSBT
X1VOSVRfWQkwLjAKLSNlbmRpZgotI2VuZGlmCi0KLS8qIERldGVybWluZSB0aGUgcG9seWdvbiBu
b3JtYWwgYW5kIHByb2plY3QgdmVydGljZXMgb250byB0aGUgcGxhbmUKLSAqIG9mIHRoZSBwb2x5
Z29uLgotICovCi12b2lkIF9fZ2xfcHJvamVjdFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3Mg
KQotewotICBHTFV2ZXJ0ZXggKnYsICp2SGVhZCA9ICZ0ZXNzLT5tZXNoLT52SGVhZDsKLSAgR0xk
b3VibGUgbm9ybVszXTsKLSAgR0xkb3VibGUgKnNVbml0LCAqdFVuaXQ7Ci0gIGludCBpLCBjb21w
dXRlZE5vcm1hbCA9IEZBTFNFOwotCi0gIG5vcm1bMF0gPSB0ZXNzLT5ub3JtYWxbMF07Ci0gIG5v
cm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07Ci0gIG5vcm1bMl0gPSB0ZXNzLT5ub3JtYWxbMl07Ci0g
IGlmKCBub3JtWzBdID09IDAgJiYgbm9ybVsxXSA9PSAwICYmIG5vcm1bMl0gPT0gMCApIHsKLSAg
ICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBub3JtICk7Ci0gICAgY29tcHV0ZWROb3JtYWwgPSBUUlVF
OwotICB9Ci0gIHNVbml0ID0gdGVzcy0+c1VuaXQ7Ci0gIHRVbml0ID0gdGVzcy0+dFVuaXQ7Ci0g
IGkgPSBMb25nQXhpcyggbm9ybSApOwotCi0jaWYgZGVmaW5lZChGT1JfVFJJVEVfVEVTVF9QUk9H
UkFNKSB8fCBkZWZpbmVkKFRSVUVfUFJPSkVDVCkKLSAgLyogQ2hvb3NlIHRoZSBpbml0aWFsIHNV
bml0IHZlY3RvciB0byBiZSBhcHByb3hpbWF0ZWx5IHBlcnBlbmRpY3VsYXIKLSAgICogdG8gdGhl
IG5vcm1hbC4KLSAgICovCi0gIE5vcm1hbGl6ZSggbm9ybSApOwotCi0gIHNVbml0W2ldID0gMDsK
LSAgc1VuaXRbKGkrMSklM10gPSBTX1VOSVRfWDsKLSAgc1VuaXRbKGkrMiklM10gPSBTX1VOSVRf
WTsKLQotICAvKiBOb3cgbWFrZSBpdCBleGFjdGx5IHBlcnBlbmRpY3VsYXIgKi8KLSAgdyA9IERv
dCggc1VuaXQsIG5vcm0gKTsKLSAgc1VuaXRbMF0gLT0gdyAqIG5vcm1bMF07Ci0gIHNVbml0WzFd
IC09IHcgKiBub3JtWzFdOwotICBzVW5pdFsyXSAtPSB3ICogbm9ybVsyXTsKLSAgTm9ybWFsaXpl
KCBzVW5pdCApOwotCi0gIC8qIENob29zZSB0VW5pdCBzbyB0aGF0IChzVW5pdCx0VW5pdCxub3Jt
KSBmb3JtIGEgcmlnaHQtaGFuZGVkIGZyYW1lICovCi0gIHRVbml0WzBdID0gbm9ybVsxXSpzVW5p
dFsyXSAtIG5vcm1bMl0qc1VuaXRbMV07Ci0gIHRVbml0WzFdID0gbm9ybVsyXSpzVW5pdFswXSAt
IG5vcm1bMF0qc1VuaXRbMl07Ci0gIHRVbml0WzJdID0gbm9ybVswXSpzVW5pdFsxXSAtIG5vcm1b
MV0qc1VuaXRbMF07Ci0gIE5vcm1hbGl6ZSggdFVuaXQgKTsKLSNlbHNlCi0gIC8qIFByb2plY3Qg
cGVycGVuZGljdWxhciB0byBhIGNvb3JkaW5hdGUgYXhpcyAtLSBiZXR0ZXIgbnVtZXJpY2FsbHkg
Ki8KLSAgc1VuaXRbaV0gPSAwOwotICBzVW5pdFsoaSsxKSUzXSA9IFNfVU5JVF9YOwotICBzVW5p
dFsoaSsyKSUzXSA9IFNfVU5JVF9ZOwotICAKLSAgdFVuaXRbaV0gPSAwOwotICB0VW5pdFsoaSsx
KSUzXSA9IChub3JtW2ldID4gMCkgPyAtU19VTklUX1kgOiBTX1VOSVRfWTsKLSAgdFVuaXRbKGkr
MiklM10gPSAobm9ybVtpXSA+IDApID8gU19VTklUX1ggOiAtU19VTklUX1g7Ci0jZW5kaWYKLQot
ICAvKiBQcm9qZWN0IHRoZSB2ZXJ0aWNlcyBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLwotICBmb3Io
IHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgdi0+cyA9
IERvdCggdi0+Y29vcmRzLCBzVW5pdCApOwotICAgIHYtPnQgPSBEb3QoIHYtPmNvb3JkcywgdFVu
aXQgKTsKLSAgfQotICBpZiggY29tcHV0ZWROb3JtYWwgKSB7Ci0gICAgQ2hlY2tPcmllbnRhdGlv
biggdGVzcyApOwotICB9Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL25vcm1hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvbm9ybWFsLmgJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiAr
MCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVu
dCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJu
YXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBM
aWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5z
ZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAot
KiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9y
IGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiog
Tm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJ
TVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElO
RywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09O
RElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNT
IEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiog
Ci0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJ
bXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIw
MDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0q
KiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBh
cyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0q
KiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9n
cmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24g
d2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lz
dGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwg
MSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChW
ZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIp
IEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwg
cmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQg
dXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgot
KiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlm
aWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4y
LjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVs
eSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21h
aW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9ub3JtYWwuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19ub3Jt
YWxfaF8KLSNkZWZpbmUgX19ub3JtYWxfaF8KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvdGVzcy5oIgotCi0vKiBfX2dsX3Byb2plY3RQb2x5Z29uKCB0ZXNzICkgZGV0ZXJtaW5l
cyB0aGUgcG9seWdvbiBub3JtYWwKLSAqIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhlIHBs
YW5lIG9mIHRoZSBwb2x5Z29uLgotICovCi12b2lkIF9fZ2xfcHJvamVjdFBvbHlnb24oIEdMVXRl
c3NlbGF0b3IgKnRlc3MgKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCShyZXZpc2lvbiA4
MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlx
LWhlYXAuYwkod29ya2luZyBjb3B5KQpAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2Ug
QXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxl
IGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0
dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0
IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQot
KiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywg
SW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5
LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQg
aW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFT
IElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBD
T05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQ
VVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhl
IE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJz
aW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNv
biBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAx
OTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hl
cmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGlj
ZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiog
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChW
ZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikg
R3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0q
KiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1
dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxp
YW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgot
Ki8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQg
JFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLWhlYXAuYyM1ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRl
IDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL21lbWFsbG9jLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9w
cmlvcml0eXEtaGVhcC5oIgotCi0jZGVmaW5lIElOSVRfU0laRQkzMgotCi0jZGVmaW5lIFRSVUUg
MQotI2RlZmluZSBGQUxTRSAwCi0KLSNpZmRlZiBGT1JfVFJJVEVfVEVTVF9QUk9HUkFNCi0jZGVm
aW5lIExFUSh4LHkpCSgqcHEtPmxlcSkoeCx5KQotI2Vsc2UKLS8qIFZpb2xhdGVzIG1vZHVsYXJp
dHksIGJ1dCBhIGxpdHRsZSBmYXN0ZXIgKi8KLSNpbmNsdWRlICJnZW9tLmgiCi0jZGVmaW5lIExF
USh4LHkpCVZlcnRMZXEoKEdMVXZlcnRleCAqKXgsIChHTFV2ZXJ0ZXggKil5KQotI2VuZGlmCi0K
LS8qIHJlYWxseSBfX2dsX3BxSGVhcE5ld1ByaW9yaXR5USAqLwotUHJpb3JpdHlRICpwcU5ld1By
aW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSApCi17Ci0gIFByaW9y
aXR5USAqcHEgPSAoUHJpb3JpdHlRICopbWVtQWxsb2MoIHNpemVvZiggUHJpb3JpdHlRICkpOwot
ICBpZiAocHEgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAgcHEtPnNpemUgPSAwOwotICBwcS0+
bWF4ID0gSU5JVF9TSVpFOwotICBwcS0+bm9kZXMgPSAoUFFub2RlICopbWVtQWxsb2MoIChJTklU
X1NJWkUgKyAxKSAqIHNpemVvZihwcS0+bm9kZXNbMF0pICk7Ci0gIGlmIChwcS0+bm9kZXMgPT0g
TlVMTCkgewotICAgICBtZW1GcmVlKHBxKTsKLSAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBw
cS0+aGFuZGxlcyA9IChQUWhhbmRsZUVsZW0gKiltZW1BbGxvYyggKElOSVRfU0laRSArIDEpICog
c2l6ZW9mKHBxLT5oYW5kbGVzWzBdKSApOwotICBpZiAocHEtPmhhbmRsZXMgPT0gTlVMTCkgewot
ICAgICBtZW1GcmVlKHBxLT5ub2Rlcyk7Ci0gICAgIG1lbUZyZWUocHEpOwotICAgICByZXR1cm4g
TlVMTDsKLSAgfQotCi0gIHBxLT5pbml0aWFsaXplZCA9IEZBTFNFOwotICBwcS0+ZnJlZUxpc3Qg
PSAwOwotICBwcS0+bGVxID0gbGVxOwotCi0gIHBxLT5ub2Rlc1sxXS5oYW5kbGUgPSAxOwkvKiBz
byB0aGF0IE1pbmltdW0oKSByZXR1cm5zIE5VTEwgKi8KLSAgcHEtPmhhbmRsZXNbMV0ua2V5ID0g
TlVMTDsKLSAgcmV0dXJuIHBxOwotfQotCi0vKiByZWFsbHkgX19nbF9wcUhlYXBEZWxldGVQcmlv
cml0eVEgKi8KLXZvaWQgcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKQotewotICBt
ZW1GcmVlKCBwcS0+aGFuZGxlcyApOwotICBtZW1GcmVlKCBwcS0+bm9kZXMgKTsKLSAgbWVtRnJl
ZSggcHEgKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBGbG9hdERvd24oIFByaW9yaXR5USAqcHEsIGxv
bmcgY3VyciApCi17Ci0gIFBRbm9kZSAqbiA9IHBxLT5ub2RlczsKLSAgUFFoYW5kbGVFbGVtICpo
ID0gcHEtPmhhbmRsZXM7Ci0gIFBRaGFuZGxlIGhDdXJyLCBoQ2hpbGQ7Ci0gIGxvbmcgY2hpbGQ7
Ci0KLSAgaEN1cnIgPSBuW2N1cnJdLmhhbmRsZTsKLSAgZm9yKCA7OyApIHsKLSAgICBjaGlsZCA9
IGN1cnIgPDwgMTsKLSAgICBpZiggY2hpbGQgPCBwcS0+c2l6ZSAmJiBMRVEoIGhbbltjaGlsZCsx
XS5oYW5kbGVdLmtleSwKLQkJCQkgaFtuW2NoaWxkXS5oYW5kbGVdLmtleSApKSB7Ci0gICAgICAr
K2NoaWxkOwotICAgIH0KLQotICAgIGFzc2VydChjaGlsZCA8PSBwcS0+bWF4KTsKLQotICAgIGhD
aGlsZCA9IG5bY2hpbGRdLmhhbmRsZTsKLSAgICBpZiggY2hpbGQgPiBwcS0+c2l6ZSB8fCBMRVEo
IGhbaEN1cnJdLmtleSwgaFtoQ2hpbGRdLmtleSApKSB7Ci0gICAgICBuW2N1cnJdLmhhbmRsZSA9
IGhDdXJyOwotICAgICAgaFtoQ3Vycl0ubm9kZSA9IGN1cnI7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gICAgbltjdXJyXS5oYW5kbGUgPSBoQ2hpbGQ7Ci0gICAgaFtoQ2hpbGRdLm5vZGUgPSBjdXJy
OwotICAgIGN1cnIgPSBjaGlsZDsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkIEZsb2F0VXAoIFBy
aW9yaXR5USAqcHEsIGxvbmcgY3VyciApCi17Ci0gIFBRbm9kZSAqbiA9IHBxLT5ub2RlczsKLSAg
UFFoYW5kbGVFbGVtICpoID0gcHEtPmhhbmRsZXM7Ci0gIFBRaGFuZGxlIGhDdXJyLCBoUGFyZW50
OwotICBsb25nIHBhcmVudDsKLQotICBoQ3VyciA9IG5bY3Vycl0uaGFuZGxlOwotICBmb3IoIDs7
ICkgewotICAgIHBhcmVudCA9IGN1cnIgPj4gMTsKLSAgICBoUGFyZW50ID0gbltwYXJlbnRdLmhh
bmRsZTsKLSAgICBpZiggcGFyZW50ID09IDAgfHwgTEVRKCBoW2hQYXJlbnRdLmtleSwgaFtoQ3Vy
cl0ua2V5ICkpIHsKLSAgICAgIG5bY3Vycl0uaGFuZGxlID0gaEN1cnI7Ci0gICAgICBoW2hDdXJy
XS5ub2RlID0gY3VycjsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBuW2N1cnJdLmhhbmRsZSA9
IGhQYXJlbnQ7Ci0gICAgaFtoUGFyZW50XS5ub2RlID0gY3VycjsKLSAgICBjdXJyID0gcGFyZW50
OwotICB9Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxSGVhcEluaXQgKi8KLXZvaWQgcHFJbml0KCBQ
cmlvcml0eVEgKnBxICkKLXsKLSAgbG9uZyBpOwotCi0gIC8qIFRoaXMgbWV0aG9kIG9mIGJ1aWxk
aW5nIGEgaGVhcCBpcyBPKG4pLCByYXRoZXIgdGhhbiBPKG4gbGcgbikuICovCi0KLSAgZm9yKCBp
ID0gcHEtPnNpemU7IGkgPj0gMTsgLS1pICkgewotICAgIEZsb2F0RG93biggcHEsIGkgKTsKLSAg
fQotICBwcS0+aW5pdGlhbGl6ZWQgPSBUUlVFOwotfQotCi0vKiByZWFsbHkgX19nbF9wcUhlYXBJ
bnNlcnQgKi8KLS8qIHJldHVybnMgTE9OR19NQVggaWZmIG91dCBvZiBtZW1vcnkgKi8KLVBRaGFu
ZGxlIHBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBrZXlOZXcgKQotewotICBsb25nIGN1
cnI7Ci0gIFBRaGFuZGxlIGZyZWU7Ci0KLSAgY3VyciA9ICsrIHBxLT5zaXplOwotICBpZiggKGN1
cnIqMikgPiBwcS0+bWF4ICkgewotICAgIFBRbm9kZSAqc2F2ZU5vZGVzPSBwcS0+bm9kZXM7Ci0g
ICAgUFFoYW5kbGVFbGVtICpzYXZlSGFuZGxlcz0gcHEtPmhhbmRsZXM7Ci0KLSAgICAvKiBJZiB0
aGUgaGVhcCBvdmVyZmxvd3MsIGRvdWJsZSBpdHMgc2l6ZS4gKi8KLSAgICBwcS0+bWF4IDw8PSAx
OwotICAgIHBxLT5ub2RlcyA9IChQUW5vZGUgKiltZW1SZWFsbG9jKCBwcS0+bm9kZXMsIAotCQkJ
CSAgICAgKHNpemVfdCkgCi0JCQkJICAgICAoKHBxLT5tYXggKyAxKSAqIHNpemVvZiggcHEtPm5v
ZGVzWzBdICkpKTsKLSAgICBpZiAocHEtPm5vZGVzID09IE5VTEwpIHsKLSAgICAgICBwcS0+bm9k
ZXMgPSBzYXZlTm9kZXM7CS8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBvbiByZXR1cm4gKi8KLSAg
ICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICAgIHBxLT5oYW5kbGVzID0gKFBRaGFuZGxl
RWxlbSAqKW1lbVJlYWxsb2MoIHBxLT5oYW5kbGVzLAotCQkJICAgICAgICAgICAgICAgICAgICAg
KHNpemVfdCkKLQkJCSAgICAgICAgICAgICAgICAgICAgICAoKHBxLT5tYXggKyAxKSAqIAotCQkJ
CQkgICAgICAgc2l6ZW9mKCBwcS0+aGFuZGxlc1swXSApKSk7Ci0gICAgaWYgKHBxLT5oYW5kbGVz
ID09IE5VTEwpIHsKLSAgICAgICBwcS0+aGFuZGxlcyA9IHNhdmVIYW5kbGVzOyAvKiByZXN0b3Jl
IHB0ciB0byBmcmVlIHVwb24gcmV0dXJuICovCi0gICAgICAgcmV0dXJuIExPTkdfTUFYOwotICAg
IH0KLSAgfQotCi0gIGlmKCBwcS0+ZnJlZUxpc3QgPT0gMCApIHsKLSAgICBmcmVlID0gY3VycjsK
LSAgfSBlbHNlIHsKLSAgICBmcmVlID0gcHEtPmZyZWVMaXN0OwotICAgIHBxLT5mcmVlTGlzdCA9
IHBxLT5oYW5kbGVzW2ZyZWVdLm5vZGU7Ci0gIH0KLQotICBwcS0+bm9kZXNbY3Vycl0uaGFuZGxl
ID0gZnJlZTsKLSAgcHEtPmhhbmRsZXNbZnJlZV0ubm9kZSA9IGN1cnI7Ci0gIHBxLT5oYW5kbGVz
W2ZyZWVdLmtleSA9IGtleU5ldzsKLQotICBpZiggcHEtPmluaXRpYWxpemVkICkgewotICAgIEZs
b2F0VXAoIHBxLCBjdXJyICk7Ci0gIH0KLSAgYXNzZXJ0KGZyZWUgIT0gTE9OR19NQVgpOwotICBy
ZXR1cm4gZnJlZTsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFIZWFwRXh0cmFjdE1pbiAqLwotUFFr
ZXkgcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFub2RlICpuID0gcHEtPm5v
ZGVzOwotICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsKLSAgUFFoYW5kbGUgaE1pbiA9
IG5bMV0uaGFuZGxlOwotICBQUWtleSBtaW4gPSBoW2hNaW5dLmtleTsKLQotICBpZiggcHEtPnNp
emUgPiAwICkgewotICAgIG5bMV0uaGFuZGxlID0gbltwcS0+c2l6ZV0uaGFuZGxlOwotICAgIGhb
blsxXS5oYW5kbGVdLm5vZGUgPSAxOwotCi0gICAgaFtoTWluXS5rZXkgPSBOVUxMOwotICAgIGhb
aE1pbl0ubm9kZSA9IHBxLT5mcmVlTGlzdDsKLSAgICBwcS0+ZnJlZUxpc3QgPSBoTWluOwotCi0g
ICAgaWYoIC0tIHBxLT5zaXplID4gMCApIHsKLSAgICAgIEZsb2F0RG93biggcHEsIDEgKTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIG1pbjsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFIZWFwRGVsZXRl
ICovCi12b2lkIHBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBoQ3VyciApCi17Ci0g
IFBRbm9kZSAqbiA9IHBxLT5ub2RlczsKLSAgUFFoYW5kbGVFbGVtICpoID0gcHEtPmhhbmRsZXM7
Ci0gIGxvbmcgY3VycjsKLQotICBhc3NlcnQoIGhDdXJyID49IDEgJiYgaEN1cnIgPD0gcHEtPm1h
eCAmJiBoW2hDdXJyXS5rZXkgIT0gTlVMTCApOwotCi0gIGN1cnIgPSBoW2hDdXJyXS5ub2RlOwot
ICBuW2N1cnJdLmhhbmRsZSA9IG5bcHEtPnNpemVdLmhhbmRsZTsKLSAgaFtuW2N1cnJdLmhhbmRs
ZV0ubm9kZSA9IGN1cnI7Ci0KLSAgaWYoIGN1cnIgPD0gLS0gcHEtPnNpemUgKSB7Ci0gICAgaWYo
IGN1cnIgPD0gMSB8fCBMRVEoIGhbbltjdXJyPj4xXS5oYW5kbGVdLmtleSwgaFtuW2N1cnJdLmhh
bmRsZV0ua2V5ICkpIHsKLSAgICAgIEZsb2F0RG93biggcHEsIGN1cnIgKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgRmxvYXRVcCggcHEsIGN1cnIgKTsKLSAgICB9Ci0gIH0KLSAgaFtoQ3Vycl0ua2V5
ID0gTlVMTDsKLSAgaFtoQ3Vycl0ubm9kZSA9IHBxLT5mcmVlTGlzdDsKLSAgcHEtPmZyZWVMaXN0
ID0gaEN1cnI7Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3ByaW9yaXR5cS1oZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4g
RXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBz
dWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kg
RnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiks
IHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVn
YWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3
LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2pl
Y3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2Us
IHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0
aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBE
SVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FS
UkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RP
UlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9O
LUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUg
aXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxl
YXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoq
IEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNv
biBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5
IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBU
aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkg
U0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3Bl
bkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwg
cmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVt
IFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwg
MTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVt
KFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdh
cmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1w
bGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4g
aW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9w
ZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRo
b3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiog
JEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAu
aCM1ICQKLSovCi0KLSNpZm5kZWYgX19wcmlvcml0eXFfaGVhcF9oXwotI2RlZmluZSBfX3ByaW9y
aXR5cV9oZWFwX2hfCi0KLS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1w
bGVtZW50YXRpb24gY2FuIHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFIZWFw
S2V5Ci0jZGVmaW5lIFBRaGFuZGxlCQlQUUhlYXBIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQ
cmlvcml0eVFIZWFwCi0KLSNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxSGVhcE5l
d1ByaW9yaXR5UShsZXEpCi0jZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxSGVh
cERlbGV0ZVByaW9yaXR5UShwcSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2Vy
dGlvbiBvZiBhIG5ldyBrZXkgKHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0
aW9uIG9mIGEga2V5IHdob3NlIHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRy
YWN0TWluKS4gIERlbGV0aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRo
aXMgcHVycG9zZSBwcUluc2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQK
LSAqIGFzIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0
ZWQgZWZmaWNpZW50bHkgYnkgY2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBj
YWxsaW5nIHBxSW5pdC4gIEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVm
b3JlIGFueSBvcGVyYXRpb25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICog
SWYgdGhlIGhlYXAgaXMgZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4g
YSBOVUxMIGtleS4KLSAqIFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5Lgot
ICovCi0jZGVmaW5lIHBxSW5pdChwcSkJCV9fZ2xfcHFIZWFwSW5pdChwcSkKLSNkZWZpbmUgcHFJ
bnNlcnQocHEsa2V5KQlfX2dsX3BxSGVhcEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11
bShwcSkJCV9fZ2xfcHFIZWFwTWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlf
X2dsX3BxSGVhcEV4dHJhY3RNaW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19n
bF9wcUhlYXBEZWxldGUocHEsaGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3Bx
SGVhcElzRW1wdHkocHEpCi0KLQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0
YSBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRp
bmFyeSBoZWFwLiAgIm5vZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMg
YXJlIHN0b3JlZCBpbiB0aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBl
eGNlZWRzIGl0cyBhbGxvY2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0g
KiBUaGUgY2hpbGRyZW4gb2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBF
YWNoIG5vZGUgc3RvcmVzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBo
YW5kbGUKLSAqIHN0b3JlcyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3
aGljaCBjdXJyZW50bHkKLSAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVz
W2ldLm5vZGVdLmhhbmRsZSA9PSBpKS4KLSAqLwotCi10eXBlZGVmIHZvaWQgKlBRa2V5OwotdHlw
ZWRlZiBsb25nIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsK
LQotdHlwZWRlZiBzdHJ1Y3QgeyBQUWhhbmRsZSBoYW5kbGU7IH0gUFFub2RlOwotdHlwZWRlZiBz
dHJ1Y3QgeyBQUWtleSBrZXk7IFBRaGFuZGxlIG5vZGU7IH0gUFFoYW5kbGVFbGVtOwotCi1zdHJ1
Y3QgUHJpb3JpdHlRIHsKLSAgUFFub2RlCSpub2RlczsKLSAgUFFoYW5kbGVFbGVtCSpoYW5kbGVz
OwotICBsb25nCQlzaXplLCBtYXg7Ci0gIFBRaGFuZGxlCWZyZWVMaXN0OwotICBpbnQJCWluaXRp
YWxpemVkOwotICBpbnQJCSgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKLX07Ci0gIAot
UHJpb3JpdHlRCSpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBr
ZXkyKSApOwotdm9pZAkJcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsKLQotdm9p
ZAkJcHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlR
ICpwcSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7
Ci12b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLQot
I2RlZmluZSBfX2dsX3BxSGVhcE1pbmltdW0ocHEpCSgocHEpLT5oYW5kbGVzWyhwcSktPm5vZGVz
WzFdLmhhbmRsZV0ua2V5KQotI2RlZmluZSBfX2dsX3BxSGVhcElzRW1wdHkocHEpCSgocHEpLT5z
aXplID09IDApCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEtc29ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaAkocmV2aXNpb24gODIxNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2Fi
aWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoq
IG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0
aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGlj
ZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRv
IHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFp
biBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0
dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRh
aW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNv
bS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBM
aWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFz
aXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9O
UwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBM
SUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FU
SVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwg
QU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIu
MSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhp
Y3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAw
IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVp
bi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlz
aW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlz
aGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUK
LSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAx
LjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNz
IFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVt
YmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93
IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlz
IHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4y
LjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5v
dCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRo
IHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgot
KiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lv
biQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS1zb3J0LmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fcHJpb3JpdHlxX3NvcnRfaF8KLSNkZWZpbmUg
X19wcmlvcml0eXFfc29ydF9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9w
cmlvcml0eXEtaGVhcC5oIgotCi0jdW5kZWYgUFFrZXkKLSN1bmRlZiBQUWhhbmRsZQotI3VuZGVm
IFByaW9yaXR5UQotI3VuZGVmIHBxTmV3UHJpb3JpdHlRCi0jdW5kZWYgcHFEZWxldGVQcmlvcml0
eVEKLSN1bmRlZiBwcUluaXQKLSN1bmRlZiBwcUluc2VydAotI3VuZGVmIHBxTWluaW11bQotI3Vu
ZGVmIHBxRXh0cmFjdE1pbgotI3VuZGVmIHBxRGVsZXRlCi0jdW5kZWYgcHFJc0VtcHR5Ci0KLS8q
IFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24gY2FuIHVz
ZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFTb3J0S2V5Ci0jZGVmaW5lIFBRaGFu
ZGxlCQlQUVNvcnRIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQcmlvcml0eVFTb3J0Ci0KLSNk
ZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxU29ydE5ld1ByaW9yaXR5UShsZXEpCi0j
ZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5UShw
cSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2VydGlvbiBvZiBhIG5ldyBrZXkg
KHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0aW9uIG9mIGEga2V5IHdob3Nl
IHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRyYWN0TWluKS4gIERlbGV0aW9u
IGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRoaXMgcHVycG9zZSBwcUluc2Vy
dCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQKLSAqIGFzIHRoZSBhcmd1bWVu
dC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0ZWQgZWZmaWNpZW50bHkgYnkg
Y2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBjYWxsaW5nIHBxSW5pdC4gIElu
IGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVmb3JlIGFueSBvcGVyYXRpb25z
IG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICogSWYgdGhlIGhlYXAgaXMgZW1w
dHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4gYSBOVUxMIGtleS4KLSAqIFRo
aXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5LgotICovCi0jZGVmaW5lIHBxSW5p
dChwcSkJCV9fZ2xfcHFTb3J0SW5pdChwcSkKLSNkZWZpbmUgcHFJbnNlcnQocHEsa2V5KQlfX2ds
X3BxU29ydEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11bShwcSkJCV9fZ2xfcHFTb3J0
TWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlfX2dsX3BxU29ydEV4dHJhY3RN
aW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19nbF9wcVNvcnREZWxldGUocHEs
aGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3BxU29ydElzRW1wdHkocHEpCi0K
LQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBs
aXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRpbmFyeSBoZWFwLiAgIm5vZGVz
IiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0aGUg
cmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBleGNlZWRzIGl0cyBhbGxvY2F0
ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0gKiBUaGUgY2hpbGRyZW4gb2Yg
bm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBFYWNoIG5vZGUgc3RvcmVzIGFu
IGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBoYW5kbGUKLSAqIHN0b3JlcyBh
IGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3aGljaCBjdXJyZW50bHkKLSAq
IHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVzW2ldLm5vZGVdLmhhbmRsZSA9
PSBpKS4KLSAqLwotCi10eXBlZGVmIFBRSGVhcEtleSBQUWtleTsKLXR5cGVkZWYgUFFIZWFwSGFu
ZGxlIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsKLQotc3Ry
dWN0IFByaW9yaXR5USB7Ci0gIFByaW9yaXR5UUhlYXAJKmhlYXA7Ci0gIFBRa2V5CQkqa2V5czsK
LSAgUFFrZXkJCSoqb3JkZXI7Ci0gIFBRaGFuZGxlCXNpemUsIG1heDsKLSAgaW50CQlpbml0aWFs
aXplZDsKLSAgaW50CQkoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5Mik7Ci19OwotICAKLVBy
aW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5
MikgKTsKLXZvaWQJCXBxRGVsZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICk7Ci0KLWludAkJ
cHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlRICpw
cSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7Ci12
b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLVBRa2V5
CQlwcU1pbmltdW0oIFByaW9yaXR5USAqcHEgKTsKLWludAkJcHFJc0VtcHR5KCBQcmlvcml0eVEg
KnBxICk7Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjY3ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0
aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBh
biBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNv
ZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVu
dHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRo
ZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2Vz
LCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMt
MTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgot
KiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdh
cmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJF
U1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwg
SU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5E
Ci0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFks
IEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1F
TlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wg
U2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFy
eSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBP
cmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3Ms
IEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0
aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0
aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25q
dW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFw
aGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0q
KiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExp
YnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBP
cGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lv
biAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMg
Y3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVu
dGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50
bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZl
YWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8v
ZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jIzUgJAotKi8KLQotI2lu
Y2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogTE9OR19NQVggKi8KLSNp
bmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgotI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLQotLyogSW5jbHVkZSBh
bGwgdGhlIGNvZGUgZm9yIHRoZSByZWd1bGFyIGhlYXAtYmFzZWQgcXVldWUgaGVyZS4gKi8KLQot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuYyIKLQotLyog
Tm93IHJlZGVmaW5lIGFsbCB0aGUgZnVuY3Rpb24gbmFtZXMgdG8gbWFwIHRvIHRoZWlyICJTb3J0
IiB2ZXJzaW9ucy4gKi8KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3Jp
dHlxLXNvcnQuaCIKLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICovCi1Qcmlv
cml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtleTIp
ICkKLXsKLSAgUHJpb3JpdHlRICpwcSA9IChQcmlvcml0eVEgKiltZW1BbGxvYyggc2l6ZW9mKCBQ
cmlvcml0eVEgKSk7Ci0gIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBwcS0+aGVh
cCA9IF9fZ2xfcHFIZWFwTmV3UHJpb3JpdHlRKCBsZXEgKTsKLSAgaWYgKHBxLT5oZWFwID09IE5V
TEwpIHsKLSAgICAgbWVtRnJlZShwcSk7Ci0gICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcHEt
PmtleXMgPSAoUFFIZWFwS2V5ICopbWVtQWxsb2MoIElOSVRfU0laRSAqIHNpemVvZihwcS0+a2V5
c1swXSkgKTsKLSAgaWYgKHBxLT5rZXlzID09IE5VTEwpIHsKLSAgICAgX19nbF9wcUhlYXBEZWxl
dGVQcmlvcml0eVEocHEtPmhlYXApOwotICAgICBtZW1GcmVlKHBxKTsKLSAgICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLQotICBwcS0+c2l6ZSA9IDA7Ci0gIHBxLT5tYXggPSBJTklUX1NJWkU7Ci0gIHBx
LT5pbml0aWFsaXplZCA9IEZBTFNFOwotICBwcS0+bGVxID0gbGVxOwotICByZXR1cm4gcHE7Ci19
Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5USAqLwotdm9pZCBwcURlbGV0
ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApCi17Ci0gIGFzc2VydChwcSAhPSBOVUxMKTsgCi0g
IGlmIChwcS0+aGVhcCAhPSBOVUxMKSBfX2dsX3BxSGVhcERlbGV0ZVByaW9yaXR5USggcHEtPmhl
YXAgKTsKLSAgaWYgKHBxLT5vcmRlciAhPSBOVUxMKSBtZW1GcmVlKCBwcS0+b3JkZXIgKTsKLSAg
aWYgKHBxLT5rZXlzICE9IE5VTEwpIG1lbUZyZWUoIHBxLT5rZXlzICk7Ci0gIG1lbUZyZWUoIHBx
ICk7Ci19Ci0KLQotI2RlZmluZSBMVCh4LHkpCQkoISBMRVEoeSx4KSkKLSNkZWZpbmUgR1QoeCx5
KQkJKCEgTEVRKHgseSkpCi0jZGVmaW5lIFN3YXAoYSxiKQlkb3tQUWtleSAqdG1wID0gKmE7ICph
ID0gKmI7ICpiID0gdG1wO313aGlsZSgwKQotCi0vKiByZWFsbHkgX19nbF9wcVNvcnRJbml0ICov
Ci1pbnQgcHFJbml0KCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgKipwLCAqKnIsICoqaSwg
KipqLCAqcGl2OwotICBzdHJ1Y3QgeyBQUWtleSAqKnAsICoqcjsgfSBTdGFja1s1MF0sICp0b3Ag
PSBTdGFjazsKLSAgdW5zaWduZWQgbG9uZyBzZWVkID0gMjAxNjQ3MzI4MzsKLQotICAvKiBDcmVh
dGUgYW4gYXJyYXkgb2YgaW5kaXJlY3QgcG9pbnRlcnMgdG8gdGhlIGtleXMsIHNvIHRoYXQgd2UK
LSAgICogdGhlIGhhbmRsZXMgd2UgaGF2ZSByZXR1cm5lZCBhcmUgc3RpbGwgdmFsaWQuCi0gICAq
LwotLyoKLSAgcHEtPm9yZGVyID0gKFBRSGVhcEtleSAqKiltZW1BbGxvYyggKHNpemVfdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHEtPnNpemUgKiBzaXplb2YocHEtPm9y
ZGVyWzBdKSkgKTsKLSovCi0gIHBxLT5vcmRlciA9IChQUUhlYXBLZXkgKiopbWVtQWxsb2MoIChz
aXplX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcS0+c2l6ZSsxKSAq
IHNpemVvZihwcS0+b3JkZXJbMF0pKSApOwotLyogdGhlIHByZXZpb3VzIGxpbmUgaXMgYSBwYXRj
aCB0byBjb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IElCTSAqLwotLyogbWFjaGluZXMgcmV0
dXJuIGEgbnVsbCBvbiBhIG1hbGxvYyBvZiB6ZXJvIGJ5dGVzICh1bmxpa2UgU0dJKSwgICAqLwot
Lyogc28gd2UgaGF2ZSB0byBwdXQgaW4gdGhpcyBkZWZlbnNlIHRvIGd1YXJkIGFnYWluc3QgYSBt
ZW1vcnkgICAgICAqLwotLyogZmF1bHQgZm91ciBsaW5lcyBkb3duLiBmcm9tIGZvc3N1bUBhdXN0
aW4uaWJtLmNvbS4gICAgICAgICAgICAgICAqLwotICBpZiAocHEtPm9yZGVyID09IE5VTEwpIHJl
dHVybiAwOwotCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIgPSBwICsgcHEtPnNpemUgLSAxOwotICBm
b3IoIHBpdiA9IHBxLT5rZXlzLCBpID0gcDsgaSA8PSByOyArK3BpdiwgKytpICkgewotICAgICpp
ID0gcGl2OwotICB9Ci0KLSAgLyogU29ydCB0aGUgaW5kaXJlY3QgcG9pbnRlcnMgaW4gZGVzY2Vu
ZGluZyBvcmRlciwKLSAgICogdXNpbmcgcmFuZG9taXplZCBRdWlja3NvcnQKLSAgICovCi0gIHRv
cC0+cCA9IHA7IHRvcC0+ciA9IHI7ICsrdG9wOwotICB3aGlsZSggLS10b3AgPj0gU3RhY2sgKSB7
Ci0gICAgcCA9IHRvcC0+cDsKLSAgICByID0gdG9wLT5yOwotICAgIHdoaWxlKCByID4gcCArIDEw
ICkgewotICAgICAgc2VlZCA9IHNlZWQgKiAxNTM5NDE1ODIxICsgMTsKLSAgICAgIGkgPSBwICsg
c2VlZCAlIChyIC0gcCArIDEpOwotICAgICAgcGl2ID0gKmk7Ci0gICAgICAqaSA9ICpwOwotICAg
ICAgKnAgPSBwaXY7Ci0gICAgICBpID0gcCAtIDE7Ci0gICAgICBqID0gciArIDE7Ci0gICAgICBk
byB7Ci0JZG8geyArK2k7IH0gd2hpbGUoIEdUKCAqKmksICpwaXYgKSk7Ci0JZG8geyAtLWo7IH0g
d2hpbGUoIExUKCAqKmosICpwaXYgKSk7Ci0JU3dhcCggaSwgaiApOwotICAgICAgfSB3aGlsZSgg
aSA8IGogKTsKLSAgICAgIFN3YXAoIGksIGogKTsJLyogVW5kbyBsYXN0IHN3YXAgKi8KLSAgICAg
IGlmKCBpIC0gcCA8IHIgLSBqICkgewotCXRvcC0+cCA9IGorMTsgdG9wLT5yID0gcjsgKyt0b3A7
Ci0JciA9IGktMTsKLSAgICAgIH0gZWxzZSB7Ci0JdG9wLT5wID0gcDsgdG9wLT5yID0gaS0xOyAr
K3RvcDsKLQlwID0gaisxOwotICAgICAgfQotICAgIH0KLSAgICAvKiBJbnNlcnRpb24gc29ydCBz
bWFsbCBsaXN0cyAqLwotICAgIGZvciggaSA9IHArMTsgaSA8PSByOyArK2kgKSB7Ci0gICAgICBw
aXYgPSAqaTsKLSAgICAgIGZvciggaiA9IGk7IGogPiBwICYmIExUKCAqKihqLTEpLCAqcGl2ICk7
IC0taiApIHsKLQkqaiA9ICooai0xKTsKLSAgICAgIH0KLSAgICAgICpqID0gcGl2OwotICAgIH0K
LSAgfQotICBwcS0+bWF4ID0gcHEtPnNpemU7Ci0gIHBxLT5pbml0aWFsaXplZCA9IFRSVUU7Ci0g
IF9fZ2xfcHFIZWFwSW5pdCggcHEtPmhlYXAgKTsJLyogYWx3YXlzIHN1Y2NlZWRzICovCi0KLSNp
Zm5kZWYgTkRFQlVHCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIgPSBwICsgcHEtPnNpemUgLSAxOwot
ICBmb3IoIGkgPSBwOyBpIDwgcjsgKytpICkgewotICAgIGFzc2VydCggTEVRKCAqKihpKzEpLCAq
KmkgKSk7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiAxOwotfQotCi0vKiByZWFsbHkgX19nbF9w
cVNvcnRJbnNlcnQgKi8KLS8qIHJldHVybnMgTE9OR19NQVggaWZmIG91dCBvZiBtZW1vcnkgKi8g
Ci1QUWhhbmRsZSBwcUluc2VydCggUHJpb3JpdHlRICpwcSwgUFFrZXkga2V5TmV3ICkKLXsKLSAg
bG9uZyBjdXJyOwotCi0gIGlmKCBwcS0+aW5pdGlhbGl6ZWQgKSB7Ci0gICAgcmV0dXJuIF9fZ2xf
cHFIZWFwSW5zZXJ0KCBwcS0+aGVhcCwga2V5TmV3ICk7Ci0gIH0KLSAgY3VyciA9IHBxLT5zaXpl
OwotICBpZiggKysgcHEtPnNpemUgPj0gcHEtPm1heCApIHsKLSAgICBQUWtleSAqc2F2ZUtleT0g
cHEtPmtleXM7Ci0KLSAgICAvKiBJZiB0aGUgaGVhcCBvdmVyZmxvd3MsIGRvdWJsZSBpdHMgc2l6
ZS4gKi8KLSAgICBwcS0+bWF4IDw8PSAxOwotICAgIHBxLT5rZXlzID0gKFBRSGVhcEtleSAqKW1l
bVJlYWxsb2MoIHBxLT5rZXlzLCAKLQkgCSAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qp
Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBxLT5tYXggKiBzaXplb2YoIHBx
LT5rZXlzWzBdICkpKTsKLSAgICBpZiAocHEtPmtleXMgPT0gTlVMTCkgewkKLSAgICAgICBwcS0+
a2V5cyA9IHNhdmVLZXk7CS8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBvbiByZXR1cm4gKi8KLSAg
ICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICB9Ci0gIGFzc2VydChjdXJyICE9IExPTkdf
TUFYKTsJCi0gIHBxLT5rZXlzW2N1cnJdID0ga2V5TmV3OwotCi0gIC8qIE5lZ2F0aXZlIGhhbmRs
ZXMgaW5kZXggdGhlIHNvcnRlZCBhcnJheS4gKi8KLSAgcmV0dXJuIC0oY3VycisxKTsKLX0KLQot
LyogcmVhbGx5IF9fZ2xfcHFTb3J0RXh0cmFjdE1pbiAqLwotUFFrZXkgcHFFeHRyYWN0TWluKCBQ
cmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1pbiwgaGVhcE1pbjsKLQotICBpZiggcHEt
PnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9wcUhlYXBFeHRyYWN0TWluKCBwcS0+aGVh
cCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSk7Ci0gIGlmKCAh
IF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewotICAgIGhlYXBNaW4gPSBfX2dsX3Bx
SGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExFUSggaGVhcE1pbiwgc29ydE1pbiAp
KSB7Ci0gICAgICByZXR1cm4gX19nbF9wcUhlYXBFeHRyYWN0TWluKCBwcS0+aGVhcCApOwotICAg
IH0KLSAgfQotICBkbyB7Ci0gICAgLS0gcHEtPnNpemU7Ci0gIH0gd2hpbGUoIHBxLT5zaXplID4g
MCAmJiAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSkgPT0gTlVMTCApOwotICByZXR1cm4gc29ydE1p
bjsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0TWluaW11bSAqLwotUFFrZXkgcHFNaW5pbXVt
KCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1pbiwgaGVhcE1pbjsKLQotICBpZigg
cHEtPnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9wcUhlYXBNaW5pbXVtKCBwcS0+aGVh
cCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSk7Ci0gIGlmKCAh
IF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewotICAgIGhlYXBNaW4gPSBfX2dsX3Bx
SGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExFUSggaGVhcE1pbiwgc29ydE1pbiAp
KSB7Ci0gICAgICByZXR1cm4gaGVhcE1pbjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHNvcnRNaW47
Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydElzRW1wdHkgKi8KLWludCBwcUlzRW1wdHkoIFBy
aW9yaXR5USAqcHEgKQotewotICByZXR1cm4gKHBxLT5zaXplID09IDApICYmIF9fZ2xfcHFIZWFw
SXNFbXB0eSggcHEtPmhlYXAgKTsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0RGVsZXRlICov
Ci12b2lkIHBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBjdXJyICkKLXsKLSAgaWYo
IGN1cnIgPj0gMCApIHsKLSAgICBfX2dsX3BxSGVhcERlbGV0ZSggcHEtPmhlYXAsIGN1cnIgKTsK
LSAgICByZXR1cm47Ci0gIH0KLSAgY3VyciA9IC0oY3VycisxKTsKLSAgYXNzZXJ0KCBjdXJyIDwg
cHEtPm1heCAmJiBwcS0+a2V5c1tjdXJyXSAhPSBOVUxMICk7Ci0KLSAgcHEtPmtleXNbY3Vycl0g
PSBOVUxMOwotICB3aGlsZSggcHEtPnNpemUgPiAwICYmICoocHEtPm9yZGVyW3BxLT5zaXplLTFd
KSA9PSBOVUxMICkgewotICAgIC0tIHBxLT5zaXplOwotICB9Ci19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgJKHJldmlzaW9u
IDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBw
bGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFy
ZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVk
IGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhl
ICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9u
bHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiog
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5j
LiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBN
b3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5z
Z2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4g
dGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElT
IiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05E
SVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5Z
IElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZ
LCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQ
T1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9y
aWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9u
IDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBH
cmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkx
LTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUg
aGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQ
cm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0
YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJl
IFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJz
aW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3Jh
cGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQg
Tm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBX
aW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTgu
IFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lv
biAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBo
YXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50
IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8K
LS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJl
dmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJp
b3JpdHlxLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fcHJpb3JpdHlxX3NvcnRfaF8KLSNkZWZpbmUg
X19wcmlvcml0eXFfc29ydF9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9w
cmlvcml0eXEtaGVhcC5oIgotCi0jdW5kZWYgUFFrZXkKLSN1bmRlZiBQUWhhbmRsZQotI3VuZGVm
IFByaW9yaXR5UQotI3VuZGVmIHBxTmV3UHJpb3JpdHlRCi0jdW5kZWYgcHFEZWxldGVQcmlvcml0
eVEKLSN1bmRlZiBwcUluaXQKLSN1bmRlZiBwcUluc2VydAotI3VuZGVmIHBxTWluaW11bQotI3Vu
ZGVmIHBxRXh0cmFjdE1pbgotI3VuZGVmIHBxRGVsZXRlCi0jdW5kZWYgcHFJc0VtcHR5Ci0KLS8q
IFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24gY2FuIHVz
ZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFTb3J0S2V5Ci0jZGVmaW5lIFBRaGFu
ZGxlCQlQUVNvcnRIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQcmlvcml0eVFTb3J0Ci0KLSNk
ZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxU29ydE5ld1ByaW9yaXR5UShsZXEpCi0j
ZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5UShw
cSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2VydGlvbiBvZiBhIG5ldyBrZXkg
KHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0aW9uIG9mIGEga2V5IHdob3Nl
IHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRyYWN0TWluKS4gIERlbGV0aW9u
IGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRoaXMgcHVycG9zZSBwcUluc2Vy
dCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQKLSAqIGFzIHRoZSBhcmd1bWVu
dC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0ZWQgZWZmaWNpZW50bHkgYnkg
Y2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBjYWxsaW5nIHBxSW5pdC4gIElu
IGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVmb3JlIGFueSBvcGVyYXRpb25z
IG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICogSWYgdGhlIGhlYXAgaXMgZW1w
dHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4gYSBOVUxMIGtleS4KLSAqIFRo
aXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5LgotICovCi0jZGVmaW5lIHBxSW5p
dChwcSkJCV9fZ2xfcHFTb3J0SW5pdChwcSkKLSNkZWZpbmUgcHFJbnNlcnQocHEsa2V5KQlfX2ds
X3BxU29ydEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11bShwcSkJCV9fZ2xfcHFTb3J0
TWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlfX2dsX3BxU29ydEV4dHJhY3RN
aW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19nbF9wcVNvcnREZWxldGUocHEs
aGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3BxU29ydElzRW1wdHkocHEpCi0K
LQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBs
aXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRpbmFyeSBoZWFwLiAgIm5vZGVz
IiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0aGUg
cmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBleGNlZWRzIGl0cyBhbGxvY2F0
ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0gKiBUaGUgY2hpbGRyZW4gb2Yg
bm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBFYWNoIG5vZGUgc3RvcmVzIGFu
IGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBoYW5kbGUKLSAqIHN0b3JlcyBh
IGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3aGljaCBjdXJyZW50bHkKLSAq
IHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVzW2ldLm5vZGVdLmhhbmRsZSA9
PSBpKS4KLSAqLwotCi10eXBlZGVmIFBRSGVhcEtleSBQUWtleTsKLXR5cGVkZWYgUFFIZWFwSGFu
ZGxlIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsKLQotc3Ry
dWN0IFByaW9yaXR5USB7Ci0gIFByaW9yaXR5UUhlYXAJKmhlYXA7Ci0gIFBRa2V5CQkqa2V5czsK
LSAgUFFrZXkJCSoqb3JkZXI7Ci0gIFBRaGFuZGxlCXNpemUsIG1heDsKLSAgaW50CQlpbml0aWFs
aXplZDsKLSAgaW50CQkoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5Mik7Ci19OwotICAKLVBy
aW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5
MikgKTsKLXZvaWQJCXBxRGVsZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICk7Ci0KLWludAkJ
cHFJbml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlRICpw
cSwgUFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7Ci12
b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLVBRa2V5
CQlwcU1pbmltdW0oIFByaW9yaXR5USAqcHEgKTsKLWludAkJcHFJc0VtcHR5KCBQcmlvcml0eVEg
KnBxICk7Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL3JlbmRlci5jCShyZXZpc2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNTA1ICsw
LDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50
IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5h
dGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExp
Y2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhp
cwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNl
IGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0q
KiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3Ig
YXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBO
b3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlz
dHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElN
UExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5H
LCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05E
SVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1Mg
Rk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAK
LSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIElt
cGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAw
MCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoq
IENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFz
IGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoq
IAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dy
YW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3
aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAx
LCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZl
cnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikg
R3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCBy
ZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1
c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0q
KiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZp
ZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5
IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFp
bi9nZngvbGliL2dsdS9saWJ0ZXNzL3JlbmRlci5jIzUgJAotKi8KLQotI2luY2x1ZGUgPGFzc2Vy
dC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9z
LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2ds
dS9saWJ0ZXNzL3Rlc3MuaCIKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0v
KiBUaGlzIHN0cnVjdHVyZSByZW1lbWJlcnMgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgYWJvdXQg
YSBwcmltaXRpdmUKLSAqIHRvIGJlIGFibGUgdG8gcmVuZGVyIGl0IGxhdGVyLCBvbmNlIHdlIGhh
dmUgZGV0ZXJtaW5lZCB3aGljaAotICogcHJpbWl0aXZlIGlzIGFibGUgdG8gdXNlIHRoZSBtb3N0
IHRyaWFuZ2xlcy4KLSAqLwotc3RydWN0IEZhY2VDb3VudCB7Ci0gIGxvbmcJCXNpemU7CQkvKiBu
dW1iZXIgb2YgdHJpYW5nbGVzIHVzZWQgKi8KLSAgR0xVaGFsZkVkZ2UJKmVTdGFydDsJLyogZWRn
ZSB3aGVyZSB0aGlzIHByaW1pdGl2ZSBzdGFydHMgKi8KLSAgdm9pZAkJKCpyZW5kZXIpKEdMVXRl
c3NlbGF0b3IgKiwgR0xVaGFsZkVkZ2UgKiwgbG9uZyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIHJvdXRpbmUgdG8gcmVuZGVyIHRoaXMgcHJpbWl0aXZlICovCi19OwotCi1z
dGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtRmFuKCBHTFVoYWxmRWRnZSAqZU9yaWcgKTsK
LXN0YXRpYyBzdHJ1Y3QgRmFjZUNvdW50IE1heGltdW1TdHJpcCggR0xVaGFsZkVkZ2UgKmVPcmln
ICk7Ci0KLXN0YXRpYyB2b2lkIFJlbmRlckZhbiggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFs
ZkVkZ2UgKmVTdGFydCwgbG9uZyBzaXplICk7Ci1zdGF0aWMgdm9pZCBSZW5kZXJTdHJpcCggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmVTdGFydCwgbG9uZyBzaXplICk7Ci1zdGF0
aWMgdm9pZCBSZW5kZXJUcmlhbmdsZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2Ug
KmVTdGFydCwKLQkJCSAgICBsb25nIHNpemUgKTsKLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11
bUZhY2VHcm91cCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKTsKLXN0YXRp
YyB2b2lkIFJlbmRlckxvbmVseVRyaWFuZ2xlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFj
ZSAqaGVhZCApOwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiBTdHJpcHMgYW5kIEZh
bnMgZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKiovCi0KLS8qIF9fZ2xfcmVuZGVyTWVz
aCggdGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUK
LSAqIGZhbnMsIHN0cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwg
ZWZmb3J0IGlzIG1hZGUKLSAqIHRvIHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMgYXMg
cG9zc2libGUgKGllLiB0byBtYWtlIHRoZSBmYW5zCi0gKiBhbmQgc3RyaXBzIGFzIGxhcmdlIGFz
IHBvc3NpYmxlKS4KLSAqCi0gKiBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBhcyBj
YWxsYmFja3MgKHNlZSB0aGUgYXBpKS4KLSAqLwotdm9pZCBfX2dsX3JlbmRlck1lc2goIEdMVXRl
c3NlbGF0b3IgKnRlc3MsIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmOwotCi0gIC8q
IE1ha2UgYSBsaXN0IG9mIHNlcGFyYXRlIHRyaWFuZ2xlcyBzbyB3ZSBjYW4gcmVuZGVyIHRoZW0g
YWxsIGF0IG9uY2UgKi8KLSAgdGVzcy0+bG9uZWx5VHJpTGlzdCA9IE5VTEw7Ci0KLSAgZm9yKCBm
ID0gbWVzaC0+ZkhlYWQubmV4dDsgZiAhPSAmbWVzaC0+ZkhlYWQ7IGYgPSBmLT5uZXh0ICkgewot
ICAgIGYtPm1hcmtlZCA9IEZBTFNFOwotICB9Ci0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7
IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gZi0+bmV4dCApIHsKLQotICAgIC8qIFdlIGV4YW1pbmUg
YWxsIGZhY2VzIGluIGFuIGFyYml0cmFyeSBvcmRlci4gIFdoZW5ldmVyIHdlIGZpbmQKLSAgICAg
KiBhbiB1bnByb2Nlc3NlZCBmYWNlIEYsIHdlIG91dHB1dCBhIGdyb3VwIG9mIGZhY2VzIGluY2x1
ZGluZyBGCi0gICAgICogd2hvc2Ugc2l6ZSBpcyBtYXhpbXVtLgotICAgICAqLwotICAgIGlmKCBm
LT5pbnNpZGUgJiYgISBmLT5tYXJrZWQgKSB7Ci0gICAgICBSZW5kZXJNYXhpbXVtRmFjZUdyb3Vw
KCB0ZXNzLCBmICk7Ci0gICAgICBhc3NlcnQoIGYtPm1hcmtlZCApOwotICAgIH0KLSAgfQotICBp
ZiggdGVzcy0+bG9uZWx5VHJpTGlzdCAhPSBOVUxMICkgewotICAgIFJlbmRlckxvbmVseVRyaWFu
Z2xlcyggdGVzcywgdGVzcy0+bG9uZWx5VHJpTGlzdCApOwotICAgIHRlc3MtPmxvbmVseVRyaUxp
c3QgPSBOVUxMOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11bUZhY2VHcm91
cCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKQotewotICAvKiBXZSB3YW50
IHRvIGZpbmQgdGhlIGxhcmdlc3QgdHJpYW5nbGUgZmFuIG9yIHN0cmlwIG9mIHVubWFya2VkIGZh
Y2VzCi0gICAqIHdoaWNoIGluY2x1ZGVzIHRoZSBnaXZlbiBmYWNlIGZPcmlnLiAgVGhlcmUgYXJl
IDMgcG9zc2libGUgZmFucwotICAgKiBwYXNzaW5nIHRocm91Z2ggZk9yaWcgKG9uZSBjZW50ZXJl
ZCBhdCBlYWNoIHZlcnRleCksIGFuZCAzIHBvc3NpYmxlCi0gICAqIHN0cmlwcyAob25lIGZvciBl
YWNoIENDVyBwZXJtdXRhdGlvbiBvZiB0aGUgdmVydGljZXMpLiAgT3VyIHN0cmF0ZWd5Ci0gICAq
IGlzIHRvIHRyeSBhbGwgb2YgdGhlc2UsIGFuZCB0YWtlIHRoZSBwcmltaXRpdmUgd2hpY2ggdXNl
cyB0aGUgbW9zdAotICAgKiB0cmlhbmdsZXMgKGEgZ3JlZWR5IGFwcHJvYWNoKS4KLSAgICovCi0g
IEdMVWhhbGZFZGdlICplID0gZk9yaWctPmFuRWRnZTsKLSAgc3RydWN0IEZhY2VDb3VudCBtYXgs
IG5ld0ZhY2U7Ci0KLSAgbWF4LnNpemUgPSAxOwotICBtYXguZVN0YXJ0ID0gZTsKLSAgbWF4LnJl
bmRlciA9ICZSZW5kZXJUcmlhbmdsZTsKLQotICBpZiggISB0ZXNzLT5mbGFnQm91bmRhcnkgKSB7
Ci0gICAgbmV3RmFjZSA9IE1heGltdW1GYW4oIGUgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5z
aXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1GYW4oIGUtPkxu
ZXh0ICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQot
ICAgIG5ld0ZhY2UgPSBNYXhpbXVtRmFuKCBlLT5McHJldiApOyBpZiggbmV3RmFjZS5zaXplID4g
bWF4LnNpemUgKSB7IG1heCA9IG5ld0ZhY2U7IH0KLQotICAgIG5ld0ZhY2UgPSBNYXhpbXVtU3Ry
aXAoIGUgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9
Ci0gICAgbmV3RmFjZSA9IE1heGltdW1TdHJpcCggZS0+TG5leHQgKTsgaWYoIG5ld0ZhY2Uuc2l6
ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1T
dHJpcCggZS0+THByZXYgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBu
ZXdGYWNlOyB9Ci0gIH0KLSAgKCoobWF4LnJlbmRlcikpKCB0ZXNzLCBtYXguZVN0YXJ0LCBtYXgu
c2l6ZSApOwotfQotCi0KLS8qIE1hY3JvcyB3aGljaCBrZWVwIHRyYWNrIG9mIGZhY2VzIHdlIGhh
dmUgbWFya2VkIHRlbXBvcmFyaWx5LCBhbmQgYWxsb3cKLSAqIHVzIHRvIGJhY2t0cmFjayB3aGVu
IG5lY2Vzc2FyeS4gIFdpdGggdHJpYW5nbGUgZmFucywgdGhpcyBpcyBub3QKLSAqIHJlYWxseSBu
ZWNlc3NhcnksIHNpbmNlIHRoZSBvbmx5IGF3a3dhcmQgY2FzZSBpcyBhIGxvb3Agb2YgdHJpYW5n
bGVzCi0gKiBhcm91bmQgYSBzaW5nbGUgb3JpZ2luIHZlcnRleC4gIEhvd2V2ZXIgd2l0aCBzdHJp
cHMgdGhlIHNpdHVhdGlvbiBpcwotICogbW9yZSBjb21wbGljYXRlZCwgYW5kIHdlIG5lZWQgYSBn
ZW5lcmFsIHRyYWNraW5nIG1ldGhvZCBsaWtlIHRoZQotICogb25lIGhlcmUuCi0gKi8KLSNkZWZp
bmUgTWFya2VkKGYpCSghIChmKS0+aW5zaWRlIHx8IChmKS0+bWFya2VkKQotCi0jZGVmaW5lIEFk
ZFRvVHJhaWwoZix0KQkoKGYpLT50cmFpbCA9ICh0KSwgKHQpID0gKGYpLCAoZiktPm1hcmtlZCA9
IFRSVUUpCi0KLSNkZWZpbmUgRnJlZVRyYWlsKHQpCWRvIHsgXAotCQkJICB3aGlsZSggKHQpICE9
IE5VTEwgKSB7IFwKLQkJCSAgICAodCktPm1hcmtlZCA9IEZBTFNFOyB0ID0gKHQpLT50cmFpbDsg
XAotCQkJICB9IFwKLQkJCX0gd2hpbGUoMCkgLyogYWJzb3JiIHRyYWlsaW5nIHNlbWljb2xvbiAq
LwotCi0KLQotc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bUZhbiggR0xVaGFsZkVkZ2Ug
KmVPcmlnICkKLXsKLSAgLyogZU9yaWctPkxmYWNlIGlzIHRoZSBmYWNlIHdlIHdhbnQgdG8gcmVu
ZGVyLiAgV2Ugd2FudCB0byBmaW5kIHRoZSBzaXplCi0gICAqIG9mIGEgbWF4aW1hbCBmYW4gYXJv
dW5kIGVPcmlnLT5PcmcuICBUbyBkbyB0aGlzIHdlIGp1c3Qgd2FsayBhcm91bmQKLSAgICogdGhl
IG9yaWdpbiB2ZXJ0ZXggYXMgZmFyIGFzIHBvc3NpYmxlIGluIGJvdGggZGlyZWN0aW9ucy4KLSAg
ICovCi0gIHN0cnVjdCBGYWNlQ291bnQgbmV3RmFjZSA9IHsgMCwgTlVMTCwgJlJlbmRlckZhbiB9
OwotICBHTFVmYWNlICp0cmFpbCA9IE5VTEw7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIGZvcigg
ZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+TGZhY2UgKTsgZSA9IGUtPk9uZXh0ICkgewotICAgIEFk
ZFRvVHJhaWwoIGUtPkxmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXplOwotICB9Ci0g
IGZvciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+UmZhY2UgKTsgZSA9IGUtPk9wcmV2ICkgewot
ICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXplOwot
ICB9Ci0gIG5ld0ZhY2UuZVN0YXJ0ID0gZTsKLSAgLypMSU5URUQqLwotICBGcmVlVHJhaWwoIHRy
YWlsICk7Ci0gIHJldHVybiBuZXdGYWNlOwotfQotCi0KLSNkZWZpbmUgSXNFdmVuKG4pCSgoKG4p
ICYgMSkgPT0gMCkKLQotc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bVN0cmlwKCBHTFVo
YWxmRWRnZSAqZU9yaWcgKQotewotICAvKiBIZXJlIHdlIGFyZSBsb29raW5nIGZvciBhIG1heGlt
YWwgc3RyaXAgdGhhdCBjb250YWlucyB0aGUgdmVydGljZXMKLSAgICogZU9yaWctPk9yZywgZU9y
aWctPkRzdCwgZU9yaWctPkxuZXh0LT5Ec3QgKGluIHRoYXQgb3JkZXIgb3IgdGhlCi0gICAqIHJl
dmVyc2UsIHN1Y2ggdGhhdCBhbGwgdHJpYW5nbGVzIGFyZSBvcmllbnRlZCBDQ1cpLgotICAgKgot
ICAgKiBBZ2FpbiB3ZSB3YWxrIGZvcndhcmQgYW5kIGJhY2t3YXJkIGFzIGZhciBhcyBwb3NzaWJs
ZS4gIEhvd2V2ZXIgZm9yCi0gICAqIHN0cmlwcyB0aGVyZSBpcyBhIHR3aXN0OiB0byBnZXQgQ0NX
IG9yaWVudGF0aW9ucywgdGhlcmUgbXVzdCBiZQotICAgKiBhbiAqZXZlbiogbnVtYmVyIG9mIHRy
aWFuZ2xlcyBpbiB0aGUgc3RyaXAgb24gb25lIHNpZGUgb2YgZU9yaWcuCi0gICAqIFdlIHdhbGsg
dGhlIHN0cmlwIHN0YXJ0aW5nIG9uIGEgc2lkZSB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIHRyaWFu
Z2xlczsKLSAgICogaWYgYm90aCBzaWRlIGhhdmUgYW4gb2RkIG51bWJlciwgd2UgYXJlIGZvcmNl
ZCB0byBzaG9ydGVuIG9uZSBzaWRlLgotICAgKi8KLSAgc3RydWN0IEZhY2VDb3VudCBuZXdGYWNl
ID0geyAwLCBOVUxMLCAmUmVuZGVyU3RyaXAgfTsKLSAgbG9uZyBoZWFkU2l6ZSA9IDAsIHRhaWxT
aXplID0gMDsKLSAgR0xVZmFjZSAqdHJhaWwgPSBOVUxMOwotICBHTFVoYWxmRWRnZSAqZSwgKmVU
YWlsLCAqZUhlYWQ7Ci0KLSAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5MZmFjZSApOyAr
K3RhaWxTaXplLCBlID0gZS0+T25leHQgKSB7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRy
YWlsICk7Ci0gICAgKyt0YWlsU2l6ZTsKLSAgICBlID0gZS0+RHByZXY7Ci0gICAgaWYoIE1hcmtl
ZCggZS0+TGZhY2UgKSkgYnJlYWs7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRyYWlsICk7
Ci0gIH0KLSAgZVRhaWwgPSBlOwotCi0gIGZvciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+UmZh
Y2UgKTsgKytoZWFkU2l6ZSwgZSA9IGUtPkRuZXh0ICkgewotICAgIEFkZFRvVHJhaWwoIGUtPlJm
YWNlLCB0cmFpbCApOwotICAgICsraGVhZFNpemU7Ci0gICAgZSA9IGUtPk9wcmV2OwotICAgIGlm
KCBNYXJrZWQoIGUtPlJmYWNlICkpIGJyZWFrOwotICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNlLCB0
cmFpbCApOwotICB9Ci0gIGVIZWFkID0gZTsKLQotICBuZXdGYWNlLnNpemUgPSB0YWlsU2l6ZSAr
IGhlYWRTaXplOwotICBpZiggSXNFdmVuKCB0YWlsU2l6ZSApKSB7Ci0gICAgbmV3RmFjZS5lU3Rh
cnQgPSBlVGFpbC0+U3ltOwotICB9IGVsc2UgaWYoIElzRXZlbiggaGVhZFNpemUgKSkgewotICAg
IG5ld0ZhY2UuZVN0YXJ0ID0gZUhlYWQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQm90aCBzaWRlcyBo
YXZlIG9kZCBsZW5ndGgsIHdlIG11c3Qgc2hvcnRlbiBvbmUgb2YgdGhlbS4gIEluIGZhY3QsCi0g
ICAgICogd2UgbXVzdCBzdGFydCBmcm9tIGVIZWFkIHRvIGd1YXJhbnRlZSBpbmNsdXNpb24gb2Yg
ZU9yaWctPkxmYWNlLgotICAgICAqLwotICAgIC0tbmV3RmFjZS5zaXplOwotICAgIG5ld0ZhY2Uu
ZVN0YXJ0ID0gZUhlYWQtPk9uZXh0OwotICB9Ci0gIC8qTElOVEVEKi8KLSAgRnJlZVRyYWlsKCB0
cmFpbCApOwotICByZXR1cm4gbmV3RmFjZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBSZW5kZXJUcmlh
bmdsZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUsIGxvbmcgc2l6ZSApCi17
Ci0gIC8qIEp1c3QgYWRkIHRoZSB0cmlhbmdsZSB0byBhIHRyaWFuZ2xlIGxpc3QsIHNvIHdlIGNh
biByZW5kZXIgYWxsCi0gICAqIHRoZSBzZXBhcmF0ZSB0cmlhbmdsZXMgYXQgb25jZS4KLSAgICov
Ci0gIGFzc2VydCggc2l6ZSA9PSAxICk7Ci0gIEFkZFRvVHJhaWwoIGUtPkxmYWNlLCB0ZXNzLT5s
b25lbHlUcmlMaXN0ICk7Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTG9uZWx5VHJpYW5nbGVz
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVmYWNlICpmICkKLXsKLSAgLyogTm93IHdlIHJlbmRl
ciBhbGwgdGhlIHNlcGFyYXRlIHRyaWFuZ2xlcyB3aGljaCBjb3VsZCBub3QgYmUKLSAgICogZ3Jv
dXBlZCBpbnRvIGEgdHJpYW5nbGUgZmFuIG9yIHN0cmlwLgotICAgKi8KLSAgR0xVaGFsZkVkZ2Ug
KmU7Ci0gIGludCBuZXdTdGF0ZTsKLSAgaW50IGVkZ2VTdGF0ZSA9IC0xOwkvKiBmb3JjZSBlZGdl
IHN0YXRlIG91dHB1dCBmb3IgZmlyc3QgdmVydGV4ICovCi0KLSAgQ0FMTF9CRUdJTl9PUl9CRUdJ
Tl9EQVRBKCBHTF9UUklBTkdMRVMgKTsKLQotICBmb3IoIDsgZiAhPSBOVUxMOyBmID0gZi0+dHJh
aWwgKSB7Ci0gICAgLyogTG9vcCBvbmNlIGZvciBlYWNoIGVkZ2UgKHRoZXJlIHdpbGwgYWx3YXlz
IGJlIDMgZWRnZXMpICovCi0KLSAgICBlID0gZi0+YW5FZGdlOwotICAgIGRvIHsKLSAgICAgIGlm
KCB0ZXNzLT5mbGFnQm91bmRhcnkgKSB7Ci0JLyogU2V0IHRoZSAiZWRnZSBzdGF0ZSIgdG8gVFJV
RSBqdXN0IGJlZm9yZSB3ZSBvdXRwdXQgdGhlCi0JICogZmlyc3QgdmVydGV4IG9mIGVhY2ggZWRn
ZSBvbiB0aGUgcG9seWdvbiBib3VuZGFyeS4KLQkgKi8KLQluZXdTdGF0ZSA9ICEgZS0+UmZhY2Ut
Pmluc2lkZTsKLQlpZiggZWRnZVN0YXRlICE9IG5ld1N0YXRlICkgewotCSAgZWRnZVN0YXRlID0g
bmV3U3RhdGU7Ci0gICAgICAgICAgQ0FMTF9FREdFX0ZMQUdfT1JfRURHRV9GTEFHX0RBVEEoIGVk
Z2VTdGF0ZSApOwotCX0KLSAgICAgIH0KLSAgICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRB
KCBlLT5PcmctPmRhdGEgKTsKLQotICAgICAgZSA9IGUtPkxuZXh0OwotICAgIH0gd2hpbGUoIGUg
IT0gZi0+YW5FZGdlICk7Ci0gIH0KLSAgQ0FMTF9FTkRfT1JfRU5EX0RBVEEoKTsKLX0KLQotCi1z
dGF0aWMgdm9pZCBSZW5kZXJGYW4oIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICpl
LCBsb25nIHNpemUgKQotewotICAvKiBSZW5kZXIgYXMgbWFueSBDQ1cgdHJpYW5nbGVzIGFzIHBv
c3NpYmxlIGluIGEgZmFuIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgZmFuICpz
aG91bGQqIGNvbnRhaW4gZXhhY3RseSAic2l6ZSIgdHJpYW5nbGVzCi0gICAqIChvdGhlcndpc2Ug
d2UndmUgZ29vZmVkIHVwIHNvbWV3aGVyZSkuCi0gICAqLwotICBDQUxMX0JFR0lOX09SX0JFR0lO
X0RBVEEoIEdMX1RSSUFOR0xFX0ZBTiApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEo
IGUtPk9yZy0+ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRzdC0+
ZGF0YSApOyAKLQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBlLT5MZmFj
ZS0+bWFya2VkID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAgIENB
TExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBhc3Nl
cnQoIHNpemUgPT0gMCApOwotICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotfQotCi0KLXN0YXRp
YyB2b2lkIFJlbmRlclN0cmlwKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRnZSAqZSwg
bG9uZyBzaXplICkKLXsKLSAgLyogUmVuZGVyIGFzIG1hbnkgQ0NXIHRyaWFuZ2xlcyBhcyBwb3Nz
aWJsZSBpbiBhIHN0cmlwIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgc3RyaXAg
KnNob3VsZCogY29udGFpbiBleGFjdGx5ICJzaXplIiB0cmlhbmdsZXMKLSAgICogKG90aGVyd2lz
ZSB3ZSd2ZSBnb29mZWQgdXAgc29tZXdoZXJlKS4KLSAgICovCi0gIENBTExfQkVHSU5fT1JfQkVH
SU5fREFUQSggR0xfVFJJQU5HTEVfU1RSSVAgKTsKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RB
VEEoIGUtPk9yZy0+ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRz
dC0+ZGF0YSApOyAKLQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBlLT5M
ZmFjZS0+bWFya2VkID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPkRwcmV2OwotICAg
IENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5PcmctPmRhdGEgKTsgCi0gICAgaWYoIE1h
cmtlZCggZS0+TGZhY2UgKSkgYnJlYWs7Ci0KLSAgICBlLT5MZmFjZS0+bWFya2VkID0gVFJVRTsK
LSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAgIENBTExfVkVSVEVYX09SX1ZFUlRF
WF9EQVRBKCBlLT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBhc3NlcnQoIHNpemUgPT0gMCApOwot
ICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioq
KiogQm91bmRhcnkgY29udG91ciBkZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKi8KLQot
LyogX19nbF9yZW5kZXJCb3VuZGFyeSggdGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCwgYW5kIG91
dHB1dHMgb25lCi0gKiBjb250b3VyIGZvciBlYWNoIGZhY2UgbWFya2VkICJpbnNpZGUiLiAgVGhl
IHJlbmRlcmluZyBvdXRwdXQgaXMKLSAqIHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAoc2VlIHRoZSBh
cGkpLgotICovCi12b2lkIF9fZ2xfcmVuZGVyQm91bmRhcnkoIEdMVXRlc3NlbGF0b3IgKnRlc3Ms
IEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmOwotICBHTFVoYWxmRWRnZSAqZTsKLQot
ICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGYtPm5l
eHQgKSB7Ci0gICAgaWYoIGYtPmluc2lkZSApIHsKLSAgICAgIENBTExfQkVHSU5fT1JfQkVHSU5f
REFUQSggR0xfTElORV9MT09QICk7Ci0gICAgICBlID0gZi0+YW5FZGdlOwotICAgICAgZG8gewot
ICAgICAgICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+T3JnLT5kYXRhICk7IAotCWUg
PSBlLT5MbmV4dDsKLSAgICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5FZGdlICk7Ci0gICAgICBDQUxM
X0VORF9PUl9FTkRfREFUQSgpOwotICAgIH0KLSAgfQotfQotCi0KLS8qKioqKioqKioqKioqKioq
KioqKioqKiogUXVpY2stYW5kLWRpcnR5IGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioq
LwotCi0jZGVmaW5lIFNJR05fSU5DT05TSVNURU5UIDIKLQotc3RhdGljIGludCBDb21wdXRlTm9y
bWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBub3JtWzNdLCBpbnQgY2hlY2sgKQot
LyoKLSAqIElmIGNoZWNrPT1GQUxTRSwgd2UgY29tcHV0ZSB0aGUgcG9seWdvbiBub3JtYWwgYW5k
IHBsYWNlIGl0IGluIG5vcm1bXS4KLSAqIElmIGNoZWNrPT1UUlVFLCB3ZSBjaGVjayB0aGF0IGVh
Y2ggdHJpYW5nbGUgaW4gdGhlIGZhbiBmcm9tIHYwIGhhcyBhCi0gKiBjb25zaXN0ZW50IG9yaWVu
dGF0aW9uIHdpdGggcmVzcGVjdCB0byBub3JtW10uICBJZiB0cmlhbmdsZXMgYXJlCi0gKiBjb25z
aXN0ZW50bHkgb3JpZW50ZWQgQ0NXLCByZXR1cm4gMTsgaWYgQ1csIHJldHVybiAtMTsgaWYgYWxs
IHRyaWFuZ2xlcwotICogYXJlIGRlZ2VuZXJhdGUgcmV0dXJuIDA7IG90aGVyd2lzZSAobm8gY29u
c2lzdGVudCBvcmllbnRhdGlvbikgcmV0dXJuCi0gKiBTSUdOX0lOQ09OU0lTVEVOVC4KLSAqLwot
ewotICBDYWNoZWRWZXJ0ZXggKnYwID0gdGVzcy0+Y2FjaGU7Ci0gIENhY2hlZFZlcnRleCAqdm4g
PSB2MCArIHRlc3MtPmNhY2hlQ291bnQ7Ci0gIENhY2hlZFZlcnRleCAqdmM7Ci0gIEdMZG91Ymxl
IGRvdCwgeGMsIHljLCB6YywgeHAsIHlwLCB6cCwgblszXTsKLSAgaW50IHNpZ24gPSAwOwotCi0g
IC8qIEZpbmQgdGhlIHBvbHlnb24gbm9ybWFsLiAgSXQgaXMgaW1wb3J0YW50IHRvIGdldCBhIHJl
YXNvbmFibGUKLSAgICogbm9ybWFsIGV2ZW4gd2hlbiB0aGUgcG9seWdvbiBpcyBzZWxmLWludGVy
c2VjdGluZyAoZWcuIGEgYm93dGllKS4KLSAgICogT3RoZXJ3aXNlLCB0aGUgY29tcHV0ZWQgbm9y
bWFsIGNvdWxkIGJlIHZlcnkgdGlueSwgYnV0IHBlcnBlbmRpY3VsYXIKLSAgICogdG8gdGhlIHRy
dWUgcGxhbmUgb2YgdGhlIHBvbHlnb24gZHVlIHRvIG51bWVyaWNhbCBub2lzZS4gIFRoZW4gYWxs
Ci0gICAqIHRoZSB0cmlhbmdsZXMgd291bGQgYXBwZWFyIHRvIGJlIGRlZ2VuZXJhdGUgYW5kIHdl
IHdvdWxkIGluY29ycmVjdGx5Ci0gICAqIGRlY29tcG9zZSB0aGUgcG9seWdvbiBhcyBhIGZhbiAo
b3Igc2ltcGx5IG5vdCByZW5kZXIgaXQgYXQgYWxsKS4KLSAgICoKLSAgICogV2UgdXNlIGEgc3Vt
LW9mLXRyaWFuZ2xlcyBub3JtYWwgYWxnb3JpdGhtIHJhdGhlciB0aGFuIHRoZSBtb3JlCi0gICAq
IGVmZmljaWVudCBzdW0tb2YtdHJhcGV6b2lkcyBtZXRob2QgKHVzZWQgaW4gQ2hlY2tPcmllbnRh
dGlvbigpCi0gICAqIGluIG5vcm1hbC5jKS4gIFRoaXMgbGV0cyB1cyBleHBsaWNpdGx5IHJldmVy
c2UgdGhlIHNpZ25lZCBhcmVhCi0gICAqIG9mIHNvbWUgdHJpYW5nbGVzIHRvIGdldCBhIHJlYXNv
bmFibGUgbm9ybWFsIGluIHRoZSBzZWxmLWludGVyc2VjdGluZwotICAgKiBjYXNlLgotICAgKi8K
LSAgaWYoICEgY2hlY2sgKSB7Ci0gICAgbm9ybVswXSA9IG5vcm1bMV0gPSBub3JtWzJdID0gMC4w
OwotICB9Ci0KLSAgdmMgPSB2MCArIDE7Ci0gIHhjID0gdmMtPmNvb3Jkc1swXSAtIHYwLT5jb29y
ZHNbMF07Ci0gIHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0gIHpjID0gdmMt
PmNvb3Jkc1syXSAtIHYwLT5jb29yZHNbMl07Ci0gIHdoaWxlKCArK3ZjIDwgdm4gKSB7Ci0gICAg
eHAgPSB4YzsgeXAgPSB5YzsgenAgPSB6YzsKLSAgICB4YyA9IHZjLT5jb29yZHNbMF0gLSB2MC0+
Y29vcmRzWzBdOwotICAgIHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0gICAg
emMgPSB2Yy0+Y29vcmRzWzJdIC0gdjAtPmNvb3Jkc1syXTsKLQotICAgIC8qIENvbXB1dGUgKHZw
IC0gdjApIGNyb3NzICh2YyAtIHYwKSAqLwotICAgIG5bMF0gPSB5cCp6YyAtIHpwKnljOwotICAg
IG5bMV0gPSB6cCp4YyAtIHhwKnpjOwotICAgIG5bMl0gPSB4cCp5YyAtIHlwKnhjOwotCi0gICAg
ZG90ID0gblswXSpub3JtWzBdICsgblsxXSpub3JtWzFdICsgblsyXSpub3JtWzJdOwotICAgIGlm
KCAhIGNoZWNrICkgewotICAgICAgLyogUmV2ZXJzZSB0aGUgY29udHJpYnV0aW9uIG9mIGJhY2st
ZmFjaW5nIHRyaWFuZ2xlcyB0byBnZXQKLSAgICAgICAqIGEgcmVhc29uYWJsZSBub3JtYWwgZm9y
IHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zIChzZWUgYWJvdmUpCi0gICAgICAgKi8KLSAgICAg
IGlmKCBkb3QgPj0gMCApIHsKLQlub3JtWzBdICs9IG5bMF07IG5vcm1bMV0gKz0gblsxXTsgbm9y
bVsyXSArPSBuWzJdOwotICAgICAgfSBlbHNlIHsKLQlub3JtWzBdIC09IG5bMF07IG5vcm1bMV0g
LT0gblsxXTsgbm9ybVsyXSAtPSBuWzJdOwotICAgICAgfQotICAgIH0gZWxzZSBpZiggZG90ICE9
IDAgKSB7Ci0gICAgICAvKiBDaGVjayB0aGUgbmV3IG9yaWVudGF0aW9uIGZvciBjb25zaXN0ZW5j
eSB3aXRoIHByZXZpb3VzIHRyaWFuZ2xlcyAqLwotICAgICAgaWYoIGRvdCA+IDAgKSB7Ci0JaWYo
IHNpZ24gPCAwICkgcmV0dXJuIFNJR05fSU5DT05TSVNURU5UOwotCXNpZ24gPSAxOwotICAgICAg
fSBlbHNlIHsKLQlpZiggc2lnbiA+IDAgKSByZXR1cm4gU0lHTl9JTkNPTlNJU1RFTlQ7Ci0Jc2ln
biA9IC0xOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2lnbjsKLX0KLQotLyogX19n
bF9yZW5kZXJDYWNoZSggdGVzcyApIHRha2VzIGEgc2luZ2xlIGNvbnRvdXIgYW5kIHRyaWVzIHRv
IHJlbmRlciBpdAotICogYXMgYSB0cmlhbmdsZSBmYW4uICBUaGlzIGhhbmRsZXMgY29udmV4IHBv
bHlnb25zLCBhcyB3ZWxsIGFzIHNvbWUKLSAqIG5vbi1jb252ZXggcG9seWdvbnMgaWYgd2UgZ2V0
IGx1Y2t5LgotICoKLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgcG9seWdvbiB3YXMgc3VjY2Vzc2Z1
bGx5IHJlbmRlcmVkLiAgVGhlIHJlbmRlcmluZwotICogb3V0cHV0IGlzIHByb3ZpZGVkIGFzIGNh
bGxiYWNrcyAoc2VlIHRoZSBhcGkpLgotICovCi1HTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNoZSgg
R0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIENhY2hlZFZlcnRleCAqdjAgPSB0ZXNzLT5jYWNo
ZTsKLSAgQ2FjaGVkVmVydGV4ICp2biA9IHYwICsgdGVzcy0+Y2FjaGVDb3VudDsKLSAgQ2FjaGVk
VmVydGV4ICp2YzsKLSAgR0xkb3VibGUgbm9ybVszXTsKLSAgaW50IHNpZ247Ci0KLSAgaWYoIHRl
c3MtPmNhY2hlQ291bnQgPCAzICkgewotICAgIC8qIERlZ2VuZXJhdGUgY29udG91ciAtLSBubyBv
dXRwdXQgKi8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIG5vcm1bMF0gPSB0ZXNzLT5ub3Jt
YWxbMF07Ci0gIG5vcm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07Ci0gIG5vcm1bMl0gPSB0ZXNzLT5u
b3JtYWxbMl07Ci0gIGlmKCBub3JtWzBdID09IDAgJiYgbm9ybVsxXSA9PSAwICYmIG5vcm1bMl0g
PT0gMCApIHsKLSAgICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBub3JtLCBGQUxTRSApOwotICB9Ci0K
LSAgc2lnbiA9IENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0sIFRSVUUgKTsKLSAgaWYoIHNpZ24g
PT0gU0lHTl9JTkNPTlNJU1RFTlQgKSB7Ci0gICAgLyogRmFuIHRyaWFuZ2xlcyBkaWQgbm90IGhh
dmUgYSBjb25zaXN0ZW50IG9yaWVudGF0aW9uICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0g
IGlmKCBzaWduID09IDAgKSB7Ci0gICAgLyogQWxsIHRyaWFuZ2xlcyB3ZXJlIGRlZ2VuZXJhdGUg
Ki8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIE1ha2Ugc3VyZSB3ZSBkbyB0aGUgcmln
aHQgdGhpbmcgZm9yIGVhY2ggd2luZGluZyBydWxlICovCi0gIHN3aXRjaCggdGVzcy0+d2luZGlu
Z1J1bGUgKSB7Ci0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6Ci0gIGNhc2UgR0xVX1RFU1Nf
V0lORElOR19OT05aRVJPOgotICAgIGJyZWFrOwotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfUE9T
SVRJVkU6Ci0gICAgaWYoIHNpZ24gPCAwICkgcmV0dXJuIFRSVUU7Ci0gICAgYnJlYWs7Ci0gIGNh
c2UgR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToKLSAgICBpZiggc2lnbiA+IDAgKSByZXR1cm4g
VFJVRTsKLSAgICBicmVhazsKLSAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPOgot
ICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCB0ZXNz
LT5ib3VuZGFyeU9ubHkgPyBHTF9MSU5FX0xPT1AKLQkJCSAgOiAodGVzcy0+Y2FjaGVDb3VudCA+
IDMpID8gR0xfVFJJQU5HTEVfRkFOCi0JCQkgIDogR0xfVFJJQU5HTEVTICk7Ci0KLSAgQ0FMTF9W
RVJURVhfT1JfVkVSVEVYX0RBVEEoIHYwLT5kYXRhICk7IAotICBpZiggc2lnbiA+IDAgKSB7Ci0g
ICAgZm9yKCB2YyA9IHYwKzE7IHZjIDwgdm47ICsrdmMgKSB7Ci0gICAgICBDQUxMX1ZFUlRFWF9P
Ul9WRVJURVhfREFUQSggdmMtPmRhdGEgKTsgCi0gICAgfQotICB9IGVsc2UgewotICAgIGZvcigg
dmMgPSB2bi0xOyB2YyA+IHYwOyAtLXZjICkgewotICAgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVY
X0RBVEEoIHZjLT5kYXRhICk7IAotICAgIH0KLSAgfQotICBDQUxMX0VORF9PUl9FTkRfREFUQSgp
OwotICByZXR1cm4gVFJVRTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvcmVuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkocmV2aXNpb24gODIxNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5
ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0
ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRl
cm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJl
IExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2Yg
dGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNl
bnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAw
Ci0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwg
b3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0q
KiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5E
IElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVE
SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBD
T05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5F
U1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0q
KiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxl
IEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwg
MjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4K
LSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlz
IGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHBy
b2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlv
biB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBT
eXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJp
bCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkg
KFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0wo
UikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMp
LCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRl
ZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9u
Ci0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVy
aWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBK
dWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3Qv
bWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3JlbmRlci5oIzUgJAotKi8KLQotI2lmbmRlZiBfX3Jl
bmRlcl9oXwotI2RlZmluZSBfX3JlbmRlcl9oXwotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgiCi0KLS8qIF9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVzaCApIHRha2Vz
IGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKLSAqIGZhbnMsIHN0cmlwcywgYW5k
IHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZmb3J0IGlzIG1hZGUKLSAqIHRv
IHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMgYXMgcG9zc2libGUgKGllLiB0byBtYWtl
IHRoZSBmYW5zCi0gKiBhbmQgc3RyaXBzIGFzIGxhcmdlIGFzIHBvc3NpYmxlKS4KLSAqCi0gKiBU
aGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBhcyBjYWxsYmFja3MgKHNlZSB0aGUgYXBp
KS4KLSAqLwotdm9pZCBfX2dsX3JlbmRlck1lc2goIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVW1l
c2ggKm1lc2ggKTsKLXZvaWQgX19nbF9yZW5kZXJCb3VuZGFyeSggR0xVdGVzc2VsYXRvciAqdGVz
cywgR0xVbWVzaCAqbWVzaCApOwotCi1HTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNoZSggR0xVdGVz
c2VsYXRvciAqdGVzcyApOwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dl
YkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEzNjIgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRo
ZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFu
IGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29m
dHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50
cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhl
IExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMs
IDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0x
MzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0q
KiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2Fy
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVT
UyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJ
TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQK
LSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwg
RklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVO
VC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBT
YW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5
IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9y
aWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywg
SW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRp
ZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRp
b24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1
bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoq
IEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGli
cmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9w
ZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9u
IDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBj
cmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50
YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRs
eSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVh
Y2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9k
ZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvc3dlZXAuYyM1ICQKLSovCi0KLSNpbmNsdWRl
IDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzZXRqbXAuaD4JCS8qIGxvbmdqbXAgKi8KLSNpbmNsdWRl
IDxsaW1pdHMuaD4JCS8qIExPTkdfTUFYICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSNpbmNs
dWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvZGljdC5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgot
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKLSNpbmNsdWRlICJ0
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3ByaW9yaXR5cS5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dl
ZXAuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaCIKLQotI2RlZmlu
ZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0jaWZkZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JB
TQotZXh0ZXJuIHZvaWQgRGVidWdFdmVudCggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotI2Vsc2UK
LSNkZWZpbmUgRGVidWdFdmVudCggdGVzcyApCi0jZW5kaWYKLQotLyoKLSAqIEludmFyaWFudHMg
Zm9yIHRoZSBFZGdlIERpY3Rpb25hcnkuCi0gKiAtIGVhY2ggcGFpciBvZiBhZGphY2VudCBlZGdl
cyBlMj1TdWNjKGUxKSBzYXRpc2ZpZXMgRWRnZUxlcShlMSxlMikKLSAqICAgYXQgYW55IHZhbGlk
IGxvY2F0aW9uIG9mIHRoZSBzd2VlcCBldmVudAotICogLSBpZiBFZGdlTGVxKGUyLGUxKSBhcyB3
ZWxsIChhdCBhbnkgdmFsaWQgc3dlZXAgZXZlbnQpLCB0aGVuIGUxIGFuZCBlMgotICogICBzaGFy
ZSBhIGNvbW1vbiBlbmRwb2ludAotICogLSBmb3IgZWFjaCBlLCBlLT5Ec3QgaGFzIGJlZW4gcHJv
Y2Vzc2VkLCBidXQgbm90IGUtPk9yZwotICogLSBlYWNoIGVkZ2UgZSBzYXRpc2ZpZXMgVmVydExl
cShlLT5Ec3QsZXZlbnQpICYmIFZlcnRMZXEoZXZlbnQsZS0+T3JnKQotICogICB3aGVyZSAiZXZl
bnQiIGlzIHRoZSBjdXJyZW50IHN3ZWVwIGxpbmUgZXZlbnQuCi0gKiAtIG5vIGVkZ2UgZSBoYXMg
emVybyBsZW5ndGgKLSAqCi0gKiBJbnZhcmlhbnRzIGZvciB0aGUgTWVzaCAodGhlIHByb2Nlc3Nl
ZCBwb3J0aW9uKS4KLSAqIC0gdGhlIHBvcnRpb24gb2YgdGhlIG1lc2ggbGVmdCBvZiB0aGUgc3dl
ZXAgbGluZSBpcyBhIHBsYW5hciBncmFwaCwKLSAqICAgaWUuIHRoZXJlIGlzICpzb21lKiB3YXkg
dG8gZW1iZWQgaXQgaW4gdGhlIHBsYW5lCi0gKiAtIG5vIHByb2Nlc3NlZCBlZGdlIGhhcyB6ZXJv
IGxlbmd0aAotICogLSBubyB0d28gcHJvY2Vzc2VkIHZlcnRpY2VzIGhhdmUgaWRlbnRpY2FsIGNv
b3JkaW5hdGVzCi0gKiAtIGVhY2ggImluc2lkZSIgcmVnaW9uIGlzIG1vbm90b25lLCBpZS4gY2Fu
IGJlIGJyb2tlbiBpbnRvIHR3byBjaGFpbnMKLSAqICAgb2YgbW9ub3RvbmljYWxseSBpbmNyZWFz
aW5nIHZlcnRpY2VzIGFjY29yZGluZyB0byBWZXJ0TGVxKHYxLHYyKQotICogICAtIGEgbm9uLWlu
dmFyaWFudDogdGhlc2UgY2hhaW5zIG1heSBpbnRlcnNlY3QgKHZlcnkgc2xpZ2h0bHkpCi0gKgot
ICogSW52YXJpYW50cyBmb3IgdGhlIFN3ZWVwLgotICogLSBpZiBub25lIG9mIHRoZSBlZGdlcyBp
bmNpZGVudCB0byB0aGUgZXZlbnQgdmVydGV4IGhhdmUgYW4gYWN0aXZlUmVnaW9uCi0gKiAgIChp
ZS4gbm9uZSBvZiB0aGVzZSBlZGdlcyBhcmUgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeSksIHRoZW4g
dGhlIHZlcnRleAotICogICBoYXMgb25seSByaWdodC1nb2luZyBlZGdlcy4KLSAqIC0gaWYgYW4g
ZWRnZSBpcyBtYXJrZWQgImZpeFVwcGVyRWRnZSIgKGl0IGlzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50
cm9kdWNlZAotICogICBieSBDb25uZWN0UmlnaHRWZXJ0ZXgpLCB0aGVuIGl0IGlzIHRoZSBvbmx5
IHJpZ2h0LWdvaW5nIGVkZ2UgZnJvbQotICogICBpdHMgYXNzb2NpYXRlZCB2ZXJ0ZXguICAoVGhp
cyBzYXlzIHRoYXQgdGhlc2UgZWRnZXMgZXhpc3Qgb25seQotICogICB3aGVuIGl0IGlzIG5lY2Vz
c2FyeS4pCi0gKi8KLQotI2RlZmluZSBNQVgoeCx5KQkoKHgpID49ICh5KSA/ICh4KSA6ICh5KSkK
LSNkZWZpbmUgTUlOKHgseSkJKCh4KSA8PSAoeSkgPyAoeCkgOiAoeSkpCi0KLS8qIFdoZW4gd2Ug
bWVyZ2UgdHdvIGVkZ2VzIGludG8gb25lLCB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNvbWJpbmVk
Ci0gKiB3aW5kaW5nIG9mIHRoZSBuZXcgZWRnZS4KLSAqLwotI2RlZmluZSBBZGRXaW5kaW5nKGVE
c3QsZVNyYykJKGVEc3QtPndpbmRpbmcgKz0gZVNyYy0+d2luZGluZywgXAotCQkJCSBlRHN0LT5T
eW0tPndpbmRpbmcgKz0gZVNyYy0+U3ltLT53aW5kaW5nKQotCi1zdGF0aWMgdm9pZCBTd2VlcEV2
ZW50KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCApOwotc3RhdGljIHZv
aWQgV2Fsa0RpcnR5UmVnaW9ucyggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpy
ZWdVcCApOwotc3RhdGljIGludCBDaGVja0ZvclJpZ2h0U3BsaWNlKCBHTFV0ZXNzZWxhdG9yICp0
ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICk7Ci0KLXN0YXRpYyBpbnQgRWRnZUxlcSggR0xVdGVz
c2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWcxLAotCQkgICAgQWN0aXZlUmVnaW9uICpy
ZWcyICkKLS8qCi0gKiBCb3RoIGVkZ2VzIG11c3QgYmUgZGlyZWN0ZWQgZnJvbSByaWdodCB0byBs
ZWZ0ICh0aGlzIGlzIHRoZSBjYW5vbmljYWwKLSAqIGRpcmVjdGlvbiBmb3IgdGhlIHVwcGVyIGVk
Z2Ugb2YgZWFjaCByZWdpb24pLgotICoKLSAqIFRoZSBzdHJhdGVneSBpcyB0byBldmFsdWF0ZSBh
ICJ0IiB2YWx1ZSBmb3IgZWFjaCBlZGdlIGF0IHRoZQotICogY3VycmVudCBzd2VlcCBsaW5lIHBv
c2l0aW9uLCBnaXZlbiBieSB0ZXNzLT5ldmVudC4gIFRoZSBjYWxjdWxhdGlvbnMKLSAqIGFyZSBk
ZXNpZ25lZCB0byBiZSB2ZXJ5IHN0YWJsZSwgYnV0IG9mIGNvdXJzZSB0aGV5IGFyZSBub3QgcGVy
ZmVjdC4KLSAqCi0gKiBTcGVjaWFsIGNhc2U6IGlmIGJvdGggZWRnZSBkZXN0aW5hdGlvbnMgYXJl
IGF0IHRoZSBzd2VlcCBldmVudCwKLSAqIHdlIHNvcnQgdGhlIGVkZ2VzIGJ5IHNsb3BlICh0aGV5
IHdvdWxkIG90aGVyd2lzZSBjb21wYXJlIGVxdWFsbHkpLgotICovCi17Ci0gIEdMVXZlcnRleCAq
ZXZlbnQgPSB0ZXNzLT5ldmVudDsKLSAgR0xVaGFsZkVkZ2UgKmUxLCAqZTI7Ci0gIEdMZG91Ymxl
IHQxLCB0MjsKLQotICBlMSA9IHJlZzEtPmVVcDsKLSAgZTIgPSByZWcyLT5lVXA7Ci0KLSAgaWYo
IGUxLT5Ec3QgPT0gZXZlbnQgKSB7Ci0gICAgaWYoIGUyLT5Ec3QgPT0gZXZlbnQgKSB7Ci0gICAg
ICAvKiBUd28gZWRnZXMgcmlnaHQgb2YgdGhlIHN3ZWVwIGxpbmUgd2hpY2ggbWVldCBhdCB0aGUg
c3dlZXAgZXZlbnQuCi0gICAgICAgKiBTb3J0IHRoZW0gYnkgc2xvcGUuCi0gICAgICAgKi8KLSAg
ICAgIGlmKCBWZXJ0TGVxKCBlMS0+T3JnLCBlMi0+T3JnICkpIHsKLQlyZXR1cm4gRWRnZVNpZ24o
IGUyLT5Ec3QsIGUxLT5PcmcsIGUyLT5PcmcgKSA8PSAwOwotICAgICAgfQotICAgICAgcmV0dXJu
IEVkZ2VTaWduKCBlMS0+RHN0LCBlMi0+T3JnLCBlMS0+T3JnICkgPj0gMDsKLSAgICB9Ci0gICAg
cmV0dXJuIEVkZ2VTaWduKCBlMi0+RHN0LCBldmVudCwgZTItPk9yZyApIDw9IDA7Ci0gIH0KLSAg
aWYoIGUyLT5Ec3QgPT0gZXZlbnQgKSB7Ci0gICAgcmV0dXJuIEVkZ2VTaWduKCBlMS0+RHN0LCBl
dmVudCwgZTEtPk9yZyApID49IDA7Ci0gIH0KLQotICAvKiBHZW5lcmFsIGNhc2UgLSBjb21wdXRl
IHNpZ25lZCBkaXN0YW5jZSAqZnJvbSogZTEsIGUyIHRvIGV2ZW50ICovCi0gIHQxID0gRWRnZUV2
YWwoIGUxLT5Ec3QsIGV2ZW50LCBlMS0+T3JnICk7Ci0gIHQyID0gRWRnZUV2YWwoIGUyLT5Ec3Qs
IGV2ZW50LCBlMi0+T3JnICk7Ci0gIHJldHVybiAodDEgPj0gdDIpOwotfQotCi0KLXN0YXRpYyB2
b2lkIERlbGV0ZVJlZ2lvbiggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWcg
KQotewotICBpZiggcmVnLT5maXhVcHBlckVkZ2UgKSB7Ci0gICAgLyogSXQgd2FzIGNyZWF0ZWQg
d2l0aCB6ZXJvIHdpbmRpbmcgbnVtYmVyLCBzbyBpdCBiZXR0ZXIgYmUKLSAgICAgKiBkZWxldGVk
IHdpdGggemVybyB3aW5kaW5nIG51bWJlciAoaWUuIGl0IGJldHRlciBub3QgZ2V0IG1lcmdlZAot
ICAgICAqIHdpdGggYSByZWFsIGVkZ2UpLgotICAgICAqLwotICAgIGFzc2VydCggcmVnLT5lVXAt
PndpbmRpbmcgPT0gMCApOwotICB9Ci0gIHJlZy0+ZVVwLT5hY3RpdmVSZWdpb24gPSBOVUxMOwot
ICBkaWN0RGVsZXRlKCB0ZXNzLT5kaWN0LCByZWctPm5vZGVVcCApOyAvKiBfX2dsX2RpY3RMaXN0
RGVsZXRlICovCi0gIG1lbUZyZWUoIHJlZyApOwotfQotCi0KLXN0YXRpYyBpbnQgRml4VXBwZXJF
ZGdlKCBBY3RpdmVSZWdpb24gKnJlZywgR0xVaGFsZkVkZ2UgKm5ld0VkZ2UgKQotLyoKLSAqIFJl
cGxhY2UgYW4gdXBwZXIgZWRnZSB3aGljaCBuZWVkcyBmaXhpbmcgKHNlZSBDb25uZWN0UmlnaHRW
ZXJ0ZXgpLgotICovCi17Ci0gIGFzc2VydCggcmVnLT5maXhVcHBlckVkZ2UgKTsKLSAgaWYgKCAh
X19nbF9tZXNoRGVsZXRlKCByZWctPmVVcCApICkgcmV0dXJuIDA7Ci0gIHJlZy0+Zml4VXBwZXJF
ZGdlID0gRkFMU0U7Ci0gIHJlZy0+ZVVwID0gbmV3RWRnZTsKLSAgbmV3RWRnZS0+YWN0aXZlUmVn
aW9uID0gcmVnOwotCi0gIHJldHVybiAxOyAKLX0KLQotc3RhdGljIEFjdGl2ZVJlZ2lvbiAqVG9w
TGVmdFJlZ2lvbiggQWN0aXZlUmVnaW9uICpyZWcgKQotewotICBHTFV2ZXJ0ZXggKm9yZyA9IHJl
Zy0+ZVVwLT5Pcmc7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIC8qIEZpbmQgdGhlIHJlZ2lvbiBh
Ym92ZSB0aGUgdXBwZXJtb3N0IGVkZ2Ugd2l0aCB0aGUgc2FtZSBvcmlnaW4gKi8KLSAgZG8gewot
ICAgIHJlZyA9IFJlZ2lvbkFib3ZlKCByZWcgKTsKLSAgfSB3aGlsZSggcmVnLT5lVXAtPk9yZyA9
PSBvcmcgKTsKLQotICAvKiBJZiB0aGUgZWRnZSBhYm92ZSB3YXMgYSB0ZW1wb3JhcnkgZWRnZSBp
bnRyb2R1Y2VkIGJ5IENvbm5lY3RSaWdodFZlcnRleCwKLSAgICogbm93IGlzIHRoZSB0aW1lIHRv
IGZpeCBpdC4KLSAgICovCi0gIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKLSAgICBlID0gX19n
bF9tZXNoQ29ubmVjdCggUmVnaW9uQmVsb3cocmVnKS0+ZVVwLT5TeW0sIHJlZy0+ZVVwLT5MbmV4
dCApOwotICAgIGlmIChlID09IE5VTEwpIHJldHVybiBOVUxMOwotICAgIGlmICggIUZpeFVwcGVy
RWRnZSggcmVnLCBlICkgKSByZXR1cm4gTlVMTDsKLSAgICByZWcgPSBSZWdpb25BYm92ZSggcmVn
ICk7Ci0gIH0KLSAgcmV0dXJuIHJlZzsKLX0KLQotc3RhdGljIEFjdGl2ZVJlZ2lvbiAqVG9wUmln
aHRSZWdpb24oIEFjdGl2ZVJlZ2lvbiAqcmVnICkKLXsKLSAgR0xVdmVydGV4ICpkc3QgPSByZWct
PmVVcC0+RHN0OwotCi0gIC8qIEZpbmQgdGhlIHJlZ2lvbiBhYm92ZSB0aGUgdXBwZXJtb3N0IGVk
Z2Ugd2l0aCB0aGUgc2FtZSBkZXN0aW5hdGlvbiAqLwotICBkbyB7Ci0gICAgcmVnID0gUmVnaW9u
QWJvdmUoIHJlZyApOwotICB9IHdoaWxlKCByZWctPmVVcC0+RHN0ID09IGRzdCApOwotICByZXR1
cm4gcmVnOwotfQotCi1zdGF0aWMgQWN0aXZlUmVnaW9uICpBZGRSZWdpb25CZWxvdyggR0xVdGVz
c2VsYXRvciAqdGVzcywKLQkJCQkgICAgIEFjdGl2ZVJlZ2lvbiAqcmVnQWJvdmUsCi0JCQkJICAg
ICBHTFVoYWxmRWRnZSAqZU5ld1VwICkKLS8qCi0gKiBBZGQgYSBuZXcgYWN0aXZlIHJlZ2lvbiB0
byB0aGUgc3dlZXAgbGluZSwgKnNvbWV3aGVyZSogYmVsb3cgInJlZ0Fib3ZlIgotICogKGFjY29y
ZGluZyB0byB3aGVyZSB0aGUgbmV3IGVkZ2UgYmVsb25ncyBpbiB0aGUgc3dlZXAtbGluZSBkaWN0
aW9uYXJ5KS4KLSAqIFRoZSB1cHBlciBlZGdlIG9mIHRoZSBuZXcgcmVnaW9uIHdpbGwgYmUgImVO
ZXdVcCIuCi0gKiBXaW5kaW5nIG51bWJlciBhbmQgImluc2lkZSIgZmxhZyBhcmUgbm90IHVwZGF0
ZWQuCi0gKi8KLXsKLSAgQWN0aXZlUmVnaW9uICpyZWdOZXcgPSAoQWN0aXZlUmVnaW9uICopbWVt
QWxsb2MoIHNpemVvZiggQWN0aXZlUmVnaW9uICkpOwotICBpZiAocmVnTmV3ID09IE5VTEwpIGxv
bmdqbXAodGVzcy0+ZW52LDEpOwotCi0gIHJlZ05ldy0+ZVVwID0gZU5ld1VwOwotICAvKiBfX2ds
X2RpY3RMaXN0SW5zZXJ0QmVmb3JlICovIAotICByZWdOZXctPm5vZGVVcCA9IGRpY3RJbnNlcnRC
ZWZvcmUoIHRlc3MtPmRpY3QsIHJlZ0Fib3ZlLT5ub2RlVXAsIHJlZ05ldyApOwotICBpZiAocmVn
TmV3LT5ub2RlVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIHJlZ05ldy0+Zml4
VXBwZXJFZGdlID0gRkFMU0U7Ci0gIHJlZ05ldy0+c2VudGluZWwgPSBGQUxTRTsKLSAgcmVnTmV3
LT5kaXJ0eSA9IEZBTFNFOwotCi0gIGVOZXdVcC0+YWN0aXZlUmVnaW9uID0gcmVnTmV3OwotICBy
ZXR1cm4gcmVnTmV3OwotfQotCi1zdGF0aWMgR0xib29sZWFuIElzV2luZGluZ0luc2lkZSggR0xV
dGVzc2VsYXRvciAqdGVzcywgaW50IG4gKQotewotICBzd2l0Y2goIHRlc3MtPndpbmRpbmdSdWxl
ICkgewotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfT0REOgotICAgIHJldHVybiAobiAmIDEpOwot
ICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoKLSAgICByZXR1cm4gKG4gIT0gMCk7Ci0g
IGNhc2UgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToKLSAgICByZXR1cm4gKG4gPiAwKTsKLSAg
Y2FzZSBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFOgotICAgIHJldHVybiAobiA8IDApOwotICBj
YXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086Ci0gICAgcmV0dXJuIChuID49IDIpIHx8
IChuIDw9IC0yKTsKLSAgfQotICAvKkxJTlRFRCovCi0gIGFzc2VydCggRkFMU0UgKTsKLSAgLypO
T1RSRUFDSEVEKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ29tcHV0ZVdpbmRp
bmcoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnICkKLXsKLSAgcmVnLT53
aW5kaW5nTnVtYmVyID0gUmVnaW9uQWJvdmUocmVnKS0+d2luZGluZ051bWJlciArIHJlZy0+ZVVw
LT53aW5kaW5nOwotICByZWctPmluc2lkZSA9IElzV2luZGluZ0luc2lkZSggdGVzcywgcmVnLT53
aW5kaW5nTnVtYmVyICk7Ci19Ci0KLQotc3RhdGljIHZvaWQgRmluaXNoUmVnaW9uKCBHTFV0ZXNz
ZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZyApCi0vKgotICogRGVsZXRlIGEgcmVnaW9u
IGZyb20gdGhlIHN3ZWVwIGxpbmUuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgdXBwZXIKLSAqIGFu
ZCBsb3dlciBjaGFpbnMgb2YgYSByZWdpb24gbWVldCAoYXQgYSB2ZXJ0ZXggb24gdGhlIHN3ZWVw
IGxpbmUpLgotICogVGhlICJpbnNpZGUiIGZsYWcgaXMgY29waWVkIHRvIHRoZSBhcHByb3ByaWF0
ZSBtZXNoIGZhY2UgKHdlIGNvdWxkCi0gKiBub3QgZG8gdGhpcyBiZWZvcmUgLS0gc2luY2UgdGhl
IHN0cnVjdHVyZSBvZiB0aGUgbWVzaCBpcyBhbHdheXMKLSAqIGNoYW5naW5nLCB0aGlzIGZhY2Ug
bWF5IG5vdCBoYXZlIGV2ZW4gZXhpc3RlZCB1bnRpbCBub3cpLgotICovCi17Ci0gIEdMVWhhbGZF
ZGdlICplID0gcmVnLT5lVXA7Ci0gIEdMVWZhY2UgKmYgPSBlLT5MZmFjZTsKLQotICBmLT5pbnNp
ZGUgPSByZWctPmluc2lkZTsKLSAgZi0+YW5FZGdlID0gZTsgICAvKiBvcHRpbWl6YXRpb24gZm9y
IF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCkgKi8KLSAgRGVsZXRlUmVnaW9uKCB0ZXNz
LCByZWcgKTsKLX0KLQotCi1zdGF0aWMgR0xVaGFsZkVkZ2UgKkZpbmlzaExlZnRSZWdpb25zKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLAotCSAgICAgICBBY3RpdmVSZWdpb24gKnJlZ0ZpcnN0LCBBY3Rp
dmVSZWdpb24gKnJlZ0xhc3QgKQotLyoKLSAqIFdlIGFyZSBnaXZlbiBhIHZlcnRleCB3aXRoIG9u
ZSBvciBtb3JlIGxlZnQtZ29pbmcgZWRnZXMuICBBbGwgYWZmZWN0ZWQKLSAqIGVkZ2VzIHNob3Vs
ZCBiZSBpbiB0aGUgZWRnZSBkaWN0aW9uYXJ5LiAgU3RhcnRpbmcgYXQgcmVnRmlyc3QtPmVVcCwK
LSAqIHdlIHdhbGsgZG93biBkZWxldGluZyBhbGwgcmVnaW9ucyB3aGVyZSBib3RoIGVkZ2VzIGhh
dmUgdGhlIHNhbWUKLSAqIG9yaWdpbiB2T3JnLiAgQXQgdGhlIHNhbWUgdGltZSB3ZSBjb3B5IHRo
ZSAiaW5zaWRlIiBmbGFnIGZyb20gdGhlCi0gKiBhY3RpdmUgcmVnaW9uIHRvIHRoZSBmYWNlLCBz
aW5jZSBhdCB0aGlzIHBvaW50IGVhY2ggZmFjZSB3aWxsIGJlbG9uZwotICogdG8gYXQgbW9zdCBv
bmUgcmVnaW9uICh0aGlzIHdhcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB1bnRpbCB0aGlzIHBvaW50
Ci0gKiBpbiB0aGUgc3dlZXApLiAgVGhlIHdhbGsgc3RvcHMgYXQgdGhlIHJlZ2lvbiBhYm92ZSBy
ZWdMYXN0OyBpZiByZWdMYXN0Ci0gKiBpcyBOVUxMIHdlIHdhbGsgYXMgZmFyIGFzIHBvc3NpYmxl
LiAgQXQgdGhlIHNhbWUgdGltZSB3ZSByZWxpbmsgdGhlCi0gKiBtZXNoIGlmIG5lY2Vzc2FyeSwg
c28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgZWRnZXMgYXJvdW5kIHZPcmcgaXMgdGhlCi0gKiBzYW1l
IGFzIGluIHRoZSBkaWN0aW9uYXJ5LgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnLCAqcmVn
UHJldjsKLSAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKLQotICByZWdQcmV2ID0gcmVnRmlyc3Q7
Ci0gIGVQcmV2ID0gcmVnRmlyc3QtPmVVcDsKLSAgd2hpbGUoIHJlZ1ByZXYgIT0gcmVnTGFzdCAp
IHsKLSAgICByZWdQcmV2LT5maXhVcHBlckVkZ2UgPSBGQUxTRTsJLyogcGxhY2VtZW50IHdhcyBP
SyAqLwotICAgIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdQcmV2ICk7Ci0gICAgZSA9IHJlZy0+ZVVw
OwotICAgIGlmKCBlLT5PcmcgIT0gZVByZXYtPk9yZyApIHsKLSAgICAgIGlmKCAhIHJlZy0+Zml4
VXBwZXJFZGdlICkgewotCS8qIFJlbW92ZSB0aGUgbGFzdCBsZWZ0LWdvaW5nIGVkZ2UuICBFdmVu
IHRob3VnaCB0aGVyZSBhcmUgbm8gZnVydGhlcgotCSAqIGVkZ2VzIGluIHRoZSBkaWN0aW9uYXJ5
IHdpdGggdGhpcyBvcmlnaW4sIHRoZXJlIG1heSBiZSBmdXJ0aGVyCi0JICogc3VjaCBlZGdlcyBp
biB0aGUgbWVzaCAoaWYgd2UgYXJlIGFkZGluZyBsZWZ0IGVkZ2VzIHRvIGEgdmVydGV4Ci0JICog
dGhhdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCkuICBUaHVzIGl0IGlzIGltcG9ydGFudCB0
byBjYWxsCi0JICogRmluaXNoUmVnaW9uIHJhdGhlciB0aGFuIGp1c3QgRGVsZXRlUmVnaW9uLgot
CSAqLwotCUZpbmlzaFJlZ2lvbiggdGVzcywgcmVnUHJldiApOwotCWJyZWFrOwotICAgICAgfQot
ICAgICAgLyogSWYgdGhlIGVkZ2UgYmVsb3cgd2FzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9kdWNl
ZCBieQotICAgICAgICogQ29ubmVjdFJpZ2h0VmVydGV4LCBub3cgaXMgdGhlIHRpbWUgdG8gZml4
IGl0LgotICAgICAgICovCi0gICAgICBlID0gX19nbF9tZXNoQ29ubmVjdCggZVByZXYtPkxwcmV2
LCBlLT5TeW0gKTsKLSAgICAgIGlmIChlID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwot
ICAgICAgaWYgKCAhRml4VXBwZXJFZGdlKCByZWcsIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEp
OwotICAgIH0KLQotICAgIC8qIFJlbGluayBlZGdlcyBzbyB0aGF0IGVQcmV2LT5PbmV4dCA9PSBl
ICovCi0gICAgaWYoIGVQcmV2LT5PbmV4dCAhPSBlICkgewotICAgICAgaWYgKCAhX19nbF9tZXNo
U3BsaWNlKCBlLT5PcHJldiwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgICBpZiAo
ICFfX2dsX21lc2hTcGxpY2UoIGVQcmV2LCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAg
ICB9Ci0gICAgRmluaXNoUmVnaW9uKCB0ZXNzLCByZWdQcmV2ICk7CS8qIG1heSBjaGFuZ2UgcmVn
LT5lVXAgKi8KLSAgICBlUHJldiA9IHJlZy0+ZVVwOwotICAgIHJlZ1ByZXYgPSByZWc7Ci0gIH0K
LSAgcmV0dXJuIGVQcmV2OwotfQotCi0KLXN0YXRpYyB2b2lkIEFkZFJpZ2h0RWRnZXMoIEdMVXRl
c3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsCi0gICAgICAgR0xVaGFsZkVkZ2Ug
KmVGaXJzdCwgR0xVaGFsZkVkZ2UgKmVMYXN0LCBHTFVoYWxmRWRnZSAqZVRvcExlZnQsCi0gICAg
ICAgR0xib29sZWFuIGNsZWFuVXAgKQotLyoKLSAqIFB1cnBvc2U6IGluc2VydCByaWdodC1nb2lu
ZyBlZGdlcyBpbnRvIHRoZSBlZGdlIGRpY3Rpb25hcnksIGFuZCB1cGRhdGUKLSAqIHdpbmRpbmcg
bnVtYmVycyBhbmQgbWVzaCBjb25uZWN0aXZpdHkgYXBwcm9wcmlhdGVseS4gIEFsbCByaWdodC1n
b2luZwotICogZWRnZXMgc2hhcmUgYSBjb21tb24gb3JpZ2luIHZPcmcuICBFZGdlcyBhcmUgaW5z
ZXJ0ZWQgQ0NXIHN0YXJ0aW5nIGF0Ci0gKiBlRmlyc3Q7IHRoZSBsYXN0IGVkZ2UgaW5zZXJ0ZWQg
aXMgZUxhc3QtPk9wcmV2LiAgSWYgdk9yZyBoYXMgYW55Ci0gKiBsZWZ0LWdvaW5nIGVkZ2VzIGFs
cmVhZHkgcHJvY2Vzc2VkLCB0aGVuIGVUb3BMZWZ0IG11c3QgYmUgdGhlIGVkZ2UKLSAqIHN1Y2gg
dGhhdCBhbiBpbWFnaW5hcnkgdXB3YXJkIHZlcnRpY2FsIHNlZ21lbnQgZnJvbSB2T3JnIHdvdWxk
IGJlCi0gKiBjb250YWluZWQgYmV0d2VlbiBlVG9wTGVmdC0+T3ByZXYgYW5kIGVUb3BMZWZ0OyBv
dGhlcndpc2UgZVRvcExlZnQKLSAqIHNob3VsZCBiZSBOVUxMLgotICovCi17Ci0gIEFjdGl2ZVJl
Z2lvbiAqcmVnLCAqcmVnUHJldjsKLSAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKLSAgaW50IGZp
cnN0VGltZSA9IFRSVUU7Ci0KLSAgLyogSW5zZXJ0IHRoZSBuZXcgcmlnaHQtZ29pbmcgZWRnZXMg
aW4gdGhlIGRpY3Rpb25hcnkgKi8KLSAgZSA9IGVGaXJzdDsKLSAgZG8gewotICAgIGFzc2VydCgg
VmVydExlcSggZS0+T3JnLCBlLT5Ec3QgKSk7Ci0gICAgQWRkUmVnaW9uQmVsb3coIHRlc3MsIHJl
Z1VwLCBlLT5TeW0gKTsKLSAgICBlID0gZS0+T25leHQ7Ci0gIH0gd2hpbGUgKCBlICE9IGVMYXN0
ICk7Ci0KLSAgLyogV2FsayAqYWxsKiByaWdodC1nb2luZyBlZGdlcyBmcm9tIGUtPk9yZywgaW4g
dGhlIGRpY3Rpb25hcnkgb3JkZXIsCi0gICAqIHVwZGF0aW5nIHRoZSB3aW5kaW5nIG51bWJlcnMg
b2YgZWFjaCByZWdpb24sIGFuZCByZS1saW5raW5nIHRoZSBtZXNoCi0gICAqIGVkZ2VzIHRvIG1h
dGNoIHRoZSBkaWN0aW9uYXJ5IG9yZGVyaW5nIChpZiBuZWNlc3NhcnkpLgotICAgKi8KLSAgaWYo
IGVUb3BMZWZ0ID09IE5VTEwgKSB7Ci0gICAgZVRvcExlZnQgPSBSZWdpb25CZWxvdyggcmVnVXAg
KS0+ZVVwLT5ScHJldjsKLSAgfQotICByZWdQcmV2ID0gcmVnVXA7Ci0gIGVQcmV2ID0gZVRvcExl
ZnQ7Ci0gIGZvciggOzsgKSB7Ci0gICAgcmVnID0gUmVnaW9uQmVsb3coIHJlZ1ByZXYgKTsKLSAg
ICBlID0gcmVnLT5lVXAtPlN5bTsKLSAgICBpZiggZS0+T3JnICE9IGVQcmV2LT5PcmcgKSBicmVh
azsKLQotICAgIGlmKCBlLT5PbmV4dCAhPSBlUHJldiApIHsKLSAgICAgIC8qIFVubGluayBlIGZy
b20gaXRzIGN1cnJlbnQgcG9zaXRpb24sIGFuZCByZWxpbmsgYmVsb3cgZVByZXYgKi8KLSAgICAg
IGlmICggIV9fZ2xfbWVzaFNwbGljZSggZS0+T3ByZXYsIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52
LDEpOwotICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlUHJldi0+T3ByZXYsIGUgKSApIGxv
bmdqbXAodGVzcy0+ZW52LDEpOwotICAgIH0KLSAgICAvKiBDb21wdXRlIHRoZSB3aW5kaW5nIG51
bWJlciBhbmQgImluc2lkZSIgZmxhZyBmb3IgdGhlIG5ldyByZWdpb25zICovCi0gICAgcmVnLT53
aW5kaW5nTnVtYmVyID0gcmVnUHJldi0+d2luZGluZ051bWJlciAtIGUtPndpbmRpbmc7Ci0gICAg
cmVnLT5pbnNpZGUgPSBJc1dpbmRpbmdJbnNpZGUoIHRlc3MsIHJlZy0+d2luZGluZ051bWJlciAp
OwotCi0gICAgLyogQ2hlY2sgZm9yIHR3byBvdXRnb2luZyBlZGdlcyB3aXRoIHNhbWUgc2xvcGUg
LS0gcHJvY2VzcyB0aGVzZQotICAgICAqIGJlZm9yZSBhbnkgaW50ZXJzZWN0aW9uIHRlc3RzIChz
ZWUgZXhhbXBsZSBpbiBfX2dsX2NvbXB1dGVJbnRlcmlvcikuCi0gICAgICovCi0gICAgcmVnUHJl
di0+ZGlydHkgPSBUUlVFOwotICAgIGlmKCAhIGZpcnN0VGltZSAmJiBDaGVja0ZvclJpZ2h0U3Bs
aWNlKCB0ZXNzLCByZWdQcmV2ICkpIHsKLSAgICAgIEFkZFdpbmRpbmcoIGUsIGVQcmV2ICk7Ci0g
ICAgICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ1ByZXYgKTsKLSAgICAgIGlmICggIV9fZ2xfbWVz
aERlbGV0ZSggZVByZXYgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIH0KLSAgICBmaXJz
dFRpbWUgPSBGQUxTRTsKLSAgICByZWdQcmV2ID0gcmVnOwotICAgIGVQcmV2ID0gZTsKLSAgfQot
ICByZWdQcmV2LT5kaXJ0eSA9IFRSVUU7Ci0gIGFzc2VydCggcmVnUHJldi0+d2luZGluZ051bWJl
ciAtIGUtPndpbmRpbmcgPT0gcmVnLT53aW5kaW5nTnVtYmVyICk7Ci0KLSAgaWYoIGNsZWFuVXAg
KSB7Ci0gICAgLyogQ2hlY2sgZm9yIGludGVyc2VjdGlvbnMgYmV0d2VlbiBuZXdseSBhZGphY2Vu
dCBlZGdlcy4gKi8KLSAgICBXYWxrRGlydHlSZWdpb25zKCB0ZXNzLCByZWdQcmV2ICk7Ci0gIH0K
LX0KLQotCi1zdGF0aWMgdm9pZCBDYWxsQ29tYmluZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xV
dmVydGV4ICppc2VjdCwKLQkJCSB2b2lkICpkYXRhWzRdLCBHTGZsb2F0IHdlaWdodHNbNF0sIGlu
dCBuZWVkZWQgKQotewotICBHTGRvdWJsZSBjb29yZHNbM107Ci0KLSAgLyogQ29weSBjb29yZCBk
YXRhIGluIGNhc2UgdGhlIGNhbGxiYWNrIGNoYW5nZXMgaXQuICovCi0gIGNvb3Jkc1swXSA9IGlz
ZWN0LT5jb29yZHNbMF07Ci0gIGNvb3Jkc1sxXSA9IGlzZWN0LT5jb29yZHNbMV07Ci0gIGNvb3Jk
c1syXSA9IGlzZWN0LT5jb29yZHNbMl07Ci0KLSAgaXNlY3QtPmRhdGEgPSBOVUxMOwotICBDQUxM
X0NPTUJJTkVfT1JfQ09NQklORV9EQVRBKCBjb29yZHMsIGRhdGEsIHdlaWdodHMsICZpc2VjdC0+
ZGF0YSApOwotICBpZiggaXNlY3QtPmRhdGEgPT0gTlVMTCApIHsKLSAgICBpZiggISBuZWVkZWQg
KSB7Ci0gICAgICBpc2VjdC0+ZGF0YSA9IGRhdGFbMF07Ci0gICAgfSBlbHNlIGlmKCAhIHRlc3Mt
PmZhdGFsRXJyb3IgKSB7Ci0gICAgICAvKiBUaGUgb25seSB3YXkgZmF0YWwgZXJyb3IgaXMgd2hl
biB0d28gZWRnZXMgYXJlIGZvdW5kIHRvIGludGVyc2VjdCwKLSAgICAgICAqIGJ1dCB0aGUgdXNl
ciBoYXMgbm90IHByb3ZpZGVkIHRoZSBjYWxsYmFjayBuZWNlc3NhcnkgdG8gaGFuZGxlCi0gICAg
ICAgKiBnZW5lcmF0ZWQgaW50ZXJzZWN0aW9uIHBvaW50cy4KLSAgICAgICAqLwotICAgICAgQ0FM
TF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0sgKTsK
LSAgICAgIHRlc3MtPmZhdGFsRXJyb3IgPSBUUlVFOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMg
dm9pZCBTcGxpY2VNZXJnZVZlcnRpY2VzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRn
ZSAqZTEsCi0JCQkJIEdMVWhhbGZFZGdlICplMiApCi0vKgotICogVHdvIHZlcnRpY2VzIHdpdGgg
aWRlbnRpYWwgY29vcmRpbmF0ZXMgYXJlIGNvbWJpbmVkIGludG8gb25lLgotICogZTEtPk9yZyBp
cyBrZXB0LCB3aGlsZSBlMi0+T3JnIGlzIGRpc2NhcmRlZC4KLSAqLwotewotICB2b2lkICpkYXRh
WzRdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0gIEdMZmxvYXQgd2VpZ2h0c1s0XSA9
IHsgMC41LCAwLjUsIDAuMCwgMC4wIH07Ci0KLSAgZGF0YVswXSA9IGUxLT5PcmctPmRhdGE7Ci0g
IGRhdGFbMV0gPSBlMi0+T3JnLT5kYXRhOwotICBDYWxsQ29tYmluZSggdGVzcywgZTEtPk9yZywg
ZGF0YSwgd2VpZ2h0cywgRkFMU0UgKTsKLSAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlMSwgZTIg
KSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAKLX0KLQotc3RhdGljIHZvaWQgVmVydGV4V2VpZ2h0
cyggR0xVdmVydGV4ICppc2VjdCwgR0xVdmVydGV4ICpvcmcsIEdMVXZlcnRleCAqZHN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqd2VpZ2h0cyApCi0vKgotICogRmluZCBz
b21lIHdlaWdodHMgd2hpY2ggZGVzY3JpYmUgaG93IHRoZSBpbnRlcnNlY3Rpb24gdmVydGV4IGlz
Ci0gKiBhIGxpbmVhciBjb21iaW5hdGlvbiBvZiAib3JnIiBhbmQgImRlc3QiLiAgRWFjaCBvZiB0
aGUgdHdvIGVkZ2VzCi0gKiB3aGljaCBnZW5lcmF0ZWQgImlzZWN0IiBpcyBhbGxvY2F0ZWQgNTAl
IG9mIHRoZSB3ZWlnaHQ7IGVhY2ggZWRnZQotICogc3BsaXRzIHRoZSB3ZWlnaHQgYmV0d2VlbiBp
dHMgb3JnIGFuZCBkc3QgYWNjb3JkaW5nIHRvIHRoZQotICogcmVsYXRpdmUgZGlzdGFuY2UgdG8g
ImlzZWN0Ii4KLSAqLwotewotICBHTGRvdWJsZSB0MSA9IFZlcnRMMWRpc3QoIG9yZywgaXNlY3Qg
KTsKLSAgR0xkb3VibGUgdDIgPSBWZXJ0TDFkaXN0KCBkc3QsIGlzZWN0ICk7Ci0KLSAgd2VpZ2h0
c1swXSA9IDAuNSAqIHQyIC8gKHQxICsgdDIpOwotICB3ZWlnaHRzWzFdID0gMC41ICogdDEgLyAo
dDEgKyB0Mik7Ci0gIGlzZWN0LT5jb29yZHNbMF0gKz0gd2VpZ2h0c1swXSpvcmctPmNvb3Jkc1sw
XSArIHdlaWdodHNbMV0qZHN0LT5jb29yZHNbMF07Ci0gIGlzZWN0LT5jb29yZHNbMV0gKz0gd2Vp
Z2h0c1swXSpvcmctPmNvb3Jkc1sxXSArIHdlaWdodHNbMV0qZHN0LT5jb29yZHNbMV07Ci0gIGlz
ZWN0LT5jb29yZHNbMl0gKz0gd2VpZ2h0c1swXSpvcmctPmNvb3Jkc1syXSArIHdlaWdodHNbMV0q
ZHN0LT5jb29yZHNbMl07Ci19Ci0KLQotc3RhdGljIHZvaWQgR2V0SW50ZXJzZWN0RGF0YSggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xVdmVydGV4ICppc2VjdCwKLSAgICAgICBHTFV2ZXJ0ZXggKm9y
Z1VwLCBHTFV2ZXJ0ZXggKmRzdFVwLAotICAgICAgIEdMVXZlcnRleCAqb3JnTG8sIEdMVXZlcnRl
eCAqZHN0TG8gKQotLyoKLSAqIFdlJ3ZlIGNvbXB1dGVkIGEgbmV3IGludGVyc2VjdGlvbiBwb2lu
dCwgbm93IHdlIG5lZWQgYSAiZGF0YSIgcG9pbnRlcgotICogZnJvbSB0aGUgdXNlciBzbyB0aGF0
IHdlIGNhbiByZWZlciB0byB0aGlzIG5ldyB2ZXJ0ZXggaW4gdGhlCi0gKiByZW5kZXJpbmcgY2Fs
bGJhY2tzLgotICovCi17Ci0gIHZvaWQgKmRhdGFbNF07Ci0gIEdMZmxvYXQgd2VpZ2h0c1s0XTsK
LQotICBkYXRhWzBdID0gb3JnVXAtPmRhdGE7Ci0gIGRhdGFbMV0gPSBkc3RVcC0+ZGF0YTsKLSAg
ZGF0YVsyXSA9IG9yZ0xvLT5kYXRhOwotICBkYXRhWzNdID0gZHN0TG8tPmRhdGE7Ci0KLSAgaXNl
Y3QtPmNvb3Jkc1swXSA9IGlzZWN0LT5jb29yZHNbMV0gPSBpc2VjdC0+Y29vcmRzWzJdID0gMDsK
LSAgVmVydGV4V2VpZ2h0cyggaXNlY3QsIG9yZ1VwLCBkc3RVcCwgJndlaWdodHNbMF0gKTsKLSAg
VmVydGV4V2VpZ2h0cyggaXNlY3QsIG9yZ0xvLCBkc3RMbywgJndlaWdodHNbMl0gKTsKLQotICBD
YWxsQ29tYmluZSggdGVzcywgaXNlY3QsIGRhdGEsIHdlaWdodHMsIFRSVUUgKTsKLX0KLQotc3Rh
dGljIGludCBDaGVja0ZvclJpZ2h0U3BsaWNlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVS
ZWdpb24gKnJlZ1VwICkKLS8qCi0gKiBDaGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2Yg
InJlZ1VwIiwgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0gKiBlVXAtPk9yZyBpcyBhYm92ZSBlTG8s
IG9yIGVMby0+T3JnIGlzIGJlbG93IGVVcCAoZGVwZW5kaW5nIG9uIHdoaWNoCi0gKiBvcmlnaW4g
aXMgbGVmdG1vc3QpLgotICoKLSAqIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gc3BsaWNlIHJpZ2h0
LWdvaW5nIGVkZ2VzIHdpdGggdGhlIHNhbWUKLSAqIGRlc3QgdmVydGV4IGFuZCBuZWFybHkgaWRl
bnRpY2FsIHNsb3BlcyAoaWUuIHdlIGNhbid0IGRpc3Rpbmd1aXNoCi0gKiB0aGUgc2xvcGVzIG51
bWVyaWNhbGx5KS4gIEhvd2V2ZXIgdGhlIHNwbGljaW5nIGNhbiBhbHNvIGhlbHAgdXMKLSAqIHRv
IHJlY292ZXIgZnJvbSBudW1lcmljYWwgZXJyb3JzLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgYXQg
b25lCi0gKiBwb2ludCB3ZSBjaGVja2VkIGVVcCBhbmQgZUxvLCBhbmQgZGVjaWRlZCB0aGF0IGVV
cC0+T3JnIGlzIGJhcmVseQotICogYWJvdmUgZUxvLiAgVGhlbiBsYXRlciwgd2Ugc3BsaXQgZUxv
IGludG8gdHdvIGVkZ2VzIChlZy4gZnJvbQotICogYSBzcGxpY2Ugb3BlcmF0aW9uIGxpa2UgdGhp
cyBvbmUpLiAgVGhpcyBjYW4gY2hhbmdlIHRoZSByZXN1bHQgb2YKLSAqIG91ciB0ZXN0IHNvIHRo
YXQgbm93IGVVcC0+T3JnIGlzIGluY2lkZW50IHRvIGVMbywgb3IgYmFyZWx5IGJlbG93IGl0Lgot
ICogV2UgbXVzdCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uIHRvIG1haW50YWluIHRoZSBkaWN0aW9u
YXJ5IGludmFyaWFudHMuCi0gKgotICogT25lIHBvc3NpYmlsaXR5IGlzIHRvIGNoZWNrIHRoZXNl
IGVkZ2VzIGZvciBpbnRlcnNlY3Rpb24gYWdhaW4KLSAqIChpZS4gQ2hlY2tGb3JJbnRlcnNlY3Qp
LiAgVGhpcyBpcyB3aGF0IHdlIGRvIGlmIHBvc3NpYmxlLiAgSG93ZXZlcgotICogQ2hlY2tGb3JJ
bnRlcnNlY3QgcmVxdWlyZXMgdGhhdCB0ZXNzLT5ldmVudCBsaWVzIGJldHdlZW4gZVVwIGFuZCBl
TG8sCi0gKiBzbyB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZmFsbCBiYWNrIG9uIHdoZW4gdGhl
IGludGVyc2VjdGlvbgotICogY2FsY3VsYXRpb24gZ2l2ZXMgdXMgYW4gdW51c2FibGUgYW5zd2Vy
LiAgU28sIGZvciB0aG9zZSBjYXNlcyB3aGVyZQotICogd2UgY2FuJ3QgY2hlY2sgZm9yIGludGVy
c2VjdGlvbiwgdGhpcyByb3V0aW5lIGZpeGVzIHRoZSBwcm9ibGVtCi0gKiBieSBqdXN0IHNwbGlj
aW5nIHRoZSBvZmZlbmRpbmcgdmVydGV4IGludG8gdGhlIG90aGVyIGVkZ2UuCi0gKiBUaGlzIGlz
IGEgZ3VhcmFudGVlZCBzb2x1dGlvbiwgbm8gbWF0dGVyIGhvdyBkZWdlbmVyYXRlIHRoaW5ncyBn
ZXQuCi0gKiBCYXNpY2FsbHkgdGhpcyBpcyBhIGNvbWJpbmF0b3JpYWwgc29sdXRpb24gdG8gYSBu
dW1lcmljYWwgcHJvYmxlbS4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVnaW9u
QmVsb3cocmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVVcDsKLSAgR0xVaGFs
ZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7Ci0KLSAgaWYoIFZlcnRMZXEoIGVVcC0+T3JnLCBlTG8t
Pk9yZyApKSB7Ci0gICAgaWYoIEVkZ2VTaWduKCBlTG8tPkRzdCwgZVVwLT5PcmcsIGVMby0+T3Jn
ICkgPiAwICkgcmV0dXJuIEZBTFNFOwotCi0gICAgLyogZVVwLT5PcmcgYXBwZWFycyB0byBiZSBi
ZWxvdyBlTG8gKi8KLSAgICBpZiggISBWZXJ0RXEoIGVVcC0+T3JnLCBlTG8tPk9yZyApKSB7Ci0g
ICAgICAvKiBTcGxpY2UgZVVwLT5PcmcgaW50byBlTG8gKi8KLSAgICAgIGlmICggX19nbF9tZXNo
U3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAg
ICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAsIGVMby0+T3ByZXYgKSApIGxvbmdqbXAodGVz
cy0+ZW52LDEpOwotICAgICAgcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKLQot
ICAgIH0gZWxzZSBpZiggZVVwLT5PcmcgIT0gZUxvLT5PcmcgKSB7Ci0gICAgICAvKiBtZXJnZSB0
aGUgdHdvIHZlcnRpY2VzLCBkaXNjYXJkaW5nIGVVcC0+T3JnICovCi0gICAgICBwcURlbGV0ZSgg
dGVzcy0+cHEsIGVVcC0+T3JnLT5wcUhhbmRsZSApOyAvKiBfX2dsX3BxU29ydERlbGV0ZSAqLwot
ICAgICAgU3BsaWNlTWVyZ2VWZXJ0aWNlcyggdGVzcywgZUxvLT5PcHJldiwgZVVwICk7Ci0gICAg
fQotICB9IGVsc2UgewotICAgIGlmKCBFZGdlU2lnbiggZVVwLT5Ec3QsIGVMby0+T3JnLCBlVXAt
Pk9yZyApIDwgMCApIHJldHVybiBGQUxTRTsKLQotICAgIC8qIGVMby0+T3JnIGFwcGVhcnMgdG8g
YmUgYWJvdmUgZVVwLCBzbyBzcGxpY2UgZUxvLT5PcmcgaW50byBlVXAgKi8KLSAgICBSZWdpb25B
Ym92ZShyZWdVcCktPmRpcnR5ID0gcmVnVXAtPmRpcnR5ID0gVFJVRTsKLSAgICBpZiAoX19nbF9t
ZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwot
ICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5PcHJldiwgZVVwICkgKSBsb25nam1wKHRl
c3MtPmVudiwxKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGludCBDaGVja0Zv
ckxlZnRTcGxpY2UoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAgKQot
LyoKLSAqIENoZWNrIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRnZSBvZiAicmVnVXAiLCB0byBtYWtl
IHN1cmUgdGhhdCB0aGUKLSAqIGVVcC0+RHN0IGlzIGFib3ZlIGVMbywgb3IgZUxvLT5Ec3QgaXMg
YmVsb3cgZVVwIChkZXBlbmRpbmcgb24gd2hpY2gKLSAqIGRlc3RpbmF0aW9uIGlzIHJpZ2h0bW9z
dCkuCi0gKgotICogVGhlb3JldGljYWxseSwgdGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWUuICBI
b3dldmVyLCBzcGxpdHRpbmcgYW4gZWRnZQotICogaW50byB0d28gcGllY2VzIGNhbiBjaGFuZ2Ug
dGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgdGVzdHMuICBGb3IgZXhhbXBsZSwKLSAqIHN1cHBvc2Ug
YXQgb25lIHBvaW50IHdlIGNoZWNrZWQgZVVwIGFuZCBlTG8sIGFuZCBkZWNpZGVkIHRoYXQgZVVw
LT5Ec3QKLSAqIGlzIGJhcmVseSBhYm92ZSBlTG8uICBUaGVuIGxhdGVyLCB3ZSBzcGxpdCBlTG8g
aW50byB0d28gZWRnZXMgKGVnLiBmcm9tCi0gKiBhIHNwbGljZSBvcGVyYXRpb24gbGlrZSB0aGlz
IG9uZSkuICBUaGlzIGNhbiBjaGFuZ2UgdGhlIHJlc3VsdCBvZgotICogdGhlIHRlc3Qgc28gdGhh
dCBub3cgZVVwLT5Ec3QgaXMgaW5jaWRlbnQgdG8gZUxvLCBvciBiYXJlbHkgYmVsb3cgaXQuCi0g
KiBXZSBtdXN0IGNvcnJlY3QgdGhpcyBjb25kaXRpb24gdG8gbWFpbnRhaW4gdGhlIGRpY3Rpb25h
cnkgaW52YXJpYW50cwotICogKG90aGVyd2lzZSBuZXcgZWRnZXMgbWlnaHQgZ2V0IGluc2VydGVk
IGluIHRoZSB3cm9uZyBwbGFjZSBpbiB0aGUKLSAqIGRpY3Rpb25hcnksIGFuZCBiYWQgc3R1ZmYg
d2lsbCBoYXBwZW4pLgotICoKLSAqIFdlIGZpeCB0aGUgcHJvYmxlbSBieSBqdXN0IHNwbGljaW5n
IHRoZSBvZmZlbmRpbmcgdmVydGV4IGludG8gdGhlCi0gKiBvdGhlciBlZGdlLgotICovCi17Ci0g
IEFjdGl2ZVJlZ2lvbiAqcmVnTG8gPSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZFZGdl
ICplVXAgPSByZWdVcC0+ZVVwOwotICBHTFVoYWxmRWRnZSAqZUxvID0gcmVnTG8tPmVVcDsKLSAg
R0xVaGFsZkVkZ2UgKmU7Ci0KLSAgYXNzZXJ0KCAhIFZlcnRFcSggZVVwLT5Ec3QsIGVMby0+RHN0
ICkpOwotCi0gIGlmKCBWZXJ0TGVxKCBlVXAtPkRzdCwgZUxvLT5Ec3QgKSkgewotICAgIGlmKCBF
ZGdlU2lnbiggZVVwLT5Ec3QsIGVMby0+RHN0LCBlVXAtPk9yZyApIDwgMCApIHJldHVybiBGQUxT
RTsKLQotICAgIC8qIGVMby0+RHN0IGlzIGFib3ZlIGVVcCwgc28gc3BsaWNlIGVMby0+RHN0IGlu
dG8gZVVwICovCi0gICAgUmVnaW9uQWJvdmUocmVnVXApLT5kaXJ0eSA9IHJlZ1VwLT5kaXJ0eSA9
IFRSVUU7Ci0gICAgZSA9IF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwICk7Ci0gICAgaWYgKGUgPT0g
TlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBl
TG8tPlN5bSwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZS0+TGZhY2UtPmluc2lk
ZSA9IHJlZ1VwLT5pbnNpZGU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYoIEVkZ2VTaWduKCBlTG8tPkRz
dCwgZVVwLT5Ec3QsIGVMby0+T3JnICkgPiAwICkgcmV0dXJuIEZBTFNFOwotCi0gICAgLyogZVVw
LT5Ec3QgaXMgYmVsb3cgZUxvLCBzbyBzcGxpY2UgZVVwLT5Ec3QgaW50byBlTG8gKi8KLSAgICBy
ZWdVcC0+ZGlydHkgPSByZWdMby0+ZGlydHkgPSBUUlVFOwotICAgIGUgPSBfX2dsX21lc2hTcGxp
dEVkZ2UoIGVMbyApOwotICAgIGlmIChlID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAg
ICAKLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVVcC0+TG5leHQsIGVMby0+U3ltICkgKSBs
b25nam1wKHRlc3MtPmVudiwxKTsKLSAgICBlLT5SZmFjZS0+aW5zaWRlID0gcmVnVXAtPmluc2lk
ZTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgaW50IENoZWNrRm9ySW50ZXJz
ZWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICkKLS8qCi0gKiBD
aGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzIG9mIHRoZSBnaXZlbiByZWdpb24gdG8gc2Vl
IGlmCi0gKiB0aGV5IGludGVyc2VjdC4gIElmIHNvLCBjcmVhdGUgdGhlIGludGVyc2VjdGlvbiBh
bmQgYWRkIGl0Ci0gKiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgotICoKLSAqIFJldHVybnMgVFJV
RSBpZiBhZGRpbmcgdGhlIG5ldyBpbnRlcnNlY3Rpb24gcmVzdWx0ZWQgaW4gYSByZWN1cnNpdmUK
LSAqIGNhbGwgdG8gQWRkUmlnaHRFZGdlcygpOyBpbiB0aGlzIGNhc2UgYWxsICJkaXJ0eSIgcmVn
aW9ucyBoYXZlIGJlZW4KLSAqIGNoZWNrZWQgZm9yIGludGVyc2VjdGlvbnMsIGFuZCBwb3NzaWJs
eSByZWdVcCBoYXMgYmVlbiBkZWxldGVkLgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnTG8g
PSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZFZGdlICplVXAgPSByZWdVcC0+ZVVwOwot
ICBHTFVoYWxmRWRnZSAqZUxvID0gcmVnTG8tPmVVcDsKLSAgR0xVdmVydGV4ICpvcmdVcCA9IGVV
cC0+T3JnOwotICBHTFV2ZXJ0ZXggKm9yZ0xvID0gZUxvLT5Pcmc7Ci0gIEdMVXZlcnRleCAqZHN0
VXAgPSBlVXAtPkRzdDsKLSAgR0xVdmVydGV4ICpkc3RMbyA9IGVMby0+RHN0OwotICBHTGRvdWJs
ZSB0TWluVXAsIHRNYXhMbzsKLSAgR0xVdmVydGV4IGlzZWN0LCAqb3JnTWluOwotICBHTFVoYWxm
RWRnZSAqZTsKLQotICBhc3NlcnQoICEgVmVydEVxKCBkc3RMbywgZHN0VXAgKSk7Ci0gIGFzc2Vy
dCggRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVudCwgb3JnVXAgKSA8PSAwICk7Ci0gIGFzc2Vy
dCggRWRnZVNpZ24oIGRzdExvLCB0ZXNzLT5ldmVudCwgb3JnTG8gKSA+PSAwICk7Ci0gIGFzc2Vy
dCggb3JnVXAgIT0gdGVzcy0+ZXZlbnQgJiYgb3JnTG8gIT0gdGVzcy0+ZXZlbnQgKTsKLSAgYXNz
ZXJ0KCAhIHJlZ1VwLT5maXhVcHBlckVkZ2UgJiYgISByZWdMby0+Zml4VXBwZXJFZGdlICk7Ci0K
LSAgaWYoIG9yZ1VwID09IG9yZ0xvICkgcmV0dXJuIEZBTFNFOwkvKiByaWdodCBlbmRwb2ludHMg
YXJlIHRoZSBzYW1lICovCi0KLSAgdE1pblVwID0gTUlOKCBvcmdVcC0+dCwgZHN0VXAtPnQgKTsK
LSAgdE1heExvID0gTUFYKCBvcmdMby0+dCwgZHN0TG8tPnQgKTsKLSAgaWYoIHRNaW5VcCA+IHRN
YXhMbyApIHJldHVybiBGQUxTRTsJLyogdCByYW5nZXMgZG8gbm90IG92ZXJsYXAgKi8KLQotICBp
ZiggVmVydExlcSggb3JnVXAsIG9yZ0xvICkpIHsKLSAgICBpZiggRWRnZVNpZ24oIGRzdExvLCBv
cmdVcCwgb3JnTG8gKSA+IDAgKSByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgaWYoIEVk
Z2VTaWduKCBkc3RVcCwgb3JnTG8sIG9yZ1VwICkgPCAwICkgcmV0dXJuIEZBTFNFOwotICB9Ci0K
LSAgLyogQXQgdGhpcyBwb2ludCB0aGUgZWRnZXMgaW50ZXJzZWN0LCBhdCBsZWFzdCBtYXJnaW5h
bGx5ICovCi0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLQotICBfX2dsX2VkZ2VJbnRlcnNlY3QoIGRz
dFVwLCBvcmdVcCwgZHN0TG8sIG9yZ0xvLCAmaXNlY3QgKTsKLSAgLyogVGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzIGFyZSBndWFyYW50ZWVkOiAqLwotICBhc3NlcnQoIE1JTiggb3JnVXAtPnQsIGRz
dFVwLT50ICkgPD0gaXNlY3QudCApOwotICBhc3NlcnQoIGlzZWN0LnQgPD0gTUFYKCBvcmdMby0+
dCwgZHN0TG8tPnQgKSk7Ci0gIGFzc2VydCggTUlOKCBkc3RMby0+cywgZHN0VXAtPnMgKSA8PSBp
c2VjdC5zICk7Ci0gIGFzc2VydCggaXNlY3QucyA8PSBNQVgoIG9yZ0xvLT5zLCBvcmdVcC0+cyAp
KTsKLQotICBpZiggVmVydExlcSggJmlzZWN0LCB0ZXNzLT5ldmVudCApKSB7Ci0gICAgLyogVGhl
IGludGVyc2VjdGlvbiBwb2ludCBsaWVzIHNsaWdodGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBzd2Vl
cCBsaW5lLAotICAgICAqIHNvIG1vdmUgaXQgdW50aWwgaXQnJ3Mgc2xpZ2h0bHkgdG8gdGhlIHJp
Z2h0IG9mIHRoZSBzd2VlcCBsaW5lLgotICAgICAqIChJZiB3ZSBoYWQgcGVyZmVjdCBudW1lcmlj
YWwgcHJlY2lzaW9uLCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbgotICAgICAqIGluIHRoZSBmaXJz
dCBwbGFjZSkuICBUaGUgZWFzaWVzdCBhbmQgc2FmZXN0IHRoaW5nIHRvIGRvIGlzCi0gICAgICog
cmVwbGFjZSB0aGUgaW50ZXJzZWN0aW9uIGJ5IHRlc3MtPmV2ZW50LgotICAgICAqLwotICAgIGlz
ZWN0LnMgPSB0ZXNzLT5ldmVudC0+czsKLSAgICBpc2VjdC50ID0gdGVzcy0+ZXZlbnQtPnQ7Ci0g
IH0KLSAgLyogU2ltaWxhcmx5LCBpZiB0aGUgY29tcHV0ZWQgaW50ZXJzZWN0aW9uIGxpZXMgdG8g
dGhlIHJpZ2h0IG9mIHRoZQotICAgKiByaWdodG1vc3Qgb3JpZ2luICh3aGljaCBzaG91bGQgcmFy
ZWx5IGhhcHBlbiksIGl0IGNhbiBjYXVzZQotICAgKiB1bmJlbGlldmFibGUgaW5lZmZpY2llbmN5
IG9uIHN1ZmZpY2llbnRseSBkZWdlbmVyYXRlIGlucHV0cy4KLSAgICogKElmIHlvdSBoYXZlIHRo
ZSB0ZXN0IHByb2dyYW0sIHRyeSBydW5uaW5nIHRlc3Q1NC5kIHdpdGggdGhlCi0gICAqICJYIHpv
b20iIG9wdGlvbiB0dXJuZWQgb24pLgotICAgKi8KLSAgb3JnTWluID0gVmVydExlcSggb3JnVXAs
IG9yZ0xvICkgPyBvcmdVcCA6IG9yZ0xvOwotICBpZiggVmVydExlcSggb3JnTWluLCAmaXNlY3Qg
KSkgewotICAgIGlzZWN0LnMgPSBvcmdNaW4tPnM7Ci0gICAgaXNlY3QudCA9IG9yZ01pbi0+dDsK
LSAgfQotCi0gIGlmKCBWZXJ0RXEoICZpc2VjdCwgb3JnVXAgKSB8fCBWZXJ0RXEoICZpc2VjdCwg
b3JnTG8gKSkgewotICAgIC8qIEVhc3kgY2FzZSAtLSBpbnRlcnNlY3Rpb24gYXQgb25lIG9mIHRo
ZSByaWdodCBlbmRwb2ludHMgKi8KLSAgICAodm9pZCkgQ2hlY2tGb3JSaWdodFNwbGljZSggdGVz
cywgcmVnVXAgKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiggICAgKCEgVmVydEVx
KCBkc3RVcCwgdGVzcy0+ZXZlbnQgKQotCSAgJiYgRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVu
dCwgJmlzZWN0ICkgPj0gMCkKLSAgICAgIHx8ICghIFZlcnRFcSggZHN0TG8sIHRlc3MtPmV2ZW50
ICkKLQkgICYmIEVkZ2VTaWduKCBkc3RMbywgdGVzcy0+ZXZlbnQsICZpc2VjdCApIDw9IDAgKSkK
LSAgewotICAgIC8qIFZlcnkgdW51c3VhbCAtLSB0aGUgbmV3IHVwcGVyIG9yIGxvd2VyIGVkZ2Ug
d291bGQgcGFzcyBvbiB0aGUKLSAgICAgKiB3cm9uZyBzaWRlIG9mIHRoZSBzd2VlcCBldmVudCwg
b3IgdGhyb3VnaCBpdC4gIFRoaXMgY2FuIGhhcHBlbgotICAgICAqIGR1ZSB0byB2ZXJ5IHNtYWxs
IG51bWVyaWNhbCBlcnJvcnMgaW4gdGhlIGludGVyc2VjdGlvbiBjYWxjdWxhdGlvbi4KLSAgICAg
Ki8KLSAgICBpZiggZHN0TG8gPT0gdGVzcy0+ZXZlbnQgKSB7Ci0gICAgICAvKiBTcGxpY2UgZHN0
TG8gaW50byBlVXAsIGFuZCBwcm9jZXNzIHRoZSBuZXcgcmVnaW9uKHMpICovCi0gICAgICBpZiAo
X19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52
LDEpOwotICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlTG8tPlN5bSwgZVVwICkgKSBsb25n
am1wKHRlc3MtPmVudiwxKTsKLSAgICAgIHJlZ1VwID0gVG9wTGVmdFJlZ2lvbiggcmVnVXAgKTsK
LSAgICAgIGlmIChyZWdVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIGVV
cCA9IFJlZ2lvbkJlbG93KHJlZ1VwKS0+ZVVwOwotICAgICAgRmluaXNoTGVmdFJlZ2lvbnMoIHRl
c3MsIFJlZ2lvbkJlbG93KHJlZ1VwKSwgcmVnTG8gKTsKLSAgICAgIEFkZFJpZ2h0RWRnZXMoIHRl
c3MsIHJlZ1VwLCBlVXAtPk9wcmV2LCBlVXAsIGVVcCwgVFJVRSApOwotICAgICAgcmV0dXJuIFRS
VUU7Ci0gICAgfQotICAgIGlmKCBkc3RVcCA9PSB0ZXNzLT5ldmVudCApIHsKLSAgICAgIC8qIFNw
bGljZSBkc3RVcCBpbnRvIGVMbywgYW5kIHByb2Nlc3MgdGhlIG5ldyByZWdpb24ocykgKi8KLSAg
ICAgIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7Ci0gICAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVVcC0+TG5leHQsIGVM
by0+T3ByZXYgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAKLSAgICAgIHJlZ0xvID0gcmVnVXA7
Ci0gICAgICByZWdVcCA9IFRvcFJpZ2h0UmVnaW9uKCByZWdVcCApOwotICAgICAgZSA9IFJlZ2lv
bkJlbG93KHJlZ1VwKS0+ZVVwLT5ScHJldjsKLSAgICAgIHJlZ0xvLT5lVXAgPSBlTG8tPk9wcmV2
OwotICAgICAgZUxvID0gRmluaXNoTGVmdFJlZ2lvbnMoIHRlc3MsIHJlZ0xvLCBOVUxMICk7Ci0g
ICAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZUxvLT5PbmV4dCwgZVVwLT5ScHJldiwg
ZSwgVFJVRSApOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIC8qIFNwZWNpYWwgY2Fz
ZTogY2FsbGVkIGZyb20gQ29ubmVjdFJpZ2h0VmVydGV4LiAgSWYgZWl0aGVyCi0gICAgICogZWRn
ZSBwYXNzZXMgb24gdGhlIHdyb25nIHNpZGUgb2YgdGVzcy0+ZXZlbnQsIHNwbGl0IGl0Ci0gICAg
ICogKGFuZCB3YWl0IGZvciBDb25uZWN0UmlnaHRWZXJ0ZXggdG8gc3BsaWNlIGl0IGFwcHJvcHJp
YXRlbHkpLgotICAgICAqLwotICAgIGlmKCBFZGdlU2lnbiggZHN0VXAsIHRlc3MtPmV2ZW50LCAm
aXNlY3QgKSA+PSAwICkgewotICAgICAgUmVnaW9uQWJvdmUocmVnVXApLT5kaXJ0eSA9IHJlZ1Vw
LT5kaXJ0eSA9IFRSVUU7Ci0gICAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSAp
ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgZVVwLT5PcmctPnMgPSB0ZXNz
LT5ldmVudC0+czsKLSAgICAgIGVVcC0+T3JnLT50ID0gdGVzcy0+ZXZlbnQtPnQ7Ci0gICAgfQot
ICAgIGlmKCBFZGdlU2lnbiggZHN0TG8sIHRlc3MtPmV2ZW50LCAmaXNlY3QgKSA8PSAwICkgewot
ICAgICAgcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKLSAgICAgIGlmIChfX2ds
X21lc2hTcGxpdEVkZ2UoIGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
Ci0gICAgICBlTG8tPk9yZy0+cyA9IHRlc3MtPmV2ZW50LT5zOwotICAgICAgZUxvLT5PcmctPnQg
PSB0ZXNzLT5ldmVudC0+dDsKLSAgICB9Ci0gICAgLyogbGVhdmUgdGhlIHJlc3QgZm9yIENvbm5l
Y3RSaWdodFZlcnRleCAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIEdlbmVyYWwg
Y2FzZSAtLSBzcGxpdCBib3RoIGVkZ2VzLCBzcGxpY2UgaW50byBuZXcgdmVydGV4LgotICAgKiBX
aGVuIHdlIGRvIHRoZSBzcGxpY2Ugb3BlcmF0aW9uLCB0aGUgb3JkZXIgb2YgdGhlIGFyZ3VtZW50
cyBpcwotICAgKiBhcmJpdHJhcnkgYXMgZmFyIGFzIGNvcnJlY3RuZXNzIGdvZXMuICBIb3dldmVy
LCB3aGVuIHRoZSBvcGVyYXRpb24KLSAgICogY3JlYXRlcyBhIG5ldyBmYWNlLCB0aGUgd29yayBk
b25lIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZgotICAgKiB0aGUgbmV3IGZhY2UuICBX
ZSBleHBlY3QgdGhlIGZhY2VzIGluIHRoZSBwcm9jZXNzZWQgcGFydCBvZgotICAgKiB0aGUgbWVz
aCAoaWUuIGVVcC0+TGZhY2UpIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgZmFjZXMgaW4gdGhlCi0g
ICAqIHVucHJvY2Vzc2VkIG9yaWdpbmFsIGNvbnRvdXJzICh3aGljaCB3aWxsIGJlIGVMby0+T3By
ZXYtPkxmYWNlKS4KLSAgICovCi0gIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGVVcC0+U3ltICkg
PT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGlmIChfX2dsX21lc2hTcGxpdEVkZ2Uo
IGVMby0+U3ltICkgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGlmICggIV9fZ2xf
bWVzaFNwbGljZSggZUxvLT5PcHJldiwgZVVwICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAg
ZVVwLT5PcmctPnMgPSBpc2VjdC5zOwotICBlVXAtPk9yZy0+dCA9IGlzZWN0LnQ7Ci0gIGVVcC0+
T3JnLT5wcUhhbmRsZSA9IHBxSW5zZXJ0KCB0ZXNzLT5wcSwgZVVwLT5PcmcgKTsgLyogX19nbF9w
cVNvcnRJbnNlcnQgKi8KLSAgaWYgKGVVcC0+T3JnLT5wcUhhbmRsZSA9PSBMT05HX01BWCkgewot
ICAgICBwcURlbGV0ZVByaW9yaXR5USh0ZXNzLT5wcSk7CS8qIF9fZ2xfcHFTb3J0RGVsZXRlUHJp
b3JpdHlRICovCi0gICAgIHRlc3MtPnBxID0gTlVMTDsKLSAgICAgbG9uZ2ptcCh0ZXNzLT5lbnYs
MSk7Ci0gIH0KLSAgR2V0SW50ZXJzZWN0RGF0YSggdGVzcywgZVVwLT5PcmcsIG9yZ1VwLCBkc3RV
cCwgb3JnTG8sIGRzdExvICk7Ci0gIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+
ZGlydHkgPSByZWdMby0+ZGlydHkgPSBUUlVFOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRp
YyB2b2lkIFdhbGtEaXJ0eVJlZ2lvbnMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lv
biAqcmVnVXAgKQotLyoKLSAqIFdoZW4gdGhlIHVwcGVyIG9yIGxvd2VyIGVkZ2Ugb2YgYW55IHJl
Z2lvbiBjaGFuZ2VzLCB0aGUgcmVnaW9uIGlzCi0gKiBtYXJrZWQgImRpcnR5Ii4gIFRoaXMgcm91
dGluZSB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgZGlydHkgcmVnaW9ucwotICogYW5kIG1ha2VzIHN1
cmUgdGhhdCB0aGUgZGljdGlvbmFyeSBpbnZhcmlhbnRzIGFyZSBzYXRpc2ZpZWQKLSAqIChzZWUg
dGhlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlKS4gIE9mIGNvdXJzZQot
ICogbmV3IGRpcnR5IHJlZ2lvbnMgY2FuIGJlIGNyZWF0ZWQgYXMgd2UgbWFrZSBjaGFuZ2VzIHRv
IHJlc3RvcmUKLSAqIHRoZSBpbnZhcmlhbnRzLgotICovCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVn
TG8gPSBSZWdpb25CZWxvdyhyZWdVcCk7Ci0gIEdMVWhhbGZFZGdlICplVXAsICplTG87Ci0KLSAg
Zm9yKCA7OyApIHsKLSAgICAvKiBGaW5kIHRoZSBsb3dlc3QgZGlydHkgcmVnaW9uICh3ZSB3YWxr
IGZyb20gdGhlIGJvdHRvbSB1cCkuICovCi0gICAgd2hpbGUoIHJlZ0xvLT5kaXJ0eSApIHsKLSAg
ICAgIHJlZ1VwID0gcmVnTG87Ci0gICAgICByZWdMbyA9IFJlZ2lvbkJlbG93KHJlZ0xvKTsKLSAg
ICB9Ci0gICAgaWYoICEgcmVnVXAtPmRpcnR5ICkgewotICAgICAgcmVnTG8gPSByZWdVcDsKLSAg
ICAgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ1VwICk7Ci0gICAgICBpZiggcmVnVXAgPT0gTlVM
TCB8fCAhIHJlZ1VwLT5kaXJ0eSApIHsKLQkvKiBXZSd2ZSB3YWxrZWQgYWxsIHRoZSBkaXJ0eSBy
ZWdpb25zICovCi0JcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICByZWdVcC0+ZGlydHkgPSBG
QUxTRTsKLSAgICBlVXAgPSByZWdVcC0+ZVVwOwotICAgIGVMbyA9IHJlZ0xvLT5lVXA7Ci0KLSAg
ICBpZiggZVVwLT5Ec3QgIT0gZUxvLT5Ec3QgKSB7Ci0gICAgICAvKiBDaGVjayB0aGF0IHRoZSBl
ZGdlIG9yZGVyaW5nIGlzIG9iZXllZCBhdCB0aGUgRHN0IHZlcnRpY2VzLiAqLwotICAgICAgaWYo
IENoZWNrRm9yTGVmdFNwbGljZSggdGVzcywgcmVnVXAgKSkgewotCi0JLyogSWYgdGhlIHVwcGVy
IG9yIGxvd2VyIGVkZ2Ugd2FzIG1hcmtlZCBmaXhVcHBlckVkZ2UsIHRoZW4KLQkgKiB3ZSBubyBs
b25nZXIgbmVlZCBpdCAoc2luY2UgdGhlc2UgZWRnZXMgYXJlIG5lZWRlZCBvbmx5IGZvcgotCSAq
IHZlcnRpY2VzIHdoaWNoIG90aGVyd2lzZSBoYXZlIG5vIHJpZ2h0LWdvaW5nIGVkZ2VzKS4KLQkg
Ki8KLQlpZiggcmVnTG8tPmZpeFVwcGVyRWRnZSApIHsKLQkgIERlbGV0ZVJlZ2lvbiggdGVzcywg
cmVnTG8gKTsKLQkgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZUxvICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKLQkgIHJlZ0xvID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7Ci0JICBlTG8gPSByZWdM
by0+ZVVwOwotCX0gZWxzZSBpZiggcmVnVXAtPmZpeFVwcGVyRWRnZSApIHsKLQkgIERlbGV0ZVJl
Z2lvbiggdGVzcywgcmVnVXAgKTsKLQkgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZVVwICkgKSBs
b25nam1wKHRlc3MtPmVudiwxKTsKLQkgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ0xvICk7Ci0J
ICBlVXAgPSByZWdVcC0+ZVVwOwotCX0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYoIGVVcC0+T3Jn
ICE9IGVMby0+T3JnICkgewotICAgICAgaWYoICAgIGVVcC0+RHN0ICE9IGVMby0+RHN0Ci0JICAm
JiAhIHJlZ1VwLT5maXhVcHBlckVkZ2UgJiYgISByZWdMby0+Zml4VXBwZXJFZGdlCi0gICAgICAg
ICAgJiYgKGVVcC0+RHN0ID09IHRlc3MtPmV2ZW50IHx8IGVMby0+RHN0ID09IHRlc3MtPmV2ZW50
KSApCi0gICAgICB7Ci0JLyogV2hlbiBhbGwgZWxzZSBmYWlscyBpbiBDaGVja0ZvckludGVyc2Vj
dCgpLCBpdCB1c2VzIHRlc3MtPmV2ZW50Ci0JICogYXMgdGhlIGludGVyc2VjdGlvbiBsb2NhdGlv
bi4gIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgaXQgcmVxdWlyZXMKLQkgKiB0aGF0IHRlc3MtPmV2
ZW50IGxpZSBiZXR3ZWVuIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRnZXMsIGFuZCBhbHNvCi0JICog
dGhhdCBuZWl0aGVyIG9mIHRoZXNlIGlzIG1hcmtlZCBmaXhVcHBlckVkZ2UgKHNpbmNlIGluIHRo
ZSB3b3JzdAotCSAqIGNhc2UgaXQgbWlnaHQgc3BsaWNlIG9uZSBvZiB0aGVzZSBlZGdlcyBpbnRv
IHRlc3MtPmV2ZW50LCBhbmQKLQkgKiB2aW9sYXRlIHRoZSBpbnZhcmlhbnQgdGhhdCBmaXhhYmxl
IGVkZ2VzIGFyZSB0aGUgb25seSByaWdodC1nb2luZwotCSAqIGVkZ2UgZnJvbSB0aGVpciBhc3Nv
Y2lhdGVkIHZlcnRleCkuCi0gICAgICAgICAqLwotCWlmKCBDaGVja0ZvckludGVyc2VjdCggdGVz
cywgcmVnVXAgKSkgewotCSAgLyogV2Fsa0RpcnR5UmVnaW9ucygpIHdhcyBjYWxsZWQgcmVjdXJz
aXZlbHk7IHdlJ3JlIGRvbmUgKi8KLQkgIHJldHVybjsKLQl9Ci0gICAgICB9IGVsc2UgewotCS8q
IEV2ZW4gdGhvdWdoIHdlIGNhbid0IHVzZSBDaGVja0ZvckludGVyc2VjdCgpLCB0aGUgT3JnIHZl
cnRpY2VzCi0JICogbWF5IHZpb2xhdGUgdGhlIGRpY3Rpb25hcnkgZWRnZSBvcmRlcmluZy4gIENo
ZWNrIGFuZCBjb3JyZWN0IHRoaXMuCi0JICovCi0JKHZvaWQpIENoZWNrRm9yUmlnaHRTcGxpY2Uo
IHRlc3MsIHJlZ1VwICk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmKCBlVXAtPk9yZyA9PSBlTG8t
Pk9yZyAmJiBlVXAtPkRzdCA9PSBlTG8tPkRzdCApIHsKLSAgICAgIC8qIEEgZGVnZW5lcmF0ZSBs
b29wIGNvbnNpc3Rpbmcgb2Ygb25seSB0d28gZWRnZXMgLS0gZGVsZXRlIGl0LiAqLwotICAgICAg
QWRkV2luZGluZyggZUxvLCBlVXAgKTsKLSAgICAgIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVnVXAg
KTsKLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZVVwICkgKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKLSAgICAgIHJlZ1VwID0gUmVnaW9uQWJvdmUoIHJlZ0xvICk7Ci0gICAgfQotICB9Ci19
Ci0KLQotc3RhdGljIHZvaWQgQ29ubmVjdFJpZ2h0VmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNz
LCBBY3RpdmVSZWdpb24gKnJlZ1VwLAotCQkJICAgICAgICBHTFVoYWxmRWRnZSAqZUJvdHRvbUxl
ZnQgKQotLyoKLSAqIFB1cnBvc2U6IGNvbm5lY3QgYSAicmlnaHQiIHZlcnRleCB2RXZlbnQgKG9u
ZSB3aGVyZSBhbGwgZWRnZXMgZ28gbGVmdCkKLSAqIHRvIHRoZSB1bnByb2Nlc3NlZCBwb3J0aW9u
IG9mIHRoZSBtZXNoLiAgU2luY2UgdGhlcmUgYXJlIG5vIHJpZ2h0LWdvaW5nCi0gKiBlZGdlcywg
dHdvIHJlZ2lvbnMgKG9uZSBhYm92ZSB2RXZlbnQgYW5kIG9uZSBiZWxvdykgYXJlIGJlaW5nIG1l
cmdlZAotICogaW50byBvbmUuICAicmVnVXAiIGlzIHRoZSB1cHBlciBvZiB0aGVzZSB0d28gcmVn
aW9ucy4KLSAqCi0gKiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMgKGFkZGlu
ZyBhIHJpZ2h0LWdvaW5nIGVkZ2UpOgotICogIC0gaWYgdGhlIHR3byByZWdpb25zIGJlaW5nIG1l
cmdlZCBhcmUgImluc2lkZSIsIHdlIG11c3QgYWRkIGFuIGVkZ2UKLSAqICAgIHRvIGtlZXAgdGhl
bSBzZXBhcmF0ZWQgKHRoZSBjb21iaW5lZCByZWdpb24gd291bGQgbm90IGJlIG1vbm90b25lKS4K
LSAqICAtIGluIGFueSBjYXNlLCB3ZSBtdXN0IGxlYXZlIHNvbWUgcmVjb3JkIG9mIHZFdmVudCBp
biB0aGUgZGljdGlvbmFyeSwKLSAqICAgIHNvIHRoYXQgd2UgY2FuIG1lcmdlIHZFdmVudCB3aXRo
IGZlYXR1cmVzIHRoYXQgd2UgaGF2ZSBub3Qgc2VlbiB5ZXQuCi0gKiAgICBGb3IgZXhhbXBsZSwg
bWF5YmUgdGhlcmUgaXMgYSB2ZXJ0aWNhbCBlZGdlIHdoaWNoIHBhc3NlcyBqdXN0IHRvCi0gKiAg
ICB0aGUgcmlnaHQgb2YgdkV2ZW50OyB3ZSB3b3VsZCBsaWtlIHRvIHNwbGljZSB2RXZlbnQgaW50
byB0aGlzIGVkZ2UuCi0gKgotICogSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBjb25uZWN0IHZF
dmVudCB0byBqdXN0IGFueSB2ZXJ0ZXguICBXZSBkb24nJ3QKLSAqIHdhbnQgdGhlIG5ldyBlZGdl
IHRvIGNyb3NzIGFueSBvdGhlciBlZGdlczsgb3RoZXJ3aXNlIHdlIHdpbGwgY3JlYXRlCi0gKiBp
bnRlcnNlY3Rpb24gdmVydGljZXMgZXZlbiB3aGVuIHRoZSBpbnB1dCBkYXRhIGhhZCBubyBzZWxm
LWludGVyc2VjdGlvbnMuCi0gKiAoVGhpcyBpcyBhIGJhZCB0aGluZzsgaWYgdGhlIHVzZXIncyBp
bnB1dCBkYXRhIGhhcyBubyBpbnRlcnNlY3Rpb25zLAotICogd2UgZG9uJ3Qgd2FudCB0byBnZW5l
cmF0ZSBhbnkgZmFsc2UgaW50ZXJzZWN0aW9ucyBvdXJzZWx2ZXMuKQotICoKLSAqIE91ciBldmVu
dHVhbCBnb2FsIGlzIHRvIGNvbm5lY3QgdkV2ZW50IHRvIHRoZSBsZWZ0bW9zdCB1bnByb2Nlc3Nl
ZAotICogdmVydGV4IG9mIHRoZSBjb21iaW5lZCByZWdpb24gKHRoZSB1bmlvbiBvZiByZWdVcCBh
bmQgcmVnTG8pLgotICogQnV0IGJlY2F1c2Ugb2YgdW5zZWVuIHZlcnRpY2VzIHdpdGggYWxsIHJp
Z2h0LWdvaW5nIGVkZ2VzLCBhbmQgYWxzbwotICogbmV3IHZlcnRpY2VzIHdoaWNoIG1heSBiZSBj
cmVhdGVkIGJ5IGVkZ2UgaW50ZXJzZWN0aW9ucywgd2UgZG9uJyd0Ci0gKiBrbm93IHdoZXJlIHRo
YXQgbGVmdG1vc3QgdW5wcm9jZXNzZWQgdmVydGV4IGlzLiAgSW4gdGhlIG1lYW50aW1lLCB3ZQot
ICogY29ubmVjdCB2RXZlbnQgdG8gdGhlIGNsb3Nlc3QgdmVydGV4IG9mIGVpdGhlciBjaGFpbiwg
YW5kIG1hcmsgdGhlIHJlZ2lvbgotICogYXMgImZpeFVwcGVyRWRnZSIuICBUaGlzIGZsYWcgc2F5
cyB0byBkZWxldGUgYW5kIHJlY29ubmVjdCB0aGlzIGVkZ2UKLSAqIHRvIHRoZSBuZXh0IHByb2Nl
c3NlZCB2ZXJ0ZXggb24gdGhlIGJvdW5kYXJ5IG9mIHRoZSBjb21iaW5lZCByZWdpb24uCi0gKiBR
dWl0ZSBwb3NzaWJseSB0aGUgdmVydGV4IHdlIGNvbm5lY3RlZCB0byB3aWxsIHR1cm4gb3V0IHRv
IGJlIHRoZQotICogY2xvc2VzdCBvbmUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJyd0IG5lZWQgdG8g
bWFrZSBhbnkgY2hhbmdlcy4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZU5ldzsKLSAgR0xVaGFs
ZkVkZ2UgKmVUb3BMZWZ0ID0gZUJvdHRvbUxlZnQtPk9uZXh0OwotICBBY3RpdmVSZWdpb24gKnJl
Z0xvID0gUmVnaW9uQmVsb3cocmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVV
cDsKLSAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7Ci0gIGludCBkZWdlbmVyYXRlID0g
RkFMU0U7Ci0KLSAgaWYoIGVVcC0+RHN0ICE9IGVMby0+RHN0ICkgewotICAgICh2b2lkKSBDaGVj
a0ZvckludGVyc2VjdCggdGVzcywgcmVnVXAgKTsKLSAgfQotCi0gIC8qIFBvc3NpYmxlIG5ldyBk
ZWdlbmVyYWNpZXM6IHVwcGVyIG9yIGxvd2VyIGVkZ2Ugb2YgcmVnVXAgbWF5IHBhc3MKLSAgICog
dGhyb3VnaCB2RXZlbnQsIG9yIG1heSBjb2luY2lkZSB3aXRoIG5ldyBpbnRlcnNlY3Rpb24gdmVy
dGV4Ci0gICAqLwotICBpZiggVmVydEVxKCBlVXAtPk9yZywgdGVzcy0+ZXZlbnQgKSkgewotICAg
IGlmICggIV9fZ2xfbWVzaFNwbGljZSggZVRvcExlZnQtPk9wcmV2LCBlVXAgKSApIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOwotICAgIHJlZ1VwID0gVG9wTGVmdFJlZ2lvbiggcmVnVXAgKTsKLSAgICBp
ZiAocmVnVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZVRvcExlZnQgPSBS
ZWdpb25CZWxvdyggcmVnVXAgKS0+ZVVwOwotICAgIEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCBS
ZWdpb25CZWxvdyhyZWdVcCksIHJlZ0xvICk7Ci0gICAgZGVnZW5lcmF0ZSA9IFRSVUU7Ci0gIH0K
LSAgaWYoIFZlcnRFcSggZUxvLT5PcmcsIHRlc3MtPmV2ZW50ICkpIHsKLSAgICBpZiAoICFfX2ds
X21lc2hTcGxpY2UoIGVCb3R0b21MZWZ0LCBlTG8tPk9wcmV2ICkgKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKLSAgICBlQm90dG9tTGVmdCA9IEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCByZWdMbywg
TlVMTCApOwotICAgIGRlZ2VuZXJhdGUgPSBUUlVFOwotICB9Ci0gIGlmKCBkZWdlbmVyYXRlICkg
ewotICAgIEFkZFJpZ2h0RWRnZXMoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdC0+T25leHQsIGVU
b3BMZWZ0LCBlVG9wTGVmdCwgVFJVRSApOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIE5vbi1k
ZWdlbmVyYXRlIHNpdHVhdGlvbiAtLSBuZWVkIHRvIGFkZCBhIHRlbXBvcmFyeSwgZml4YWJsZSBl
ZGdlLgotICAgKiBDb25uZWN0IHRvIHRoZSBjbG9zZXIgb2YgZUxvLT5PcmcsIGVVcC0+T3JnLgot
ICAgKi8KLSAgaWYoIFZlcnRMZXEoIGVMby0+T3JnLCBlVXAtPk9yZyApKSB7Ci0gICAgZU5ldyA9
IGVMby0+T3ByZXY7Ci0gIH0gZWxzZSB7Ci0gICAgZU5ldyA9IGVVcDsKLSAgfQotICBlTmV3ID0g
X19nbF9tZXNoQ29ubmVjdCggZUJvdHRvbUxlZnQtPkxwcmV2LCBlTmV3ICk7Ci0gIGlmIChlTmV3
ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotCi0gIC8qIFByZXZlbnQgY2xlYW51cCwg
b3RoZXJ3aXNlIGVOZXcgbWlnaHQgZGlzYXBwZWFyIGJlZm9yZSB3ZSd2ZSBldmVuCi0gICAqIGhh
ZCBhIGNoYW5jZSB0byBtYXJrIGl0IGFzIGEgdGVtcG9yYXJ5IGVkZ2UuCi0gICAqLwotICBBZGRS
aWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZU5ldywgZU5ldy0+T25leHQsIGVOZXctPk9uZXh0LCBG
QUxTRSApOwotICBlTmV3LT5TeW0tPmFjdGl2ZVJlZ2lvbi0+Zml4VXBwZXJFZGdlID0gVFJVRTsK
LSAgV2Fsa0RpcnR5UmVnaW9ucyggdGVzcywgcmVnVXAgKTsKLX0KLQotLyogQmVjYXVzZSB2ZXJ0
aWNlcyBhdCBleGFjdGx5IHRoZSBzYW1lIGxvY2F0aW9uIGFyZSBtZXJnZWQgdG9nZXRoZXIKLSAq
IGJlZm9yZSB3ZSBwcm9jZXNzIHRoZSBzd2VlcCBldmVudCwgc29tZSBkZWdlbmVyYXRlIGNhc2Vz
IGNhbid0IG9jY3VyLgotICogSG93ZXZlciBpZiBzb21lb25lIGV2ZW50dWFsbHkgbWFrZXMgdGhl
IG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQgdG8KLSAqIG1lcmdlIGZlYXR1cmVzIHdoaWNoIGFyZSBj
bG9zZSB0b2dldGhlciwgdGhlIGNhc2VzIGJlbG93IG1hcmtlZAotICogVE9MRVJBTkNFX05PTlpF
Uk8gd2lsbCBiZSB1c2VmdWwuICBUaGV5IHdlcmUgZGVidWdnZWQgYmVmb3JlIHRoZQotICogY29k
ZSB0byBtZXJnZSBpZGVudGljYWwgdmVydGljZXMgaW4gdGhlIG1haW4gbG9vcCB3YXMgYWRkZWQu
Ci0gKi8KLSNkZWZpbmUgVE9MRVJBTkNFX05PTlpFUk8JRkFMU0UKLQotc3RhdGljIHZvaWQgQ29u
bmVjdExlZnREZWdlbmVyYXRlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAotCQkJCSAgIEFjdGl2ZVJl
Z2lvbiAqcmVnVXAsIEdMVXZlcnRleCAqdkV2ZW50ICkKLS8qCi0gKiBUaGUgZXZlbnQgdmVydGV4
IGxpZXMgZXhhY3R5IG9uIGFuIGFscmVhZHktcHJvY2Vzc2VkIGVkZ2Ugb3IgdmVydGV4LgotICog
QWRkaW5nIHRoZSBuZXcgdmVydGV4IGludm9sdmVzIHNwbGljaW5nIGl0IGludG8gdGhlIGFscmVh
ZHktcHJvY2Vzc2VkCi0gKiBwYXJ0IG9mIHRoZSBtZXNoLgotICovCi17Ci0gIEdMVWhhbGZFZGdl
ICplLCAqZVRvcExlZnQsICplVG9wUmlnaHQsICplTGFzdDsKLSAgQWN0aXZlUmVnaW9uICpyZWc7
Ci0KLSAgZSA9IHJlZ1VwLT5lVXA7Ci0gIGlmKCBWZXJ0RXEoIGUtPk9yZywgdkV2ZW50ICkpIHsK
LSAgICAvKiBlLT5PcmcgaXMgYW4gdW5wcm9jZXNzZWQgdmVydGV4IC0ganVzdCBjb21iaW5lIHRo
ZW0sIGFuZCB3YWl0Ci0gICAgICogZm9yIGUtPk9yZyB0byBiZSBwdWxsZWQgZnJvbSB0aGUgcXVl
dWUKLSAgICAgKi8KLSAgICBhc3NlcnQoIFRPTEVSQU5DRV9OT05aRVJPICk7Ci0gICAgU3BsaWNl
TWVyZ2VWZXJ0aWNlcyggdGVzcywgZSwgdkV2ZW50LT5hbkVkZ2UgKTsKLSAgICByZXR1cm47Ci0g
IH0KLSAgCi0gIGlmKCAhIFZlcnRFcSggZS0+RHN0LCB2RXZlbnQgKSkgewotICAgIC8qIEdlbmVy
YWwgY2FzZSAtLSBzcGxpY2UgdkV2ZW50IGludG8gZWRnZSBlIHdoaWNoIHBhc3NlcyB0aHJvdWdo
IGl0ICovCi0gICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZS0+U3ltICkgPT0gTlVMTCkgbG9u
Z2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgaWYoIHJlZ1VwLT5maXhVcHBlckVkZ2UgKSB7Ci0gICAg
ICAvKiBUaGlzIGVkZ2Ugd2FzIGZpeGFibGUgLS0gZGVsZXRlIHVudXNlZCBwb3J0aW9uIG9mIG9y
aWdpbmFsIGVkZ2UgKi8KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZS0+T25leHQgKSAp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgcmVnVXAtPmZpeFVwcGVyRWRnZSA9IEZBTFNF
OwotICAgIH0KLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIHZFdmVudC0+YW5FZGdlLCBlICkg
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2RXZlbnQgKTsJ
LyogcmVjdXJzZSAqLwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIHZFdmVudCBjb2luY2lkZXMg
d2l0aCBlLT5Ec3QsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLgotICAgKiBTcGxp
Y2UgaW4gdGhlIGFkZGl0aW9uYWwgcmlnaHQtZ29pbmcgZWRnZXMuCi0gICAqLwotICBhc3NlcnQo
IFRPTEVSQU5DRV9OT05aRVJPICk7Ci0gIHJlZ1VwID0gVG9wUmlnaHRSZWdpb24oIHJlZ1VwICk7
Ci0gIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdVcCApOwotICBlVG9wUmlnaHQgPSByZWctPmVVcC0+
U3ltOwotICBlVG9wTGVmdCA9IGVMYXN0ID0gZVRvcFJpZ2h0LT5PbmV4dDsKLSAgaWYoIHJlZy0+
Zml4VXBwZXJFZGdlICkgewotICAgIC8qIEhlcmUgZS0+RHN0IGhhcyBvbmx5IGEgc2luZ2xlIGZp
eGFibGUgZWRnZSBnb2luZyByaWdodC4KLSAgICAgKiBXZSBjYW4gZGVsZXRlIGl0IHNpbmNlIG5v
dyB3ZSBoYXZlIHNvbWUgcmVhbCByaWdodC1nb2luZyBlZGdlcy4KLSAgICAgKi8KLSAgICBhc3Nl
cnQoIGVUb3BMZWZ0ICE9IGVUb3BSaWdodCApOyAgIC8qIHRoZXJlIGFyZSBzb21lIGxlZnQgZWRn
ZXMgdG9vICovCi0gICAgRGVsZXRlUmVnaW9uKCB0ZXNzLCByZWcgKTsKLSAgICBpZiAoICFfX2ds
X21lc2hEZWxldGUoIGVUb3BSaWdodCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZVRv
cFJpZ2h0ID0gZVRvcExlZnQtPk9wcmV2OwotICB9Ci0gIGlmICggIV9fZ2xfbWVzaFNwbGljZSgg
dkV2ZW50LT5hbkVkZ2UsIGVUb3BSaWdodCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGlm
KCAhIEVkZ2VHb2VzTGVmdCggZVRvcExlZnQgKSkgewotICAgIC8qIGUtPkRzdCBoYWQgbm8gbGVm
dC1nb2luZyBlZGdlcyAtLSBpbmRpY2F0ZSB0aGlzIHRvIEFkZFJpZ2h0RWRnZXMoKSAqLwotICAg
IGVUb3BMZWZ0ID0gTlVMTDsKLSAgfQotICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZVRv
cFJpZ2h0LT5PbmV4dCwgZUxhc3QsIGVUb3BMZWZ0LCBUUlVFICk7Ci19Ci0KLQotc3RhdGljIHZv
aWQgQ29ubmVjdExlZnRWZXJ0ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqdkV2
ZW50ICkKLS8qCi0gKiBQdXJwb3NlOiBjb25uZWN0IGEgImxlZnQiIHZlcnRleCAob25lIHdoZXJl
IGJvdGggZWRnZXMgZ28gcmlnaHQpCi0gKiB0byB0aGUgcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhl
IG1lc2guICBMZXQgUiBiZSB0aGUgYWN0aXZlIHJlZ2lvbgotICogY29udGFpbmluZyB2RXZlbnQs
IGFuZCBsZXQgVSBhbmQgTCBiZSB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2UKLSAqIGNoYWlucyBv
ZiBSLiAgVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgotICoKLSAqIC0gdGhlIG5vcm1hbCBj
YXNlOiBzcGxpdCBSIGludG8gdHdvIHJlZ2lvbnMsIGJ5IGNvbm5lY3RpbmcgdkV2ZW50IHRvCi0g
KiAgIHRoZSByaWdodG1vc3QgdmVydGV4IG9mIFUgb3IgTCBseWluZyB0byB0aGUgbGVmdCBvZiB0
aGUgc3dlZXAgbGluZQotICoKLSAqIC0gdGhlIGRlZ2VuZXJhdGUgY2FzZTogaWYgdkV2ZW50IGlz
IGNsb3NlIGVub3VnaCB0byBVIG9yIEwsIHdlCi0gKiAgIG1lcmdlIHZFdmVudCBpbnRvIHRoYXQg
ZWRnZSBjaGFpbi4gIFRoZSBzdWJjYXNlcyBhcmU6Ci0gKgktIG1lcmdpbmcgd2l0aCB0aGUgcmln
aHRtb3N0IHZlcnRleCBvZiBVIG9yIEwKLSAqCS0gbWVyZ2luZyB3aXRoIHRoZSBhY3RpdmUgZWRn
ZSBvZiBVIG9yIEwKLSAqCS0gbWVyZ2luZyB3aXRoIGFuIGFscmVhZHktcHJvY2Vzc2VkIHBvcnRp
b24gb2YgVSBvciBMCi0gKi8KLXsKLSAgQWN0aXZlUmVnaW9uICpyZWdVcCwgKnJlZ0xvLCAqcmVn
OwotICBHTFVoYWxmRWRnZSAqZVVwLCAqZUxvLCAqZU5ldzsKLSAgQWN0aXZlUmVnaW9uIHRtcDsK
LQotICAvKiBhc3NlcnQoIHZFdmVudC0+YW5FZGdlLT5PbmV4dC0+T25leHQgPT0gdkV2ZW50LT5h
bkVkZ2UgKTsgKi8KLQotICAvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgcmVnaW9uIGNv
bnRhaW5pbmcgdkV2ZW50ICovCi0gIHRtcC5lVXAgPSB2RXZlbnQtPmFuRWRnZS0+U3ltOwotICAv
KiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fZ2xfZGljdExpc3RTZWFyY2ggKi8KLSAgcmVnVXAg
PSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdFNlYXJjaCggdGVzcy0+ZGljdCwgJnRtcCAp
KTsKLSAgcmVnTG8gPSBSZWdpb25CZWxvdyggcmVnVXAgKTsKLSAgZVVwID0gcmVnVXAtPmVVcDsK
LSAgZUxvID0gcmVnTG8tPmVVcDsKLQotICAvKiBUcnkgbWVyZ2luZyB3aXRoIFUgb3IgTCBmaXJz
dCAqLwotICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0LCB2RXZlbnQsIGVVcC0+T3JnICkgPT0gMCAp
IHsKLSAgICBDb25uZWN0TGVmdERlZ2VuZXJhdGUoIHRlc3MsIHJlZ1VwLCB2RXZlbnQgKTsKLSAg
ICByZXR1cm47Ci0gIH0KLQotICAvKiBDb25uZWN0IHZFdmVudCB0byByaWdodG1vc3QgcHJvY2Vz
c2VkIHZlcnRleCBvZiBlaXRoZXIgY2hhaW4uCi0gICAqIGUtPkRzdCBpcyB0aGUgdmVydGV4IHRo
YXQgd2Ugd2lsbCBjb25uZWN0IHRvIHZFdmVudC4KLSAgICovCi0gIHJlZyA9IFZlcnRMZXEoIGVM
by0+RHN0LCBlVXAtPkRzdCApID8gcmVnVXAgOiByZWdMbzsKLQotICBpZiggcmVnVXAtPmluc2lk
ZSB8fCByZWctPmZpeFVwcGVyRWRnZSkgewotICAgIGlmKCByZWcgPT0gcmVnVXAgKSB7Ci0gICAg
ICBlTmV3ID0gX19nbF9tZXNoQ29ubmVjdCggdkV2ZW50LT5hbkVkZ2UtPlN5bSwgZVVwLT5MbmV4
dCApOwotICAgICAgaWYgKGVOZXcgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIEdMVWhhbGZFZGdlICp0ZW1wSGFsZkVkZ2U9IF9fZ2xfbWVzaENvbm5l
Y3QoIGVMby0+RG5leHQsIHZFdmVudC0+YW5FZGdlKTsKLSAgICAgIGlmICh0ZW1wSGFsZkVkZ2Ug
PT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0KLSAgICAgIGVOZXcgPSB0ZW1wSGFsZkVk
Z2UtPlN5bTsKLSAgICB9Ci0gICAgaWYoIHJlZy0+Zml4VXBwZXJFZGdlICkgewotICAgICAgaWYg
KCAhRml4VXBwZXJFZGdlKCByZWcsIGVOZXcgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBDb21wdXRlV2luZGluZyggdGVzcywgQWRkUmVnaW9uQmVsb3coIHRl
c3MsIHJlZ1VwLCBlTmV3ICkpOwotICAgIH0KLSAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2RXZlbnQg
KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBUaGUgbmV3IHZlcnRleCBpcyBpbiBhIHJlZ2lvbiB3aGlj
aCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHBvbHlnb24uCi0gICAgICogV2UgZG9uJyd0IG5lZWQg
dG8gY29ubmVjdCB0aGlzIHZlcnRleCB0byB0aGUgcmVzdCBvZiB0aGUgbWVzaC4KLSAgICAgKi8K
LSAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgdkV2ZW50LT5hbkVkZ2UsIHZFdmVudC0+
YW5FZGdlLCBOVUxMLCBUUlVFICk7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZCBTd2VlcEV2ZW50
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCApCi0vKgotICogRG9lcyBl
dmVyeXRoaW5nIG5lY2Vzc2FyeSB3aGVuIHRoZSBzd2VlcCBsaW5lIGNyb3NzZXMgYSB2ZXJ0ZXgu
Ci0gKiBVcGRhdGVzIHRoZSBtZXNoIGFuZCB0aGUgZWRnZSBkaWN0aW9uYXJ5LgotICovCi17Ci0g
IEFjdGl2ZVJlZ2lvbiAqcmVnVXAsICpyZWc7Ci0gIEdMVWhhbGZFZGdlICplLCAqZVRvcExlZnQs
ICplQm90dG9tTGVmdDsKLQotICB0ZXNzLT5ldmVudCA9IHZFdmVudDsJCS8qIGZvciBhY2Nlc3Mg
aW4gRWRnZUxlcSgpICovCi0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLSAgCi0gIC8qIENoZWNrIGlm
IHRoaXMgdmVydGV4IGlzIHRoZSByaWdodCBlbmRwb2ludCBvZiBhbiBlZGdlIHRoYXQgaXMKLSAg
ICogYWxyZWFkeSBpbiB0aGUgZGljdGlvbmFyeS4gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCBuZWVk
IHRvIHdhc3RlCi0gICAqIHRpbWUgc2VhcmNoaW5nIGZvciB0aGUgbG9jYXRpb24gdG8gaW5zZXJ0
IG5ldyBlZGdlcy4KLSAgICovCi0gIGUgPSB2RXZlbnQtPmFuRWRnZTsKLSAgd2hpbGUoIGUtPmFj
dGl2ZVJlZ2lvbiA9PSBOVUxMICkgewotICAgIGUgPSBlLT5PbmV4dDsKLSAgICBpZiggZSA9PSB2
RXZlbnQtPmFuRWRnZSApIHsKLSAgICAgIC8qIEFsbCBlZGdlcyBnbyByaWdodCAtLSBub3QgaW5j
aWRlbnQgdG8gYW55IHByb2Nlc3NlZCBlZGdlcyAqLwotICAgICAgQ29ubmVjdExlZnRWZXJ0ZXgo
IHRlc3MsIHZFdmVudCApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIC8qIFByb2Nl
c3NpbmcgY29uc2lzdHMgb2YgdHdvIHBoYXNlczogZmlyc3Qgd2UgImZpbmlzaCIgYWxsIHRoZQot
ICAgKiBhY3RpdmUgcmVnaW9ucyB3aGVyZSBib3RoIHRoZSB1cHBlciBhbmQgbG93ZXIgZWRnZXMg
dGVybWluYXRlCi0gICAqIGF0IHZFdmVudCAoaWUuIHZFdmVudCBpcyBjbG9zaW5nIG9mZiB0aGVz
ZSByZWdpb25zKS4KLSAgICogV2UgbWFyayB0aGVzZSBmYWNlcyAiaW5zaWRlIiBvciAib3V0c2lk
ZSIgdGhlIHBvbHlnb24gYWNjb3JkaW5nCi0gICAqIHRvIHRoZWlyIHdpbmRpbmcgbnVtYmVyLCBh
bmQgZGVsZXRlIHRoZSBlZGdlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LgotICAgKiBUaGlzIHRha2Vz
IGNhcmUgb2YgYWxsIHRoZSBsZWZ0LWdvaW5nIGVkZ2VzIGZyb20gdkV2ZW50LgotICAgKi8KLSAg
cmVnVXAgPSBUb3BMZWZ0UmVnaW9uKCBlLT5hY3RpdmVSZWdpb24gKTsKLSAgaWYgKHJlZ1VwID09
IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICByZWcgPSBSZWdpb25CZWxvdyggcmVnVXAg
KTsKLSAgZVRvcExlZnQgPSByZWctPmVVcDsKLSAgZUJvdHRvbUxlZnQgPSBGaW5pc2hMZWZ0UmVn
aW9ucyggdGVzcywgcmVnLCBOVUxMICk7Ci0KLSAgLyogTmV4dCB3ZSBwcm9jZXNzIGFsbCB0aGUg
cmlnaHQtZ29pbmcgZWRnZXMgZnJvbSB2RXZlbnQuICBUaGlzCi0gICAqIGludm9sdmVzIGFkZGlu
ZyB0aGUgZWRnZXMgdG8gdGhlIGRpY3Rpb25hcnksIGFuZCBjcmVhdGluZyB0aGUKLSAgICogYXNz
b2NpYXRlZCAiYWN0aXZlIHJlZ2lvbnMiIHdoaWNoIHJlY29yZCBpbmZvcm1hdGlvbiBhYm91dCB0
aGUKLSAgICogcmVnaW9ucyBiZXR3ZWVuIGFkamFjZW50IGRpY3Rpb25hcnkgZWRnZXMuCi0gICAq
LwotICBpZiggZUJvdHRvbUxlZnQtPk9uZXh0ID09IGVUb3BMZWZ0ICkgewotICAgIC8qIE5vIHJp
Z2h0LWdvaW5nIGVkZ2VzIC0tIGFkZCBhIHRlbXBvcmFyeSAiZml4YWJsZSIgZWRnZSAqLwotICAg
IENvbm5lY3RSaWdodFZlcnRleCggdGVzcywgcmVnVXAsIGVCb3R0b21MZWZ0ICk7Ci0gIH0gZWxz
ZSB7Ci0gICAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVCb3R0b21MZWZ0LT5PbmV4dCwg
ZVRvcExlZnQsIGVUb3BMZWZ0LCBUUlVFICk7Ci0gIH0KLX0KLQotCi0vKiBNYWtlIHRoZSBzZW50
aW5lbCBjb29yZGluYXRlcyBiaWcgZW5vdWdoIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlCi0gKiBt
ZXJnZWQgd2l0aCByZWFsIGlucHV0IGZlYXR1cmVzLiAgKEV2ZW4gd2l0aCB0aGUgbGFyZ2VzdCBw
b3NzaWJsZQotICogaW5wdXQgY29udG91ciBhbmQgdGhlIG1heGltdW0gdG9sZXJhbmNlIG9mIDEu
MCwgbm8gbWVyZ2luZyB3aWxsIGJlCi0gKiBkb25lIHdpdGggY29vcmRpbmF0ZXMgbGFyZ2VyIHRo
YW4gMyAqIEdMVV9URVNTX01BWF9DT09SRCkuCi0gKi8KLSNkZWZpbmUgU0VOVElORUxfQ09PUkQJ
KDQgKiBHTFVfVEVTU19NQVhfQ09PUkQpCi0KLXN0YXRpYyB2b2lkIEFkZFNlbnRpbmVsKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSB0ICkKLS8qCi0gKiBXZSBhZGQgdHdvIHNlbnRpbmVs
IGVkZ2VzIGFib3ZlIGFuZCBiZWxvdyBhbGwgb3RoZXIgZWRnZXMsCi0gKiB0byBhdm9pZCBzcGVj
aWFsIGNhc2VzIGF0IHRoZSB0b3AgYW5kIGJvdHRvbS4KLSAqLwotewotICBHTFVoYWxmRWRnZSAq
ZTsKLSAgQWN0aXZlUmVnaW9uICpyZWcgPSAoQWN0aXZlUmVnaW9uICopbWVtQWxsb2MoIHNpemVv
ZiggQWN0aXZlUmVnaW9uICkpOwotICBpZiAocmVnID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52
LDEpOwotCi0gIGUgPSBfX2dsX21lc2hNYWtlRWRnZSggdGVzcy0+bWVzaCApOwotICBpZiAoZSA9
PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLQotICBlLT5PcmctPnMgPSBTRU5USU5FTF9D
T09SRDsKLSAgZS0+T3JnLT50ID0gdDsKLSAgZS0+RHN0LT5zID0gLVNFTlRJTkVMX0NPT1JEOwot
ICBlLT5Ec3QtPnQgPSB0OwotICB0ZXNzLT5ldmVudCA9IGUtPkRzdDsJCS8qIGluaXRpYWxpemUg
aXQgKi8KLQotICByZWctPmVVcCA9IGU7Ci0gIHJlZy0+d2luZGluZ051bWJlciA9IDA7Ci0gIHJl
Zy0+aW5zaWRlID0gRkFMU0U7Ci0gIHJlZy0+Zml4VXBwZXJFZGdlID0gRkFMU0U7Ci0gIHJlZy0+
c2VudGluZWwgPSBUUlVFOwotICByZWctPmRpcnR5ID0gRkFMU0U7Ci0gIHJlZy0+bm9kZVVwID0g
ZGljdEluc2VydCggdGVzcy0+ZGljdCwgcmVnICk7IC8qIF9fZ2xfZGljdExpc3RJbnNlcnRCZWZv
cmUgKi8KLSAgaWYgKHJlZy0+bm9kZVVwID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwot
fQotCi0KLXN0YXRpYyB2b2lkIEluaXRFZGdlRGljdCggR0xVdGVzc2VsYXRvciAqdGVzcyApCi0v
KgotICogV2UgbWFpbnRhaW4gYW4gb3JkZXJpbmcgb2YgZWRnZSBpbnRlcnNlY3Rpb25zIHdpdGgg
dGhlIHN3ZWVwIGxpbmUuCi0gKiBUaGlzIG9yZGVyIGlzIG1haW50YWluZWQgaW4gYSBkeW5hbWlj
IGRpY3Rpb25hcnkuCi0gKi8KLXsKLSAgLyogX19nbF9kaWN0TGlzdE5ld0RpY3QgKi8KLSAgdGVz
cy0+ZGljdCA9IGRpY3ROZXdEaWN0KCB0ZXNzLCAoaW50ICgqKSh2b2lkICosIERpY3RLZXksIERp
Y3RLZXkpKSBFZGdlTGVxICk7Ci0gIGlmICh0ZXNzLT5kaWN0ID09IE5VTEwpIGxvbmdqbXAodGVz
cy0+ZW52LDEpOwotCi0gIEFkZFNlbnRpbmVsKCB0ZXNzLCAtU0VOVElORUxfQ09PUkQgKTsKLSAg
QWRkU2VudGluZWwoIHRlc3MsIFNFTlRJTkVMX0NPT1JEICk7Ci19Ci0KLQotc3RhdGljIHZvaWQg
RG9uZUVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgQWN0aXZlUmVnaW9uICpy
ZWc7Ci0jaWZuZGVmIE5ERUJVRwotICBpbnQgZml4ZWRFZGdlcyA9IDA7Ci0jZW5kaWYKLQotICAv
KiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8KLSAgd2hpbGUoIChy
ZWcgPSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSkgIT0g
TlVMTCApIHsKLSAgICAvKgotICAgICAqIEF0IHRoZSBlbmQgb2YgYWxsIHByb2Nlc3NpbmcsIHRo
ZSBkaWN0aW9uYXJ5IHNob3VsZCBjb250YWluCi0gICAgICogb25seSB0aGUgdHdvIHNlbnRpbmVs
IGVkZ2VzLCBwbHVzIGF0IG1vc3Qgb25lICJmaXhhYmxlIiBlZGdlCi0gICAgICogY3JlYXRlZCBi
eSBDb25uZWN0UmlnaHRWZXJ0ZXgoKS4KLSAgICAgKi8KLSAgICBpZiggISByZWctPnNlbnRpbmVs
ICkgewotICAgICAgYXNzZXJ0KCByZWctPmZpeFVwcGVyRWRnZSApOwotICAgICAgYXNzZXJ0KCAr
K2ZpeGVkRWRnZXMgPT0gMSApOwotICAgIH0KLSAgICBhc3NlcnQoIHJlZy0+d2luZGluZ051bWJl
ciA9PSAwICk7Ci0gICAgRGVsZXRlUmVnaW9uKCB0ZXNzLCByZWcgKTsKLS8qICAgIF9fZ2xfbWVz
aERlbGV0ZSggcmVnLT5lVXAgKTsqLwotICB9Ci0gIGRpY3REZWxldGVEaWN0KCB0ZXNzLT5kaWN0
ICk7CS8qIF9fZ2xfZGljdExpc3REZWxldGVEaWN0ICovCi19Ci0KLQotc3RhdGljIHZvaWQgUmVt
b3ZlRGVnZW5lcmF0ZUVkZ2VzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLS8qCi0gKiBSZW1vdmUg
emVyby1sZW5ndGggZWRnZXMsIGFuZCBjb250b3VycyB3aXRoIGZld2VyIHRoYW4gMyB2ZXJ0aWNl
cy4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0LCAqZUxuZXh0OwotICBHTFVoYWxm
RWRnZSAqZUhlYWQgPSAmdGVzcy0+bWVzaC0+ZUhlYWQ7Ci0KLSAgLypMSU5URUQqLwotICBmb3Io
IGUgPSBlSGVhZC0+bmV4dDsgZSAhPSBlSGVhZDsgZSA9IGVOZXh0ICkgewotICAgIGVOZXh0ID0g
ZS0+bmV4dDsKLSAgICBlTG5leHQgPSBlLT5MbmV4dDsKLSAgICAKLSAgICBpZiggVmVydEVxKCBl
LT5PcmcsIGUtPkRzdCApICYmIGUtPkxuZXh0LT5MbmV4dCAhPSBlICkgewotICAgICAgLyogWmVy
by1sZW5ndGggZWRnZSwgY29udG91ciBoYXMgYXQgbGVhc3QgMyBlZGdlcyAqLwotICAgICAgCi0g
ICAgICBTcGxpY2VNZXJnZVZlcnRpY2VzKCB0ZXNzLCBlTG5leHQsIGUgKTsJLyogZGVsZXRlcyBl
LT5PcmcgKi8KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgbG9uZ2ptcCh0ZXNz
LT5lbnYsMSk7IC8qIGUgaXMgYSBzZWxmLWxvb3AgKi8KLSAgICAgIGUgPSBlTG5leHQ7Ci0gICAg
ICBlTG5leHQgPSBlLT5MbmV4dDsKLSAgICB9Ci0gICAgaWYoIGVMbmV4dC0+TG5leHQgPT0gZSAp
IHsKLSAgICAgIC8qIERlZ2VuZXJhdGUgY29udG91ciAob25lIG9yIHR3byBlZGdlcykgKi8KLSAg
ICAgIAotICAgICAgaWYoIGVMbmV4dCAhPSBlICkgewotCWlmKCBlTG5leHQgPT0gZU5leHQgfHwg
ZUxuZXh0ID09IGVOZXh0LT5TeW0gKSB7IGVOZXh0ID0gZU5leHQtPm5leHQ7IH0KLQlpZiAoICFf
X2dsX21lc2hEZWxldGUoIGVMbmV4dCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgICB9
Ci0gICAgICBpZiggZSA9PSBlTmV4dCB8fCBlID09IGVOZXh0LT5TeW0gKSB7IGVOZXh0ID0gZU5l
eHQtPm5leHQ7IH0KLSAgICAgIGlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBpbnQgSW5pdFByaW9yaXR5USgg
R0xVdGVzc2VsYXRvciAqdGVzcyApCi0vKgotICogSW5zZXJ0IGFsbCB2ZXJ0aWNlcyBpbnRvIHRo
ZSBwcmlvcml0eSBxdWV1ZSB3aGljaCBkZXRlcm1pbmVzIHRoZQotICogb3JkZXIgaW4gd2hpY2gg
dmVydGljZXMgY3Jvc3MgdGhlIHN3ZWVwIGxpbmUuCi0gKi8KLXsKLSAgUHJpb3JpdHlRICpwcTsK
LSAgR0xVdmVydGV4ICp2LCAqdkhlYWQ7Ci0KLSAgLyogX19nbF9wcVNvcnROZXdQcmlvcml0eVEg
Ki8KLSAgcHEgPSB0ZXNzLT5wcSA9IHBxTmV3UHJpb3JpdHlRKCAoaW50ICgqKShQUWtleSwgUFFr
ZXkpKSBfX2dsX3ZlcnRMZXEgKTsKLSAgaWYgKHBxID09IE5VTEwpIHJldHVybiAwOwotCi0gIHZI
ZWFkID0gJnRlc3MtPm1lc2gtPnZIZWFkOwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2
SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgdi0+cHFIYW5kbGUgPSBwcUluc2VydCggcHEsIHYg
KTsgLyogX19nbF9wcVNvcnRJbnNlcnQgKi8KLSAgICBpZiAodi0+cHFIYW5kbGUgPT0gTE9OR19N
QVgpIGJyZWFrOwotICB9Ci0gIGlmICh2ICE9IHZIZWFkIHx8ICFwcUluaXQoIHBxICkgKSB7IC8q
IF9fZ2xfcHFTb3J0SW5pdCAqLwotICAgIHBxRGVsZXRlUHJpb3JpdHlRKHRlc3MtPnBxKTsJLyog
X19nbF9wcVNvcnREZWxldGVQcmlvcml0eVEgKi8KLSAgICB0ZXNzLT5wcSA9IE5VTEw7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLQotICByZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgdm9pZCBEb25lUHJp
b3JpdHlRKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgcHFEZWxldGVQcmlvcml0eVEoIHRl
c3MtPnBxICk7IC8qIF9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRICovCi19Ci0KLQotc3RhdGlj
IGludCBSZW1vdmVEZWdlbmVyYXRlRmFjZXMoIEdMVW1lc2ggKm1lc2ggKQotLyoKLSAqIERlbGV0
ZSBhbnkgZGVnZW5lcmF0ZSBmYWNlcyB3aXRoIG9ubHkgdHdvIGVkZ2VzLiAgV2Fsa0RpcnR5UmVn
aW9ucygpCi0gKiB3aWxsIGNhdGNoIGFsbW9zdCBhbGwgb2YgdGhlc2UsIGJ1dCBpdCB3b24ndCBj
YXRjaCBkZWdlbmVyYXRlIGZhY2VzCi0gKiBwcm9kdWNlZCBieSBzcGxpY2Ugb3BlcmF0aW9ucyBv
biBhbHJlYWR5LXByb2Nlc3NlZCBlZGdlcy4KLSAqIFRoZSB0d28gcGxhY2VzIHRoaXMgY2FuIGhh
cHBlbiBhcmUgaW4gRmluaXNoTGVmdFJlZ2lvbnMoKSwgd2hlbgotICogd2Ugc3BsaWNlIGluIGEg
InRlbXBvcmFyeSIgZWRnZSBwcm9kdWNlZCBieSBDb25uZWN0UmlnaHRWZXJ0ZXgoKSwKLSAqIGFu
ZCBpbiBDaGVja0ZvckxlZnRTcGxpY2UoKSwgd2hlcmUgd2Ugc3BsaWNlIGFscmVhZHktcHJvY2Vz
c2VkCi0gKiBlZGdlcyB0byBlbnN1cmUgdGhhdCBvdXIgZGljdGlvbmFyeSBpbnZhcmlhbnRzIGFy
ZSBub3QgdmlvbGF0ZWQKLSAqIGJ5IG51bWVyaWNhbCBlcnJvcnMuCi0gKgotICogSW4gYm90aCB0
aGVzZSBjYXNlcyBpdCBpcyAqdmVyeSogZGFuZ2Vyb3VzIHRvIGRlbGV0ZSB0aGUgb2ZmZW5kaW5n
Ci0gKiBlZGdlIGF0IHRoZSB0aW1lLCBzaW5jZSBvbmUgb2YgdGhlIHJvdXRpbmVzIGZ1cnRoZXIg
dXAgdGhlIHN0YWNrCi0gKiB3aWxsIHNvbWV0aW1lcyBiZSBrZWVwaW5nIGEgcG9pbnRlciB0byB0
aGF0IGVkZ2UuCi0gKi8KLXsKLSAgR0xVZmFjZSAqZiwgKmZOZXh0OwotICBHTFVoYWxmRWRnZSAq
ZTsKLQotICAvKkxJTlRFRCovCi0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1l
c2gtPmZIZWFkOyBmID0gZk5leHQgKSB7Ci0gICAgZk5leHQgPSBmLT5uZXh0OwotICAgIGUgPSBm
LT5hbkVkZ2U7Ci0gICAgYXNzZXJ0KCBlLT5MbmV4dCAhPSBlICk7Ci0KLSAgICBpZiggZS0+TG5l
eHQtPkxuZXh0ID09IGUgKSB7Ci0gICAgICAvKiBBIGZhY2Ugd2l0aCBvbmx5IHR3byBlZGdlcyAq
LwotICAgICAgQWRkV2luZGluZyggZS0+T25leHQsIGUgKTsKLSAgICAgIGlmICggIV9fZ2xfbWVz
aERlbGV0ZSggZSApICkgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQotCi1p
bnQgX19nbF9jb21wdXRlSW50ZXJpb3IoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotLyoKLSAqIF9f
Z2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdlbWVu
dCBzcGVjaWZpZWQKLSAqIGJ5IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1cnRoZXIgc3ViZGl2
aWRlcyB0aGlzIGFycmFuZ2VtZW50Ci0gKiBpbnRvIHJlZ2lvbnMuICBFYWNoIHJlZ2lvbiBpcyBt
YXJrZWQgImluc2lkZSIgaWYgaXQgYmVsb25ncwotICogdG8gdGhlIHBvbHlnb24sIGFjY29yZGlu
ZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAqIEVhY2ggaW50ZXJp
b3IgcmVnaW9uIGlzIGd1YXJhbnRlZWQgYmUgbW9ub3RvbmUuCi0gKi8KLXsKLSAgR0xVdmVydGV4
ICp2LCAqdk5leHQ7Ci0KLSAgdGVzcy0+ZmF0YWxFcnJvciA9IEZBTFNFOwotCi0gIC8qIEVhY2gg
dmVydGV4IGRlZmluZXMgYW4gZXZlbnQgZm9yIG91ciBzd2VlcCBsaW5lLiAgU3RhcnQgYnkgaW5z
ZXJ0aW5nCi0gICAqIGFsbCB0aGUgdmVydGljZXMgaW4gYSBwcmlvcml0eSBxdWV1ZS4gIEV2ZW50
cyBhcmUgcHJvY2Vzc2VkIGluCi0gICAqIGxleGljb2dyYXBoaWMgb3JkZXIsIGllLgotICAgKgot
ICAgKgllMSA8IGUyICBpZmYgIGUxLnggPCBlMi54IHx8IChlMS54ID09IGUyLnggJiYgZTEueSA8
IGUyLnkpCi0gICAqLwotICBSZW1vdmVEZWdlbmVyYXRlRWRnZXMoIHRlc3MgKTsKLSAgaWYgKCAh
SW5pdFByaW9yaXR5USggdGVzcyApICkgcmV0dXJuIDA7IC8qIGlmIGVycm9yICovCi0gIEluaXRF
ZGdlRGljdCggdGVzcyApOwotCi0gIC8qIF9fZ2xfcHFTb3J0RXh0cmFjdE1pbiAqLwotICB3aGls
ZSggKHYgPSAoR0xVdmVydGV4ICopcHFFeHRyYWN0TWluKCB0ZXNzLT5wcSApKSAhPSBOVUxMICkg
ewotICAgIGZvciggOzsgKSB7Ci0gICAgICB2TmV4dCA9IChHTFV2ZXJ0ZXggKilwcU1pbmltdW0o
IHRlc3MtPnBxICk7IC8qIF9fZ2xfcHFTb3J0TWluaW11bSAqLwotICAgICAgaWYoIHZOZXh0ID09
IE5VTEwgfHwgISBWZXJ0RXEoIHZOZXh0LCB2ICkpIGJyZWFrOwotICAgICAgCi0gICAgICAvKiBN
ZXJnZSB0b2dldGhlciBhbGwgdmVydGljZXMgYXQgZXhhY3RseSB0aGUgc2FtZSBsb2NhdGlvbi4K
LSAgICAgICAqIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBwcm9jZXNzaW5nIHRoZW0gb25l
IGF0IGEgdGltZSwKLSAgICAgICAqIHNpbXBsaWZpZXMgdGhlIGNvZGUgKHNlZSBDb25uZWN0TGVm
dERlZ2VuZXJhdGUpLCBhbmQgaXMgYWxzbwotICAgICAgICogaW1wb3J0YW50IGZvciBjb3JyZWN0
IGhhbmRsaW5nIG9mIGNlcnRhaW4gZGVnZW5lcmF0ZSBjYXNlcy4KLSAgICAgICAqIEZvciBleGFt
cGxlLCBzdXBwb3NlIHRoZXJlIGFyZSB0d28gaWRlbnRpY2FsIGVkZ2VzIEEgYW5kIEIKLSAgICAg
ICAqIHRoYXQgYmVsb25nIHRvIGRpZmZlcmVudCBjb250b3VycyAoc28gd2l0aG91dCB0aGlzIGNv
ZGUgdGhleSB3b3VsZAotICAgICAgICogYmUgcHJvY2Vzc2VkIGJ5IHNlcGFyYXRlIHN3ZWVwIGV2
ZW50cykuICBTdXBwb3NlIGFub3RoZXIgZWRnZSBDCi0gICAgICAgKiBjcm9zc2VzIEEgYW5kIEIg
ZnJvbSBhYm92ZS4gIFdoZW4gQSBpcyBwcm9jZXNzZWQsIHdlIHNwbGl0IGl0Ci0gICAgICAgKiBh
dCBpdHMgaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggQy4gIEhvd2V2ZXIgdGhpcyBhbHNvIHNwbGl0
cyBDLAotICAgICAgICogc28gd2hlbiB3ZSBpbnNlcnQgQiB3ZSBtYXkgY29tcHV0ZSBhIHNsaWdo
dGx5IGRpZmZlcmVudAotICAgICAgICogaW50ZXJzZWN0aW9uIHBvaW50LiAgVGhpcyBtaWdodCBs
ZWF2ZSB0d28gZWRnZXMgd2l0aCBhIHNtYWxsCi0gICAgICAgKiBnYXAgYmV0d2VlbiB0aGVtLiAg
VGhpcyBraW5kIG9mIGVycm9yIGlzIGVzcGVjaWFsbHkgb2J2aW91cwotICAgICAgICogd2hlbiB1
c2luZyBib3VuZGFyeSBleHRyYWN0aW9uIChHTFVfVEVTU19CT1VOREFSWV9PTkxZKS4KLSAgICAg
ICAqLwotICAgICAgdk5leHQgPSAoR0xVdmVydGV4ICopcHFFeHRyYWN0TWluKCB0ZXNzLT5wcSAp
OyAvKiBfX2dsX3BxU29ydEV4dHJhY3RNaW4qLwotICAgICAgU3BsaWNlTWVyZ2VWZXJ0aWNlcygg
dGVzcywgdi0+YW5FZGdlLCB2TmV4dC0+YW5FZGdlICk7Ci0gICAgfQotICAgIFN3ZWVwRXZlbnQo
IHRlc3MsIHYgKTsKLSAgfQotCi0gIC8qIFNldCB0ZXNzLT5ldmVudCBmb3IgZGVidWdnaW5nIHB1
cnBvc2VzICovCi0gIC8qIF9fR0xfRElDVExJU1RLRVkgKi8gLyogX19HTF9ESUNUTElTVE1JTiAq
LyAKLSAgdGVzcy0+ZXZlbnQgPSAoKEFjdGl2ZVJlZ2lvbiAqKSBkaWN0S2V5KCBkaWN0TWluKCB0
ZXNzLT5kaWN0ICkpKS0+ZVVwLT5Pcmc7Ci0gIERlYnVnRXZlbnQoIHRlc3MgKTsKLSAgRG9uZUVk
Z2VEaWN0KCB0ZXNzICk7Ci0gIERvbmVQcmlvcml0eVEoIHRlc3MgKTsKLQotICBpZiAoICFSZW1v
dmVEZWdlbmVyYXRlRmFjZXMoIHRlc3MtPm1lc2ggKSApIHJldHVybiAwOwotICBfX2dsX21lc2hD
aGVja01lc2goIHRlc3MtPm1lc2ggKTsKLQotICByZXR1cm4gMTsKLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgJKHJldmlzaW9uIDgyMTcz
KQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHku
IEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUg
c3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJ
IEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIp
LCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExl
Z2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmll
dywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9q
ZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNl
LCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdp
dGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiog
RElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdB
UlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNU
T1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5P
Ti1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVs
ZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0q
KiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGlj
b24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBi
eSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczog
VGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5
IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9w
ZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSks
IHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3Rl
bSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQs
IDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3Rl
bShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3
YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2Ft
cGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVu
IGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBP
cGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0
aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoq
ICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3N3ZWVwLmgjNSAkCi0q
LwotCi0jaWZuZGVmIF9fc3dlZXBfaF8KLSNkZWZpbmUgX19zd2VlcF9oXwotCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0KLS8qIF9fZ2xfY29tcHV0ZUludGVyaW9y
KCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdlbWVudCBzcGVjaWZpZWQKLSAqIGJ5
IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1cnRoZXIgc3ViZGl2aWRlcyB0aGlzIGFycmFuZ2Vt
ZW50Ci0gKiBpbnRvIHJlZ2lvbnMuICBFYWNoIHJlZ2lvbiBpcyBtYXJrZWQgImluc2lkZSIgaWYg
aXQgYmVsb25ncwotICogdG8gdGhlIHBvbHlnb24sIGFjY29yZGluZyB0byB0aGUgcnVsZSBnaXZl
biBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAqIEVhY2ggaW50ZXJpb3IgcmVnaW9uIGlzIGd1YXJh
bnRlZWQgYmUgbW9ub3RvbmUuCi0gKi8KLWludCBfX2dsX2NvbXB1dGVJbnRlcmlvciggR0xVdGVz
c2VsYXRvciAqdGVzcyApOwotCi0KLS8qIFRoZSBmb2xsb3dpbmcgaXMgaGVyZSAqb25seSogZm9y
IGFjY2VzcyBieSBkZWJ1Z2dpbmcgcm91dGluZXMgKi8KLQotI2luY2x1ZGUgImRpY3QuaCIKLQot
LyogRm9yIGVhY2ggcGFpciBvZiBhZGphY2VudCBlZGdlcyBjcm9zc2luZyB0aGUgc3dlZXAgbGlu
ZSwgdGhlcmUgaXMKLSAqIGFuIEFjdGl2ZVJlZ2lvbiB0byByZXByZXNlbnQgdGhlIHJlZ2lvbiBi
ZXR3ZWVuIHRoZW0uICBUaGUgYWN0aXZlCi0gKiByZWdpb25zIGFyZSBrZXB0IGluIHNvcnRlZCBv
cmRlciBpbiBhIGR5bmFtaWMgZGljdGlvbmFyeS4gIEFzIHRoZQotICogc3dlZXAgbGluZSBjcm9z
c2VzIGVhY2ggdmVydGV4LCB3ZSB1cGRhdGUgdGhlIGFmZmVjdGVkIHJlZ2lvbnMuCi0gKi8KLQot
c3RydWN0IEFjdGl2ZVJlZ2lvbiB7Ci0gIEdMVWhhbGZFZGdlCSplVXA7CQkvKiB1cHBlciBlZGdl
LCBkaXJlY3RlZCByaWdodCB0byBsZWZ0ICovCi0gIERpY3ROb2RlCSpub2RlVXA7CS8qIGRpY3Rp
b25hcnkgbm9kZSBjb3JyZXNwb25kaW5nIHRvIGVVcCAqLwotICBpbnQJCXdpbmRpbmdOdW1iZXI7
CS8qIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgYXJlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqIGluc2lkZSB0aGUgcG9seWdvbiAqLwotICBHTGJvb2xlYW4JaW5z
aWRlOwkJLyogaXMgdGhpcyByZWdpb24gaW5zaWRlIHRoZSBwb2x5Z29uPyAqLwotICBHTGJvb2xl
YW4Jc2VudGluZWw7CS8qIG1hcmtzIGZha2UgZWRnZXMgYXQgdCA9ICsvLWluZmluaXR5ICovCi0g
IEdMYm9vbGVhbglkaXJ0eTsJCS8qIG1hcmtzIHJlZ2lvbnMgd2hlcmUgdGhlIHVwcGVyIG9yIGxv
d2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVkZ2UgaGFzIGNoYW5nZWQs
IGJ1dCB3ZSBoYXZlbid0IGNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogd2hldGhlciB0aGV5IGludGVyc2VjdCB5ZXQgKi8KLSAgR0xib29sZWFuCWZpeFVwcGVyRWRn
ZTsJLyogbWFya3MgdGVtcG9yYXJ5IGVkZ2VzIGludHJvZHVjZWQgd2hlbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiB3ZSBwcm9jZXNzIGEgInJpZ2h0IHZlcnRleCIgKG9uZSB3
aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFueSBlZGdlcyBsZWF2
aW5nIHRvIHRoZSByaWdodCkgKi8KLX07Ci0KLSNkZWZpbmUgUmVnaW9uQmVsb3cocikJKChBY3Rp
dmVSZWdpb24gKikgZGljdEtleShkaWN0UHJlZCgociktPm5vZGVVcCkpKQotI2RlZmluZSBSZWdp
b25BYm92ZShyKQkoKEFjdGl2ZVJlZ2lvbiAqKSBkaWN0S2V5KGRpY3RTdWNjKChyKS0+bm9kZVVw
KSkpCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy90ZXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzLmMJKHJldmlzaW9uIDgyMTczKQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy90ZXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNjM5ICswLDAgQEAKLS8q
Ci0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25z
IG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNl
bnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwg
VmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmls
ZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGlj
b24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRo
ZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAK
LSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQs
IGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQg
b24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FS
UkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VU
IExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9G
IE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoq
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdp
bmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0
aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxv
cGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENv
cHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdo
dCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRl
ZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRk
aXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGlu
dGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBP
cmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3Bl
Y2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBU
aGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoq
IDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mg
d2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBP
Y3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNo
ZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVp
bmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZp
Y2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0q
KgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGli
L2dsdS9saWJ0ZXNzL3Rlc3MuYyM3ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNs
dWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotI2luY2x1ZGUgInRoaXJkcGFy
dHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxv
Yy5oIgotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgotI2luY2x1ZGUg
InRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9yZW5kZXIuaCIKLSNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3
ZWVwLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCi0jaW5jbHVk
ZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oIgotCi0jZGVmaW5lIEdMVV9URVNT
X0RFRkFVTFRfVE9MRVJBTkNFIDAuMAotI2RlZmluZSBHTFVfVEVTU19NRVNICQkxMDAxMTIJLyog
dm9pZCAoKikoR0xVbWVzaCAqbWVzaCkJICAgICovCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5l
IEZBTFNFIDAKLQotLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9CZWdpbigg
R0xlbnVtIHR5cGUgKSB7fQotLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9F
ZGdlRmxhZyggR0xib29sZWFuIGJvdW5kYXJ5RWRnZSApIHt9Ci0vKkFSR1NVU0VEKi8gc3RhdGlj
IHZvaWQgR0xBUElFTlRSWSBub1ZlcnRleCggdm9pZCAqZGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8g
c3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0VuZCggdm9pZCApIHt9Ci0vKkFSR1NVU0VEKi8gc3Rh
dGljIHZvaWQgR0xBUElFTlRSWSBub0Vycm9yKCBHTGVudW0gZXJybnVtICkge30KLS8qQVJHU1VT
RUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZIG5vQ29tYmluZSggR0xkb3VibGUgY29vcmRzWzNd
LCB2b2lkICpkYXRhWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipkYXRhT3V0ICkge30KLS8qQVJHU1VTRUQqLyBzdGF0aWMg
dm9pZCBHTEFQSUVOVFJZIG5vTWVzaCggR0xVbWVzaCAqbWVzaCApIHt9Ci0KLQotLypBUkdTVVNF
RCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vQmVnaW5EYXRhKCBHTGVudW0gdHlwZSwKLQkJCQkJ
ICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZ
IF9fZ2xfbm9FZGdlRmxhZ0RhdGEoIEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UsIAotCQkJCSAgICAg
ICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9f
Z2xfbm9WZXJ0ZXhEYXRhKCB2b2lkICpkYXRhLAotCQkJCQkgICAgICB2b2lkICpwb2x5Z29uRGF0
YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FbmREYXRhKCB2b2lk
ICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9F
cnJvckRhdGEoIEdMZW51bSBlcnJudW0sCi0JCQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7
fQotLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vQ29tYmluZURhdGEoIEdMZG91
YmxlIGNvb3Jkc1szXSwKLQkJCQkJICAgICAgIHZvaWQgKmRhdGFbNF0sCi0JCQkJCSAgICAgICBH
TGZsb2F0IHdlaWdodFs0XSwKLQkJCQkJICAgICAgIHZvaWQgKipvdXREYXRhLAotCQkJCQkgICAg
ICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQotCi0vKiBIYWxmLWVkZ2VzIGFyZSBhbGxvY2F0ZWQg
aW4gcGFpcnMgKHNlZSBtZXNoLmMpICovCi10eXBlZGVmIHN0cnVjdCB7IEdMVWhhbGZFZGdlIGUs
IGVTeW07IH0gRWRnZVBhaXI7Ci0KLSNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6
IChiKSkKLSNkZWZpbmUgTUFYX0ZBU1RfQUxMT0MJKE1BWChzaXplb2YoRWRnZVBhaXIpLCBcCi0J
CQkgTUFYKHNpemVvZihHTFV2ZXJ0ZXgpLHNpemVvZihHTFVmYWNlKSkpKQotCi0KLUdMVXRlc3Nl
bGF0b3IgKiBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVOZXdUZXNzKCB2b2lkICkKLXsKLSAgR0xV
dGVzc2VsYXRvciAqdGVzczsKLQotICAvKiBPbmx5IGluaXRpYWxpemUgZmllbGRzIHdoaWNoIGNh
biBiZSBjaGFuZ2VkIGJ5IHRoZSBhcGkuICBPdGhlciBmaWVsZHMKLSAgICogYXJlIGluaXRpYWxp
emVkIHdoZXJlIHRoZXkgYXJlIHVzZWQuCi0gICAqLwotCi0gIGlmIChtZW1Jbml0KCBNQVhfRkFT
VF9BTExPQyApID09IDApIHsKLSAgICAgcmV0dXJuIDA7CQkJLyogb3V0IG9mIG1lbW9yeSAqLwot
ICB9Ci0gIHRlc3MgPSAoR0xVdGVzc2VsYXRvciAqKW1lbUFsbG9jKCBzaXplb2YoIEdMVXRlc3Nl
bGF0b3IgKSk7Ci0gIGlmICh0ZXNzID09IE5VTEwpIHsKLSAgICAgcmV0dXJuIDA7CQkJLyogb3V0
IG9mIG1lbW9yeSAqLwotICB9Ci0KLSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7Ci0KLSAgdGVz
cy0+bm9ybWFsWzBdID0gMDsKLSAgdGVzcy0+bm9ybWFsWzFdID0gMDsKLSAgdGVzcy0+bm9ybWFs
WzJdID0gMDsKLQotICB0ZXNzLT5yZWxUb2xlcmFuY2UgPSBHTFVfVEVTU19ERUZBVUxUX1RPTEVS
QU5DRTsKLSAgdGVzcy0+d2luZGluZ1J1bGUgPSBHTFVfVEVTU19XSU5ESU5HX09ERDsKLSAgdGVz
cy0+ZmxhZ0JvdW5kYXJ5ID0gRkFMU0U7Ci0gIHRlc3MtPmJvdW5kYXJ5T25seSA9IEZBTFNFOwot
Ci0gIHRlc3MtPmNhbGxCZWdpbiA9ICZub0JlZ2luOwotICB0ZXNzLT5jYWxsRWRnZUZsYWcgPSAm
bm9FZGdlRmxhZzsKLSAgdGVzcy0+Y2FsbFZlcnRleCA9ICZub1ZlcnRleDsKLSAgdGVzcy0+Y2Fs
bEVuZCA9ICZub0VuZDsKLQotICB0ZXNzLT5jYWxsRXJyb3IgPSAmbm9FcnJvcjsKLSAgdGVzcy0+
Y2FsbENvbWJpbmUgPSAmbm9Db21iaW5lOwotICB0ZXNzLT5jYWxsTWVzaCA9ICZub01lc2g7Ci0K
LSAgdGVzcy0+Y2FsbEJlZ2luRGF0YT0gJl9fZ2xfbm9CZWdpbkRhdGE7Ci0gIHRlc3MtPmNhbGxF
ZGdlRmxhZ0RhdGE9ICZfX2dsX25vRWRnZUZsYWdEYXRhOwotICB0ZXNzLT5jYWxsVmVydGV4RGF0
YT0gJl9fZ2xfbm9WZXJ0ZXhEYXRhOwotICB0ZXNzLT5jYWxsRW5kRGF0YT0gJl9fZ2xfbm9FbmRE
YXRhOwotICB0ZXNzLT5jYWxsRXJyb3JEYXRhPSAmX19nbF9ub0Vycm9yRGF0YTsKLSAgdGVzcy0+
Y2FsbENvbWJpbmVEYXRhPSAmX19nbF9ub0NvbWJpbmVEYXRhOwotCi0gIHRlc3MtPnBvbHlnb25E
YXRhPSBOVUxMOwotCi0gIHJldHVybiB0ZXNzOwotfQotCi1zdGF0aWMgdm9pZCBNYWtlRG9ybWFu
dCggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIC8qIFJldHVybiB0aGUgdGVzc2VsbGF0b3Ig
dG8gaXRzIG9yaWdpbmFsIGRvcm1hbnQgc3RhdGUuICovCi0KLSAgaWYoIHRlc3MtPm1lc2ggIT0g
TlVMTCApIHsKLSAgICBfX2dsX21lc2hEZWxldGVNZXNoKCB0ZXNzLT5tZXNoICk7Ci0gIH0KLSAg
dGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7Ci0gIHRlc3MtPmxhc3RFZGdlID0gTlVMTDsKLSAgdGVz
cy0+bWVzaCA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgUmVxdWlyZVN0YXRlKCB0ZXNzLCBzICkgICBp
ZiggdGVzcy0+c3RhdGUgIT0gcyApIEdvdG9TdGF0ZSh0ZXNzLHMpCi0KLXN0YXRpYyB2b2lkIEdv
dG9TdGF0ZSggR0xVdGVzc2VsYXRvciAqdGVzcywgZW51bSBUZXNzU3RhdGUgbmV3U3RhdGUgKQot
ewotICB3aGlsZSggdGVzcy0+c3RhdGUgIT0gbmV3U3RhdGUgKSB7Ci0gICAgLyogV2UgY2hhbmdl
IHRoZSBjdXJyZW50IHN0YXRlIG9uZSBsZXZlbCBhdCBhIHRpbWUsIHRvIGdldCB0bwotICAgICAq
IHRoZSBkZXNpcmVkIHN0YXRlLgotICAgICAqLwotICAgIGlmKCB0ZXNzLT5zdGF0ZSA8IG5ld1N0
YXRlICkgewotICAgICAgc3dpdGNoKCB0ZXNzLT5zdGF0ZSApIHsKLSAgICAgIGNhc2UgVF9ET1JN
QU5UOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9Q
T0xZR09OICk7Ci0JaW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbiggdGVzcywgTlVMTCApOwot
CWJyZWFrOwotICAgICAgY2FzZSBUX0lOX1BPTFlHT046Ci0JQ0FMTF9FUlJPUl9PUl9FUlJPUl9E
QVRBKCBHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIgKTsKLQlpbnRlcm5hbF9nbHVUZXNz
QmVnaW5Db250b3VyKCB0ZXNzICk7Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBh
c3NlcnQoMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBz
d2l0Y2goIHRlc3MtPnN0YXRlICkgewotICAgICAgY2FzZSBUX0lOX0NPTlRPVVI6Ci0JQ0FMTF9F
UlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSICk7Ci0JaW50
ZXJuYWxfZ2x1VGVzc0VuZENvbnRvdXIoIHRlc3MgKTsKLQlicmVhazsKLSAgICAgIGNhc2UgVF9J
Tl9QT0xZR09OOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19F
TkRfUE9MWUdPTiApOwotCS8qIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNzICkgaXMgdG9vIG11Y2gg
d29yayEgKi8KLQlNYWtlRG9ybWFudCggdGVzcyApOwotCWJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgYXNzZXJ0KDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LX0KLQotCi12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdURlbGV0ZVRlc3MoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MgKQotewotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfRE9STUFOVCApOwotICBt
ZW1GcmVlKCB0ZXNzICk7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVUZXNz
UHJvcGVydHkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGljaCwgR0xkb3VibGUgdmFs
dWUgKQotewotICBHTGVudW0gd2luZGluZ1J1bGU7Ci0KLSAgc3dpdGNoKCB3aGljaCApIHsKLSAg
Y2FzZSBHTFVfVEVTU19UT0xFUkFOQ0U6Ci0gICAgaWYoIHZhbHVlIDwgMC4wIHx8IHZhbHVlID4g
MS4wICkgYnJlYWs7Ci0gICAgdGVzcy0+cmVsVG9sZXJhbmNlID0gdmFsdWU7Ci0gICAgcmV0dXJu
OwotCi0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19SVUxFOgotICAgIHdpbmRpbmdSdWxlID0gKEdM
ZW51bSkgdmFsdWU7Ci0gICAgaWYoIHdpbmRpbmdSdWxlICE9IHZhbHVlICkgYnJlYWs7CS8qIG5v
dCBhbiBpbnRlZ2VyICovCi0KLSAgICBzd2l0Y2goIHdpbmRpbmdSdWxlICkgewotICAgIGNhc2Ug
R0xVX1RFU1NfV0lORElOR19PREQ6Ci0gICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86
Ci0gICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOgotICAgIGNhc2UgR0xVX1RFU1Nf
V0lORElOR19ORUdBVElWRToKLSAgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086
Ci0gICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9IHdpbmRpbmdSdWxlOwotICAgICAgcmV0dXJuOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgY2FzZSBHTFVfVEVTU19CT1VO
REFSWV9PTkxZOgotICAgIHRlc3MtPmJvdW5kYXJ5T25seSA9ICh2YWx1ZSAhPSAwKTsKLSAgICBy
ZXR1cm47Ci0KLSAgZGVmYXVsdDoKLSAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9J
TlZBTElEX0VOVU0gKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9E
QVRBKCBHTFVfSU5WQUxJRF9WQUxVRSApOwotfQotCi0vKiBSZXR1cm5zIHRlc3NlbGxhdG9yIHBy
b3BlcnR5ICovCi12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdUdldFRlc3NQcm9wZXJ0eSgg
R0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNoLCBHTGRvdWJsZSAqdmFsdWUgKQotewot
ICAgc3dpdGNoICh3aGljaCkgewotICAgY2FzZSBHTFVfVEVTU19UT0xFUkFOQ0U6Ci0gICAgICAv
KiB0b2xlcmFuY2Ugc2hvdWxkIGJlIGluIHJhbmdlIFswLi4xXSAqLwotICAgICAgYXNzZXJ0KDAu
MCA8PSB0ZXNzLT5yZWxUb2xlcmFuY2UgJiYgdGVzcy0+cmVsVG9sZXJhbmNlIDw9IDEuMCk7Ci0g
ICAgICAqdmFsdWU9IHRlc3MtPnJlbFRvbGVyYW5jZTsKLSAgICAgIGJyZWFrOyAgICAKLSAgIGNh
c2UgR0xVX1RFU1NfV0lORElOR19SVUxFOgotICAgICAgYXNzZXJ0KHRlc3MtPndpbmRpbmdSdWxl
ID09IEdMVV9URVNTX1dJTkRJTkdfT0REIHx8Ci0JICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9PSBH
TFVfVEVTU19XSU5ESU5HX05PTlpFUk8gfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09IEdM
VV9URVNTX1dJTkRJTkdfUE9TSVRJVkUgfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09IEdM
VV9URVNTX1dJTkRJTkdfTkVHQVRJVkUgfHwKLQkgICAgIHRlc3MtPndpbmRpbmdSdWxlID09IEdM
VV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV08pOwotICAgICAgKnZhbHVlPSB0ZXNzLT53aW5kaW5n
UnVsZTsKLSAgICAgIGJyZWFrOwotICAgY2FzZSBHTFVfVEVTU19CT1VOREFSWV9PTkxZOgotICAg
ICAgYXNzZXJ0KHRlc3MtPmJvdW5kYXJ5T25seSA9PSBUUlVFIHx8IHRlc3MtPmJvdW5kYXJ5T25s
eSA9PSBGQUxTRSk7Ci0gICAgICAqdmFsdWU9IHRlc3MtPmJvdW5kYXJ5T25seTsKLSAgICAgIGJy
ZWFrOwotICAgZGVmYXVsdDoKLSAgICAgICp2YWx1ZT0gMC4wOwotICAgICAgQ0FMTF9FUlJPUl9P
Ul9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7Ci0gICAgICBicmVhazsKLSAgIH0KLX0g
LyogZ2x1R2V0VGVzc1Byb3BlcnR5KCkgKi8KLQotdm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5hbF9n
bHVUZXNzTm9ybWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5
LCBHTGRvdWJsZSB6ICkKLXsKLSAgdGVzcy0+bm9ybWFsWzBdID0geDsKLSAgdGVzcy0+bm9ybWFs
WzFdID0geTsKLSAgdGVzcy0+bm9ybWFsWzJdID0gejsKLX0KLQotdm9pZCBHTEFQSUVOVFJZCi1p
bnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2soIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGlj
aCwgdm9pZCAoR0xBUElFTlRSWSAqZm4pKCkpCi17Ci0gIHN3aXRjaCggd2hpY2ggKSB7Ci0gIGNh
c2UgR0xVX1RFU1NfQkVHSU46Ci0gICAgdGVzcy0+Y2FsbEJlZ2luID0gKGZuID09IE5VTEwpID8g
Jm5vQmVnaW4gOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGVudW0pKSBmbjsKLSAgICByZXR1cm47
Ci0gIGNhc2UgR0xVX1RFU1NfQkVHSU5fREFUQToKLSAgICB0ZXNzLT5jYWxsQmVnaW5EYXRhID0g
KGZuID09IE5VTEwpID8KLQkmX19nbF9ub0JlZ2luRGF0YSA6ICh2b2lkIChHTEFQSUVOVFJZICop
KEdMZW51bSwgdm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX0VER0Vf
RkxBRzoKLSAgICB0ZXNzLT5jYWxsRWRnZUZsYWcgPSAoZm4gPT0gTlVMTCkgPyAmbm9FZGdlRmxh
ZyA6Ci0JCQkJCSh2b2lkIChHTEFQSUVOVFJZICopKEdMYm9vbGVhbikpIGZuOwotICAgIC8qIElm
IHRoZSBjbGllbnQgd2FudHMgYm91bmRhcnkgZWRnZXMgdG8gYmUgZmxhZ2dlZCwKLSAgICAgKiB3
ZSByZW5kZXIgZXZlcnl0aGluZyBhcyBzZXBhcmF0ZSB0cmlhbmdsZXMgKG5vIHN0cmlwcyBvciBm
YW5zKS4KLSAgICAgKi8KLSAgICB0ZXNzLT5mbGFnQm91bmRhcnkgPSAoZm4gIT0gTlVMTCk7Ci0g
ICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX0VER0VfRkxBR19EQVRBOgotICAgIHRlc3MtPmNh
bGxFZGdlRmxhZ0RhdGE9IChmbiA9PSBOVUxMKSA/Ci0JJl9fZ2xfbm9FZGdlRmxhZ0RhdGEgOiAo
dm9pZCAoR0xBUElFTlRSWSAqKShHTGJvb2xlYW4sIHZvaWQgKikpIGZuOyAKLSAgICAvKiBJZiB0
aGUgY2xpZW50IHdhbnRzIGJvdW5kYXJ5IGVkZ2VzIHRvIGJlIGZsYWdnZWQsCi0gICAgICogd2Ug
cmVuZGVyIGV2ZXJ5dGhpbmcgYXMgc2VwYXJhdGUgdHJpYW5nbGVzIChubyBzdHJpcHMgb3IgZmFu
cykuCi0gICAgICovCi0gICAgdGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gKGZuICE9IE5VTEwpOwotICAg
IHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19WRVJURVg6Ci0gICAgdGVzcy0+Y2FsbFZlcnRleCA9
IChmbiA9PSBOVUxMKSA/ICZub1ZlcnRleCA6Ci0JCQkJICAgICAgKHZvaWQgKEdMQVBJRU5UUlkg
Kikodm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX1ZFUlRFWF9EQVRB
OgotICAgIHRlc3MtPmNhbGxWZXJ0ZXhEYXRhID0gKGZuID09IE5VTEwpID8KLQkmX19nbF9ub1Zl
cnRleERhdGEgOiAodm9pZCAoR0xBUElFTlRSWSAqKSh2b2lkICosIHZvaWQgKikpIGZuOwotICAg
IHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FTkQ6Ci0gICAgdGVzcy0+Y2FsbEVuZCA9IChmbiA9
PSBOVUxMKSA/ICZub0VuZCA6ICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQpKSBmbjsKLSAgICBy
ZXR1cm47Ci0gIGNhc2UgR0xVX1RFU1NfRU5EX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbEVuZERhdGEg
PSAoZm4gPT0gTlVMTCkgPyAmX19nbF9ub0VuZERhdGEgOiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQgKikpIGZuOwotICAg
IHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUjoKLSAgICB0ZXNzLT5jYWxsRXJyb3IgPSAo
Zm4gPT0gTlVMTCkgPyAmbm9FcnJvciA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMZW51bSkpIGZu
OwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUl9EQVRBOgotICAgIHRlc3MtPmNh
bGxFcnJvckRhdGEgPSAoZm4gPT0gTlVMTCkgPwotCSZfX2dsX25vRXJyb3JEYXRhIDogKHZvaWQg
KEdMQVBJRU5UUlkgKikoR0xlbnVtLCB2b2lkICopKSBmbjsKLSAgICByZXR1cm47Ci0gIGNhc2Ug
R0xVX1RFU1NfQ09NQklORToKLSAgICB0ZXNzLT5jYWxsQ29tYmluZSA9IChmbiA9PSBOVUxMKSA/
ICZub0NvbWJpbmUgOgotCSh2b2lkIChHTEFQSUVOVFJZICopKEdMZG91YmxlIFszXSx2b2lkICpb
NF0sIEdMZmxvYXQgWzRdLCB2b2lkICoqICkpIGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVf
VEVTU19DT01CSU5FX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbENvbWJpbmVEYXRhID0gKGZuID09IE5V
TEwpID8gJl9fZ2xfbm9Db21iaW5lRGF0YSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xkb3VibGUgWzNdLAotCQkJCQkJ
ICAgICB2b2lkICpbNF0sIAotCQkJCQkJICAgICBHTGZsb2F0IFs0XSwgCi0JCQkJCQkgICAgIHZv
aWQgKiosCi0JCQkJCQkgICAgIHZvaWQgKikpIGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVf
VEVTU19NRVNIOgotICAgIHRlc3MtPmNhbGxNZXNoID0gKGZuID09IE5VTEwpID8gJm5vTWVzaCA6
ICh2b2lkIChHTEFQSUVOVFJZICopKEdMVW1lc2ggKikpIGZuOwotICAgIHJldHVybjsKLSAgZGVm
YXVsdDoKLSAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9JTlZBTElEX0VOVU0gKTsK
LSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGludCBBZGRWZXJ0ZXgoIEdMVXRlc3NlbGF0
b3IgKnRlc3MsIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIEdMVWhhbGZF
ZGdlICplOwotCi0gIGUgPSB0ZXNzLT5sYXN0RWRnZTsKLSAgaWYoIGUgPT0gTlVMTCApIHsKLSAg
ICAvKiBNYWtlIGEgc2VsZi1sb29wIChvbmUgdmVydGV4LCBvbmUgZWRnZSkuICovCi0KLSAgICBl
ID0gX19nbF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKLSAgICBpZiAoZSA9PSBOVUxMKSBy
ZXR1cm4gMDsKLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGUsIGUtPlN5bSApICkgcmV0dXJu
IDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQ3JlYXRlIGEgbmV3IHZlcnRleCBhbmQgZWRnZSB3aGlj
aCBpbW1lZGlhdGVseSBmb2xsb3cgZQotICAgICAqIGluIHRoZSBvcmRlcmluZyBhcm91bmQgdGhl
IGxlZnQgZmFjZS4KLSAgICAgKi8KLSAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlICkgPT0g
TlVMTCkgcmV0dXJuIDA7Ci0gICAgZSA9IGUtPkxuZXh0OwotICB9Ci0KLSAgLyogVGhlIG5ldyB2
ZXJ0ZXggaXMgbm93IGUtPk9yZy4gKi8KLSAgZS0+T3JnLT5kYXRhID0gZGF0YTsKLSAgZS0+T3Jn
LT5jb29yZHNbMF0gPSBjb29yZHNbMF07Ci0gIGUtPk9yZy0+Y29vcmRzWzFdID0gY29vcmRzWzFd
OwotICBlLT5PcmctPmNvb3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgCi0gIC8qIFRoZSB3aW5kaW5n
IG9mIGFuIGVkZ2Ugc2F5cyBob3cgdGhlIHdpbmRpbmcgbnVtYmVyIGNoYW5nZXMgYXMgd2UKLSAg
ICogY3Jvc3MgZnJvbSB0aGUgZWRnZScncyByaWdodCBmYWNlIHRvIGl0cyBsZWZ0IGZhY2UuICBX
ZSBhZGQgdGhlCi0gICAqIHZlcnRpY2VzIGluIHN1Y2ggYW4gb3JkZXIgdGhhdCBhIENDVyBjb250
b3VyIHdpbGwgYWRkICsxIHRvCi0gICAqIHRoZSB3aW5kaW5nIG51bWJlciBvZiB0aGUgcmVnaW9u
IGluc2lkZSB0aGUgY29udG91ci4KLSAgICovCi0gIGUtPndpbmRpbmcgPSAxOwotICBlLT5TeW0t
PndpbmRpbmcgPSAtMTsKLQotICB0ZXNzLT5sYXN0RWRnZSA9IGU7Ci0KLSAgcmV0dXJuIDE7Ci19
Ci0KLQotc3RhdGljIHZvaWQgQ2FjaGVWZXJ0ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZG91
YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIENhY2hlZFZlcnRleCAqdiA9ICZ0ZXNz
LT5jYWNoZVt0ZXNzLT5jYWNoZUNvdW50XTsKLQotICB2LT5kYXRhID0gZGF0YTsKLSAgdi0+Y29v
cmRzWzBdID0gY29vcmRzWzBdOwotICB2LT5jb29yZHNbMV0gPSBjb29yZHNbMV07Ci0gIHYtPmNv
b3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgKyt0ZXNzLT5jYWNoZUNvdW50OwotfQotCi0KLXN0YXRp
YyBpbnQgRW1wdHlDYWNoZSggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIENhY2hlZFZlcnRl
eCAqdiA9IHRlc3MtPmNhY2hlOwotICBDYWNoZWRWZXJ0ZXggKnZMYXN0OwotCi0gIHRlc3MtPm1l
c2ggPSBfX2dsX21lc2hOZXdNZXNoKCk7Ci0gIGlmICh0ZXNzLT5tZXNoID09IE5VTEwpIHJldHVy
biAwOwotCi0gIGZvciggdkxhc3QgPSB2ICsgdGVzcy0+Y2FjaGVDb3VudDsgdiA8IHZMYXN0OyAr
K3YgKSB7Ci0gICAgaWYgKCAhQWRkVmVydGV4KCB0ZXNzLCB2LT5jb29yZHMsIHYtPmRhdGEgKSAp
IHJldHVybiAwOwotICB9Ci0gIHRlc3MtPmNhY2hlQ291bnQgPSAwOwotICB0ZXNzLT5lbXB0eUNh
Y2hlID0gRkFMU0U7Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1pbnRl
cm5hbF9nbHVUZXNzVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29yZHNb
M10sIHZvaWQgKmRhdGEgKQotewotICBpbnQgaSwgdG9vTGFyZ2UgPSBGQUxTRTsKLSAgR0xkb3Vi
bGUgeCwgY2xhbXBlZFszXTsKLQotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfSU5fQ09OVE9VUiAp
OwotCi0gIGlmKCB0ZXNzLT5lbXB0eUNhY2hlICkgewotICAgIGlmICggIUVtcHR5Q2FjaGUoIHRl
c3MgKSApIHsKLSAgICAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9PVVRfT0ZfTUVN
T1JZICk7Ci0gICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0ZXNzLT5sYXN0RWRnZSA9IE5VTEw7
Ci0gIH0KLSAgZm9yKCBpID0gMDsgaSA8IDM7ICsraSApIHsKLSAgICB4ID0gY29vcmRzW2ldOwot
ICAgIGlmKCB4IDwgLSBHTFVfVEVTU19NQVhfQ09PUkQgKSB7Ci0gICAgICB4ID0gLSBHTFVfVEVT
U19NQVhfQ09PUkQ7Ci0gICAgICB0b29MYXJnZSA9IFRSVUU7Ci0gICAgfQotICAgIGlmKCB4ID4g
R0xVX1RFU1NfTUFYX0NPT1JEICkgewotICAgICAgeCA9IEdMVV9URVNTX01BWF9DT09SRDsKLSAg
ICAgIHRvb0xhcmdlID0gVFJVRTsKLSAgICB9Ci0gICAgY2xhbXBlZFtpXSA9IHg7Ci0gIH0KLSAg
aWYoIHRvb0xhcmdlICkgewotICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1Nf
Q09PUkRfVE9PX0xBUkdFICk7Ci0gIH0KLQotICBpZiggdGVzcy0+bWVzaCA9PSBOVUxMICkgewot
ICAgIGlmKCB0ZXNzLT5jYWNoZUNvdW50IDwgVEVTU19NQVhfQ0FDSEUgKSB7Ci0gICAgICBDYWNo
ZVZlcnRleCggdGVzcywgY2xhbXBlZCwgZGF0YSApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoICFFbXB0eUNhY2hlKCB0ZXNzICkgKSB7Ci0gICAgICAgQ0FMTF9FUlJPUl9PUl9FUlJP
Ul9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0K
LSAgaWYgKCAhQWRkVmVydGV4KCB0ZXNzLCBjbGFtcGVkLCBkYXRhICkgKSB7Ci0gICAgICAgQ0FM
TF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICB9Ci19Ci0KLQot
dm9pZCBHTEFQSUVOVFJZCi1pbnRlcm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzLCB2b2lkICpkYXRhICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0RPUk1B
TlQgKTsKLQotICB0ZXNzLT5zdGF0ZSA9IFRfSU5fUE9MWUdPTjsKLSAgdGVzcy0+Y2FjaGVDb3Vu
dCA9IDA7Ci0gIHRlc3MtPmVtcHR5Q2FjaGUgPSBGQUxTRTsKLSAgdGVzcy0+bWVzaCA9IE5VTEw7
Ci0KLSAgdGVzcy0+cG9seWdvbkRhdGE9IGRhdGE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1p
bnRlcm5hbF9nbHVUZXNzQmVnaW5Db250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAg
UmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lOX1BPTFlHT04gKTsKLQotICB0ZXNzLT5zdGF0ZSA9IFRf
SU5fQ09OVE9VUjsKLSAgdGVzcy0+bGFzdEVkZ2UgPSBOVUxMOwotICBpZiggdGVzcy0+Y2FjaGVD
b3VudCA+IDAgKSB7Ci0gICAgLyogSnVzdCBzZXQgYSBmbGFnIHNvIHdlIGRvbid0IGdldCBjb25m
dXNlZCBieSBlbXB0eSBjb250b3VycwotICAgICAqIC0tIHRoZXNlIGNhbiBiZSBnZW5lcmF0ZWQg
YWNjaWRlbnRhbGx5IHdpdGggdGhlIG9ic29sZXRlCi0gICAgICogTmV4dENvbnRvdXIoKSBpbnRl
cmZhY2UuCi0gICAgICovCi0gICAgdGVzcy0+ZW1wdHlDYWNoZSA9IFRSVUU7Ci0gIH0KLX0KLQot
Ci12b2lkIEdMQVBJRU5UUlkKLWludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lOX0NPTlRPVVIgKTsKLSAg
dGVzcy0+c3RhdGUgPSBUX0lOX1BPTFlHT047Ci19Ci0KLXZvaWQgR0xBUElFTlRSWQotaW50ZXJu
YWxfZ2x1VGVzc0VuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBHTFVtZXNo
ICptZXNoOwotCi0gIGlmIChzZXRqbXAodGVzcy0+ZW52KSAhPSAwKSB7CQotICAgICAvKiBjb21l
IGJhY2sgaGVyZSBpZiBvdXQgb2YgbWVtb3J5ICovCi0gICAgIENBTExfRVJST1JfT1JfRVJST1Jf
REFUQSggR0xVX09VVF9PRl9NRU1PUlkgKTsKLSAgICAgcmV0dXJuOwotICB9Ci0KLSAgUmVxdWly
ZVN0YXRlKCB0ZXNzLCBUX0lOX1BPTFlHT04gKTsKLSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7
Ci0KLSAgaWYoIHRlc3MtPm1lc2ggPT0gTlVMTCApIHsKLSAgICBpZiggISB0ZXNzLT5mbGFnQm91
bmRhcnkgJiYgdGVzcy0+Y2FsbE1lc2ggPT0gJm5vTWVzaCApIHsKLQotICAgICAgLyogVHJ5IHNv
bWUgc3BlY2lhbCBjb2RlIHRvIG1ha2UgdGhlIGVhc3kgY2FzZXMgZ28gcXVpY2tseQotICAgICAg
ICogKGVnLiBjb252ZXggcG9seWdvbnMpLiAgVGhpcyBjb2RlIGRvZXMgTk9UIGhhbmRsZSBtdWx0
aXBsZSBjb250b3VycywKLSAgICAgICAqIGludGVyc2VjdGlvbnMsIGVkZ2UgZmxhZ3MsIGFuZCBv
ZiBjb3Vyc2UgaXQgZG9lcyBub3QgZ2VuZXJhdGUKLSAgICAgICAqIGFuIGV4cGxpY2l0IG1lc2gg
ZWl0aGVyLgotICAgICAgICovCi0gICAgICBpZiggX19nbF9yZW5kZXJDYWNoZSggdGVzcyApKSB7
Ci0JdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7IAotCXJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKCAhRW1wdHlDYWNoZSggdGVzcyApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7IC8qIGNv
dWxkJ3ZlIHVzZWQgYSBsYWJlbCovCi0gIH0KLQotICAvKiBEZXRlcm1pbmUgdGhlIHBvbHlnb24g
bm9ybWFsIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhlIHBsYW5lCi0gICAqIG9mIHRoZSBw
b2x5Z29uLgotICAgKi8KLSAgX19nbF9wcm9qZWN0UG9seWdvbiggdGVzcyApOwotCi0gIC8qIF9f
Z2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBhcnJhbmdlbWVu
dCBzcGVjaWZpZWQKLSAgICogYnkgdGhlIGdpdmVuIGNvbnRvdXJzLCBhbmQgZnVydGhlciBzdWJk
aXZpZGVzIHRoaXMgYXJyYW5nZW1lbnQKLSAgICogaW50byByZWdpb25zLiAgRWFjaCByZWdpb24g
aXMgbWFya2VkICJpbnNpZGUiIGlmIGl0IGJlbG9uZ3MKLSAgICogdG8gdGhlIHBvbHlnb24sIGFj
Y29yZGluZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAgICogRWFj
aCBpbnRlcmlvciByZWdpb24gaXMgZ3VhcmFudGVlZCBiZSBtb25vdG9uZS4KLSAgICovCi0gIGlm
ICggIV9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgKSB7Ci0gICAgIGxvbmdqbXAodGVzcy0+
ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwgKi8KLSAgfQotCi0gIG1lc2ggPSB0ZXNz
LT5tZXNoOwotICBpZiggISB0ZXNzLT5mYXRhbEVycm9yICkgewotICAgIGludCByYyA9IDE7Ci0K
LSAgICAvKiBJZiB0aGUgdXNlciB3YW50cyBvbmx5IHRoZSBib3VuZGFyeSBjb250b3Vycywgd2Ug
dGhyb3cgYXdheSBhbGwgZWRnZXMKLSAgICAgKiBleGNlcHQgdGhvc2Ugd2hpY2ggc2VwYXJhdGUg
dGhlIGludGVyaW9yIGZyb20gdGhlIGV4dGVyaW9yLgotICAgICAqIE90aGVyd2lzZSB3ZSB0ZXNz
ZWxsYXRlIGFsbCB0aGUgcmVnaW9ucyBtYXJrZWQgImluc2lkZSIuCi0gICAgICovCi0gICAgaWYo
IHRlc3MtPmJvdW5kYXJ5T25seSApIHsKLSAgICAgIHJjID0gX19nbF9tZXNoU2V0V2luZGluZ051
bWJlciggbWVzaCwgMSwgVFJVRSApOwotICAgIH0gZWxzZSB7Ci0gICAgICByYyA9IF9fZ2xfbWVz
aFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApOyAKLSAgICB9Ci0gICAgaWYgKHJjID09IDApIGxv
bmdqbXAodGVzcy0+ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwgKi8KLQotICAgIF9f
Z2xfbWVzaENoZWNrTWVzaCggbWVzaCApOwotCi0gICAgaWYoIHRlc3MtPmNhbGxCZWdpbiAhPSAm
bm9CZWdpbiB8fCB0ZXNzLT5jYWxsRW5kICE9ICZub0VuZAotICAgICAgIHx8IHRlc3MtPmNhbGxW
ZXJ0ZXggIT0gJm5vVmVydGV4IHx8IHRlc3MtPmNhbGxFZGdlRmxhZyAhPSAmbm9FZGdlRmxhZyAK
LSAgICAgICB8fCB0ZXNzLT5jYWxsQmVnaW5EYXRhICE9ICZfX2dsX25vQmVnaW5EYXRhIAotICAg
ICAgIHx8IHRlc3MtPmNhbGxFbmREYXRhICE9ICZfX2dsX25vRW5kRGF0YQotICAgICAgIHx8IHRl
c3MtPmNhbGxWZXJ0ZXhEYXRhICE9ICZfX2dsX25vVmVydGV4RGF0YQotICAgICAgIHx8IHRlc3Mt
PmNhbGxFZGdlRmxhZ0RhdGEgIT0gJl9fZ2xfbm9FZGdlRmxhZ0RhdGEgKQotICAgIHsKLSAgICAg
IGlmKCB0ZXNzLT5ib3VuZGFyeU9ubHkgKSB7Ci0JX19nbF9yZW5kZXJCb3VuZGFyeSggdGVzcywg
bWVzaCApOyAgLyogb3V0cHV0IGJvdW5kYXJ5IGNvbnRvdXJzICovCi0gICAgICB9IGVsc2Ugewot
CV9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVzaCApOwkgICAvKiBvdXRwdXQgc3RyaXBzIGFuZCBm
YW5zICovCi0gICAgICB9Ci0gICAgfQotICAgIGlmKCB0ZXNzLT5jYWxsTWVzaCAhPSAmbm9NZXNo
ICkgewotCi0gICAgICAvKiBUaHJvdyBhd2F5IHRoZSBleHRlcmlvciBmYWNlcywgc28gdGhhdCBh
bGwgZmFjZXMgYXJlIGludGVyaW9yLgotICAgICAgICogVGhpcyB3YXkgdGhlIHVzZXIgZG9lc24n
dCBoYXZlIHRvIGNoZWNrIHRoZSAiaW5zaWRlIiBmbGFnLAotICAgICAgICogYW5kIHdlIGRvbid0
IG5lZWQgdG8gZXZlbiByZXZlYWwgaXRzIGV4aXN0ZW5jZS4gIEl0IGFsc28gbGVhdmVzCi0gICAg
ICAgKiB0aGUgZnJlZWRvbSBmb3IgYW4gaW1wbGVtZW50YXRpb24gdG8gbm90IGdlbmVyYXRlIHRo
ZSBleHRlcmlvcgotICAgICAgICogZmFjZXMgaW4gdGhlIGZpcnN0IHBsYWNlLgotICAgICAgICov
Ci0gICAgICBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2ggKTsKLSAgICAgICgqdGVzcy0+
Y2FsbE1lc2gpKCBtZXNoICk7CQkvKiB1c2VyIHdhbnRzIHRoZSBtZXNoIGl0c2VsZiAqLwotICAg
ICAgdGVzcy0+bWVzaCA9IE5VTEw7Ci0gICAgICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAgX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCApOwot
ICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsKLSAgdGVzcy0+bWVzaCA9IE5VTEw7Ci19Ci0KLQot
LypYWFhibHl0aGUgdW51c2VkIGZ1bmN0aW9uKi8KLSNpZiAwCi12b2lkIEdMQVBJRU5UUlkKLWds
dURlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQotewotICBfX2dsX21lc2hEZWxldGVNZXNoKCBt
ZXNoICk7Ci19Ci0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBPYnNvbGV0ZSBjYWxscyAtLSBmb3IgYmFj
a3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi0jaWYgMAotdm9pZCBHTEFQSUVOVFJZCi1nbHVCZWdp
blBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBnbHVUZXNzQmVnaW5Qb2x5Z29u
KCB0ZXNzLCBOVUxMICk7Ci0gIGdsdVRlc3NCZWdpbkNvbnRvdXIoIHRlc3MgKTsKLX0KLQotCi0v
KkFSR1NVU0VEKi8KLXZvaWQgR0xBUElFTlRSWQotZ2x1TmV4dENvbnRvdXIoIEdMVXRlc3NlbGF0
b3IgKnRlc3MsIEdMZW51bSB0eXBlICkKLXsKLSAgZ2x1VGVzc0VuZENvbnRvdXIoIHRlc3MgKTsK
LSAgZ2x1VGVzc0JlZ2luQ29udG91ciggdGVzcyApOwotfQotCi0KLXZvaWQgR0xBUElFTlRSWQot
Z2x1RW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIGdsdVRlc3NFbmRDb250
b3VyKCB0ZXNzICk7Ci0gIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNzICk7Ci19Ci0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCShyZXZp
c2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBs
aWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJl
Ci0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQg
aW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUg
IkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25s
eSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
LCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1v
dW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNn
aS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0
aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMi
IGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJ
VElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkg
SU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFks
IFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBP
U0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3Jp
Z2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24g
MS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdy
YXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEt
MjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBo
ZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFBy
b3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3Rh
Ymxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUg
VGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNp
b24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFw
aGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBO
b3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdp
bmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4g
VGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9u
IDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhh
cyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQg
d2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwot
LyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2
aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90ZXNz
LmgjNiAkCi0qLwotCi0jaWZuZGVmIF9fdGVzc19oXwotI2RlZmluZSBfX3Rlc3NfaF8KLQotI2lu
Y2x1ZGUgPHNldGptcC5oPgotCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1
LmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgiCi0jaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9wcmlvcml0eXEuaCIKLQotLyogVGhlIGJlZ2luL2VuZCBjYWxscyBtdXN0IGJlIHBy
b3Blcmx5IG5lc3RlZC4gIFdlIGtlZXAgdHJhY2sgb2YKLSAqIHRoZSBjdXJyZW50IHN0YXRlIHRv
IGVuZm9yY2UgdGhlIG9yZGVyaW5nLgotICovCi1lbnVtIFRlc3NTdGF0ZSB7IFRfRE9STUFOVCwg
VF9JTl9QT0xZR09OLCBUX0lOX0NPTlRPVVIgfTsKLQotLyogV2UgY2FjaGUgdmVydGV4IGRhdGEg
Zm9yIHNpbmdsZS1jb250b3VyIHBvbHlnb25zIHNvIHRoYXQgd2UgY2FuCi0gKiB0cnkgYSBxdWlj
ay1hbmQtZGlydHkgZGVjb21wb3NpdGlvbiBmaXJzdC4KLSAqLwotI2RlZmluZSBURVNTX01BWF9D
QUNIRQkxMDAKLQotdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkVmVydGV4IHsKLSAgR0xkb3VibGUJY29v
cmRzWzNdOwotICB2b2lkCQkqZGF0YTsKLX0gQ2FjaGVkVmVydGV4OwotCi1zdHJ1Y3QgR0xVdGVz
c2VsYXRvciB7Ci0KLSAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9yIGNvbGxlY3RpbmcgdGhlIGlucHV0
IGRhdGEgKioqLwotCi0gIGVudW0gVGVzc1N0YXRlIHN0YXRlOwkJLyogd2hhdCBiZWdpbi9lbmQg
Y2FsbHMgaGF2ZSB3ZSBzZWVuPyAqLwotCi0gIEdMVWhhbGZFZGdlCSpsYXN0RWRnZTsJLyogbGFz
dEVkZ2UtPk9yZyBpcyB0aGUgbW9zdCByZWNlbnQgdmVydGV4ICovCi0gIEdMVW1lc2gJKm1lc2g7
CQkvKiBzdG9yZXMgdGhlIGlucHV0IGNvbnRvdXJzLCBhbmQgZXZlbnR1YWxseQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVzc2VsbGF0aW9uIGl0c2VsZiAqLwotCi0g
IHZvaWQJCShHTEFQSUVOVFJZICpjYWxsRXJyb3IpKCBHTGVudW0gZXJybnVtICk7Ci0KLSAgLyoq
KiBzdGF0ZSBuZWVkZWQgZm9yIHByb2plY3Rpbmcgb250byB0aGUgc3dlZXAgcGxhbmUgKioqLwot
Ci0gIEdMZG91YmxlCW5vcm1hbFszXTsJLyogdXNlci1zcGVjaWZpZWQgbm9ybWFsIChpZiBwcm92
aWRlZCkgKi8KLSAgR0xkb3VibGUJc1VuaXRbM107CS8qIHVuaXQgdmVjdG9yIGluIHMtZGlyZWN0
aW9uIChkZWJ1Z2dpbmcpICovCi0gIEdMZG91YmxlCXRVbml0WzNdOwkvKiB1bml0IHZlY3RvciBp
biB0LWRpcmVjdGlvbiAoZGVidWdnaW5nKSAqLwotCi0gIC8qKiogc3RhdGUgbmVlZGVkIGZvciB0
aGUgbGluZSBzd2VlcCAqKiovCi0KLSAgR0xkb3VibGUJcmVsVG9sZXJhbmNlOwkvKiB0b2xlcmFu
Y2UgZm9yIG1lcmdpbmcgZmVhdHVyZXMgKi8KLSAgR0xlbnVtCXdpbmRpbmdSdWxlOwkvKiBydWxl
IGZvciBkZXRlcm1pbmluZyBwb2x5Z29uIGludGVyaW9yICovCi0gIEdMYm9vbGVhbglmYXRhbEVy
cm9yOwkvKiBmYXRhbCBlcnJvcjogbmVlZGVkIGNvbWJpbmUgY2FsbGJhY2sgKi8KLQotICBEaWN0
CQkqZGljdDsJCS8qIGVkZ2UgZGljdGlvbmFyeSBmb3Igc3dlZXAgbGluZSAqLwotICBQcmlvcml0
eVEJKnBxOwkJLyogcHJpb3JpdHkgcXVldWUgb2YgdmVydGV4IGV2ZW50cyAqLwotICBHTFV2ZXJ0
ZXgJKmV2ZW50OwkJLyogY3VycmVudCBzd2VlcCBldmVudCBiZWluZyBwcm9jZXNzZWQgKi8KLQot
ICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbENvbWJpbmUpKCBHTGRvdWJsZSBjb29yZHNbM10sIHZv
aWQgKmRhdGFbNF0sCi0JCQkgICAgICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0
YSApOwotCi0gIC8qKiogc3RhdGUgbmVlZGVkIGZvciByZW5kZXJpbmcgY2FsbGJhY2tzIChzZWUg
cmVuZGVyLmMpICoqKi8KLQotICBHTGJvb2xlYW4JZmxhZ0JvdW5kYXJ5OwkvKiBtYXJrIGJvdW5k
YXJ5IGVkZ2VzICh1c2UgRWRnZUZsYWcpICovCi0gIEdMYm9vbGVhbglib3VuZGFyeU9ubHk7CS8q
IEV4dHJhY3QgY29udG91cnMsIG5vdCB0cmlhbmdsZXMgKi8KLSAgR0xVZmFjZQkqbG9uZWx5VHJp
TGlzdDsKLSAgICAvKiBsaXN0IG9mIHRyaWFuZ2xlcyB3aGljaCBjb3VsZCBub3QgYmUgcmVuZGVy
ZWQgYXMgc3RyaXBzIG9yIGZhbnMgKi8KLQotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEJlZ2lu
KSggR0xlbnVtIHR5cGUgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFZGdlRmxhZykoIEdM
Ym9vbGVhbiBib3VuZGFyeUVkZ2UgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxWZXJ0ZXgp
KCB2b2lkICpkYXRhICk7Ci0gIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsRW5kKSggdm9pZCApOwot
ICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbE1lc2gpKCBHTFVtZXNoICptZXNoICk7Ci0KLQotICAv
KioqIHN0YXRlIG5lZWRlZCB0byBjYWNoZSBzaW5nbGUtY29udG91ciBwb2x5Z29ucyBmb3IgcmVu
ZGVyQ2FjaGUoKSAqLwotCi0gIEdMYm9vbGVhbgllbXB0eUNhY2hlOwkJLyogZW1wdHkgY2FjaGUg
b24gbmV4dCB2ZXJ0ZXgoKSBjYWxsICovCi0gIGludAkJY2FjaGVDb3VudDsJCS8qIG51bWJlciBv
ZiBjYWNoZWQgdmVydGljZXMgKi8KLSAgQ2FjaGVkVmVydGV4CWNhY2hlW1RFU1NfTUFYX0NBQ0hF
XTsJLyogdGhlIHZlcnRleCBkYXRhICovCi0KLSAgLyoqKiByZW5kZXJpbmcgY2FsbGJhY2tzIHRo
YXQgYWxzbyBwYXNzIHBvbHlnb24gZGF0YSAgKioqLyAKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNh
bGxCZWdpbkRhdGEpKCBHTGVudW0gdHlwZSwgdm9pZCAqcG9seWdvbkRhdGEgKTsKLSAgdm9pZAkJ
KEdMQVBJRU5UUlkgKmNhbGxFZGdlRmxhZ0RhdGEpKCBHTGJvb2xlYW4gYm91bmRhcnlFZGdlLCAK
LQkJCQkgICAgIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJCShHTEFQSUVOVFJZICpjYWxs
VmVydGV4RGF0YSkoIHZvaWQgKmRhdGEsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJCShH
TEFQSUVOVFJZICpjYWxsRW5kRGF0YSkoIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0gIHZvaWQJCShH
TEFQSUVOVFJZICpjYWxsRXJyb3JEYXRhKSggR0xlbnVtIGVycm51bSwgdm9pZCAqcG9seWdvbkRh
dGEgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxDb21iaW5lRGF0YSkoIEdMZG91YmxlIGNv
b3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKLQkJCQkgICAgR0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQg
KipvdXREYXRhLAotCQkJCSAgICB2b2lkICpwb2x5Z29uRGF0YSApOwotCi0gIGptcF9idWYgZW52
OwkJCS8qIHBsYWNlIHRvIGp1bXAgdG8gd2hlbiBtZW1BbGxvY3MgZmFpbCAqLwotCi0gIHZvaWQg
KnBvbHlnb25EYXRhOwkJLyogY2xpZW50IGRhdGEgZm9yIGN1cnJlbnQgcG9seWdvbiAqLwotfTsK
LQotdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9CZWdpbkRhdGEoIEdMZW51bSB0eXBlLCB2b2lkICpw
b2x5Z29uRGF0YSApOwotdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FZGdlRmxhZ0RhdGEoIEdMYm9v
bGVhbiBib3VuZGFyeUVkZ2UsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12b2lkIEdMQVBJRU5UUlkg
X19nbF9ub1ZlcnRleERhdGEoIHZvaWQgKmRhdGEsIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12b2lk
IEdMQVBJRU5UUlkgX19nbF9ub0VuZERhdGEoIHZvaWQgKnBvbHlnb25EYXRhICk7Ci12b2lkIEdM
QVBJRU5UUlkgX19nbF9ub0Vycm9yRGF0YSggR0xlbnVtIGVycm51bSwgdm9pZCAqcG9seWdvbkRh
dGEgKTsKLXZvaWQgR0xBUElFTlRSWSBfX2dsX25vQ29tYmluZURhdGEoIEdMZG91YmxlIGNvb3Jk
c1szXSwgdm9pZCAqZGF0YVs0XSwKLQkJCSBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAqKm91dERh
dGEsCi0JCQkgdm9pZCAqcG9seWdvbkRhdGEgKTsKLQotI2RlZmluZSBDQUxMX0JFR0lOX09SX0JF
R0lOX0RBVEEoYSkgXAotICAgaWYgKHRlc3MtPmNhbGxCZWdpbkRhdGEgIT0gJl9fZ2xfbm9CZWdp
bkRhdGEpIFwKLSAgICAgICgqdGVzcy0+Y2FsbEJlZ2luRGF0YSkoKGEpLHRlc3MtPnBvbHlnb25E
YXRhKTsgXAotICAgZWxzZSAoKnRlc3MtPmNhbGxCZWdpbikoKGEpKTsKLQotI2RlZmluZSBDQUxM
X1ZFUlRFWF9PUl9WRVJURVhfREFUQShhKSBcCi0gICBpZiAodGVzcy0+Y2FsbFZlcnRleERhdGEg
IT0gJl9fZ2xfbm9WZXJ0ZXhEYXRhKSBcCi0gICAgICAoKnRlc3MtPmNhbGxWZXJ0ZXhEYXRhKSgo
YSksdGVzcy0+cG9seWdvbkRhdGEpOyBcCi0gICBlbHNlICgqdGVzcy0+Y2FsbFZlcnRleCkoKGEp
KTsKLQotI2RlZmluZSBDQUxMX0VER0VfRkxBR19PUl9FREdFX0ZMQUdfREFUQShhKSBcCi0gICBp
ZiAodGVzcy0+Y2FsbEVkZ2VGbGFnRGF0YSAhPSAmX19nbF9ub0VkZ2VGbGFnRGF0YSkgXAotICAg
ICAgKCp0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhKSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBcCi0g
ICBlbHNlICgqdGVzcy0+Y2FsbEVkZ2VGbGFnKSgoYSkpOwotCi0jZGVmaW5lIENBTExfRU5EX09S
X0VORF9EQVRBKCkgXAotICAgaWYgKHRlc3MtPmNhbGxFbmREYXRhICE9ICZfX2dsX25vRW5kRGF0
YSkgXAotICAgICAgKCp0ZXNzLT5jYWxsRW5kRGF0YSkodGVzcy0+cG9seWdvbkRhdGEpOyBcCi0g
ICBlbHNlICgqdGVzcy0+Y2FsbEVuZCkoKTsKLQotI2RlZmluZSBDQUxMX0NPTUJJTkVfT1JfQ09N
QklORV9EQVRBKGEsYixjLGQpIFwKLSAgIGlmICh0ZXNzLT5jYWxsQ29tYmluZURhdGEgIT0gJl9f
Z2xfbm9Db21iaW5lRGF0YSkgXAotICAgICAgKCp0ZXNzLT5jYWxsQ29tYmluZURhdGEpKChhKSwo
YiksKGMpLChkKSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKLSAgIGVsc2UgKCp0ZXNzLT5jYWxsQ29t
YmluZSkoKGEpLChiKSwoYyksKGQpKTsKLQotI2RlZmluZSBDQUxMX0VSUk9SX09SX0VSUk9SX0RB
VEEoYSkgXAotICAgaWYgKHRlc3MtPmNhbGxFcnJvckRhdGEgIT0gJl9fZ2xfbm9FcnJvckRhdGEp
IFwKLSAgICAgICgqdGVzcy0+Y2FsbEVycm9yRGF0YSkoKGEpLHRlc3MtPnBvbHlnb25EYXRhKTsg
XAotICAgZWxzZSAoKnRlc3MtPmNhbGxFcnJvcikoKGEpKTsKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5jCShyZXZp
c2lvbiA4MjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVz
c21vbm8uYwkod29ya2luZyBjb3B5KQpAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2Ug
QXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxl
IGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0
dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0
IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQot
KiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywg
SW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5
LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQg
aW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFT
IElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBD
T05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQ
VVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhl
IE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJz
aW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNv
biBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAx
OTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hl
cmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGlj
ZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiog
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChW
ZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikg
R3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0q
KiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1
dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxp
YW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgot
Ki8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQg
JFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uYyM1ICQKLSovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLQotI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCi0jaW5jbHVkZSAidGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9tZXNoLmgiCi0jaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5o
IgotCi0jZGVmaW5lIEFkZFdpbmRpbmcoZURzdCxlU3JjKQkoZURzdC0+d2luZGluZyArPSBlU3Jj
LT53aW5kaW5nLCBcCi0JCQkJIGVEc3QtPlN5bS0+d2luZGluZyArPSBlU3JjLT5TeW0tPndpbmRp
bmcpCi0KLS8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVzc2VsbGF0
ZXMgYSBtb25vdG9uZSByZWdpb24KLSAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/PykgIFRoZSBy
ZWdpb24gbXVzdCBjb25zaXN0IG9mIGEgc2luZ2xlCi0gKiBsb29wIG9mIGhhbGYtZWRnZXMgKHNl
ZSBtZXNoLmgpIG9yaWVudGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcwotICogY2FzZSBtZWFu
cyB0aGF0IGFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9mIHRoZQot
ICogcmVnaW9uIGluIGEgc2luZ2xlIGludGVydmFsLiAgCi0gKgotICogVGVzc2VsbGF0aW9uIGNv
bnNpc3RzIG9mIGFkZGluZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YKLSAqIGhh
bGYtZWRnZXMpLCB0byBzcGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHRyaWFu
Z2xlcy4KLSAqCi0gKiBUaGUgYmFzaWMgaWRlYSBpcyBleHBsYWluZWQgaW4gUHJlcGFyYXRhIGFu
ZCBTaGFtb3MgKHdoaWNoIEkgZG9uJyd0Ci0gKiBoYXZlIGhhbmR5IHJpZ2h0IG5vdyksIGFsdGhv
dWdoIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIG1vcmUKLSAqIGNvbXBsaWNhdGVkIHRoYW4gdGhp
cyBvbmUuICBUaGUgYXJlIHR3byBlZGdlIGNoYWlucywgYW4gdXBwZXIgY2hhaW4KLSAqIGFuZCBh
IGxvd2VyIGNoYWluLiAgV2UgcHJvY2VzcyBhbGwgdmVydGljZXMgZnJvbSBib3RoIGNoYWlucyBp
biBvcmRlciwKLSAqIGZyb20gcmlnaHQgdG8gbGVmdC4KLSAqCi0gKiBUaGUgYWxnb3JpdGhtIGVu
c3VyZXMgdGhhdCB0aGUgZm9sbG93aW5nIGludmFyaWFudCBob2xkcyBhZnRlciBlYWNoCi0gKiB2
ZXJ0ZXggaXMgcHJvY2Vzc2VkOiB0aGUgdW50ZXNzZWxsYXRlZCByZWdpb24gY29uc2lzdHMgb2Yg
dHdvCi0gKiBjaGFpbnMsIHdoZXJlIG9uZSBjaGFpbiAoc2F5IHRoZSB1cHBlcikgaXMgYSBzaW5n
bGUgZWRnZSwgYW5kCi0gKiB0aGUgb3RoZXIgY2hhaW4gaXMgY29uY2F2ZS4gIFRoZSBsZWZ0IHZl
cnRleCBvZiB0aGUgc2luZ2xlIGVkZ2UKLSAqIGlzIGFsd2F5cyB0byB0aGUgbGVmdCBvZiBhbGwg
dmVydGljZXMgaW4gdGhlIGNvbmNhdmUgY2hhaW4uCi0gKgotICogRWFjaCBzdGVwIGNvbnNpc3Rz
IG9mIGFkZGluZyB0aGUgcmlnaHRtb3N0IHVucHJvY2Vzc2VkIHZlcnRleCB0byBvbmUKLSAqIG9m
IHRoZSB0d28gY2hhaW5zLCBhbmQgZm9ybWluZyBhIGZhbiBvZiB0cmlhbmdsZXMgZnJvbSB0aGUg
cmlnaHRtb3N0Ci0gKiBvZiB0d28gY2hhaW4gZW5kcG9pbnRzLiAgRGV0ZXJtaW5pbmcgd2hldGhl
ciB3ZSBjYW4gYWRkIGVhY2ggdHJpYW5nbGUKLSAqIHRvIHRoZSBmYW4gaXMgYSBzaW1wbGUgb3Jp
ZW50YXRpb24gdGVzdC4gIEJ5IG1ha2luZyB0aGUgZmFuIGFzIGxhcmdlCi0gKiBhcyBwb3NzaWJs
ZSwgd2UgcmVzdG9yZSB0aGUgaW52YXJpYW50IChjaGVjayBpdCB5b3Vyc2VsZikuCi0gKi8KLWlu
dCBfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApCi17Ci0gIEdM
VWhhbGZFZGdlICp1cCwgKmxvOwotCi0gIC8qIEFsbCBlZGdlcyBhcmUgb3JpZW50ZWQgQ0NXIGFy
b3VuZCB0aGUgYm91bmRhcnkgb2YgdGhlIHJlZ2lvbi4KLSAgICogRmlyc3QsIGZpbmQgdGhlIGhh
bGYtZWRnZSB3aG9zZSBvcmlnaW4gdmVydGV4IGlzIHJpZ2h0bW9zdC4KLSAgICogU2luY2UgdGhl
IHN3ZWVwIGdvZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBmYWNlLT5hbkVkZ2Ugc2hvdWxkCi0gICAq
IGJlIGNsb3NlIHRvIHRoZSBlZGdlIHdlIHdhbnQuCi0gICAqLwotICB1cCA9IGZhY2UtPmFuRWRn
ZTsKLSAgYXNzZXJ0KCB1cC0+TG5leHQgIT0gdXAgJiYgdXAtPkxuZXh0LT5MbmV4dCAhPSB1cCAp
OwotCi0gIGZvciggOyBWZXJ0TGVxKCB1cC0+RHN0LCB1cC0+T3JnICk7IHVwID0gdXAtPkxwcmV2
ICkKLSAgICA7Ci0gIGZvciggOyBWZXJ0TGVxKCB1cC0+T3JnLCB1cC0+RHN0ICk7IHVwID0gdXAt
PkxuZXh0ICkKLSAgICA7Ci0gIGxvID0gdXAtPkxwcmV2OwotCi0gIHdoaWxlKCB1cC0+TG5leHQg
IT0gbG8gKSB7Ci0gICAgaWYoIFZlcnRMZXEoIHVwLT5Ec3QsIGxvLT5PcmcgKSkgewotICAgICAg
LyogdXAtPkRzdCBpcyBvbiB0aGUgbGVmdC4gIEl0IGlzIHNhZmUgdG8gZm9ybSB0cmlhbmdsZXMg
ZnJvbSBsby0+T3JnLgotICAgICAgICogVGhlIEVkZ2VHb2VzTGVmdCB0ZXN0IGd1YXJhbnRlZXMg
cHJvZ3Jlc3MgZXZlbiB3aGVuIHNvbWUgdHJpYW5nbGVzCi0gICAgICAgKiBhcmUgQ1csIGdpdmVu
IHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjaGFpbnMgYXJlIHRydWx5IG1vbm90b25lLgotICAg
ICAgICovCi0gICAgICB3aGlsZSggbG8tPkxuZXh0ICE9IHVwICYmIChFZGdlR29lc0xlZnQoIGxv
LT5MbmV4dCApCi0JICAgICB8fCBFZGdlU2lnbiggbG8tPk9yZywgbG8tPkRzdCwgbG8tPkxuZXh0
LT5Ec3QgKSA8PSAwICkpIHsKLQlHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hD
b25uZWN0KCBsby0+TG5leHQsIGxvICk7Ci0JaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1
cm4gMDsKLQlsbyA9IHRlbXBIYWxmRWRnZS0+U3ltOwotICAgICAgfQotICAgICAgbG8gPSBsby0+
THByZXY7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGxvLT5PcmcgaXMgb24gdGhlIGxlZnQuICBX
ZSBjYW4gbWFrZSBDQ1cgdHJpYW5nbGVzIGZyb20gdXAtPkRzdC4gKi8KLSAgICAgIHdoaWxlKCBs
by0+TG5leHQgIT0gdXAgJiYgKEVkZ2VHb2VzUmlnaHQoIHVwLT5McHJldiApCi0JICAgICB8fCBF
ZGdlU2lnbiggdXAtPkRzdCwgdXAtPk9yZywgdXAtPkxwcmV2LT5PcmcgKSA+PSAwICkpIHsKLQlH
TFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCB1cCwgdXAtPkxwcmV2
ICk7Ci0JaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKLQl1cCA9IHRlbXBIYWxm
RWRnZS0+U3ltOwotICAgICAgfQotICAgICAgdXAgPSB1cC0+TG5leHQ7Ci0gICAgfQotICB9Ci0K
LSAgLyogTm93IGxvLT5PcmcgPT0gdXAtPkRzdCA9PSB0aGUgbGVmdG1vc3QgdmVydGV4LiAgVGhl
IHJlbWFpbmluZyByZWdpb24KLSAgICogY2FuIGJlIHRlc3NlbGxhdGVkIGluIGEgZmFuIGZyb20g
dGhpcyBsZWZ0bW9zdCB2ZXJ0ZXguCi0gICAqLwotICBhc3NlcnQoIGxvLT5MbmV4dCAhPSB1cCAp
OwotICB3aGlsZSggbG8tPkxuZXh0LT5MbmV4dCAhPSB1cCApIHsKLSAgICBHTFVoYWxmRWRnZSAq
dGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCBsby0+TG5leHQsIGxvICk7Ci0gICAgaWYg
KHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKLSAgICBsbyA9IHRlbXBIYWxmRWRnZS0+
U3ltOwotICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyogX19nbF9tZXNoVGVzc2VsbGF0ZUlu
dGVyaW9yKCBtZXNoICkgdGVzc2VsbGF0ZXMgZWFjaCByZWdpb24gb2YKLSAqIHRoZSBtZXNoIHdo
aWNoIGlzIG1hcmtlZCAiaW5zaWRlIiB0aGUgcG9seWdvbi4gIEVhY2ggc3VjaCByZWdpb24KLSAq
IG11c3QgYmUgbW9ub3RvbmUuCi0gKi8KLWludCBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3Io
IEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmLCAqbmV4dDsKLQotICAvKkxJTlRFRCov
Ci0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gbmV4
dCApIHsKLSAgICAvKiBNYWtlIHN1cmUgd2UgZG9uJyd0IHRyeSB0byB0ZXNzZWxsYXRlIHRoZSBu
ZXcgdHJpYW5nbGVzLiAqLwotICAgIG5leHQgPSBmLT5uZXh0OwotICAgIGlmKCBmLT5pbnNpZGUg
KSB7Ci0gICAgICBpZiAoICFfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggZiApICkgcmV0
dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyogX19nbF9tZXNoRGlz
Y2FyZEV4dGVyaW9yKCBtZXNoICkgemFwcyAoaWUuIHNldHMgdG8gTlVMTCkgYWxsIGZhY2VzCi0g
KiB3aGljaCBhcmUgbm90IG1hcmtlZCAiaW5zaWRlIiB0aGUgcG9seWdvbi4gIFNpbmNlIGZ1cnRo
ZXIgbWVzaCBvcGVyYXRpb25zCi0gKiBvbiBOVUxMIGZhY2VzIGFyZSBub3QgYWxsb3dlZCwgdGhl
IG1haW4gcHVycG9zZSBpcyB0byBjbGVhbiB1cCB0aGUKLSAqIG1lc2ggc28gdGhhdCBleHRlcmlv
ciBsb29wcyBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwot
dm9pZCBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVm
YWNlICpmLCAqbmV4dDsKLQotICAvKkxJTlRFRCovCi0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5l
eHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gbmV4dCApIHsKLSAgICAvKiBTaW5jZSBmIHdpbGwg
YmUgZGVzdHJveWVkLCBzYXZlIGl0cyBuZXh0IHBvaW50ZXIuICovCi0gICAgbmV4dCA9IGYtPm5l
eHQ7Ci0gICAgaWYoICEgZi0+aW5zaWRlICkgewotICAgICAgX19nbF9tZXNoWmFwRmFjZSggZiAp
OwotICAgIH0KLSAgfQotfQotCi0jZGVmaW5lIE1BUktFRF9GT1JfREVMRVRJT04JMHg3ZmZmZmZm
ZgotCi0vKiBfX2dsX21lc2hTZXRXaW5kaW5nTnVtYmVyKCBtZXNoLCB2YWx1ZSwga2VlcE9ubHlC
b3VuZGFyeSApIHJlc2V0cyB0aGUKLSAqIHdpbmRpbmcgbnVtYmVycyBvbiBhbGwgZWRnZXMgc28g
dGhhdCByZWdpb25zIG1hcmtlZCAiaW5zaWRlIiB0aGUKLSAqIHBvbHlnb24gaGF2ZSBhIHdpbmRp
bmcgbnVtYmVyIG9mICJ2YWx1ZSIsIGFuZCByZWdpb25zIG91dHNpZGUKLSAqIGhhdmUgYSB3aW5k
aW5nIG51bWJlciBvZiAwLgotICoKLSAqIElmIGtlZXBPbmx5Qm91bmRhcnkgaXMgVFJVRSwgaXQg
YWxzbyBkZWxldGVzIGFsbCBlZGdlcyB3aGljaCBkbyBub3QKLSAqIHNlcGFyYXRlIGFuIGludGVy
aW9yIHJlZ2lvbiBmcm9tIGFuIGV4dGVyaW9yIG9uZS4KLSAqLwotaW50IF9fZ2xfbWVzaFNldFdp
bmRpbmdOdW1iZXIoIEdMVW1lc2ggKm1lc2gsIGludCB2YWx1ZSwKLQkJCSAgICAgICAgR0xib29s
ZWFuIGtlZXBPbmx5Qm91bmRhcnkgKQotewotICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0OwotCi0g
IGZvciggZSA9IG1lc2gtPmVIZWFkLm5leHQ7IGUgIT0gJm1lc2gtPmVIZWFkOyBlID0gZU5leHQg
KSB7Ci0gICAgZU5leHQgPSBlLT5uZXh0OwotICAgIGlmKCBlLT5SZmFjZS0+aW5zaWRlICE9IGUt
PkxmYWNlLT5pbnNpZGUgKSB7Ci0KLSAgICAgIC8qIFRoaXMgaXMgYSBib3VuZGFyeSBlZGdlIChv
bmUgc2lkZSBpcyBpbnRlcmlvciwgb25lIGlzIGV4dGVyaW9yKS4gKi8KLSAgICAgIGUtPndpbmRp
bmcgPSAoZS0+TGZhY2UtPmluc2lkZSkgPyB2YWx1ZSA6IC12YWx1ZTsKLSAgICB9IGVsc2Ugewot
Ci0gICAgICAvKiBCb3RoIHJlZ2lvbnMgYXJlIGludGVyaW9yLCBvciBib3RoIGFyZSBleHRlcmlv
ci4gKi8KLSAgICAgIGlmKCAhIGtlZXBPbmx5Qm91bmRhcnkgKSB7Ci0JZS0+d2luZGluZyA9IDA7
Ci0gICAgICB9IGVsc2UgewotCWlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgcmV0dXJuIDA7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaAkocmV2aXNpb24gODIx
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJp
bGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiog
bWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRo
ZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNl
bnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8g
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWlu
IGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0
bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFp
biBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29t
L3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExp
Y2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNp
cywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05T
Ci0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJ
RUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJ
U0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBB
TkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFs
IENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4x
LCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGlj
cywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAg
U2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWlu
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNp
b25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNo
ZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQot
KiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEu
Mi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1i
ZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cg
U3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMg
c29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90
IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGgg
dGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0q
KiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9u
JAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvdGVzc21vbm8u
aCM1ICQKLSovCi0KLSNpZm5kZWYgX190ZXNzbW9ub19oXwotI2RlZmluZSBfX3Rlc3Ntb25vX2hf
Ci0KLS8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVzc2VsbGF0ZXMg
YSBtb25vdG9uZSByZWdpb24KLSAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/PykgIFRoZSByZWdp
b24gbXVzdCBjb25zaXN0IG9mIGEgc2luZ2xlCi0gKiBsb29wIG9mIGhhbGYtZWRnZXMgKHNlZSBt
ZXNoLmgpIG9yaWVudGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcwotICogY2FzZSBtZWFucyB0
aGF0IGFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9mIHRoZQotICog
cmVnaW9uIGluIGEgc2luZ2xlIGludGVydmFsLiAgCi0gKgotICogVGVzc2VsbGF0aW9uIGNvbnNp
c3RzIG9mIGFkZGluZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YKLSAqIGhhbGYt
ZWRnZXMpLCB0byBzcGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHRyaWFuZ2xl
cy4KLSAqCi0gKiBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIG1lc2ggKSB0ZXNzZWxsYXRl
cyBlYWNoIHJlZ2lvbiBvZgotICogdGhlIG1lc2ggd2hpY2ggaXMgbWFya2VkICJpbnNpZGUiIHRo
ZSBwb2x5Z29uLiAgRWFjaCBzdWNoIHJlZ2lvbgotICogbXVzdCBiZSBtb25vdG9uZS4KLSAqCi0g
KiBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2ggKSB6YXBzIChpZS4gc2V0cyB0byBOVUxM
KSBhbGwgZmFjZXMKLSAqIHdoaWNoIGFyZSBub3QgbWFya2VkICJpbnNpZGUiIHRoZSBwb2x5Z29u
LiAgU2luY2UgZnVydGhlciBtZXNoIG9wZXJhdGlvbnMKLSAqIG9uIE5VTEwgZmFjZXMgYXJlIG5v
dCBhbGxvd2VkLCB0aGUgbWFpbiBwdXJwb3NlIGlzIHRvIGNsZWFuIHVwIHRoZQotICogbWVzaCBz
byB0aGF0IGV4dGVyaW9yIGxvb3BzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIGRhdGEgc3Ry
dWN0dXJlLgotICoKLSAqIF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIG1lc2gsIHZhbHVlLCBr
ZWVwT25seUJvdW5kYXJ5ICkgcmVzZXRzIHRoZQotICogd2luZGluZyBudW1iZXJzIG9uIGFsbCBl
ZGdlcyBzbyB0aGF0IHJlZ2lvbnMgbWFya2VkICJpbnNpZGUiIHRoZQotICogcG9seWdvbiBoYXZl
IGEgd2luZGluZyBudW1iZXIgb2YgInZhbHVlIiwgYW5kIHJlZ2lvbnMgb3V0c2lkZQotICogaGF2
ZSBhIHdpbmRpbmcgbnVtYmVyIG9mIDAuCi0gKgotICogSWYga2VlcE9ubHlCb3VuZGFyeSBpcyBU
UlVFLCBpdCBhbHNvIGRlbGV0ZXMgYWxsIGVkZ2VzIHdoaWNoIGRvIG5vdAotICogc2VwYXJhdGUg
YW4gaW50ZXJpb3IgcmVnaW9uIGZyb20gYW4gZXh0ZXJpb3Igb25lLgotICovCi0KLWludCBfX2ds
X21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApOwotaW50IF9fZ2xfbWVz
aFRlc3NlbGxhdGVJbnRlcmlvciggR0xVbWVzaCAqbWVzaCApOwotdm9pZCBfX2dsX21lc2hEaXNj
YXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKTsKLWludCBfX2dsX21lc2hTZXRXaW5kaW5nTnVt
YmVyKCBHTFVtZXNoICptZXNoLCBpbnQgdmFsdWUsCi0JCQkgICAgICAgIEdMYm9vbGVhbiBrZWVw
T25seUJvdW5kYXJ5ICk7Ci0KLSNlbmRpZgo=
</data>
<flag name="review"
          id="79651"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>