<?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>68774</bug_id>
          
          <creation_ts>2011-09-25 01:37:10 -0700</creation_ts>
          <short_desc>Remove PLATFORM(HAIKU) and associated code</short_desc>
          <delta_ts>2011-09-25 12:34:52 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68012</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>472873</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-25 01:37:10 -0700</bug_when>
    <thetext>Remove PLATFORM(HAIKU) and associated code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472874</commentid>
    <comment_count>1</comment_count>
      <attachid>108603</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-25 01:42:56 -0700</bug_when>
    <thetext>Created attachment 108603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472899</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-25 12:34:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/95922</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108603</attachid>
            <date>2011-09-25 01:42:56 -0700</date>
            <delta_ts>2011-09-25 12:03:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68774-20110925014255.patch</filename>
            <type>text/plain</type>
            <size>414186</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1OTIx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDkt
MjUgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgUExB
VEZPUk0oSEFJS1UpIGFuZCBhc3NvY2lhdGVkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvV2ViS2l0UGFja2FnaW5nLmNt
YWtlOgorICAgICAgICAqIHdzY3JpcHQ6CisKIDIwMTEtMDktMjUgIFJhcGhhZWwgS3VibyBkYSBD
b3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0NNYWtlXSBSZW1vdmUgRmlu
ZExpYlhsc3QuY21ha2UKSW5kZXg6IHdzY3JpcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3NjcmlwdAkocmV2
aXNpb24gOTU5MjApCisrKyB3c2NyaXB0CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcg
QEAgZGVmIGJ1aWxkKGJsZCk6CiAKICAgICBmZWF0dXJlcyA9IFtPcHRpb25zLm9wdGlvbnMucG9y
dC5sb3dlcigpXQogICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSBbJypBbGxJbk9uZS5jcHAnLCAnKkJy
ZXcuY3BwJywgJypDRk5ldC5jcHAnLCAnKkNocm9taXVtKi5jcHAnLCAKLSAgICAgICAgICAgICcq
RWZsLmNwcCcsICcqR3RrLmNwcCcsICcqSGFpa3UuY3BwJywgJypNYWMuY3BwJywgJypOb25lLmNw
cCcsICcqUXQuY3BwJywgJypTYWZhcmkuY3BwJywKKyAgICAgICAgICAgICcqRWZsLmNwcCcsICcq
R3RrLmNwcCcsICcqTWFjLmNwcCcsICcqTm9uZS5jcHAnLCAnKlF0LmNwcCcsICcqU2FmYXJpLmNw
cCcsCiAgICAgICAgICAgICAndGVzdCpiaW5kaW5ncy4qJywgJypXaW5DRS5jcHAnLCAiV2ViRE9N
Q2FudmFzKi5jcHAiLCAiV2ViRE9NU1ZHKi5jcHAiXQogICAgIGlmIE9wdGlvbnMub3B0aW9ucy5w
b3J0ID09ICd3eCc6CiAgICAgICAgIGZlYXR1cmVzLmFwcGVuZCgnY3VybCcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA5LTI1
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIFBMQVRG
T1JNKEhBSUtVKSBhbmQgYXNzb2NpYXRlZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwL0phdmFTY3JpcHRDb3Jl
Lmd5cDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIGd5cC9KYXZh
U2NyaXB0Q29yZS5neXA6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgor
ICAgICAgICAqIHd0Zi9QYWdlQWxsb2NhdGlvbi5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5o
OgorICAgICAgICAqIHd0Zi9TdGFja0JvdW5kcy5jcHA6CisgICAgICAgICogd3RmL2hhaWt1OiBS
ZW1vdmVkLgorICAgICAgICAqIHd0Zi9oYWlrdS9NYWluVGhyZWFkSGFpa3UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHd0Zi9oYWlrdS9TdHJpbmdIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisKIDIwMTEtMDktMjQgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNjU0LDggKzY1NCw2IEBACiAgICAgICAg
ICAgICAnd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgnLAogICAgICAgICAgICAgJ3d0Zi9ndGsvTWFp
blRocmVhZEd0ay5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9ndGsvVGhyZWFkaW5nR3RrLmNwcCcs
Ci0gICAgICAgICAgICAnd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHAnLAotICAgICAgICAg
ICAgJ3d0Zi9oYWlrdS9TdHJpbmdIYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9tYWMvTWFp
blRocmVhZE1hYy5tbScsCiAgICAgICAgICAgICAnd3RmL3F0L01haW5UaHJlYWRRdC5jcHAnLAog
ICAgICAgICAgICAgJ3d0Zi9xdC9TdHJpbmdRdC5jcHAnLApAQCAtNjY2LDcgKzY2NCw3IEBACiAg
ICAgICAgICAgICAnd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAnLAogICAgICAgICAgICAgJ3d0Zi90
ZXh0L1N0cmluZ1N0YXRpY3MuY3BwJywKICAgICAgICAgICAgICd3dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwJywKLSAgICAgICAgICAgICd3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwJywgICAg
ICAgICAgICAKKyAgICAgICAgICAgICd3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwJywK
ICAgICAgICAgICAgICd3dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwJywKICAgICAgICAg
ICAgICd3dGYvdW5pY29kZS9TY3JpcHRDb2Rlc0Zyb21JQ1UuaCcsCiAgICAgICAgICAgICAnd3Rm
L3VuaWNvZGUvVVRGOC5jcHAnLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAJKHJldmlzaW9u
IDk1OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cC9KYXZh
U2NyaXB0Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNiBAQAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnLi4vd3RmL2VmbCddLCAKICAgICAgICAgWydleGNsdWRlJywgJy4uL3d0
Zi9nb2JqZWN0J10sIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnLi4vd3RmL2d0ayddLCAKLSAgICAg
ICAgWydleGNsdWRlJywgJy4uL3d0Zi9oYWlrdSddLCAKICAgICAgICAgWydleGNsdWRlJywgJy4u
L3d0Zi9tYWMnXSwgCiAgICAgICAgIFsnZXhjbHVkZScsICcuLi93dGYvcXQnXSwgCiAgICAgICAg
IFsnZXhjbHVkZScsICcuLi93dGYvdXJsJ10sIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2d5cC9KYXZhU2NyaXB0Q29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2d5cC9KYXZhU2NyaXB0Q29yZS5neXAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2d5cC9KYXZhU2NyaXB0Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDcgKzgwLDcgQEAKICAgICAgICAgWydleGNsdWRlJywgJyg/PCF1bmljb2RlKS9pY3UvJ10sCiAg
ICAgICAgIFsnZXhjbHVkZScsICdvcy13aW4zMi8nXSwKICAgICAgICAgWydleGNsdWRlJywgJ3F0
LyddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnd3RmLyhicmV3fGVmbHxndGt8aGFpa3V8cXR8d2lu
Y2V8d3gpLyddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnd3RmLyhicmV3fGVmbHxndGt8cXR8d2lu
Y2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnd3RmL3VuaWNvZGUvYnJldy8nXSwKICAg
ICAgICAgWydleGNsdWRlJywgJ3d0Zi91bmljb2RlL2dsaWIvJ10sCiAgICAgICAgIFsnZXhjbHVk
ZScsICd3dGYvdW5pY29kZS9xdDQvJ10sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMTYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUg
PG1hbGxvYy5oPgogCi0jZWxpZiBPUyhIQUlLVSkKLQotI2luY2x1ZGUgPE9TLmg+Ci0KICNlbGlm
IE9TKFVOSVgpCiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpZiAhT1MoSEFJS1UpCiAjaW5jbHVk
ZSA8c3lzL21tYW4uaD4KLSNlbmRpZgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWYgT1MoU09M
QVJJUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJ
KHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gv
dm1fbWFwLmg+CiAjZW5kaWYKIAotI2lmIE9TKEhBSUtVKQotI2luY2x1ZGUgPE9TLmg+Ci0jZW5k
aWYKLQogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24g
OTU5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1MSwxMSArMzUxLDYgQEAKICNkZWZpbmUgV1RGX09TX0ZSRUVCU0QgMQogI2Vu
ZGlmCiAKLS8qIE9TKEhBSUtVKSAtIEhhaWt1ICovCi0jaWZkZWYgX19IQUlLVV9fCi0jZGVmaW5l
IFdURl9PU19IQUlLVSAxCi0jZW5kaWYKLQogLyogT1MoTElOVVgpIC0gTGludXggKi8KICNpZmRl
ZiBfX2xpbnV4X18KICNkZWZpbmUgV1RGX09TX0xJTlVYIDEKQEAgLTQwMSw3ICszOTYsNiBAQAog
ICAgIHx8IE9TKEFORFJPSUQpICAgICAgICAgIFwKICAgICB8fCBPUyhEQVJXSU4pICAgICAgICAg
ICBcCiAgICAgfHwgT1MoRlJFRUJTRCkgICAgICAgICAgXAotICAgIHx8IE9TKEhBSUtVKSAgICAg
ICAgICAgIFwKICAgICB8fCBPUyhMSU5VWCkgICAgICAgICAgICBcCiAgICAgfHwgT1MoTkVUQlNE
KSAgICAgICAgICAgXAogICAgIHx8IE9TKE9QRU5CU0QpICAgICAgICAgIFwKQEAgLTQyMSw3ICs0
MTUsNiBAQAogLyogUExBVEZPUk0oUVQpICovCiAvKiBQTEFURk9STShXWCkgKi8KIC8qIFBMQVRG
T1JNKEdUSykgKi8KLS8qIFBMQVRGT1JNKEhBSUtVKSAqLwogLyogUExBVEZPUk0oTUFDKSAqLwog
LyogUExBVEZPUk0oV0lOKSAqLwogI2lmIGRlZmluZWQoQlVJTERJTkdfQ0hST01JVU1fXykKQEAg
LTQzMiw4ICs0MjUsNiBAQAogI2RlZmluZSBXVEZfUExBVEZPUk1fV1ggMQogI2VsaWYgZGVmaW5l
ZChCVUlMRElOR19HVEtfXykKICNkZWZpbmUgV1RGX1BMQVRGT1JNX0dUSyAxCi0jZWxpZiBkZWZp
bmVkKEJVSUxESU5HX0hBSUtVX18pCi0jZGVmaW5lIFdURl9QTEFURk9STV9IQUlLVSAxCiAjZWxp
ZiBPUyhEQVJXSU4pCiAjZGVmaW5lIFdURl9QTEFURk9STV9NQUMgMQogI2VsaWYgT1MoV0lORE9X
UykKQEAgLTYzMCwxNSArNjIxLDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShI
QUlLVSkKLSNkZWZpbmUgSEFWRV9QT1NJWF9NRU1BTElHTiAxCi0jZGVmaW5lIFdURl9VU0VfQ1VS
TCAxCi0jZGVmaW5lIFdURl9VU0VfUFRIUkVBRFMgMQotI2RlZmluZSBIQVZFX1BUSFJFQURfUldM
T0NLIDEKLSNkZWZpbmUgVVNFX1NZU1RFTV9NQUxMT0MgMQotI2RlZmluZSBFTkFCTEVfTkVUU0NB
UEVfUExVR0lOX0FQSSAwCi0jZW5kaWYKLQogI2lmICFkZWZpbmVkKEhBVkVfQUNDRVNTSUJJTElU
WSkKICNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKENIUk9NSVVNKQogI2RlZmluZSBIQVZFX0FDQ0VT
U0lCSUxJVFkgMQpAQCAtNjYyLDcgKzY0NCw3IEBACiAjZW5kaWYKIAogI2lmICFPUyhXSU5ET1dT
KSAmJiAhT1MoU09MQVJJUykgJiYgIU9TKFFOWCkgXAotICAgICYmICFPUyhTWU1CSUFOKSAmJiAh
T1MoSEFJS1UpICYmICFPUyhSVkNUKSBcCisgICAgJiYgIU9TKFNZTUJJQU4pICYmICFPUyhSVkNU
KSBcCiAgICAgJiYgIU9TKEFORFJPSUQpCiAjZGVmaW5lIEhBVkVfVE1fR01UT0ZGIDEKICNkZWZp
bmUgSEFWRV9UTV9aT05FIDEKQEAgLTc0OCwxMCArNzMwLDcgQEAKIC8qIEZJWE1FOiBpcyB0aGlz
IGFjdHVhbGx5IHVzZWQgb3IgZG8gb3RoZXIgcGxhdGZvcm1zIGdlbmVyYXRlIHRoZWlyIG93biBj
b25maWcuaD8gKi8KIAogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQotLyogQXMgbG9uZyBhcyBIYWlr
dSBkb2Vzbid0IGhhdmUgYSBjb21wbGV0ZSBzdXBwb3J0IG9mIGxvY2FsZSB0aGlzIHdpbGwgYmUg
ZGlzYWJsZWQuICovCi0jaWYgIU9TKEhBSUtVKQogI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQot
I2VuZGlmCiAjZGVmaW5lIEhBVkVfTU1BUCAxCiAjZGVmaW5lIEhBVkVfU0JSSyAxCiAjZGVmaW5l
IEhBVkVfU1RSSU5HU19IIDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tC
b3VuZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tC
b3VuZHMuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
U3RhY2tCb3VuZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsNiBAQAogCiAjaW5j
bHVkZSA8d2luZG93cy5oPgogCi0jZWxpZiBPUyhIQUlLVSkKLQotI2luY2x1ZGUgPE9TLmg+Ci0K
ICNlbGlmIE9TKFNPTEFSSVMpCiAKICNpbmNsdWRlIDx0aHJlYWQuaD4KQEAgLTY0LDEwICs2MCwx
MCBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIFRoZXNlIHBsYXRmb3JtcyBzaG91bGQgbm93IGJlIHdv
cmtpbmcgY29ycmVjdGx5OgogLy8gICAgIERBUldJTiwgUU5YLCBVTklYLCBTWU1CSUFOCiAvLyBU
aGVzZSBwbGF0Zm9ybXMgYXJlIG5vdDoKLS8vICAgICBXSU5ET1dTLCBTT0xBUklTLCBPUEVOQlNE
LCBIQUlLVSwgV0lOQ0UKKy8vICAgICBXSU5ET1dTLCBTT0xBUklTLCBPUEVOQlNELCBXSU5DRQog
Ly8KIC8vIEZJWE1FOiByZW1vdmUgdGhpcyEgLSB0aGlzIGNvZGUgdW5zYWZlbHkgZ3Vlc3NlcyBh
dCBzdGFjayBzaXplcyEKLSNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhPUEVO
QlNEKSB8fCBPUyhIQUlLVSkKKyNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhP
UEVOQlNEKQogLy8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBh
cnNlciwgZ3Vlc3MgdGhlIHN0YWNrIHNpemUuCiBzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGlt
YXRlZFN0YWNrU2l6ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OwogLy8gVGhpcyBtZXRo
b2QgYXNzdW1lcyB0aGUgc3RhY2sgaXMgZ3Jvd2luZyBkb3dud2FyZHMuCkBAIC0xNDMsMTYgKzEz
OSw2IEBAIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQogICAgIG1fYm91bmQgPSAodm9p
ZCopaW5mby5pTGltaXQ7CiB9CiAKLSNlbGlmIE9TKEhBSUtVKQotCi12b2lkIFN0YWNrQm91bmRz
Ojppbml0aWFsaXplKCkKLXsKLSAgICB0aHJlYWRfaW5mbyB0aHJlYWRJbmZvOwotICAgIGdldF90
aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVhZEluZm8pOwotICAgIG1fb3JpZ2lu
ID0gdGhyZWFkSW5mby5zdGFja19lbmQ7Ci0gICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3Vu
ZChtX29yaWdpbik7Ci19Ci0KICNlbGlmIE9TKFVOSVgpCiAKIHZvaWQgU3RhY2tCb3VuZHM6Omlu
aXRpYWxpemUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9oYWlrdS9NYWluVGhy
ZWFkSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvaGFp
a3UvTWFpblRocmVhZEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2hhaWt1L01haW5UaHJlYWRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllcgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNYWluVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotdm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5j
dGlvbnNPbk1haW5UaHJlYWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2hhaWt1L1N0
cmluZ0hhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2hh
aWt1L1N0cmluZ0hhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2hhaWt1L1N0cmluZ0hhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCi0KLSNpbmNsdWRlIDxTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBTdHJpbmcgY29udmVyc2lvbnMK
LVN0cmluZzo6U3RyaW5nKGNvbnN0IEJTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5n
Lkxlbmd0aCgpKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5TdHJp
bmcoKSwgc3RyaW5nLkxlbmd0aCgpKS5pbXBsKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjplbXB0eSgpOwotfQotCi1TdHJpbmc6Om9wZXJhdG9yIEJTdHJpbmcoKSBj
b25zdAotewotICAgIEJTdHJpbmcgc3RyaW5nOwotICAgIHN0cmluZy5TZXRUbyh1dGY4KCkuZGF0
YSgpKTsKLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24g
OTU5MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDEwICs0Niw2IEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4
U3RyaW5nOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJTdHJpbmc7Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIENTdHJpbmc7CkBAIC0zMDcsMTEgKzMw
Myw2IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgb3BlcmF0b3Igd3hTdHJpbmco
KSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oSEFJS1UpCi0gICAgU3RyaW5nKGNvbnN0
IEJTdHJpbmcmKTsKLSAgICBvcGVyYXRvciBCU3RyaW5nKCkgY29uc3Q7Ci0jZW5kaWYKLQogICAg
IC8vIFN0cmluZzo6ZnJvbVVURjggd2lsbCByZXR1cm4gYSBudWxsIHN0cmluZyBpZgogICAgIC8v
IHRoZSBpbnB1dCBkYXRhIGNvbnRhaW5zIGludmFsaWQgVVRGLTggc2VxdWVuY2VzLgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqLCBzaXpl
X3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU5MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTIgQEAKKzIwMTEtMDktMjUgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgUExBVEZPUk0o
SEFJS1UpIGFuZCBhc3NvY2lhdGVkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY4Nzc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQXMgZGlzY3Vzc2VkIG9uIHdlYmtpdC1kZXYsIHRoZSBIYWlrdSBw
b3J0IGhhcyBiZWVuIGluYWN0aXZlIGZvciBvdmVyIGEKKyAgICAgICAgeWVhci4gIEEgeWVhciBh
bmQgYSBoYWxmIGFnbywgd2UgZGlzY3Vzc2VkIHJlbW92aW5nIHRoZSBwb3J0LCBidXQgZm9sa3MK
KyAgICAgICAgc2FpZCB0aGV5IHBsYW5uZWQgdG8gd29yayBvbiBpdCBtb3JlLiAgVGhhdCB3b3Jr
IGRvZXMgbm90IGFwcGVhciB0bworICAgICAgICBoYXZlIGhhcHBlbmVkIGluIHRoZSBpbnRlcnZl
bmluZyB0aW1lLgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJI
YWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9oYWlrdTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL2hhaWt1L0VkaXRvckhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBneXAvV2ViQ29yZS5neXA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZXZlbnRJbnZlcnRzVGFic1RvTGlua3NDbGllbnRDYWxsUmVzdWx0KToKKyAg
ICAgICAgKiBwYWdlL2hhaWt1OiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvaGFpa3UvRHJhZ0Nv
bnRyb2xsZXJIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9oYWlrdS9FdmVudEhh
bmRsZXJIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9oYWlrdS9GcmFtZUhhaWt1
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9DdXJzb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnRGF0YS5o
OgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTWVudURl
c2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bnRQb2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvRm9udEhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3Uu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlr
dS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VC
dWZmZXJEYXRhSGFpa3UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdl
SGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0
aWxsSW1hZ2VIYWlrdS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1OiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9oYWlrdS9Mb2NhbGl6ZWRTdHJpbmdzSGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L0xvZ2dpbmdIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFp
a3UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsYmFyVGhlbWVIYWlrdS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsYmFyVGhlbWVIYWlrdS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlr
dS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NoYXJlZEJ1ZmZlckhhaWt1
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdTogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlr
dS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2hhaWt1OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvaGFpa3UvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUhhaWt1LmNwcDogUmVt
b3ZlZC4KKwogMjAxMS0wOS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEF0dGVtcHRlZCBidWlsZCBmaXhlcyBmb3IgR1RLIGFuZCBRdC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQ0LDcgKzE5NDQsNiBAQAogICAgICAgICAgICAgJ2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJCcmV3LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlckVmbC5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXJHdGsuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVySGFpa3UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyTWFjLm1tJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
UXQuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyV2luLmNw
cCcsCkBAIC0yNTMwLDcgKzI1MjksNiBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvY2hyb21pdW0v
RWRpdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL2Nocm9taXVtL0ZyYW1l
U2VsZWN0aW9uQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL2d0ay9GcmFtZVNl
bGVjdGlvbkd0ay5jcHAnLAotICAgICAgICAgICAgJ2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3Uu
Y3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCcsCiAgICAgICAgICAg
ICAnZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tJywKICAgICAgICAgICAgICdlZGl0aW5nL21hYy9G
cmFtZVNlbGVjdGlvbk1hYy5tbScsCkBAIC0yOTc3LDkgKzI5NzUsNiBAQAogICAgICAgICAgICAg
J3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9ndGsv
RXZlbnRIYW5kbGVyR3RrLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9ndGsvRnJhbWVHdGsuY3Bw
JywKLSAgICAgICAgICAgICdwYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwJywKLSAg
ICAgICAgICAgICdwYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcCcsCi0gICAgICAgICAg
ICAncGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGFnZS9tYWMvQ2hy
b21lTWFjLm1tJywKICAgICAgICAgICAgICdwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbScs
CiAgICAgICAgICAgICAncGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tJywKQEAgLTM2NzUsMjgg
KzM2NzAsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRQb2ludEd0ay5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNwcCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250SGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250UGxhdGZvcm1EYXRhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGFIYWlrdS5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbScsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCcs
CkBAIC00MDA3LDM3ICszOTgwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
aGFpa3UvQ3Vyc29ySGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9oYWlrdS9EcmFn
RGF0YUhhaWt1LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFp
a3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L0xvY2FsaXplZFN0cmluZ3NIYWlrdS5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L0xvZ2dpbmdIYWlrdS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlrdS5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vaGFp
a3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L1Jl
bmRlclRoZW1lSGFpa3UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFp
a3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9oYWlrdS9TY3JvbGxiYXJUaGVtZUhhaWt1
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vaGFpa3UvU2Nyb2xsYmFyVGhlbWVIYWlrdS5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlrdS5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmgnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2hhaWt1L1NoYXJlZEJ1ZmZlckhhaWt1LmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9o
YWlrdS9XaWRnZXRIYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcCcsCkBAIC00MDUwLDcgKzM5OTIsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdl
RGVjb2RlckhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCcsCkBAIC00Mzg2LDcgKzQzMjcs
NiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29k
ZWNHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvcklu
dGVybmFsSUNVSGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9IeXBo
ZW5hdGlvbk1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxpemVk
TnVtYmVyTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJp
Yy5jJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lv
biA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogICAgICAgXSwKICAgICAgICdzb3VyY2Vz
Lyc6IFsKICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0
dGVybnMgaW4gYSB2YXJpYWJsZS4KLSAgICAgICAgWydleGNsdWRlJywgJyhicmV3fGNhaXJvfGNh
fGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8aGFpa3V8bGludXh8bWFjfG9w
ZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlhbnx0ZXht
YXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCisgICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xj
YWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGxpbnV4fG1hY3xv
cGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4
bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnKD88IUNo
cm9taXVtKShDYWlyb3xDRnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBlfFBPU0lY
fFBvc2l4fFF0fFNhZmFyaXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQn
XSwKIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnQWxsSW5PbmVcXC5jcHAkJ10sCkBAIC0xMzQ4LDcg
KzEzNDgsNyBAQAogICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vJ10sCiAKICAgICAgICAg
IyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJp
YWJsZS4KLSAgICAgICAgWydleGNsdWRlJywgJyhicmV3fGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZs
fGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8aGFpa3V8bGludXh8bWFjfG9wZW5nbHxvcGVudmd8b3Bl
bnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlhbnx0ZXhtYXB8aXBob25lfHdpbnx3
aW5jZXx3eCkvJ10sCisgICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjYXxjZnxjZ3xj
dXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9w
ZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58
d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnKD88IUNocm9taXVtKShDYWlyb3xD
RnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBlfFBPU0lYfFBvc2l4fFF0fFNhZmFy
aXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKIAogICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vTGlua0hhc2hcXC5jcHAkJ10sCkBAIC0xNjAwLDcgKzE2MDAs
NyBAQAogICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nLyddLAogCiAgICAgICAgICMgRklY
TUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5zIGluIGEgdmFyaWFibGUu
Ci0gICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVl
dHlwZXxnc3RyZWFtZXJ8Z3RrfGhhaWt1fGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBl
fHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8
d3gpLyddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnKGJyZXd8Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxl
Zmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlw
ZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNl
fHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8
Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291
cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNs
dWRlJywgJ0FsbEluT25lXFwuY3BwJCddLApAQCAtMTY2OSw3ICsxNjY5LDcgQEAKICAgICAgICAg
WydleGNsdWRlJywgJ2JyaWRnZS9qbmkvanNjLyddLAogCiAgICAgICAgICMgRklYTUU6IEZpZ3Vy
ZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5zIGluIGEgdmFyaWFibGUuCi0gICAgICAg
IFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3Ry
ZWFtZXJ8Z3RrfGhhaWt1fGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBv
c2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAor
ICAgICAgICBbJ2V4Y2x1ZGUnLCAnKGJyZXd8Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5
cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xw
b3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwK
ICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8Q3VybHxHdGt8
SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291cHxTeW1iaWFu
fFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNsdWRlJywgJ0Fs
bEluT25lXFwuY3BwJCddLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
LSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0
ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lk
Z2V0LT5pc1BsdWdpblZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2hhaWt1
L0VkaXRvckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2hh
aWt1L0VkaXRvckhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2hhaWt1L0VkaXRvckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0KLSNpbmNsdWRlICJDbGlwYm9hcmQu
aCIKLSNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKLSNpbmNsdWRlICJDbGlwYm9h
cmRIYWlrdS5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxDbGlwYm9h
cmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBGcmFtZSopCi17Ci0gICAgcmV0dXJuIENsaXBib2FyZEhhaWt1OjpjcmVhdGUocG9saWN5
LCBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQpJbmRleDogU291cmNlL1dlYkNvcmUvZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2d5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDggKzc0LDggQEAK
ICAgICAgICAgWydleGNsdWRlJywgJ3RoaXJkcGFydHkvJ10sCiAKICAgICAgICAgIyBGSVhNRTog
RmlndXJlIG91dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJpYWJsZS4KLSAg
ICAgICAgWydleGNsdWRlJywgJyhicmV3fGNhaXJvfGNocm9taXVtfGN1cmx8ZWZsfGZyZWV0eXBl
fGZmdHd8Z3N0cmVhbWVyfGd0a3xoYWlrdXxsaW51eHxta2x8b3BlbnZnfHBhbmdvfHF0fHNraWF8
c291cHxzeW1iaWFufHRleG1hcHxpcGhvbmV8djh8d2lufHdpbmNlfHd4KS8nXSwKLSAgICAgICAg
WydleGNsdWRlJywgJyhCcmV3fENhaXJvfEN1cmx8Q2hyb21pdW18RWZsfEhhaWt1fEd0a3xMaW51
eHxPcGVuVHlwZXxRdHxTYWZhcml8U291cHxTeW1iaWFufFY4fFdpbnxXaW5DRXxXeClcXC4oY3Bw
fG1tPykkJ10sCisgICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjaHJvbWl1bXxjdXJs
fGVmbHxmcmVldHlwZXxmZnR3fGdzdHJlYW1lcnxndGt8bGludXh8bWtsfG9wZW52Z3xwYW5nb3xx
dHxza2lhfHNvdXB8c3ltYmlhbnx0ZXhtYXB8aXBob25lfHY4fHdpbnx3aW5jZXx3eCkvJ10sCisg
ICAgICAgIFsnZXhjbHVkZScsICcoQnJld3xDYWlyb3xDdXJsfENocm9taXVtfEVmbHxHdGt8TGlu
dXh8T3BlblR5cGV8UXR8U2FmYXJpfFNvdXB8U3ltYmlhbnxWOHxXaW58V2luQ0V8V3gpXFwuKGNw
cHxtbT8pJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnQ2hyb21pdW1bXi9dKlxcLihjcHB8bW0/
KSQnXSwKIAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvJ10s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCShyZXZp
c2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEZvbnQu
aCIKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBhIGJsYWNrbGlzdCBpbnN0ZWFk
IG9mIGEgd2hpdGVsaXN0Ci0jaWYgVVNFKENHKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
R1RLKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmICghT1MoREFSV0lOKSB8fCBVU0UoU0tJQV9P
Tl9NQUNfQ0hST01JVU0pKSkgfHwgUExBVEZPUk0oSEFJS1UpIHx8IE9TKFdJTkNFKQorI2lmIFVT
RShDRykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgKFBMQVRGT1JNKENIUk9N
SVVNKSAmJiAoIU9TKERBUldJTikgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKSkpIHx8IE9T
KFdJTkNFKQogI2RlZmluZSBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTU5MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5NDgsNyArMjk0OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjppc0tleWJvYXJkT3B0aW9u
VGFiKEsKIAogYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50SW52ZXJ0c1RhYnNUb0xpbmtzQ2xpZW50
Q2FsbFJlc3VsdChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShIQUlLVSkgfHwgUExBVEZPUk0oRUZMKQorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICByZXR1cm4g
RXZlbnRIYW5kbGVyOjppc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKICNlbHNlCiAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxl
ckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdD
b250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
cmFnQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLQotI2luY2x1ZGUgPElu
dGVyZmFjZURlZnMuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBUaGVz
ZSB2YWx1ZXMgYXJlIHN0cmFpZ2h0IG91dCBvZiBEcmFnQ29udHJvbGxlck1hYywgc28gcHJvYmFi
bHkgaGF2ZQotLy8gbGl0dGxlIGNvcnJlbGF0aW9uIHdpdGggSGFpa3Ugc3RhbmRhcmRzLi4uCi1j
b25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQgPSAyOwotY29uc3Qg
aW50IERyYWdDb250cm9sbGVyOjpNYXhPcmlnaW5hbEltYWdlQXJlYSA9IDE1MDAgKiAxNTAwOwot
Y29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvblJpZ2h0SW5zZXQgPSA3OwotY29uc3Qg
aW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbUluc2V0ID0gMzsKLQotY29uc3QgZmxv
YXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7Ci0KLQotYm9vbCBEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCi17Ci0gICAgaWYgKG1vZGlmaWVy
cygpICYgQl9DT01NQU5EX0tFWSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLURyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24o
RHJhZ0RhdGEqIGRyYWdEYXRhKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGxvZ2ljIGlzIGluY29t
cGxldGUKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKCkpCi0gICAgICAgIHJldHVybiBE
cmFnT3BlcmF0aW9uQ29weTsKLQotICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKLX0KLQot
Y29uc3QgSW50U2l6ZSYgRHJhZ0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQotewotICAg
IHN0YXRpYyBjb25zdCBJbnRTaXplIG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOwotCi0gICAg
cmV0dXJuIG1heERyYWdJbWFnZVNpemU7Ci19Ci0KLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFu
dXBBZnRlclN5c3RlbURyYWcoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3Bw
CShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5k
bGVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0KLSNp
bmNsdWRlICJDbGlwYm9hcmRIYWlrdS5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotCi0jaW5jbHVkZSA8aW50ZXJmYWNlL1ZpZXcuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBFdmVudEhhbmRsZXI6OlRl
eHREcmFnRGVsYXkgPSAwLjA7Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29u
dHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Ci17Ci0gICAgYm9vbCBoYW5kbGluZ09w
dGlvblRhYiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOwotCi0gICAgcmV0dXJuIGhhbmRs
aW5nT3B0aW9uVGFiOwotfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXco
KQotewotICAgIEJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgp
OwotICAgIGlmICh2aWV3ICYmIHZpZXctPkxvY2tMb29wZXJXaXRoVGltZW91dCg1MDAwKSA9PSBC
X09LKSB7Ci0gICAgICAgIHZpZXctPk1ha2VGb2N1cyh0cnVlKTsKLSAgICAgICAgdmlldy0+VW5s
b2NrTG9vcGVyKCk7Ci0gICAgfQotCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsK
LSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3Vz
ZWRGcmFtZShtX2ZyYW1lKTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2
ZW50KQotewotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0
by4KLSAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0
Tm9kZShldmVudCktPnJlbmRlcmVyKCkgOiAwOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQt
PmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNl
RG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwotfQot
Ci1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVu
ZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQpCi17Ci0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotfQotCi1ib29sIEV2ZW50SGFuZGxl
cjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVy
OjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgY29u
c3QKLXsKLSAgICAvLyBPbiBIYWlrdSwgY2xpY2tzIHdoaWNoIGFjdGl2YXRlIHRoZSB3aW5kb3cg
aW4gbm9uIGZvY3VzLWZvbGxvd3MtbW91c2UgbW9kZQotICAgIC8vIGFyZSBub3QgcGFzc2VkIHRv
IHRoZSB3aW5kb3csIHNvIGFueSBldmVudCB3ZSBnZW5lcmF0ZSBpcyBub3QgdGhlIGFjdGl2YXRp
b24KLSAgICAvLyBldmVudC4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdp
ZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lk
Z2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwot
fQotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0Ns
aXBib2FyZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENsaXBib2FyZEhhaWt1OjpjcmVhdGUoQ2xp
cGJvYXJkV3JpdGFibGUsIENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwotfQotCi1ib29sIEV2ZW50
SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCi17Ci0gICAgc3ViZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQobWV2LmV2ZW50KCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJm
cmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSwg
SGl0VGVzdFJlc3VsdCogaG92ZXJlZE5vZGUpCi17Ci0gICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChtZXYuZXZlbnQoKSwgaG92ZXJlZE5vZGUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBz
dWJmcmFtZSkKLXsKLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KG1ldi5ldmVudCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQg
RXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQotewotICAgIC8vIE5PVEU6IE9uIEhh
aWt1LCB0aGUgdXNlciBjYW4gY2hvb3NlIEFsdCBvciBDdHJsIGFzIGFjY2VzcyBrZXksIGJ1dAot
ICAgIC8vIHRoZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgYWxyZWFkeSB0YWtlcyBjYXJlIG9mIHRo
aXMsIGludGVybmFsbHksCi0gICAgLy8gd2UgYWx3YXlzIHVzZSBBbHQuCi0gICAgcmV0dXJuIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRnJhbWVIYWlrdS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcAkocmV2aXNp
b24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1lSGFpa3UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0lt
YWdlRm9yU2VsZWN0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgs
NiBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrQWN0aW9uIEd0a0FjdGlvbjsKICNpbmNsdWRlIDxRQWN0
aW9uPgogI2VsaWYgUExBVEZPUk0oV1gpCiBjbGFzcyB3eE1lbnVJdGVtOwotI2VsaWYgUExBVEZP
Uk0oSEFJS1UpCi1jbGFzcyBCTWVudUl0ZW07CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMjA4LDggKzIwNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBj
aGVja2VkOwogICAgICAgICBib29sIGVuYWJsZWQ7CiAgICAgfTsKLSNlbGlmIFBMQVRGT1JNKEhB
SUtVKQotICAgIHR5cGVkZWYgQk1lbnVJdGVtKiBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb247
CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBzdHJ1Y3QgUGxhdGZvcm1NZW51SXRlbURl
c2NyaXB0aW9uIHsKICAgICAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw2IEBAIHR5
cGVkZWYgSElDT04gSENVUlNPUjsKICNpbmNsdWRlIDxRQ3Vyc29yPgogI2VsaWYgUExBVEZPUk0o
Q0hST01JVU0pCiAjaW5jbHVkZSAiUGxhdGZvcm1DdXJzb3IuaCIKLSNlbGlmIFBMQVRGT1JNKEhB
SUtVKQotI2luY2x1ZGUgPGFwcC9DdXJzb3IuaD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFD
KQpAQCAtOTYsOCArOTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiB3eEN1
cnNvciogUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBT
ZWUgUGxhdGZvcm1DdXJzb3IuaAotI2VsaWYgUExBVEZPUk0oSEFJS1UpCi0gICAgdHlwZWRlZiBC
Q3Vyc29yKiBQbGF0Zm9ybUN1cnNvcjsKICNlbHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bUN1cnNvcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCShyZXZp
c2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDYgQEAgY2xhc3MgRGF0YU9iamVjdEd0azsKIHR5cGVkZWYg
V2ViQ29yZTo6RGF0YU9iamVjdEd0ayogRHJhZ0RhdGFSZWY7CiAjZWxpZiBQTEFURk9STShDSFJP
TUlVTSkKICNpbmNsdWRlICJEcmFnRGF0YVJlZi5oIgotI2VsaWYgUExBVEZPUk0oSEFJS1UpCi1j
bGFzcyBCTWVzc2FnZTsKLXR5cGVkZWYgY2xhc3MgQk1lc3NhZ2UqIERyYWdEYXRhUmVmOwogI2Vs
aWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiB2b2lkKiBEcmFnRGF0YVJlZjsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDgg
KzQ5LDYgQEAgY2xhc3Mgd3hEcmFnSW1hZ2U7CiAjaW5jbHVkZSAiRHJhZ0ltYWdlUmVmLmgiCiAj
ZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19z
dXJmYWNlX3Q7Ci0jZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJCaXRtYXA7CiAjZW5kaWYK
IAogLy9XZSBuZWVkIHRvICNkZWZpbmUgWU9mZnNldCBhcyBpdCBuZWVkcyB0byBiZSBzaGFyZWQg
d2l0aCBXZWJLaXQKQEAgLTc0LDggKzcyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5
cGVkZWYgd3hEcmFnSW1hZ2UqIERyYWdJbWFnZVJlZjsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAg
ICB0eXBlZGVmIGNhaXJvX3N1cmZhY2VfdCogRHJhZ0ltYWdlUmVmOwotI2VsaWYgUExBVEZPUk0o
SEFJS1UpCi0gICAgdHlwZWRlZiBCQml0bWFwKiBEcmFnSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9S
TShFRkwpCiAgICAgdHlwZWRlZiB2b2lkKiBEcmFnSW1hZ2VSZWY7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCShyZXZp
c2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsNiBAQCBRVF9FTkRfTkFNRVNQQUNF
CiBjbGFzcyB3eEtleUV2ZW50OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShIQUlLVSkKLWNsYXNz
IEJNZXNzYWdlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBf
RXZhc19FdmVudF9LZXlfRG93biBFdmFzX0V2ZW50X0tleV9Eb3duOwogdHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfRXZlbnRfS2V5X1VwIEV2YXNfRXZlbnRfS2V5X1VwOwpAQCAtMTg3LDEwICsxODMsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCh3eEtl
eUV2ZW50Jik7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotICAgICAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UqKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShDSFJPTUlVTSkKICAgICAgICAgYm9vbCBpc1N5c3RlbUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTeXN0ZW1LZXk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oCShyZXZpc2lvbiA5NTkyMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAgY2xhc3MgTlNNdXRhYmxlQXJyYXk7CiB0eXBl
ZGVmIHN0cnVjdCBfR3RrTWVudSBHdGtNZW51OwogI2VsaWYgUExBVEZPUk0oV1gpCiBjbGFzcyB3
eE1lbnU7Ci0jZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJNZW51OwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU0LDggKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHR5cGVkZWYgR3RrTWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247CiAjZWxpZiBQTEFU
Rk9STShXWCkKICAgICB0eXBlZGVmIHd4TWVudSogUGxhdGZvcm1NZW51RGVzY3JpcHRpb247Ci0j
ZWxpZiBQTEFURk9STShIQUlLVSkKLSAgICB0eXBlZGVmIEJNZW51KiBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbjsKICNlbHNlCiAgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1Nyw2IEBAIHR5cGVk
ZWYgbG9uZyBMUEFSQU07CiBjbGFzcyB3eE1vdXNlRXZlbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKEhBSUtVKQotY2xhc3MgQk1lc3NhZ2U7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIAogICAgIC8vIFRoZXNlIGJ1dHRvbiBudW1iZXJzIG1hdGNoIHRoZSBvbmVzIHVzZWQg
aW4gdGhlIERPTSBBUEksIDAgdGhyb3VnaCAyLCBleGNlcHQgZm9yIE5vQnV0dG9uIHdoaWNoIGlz
bid0IHNwZWNpZmllZC4KQEAgLTE2MywxMCArMTU5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3Qgd3hNb3VzZUV2ZW50JiwgY29uc3Qgd3hQ
b2ludCYgZ2xvYmFsUG9pbnQsIGludCBjbGlja0NvdW50KTsKICNlbmRpZgogCi0jaWYgUExBVEZP
Uk0oSEFJS1UpCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCBCTWVzc2FnZSopOwot
I2VuZGlmCi0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIExheW91dFBvaW50IG1fcG9zaXRpb247
CiAgICAgICAgIExheW91dFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTEgKzc4LDYgQEAgY2xhc3Mgd3hXaW5k
b3c7CiB0eXBlZGVmIHd4V2luZG93KiBQbGF0Zm9ybVdpZGdldDsKICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oSEFJS1UpCi1jbGFzcyBCVmlldzsKLXR5cGVkZWYgQlZpZXcqIFBsYXRmb3JtV2lkZ2V0
OwotI2VuZGlmCi0KICNpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmpl
Y3QgRXZhc19PYmplY3Q7CiB0eXBlZGVmIHN0cnVjdCBfRXZhcyBFdmFzOwpAQCAtMTMzLDE0ICsx
MjgsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1XaWRnZXQgcGxhdGZvcm1XaWRnZXQoKSBjb25z
dDsKICAgICB2b2lkIHNldFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0KTsKIAotI2lmIFBM
QVRGT1JNKEhBSUtVKQotICAgIFBsYXRmb3JtV2lkZ2V0IHRvcExldmVsUGxhdGZvcm1XaWRnZXQo
KSBjb25zdCB7IHJldHVybiBtX3RvcExldmVsUGxhdGZvcm1XaWRnZXQ7IH0KLSAgICB2b2lkIHNl
dFRvcExldmVsUGxhdGZvcm1XaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotICAgIHsKLSAg
ICAgICAgbV90b3BMZXZlbFBsYXRmb3JtV2lkZ2V0ID0gd2lkZ2V0OwotICAgIH0KLSNlbmRpZgot
CiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBmcmFtZVJlY3QoKS54KCk7IH0KICAgICBpbnQg
eSgpIGNvbnN0IHsgcmV0dXJuIGZyYW1lUmVjdCgpLnkoKTsgfQogICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGZyYW1lUmVjdCgpLndpZHRoKCk7IH0KQEAgLTI4NSw5ICsyNzIsNiBAQCBw
cml2YXRlOgogICAgIFFXZWFrUG9pbnRlcjxRT2JqZWN0PiBtX2JpbmRpbmdPYmplY3Q7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotICAgIFBsYXRmb3JtV2lkZ2V0IG1fdG9wTGV2ZWxQ
bGF0Zm9ybVdpZGdldDsKLSNlbmRpZgogfTsKIAogI2lmICFQTEFURk9STShNQUMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlz
aW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDYgQEAgY2xhc3MgTlNJbWFnZTsKIHR5
cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
SEFJS1UpCi1jbGFzcyBCQml0bWFwOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBzdHJ1Y3QgRnJhbWVEYXRhOwogfQpAQCAtMTg4LDEwICsxODQsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShIQUlLVSkKLSAgICB2aXJ0dWFs
IEJCaXRtYXAqIGdldEJCaXRtYXAoKSBjb25zdDsKLSNlbmRpZgotCiAgICAgc2l6ZV90IGN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAgICAgc2l6ZV90IGZy
YW1lQ291bnQoKTsKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gOTU5
MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxMCArNTMsNiBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JB
OwogY2xhc3Mgd3hDb2xvdXI7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotc3RydWN0
IHJnYl9jb2xvcjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9y
OwpAQCAtMTQ4LDExICsxNDQsNiBAQCBwdWJsaWM6CiAgICAgQ29sb3IoQ0dDb2xvclJlZik7CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotICAgIENvbG9yKGNvbnN0IHJnYl9jb2xvciYp
OwotICAgIG9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0OwotI2VuZGlmCi0KICAgICBzdGF0aWMg
Ym9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpOwogICAg
IHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqIG5hbWUsIHVuc2lnbmVkIGxl
bmd0aCwgUkdCQTMyJiByZ2IpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAg
KzUwLDYgQEAgY2xhc3MgUVBvaW50RjsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oSEFJS1UpCi1jbGFzcyBCUG9pbnQ7Ci0jZW5kaWYKLQogI2lmIFVTRShTS0lBKQog
c3RydWN0IFNrUG9pbnQ7CiAjZW5kaWYKQEAgLTE1NiwxMSArMTUyLDYgQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oSEFJS1Up
Ci0gICAgRmxvYXRQb2ludChjb25zdCBCUG9pbnQmKTsKLSAgICBvcGVyYXRvciBCUG9pbnQoKSBj
b25zdDsKLSNlbmRpZgotCiAjaWYgVVNFKFNLSUEpCiAgICAgb3BlcmF0b3IgU2tQb2ludCgpIGNv
bnN0OwogICAgIEZsb2F0UG9pbnQoY29uc3QgU2tQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDk1OTIwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDEwICs1MSw2IEBAIFFUX0VORF9OQU1FU1BBQ0UKIGNsYXNzIHd4UmVjdDJERG91
YmxlOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWN0OwotI2VuZGlm
Ci0KICNpZiBVU0UoU0tJQSkKIHN0cnVjdCBTa1JlY3Q7CiAjZW5kaWYKQEAgLTE5OCwxMSArMTk0
LDYgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIHd4UmVjdDJERG91YmxlKCkgY29uc3Q7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotICAgIEZsb2F0UmVjdChjb25zdCBCUmVjdCYpOwot
ICAgIG9wZXJhdG9yIEJSZWN0KCkgY29uc3Q7Ci0jZW5kaWYKLQogI2lmIFVTRShTS0lBKQogICAg
IEZsb2F0UmVjdChjb25zdCBTa1JlY3QmKTsKICAgICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2
aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw5ICs2MSw2IEBAIHR5cGVkZWYgY2Fpcm9fcGF0dGVy
bl90KiBQbGF0Zm9ybUdyYWRpZW4KIGNsYXNzIFNrU2hhZGVyOwogdHlwZWRlZiBjbGFzcyBTa1No
YWRlciogUGxhdGZvcm1HcmFkaWVudDsKIHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3Jt
UGF0dGVybjsKLSNlbGlmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQkdyYWRpZW50OwotdHlwZWRl
ZiBCR3JhZGllbnQqIFBsYXRmb3JtR3JhZGllbnQ7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUdyYWRpZW50OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVRleHREcmEKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKFFUKSAmJiAhVVNFKENB
SVJPKSAmJiAhVVNFKFNLSUEpICYmICFQTEFURk9STShIQUlLVSkgJiYgIVBMQVRGT1JNKE9QRU5W
RykKKyNpZiAhUExBVEZPUk0oUVQpICYmICFVU0UoQ0FJUk8pICYmICFVU0UoU0tJQSkgJiYgIVBM
QVRGT1JNKE9QRU5WRykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDEwICs4MCw2IEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWE7CiB0eXBl
ZGVmIFBsYXRmb3JtQ29udGV4dFNraWEgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwog
fQogdHlwZWRlZiBXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0OwotI2VsaWYgUExBVEZPUk0oSEFJS1UpCi1jbGFzcyBCVmlldzsKLXR5cGVkZWYgQlZp
ZXcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgcGF0dGVybjsKICNlbGlmIE9TKFdJ
TkNFKQogdHlwZWRlZiBzdHJ1Y3QgSERDX18gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxz
ZQpAQCAtNTAxLDEwICs0OTcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdka0V2
ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShIQUlLVSkKLSAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7Ci0jZW5kaWYK
LQogICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUp
OwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhUXQuaCIKICNlbGlm
IFVTRShTS0lBKQogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YVNraWEuaCIKLSNlbGlmIFBMQVRG
T1JNKEhBSUtVKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUhhaWt1LmgiCiAjZWxpZiBPUyhX
SU5DRSkKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFXaW5jZS5oIgogI2VsaWYgUExBVEZPUk0o
V1gpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNiBAQCB0eXBlZGVm
IHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBOYXRpdmVJbWFnZVNraWE7CiB9Ci0jZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJC
aXRtYXA7CiAjZWxpZiBPUyhXSU5DRSkKICNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKICNlbmRp
ZgpAQCAtOTIsOCArOTAsNiBAQCB0eXBlZGVmIHd4Qml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKIHR5
cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFVTRShTS0lBKQog
dHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWEqIE5hdGl2ZUltYWdlUHRyOwotI2VsaWYg
UExBVEZPUk0oSEFJS1UpCi10eXBlZGVmIEJCaXRtYXAqIE5hdGl2ZUltYWdlUHRyOwogI2VsaWYg
T1MoV0lOQ0UpCiB0eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50
LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQCBjbGFzcyBRUG9pbnQ7
CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBf
R2RrUG9pbnQgR2RrUG9pbnQ7Ci0jZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJQb2ludDsK
ICNlbGlmIFBMQVRGT1JNKEVGTCkKIHR5cGVkZWYgc3RydWN0IF9FdmFzX1BvaW50IEV2YXNfUG9p
bnQ7CiAjZW5kaWYKQEAgLTEzOCw5ICsxMzYsNiBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShH
VEspCiAgICAgSW50UG9pbnQoY29uc3QgR2RrUG9pbnQmKTsKICAgICBvcGVyYXRvciBHZGtQb2lu
dCgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oSEFJS1UpCi0gICAgZXhwbGljaXQgSW50UG9pbnQo
Y29uc3QgQlBvaW50Jik7Ci0gICAgb3BlcmF0b3IgQlBvaW50KCkgY29uc3Q7CiAjZWxpZiBQTEFU
Rk9STShFRkwpCiAgICAgZXhwbGljaXQgSW50UG9pbnQoY29uc3QgRXZhc19Qb2ludCYpOwogICAg
IG9wZXJhdG9yIEV2YXNfUG9pbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1
MSw2IEBAIFFUX0VORF9OQU1FU1BBQ0UKICNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogdHlwZWRl
ZiBzdHJ1Y3QgX0dka1JlY3RhbmdsZSBHZGtSZWN0YW5nbGU7CiAjZW5kaWYKLSNlbGlmIFBMQVRG
T1JNKEhBSUtVKQotY2xhc3MgQlJlY3Q7CiAjZWxpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0
cnVjdCBfRWluYV9SZWN0YW5nbGUgRWluYV9SZWN0YW5nbGU7CiAjZW5kaWYKQEAgLTE4OSw5ICsx
ODcsNiBAQCBwdWJsaWM6CiAgICAgSW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmKTsKICAgICBv
cGVyYXRvciBHZGtSZWN0YW5nbGUoKSBjb25zdDsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oSEFJ
S1UpCi0gICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBCUmVjdCYpOwotICAgIG9wZXJhdG9yIEJS
ZWN0KCkgY29uc3Q7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgZXhwbGljaXQgSW50UmVjdChj
b25zdCBFaW5hX1JlY3RhbmdsZSYpOwogICAgIG9wZXJhdG9yIEVpbmFfUmVjdGFuZ2xlKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRTaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oCShy
ZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNiBAQCB0eXBlZGVmIHN0cnVjdCB0YWdT
SVpFIFNJWkU7CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFTaXplOwogUVRfRU5EX05BTUVT
UEFDRQotI2VsaWYgUExBVEZPUk0oSEFJS1UpCi1jbGFzcyBCU2l6ZTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV1gpCkBAIC0xMjUsMTEgKzEyMyw2IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBR
U2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShIQUlLVSkKLSAgICBleHBsaWNp
dCBJbnRTaXplKGNvbnN0IEJTaXplJik7Ci0gICAgb3BlcmF0b3IgQlNpemUoKSBjb25zdDsKLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgSW50U2l6ZShjb25zdCB3eFNpemUmKTsKICAg
ICBvcGVyYXRvciB3eFNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw2IEBAIHR5cGVk
ZWYgV2ViQ29yZTo6Q2Fpcm9QYXRoIFBsYXRmb3JtUGF0aDsKICNlbGlmIFVTRShTS0lBKQogY2xh
c3MgU2tQYXRoOwogdHlwZWRlZiBTa1BhdGggUGxhdGZvcm1QYXRoOwotI2VsaWYgUExBVEZPUk0o
SEFJS1UpCi1jbGFzcyBCUmVnaW9uOwotdHlwZWRlZiBCUmVnaW9uIFBsYXRmb3JtUGF0aDsKICNl
bGlmIE9TKFdJTkNFKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBsYXRmb3JtUGF0
aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgJKHJl
dmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5ICs1NSw2IEBAIHR5cGVkZWYgd3hHcmFwaGljc0Jy
dXNoKiBQbGF0Zm9ybVBhdHRlcm4KIGNsYXNzIHd4QnJ1c2g7CiB0eXBlZGVmIHd4QnJ1c2gqIFBs
YXRmb3JtUGF0dGVyblB0cjsKICNlbmRpZiAvLyBVU0UoV1hHQykKLSNlbGlmIFBMQVRGT1JNKEhB
SUtVKQotI2luY2x1ZGUgPGludGVyZmFjZS9HcmFwaGljc0RlZnMuaD4KLXR5cGVkZWYgcGF0dGVy
biogUGxhdGZvcm1QYXR0ZXJuUHRyOwogI2VsaWYgT1MoV0lOQ0UpCiB0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtUGF0dGVyblB0cjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDEwICs1Nyw2IEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSog
QVRTVVN0eWwKICNpbmNsdWRlIDxRRm9udD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oSEFJS1Up
Ci0jaW5jbHVkZSA8Rm9udC5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRm9udERlc2NyaXB0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0KLSNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Q29sb3I6OkNvbG9yKGNvbnN0IHJnYl9jb2xvciYgY29sb3IpCi0gICAgOiBtX2NvbG9yKG1ha2VS
R0JBKGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUsIGNvbG9yLmFscGhhKSkKLSAg
ICAsIG1fdmFsaWQodHJ1ZSkKLXsKLX0KLQotQ29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VfY29sb3IocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxw
aGEoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1
LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0KLSNpbmNsdWRlIDxQb2ludC5o
PgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25z
dCBCUG9pbnQmIHBvaW50KQotICAgIDogbV94KHBvaW50LngpCi0gICAgLCBtX3kocG9pbnQueSkK
LXsKLX0KLQotRmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gQlBvaW50KG1feCwgbV95KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRSZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBB
w59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2lu
Y2x1ZGUgPFJlY3QuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQotICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRUb3Ao
KSkKLSAgICAsIG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0LkhlaWdodCgpICsgMSkKLXsK
LX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEJS
ZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCShy
ZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ZvbnRDYWNoZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5k
ZT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250RGF0
YS5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgPFN0cmluZy5oPgotI2luY2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgp
Ci17Ci19Ci0KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhIGRhdGEoZm9udC5mb250RGVzY3JpcHRp
b24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZvbnRE
YXRhKCZkYXRhLCBEb05vdFJldGFpbik7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBmb250X2Zh
bWlseSBmYW1pbHk7Ci0gICAgZm9udF9zdHlsZSBzdHlsZTsKLSAgICBiZV9wbGFpbl9mb250LT5H
ZXRGYW1pbHlBbmRTdHlsZSgmZmFtaWx5LCAmc3R5bGUpOwotICAgIEF0b21pY1N0cmluZyBwbGFp
bkZvbnRGYW1pbHkoZmFtaWx5KTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCBwbGFpbkZvbnRGYW1pbHksIGZhbHNlLCBzaG91bGRSZXRhaW4pOwotfQotCi1G
b250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KQotewotICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24s
IGZhbWlseSk7Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDk1OTIwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhKCkKLXsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBG
b250T3JpZW50YXRpb24sIFRleHRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgRm9udFJl
bmRlcmluZ01vZGUpCi17Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwg
aXRhbGljKTsKLX0KLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgbmVl
ZCBzdXBwb3J0IGluIEhhaWt1IHRvIHJlYWQgZm9udHMgZnJvbSBtZW1vcnkgdG8gaW1wbGVtZW50
IHRoaXMuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6
c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiAvKiBmb3JtYXQgKi8pCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCShyZXZp
c2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotI2RlZmluZSBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhX2gKLQotI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRS
ZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSAiRm9udFdpZHRoVmFyaWFudC5oIgotI2luY2x1ZGUg
IlRleHRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci0gICAgY2xhc3MgU2hh
cmVkQnVmZmVyOwotCi0gICAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgewotICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q3VzdG9tUGxhdGZvcm1EYXRhKTsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKSB7IH0KLSAgICAgICAgfkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEoKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1h
dChjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9y
bURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiA9
IEhvcml6b250YWwsIFRleHRPcmllbnRhdGlvbiA9IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmln
aHQsIEZvbnRXaWR0aFZhcmlhbnQgPSBSZWd1bGFyV2lkdGgsIEZvbnRSZW5kZXJpbmdNb2RlID0g
Tm9ybWFsUmVuZGVyaW5nTW9kZSk7Ci0gICAgfTsKLQotICAgIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKik7Ci0KLX0KLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ZvbnRIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkZv
bnREYXRhLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udFNl
bGVjdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxGb250Lmg+Ci0jaW5jbHVkZSA8U3RyaW5nLmg+Ci0jaW5j
bHVkZSA8Vmlldy5oPgotCi0KLS8vIEZJWE1FOiBUZW1wIHJvdXRpbmUgdG8gY29udmVydCB1bmlj
b2RlIGNoYXJhY3RlciB0byBVVEY4LgotaW50IGNoYXJVbmljb2RlVG9VVEY4SEFDSyh1bnNpZ25l
ZCBzaG9ydCBnbHlwaCwgY2hhciogb3V0KQotewotICAgIGludCBpID0gMDsKLQotICAgIGlmIChn
bHlwaCA8IDB4MDA4MCkKLSAgICAgICAgb3V0W2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPihnbHlw
aCk7Ci0gICAgZWxzZSBpZiAoZ2x5cGggPCAweDA4MDApIHsgIC8vIDIgYnl0ZXMKLSAgICAgICAg
b3V0W2krK10gPSAweGMwIHwgKGdseXBoID4+IDYpOwotICAgICAgICBvdXRbaSsrXSA9IDB4ODAg
fCAoZ2x5cGggJiAweDNGKTsKLSAgICB9IGVsc2UgaWYgKGdseXBoID4gMHgwODAwKSB7ICAvLyAz
IGJ5dGVzCi0gICAgICAgIG91dFtpKytdID0gMHhlMCB8IChnbHlwaCA+PiAxMik7Ci0gICAgICAg
IG91dFtpKytdID0gMHg4MCB8ICgoZ2x5cGggPj4gNikgJiAweDNGKTsKLSAgICAgICAgb3V0W2kr
K10gPSAweDgwIHwgKGdseXBoICYgMHgzRik7Ci0gICAgfQotCi0gICAgb3V0W2ldID0gJ1wwJzsK
LSAgICByZXR1cm4gaTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEZvbnQ6OmNh
blJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0
KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17
Ci0gICAgQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRleHQtPmZpbGxDb2xvcigpOwotICAgIEJW
aWV3KiB2aWV3ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBCRm9u
dCogbV9mb250ID0gZm9udC0+cGxhdGZvcm1EYXRhKCkuZm9udCgpOwotCi0gICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAg
dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKLSAgICB2aWV3LT5TZXRGb250KG1fZm9udCk7Ci0K
LSAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSBjb25zdF9jYXN0PEdseXBoQnVmZmVyR2x5
cGgqPihnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSkpOwotICAgIGZsb2F0IG9mZnNldCA9IHBvaW50
LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7Ci0gICAgICAg
IGNoYXIgb3V0WzRdOwotICAgICAgICBjaGFyVW5pY29kZVRvVVRGOEhBQ0soZ2x5cGhzW2ldLCBv
dXQpOwotCi0gICAgICAgIHZpZXctPkRyYXdTdHJpbmcob3V0LCBzaXplb2Yob3V0KSwgQlBvaW50
KG9mZnNldCwgcG9pbnQueSgpKSk7Ci0gICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlQXQoZnJvbSArIGkpOwotICAgIH0KLX0KLQotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNv
bnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBj
b25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAq
LykgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1mbG9hdCBGb250OjpmbG9h
dFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZs
b3cpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
RmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLWludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDk1
OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRm
b3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBa
YWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBN
YXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udFBsYXRmb3Jt
RGF0YV9oCi0KLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgotI2luY2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAg
ICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCi0gICAgICAgICAgICB7
IH0KLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKCkKLSAgICAgICAgICAgIDogbV9mb250KDAp
Ci0gICAgICAgICAgICB7IH0KLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKLSAgICAgICAgRm9udFBs
YXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0gICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotCi0gICAgICAgIH5G
b250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICAgICAgQkZvbnQqIGZvbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQ7IH0KLQotICAgICAgICBib29sIGlzRml4ZWRQaXRjaCgpOwotICAgICAgICBmbG9h
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIGJvb2wgYm9sZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYm9sZDsgfQotICAgICAgICBib29sIG9ibGlxdWUoKSBjb25zdCB7IHJl
dHVybiBtX29ibGlxdWU7IH0KLQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdDsKLQotICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OwotCi0jaWZuZGVmIE5E
RUJVRwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotCi0gICAg
ICAgIEJGb250KiBtX2ZvbnQ7Ci0gICAgICAgIGZsb2F0IG1fc2l6ZTsKLSAgICAgICAgYm9vbCBt
X2JvbGQ7Ci0gICAgICAgIGJvb2wgbV9vYmxpcXVlOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
c3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCShy
ZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgotCi0jaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpm
aWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKLXsKLSAgICBib29sIGlzVXRmMTYgPSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpzaXpl
OwotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVy
OwotCi0gICAgICAgIGlmIChpc1V0ZjE2KSB7Ci0gICAgICAgICAgICBVQ2hhciBsZWFkID0gY2hh
cmFjdGVyQnVmZmVyW2kgKiAyXTsKLSAgICAgICAgICAgIFVDaGFyIHRyYWlsID0gY2hhcmFjdGVy
QnVmZmVyW2kgKiAyICsgMV07Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkobGVhZCwgdHJhaWwpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoYXJh
Y3RlciA9IGNoYXJhY3RlckJ1ZmZlcltpXTsKLQotICAgICAgICBpZiAoIWNoYXJhY3RlcikKLSAg
ICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgY2hhcmFjdGVyLCBmb250RGF0YSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFkaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVA
dGhlb2xsaXZpZXJzLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8
c3VwZXJzdGlwcGlAZ214LmRlPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
PEdyYWRpZW50TGluZWFyLmg+Ci0jaW5jbHVkZSA8R3JhZGllbnRSYWRpYWwuaD4KLSNpbmNsdWRl
IDxWaWV3Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYWRpZW50OjpwbGF0
Zm9ybURlc3Ryb3koKQotewotICAgIGRlbGV0ZSBtX2dyYWRpZW50OwotfQotCi1QbGF0Zm9ybUdy
YWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKLXsKLSAgICBpZiAobV9ncmFkaWVu
dCkKLSAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci0KLSAgICBpZiAobV9yYWRpYWwpIHsKLSAg
ICAgICAgLy8gVE9ETzogU3VwcG9ydCBtX3IwPwotICAgICAgICBtX2dyYWRpZW50ID0gbmV3IEJH
cmFkaWVudFJhZGlhbChtX3AwLCBtX3IxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9ncmFkaWVu
dCA9IG5ldyBCR3JhZGllbnRMaW5lYXIobV9wMCwgbV9wMSk7Ci0gICAgc2l6ZV90IHNpemUgPSBt
X3N0b3BzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBjb25zdCBDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOwotICAgICAgICByZ2Jf
Y29sb3IgY29sb3I7Ci0gICAgICAgIGNvbG9yLnJlZCA9IHN0YXRpY19jYXN0PHVpbnQ4PihzdG9w
LnJlZCAqIDI1NSk7Ci0gICAgICAgIGNvbG9yLmdyZWVuID0gc3RhdGljX2Nhc3Q8dWludDg+KHN0
b3AuZ3JlZW4gKiAyNTUpOwotICAgICAgICBjb2xvci5ibHVlID0gc3RhdGljX2Nhc3Q8dWludDg+
KHN0b3AuYmx1ZSAqIDI1NSk7Ci0gICAgICAgIGNvbG9yLmFscGhhID0gc3RhdGljX2Nhc3Q8dWlu
dDg+KHN0b3AuYWxwaGEgKiAyNTUpOwotICAgICAgICBtX2dyYWRpZW50LT5BZGRDb2xvcihjb2xv
ciwgc3RvcC5zdG9wKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci19Ci0KLXZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPkZpbGxSZWN0KHJlY3Qs
ICpwbGF0Zm9ybUdyYWRpZW50KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxHcmFwaGljc0RlZnMuaD4KLSNpbmNsdWRl
IDxSZWdpb24uaD4KLSNpbmNsdWRlIDxWaWV3Lmg+Ci0jaW5jbHVkZSA8V2luZG93Lmg+Ci0jaW5j
bHVkZSA8c3RkaW8uaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KTsKLSAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCk7Ci0KLSAgICBCVmlldyogbV92aWV3OwotfTsKLQotR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcp
Ci0gICAgOiBtX3ZpZXcodmlldykKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkKLXsKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNv
bnRleHQpOwotICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBkZWxldGUgbV9kYXRhOwot
fQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPm1fdmlldzsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBtX2RhdGEtPm1fdmll
dy0+UHVzaFN0YXRlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlBvcFN0YXRlKCk7Ci19Ci0KLS8vIERy
YXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+
RmlsbFJlY3QocmVjdCk7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAg
ICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUo
KSk7Ci19Ci0KLS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQyKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0
SGFpa3VTdHJva2VTdHlsZSgpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+Rmls
bEVsbGlwc2UocmVjdCk7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAg
ICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5
bGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVj
dCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5tX3ZpZXctPlN0
cm9rZUFyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUo
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29udmV4UG9seWdvbihzaXplX3QgcG9pbnRzTGVuZ3RoLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEJQb2ludCBiUG9pbnRzW3BvaW50c0xlbmd0aF07Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKLSAgICAgICAgYlBv
aW50c1tpXSA9IHBvaW50c1tpXTsKLQotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihi
UG9pbnRzLCBwb2ludHNMZW5ndGgpOwotICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tl
KQotICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3Zp
ZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0
cm9rZVN0eWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhc2VkKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChudW1Qb2ludHMgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8v
IEZJWE1FOiBJTVBMRU1FTlQhIQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPm1fdmlldy0+SGlnaENvbG9yKCk7
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Ci0gICAgbV9kYXRhLT5t
X3ZpZXctPkZpbGxSZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Io
b2xkQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BS
aWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmln
aHQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVu
dGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsCi0gICAgLy8gdGhlIHNp
emVzIGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZl
cmFsCi0gICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxBcmMgY2FsbHMgYXJlIG5lZWRlZC4KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBCUmVnaW9uIHJlZ2lvbihyZWN0KTsKLSAgICBtX2RhdGEtPm1fdmlldy0+Q29u
c3RyYWluQ2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgaW50IC8qIHdpZHRoICovLCBpbnQgLyogb2Zmc2V0ICovLCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOwotCi0gICAgLy8gRklYTUU6IG1h
eWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIEJTaGFwZT8KLQotICAgIGlmIChyZWN0
cy5zaXplKCkgPiAxKSB7Ci0gICAgICAgIEJSZWdpb24gICAgcmVnaW9uOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQotICAgICAgICAgICAgcmVnaW9uLkluY2x1
ZGUoQlJlY3QocmVjdHNbaV0pKTsKLQotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENv
bG9yKGNvbG9yKTsKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVJlY3QocmVnaW9uLkZy
YW1lKCksIEJfTUlYRURfQ09MT1JTKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgaW50IHdpZHRoLCBib29s
IHByaW50aW5nKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEludFBvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCk7
Ci0gICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBJbnRQb2ludCYsIGludCB3aWR0aCwg
VGV4dENoZWNraW5nTGluZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxh
dGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgb2xkU2l6
ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBl
blNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhh
aWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjYXBfbW9kZSBtb2RlID0gQl9CVVRUX0NBUDsKLSAgICBzd2l0Y2ggKGxpbmVDYXApIHsKLSAg
ICBjYXNlIFJvdW5kQ2FwOgotICAgICAgICBtb2RlID0gQl9ST1VORF9DQVA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU3F1YXJlQ2FwOgotICAgICAgICBtb2RlID0gQl9TUVVBUkVfQ0FQOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRDYXA6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1f
ZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxp
bWl0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgam9pbl9tb2RlIG1vZGUgPSBCX01JVEVSX0pPSU47Ci0gICAgc3dpdGNoIChsaW5l
Sm9pbikgewotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICBtb2RlID0gQl9ST1VORF9KT0lO
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgbW9kZSA9IEJf
QkVWRUxfSk9JTjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNaXRlckpvaW46Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExp
bmVNb2RlKG1fZGF0YS0+bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmll
dy0+TGluZU1pdGVyTGltaXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRl
ckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1f
dmlldy0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBsaW1p
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBvcGFjaXR5KQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkcmF3aW5nX21vZGUgbW9kZSA9
IEJfT1BfQ09QWTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDb21wb3NpdGVDbGVhcjoK
LSAgICBjYXNlIENvbXBvc2l0ZUNvcHk6Ci0gICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBhYm92
ZQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAg
IG1vZGUgPSBCX09QX09WRVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbjog
VW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9wZXJhdGlvbiAlc1xuIiwKLSAgICAgICAgICAgICAgICBj
b21wb3NpdGVPcGVyYXRvck5hbWUob3ApLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSAgICBtX2Rh
dGEtPm1fdmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBw
aW5nUmVnaW9uKHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGNsaXAocGF0aCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9h
dCByYWRpYW5zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAo
Y29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJv
b2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQotewotfQot
Ci1JbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIElu
dGVycG9sYXRpb25EZWZhdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1G
b250KGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEZvbnQoZm9u
dC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsK
LX0KLQotcGF0dGVybiBHcmFwaGljc0NvbnRleHQ6OmdldEhhaWt1U3Ryb2tlU3R5bGUoKQotewot
ICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUoKSkgewotICAgIGNhc2UgU29saWRTdHJva2U6Ci0gICAg
ICAgIHJldHVybiBCX1NPTElEX0hJR0g7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG90dGVk
U3Ryb2tlOgotICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRGFzaGVkU3Ryb2tlOgotICAgICAgICAvLyBGSVhNRTogdXNlIGEgYmV0dGVyIGRh
c2hlZCBzdHJva2UhCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBC
X01JWEVEX0NPTE9SUzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIEJfU09MSURfTE9XOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQotewotICAgIC8vIEZJWE1FOiBzZWUgZ2V0SGFpa3VTdHJva2VTdHlsZS4KLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRoaWNr
bmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+
U2V0SGlnaENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxh
dGZvcm1TaGFkb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmLCBmbG9hdCwgQ29s
b3IgY29uc3QmLCBDb2xvclNwYWNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0g
KgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJY29uLmgiCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotSWNvbjo6fkljb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVyRGF0YUhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhSGFpa3UuaAkocmV2aXNpb24gOTU5MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRh
dGFIYWlrdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxCaXRtYXAuaD4KLSNpbmNsdWRl
IDxWaWV3Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLQotY2xh
c3MgSW1hZ2VCdWZmZXJEYXRhIHsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3Qg
SW50U2l6ZSYpOwotICAgIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIEJCaXRtYXAgbV9iaXRt
YXA7Ci0gICAgQlZpZXcgbV92aWV3OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhh
biBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRl
ICJCYXNlNjQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU3RpbGxJ
bWFnZUhhaWt1LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPEJpdG1hcFN0cmVhbS5oPgotI2luY2x1ZGUg
PFN0cmluZy5oPgotI2luY2x1ZGUgPFRyYW5zbGF0b3JSb3N0ZXIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXpl
JiBzaXplKQotICAgIDogbV9iaXRtYXAoQlJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpIC0gMSwgc2l6
ZS5oZWlnaHQoKSAtIDEpLCBCX1JHQkEzMiwgdHJ1ZSkKLSAgICAsIG1fdmlldyhtX2JpdG1hcC5C
b3VuZHMoKSwgIldlYktpdCBJbWFnZUJ1ZmZlckRhdGEiLCAwLCAwKQotewotICAgIC8vIEFsd2F5
cyBrZWVwIHRoZSBiaXRtYXAgbG9ja2VkLCB3ZSBhcmUgdGhlIG9ubHkgY2xpZW50LgotICAgIG1f
Yml0bWFwLkxvY2soKTsKLSAgICBtX2JpdG1hcC5BZGRDaGlsZCgmbV92aWV3KTsKLQotICAgIC8v
IEZpbGwgd2l0aCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGNvbG9yLgotICAgIG1lbXNldChtX2Jp
dG1hcC5CaXRzKCksIDAsIG1fYml0bWFwLkJpdHNMZW5ndGgoKSk7Ci0KLSAgICAvLyBTaW5jZSBJ
bWFnZUJ1ZmZlciBpcyB1c2VkIG1haW5seSBmb3IgQ2FudmFzLCBleHBsaWNpdGx5IGluaXRpYWxp
emUKLSAgICAvLyBpdHMgdmlldydzIGdyYXBoaWNzIHN0YXRlIHdpdGggdGhlIGNvcnJlc3BvbmRp
bmcgY2FudmFzIGRlZmF1bHRzCi0gICAgLy8gTk9URToga2VlcCBpbiBzeW5jIHdpdGggQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZQotICAgIG1fdmlldy5TZXRMaW5lTW9kZShCX0JVVFRf
Q0FQLCBCX01JVEVSX0pPSU4sIDEwKTsKLSAgICBtX3ZpZXcuU2V0RHJhd2luZ01vZGUoQl9PUF9B
TFBIQSk7Ci0gICAgbV92aWV3LlNldEJsZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhB
X0NPTVBPU0lURSk7Ci19Ci0KLUltYWdlQnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCi17
Ci0gICAgLy8gUmVtb3ZlIHRoZSB2aWV3IGZyb20gdGhlIGJpdG1hcCwga2VlcGluZyBpdCBmcm9t
IGJlaW5nIGZyZWUnZCB0d2ljZS4KLSAgICBtX3ZpZXcuUmVtb3ZlU2VsZigpOwotICAgIG1fYml0
bWFwLlVubG9jaygpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwg
Ym9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShzaXplKQotICAgICwgbV9zaXplKHNpemUpCi17
Ci0gICAgbV9jb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV92aWV3KSk7
Ci0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQot
ewotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiA0OwotfQotCi1HcmFwaGljc0Nv
bnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kYXRh
Lm1fdmlldy5XaW5kb3coKSk7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotfQotCi1J
bWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1hZ2UpIHsK
LSAgICAgICAgLy8gSXQncyBhc3N1bWVkIHRoYXQgaWYgaW1hZ2UoKSBpcyBjYWxsZWQsIHRoZSBh
Y3R1YWwgcmVuZGVyaW5nIHRvIHRoZQotICAgICAgICAvLyBHcmFwaGljc0NvbnRleHQgbXVzdCBi
ZSBkb25lLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpKTsKLSAgICAgICAgbV9kYXRhLm1fdmll
dy5TeW5jKCk7Ci0gICAgICAgIG1faW1hZ2UgPSBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1f
Yml0bWFwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+
JiBsb29rVXBUYWJsZSkKLXsKLSAgICB1aW50OCogcm93RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDgqPihtX2RhdGEubV9iaXRtYXAuQml0cygpKTsKLSAgICB1bnNpZ25lZCBieXRlc1BlclJv
dyA9IG1fZGF0YS5tX2JpdG1hcC5CeXRlc1BlclJvdygpOwotICAgIHVuc2lnbmVkIHJvd3MgPSBt
X3NpemUuaGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgY29sdW1ucyA9IG1fc2l6ZS53aWR0aCgpOwot
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dzOyB5KyspIHsKLSAgICAgICAgdWludDgq
IHBpeGVsID0gcm93RGF0YTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbHVt
bnM7IHgrKykgewotICAgICAgICAgICAgLy8gbG9va1VwVGFibGUgZG9lc24ndCBzZWVtIHRvIHN1
cHBvcnQgYSBMVVQgZm9yIGVhY2ggY29sb3IgY2hhbm5lbAotICAgICAgICAgICAgLy8gc2VwYXJh
dGVseSAoanVkZ2luZyBmcm9tIHRoZSBvdGhlciBwb3J0cykuIFdlIGRvbid0IG5lZWQgdG8KLSAg
ICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbS90byBwcmUtbXVsdGlwbGllZCBjb2xvciBzcGFjZSBz
aW5jZSBCQml0bWFwIHN0b3JhZ2UKLSAgICAgICAgICAgIC8vIGlzIG5vdCBwcmUtbXVsdGlwbGll
ZC4KLSAgICAgICAgICAgIHBpeGVsWzBdID0gbG9va1VwVGFibGVbcGl4ZWxbMF1dOwotICAgICAg
ICAgICAgcGl4ZWxbMV0gPSBsb29rVXBUYWJsZVtwaXhlbFsxXV07Ci0gICAgICAgICAgICBwaXhl
bFsyXSA9IGxvb2tVcFRhYmxlW3BpeGVsWzJdXTsKLSAgICAgICAgICAgIC8vIGFscGhhIHN0YXlz
IHVubW9kaWZpZWQuCi0gICAgICAgICAgICBwaXhlbCArPSA0OwotICAgICAgICB9Ci0gICAgICAg
IHJvd0RhdGEgKz0gYnl0ZXNQZXJSb3c7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
Y29udmVydEZyb21EYXRhKGNvbnN0IHVpbnQ4KiBzb3VyY2VSb3dzLCB1bnNpZ25lZCBzb3VyY2VC
eXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDgqIGRl
c3RSb3dzLCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJvd3MsIHVuc2lnbmVkIGNvbHVtbnMpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgewotICAgICAgICBjb25zdCB1aW50OCog
c291cmNlUGl4ZWwgPSBzb3VyY2VSb3dzOwotICAgICAgICB1aW50OCogZGVzdFBpeGVsID0gZGVz
dFJvd3M7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2x1bW5zOyB4KyspIHsK
LSAgICAgICAgICAgIC8vIFJHQkEgLT4gQkdSQSBvciBCR1JBIC0+IFJHQkEKLSAgICAgICAgICAg
IGRlc3RQaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwotICAgICAgICAgICAgZGVzdFBpeGVsWzFd
ID0gc291cmNlUGl4ZWxbMV07Ci0gICAgICAgICAgICBkZXN0UGl4ZWxbMl0gPSBzb3VyY2VQaXhl
bFswXTsKLSAgICAgICAgICAgIGRlc3RQaXhlbFszXSA9IHNvdXJjZVBpeGVsWzNdOwotICAgICAg
ICAgICAgZGVzdFBpeGVsICs9IDQ7Ci0gICAgICAgICAgICBzb3VyY2VQaXhlbCArPSA0OwotICAg
ICAgICB9Ci0gICAgICAgIHNvdXJjZVJvd3MgKz0gc291cmNlQnl0ZXNQZXJSb3c7Ci0gICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBjb252ZXJ0RnJvbUludGVybmFsRGF0YShjb25zdCB1aW50OCogc291cmNlUm93cywgdW5z
aWduZWQgc291cmNlQnl0ZXNQZXJSb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDgqIGRlc3RSb3dzLCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93cywg
dW5zaWduZWQgY29sdW1ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHByZW11bHRpcGxpZWQpCi17Ci0gICAgaWYgKHByZW11bHRpcGxpZWQpIHsKLSAg
ICAgICAgLy8gSW50ZXJuYWwgc3RvcmFnZSBpcyBub3QgcHJlLW11bHRpcGxpZWQsIHByZS1tdWx0
aXBseSBvbiB0aGUgZmx5LgotICAgICAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93czsg
eSsrKSB7Ci0gICAgICAgICAgICBjb25zdCB1aW50OCogc291cmNlUGl4ZWwgPSBzb3VyY2VSb3dz
OwotICAgICAgICAgICAgdWludDgqIGRlc3RQaXhlbCA9IGRlc3RSb3dzOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgICAg
IC8vIFJHQkEgLT4gQkdSQSBvciBCR1JBIC0+IFJHQkEKLSAgICAgICAgICAgICAgICBkZXN0UGl4
ZWxbMF0gPSBzdGF0aWNfY2FzdDx1aW50MTY+KHNvdXJjZVBpeGVsWzJdKSAqIHNvdXJjZVBpeGVs
WzNdIC8gMjU1OwotICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IHN0YXRpY19jYXN0PHVp
bnQxNj4oc291cmNlUGl4ZWxbMV0pICogc291cmNlUGl4ZWxbM10gLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgZGVzdFBpeGVsWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2Pihzb3VyY2VQaXhlbFswXSkg
KiBzb3VyY2VQaXhlbFszXSAvIDI1NTsKLSAgICAgICAgICAgICAgICBkZXN0UGl4ZWxbM10gPSBz
b3VyY2VQaXhlbFszXTsKLSAgICAgICAgICAgICAgICBkZXN0UGl4ZWwgKz0gNDsKLSAgICAgICAg
ICAgICAgICBzb3VyY2VQaXhlbCArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc291
cmNlUm93cyArPSBzb3VyY2VCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnZlcnRG
cm9tRGF0YShzb3VyY2VSb3dzLCBzb3VyY2VCeXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzLCBkZXN0Qnl0ZXNQZXJSb3csCi0gICAgICAgICAgICAgICAgICAgICAg
ICByb3dzLCBjb2x1bW5zKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0
VG9JbnRlcm5hbERhdGEoY29uc3QgdWludDgqIHNvdXJjZVJvd3MsIHVuc2lnbmVkIHNvdXJjZUJ5
dGVzUGVyUm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
OCogZGVzdFJvd3MsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93cywgdW5zaWduZWQgY29sdW1ucywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBs
aWVkKQotewotICAgIGlmIChwcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIC8vIEludGVybmFsIHN0
b3JhZ2UgaXMgbm90IHByZS1tdWx0aXBsaWVkLCBkZS1tdWx0aXBseSBzb3VyY2UgZGF0YS4KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd3M7IHkrKykgewotICAgICAgICAgICAg
Y29uc3QgdWludDgqIHNvdXJjZVBpeGVsID0gc291cmNlUm93czsKLSAgICAgICAgICAgIHVpbnQ4
KiBkZXN0UGl4ZWwgPSBkZXN0Um93czsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7
IHggPCBjb2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgICAgICAvLyBSR0JBIC0+IEJHUkEgb3Ig
QkdSQSAtPiBSR0JBCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZVBpeGVsWzNdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RQaXhlbFswXSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc291cmNl
UGl4ZWxbMl0pICogMjU1IC8gc291cmNlUGl4ZWxbM107Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RQaXhlbFsxXSA9IHN0YXRpY19jYXN0PHVpbnQxNj4oc291cmNlUGl4ZWxbMV0pICogMjU1IC8g
c291cmNlUGl4ZWxbM107Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsyXSA9IHN0YXRp
Y19jYXN0PHVpbnQxNj4oc291cmNlUGl4ZWxbMF0pICogMjU1IC8gc291cmNlUGl4ZWxbM107Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbFszXSA9IHNvdXJjZVBpeGVsWzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbFswXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RQaXhlbFsyXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbFszXSA9
IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlc3RQaXhlbCArPSA0Owot
ICAgICAgICAgICAgICAgIHNvdXJjZVBpeGVsICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzb3VyY2VSb3dzICs9IHNvdXJjZUJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Y29udmVydEZyb21EYXRhKHNvdXJjZVJvd3MsIHNvdXJjZUJ5dGVzUGVyUm93LAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3MsIGRlc3RCeXRlc1BlclJvdywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJvd3MsIGNvbHVtbnMpOwotICAgIH0KLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VC
dWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlw
bGllZCkKLXsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0
ZShJbnRTaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0KLSAgICAvLyBJZiB0
aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZSBpbWFnZSwgdGhl
IG91dHNpZGUKLSAgICAvLyByZWdpb25zIG5lZWQgdG8gYmUgdHJhbnNwYXJlbnQuIFRoaXMgd2F5
IGlzIHNpbXBseSwgYWx0aG91Z2ggd2l0aCBhCi0gICAgLy8gYSBzbGlnaHQgb3ZlcmhlYWQgZm9y
IHRoZSBpbnNpZGUgcmVnaW9uLgotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBzaXplLndpZHRoKCkgfHwgKHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGF0YSwg
MCwgcmVzdWx0LT5kYXRhKCktPmxlbmd0aCgpKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQg
aW1hZ2UgaXMgb3V0c2lkZSB0aGUgc291cmNlIGltYWdlLCB3ZSBjYW4gcmV0dXJuIGF0Ci0gICAg
Ly8gdGhpcyBwb2ludC4KLSAgICBpZiAocmVjdC54KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC55
KCkgPiBzaXplLmhlaWdodCgpIHx8IHJlY3QucmlnaHQoKSA8IDAgfHwgcmVjdC5ib3R0b20oKSA8
IDApCi0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotCi0gICAgLy8gTm93IHdlIGtu
b3cgdGhlcmUgbXVzdCBiZSBhbiBpbnRlcnNlY3Rpb24gcmVjdCB3aGljaCB3ZSBuZWVkIHRvIGV4
dHJhY3QuCi0gICAgQlJlY3Qgc291cmNlUmVjdCgwLCAwLCBzaXplLndpZHRoKCkgLSAxLCBzaXpl
LmhlaWdodCgpIC0gMSk7Ci0gICAgc291cmNlUmVjdCA9IEJSZWN0KHJlY3QpICYgc291cmNlUmVj
dDsKLQotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0g
ICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhOwotICAgIC8vIE9mZnNldCB0aGUgZGVz
dGluYXRpb24gcG9pbnRlciB0byBwb2ludCBhdCB0aGUgZmlyc3QgcGl4ZWwgb2YgdGhlCi0gICAg
Ly8gaW50ZXJzZWN0aW9uIHJlY3QuCi0gICAgZGVzdFJvd3MgKz0gKHJlY3QueCgpIC0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VSZWN0LmxlZnQpKSAqIDQKLSAgICAgICAgKyAocmVjdC55KCkgLSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVJlY3QudG9wKSkgKiBkZXN0Qnl0ZXNQZXJSb3c7Ci0KLSAg
ICBjb25zdCB1aW50OCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgq
PihpbWFnZURhdGEubV9iaXRtYXAuQml0cygpKTsKLSAgICB1aW50MzIgc291cmNlQnl0ZXNQZXJS
b3cgPSBpbWFnZURhdGEubV9iaXRtYXAuQnl0ZXNQZXJSb3coKTsKLSAgICAvLyBPZmZzZXQgdGhl
IHNvdXJjZSBwb2ludGVyIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBwaXhlbCBvZiB0aGUKLSAgICAv
LyBpbnRlcnNlY3Rpb24gcmVjdC4KLSAgICBzb3VyY2VSb3dzICs9IHN0YXRpY19jYXN0PGludD4o
c291cmNlUmVjdC5sZWZ0KSAqIDQKLSAgICAgICAgKyBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVJl
Y3QudG9wKSAqIHNvdXJjZUJ5dGVzUGVyUm93OwotCi0gICAgdW5zaWduZWQgcm93cyA9IHNvdXJj
ZVJlY3QuSW50ZWdlckhlaWdodCgpICsgMTsKLSAgICB1bnNpZ25lZCBjb2x1bW5zID0gc291cmNl
UmVjdC5JbnRlZ2VyV2lkdGgoKSArIDE7Ci0gICAgY29udmVydEZyb21JbnRlcm5hbERhdGEoc291
cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0Qnl0ZXNQZXJSb3csCi0g
ICAgICAgIHJvd3MsIGNvbHVtbnMsIHByZW11bHRpcGxpZWQpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7Ci19Ci0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpn
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAg
ICAvLyBNYWtlIHN1cmUgYWxsIGFzeW5jaHJvbm91cyBkcmF3aW5nIGhhcyBmaW5pc2hlZAotICAg
IG1fZGF0YS5tX3ZpZXcuU3luYygpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGEocmVjdCwgbV9k
YXRhLCBtX3NpemUsIGZhbHNlKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMgZHJhd2luZyBoYXMgZmluaXNo
ZWQKLSAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKHJl
Y3QsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQgcHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBsaWVkKQotewotICAgIC8vIElmIHRoZSBzb3VyY2UgaW1h
Z2UgaXMgb3V0c2lkZSB0aGUgZGVzdGluYXRpb24gaW1hZ2UsIHdlIGNhbiByZXR1cm4gYXQKLSAg
ICAvLyB0aGlzIHBvaW50LgotICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGlzIGlzbid0IGFscmVh
ZHkgZG9uZSBpbiBXZWJDb3JlLgotICAgIGlmIChkZXN0UG9pbnQueCgpID4gc2l6ZS53aWR0aCgp
IHx8IGRlc3RQb2ludC55KCkgPiBzaXplLmhlaWdodCgpCi0gICAgICAgIHx8IGRlc3RQb2ludC54
KCkgKyBzb3VyY2VSZWN0LndpZHRoKCkgPCAwCi0gICAgICAgIHx8IGRlc3RQb2ludC55KCkgKyBz
b3VyY2VSZWN0LmhlaWdodCgpIDwgMCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29uc3QgdW5zaWduZWQgY2hhciogc291cmNlUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCkt
PmRhdGEoKTsKLSAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndp
ZHRoKCk7Ci0gICAgLy8gT2Zmc2V0IHRoZSBzb3VyY2UgcG9pbnRlciB0byB0aGUgZmlyc3QgcGl4
ZWwgb2YgdGhlIHNvdXJjZSByZWN0LgotICAgIHNvdXJjZVJvd3MgKz0gc291cmNlUmVjdC54KCkg
KiA0ICsgc291cmNlUmVjdC55KCkgKiBzb3VyY2VCeXRlc1BlclJvdzsKLQotICAgIC8vIFdlIGtu
b3cgdGhlcmUgbXVzdCBiZSBhbiBpbnRlcnNlY3Rpb24gcmVjdC4KLSAgICBCUmVjdCBkZXN0UmVj
dChkZXN0UG9pbnQueCgpLCBkZXN0UG9pbnQueSgpLCBzb3VyY2VSZWN0LndpZHRoKCkgLSAxLCBz
b3VyY2VSZWN0LmhlaWdodCgpIC0gMSk7Ci0gICAgZGVzdFJlY3QgPSBkZXN0UmVjdCAmIEJSZWN0
KDAsIDAsIHNpemUud2lkdGgoKSAtIDEsIHNpemUuaGVpZ2h0KCkgLSAxKTsKLQotICAgIHVuc2ln
bmVkIGNoYXIqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1h
Z2VEYXRhLm1fYml0bWFwLkJpdHMoKSk7Ci0gICAgdWludDMyIGRlc3RCeXRlc1BlclJvdyA9IGlt
YWdlRGF0YS5tX2JpdG1hcC5CeXRlc1BlclJvdygpOwotICAgIC8vIE9mZnNldCB0aGUgc291cmNl
IHBvaW50ZXIgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IHBpeGVsIG9mIHRoZQotICAgIC8vIGludGVy
c2VjdGlvbiByZWN0LgotICAgIGRlc3RSb3dzICs9IHN0YXRpY19jYXN0PGludD4oZGVzdFJlY3Qu
bGVmdCkgKiA0Ci0gICAgICAgICsgc3RhdGljX2Nhc3Q8aW50PihkZXN0UmVjdC50b3ApICogZGVz
dEJ5dGVzUGVyUm93OwotCi0gICAgdW5zaWduZWQgcm93cyA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7
Ci0gICAgdW5zaWduZWQgY29sdW1ucyA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBjb252ZXJ0
VG9JbnRlcm5hbERhdGEoc291cmNlUm93cywgc291cmNlQnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0Qnl0ZXNQZXJSb3csCi0gICAgICAgIHJvd3MsIGNvbHVtbnMsIHByZW11bHRpcGxpZWQpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRh
KiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpCi17Ci0gICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMgZHJhd2luZyBoYXMg
ZmluaXNoZWQKLSAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKLSAgICBwdXRJbWFnZURhdGEoc291
cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBmYWxzZSk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBz
b3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCi17Ci0gICAgLy8gTWFrZSBzdXJlIGFsbCBhc3luY2hyb25vdXMgZHJhd2luZyBoYXMgZmlu
aXNoZWQKLSAgICBtX2RhdGEubV92aWV3LlN5bmMoKTsKLSAgICBwdXRJbWFnZURhdGEoc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKLX0KLQotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
ZG91YmxlKikgY29uc3QKLXsKLSAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuICJkYXRh
OiwiOwotCi0gICAgQlN0cmluZyBtaW1lVHlwZVN0cmluZyhtaW1lVHlwZSk7Ci0KLSAgICB1aW50
MzIgdHJhbnNsYXRvclR5cGUgPSAwOwotCi0gICAgQlRyYW5zbGF0b3JSb3N0ZXIqIHJvc3RlciA9
IEJUcmFuc2xhdG9yUm9zdGVyOjpEZWZhdWx0KCk7Ci0gICAgdHJhbnNsYXRvcl9pZCogdHJhbnNs
YXRvcnM7Ci0gICAgaW50MzIgdHJhbnNsYXRvckNvdW50OwotICAgIHJvc3Rlci0+R2V0QWxsVHJh
bnNsYXRvcnMoJnRyYW5zbGF0b3JzLCAmdHJhbnNsYXRvckNvdW50KTsKLSAgICBmb3IgKGludDMy
IGkgPSAwOyBpIDwgdHJhbnNsYXRvckNvdW50OyBpKyspIHsKLSAgICAgICAgLy8gU2tpcCB0cmFu
c2xhdG9ycyB0aGF0IGRvbid0IHN1cHBvcnQgYXJjaGl2ZWQgQkJpdG1hcHMgYXMgaW5wdXQgZGF0
YS4KLSAgICAgICAgY29uc3QgdHJhbnNsYXRpb25fZm9ybWF0KiBpbnB1dEZvcm1hdHM7Ci0gICAg
ICAgIGludDMyIGZvcm1hdENvdW50OwotICAgICAgICByb3N0ZXItPkdldElucHV0Rm9ybWF0cyh0
cmFuc2xhdG9yc1tpXSwgJmlucHV0Rm9ybWF0cywgJmZvcm1hdENvdW50KTsKLSAgICAgICAgYm9v
bCBzdXBwb3J0c0JpdG1hcHMgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQzMiBqID0gMDsgaiA8
IGZvcm1hdENvdW50OyBqKyspIHsKLSAgICAgICAgICAgIGlmIChpbnB1dEZvcm1hdHNbal0udHlw
ZSA9PSBCX1RSQU5TTEFUT1JfQklUTUFQKSB7Ci0gICAgICAgICAgICAgICAgc3VwcG9ydHNCaXRt
YXBzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoIXN1cHBvcnRzQml0bWFwcykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uX2Zvcm1hdCogb3V0cHV0Rm9ybWF0czsKLSAg
ICAgICAgcm9zdGVyLT5HZXRPdXRwdXRGb3JtYXRzKHRyYW5zbGF0b3JzW2ldLCAmb3V0cHV0Rm9y
bWF0cywgJmZvcm1hdENvdW50KTsKLSAgICAgICAgZm9yIChpbnQzMiBqID0gMDsgaiA8IGZvcm1h
dENvdW50OyBqKyspIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXRGb3JtYXRzW2pdLmdyb3VwID09
IEJfVFJBTlNMQVRPUl9CSVRNQVAKLSAgICAgICAgICAgICAgICAmJiBtaW1lVHlwZVN0cmluZyA9
PSBvdXRwdXRGb3JtYXRzW2pdLk1JTUUpIHsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yVHlw
ZSA9IG91dHB1dEZvcm1hdHNbal0udHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAodHJhbnNsYXRvclR5cGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLQot
ICAgIEJNYWxsb2NJTyB0cmFuc2xhdGVkU3RyZWFtOwotICAgIEJCaXRtYXAqIGJpdG1hcCA9IGNv
bnN0X2Nhc3Q8QkJpdG1hcCo+KCZtX2RhdGEubV9iaXRtYXApOwotICAgICAgICAvLyBCQml0bWFw
U3RyZWFtIGRvZXNuJ3QgdGFrZSAiY29uc3QgQml0bWFwKiIuLi4KLSAgICBCQml0bWFwU3RyZWFt
IGJpdG1hcFN0cmVhbShiaXRtYXApOwotICAgIGlmIChyb3N0ZXItPlRyYW5zbGF0ZSgmYml0bWFw
U3RyZWFtLCAwLCAwLCAmdHJhbnNsYXRlZFN0cmVhbSwgdHJhbnNsYXRvclR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIEJfVFJBTlNMQVRPUl9CSVRNQVAsIG1pbWVUeXBlLnV0ZjgoKS5k
YXRhKCkpICE9IEJfT0spIHsKLSAgICAgICAgYml0bWFwU3RyZWFtLkRldGFjaEJpdG1hcCgmYml0
bWFwKTsKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotICAgIH0KLQotICAgIGJpdG1hcFN0cmVh
bS5EZXRhY2hCaXRtYXAoJmJpdG1hcCk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZEJ1ZmZl
cjsKLSAgICBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odHJhbnNs
YXRlZFN0cmVhbS5CdWZmZXIoKSksCi0gICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRTdHJlYW0u
QnVmZmVyTGVuZ3RoKCksIGVuY29kZWRCdWZmZXIpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBlbmNvZGVkQnVmZmVyOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4g
PHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1
c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkg
PGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4g
QcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1
ZGUgPEFwcGxpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8Qml0bWFwLmg+Ci0jaW5jbHVkZSA8Vmlldy5o
PgotCi0vLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAotVmVjdG9y
PGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKik7Ci0KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQot
ewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNl
OwotCi0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgZGVsZXRlIG1fZnJhbWU7Ci0gICAgICAg
IG1fZnJhbWUgPSAwOwotICAgICAgICBtX2R1cmF0aW9uID0gMC4wZjsKLSAgICAgICAgbV9oYXNB
bHBoYSA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotV1RGOjpQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYXJyYXkgPSBsb2Fk
UmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7Ci0gICAgV1RGOjpQYXNzUmVmUHRyPEJpdG1hcEltYWdl
PiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSk7Ci0gICAgaW1hZ2UtPnNldERhdGEoYnVmZmVyLCB0cnVlKTsKLQotICAgIHJldHVybiBpbWFn
ZTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KLXZv
aWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotewotfQotCi0vLyBEcmF3
aW5nIFJvdXRpbmVzCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYgKCFtX3Nv
dXJjZS5pbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTcGluIHRoZSBh
bmltYXRpb24gdG8gdGhlIGNvcnJlY3QgZnJhbWUgYmVmb3JlIHdlIHRyeSB0byBkcmF3IGl0LCBz
byB3ZQotICAgIC8vIGRvbid0IGRyYXcgYW4gb2xkIGZyYW1lIGFuZCB0aGVuIGltbWVkaWF0ZWx5
IG5lZWQgdG8gZHJhdyBhIG5ld2VyIG9uZSwKLSAgICAvLyBjYXVzaW5nIGZsaWNrZXIgYW5kIHdh
c3RpbmcgQ1BVLgotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAgICBCQml0bWFwKiBpbWFnZSA9
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2Ut
PklzVmFsaWQoKSkgLy8gSWYgdGhlIGltYWdlIGhhc24ndCBmdWxseSBsb2FkZWQuCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFj
ZSwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3R4dC0+c2F2ZSgpOwotICAg
IGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0KLSAgICBCUmVjdCBzcmNSZWN0KHNy
Yyk7Ci0gICAgQlJlY3QgZHN0UmVjdChkc3QpOwotCi0gICAgLy8gVGVzdCB1c2luZyBleGFtcGxl
IHNpdGUgYXQKLSAgICAvLyBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2Nv
bXBsZXhzcGlyYWwvZGVtby5odG1sCi0gICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPlNldERy
YXdpbmdNb2RlKEJfT1BfQUxQSEEpOwotICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5EcmF3
Qml0bWFwQXN5bmMoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QpOwotICAgIGN0eHQtPnJlc3RvcmUo
KTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+
ZGlkRHJhdyh0aGlzKTsKLX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQotewot
ICAgIEJCaXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBp
ZiAoIWltYWdlIHx8ICFpbWFnZS0+SXNWYWxpZCgpKSAvLyBJZiB0aGUgaW1hZ2UgaGFzbid0IGZ1
bGx5IGxvYWRlZC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRmlndXJlIG91dCBpZiB0aGUg
aW1hZ2UgaGFzIGFueSBhbHBoYSB0cmFuc3BhcmVuY3ksIHdlIGNhbiB1c2UgZmFzdGVyIGRyYXdp
bmcgaWYgbm90Ci0gICAgYm9vbCBoYXNBbHBoYSA9IGZhbHNlOwotCi0gICAgdWludDgqIGJpdHMg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oaW1hZ2UtPkJpdHMoKSk7Ci0gICAgdWludDMyIHdp
ZHRoID0gaW1hZ2UtPkJvdW5kcygpLkludGVnZXJXaWR0aCgpICsgMTsKLSAgICB1aW50MzIgaGVp
Z2h0ID0gaW1hZ2UtPkJvdW5kcygpLkludGVnZXJIZWlnaHQoKSArIDE7Ci0KLSAgICB1aW50MzIg
Ynl0ZXNQZXJSb3cgPSBpbWFnZS0+Qnl0ZXNQZXJSb3coKTsKLSAgICBmb3IgKHVpbnQzMiB5ID0g
MDsgeSA8IGhlaWdodCAmJiAhaGFzQWxwaGE7IHkrKykgewotICAgICAgICB1aW50OCogcCA9IGJp
dHM7Ci0gICAgICAgIGZvciAodWludDMyIHggPSAwOyB4IDwgd2lkdGggJiYgIWhhc0FscGhhOyB4
KyspIHsKLSAgICAgICAgICAgIGhhc0FscGhhID0gcFszXSA8IDI1NTsKLSAgICAgICAgICAgIHAg
Kz0gNDsKLSAgICAgICAgfQotICAgICAgICBiaXRzICs9IGJ5dGVzUGVyUm93OwotICAgIH0KLQot
ICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBpZiAoaGFzQWxwaGEpCi0gICAgICAgIGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKLSAgICBlbHNl
Ci0gICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09Q
X0NPUFkpOwotICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7Ci0g
ICAgZmxvYXQgY3VycmVudFcgPSBwaGFzZS54KCk7Ci0gICAgQlJlY3QgYlRpbGVSZWN0KHRpbGVS
ZWN0KTsKLSAgICB3aGlsZSAoY3VycmVudFcgPCBkc3RSZWN0LngoKSArIGRzdFJlY3Qud2lkdGgo
KSkgewotICAgICAgICBmbG9hdCBjdXJyZW50SCA9IHBoYXNlLnkoKTsKLSAgICAgICAgd2hpbGUg
KGN1cnJlbnRIIDwgZHN0UmVjdC55KCkgKyBkc3RSZWN0LmhlaWdodCgpKSB7Ci0gICAgICAgICAg
ICBCUmVjdCBiRHN0UmVjdChjdXJyZW50VywgY3VycmVudEgsIGN1cnJlbnRXICsgd2lkdGggLSAx
LCBjdXJyZW50SCArIGhlaWdodCAtIDEpOwotICAgICAgICAgICAgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPkRyYXdCaXRtYXBBc3luYyhpbWFnZSwgYlRpbGVSZWN0LCBiRHN0UmVjdCk7Ci0g
ICAgICAgICAgICBjdXJyZW50SCArPSBoZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVu
dFcgKz0gd2lkdGg7Ci0gICAgfQotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIGlmIChp
bWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsK
LX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBtX2lz
U29saWRDb2xvciA9IGZhbHNlOwotICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwot
Ci0gICAgaWYgKGZyYW1lQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJCaXRt
YXAqIGltYWdlID0gZ2V0QkJpdG1hcCgpOwotICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5Cb3Vu
ZHMoKS5Jc1ZhbGlkKCkKLSAgICAgICAgfHwgaW1hZ2UtPkJvdW5kcygpLkludGVnZXJXaWR0aCgp
ID4gMCB8fCBpbWFnZS0+Qm91bmRzKCkuSW50ZWdlckhlaWdodCgpID4gMCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwotICAgIHVpbnQ4KiBi
aXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGltYWdlLT5CaXRzKCkpOwotICAgIG1fc29s
aWRDb2xvciA9IENvbG9yKGJpdHNbMl0sIGJpdHNbMV0sIGJpdHNbMF0sIGJpdHNbM10pOwotfQot
Ci1CQml0bWFwKiBCaXRtYXBJbWFnZTo6Z2V0QkJpdG1hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVBdEluZGV4KDApOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCShyZXZpc2lvbiA5
NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnRQb2ludC5oIgotCi0jaW5jbHVkZSA8UG9pbnQuaD4KLQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUludFBvaW50OjpJbnRQb2ludChjb25zdCBCUG9pbnQmIHBvaW50KQotICAgIDog
bV94KHN0YXRpY19jYXN0PGludD4ocG9pbnQueCkpCi0gICAgLCBtX3koc3RhdGljX2Nhc3Q8aW50
Pihwb2ludC55KSkKLXsKLX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEJQb2ludChtX3gsIG1feSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVj
dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLQotI2lu
Y2x1ZGUgPFJlY3QuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFJlY3Q6OkludFJl
Y3QoY29uc3QgQlJlY3QmIHJlY3QpCi0gICAgOiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQot
ICAgICwgbV9zaXplKHJlY3QuSW50ZWdlcldpZHRoKCkgKyAxLCByZWN0LkludGVnZXJIZWlnaHQo
KSArIDEpCi17Ci19Ci0KLUludFJlY3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgp
IC0gMSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNw
cAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbnRTaXplSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0KLSNpbmNsdWRlIDxTaXplLmg+Ci0KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JbnRTaXplOjpJbnRTaXplKGNvbnN0IEJTaXplJiBzaXplKQot
ICAgIDogbV93aWR0aChzaXplLkludGVnZXJXaWR0aCgpKQotICAgICwgbV9oZWlnaHQoc2l6ZS5J
bnRlZ2VySGVpZ2h0KCkpCi17Ci19Ci0KLUludFNpemU6Om9wZXJhdG9yIEJTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gQlNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgPFJlZ2lvbi5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGF0aDo6UGF0aCgpCi0g
ICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKSkKLXsKLX0KLQotUGF0aDo6flBhdGgoKQotewotICAg
IGRlbGV0ZSBtX3BhdGg7Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi0gICAg
OiBtX3BhdGgobmV3IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKLXsKLX0KLQotUGF0
aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQotewotICAgIGlmICgmb3RoZXIg
IT0gdGhpcykKLSAgICAgICAgbV9wYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7Ci0KLSAgICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLWJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIWlzRW1wdHkoKTsKLX0KLQotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9p
bnQoKSBjb25zdCAKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHNhZmUgd2F5IHRvIHJldHVy
biBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBm
bG9hdCBxdWlldE5hTiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsK
LSAgICByZXR1cm4gRmxvYXRQb2ludChxdWlldE5hTiwgcXVpZXROYU4pOwotfQotCi1ib29sIFBh
dGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25z
dAotewotICAgIHJldHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKLX0KLQotdm9pZCBQYXRo
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3BhdGgtPkZyYW1lKCk7Ci19Ci0KLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQotewotICAgIC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYg
cCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYg
cCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBG
bG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xv
Y2t3aXNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkUmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgbV9wYXRoLT5JbmNsdWRlKHIpOwotfQotCi12
b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xlYXIoKQotewotICAgIG1fcGF0aC0+TWFrZUVt
cHR5KCk7Ci19Ci0KLWJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFt
X3BhdGgtPkZyYW1lKCkuSXNWYWxpZCgpOwotfQotCi12b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGlu
Zm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAJKHJl
dmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
U2ltcGxlRm9udERhdGFIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5t
YXhpbWVAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNvbnN0IEJGb250KiBmb250
ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9udF9oZWlnaHQgaGVpZ2h0OwotICAgIGZvbnQtPkdldEhlaWdodCgmaGVpZ2h0
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChoZWlnaHQuYXNjZW50KTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldERlc2NlbnQoaGVpZ2h0LmRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodChoZWlnaHQuYXNjZW50ICogMC41NmYpOyAvLyBIYWNrIHRha2VuIGZyb20gdGhl
IHdpbiBwb3J0LgotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChoZWlnaHQubGVhZGluZyk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGhlaWdodC5hc2NlbnQp
ICsgbHJvdW5kZihoZWlnaHQuZGVzY2VudCkgKyBscm91bmRmKGhlaWdodC5sZWFkaW5nKSk7Ci19
Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAg
bV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaW5p
dENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KCkKLXsKLX0KLQotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBGb250RGVzY3JpcHRpb24gZGVzYyA9
IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIGRlc2Muc2V0U3BlY2lmaWVk
U2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFt
aWx5KCkpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoZm9udFBsYXRm
b3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3Rv
bUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCAuNyk7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2Fwcy5nZXQoKTsKLX0KLQotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKLXsKLSAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQotICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKLSAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCi0gICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IC41KTsKLQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgp
OwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIHdp
bGwgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1BU0NJSSBlbmNvZGluZyBzaXRl
cwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSAmJiBtX3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4ZWQoKTsKLX0KLQotR2x5cGhNZXRyaWNz
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5
cGhNZXRyaWNzTW9kZSkgY29uc3QKLXsKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKLSAgICBp
ZiAoIW1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG1ldHJpY3M7Ci0KLSAg
ICBDU3RyaW5nIGVuY29kZWQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoc3RhdGljX2Nhc3Q8VUNo
YXIqPigmZ2x5cGgpLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIGZsb2F0IGVzY2Fw
ZW1lbnRzWzFdOwotICAgIG1fcGxhdGZvcm1EYXRhLmZvbnQoKS0+R2V0RXNjYXBlbWVudHMoZW5j
b2RlZC5kYXRhKCksIDEsIGVzY2FwZW1lbnRzKTsKLSAgICBtZXRyaWNzLmhvcml6b250YWxBZHZh
bmNlID0gZXNjYXBlbWVudHNbMF0gKiBtX3BsYXRmb3JtRGF0YS5mb250KCktPlNpemUoKTsKLSAg
ICByZXR1cm4gbWV0cmljczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0
aWxsSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVz
IDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RpbGxJbWFnZUhhaWt1LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSA8Vmlldy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0aWxsSW1hZ2U6OlN0aWxsSW1h
Z2UoY29uc3QgQkJpdG1hcCYgYml0bWFwKQotICAgIDogbV9iaXRtYXAoJmJpdG1hcCkKLXsKLX0K
LQotdm9pZCBTdGlsbEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQot
ewotICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgImxhcmdlIiBhbmltYXRpb25zIHRvIGZyZWUgaW1h
Z2UgZGF0YS4KLSAgICAvLyBJdCBhcHBlYXJzIGl0IHdvdWxkIG5vdCBhcHBseSB0byBTdGlsbElt
YWdlLgotfQotCi11bnNpZ25lZCBTdGlsbEltYWdlOjpkZWNvZGVkU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IEl0IGNvdWxkIGJlIHdpc2UgdG8gcmV0dXJuIDAgaGVyZSwgc2luY2Ugd2Ug
ZG9uJ3Qgd2FudCBXZWJDb3JlCi0gICAgLy8gdG8gdGhpbmsgd2UgZWF0IHVwIG1lbW9yeSwgc2lu
Y2Ugd2UgYXJlIG5vdCBmcmVlaW5nIGFueSBpbgotICAgIC8vIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
IGVpdGhlci4KLSAgICByZXR1cm4gbV9iaXRtYXAuQml0c0xlbmd0aCgpOwotfQotCi1JbnRTaXpl
IFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fYml0bWFw
LkJvdW5kcygpLkludGVnZXJXaWR0aCgpICsgMSwgbV9iaXRtYXAuQm91bmRzKCkuSW50ZWdlckhl
aWdodCgpICsgMSk7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gJm1fYml0bWFwOwotfQotCi12b2lkIFN0
aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYgKCFtX2Jp
dG1hcC5Jc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPnNhdmUoKTsK
LSAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotICAgIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5EcmF3Qml0bWFwKCZtX2JpdG1hcCwgc291cmNlUmVjdCwgZGVzdFJl
Y3QpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1
LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214
LmRlPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdGlsbElt
YWdlSGFpa3VfaAotI2RlZmluZSBTdGlsbEltYWdlSGFpa3VfaAotCi0jaW5jbHVkZSAiSW1hZ2Uu
aCIKLSNpbmNsdWRlIDxCaXRtYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBT
dGlsbEltYWdlIDogcHVibGljIEltYWdlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdGlsbEltYWdlPiBjcmVhdGUoY29uc3QgQkJpdG1hcCYgYml0bWFwKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbEltYWdlKGJpdG1hcCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0KLXBy
aXZhdGU6Ci0gICAgU3RpbGxJbWFnZShjb25zdCBCQml0bWFwJik7Ci0gICAgCi0gICAgQkJpdG1h
cCBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0
aWxsSW1hZ2VIYWlrdV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlw
Ym9hcmRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ2xpcGJvYXJkSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
dmVuZ29vZEBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDbGlwYm9hcmRIYWlrdS5oIgotCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJJ
bnRQb2ludC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLQotI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8YXBw
L0NsaXBib2FyZC5oPgotI2luY2x1ZGUgPE1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENs
aXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiwg
RnJhbWUqKQotewotICAgIHJldHVybiBDbGlwYm9hcmRIYWlrdTo6Y3JlYXRlKHBvbGljeSwgRHJh
Z0FuZERyb3ApOwotfQotCi1DbGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5IHBvbGljeSwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgIDog
Q2xpcGJvYXJkKHBvbGljeSwgY2xpcGJvYXJkVHlwZSkKLXsKLX0KLQotdm9pZCBDbGlwYm9hcmRI
YWlrdTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAoYmVfY2xpcGJv
YXJkLT5Mb2NrKCkpIHsKLSAgICAgICAgQk1lc3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRh
dGEoKTsKLQotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgZGF0YS0+UmVtb3ZlTmFt
ZShCU3RyaW5nKHR5cGUpLlN0cmluZygpKTsKLSAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29t
bWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOwotICAg
IH0KLX0KLQotdm9pZCBDbGlwYm9hcmRIYWlrdTo6Y2xlYXJBbGxEYXRhKCkKLXsKLSAgICBpZiAo
YmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKLSAgICAgICAgYmVfY2xpcGJvYXJkLT5DbGVhcigpOwot
ICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOwotICAgICAgICBiZV9jbGlwYm9hcmQtPlVu
bG9jaygpOwotICAgIH0KLX0KLQotU3RyaW5nIENsaXBib2FyZEhhaWt1OjpnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKLXsKLSAgICBCU3RyaW5nIHJlc3Vs
dDsKLSAgICBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkp
IHsKLSAgICAgICAgQk1lc3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKLQotICAg
ICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIGlmIChkYXRhLT5GaW5kU3RyaW5nKEJTdHJpbmco
dHlwZSkuU3RyaW5nKCksICZyZXN1bHQpID09IEJfT0spCi0gICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7Ci0KLSAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIENsaXBib2FyZEhhaWt1OjpzZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0KLSAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKLSAgICAgICAgQk1lc3Nh
Z2UqIGJkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7Ci0KLSAgICAgICAgaWYgKGJkYXRhKSB7
Ci0gICAgICAgICAgICBiZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5nKHR5cGUpLlN0cmluZygpKTsK
LQotICAgICAgICAgICAgaWYgKGJkYXRhLT5BZGRTdHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmco
KSwgQlN0cmluZyhkYXRhKSkgPT0gQl9PSykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKLSAgICAgICAg
YmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci0vLyBFeHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSS4KLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9h
cmRIYWlrdTo6dHlwZXMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7Ci0K
LSAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKLSAgICAgICAgQk1lc3NhZ2UqIGRhdGEg
PSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKLQotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAg
ICAgY2hhciogbmFtZTsKLSAgICAgICAgICAgIHVpbnQzMiB0eXBlOwotICAgICAgICAgICAgaW50
MzIgY291bnQ7Ci0KLSAgICAgICAgICAgIGZvciAoaW50MzIgaSA9IDA7IGRhdGEtPkdldEluZm8o
Ql9BTllfVFlQRSwgaSwgJm5hbWUsICZ0eXBlLCAmY291bnQpID09IEJfT0s7IGkrKykKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVfY2xp
cGJvYXJkLT5VbmxvY2soKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNz
UmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRIYWlrdTo6ZmlsZXMoKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50IENsaXBib2FyZEhh
aWt1OjpkcmFnTG9jYXRpb24oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIEludFBvaW50KDAsIDApOwotfQotCi1DYWNoZWRJbWFnZSogQ2xpcGJvYXJkSGFpa3U6
OmRyYWdJbWFnZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLU5vZGUqIENs
aXBib2FyZEhhaWt1OjpkcmFnSW1hZ2VFbGVtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2VF
bGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotRHJhZ0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9p
bnQmIGRyYWdMb2NhdGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZEhhaWt1OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1h
Z2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRIYWlrdTo6d3JpdGVVUkwoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkSGFpa3U6OndyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBDbGlwYm9hcmRIYWlrdTo6aGFzRGF0YSgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKLQotICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgewotICAgICAgICBCTWVzc2FnZSog
ZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpOwotCi0gICAgICAgIGlmIChkYXRhKQotICAgICAg
ICAgICAgcmVzdWx0ID0gIWRhdGEtPklzRW1wdHkoKTsKLQotICAgICAgICBiZV9jbGlwYm9hcmQt
PlVubG9jaygpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJv
YXJkSGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
bGlwYm9hcmRIYWlrdS5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkSGFpa3VfaAotI2RlZmluZSBDbGlw
Ym9hcmRIYWlrdV9oCi0KLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENhY2hl
ZEltYWdlOwotCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3Ig
ZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZS4KLSAgICBjbGFzcyBDbGlwYm9hcmRIYWlrdSA6
IHB1YmxpYyBDbGlwYm9hcmQgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkSGFpa3U+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBD
bGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkSGFpa3UocG9saWN5LCBjbGlwYm9hcmRUeXBlKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgfkNsaXBib2FyZEhhaWt1KCkgeyB9Ci0KLSAgICAgICAgdm9pZCBj
bGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbERhdGEo
KTsKLSAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKSBjb25zdDsKLSAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBkYXRhKTsKLQotICAgICAgICAvLyBFeHRlbnNpb25zIGJleW9uZCBJRSdzIEFQ
SS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKLQotICAgICAgICBJbnRQb2lu
dCBkcmFnTG9jYXRpb24oKSBjb25zdDsKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgp
IGNvbnN0OwotICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgICAgIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKTsKLSAgICAgICAgdm9p
ZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgICAg
IHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxl
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1l
Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDbGlw
Ym9hcmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIENsaXBib2FyZFR5cGUpOwotICAgIH07
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDbGlwYm9hcmRIYWlrdV9oCi0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51
SGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
LQotI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNvbnRleHRN
ZW51SXRlbS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxMb29wZXIuaD4KLSNpbmNsdWRlIDxNZW51
Lmg+Ci0jaW5jbHVkZSA8TWVzc2FnZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBpc24ndCB1c2Vk
IHlldAotY2xhc3MgQ29udGV4dE1lbnVSZWNlaXZlciA6IHB1YmxpYyBCTG9vcGVyIHsKLXB1Ymxp
YzoKLSAgICBDb250ZXh0TWVudVJlY2VpdmVyKENvbnRleHRNZW51KiBtZW51KQotICAgICAgICA6
IEJMb29wZXIoImNvbnRleHRfbWVudV9yZWNlaXZlciIpCi0gICAgICAgICwgbV9tZW51KG1lbnUp
Ci0gICAgICAgICwgbV9yZXN1bHQoLTEpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgSGFuZGxl
TWVzc2FnZShCTWVzc2FnZSogbXNnKQotICAgIHsKLSAgICAgICAgbV9yZXN1bHQgPSBtc2ctPndo
YXQ7Ci0gICAgICAgIGlmIChtX3Jlc3VsdCAhPSAtMSkgewotICAgICAgICAgICAgQk1lbnVJdGVt
KiBpdGVtID0gbV9tZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCktPkZpbmRJdGVtKG1fcmVzdWx0
KTsKLSAgICAgICAgICAgIGlmICghaXRlbSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiRXJy
b3I6IENvbnRleHQgbWVudSBpdGVtIHdpdGggY29kZSAlaSBub3QgZm91bmQhXG4iLCBtX3Jlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Q29udGV4dE1lbnVJdGVtIGNtSXRlbShpdGVtKTsKLSAgICAgICAgICAgIG1fbWVudS0+Y29udHJv
bGxlcigpLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY21JdGVtKTsKLSAgICAgICAgICAgIGNt
SXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaW50IFJlc3VsdCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIENvbnRleHRNZW51KiBtX21lbnU7Ci0gICAgaW50IG1fcmVzdWx0Owot
fTsKLQotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKLSAgICA6IG1fcGxhdGZvcm1EZXNjcmlw
dGlvbihuZXcgQk1lbnUoImNvbnRleHRfbWVudSIpKQotewotfQotCi1Db250ZXh0TWVudTo6fkNv
bnRleHRNZW51KCkKLXsKLSAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotfQotCi12
b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKLXsKLSAg
ICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigp
OwotICAgIGlmIChtZW51SXRlbSkKLSAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJ
dGVtKG1lbnVJdGVtKTsKLX0KLQotdW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+Q291bnRJdGVtcygpOwot
fQotCi12b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250
ZXh0TWVudUl0ZW0mIGl0ZW0pCi17Ci0gICAgQk1lbnVJdGVtKiBtZW51SXRlbSA9IGl0ZW0ucmVs
ZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLSAgICBpZiAobWVudUl0ZW0pCi0gICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSwgcG9zaXRpb24pOwotfQotCi1Q
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotdm9pZCBD
b250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQotewotICAgIGlmIChzdGF0aWNfY2FzdDxCTWVudSo+KG1lbnUpID09IG1fcGxhdGZv
cm1EZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbjsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBzdGF0aWNfY2FzdDxCTWVu
dSo+KG1lbnUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5j
cHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29u
dGV4dE1lbnVJdGVtSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
Ci0KLSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0KLSNpbmNsdWRlIDxNZW51Lmg+Ci0jaW5jbHVkZSA8TWVudUl0ZW0uaD4KLSNpbmNsdWRlIDxN
ZXNzYWdlLmg+Ci0jaW5jbHVkZSA8U3RyaW5nLmg+Ci0KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1E
ZXNjcmlwdGlvbiBpdGVtKQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGl0ZW07Ci19
Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51KiBzdWJNZW51
KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0ZW0oc3ViTWVudS0+
cGxhdGZvcm1EZXNjcmlwdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IEJNZXNzYWdlKENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uKSk7Ci19Ci0K
LUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlw
ZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1lbnUqIHN1Yk1lbnUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gQWN0aW9uVHlwZSkKLSAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
bmV3IEJNZW51SXRlbShCU3RyaW5nKHRpdGxlKS5TdHJpbmcoKSwgbmV3IEJNZXNzYWdlKGFjdGlv
bikpOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJTZXBhcmF0b3JJdGVtKCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0ZW0oc3ViTWVudS0+cGxhdGZv
cm1EZXNjcmlwdGlvbigpLCBuZXcgQk1lc3NhZ2UoYWN0aW9uKSk7Ci0gICAgICAgIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwoQlN0cmluZyh0aXRsZSkuU3RyaW5nKCkpOwotICAgIH0K
LX0KLQotQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKLXsKLSAgICBkZWxldGUg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotfQotCi1QbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24g
Q29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgQk1l
bnVJdGVtKiBpdGVtID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KLUNvbnRleHRNZW51SXRlbVR5cGUg
Q29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QKLXsKLSAgICBpZiAoZHluYW1pY19jYXN0PEJT
ZXBhcmF0b3JJdGVtKj4obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIFNl
cGFyYXRvclR5cGU7Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U3VibWVudSgpKQot
ICAgICAgICByZXR1cm4gU3VibWVudVR5cGU7Ci0gICAgcmV0dXJuIEFjdGlvblR5cGU7Ci19Ci0K
LXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSkK
LXsKLSAgICBDb250ZXh0TWVudUFjdGlvbiB0aGVBY3Rpb24gPSBhY3Rpb24oKTsKLSAgICBTdHJp
bmcgdGhlVGl0bGUgPSB0aXRsZSgpOwotICAgIEJNZW51KiBzdWJNZW51ID0gcGxhdGZvcm1TdWJN
ZW51KCk7Ci0gICAgZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLQotICAgIGlmICh0eXBl
ID09IEFjdGlvblR5cGUpCi0gICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVu
dUl0ZW0oQlN0cmluZyh0aGVUaXRsZSkuU3RyaW5nKCksIG5ldyBCTWVzc2FnZSh0aGVBY3Rpb24p
KTsKLSAgICBlbHNlIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbiA9IG5ldyBCU2VwYXJhdG9ySXRlbSgpOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoc3ViTWVudSkgewotICAgICAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3
IEJNZW51SXRlbShzdWJNZW51LCBuZXcgQk1lc3NhZ2UodGhlQWN0aW9uKSk7Ci0gICAgICAgICAg
ICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldExhYmVsKEJTdHJpbmcodGhlVGl0bGUpLlN0cmlu
ZygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSBuZXcgQk1lbnVJdGVtKEJTdHJpbmcodGhlVGl0bGUpLlN0cmluZygpLCBuZXcgQk1lc3NhZ2Uo
dGhlQWN0aW9uKSk7Ci0gICAgfQotfQotCi1Db250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0
ZW06OmFjdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0g
ICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24+KG1fcGxhdGZvcm1EZXNjcmlwdGlv
bi0+TWVzc2FnZSgpLT53aGF0KTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEFjdGlv
bihDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbikKLSAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5NZXNzYWdlKCktPndoYXQgPSBh
Y3Rpb247Ci19Ci0KLVN0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgcmV0
dXJuIEJTdHJpbmcobV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5MYWJlbCgpKTsKLX0KLQotdm9pZCBD
b250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCi17Ci0gICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciB3YXkgdG8gY29udmVydCBXZWJLaXQgU3Ry
aW5ncyBpbnRvIGMgc3RyaW5ncwotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwo
QlN0cmluZyh0aXRsZSkuU3RyaW5nKCkpOwotfQotCi1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBD
b250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+U3VibWVudSgpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0U3ViTWVudShDb250ZXh0TWVudSogbWVudSkKLXsKLSAgICAvLyBGSVhNRTogV2UgYXNz
dW1lIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiBpcyB2YWxpZAotICAgIGNvbnN0IGNoYXIqIHRpdGxl
ID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5MYWJlbCgpOwotICAgIGRlbGV0ZSBtX3BsYXRmb3Jt
RGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51SXRlbSht
ZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIG5ldyBCTWVzc2FnZShhY3Rpb24oKSkpOwotICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwodGl0bGUpOwotfQotCi12b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sIGNoZWNrZWQpCi17Ci0gICAgaWYgKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbikKLSAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5TZXRNYXJrZWQo
Y2hlY2tlZCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wgZW5h
YmxlKQotewotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAgIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbi0+U2V0RW5hYmxlZChlbmFibGUpOwotfQotCi1ib29sIENvbnRleHRNZW51
SXRlbTo6ZW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24p
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb24t
PklzRW5hYmxlZCgpOwotfQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b29raWVKYXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ29va2llSmFySGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0KLSNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBTaG91bGRuJ3QgdGhp
cyBiZSBzYXZlZCB0byBhbmQgcmVzdG9yZWQgZnJvbSBkaXNrIHRvbz8KLXN0YXRpYyBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBjb29raWVKYXIu
c2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwu
c3RyaW5nKCkpOwotfQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgLy8gRklYTUU6IGluY2x1ZGUg
SHR0cE9ubHkgY29va2llcy4KLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkp
OwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBzZXR0aW5nCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBs
ZW1lbnRlZAotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gZmFsc2U7IC8vIHJl
dHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxl
bWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9p
ZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhh
biBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3Vyc29yLmgiCi0KLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUN1cnNv
cjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGN1cnNvcikKLSAgICA6IG1fcGxhdGZvcm1DdXJzb3Io
Y3Vyc29yKQotewotfQotCi1DdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAg
IDogbV9wbGF0Zm9ybUN1cnNvcigwKQotewotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KLUN1cnNv
cjo6fkN1cnNvcigpCi17Ci0gICAgZGVsZXRlIG1fcGxhdGZvcm1DdXJzb3I7Ci19Ci0KLUN1cnNv
cjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotICAgIDogbV9wbGF0Zm9ybUN1cnNv
cigwKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUN1cnNvciYgQ3Vyc29yOjpvcGVy
YXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBkZWxldGUgbV9wbGF0Zm9ybUN1cnNv
cjsKLSAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvciA/IG5ldyBC
Q3Vyc29yKCpvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKSA6IDA7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1zdGF0aWMgQ3Vyc29yIGNyZWF0ZUN1cnNvckJ5SUQoQkN1cnNvcklEIGlkKQotewotICAg
IHJldHVybiBDdXJzb3IobmV3IEJDdXJzb3IoaWQpKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBwb2lu
dGVyQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvclN5c3RlbURlZmF1bHQoMCk7
Ci0gICAgcmV0dXJuIGN1cnNvclN5c3RlbURlZmF1bHQ7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbW92
ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JNb3ZlID0gY3JlYXRlQ3Vyc29y
QnlJRChCX0NVUlNPUl9JRF9NT1ZFKTsKLSAgICByZXR1cm4gY3Vyc29yTW92ZTsKLX0KLQotY29u
c3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JDcm9z
c0hhaXIgPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX0NST1NTX0hBSVIpOwotICAgIHJl
dHVybiBjdXJzb3JDcm9zc0hhaXI7Ci19Ci0KLWNvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCi17
Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JGb2xsb3dMaW5rID0gY3JlYXRlQ3Vyc29yQnlJRChC
X0NVUlNPUl9JRF9GT0xMT1dfTElOSyk7Ci0gICAgcmV0dXJuIGN1cnNvckZvbGxvd0xpbms7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgY3Vy
c29ySUJlYW0gPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX0lfQkVBTSk7Ci0gICAgcmV0
dXJuIGN1cnNvcklCZWFtOwotfQotCi1jb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQotewotICAg
IHN0YXRpYyBDdXJzb3IgY3Vyc29yUHJvZ3Jlc3MgPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09S
X0lEX1BST0dSRVNTKTsKLSAgICByZXR1cm4gY3Vyc29yUHJvZ3Jlc3M7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgaGVscEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JIZWxwID0gY3Jl
YXRlQ3Vyc29yQnlJRChCX0NVUlNPUl9JRF9IRUxQKTsKLSAgICByZXR1cm4gY3Vyc29ySGVscDsK
LX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vy
c29yIGN1cnNvclJlc2l6ZUVhc3QgPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX1JFU0la
RV9FQVNUKTsKLSAgICByZXR1cm4gY3Vyc29yUmVzaXplRWFzdDsKLX0KLQotY29uc3QgQ3Vyc29y
JiBub3J0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JSZXNpemVO
b3J0aCA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfUkVTSVpFX05PUlRIKTsKLSAgICBy
ZXR1cm4gY3Vyc29yUmVzaXplTm9ydGg7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvclJlc2l6ZU5vcnRoRWFzdCA9
IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfUkVTSVpFX05PUlRIX0VBU1QpOwotICAgIHJl
dHVybiBjdXJzb3JSZXNpemVOb3J0aEVhc3Q7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0
UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvclJlc2l6ZU5vcnRoV2Vz
dCA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfUkVTSVpFX05PUlRIX1dFU1QpOwotICAg
IHJldHVybiBjdXJzb3JSZXNpemVOb3J0aFdlc3Q7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhS
ZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29yUmVzaXplU291dGggPSBj
cmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX1JFU0laRV9TT1VUSCk7Ci0gICAgcmV0dXJuIGN1
cnNvclJlc2l6ZVNvdXRoOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNv
cigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JSZXNpemVTb3V0aEVhc3QgPSBjcmVhdGVD
dXJzb3JCeUlEKEJfQ1VSU09SX0lEX1JFU0laRV9TT1VUSF9FQVNUKTsKLSAgICByZXR1cm4gY3Vy
c29yUmVzaXplU291dGhFYXN0OwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1
cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JSZXNpemVTb3V0aFdlc3QgPSBjcmVh
dGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX1JFU0laRV9TT1VUSF9XRVNUKTsKLSAgICByZXR1cm4g
Y3Vyc29yUmVzaXplU291dGhXZXN0OwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJz
b3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29yUmVzaXplV2VzdCA9IGNyZWF0ZUN1cnNv
ckJ5SUQoQl9DVVJTT1JfSURfUkVTSVpFX1dFU1QpOwotICAgIHJldHVybiBjdXJzb3JSZXNpemVX
ZXN0OwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQotewotICAg
IHN0YXRpYyBDdXJzb3IgY3Vyc29yUmVzaXplTm9ydGhTb3V0aCA9IGNyZWF0ZUN1cnNvckJ5SUQo
Ql9DVVJTT1JfSURfUkVTSVpFX05PUlRIX1NPVVRIKTsKLSAgICByZXR1cm4gY3Vyc29yUmVzaXpl
Tm9ydGhTb3V0aDsKLX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigpCi17
Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JSZXNpemVFYXN0V2VzdCA9IGNyZWF0ZUN1cnNvckJ5
SUQoQl9DVVJTT1JfSURfUkVTSVpFX0VBU1RfV0VTVCk7Ci0gICAgcmV0dXJuIGN1cnNvclJlc2l6
ZUVhc3RXZXN0OwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1
cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JSZXNpemVOb3J0aEVhc3RTb3V0aFdl
c3QgPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX1JFU0laRV9OT1JUSF9FQVNUX1NPVVRI
X1dFU1QpOwotICAgIHJldHVybiBjdXJzb3JSZXNpemVOb3J0aEVhc3RTb3V0aFdlc3Q7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBz
dGF0aWMgQ3Vyc29yIGN1cnNvclJlc2l6ZU5vcnRoV2VzdFNvdXRoRWFzdCA9IGNyZWF0ZUN1cnNv
ckJ5SUQoQl9DVVJTT1JfSURfUkVTSVpFX05PUlRIX1dFU1RfU09VVEhfRUFTVCk7Ci0gICAgcmV0
dXJuIGN1cnNvclJlc2l6ZU5vcnRoV2VzdFNvdXRoRWFzdDsKLX0KLQotY29uc3QgQ3Vyc29yJiBj
b2x1bW5SZXNpemVDdXJzb3IoKQotewotICAgIHJldHVybiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigp
OwotfQotCi1jb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIG5v
cnRoU291dGhSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiB2ZXJ0aWNhbFRleHRD
dXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29ySUJlYW1Ib3Jpem9udGFsID0gY3Jl
YXRlQ3Vyc29yQnlJRChCX0NVUlNPUl9JRF9JX0JFQU1fSE9SSVpPTlRBTCk7Ci0gICAgcmV0dXJu
IGN1cnNvcklCZWFtSG9yaXpvbnRhbDsKLX0KLQotY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkK
LXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbnRl
eHRNZW51Q3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvckNvbnRleHRNZW51ID0g
Y3JlYXRlQ3Vyc29yQnlJRChCX0NVUlNPUl9JRF9DT05URVhUX01FTlUpOwotICAgIHJldHVybiBj
dXJzb3JDb250ZXh0TWVudTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQotewot
ICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29yTm90QWxsb3dlZCA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9D
VVJTT1JfSURfTk9UX0FMTE9XRUQpOwotICAgIHJldHVybiBjdXJzb3JOb3RBbGxvd2VkOwotfQot
Ci1jb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgY3Vyc29y
Q29weSA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfQ09QWSk7Ci0gICAgcmV0dXJuIGN1
cnNvckNvcHk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQotewotICAgIHN0
YXRpYyBDdXJzb3IgY3Vyc29yUHJvZ3Jlc3MgPSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lE
X1BST0dSRVNTKTsKLSAgICByZXR1cm4gY3Vyc29yUHJvZ3Jlc3M7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgYWxpYXNDdXJzb3IoKQotewotICAgIHJldHVybiBoYW5kQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgbm9uZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JOb0N1cnNv
ciA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfTk9fQ1VSU09SKTsKLSAgICByZXR1cm4g
Y3Vyc29yTm9DdXJzb3I7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNvcigpCi17
Ci0gICAgc3RhdGljIEN1cnNvciBjdXJzb3JOb3RBbGxvd2VkID0gY3JlYXRlQ3Vyc29yQnlJRChC
X0NVUlNPUl9JRF9OT1RfQUxMT1dFRCk7Ci0gICAgcmV0dXJuIGN1cnNvck5vdEFsbG93ZWQ7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1
cnNvclpvb21JbiA9IGNyZWF0ZUN1cnNvckJ5SUQoQl9DVVJTT1JfSURfWk9PTV9JTik7Ci0gICAg
cmV0dXJuIGN1cnNvclpvb21JbjsKLX0KLQotY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkK
LXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvclpvb21PdXQgPSBjcmVhdGVDdXJzb3JCeUlEKEJf
Q1VSU09SX0lEX1pPT01fT1VUKTsKLSAgICByZXR1cm4gY3Vyc29yWm9vbU91dDsKLX0KLQotY29u
c3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGN1cnNvckdyYWIg
PSBjcmVhdGVDdXJzb3JCeUlEKEJfQ1VSU09SX0lEX0dSQUIpOwotICAgIHJldHVybiBjdXJzb3JH
cmFiOwotfQotCi1jb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMg
Q3Vyc29yIGN1cnNvckdyYWJiaW5nID0gY3JlYXRlQ3Vyc29yQnlJRChCX0NVUlNPUl9JRF9HUkFC
QklORyk7Ci0gICAgcmV0dXJuIGN1cnNvckdyYWJiaW5nOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFp
a3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdE
YXRhSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdEYXRh
LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIERyYWdEYXRhOjph
c0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5n
IERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFtZSopIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLUNvbG9yIERyYWdEYXRhOjphc0NvbG9y
KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBDb2xvcigpOwot
fQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gY29udGFpbnNDb2xvcigpIHx8IGNvbnRhaW5zVVJMKCkgfHwgY29udGFpbnNQ
bGFpblRleHQoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRnJhbWUqLCBGaWxl
bmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBEcmFnRGF0YTo6YXNV
UkwoRnJhbWUqLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3ksIFN0cmlu
ZyogdGl0bGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJh
Z21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VI
YWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJh
Z0ltYWdlSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdJ
bWFnZS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgot
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKLX0KLQotdm9pZCBkZWxldGVEcmFnSW1h
Z2UoRHJhZ0ltYWdlUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFn
ZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotRHJhZ0ltYWdlUmVm
IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1EcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
SWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAJKHJl
dmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29w
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFdmVudExvb3AuaCIK
LQotI2luY2x1ZGUgPGFwcC9BcHBsaWNhdGlvbi5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotdm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKLXsKLSAgICBpZiAoIWJlX2FwcCkKLSAgICAgICAg
bV9lbmRlZCA9IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3BwCShy
ZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0
ZW1IYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0g
KgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpbmNsdWRlIDxEaXJlY3RvcnkuaD4KLSNpbmNsdWRlIDxFbnRyeS5oPgotI2luY2x1ZGUg
PEZpbGUuaD4KLSNpbmNsdWRlIDxGaW5kRGlyZWN0b3J5Lmg+Ci0jaW5jbHVkZSA8UGF0aC5oPgot
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIHN0cmluZy51dGY4KCk7Ci19
Ci0KLVN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgQlBhdGggcGF0aDsKLSAgICBp
ZiAoZmluZF9kaXJlY3RvcnkoQl9VU0VSX0RJUkVDVE9SWSwgJnBhdGgpICE9IEJfT0spCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBTdHJpbmcocGF0aC5QYXRoKCkpOwot
fQotCi1TdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxl
SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBoYW5kbGUgPSBp
bnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9p
ZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1pbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1WZWN0b3I8U3RyaW5nPiBsaXN0RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCi17Ci0gICAg
VmVjdG9yPFN0cmluZz4gZW50cmllczsKLSAgICBCRGlyZWN0b3J5IGRpcmVjdG9yeShwYXRoLnV0
ZjgoKS5kYXRhKCkpOwotICAgIGVudHJ5X3JlZiByZWY7Ci0gICAgd2hpbGUgKGRpcmVjdG9yeS5H
ZXROZXh0UmVmKCZyZWYpID09IEJfT0spCi0gICAgICAgIGVudHJpZXMuYXBwZW5kKHJlZi5uYW1l
KTsgICAgICAgIAotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0xvY2FsaXplZFN0cmlu
Z3NIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
TG9jYWxpemVkU3RyaW5nc0hhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Mb2NhbGl6ZWRTdHJpbmdzSGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBT
aW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdz
LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1
bHRMYWJlbCgpCi17Ci0gICAgcmV0dXJuICJTdWJtaXQiOwotfQotCi1TdHJpbmcgaW5wdXRFbGVt
ZW50QWx0VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgcmVzZXRC
dXR0b25EZWZhdWx0TGFiZWwoKQotewotICAgIHJldHVybiAiUmVzZXQiOwotfQotCi1TdHJpbmcg
ZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCi17Ci0gICAgcmV0dXJuICJEZXRhaWxzIjsKLX0K
LQotU3RyaW5nIGRlZmF1bHRMYW5ndWFnZSgpCi17Ci0gICAgcmV0dXJuICJlbiI7Ci19Ci0KLVN0
cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQotewotICAgIHJldHVybiAiU2VhcmNo
YWJsZSBJbmRleCI7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKLXsK
LSAgICByZXR1cm4gIkNob29zZSBGaWxlIjsKLX0KLQotU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VN
dWx0aXBsZUZpbGVzTGFiZWwoKQotewotICAgIHJldHVybiAiQ2hvb3NlIEZpbGVzIjsKLX0KLQot
U3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gIk5v
IGZpbGUgc2VsZWN0ZWQiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJ
bk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuICJPcGVuIGluIG5ldyB0YWIiOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkKLXsKLSAgICByZXR1cm4g
IkRvd25sb2FkIGxpbmsgdG8gZGlzayI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
b3B5TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gIkNvcHkgbGluayB0byBjbGlwYm9h
cmQiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3co
KQotewotICAgIHJldHVybiAiT3BlbiBpbWFnZSBpbiBuZXcgd2luZG93IjsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQotewotICAgIHJldHVybiAi
RG93bmxvYWQgaW1hZ2UgdG8gZGlzayI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
b3B5SW1hZ2VUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuICJDb3B5IGltYWdlIHRvIGNsaXBi
b2FyZCI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRv
dygpCi17Ci0gICAgcmV0dXJuICJPcGVuIHZpZGVvIGluIG5ldyB3aW5kb3ciOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQotewotICAgIHJldHVy
biAiT3BlbiBhdWRpbyBpbiBuZXcgd2luZG93IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuICJDb3B5IHZpZGVv
IGxpbmsgbG9jYXRpb24iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlv
TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gIkNvcHkgYXVkaW8gbGluayBsb2NhdGlv
biI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkK
LXsKLSAgICByZXR1cm4gIlRvZ2dsZSBtZWRpYSBjb250cm9scyI7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQotewotICAgIHJldHVybiAiVG9nZ2xlIG1l
ZGlhIGxvb3AgcGxheWJhY2siOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRW50ZXJW
aWRlb0Z1bGxzY3JlZW4oKQotewotICAgIHJldHVybiAiU3dpdGNoIHZpZGVvIHRvIGZ1bGxzY3Jl
ZW4iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKLXsKLSAgICBy
ZXR1cm4gIlBsYXkiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVzZSgp
Ci17Ci0gICAgcmV0dXJuICJQYXVzZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdN
ZWRpYU11dGUoKQotewotICAgIHJldHVybiAiTXV0ZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuICJPcGVuIGZyYW1l
IGluIG5ldyB3aW5kb3ciOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpCi17
Ci0gICAgcmV0dXJuICJDb3B5IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFj
aygpCi17Ci0gICAgcmV0dXJuICJHbyBiYWNrIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0dvRm9yd2FyZCgpCi17Ci0gICAgcmV0dXJuICJHbyBmb3J3YXJkIjsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKQotewotICAgIHJldHVybiAiU3RvcCI7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKQotewotICAgIHJldHVybiAiUmVsb2FkIjsK
LX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCi17Ci0gICAgcmV0dXJuICJDdXQi
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQotewotICAgIHJldHVybiAi
UGFzdGUiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQot
ewotICAgIHJldHVybiAiTm8gZ3Vlc3NlcyBmb3VuZCI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuICJJZ25vcmUgc3BlbGxpbmci
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCi17Ci0gICAg
cmV0dXJuICJMZWFybiBzcGVsbGluZyI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdT
ZWFyY2hXZWIoKQotewotICAgIHJldHVybiAiU2VhcmNoIHdlYiI7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKLXsKLSAgICBy
ZXR1cm4gIkxvb2t1cCBpbiBkaWN0aW9uYXJ5IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5MaW5rKCkKLXsKLSAgICByZXR1cm4gIk9wZW4gbGluayI7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKLXsKLSAgICByZXR1cm4gIklnbm9yZSBn
cmFtbWFyIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCi17
Ci0gICAgcmV0dXJuICJTcGVsbGluZyBtZW51IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKLXsKLSAgICByZXR1cm4gIlNob3cgc3Bl
bGxpbmcgcGFuZWwiOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGlu
ZygpCi17Ci0gICAgcmV0dXJuICJDaGVjayBzcGVsbGluZyI7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKQotewotICAgIHJldHVybiAiQ2hl
Y2sgc3BlbGxpbmcgd2hpbGUgdHlwaW5nIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuICJDaGVjayBmb3IgZ3Jh
bW1hciB3aXRoIHNwZWxsaW5nIjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRN
ZW51KCkKLXsKLSAgICByZXR1cm4gIkZvbnQgbWVudSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdCb2xkKCkKLXsKLSAgICByZXR1cm4gIkJvbGQiOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnSXRhbGljKCkKLXsKLSAgICByZXR1cm4gIkl0YWxpYyI7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQotewotICAgIHJldHVybiAiVW5kZXJsaW5l
IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQotewotICAgIHJldHVy
biAiT3V0bGluZSI7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0
aW9uTWVudSgpCi17Ci0gICAgcmV0dXJuICJXcml0aW5nIGRpcmVjdGlvbiBtZW51IjsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKQotewotICAgIHJldHVy
biAiRGVmYXVsdCBkaXJlY3Rpb24iOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVm
dFRvUmlnaHQoKQotewotICAgIHJldHVybiAiTGVmdCB0byByaWdodCI7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCi17Ci0gICAgcmV0dXJuICJSaWdodCB0byBs
ZWZ0IjsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKLXsK
LSAgICByZXR1cm4gIkluc3BlY3QiOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50U2Vh
cmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gIk5vIHJlY2VudCB0ZXh0IHNlYXJjaGVzIjsKLX0K
LQotU3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiAi
UmVjZW50IHRleHQgc2VhcmNoZXMiOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVjZW50
U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gIkNsZWFyIHJlY2VudCB0ZXh0IHNlYXJjaGVz
IjsKLX0KLQotU3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQotewotICAgIHJldHVybiAiVW5r
bm93biI7Ci19Ci0KLVN0cmluZyBBWFdlYkFyZWFUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLVN0cmluZyBBWExpbmtUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyBBWExpc3RNYXJrZXJUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyBBWEltYWdlTWFwVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci1TdHJpbmcgQVhIZWFkaW5nVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1T
dHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotU3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gU3RyaW5nKGZpbGVuYW1lKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQotewotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYVGV4dEZpZWxkQWN0aW9uVmVyYigpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhSYWRpb0J1dHRvbkFjdGlvblZlcmIo
KQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYQ2hlY2tlZENoZWNrQm94
QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhVbmNo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIEFYTGlua0FjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIEFYRGVmaW5pdGlvbkxpc3RUZXJtVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgQVhEZWZpbml0aW9uTGlzdERlZmluaXRpb25UZXh0KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2lu
Z1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JDaGVja2JveFRleHQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
VmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1p
c3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4
dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JSYWRpb1Rl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1
ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5
cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNt
YXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9y
VVJMVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlv
bk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVBhdHRlcm5NaXNtYXRjaFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChp
bnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0IFN0
cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvTG9nZ2luZ0hhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Mb2dnaW5nSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0xvZ2dpbmdIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUg
U2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lk
IEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgLy8gRklYTUU6
IFNob3VsZCByZWFkIHRoZSBsb2dnaW5nIGNoYW5uZWxzIGZyb20gYSBmaWxlLgotICAgIHN0YXRp
YyBib29sIGhhdmVJbml0aWFsaXplZExvZ2dpbmdDaGFubmVscyA9IGZhbHNlOwotICAgIGlmICho
YXZlSW5pdGlhbGl6ZWRMb2dnaW5nQ2hhbm5lbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhh
dmVJbml0aWFsaXplZExvZ2dpbmdDaGFubmVscyA9IHRydWU7Ci0KLSAgICBMb2dFdmVudHMuc3Rh
dGUgPSBXVEZMb2dDaGFubmVsT247Ci0gICAgTG9nRnJhbWVzLnN0YXRlID0gV1RGTG9nQ2hhbm5l
bE9uOwotICAgIExvZ0xvYWRpbmcuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Ci0gICAgTG9nUGxh
dGZvcm1MZWFrcy5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlwZVJl
Z2lzdHJ5SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L01JTUVUeXBlUmVnaXN0cnlIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9s
bHRlY2ggQVNBCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3Rp
cHBpQGdteC5kZT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxN
aW1lVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLXN0cnVjdCBFeHRlbnNpb25NYXAgewotICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lv
bjsKLSAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBFeHRlbnNp
b25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7Ci0gICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwKLSAg
ICB7ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAot
ICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCi0gICAgeyAianBlZyIsICJpbWFnZS9qcGVn
IiB9LAotICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAotICAgIHsgImpzIiwgImFwcGxpY2F0
aW9uL3gtamF2YXNjcmlwdCIgfSwKLSAgICB7ICJwZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9LAot
ICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCi0gICAgeyAicnNzIiwgImFwcGxpY2F0aW9uL3Jz
cyt4bWwiIH0sCi0gICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwiIH0sCi0gICAgeyAidGV4dCIs
ICJ0ZXh0L3BsYWluIiB9LAotICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAotICAgIHsgInhi
bSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCi0gICAgeyAieG1sIiwgInRleHQveG1sIiB9LAotICAg
IHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKLSAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRt
bCt4bWwiIH0sCi0gICAgeyAwLCAwIH0KLX07Ci0KLVN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgU3RyaW5nIHN0ciA9IGV4dC5sb3dlcigpOwotCi0gICAg
Ly8gVHJ5IFdlYkNvcmUgYnVpbHQtaW4gdHlwZXMuCi0gICAgY29uc3QgRXh0ZW5zaW9uTWFwKiBl
eHRNYXAgPSBleHRlbnNpb25NYXA7Ci0gICAgd2hpbGUgKGV4dE1hcC0+ZXh0ZW5zaW9uKSB7Ci0g
ICAgICAgIGlmIChzdHIgPT0gZXh0TWFwLT5leHRlbnNpb24pCi0gICAgICAgICAgICByZXR1cm4g
ZXh0TWFwLT5taW1lVHlwZTsKLSAgICAgICAgKytleHRNYXA7Ci0gICAgfQotCi0gICAgLy8gVHJ5
IHN5c3RlbSBtaW1lIGRhdGFiYXNlLgotICAgIFN0cmluZyBmYWtlRmlsZU5hbWUoImZpbGVuYW1l
LiIpOwotICAgIGZha2VGaWxlTmFtZS5hcHBlbmQoc3RyKTsKLQotICAgIEJNaW1lVHlwZSB0eXBl
OwotICAgIGlmIChCTWltZVR5cGU6Okd1ZXNzTWltZVR5cGUoZmFrZUZpbGVOYW1lLnV0ZjgoKS5k
YXRhKCksICZ0eXBlKSA9PSBCX09LKQotICAgICAgICByZXR1cm4gdHlwZS5UeXBlKCk7Ci0KLSAg
ICAvLyB1bmtub3duCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29sIE1JTUVUeXBlUmVn
aXN0cnk6OmlzQXBwbGljYXRpb25QbHVnaW5NSU1FVHlwZShjb25zdCBTdHJpbmcmKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAJKHJl
dmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2Fy
ZEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0KLSNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVk
ZSA8c3VwcG9ydC9Mb2NrZXIuaD4KLSNpbmNsdWRlIDxDbGlwYm9hcmQuaD4KLSNpbmNsdWRlIDxN
ZXNzYWdlLmg+Ci0jaW5jbHVkZSA8U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzdGVib2FyZDo6UGFzdGVib2FyZCgp
Ci17Ci19Ci0KLVBhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKCkKLXsKLX0KLQotUGFzdGVib2FyZCog
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQotewotICAgIHN0YXRpYyBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQ7Ci0gICAgcmV0dXJuICZwYXN0ZWJvYXJkOwotfQotCi0vLyBCQ2xpcGJvYXJk
IHVuZm9ydHVuYXRlbHkgZG9lcyBub3QgZGVyaXZlIGZyb20gQkxvY2tlciwgc28gd2UgY2Fubm90
IHVzZSBCQXV0b2xvY2suCi1jbGFzcyBBdXRvQ2xpcGJvYXJkTG9ja2VyIHsKLXB1YmxpYzoKLSAg
ICBBdXRvQ2xpcGJvYXJkTG9ja2VyKEJDbGlwYm9hcmQqIGNsaXBib2FyZCkKLSAgICAgICAgOiBt
X2NsaXBib2FyZChjbGlwYm9hcmQpCi0gICAgICAgICwgbV9pc0xvY2tlZChjbGlwYm9hcmQgJiYg
Y2xpcGJvYXJkLT5Mb2NrKCkpCi0gICAgewotICAgIH0KLQotICAgIH5BdXRvQ2xpcGJvYXJkTG9j
a2VyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2lzTG9ja2VkKQotICAgICAgICAgICAgbV9jbGlw
Ym9hcmQtPlVubG9jaygpOwotICAgIH0KLQotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faXNMb2NrZWQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEJD
bGlwYm9hcmQqIG1fY2xpcGJvYXJkOwotICAgIGJvb2wgbV9pc0xvY2tlZDsKLX07Ci0KLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2Fu
U21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBdXRvQ2xpcGJvYXJkTG9j
a2VyIGxvY2tlcihiZV9jbGlwYm9hcmQpOwotICAgIGlmICghbG9ja2VyLmlzTG9ja2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGJlX2NsaXBib2FyZC0+Q2xlYXIoKTsKLSAgICBCTWVzc2Fn
ZSogZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQlN0cmluZyBzdHJpbmcoZnJhbWUtPnNlbGVjdGVkVGV4dCgpKTsKLQot
ICAgIC8vIFJlcGxhY2UgdW53YW50ZWQgcmVwcmVzZW50YXRpb24gb2YgYmxhbmsgbGluZXMKLSAg
ICBjb25zdCBjaGFyKiB1dGY4QmxhbmtMaW5lID0gIlwzMDJcMjQwXG4iOwotICAgIHN0cmluZy5S
ZXBsYWNlQWxsKHV0ZjhCbGFua0xpbmUsICJcbiIpOwotCi0gICAgZGF0YS0+QWRkRGF0YSgidGV4
dC9wbGFpbiIsIEJfTUlNRV9UWVBFLCBzdHJpbmcuU3RyaW5nKCksIHN0cmluZy5MZW5ndGgoKSk7
Ci0KLSAgICBCU3RyaW5nIG1hcmt1cFN0cmluZyhjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwg
MCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsK
LSAgICBkYXRhLT5BZGREYXRhKCJ0ZXh0L2h0bWwiLCBCX01JTUVfVFlQRSwgbWFya3VwU3RyaW5n
LlN0cmluZygpLCBtYXJrdXBTdHJpbmcuTGVuZ3RoKCkpOwotCi0gICAgYmVfY2xpcGJvYXJkLT5D
b21taXQoKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJp
bmcmIHRleHQpCi17Ci0gICAgQXV0b0NsaXBib2FyZExvY2tlciBsb2NrZXIoYmVfY2xpcGJvYXJk
KTsKLSAgICBpZiAoIWxvY2tlci5pc0xvY2tlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
ZV9jbGlwYm9hcmQtPkNsZWFyKCk7Ci0gICAgQk1lc3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQt
PkRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJTdHJpbmcg
c3RyaW5nKHRleHQpOwotICAgIGRhdGEtPkFkZERhdGEoInRleHQvcGxhaW4iLCBCX01JTUVfVFlQ
RSwgc3RyaW5nLlN0cmluZygpLCBzdHJpbmcuTGVuZ3RoKCkpOwotICAgIGJlX2NsaXBib2FyZC0+
Q29tbWl0KCk7Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCi17Ci0gICAgQXV0b0NsaXBib2FyZExvY2tl
ciBsb2NrZXIoYmVfY2xpcGJvYXJkKTsKLSAgICBpZiAoIWxvY2tlci5pc0xvY2tlZCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBib2Fy
ZC0+RGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgY29uc3QgY2hhciogYnVmZmVyID0gMDsKLSAgICBzc2l6ZV90IGJ1ZmZlckxlbmd0aDsKLSAg
ICBCU3RyaW5nIHN0cmluZzsKLSAgICBpZiAoZGF0YS0+RmluZERhdGEoInRleHQvcGxhaW4iLCBC
X01JTUVfVFlQRSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKio+KCZidWZmZXIpLCAmYnVm
ZmVyTGVuZ3RoKSA9PSBCX09LKQotICAgICAgICBzdHJpbmcuQXBwZW5kKGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoKTsKLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NS
ZWZQdHI8UmFuZ2U+IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQ
bGFpblRleHQpCi17Ci0gICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLQotICAgIEF1dG9DbGlw
Ym9hcmRMb2NrZXIgbG9ja2VyKGJlX2NsaXBib2FyZCk7Ci0gICAgaWYgKCFsb2NrZXIuaXNMb2Nr
ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBi
b2FyZC0+RGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBj
b25zdCBjaGFyKiBidWZmZXIgPSAwOwotICAgIHNzaXplX3QgYnVmZmVyTGVuZ3RoOwotICAgIGlm
IChkYXRhLT5GaW5kRGF0YSgidGV4dC9odG1sIiwgQl9NSU1FX1RZUEUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgdm9pZCoqPigmYnVmZmVyKSwgJmJ1ZmZlckxlbmd0aCkgPT0gQl9PSykgewotICAg
ICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIsIHRydWUpOwotICAgICAgICBTdHJp
bmcgaHRtbCA9IGRlY29kZXItPmRlY29kZShidWZmZXIsIGJ1ZmZlckxlbmd0aCk7Ci0gICAgICAg
IGh0bWwgKz0gZGVjb2Rlci0+Zmx1c2goKTsKLQotICAgICAgICBpZiAoIWh0bWwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIGh0bWwsICIiLCBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQpOwotICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChk
YXRhLT5GaW5kRGF0YSgidGV4dC9wbGFpbiIsIEJfTUlNRV9UWVBFLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHZvaWQqKj4oJmJ1ZmZlciksICZidWZmZXJMZW5ndGgpID09IEJfT0spIHsKLSAgICAg
ICAgQlN0cmluZyBwbGFpblRleHQoYnVmZmVyLCBidWZmZXJMZW5ndGgpOwotCi0gICAgICAgIGNo
b3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBwbGFpblRleHQp
OwotICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVs
ZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQotewotICAgIEF1
dG9DbGlwYm9hcmRMb2NrZXIgbG9ja2VyKGJlX2NsaXBib2FyZCk7Ci0gICAgaWYgKCFsb2NrZXIu
aXNMb2NrZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmVfY2xpcGJvYXJkLT5DbGVhcigp
OwotCi0gICAgQk1lc3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKLSAgICBpZiAo
IWRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJTdHJpbmcgc3RyaW5nKHVybC5zdHJpbmco
KSk7Ci0gICAgZGF0YS0+QWRkRGF0YSgidGV4dC9wbGFpbiIsIEJfTUlNRV9UWVBFLCBzdHJpbmcu
U3RyaW5nKCksIHN0cmluZy5MZW5ndGgoKSk7Ci0gICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsK
LX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhc3RlYm9h
cmQ6OmNsZWFyKCkKLXsKLSAgICBBdXRvQ2xpcGJvYXJkTG9ja2VyIGxvY2tlcihiZV9jbGlwYm9h
cmQpOwotICAgIGlmICghbG9ja2VyLmlzTG9ja2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGJlX2NsaXBib2FyZC0+Q2xlYXIoKTsKLSAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAJ
KHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZv
cm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFu
emFuaUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1
cGVyc3RpcHBpQGdteC5kZT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLQot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29k
ZXMuaCIKLSNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+Ci0jaW5jbHVkZSA8TWVzc2FnZS5oPgot
I2luY2x1ZGUgPFN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckhhaWt1
S2V5Q29kZShjaGFyIHNpbmdsZUJ5dGUsIGludCBrZXlDb2RlKQotewotICAgIHN3aXRjaCAoc2lu
Z2xlQnl0ZSkgewotICAgIGNhc2UgQl9GVU5DVElPTl9LRVk6Ci0KLSAgICAgICAgc3dpdGNoIChr
ZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgQl9GMV9LRVk6Ci0gICAgICAgICAgICByZXR1cm4gIkYx
IjsKLSAgICAgICAgY2FzZSBCX0YyX0tFWToKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAg
ICAgICBjYXNlIEJfRjNfS0VZOgotICAgICAgICAgICAgcmV0dXJuICJGMyI7Ci0gICAgICAgIGNh
c2UgQl9GNF9LRVk6Ci0gICAgICAgICAgICByZXR1cm4gIkY0IjsKLSAgICAgICAgY2FzZSBCX0Y1
X0tFWToKLSAgICAgICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBjYXNlIEJfRjZfS0VZOgot
ICAgICAgICAgICAgcmV0dXJuICJGNiI7Ci0gICAgICAgIGNhc2UgQl9GN19LRVk6Ci0gICAgICAg
ICAgICByZXR1cm4gIkY3IjsKLSAgICAgICAgY2FzZSBCX0Y4X0tFWToKLSAgICAgICAgICAgIHJl
dHVybiAiRjgiOwotICAgICAgICBjYXNlIEJfRjlfS0VZOgotICAgICAgICAgICAgcmV0dXJuICJG
OSI7Ci0gICAgICAgIGNhc2UgQl9GMTBfS0VZOgotICAgICAgICAgICAgcmV0dXJuICJGMTAiOwot
ICAgICAgICBjYXNlIEJfRjExX0tFWToKLSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAgICAg
ICAgY2FzZSBCX0YxMl9LRVk6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMiI7Ci0gICAgICAgIGNh
c2UgQl9QUklOVF9LRVk6Ci0gICAgICAgICAgICByZXR1cm4gIlByaW50IjsKLSAgICAgICAgY2Fz
ZSBCX1BBVVNFX0tFWToKLSAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNl
IEJfU0NST0xMX0tFWToKLSAgICAgICAgICAgIHJldHVybiAiIjsgLy8gRklYTUUKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQl9CQUNLU1BBQ0U6Ci0gICAgICAgIHJldHVy
biAiVSswMDA4IjsKLSAgICBjYXNlIEJfTEVGVF9BUlJPVzoKLSAgICAgICAgcmV0dXJuICJMZWZ0
IjsKLSAgICBjYXNlIEJfUklHSFRfQVJST1c6Ci0gICAgICAgIHJldHVybiAiUmlnaHQiOwotICAg
IGNhc2UgQl9VUF9BUlJPVzoKLSAgICAgICAgcmV0dXJuICJVcCI7Ci0gICAgY2FzZSBCX0RPV05f
QVJST1c6Ci0gICAgICAgIHJldHVybiAiRG93biI7Ci0gICAgY2FzZSBCX0lOU0VSVDoKLSAgICAg
ICAgcmV0dXJuICJJbnNlcnQiOwotICAgIGNhc2UgQl9FTlRFUjoKLSAgICAgICAgcmV0dXJuICJF
bnRlciI7Ci0gICAgY2FzZSBCX0RFTEVURToKLSAgICAgICAgcmV0dXJuICJVKzAwN0YiOwotICAg
IGNhc2UgQl9IT01FOgotICAgICAgICByZXR1cm4gIkhvbWUiOwotICAgIGNhc2UgQl9FTkQ6Ci0g
ICAgICAgIHJldHVybiAiRW5kIjsKLSAgICBjYXNlIEJfUEFHRV9VUDoKLSAgICAgICAgcmV0dXJu
ICJQYWdlVXAiOwotICAgIGNhc2UgQl9QQUdFX0RPV046Ci0gICAgICAgIHJldHVybiAiUGFnZURv
d24iOwotICAgIGNhc2UgQl9UQUI6Ci0gICAgICAgIHJldHVybiAiVSswMDA5IjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBlcihzaW5nbGVC
eXRlKSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChjaGFyIHNp
bmdsZUJ5dGUsIGludCBrZXlDb2RlKQotewotICAgIHN3aXRjaCAoc2luZ2xlQnl0ZSkgewotICAg
IGNhc2UgQl9GVU5DVElPTl9LRVk6Ci0gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkgewotICAgICAg
ICBjYXNlIEJfRjFfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0YxOwotICAgICAgICBjYXNl
IEJfRjJfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0YyOwotICAgICAgICBjYXNlIEJfRjNf
S0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0YzOwotICAgICAgICBjYXNlIEJfRjRfS0VZOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX0Y0OwotICAgICAgICBjYXNlIEJfRjVfS0VZOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX0Y1OwotICAgICAgICBjYXNlIEJfRjZfS0VZOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0Y2OwotICAgICAgICBjYXNlIEJfRjdfS0VZOgotICAgICAgICAgICAgcmV0dXJu
IFZLX0Y3OwotICAgICAgICBjYXNlIEJfRjhfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y4
OwotICAgICAgICBjYXNlIEJfRjlfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y5OwotICAg
ICAgICBjYXNlIEJfRjEwX0tFWToKLSAgICAgICAgICAgIHJldHVybiBWS19GMTA7Ci0gICAgICAg
IGNhc2UgQl9GMTFfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX0YxMTsKLSAgICAgICAgY2Fz
ZSBCX0YxMl9LRVk6Ci0gICAgICAgICAgICByZXR1cm4gVktfRjEyOwotICAgICAgICBjYXNlIEJf
UFJJTlRfS0VZOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU5UOwotICAgICAgICBjYXNlIEJf
UEFVU0VfS0VZOgotICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FCi0gICAgICAgIGNhc2Ug
Ql9TQ1JPTExfS0VZOgotICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FCi0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEJfQkFDS1NQQUNFOgotICAgICAgICByZXR1cm4g
VktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgY2FzZSBCX1RBQjoKLSAgICAgICAg
cmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5Ci0gICAgY2FzZSBCX1JFVFVSTjoKLSAgICAg
ICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8oMEQpIFJldHVybiBrZXkKLSAgICBjYXNlIEJfRVNDQVBF
OgotICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKLSAgICBjYXNlIEJf
U1BBQ0U6Ci0gICAgICAgIHJldHVybiBWS19TUEFDRTsgLy8gKDIwKSBTUEFDRUJBUgotICAgIGNh
c2UgQl9QQUdFX1VQOgotICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBr
ZXkKLSAgICBjYXNlIEJfUEFHRV9ET1dOOgotICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIy
KSBQQUdFIERPV04ga2V5Ci0gICAgY2FzZSBCX0VORDoKLSAgICAgICAgcmV0dXJuIFZLX0VORDsg
Ly8gKDIzKSBFTkQga2V5Ci0gICAgY2FzZSBCX0hPTUU6Ci0gICAgICAgIHJldHVybiBWS19IT01F
OyAvLyAoMjQpIEhPTUUga2V5Ci0gICAgY2FzZSBCX0xFRlRfQVJST1c6Ci0gICAgICAgIHJldHVy
biBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgY2FzZSBCX1VQX0FSUk9XOgot
ICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5Ci0gICAgY2FzZSBCX1JJ
R0hUX0FSUk9XOgotICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cg
a2V5Ci0gICAgY2FzZSBCX0RPV05fQVJST1c6Ci0gICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAo
MjgpIERPV04gQVJST1cga2V5Ci0gICAgY2FzZSBCX0lOU0VSVDoKLSAgICAgICAgcmV0dXJuIFZL
X0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5Ci0gICAgY2FzZSBCX0RFTEVURToKLSAgICAgICAgcmV0
dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0KLSAgICBjYXNlICcwJzoKLSAgICBjYXNl
ICcpJzoKLSAgICAgICAgcmV0dXJuIFZLXzA7Ci0gICAgY2FzZSAnMSc6Ci0gICAgY2FzZSAnISc6
Ci0gICAgICAgIHJldHVybiBWS18xOwotICAgIGNhc2UgJzInOgotICAgIGNhc2UgJ0AnOgotICAg
ICAgICByZXR1cm4gVktfMjsKLSAgICBjYXNlICczJzoKLSAgICBjYXNlICcjJzoKLSAgICAgICAg
cmV0dXJuIFZLXzM7Ci0gICAgY2FzZSAnNCc6Ci0gICAgY2FzZSAnJCc6Ci0gICAgICAgIHJldHVy
biBWS180OwotICAgIGNhc2UgJzUnOgotICAgIGNhc2UgJyUnOgotICAgICAgICByZXR1cm4gVktf
NTsKLSAgICBjYXNlICc2JzoKLSAgICBjYXNlICdeJzoKLSAgICAgICAgcmV0dXJuIFZLXzY7Ci0g
ICAgY2FzZSAnNyc6Ci0gICAgY2FzZSAnJic6Ci0gICAgICAgIHJldHVybiBWS183OwotICAgIGNh
c2UgJzgnOgotICAgIGNhc2UgJyonOgotICAgICAgICByZXR1cm4gVktfODsKLSAgICBjYXNlICc5
JzoKLSAgICBjYXNlICcoJzoKLSAgICAgICAgcmV0dXJuIFZLXzk7Ci0gICAgY2FzZSAnYSc6Ci0g
ICAgY2FzZSAnQSc6Ci0gICAgICAgIHJldHVybiBWS19BOwotICAgIGNhc2UgJ2InOgotICAgIGNh
c2UgJ0InOgotICAgICAgICByZXR1cm4gVktfQjsKLSAgICBjYXNlICdjJzoKLSAgICBjYXNlICdD
JzoKLSAgICAgICAgcmV0dXJuIFZLX0M7Ci0gICAgY2FzZSAnZCc6Ci0gICAgY2FzZSAnRCc6Ci0g
ICAgICAgIHJldHVybiBWS19EOwotICAgIGNhc2UgJ2UnOgotICAgIGNhc2UgJ0UnOgotICAgICAg
ICByZXR1cm4gVktfRTsKLSAgICBjYXNlICdmJzoKLSAgICBjYXNlICdGJzoKLSAgICAgICAgcmV0
dXJuIFZLX0Y7Ci0gICAgY2FzZSAnZyc6Ci0gICAgY2FzZSAnRyc6Ci0gICAgICAgIHJldHVybiBW
S19HOwotICAgIGNhc2UgJ2gnOgotICAgIGNhc2UgJ0gnOgotICAgICAgICByZXR1cm4gVktfSDsK
LSAgICBjYXNlICdpJzoKLSAgICBjYXNlICdJJzoKLSAgICAgICAgcmV0dXJuIFZLX0k7Ci0gICAg
Y2FzZSAnaic6Ci0gICAgY2FzZSAnSic6Ci0gICAgICAgIHJldHVybiBWS19KOwotICAgIGNhc2Ug
J2snOgotICAgIGNhc2UgJ0snOgotICAgICAgICByZXR1cm4gVktfSzsKLSAgICBjYXNlICdsJzoK
LSAgICBjYXNlICdMJzoKLSAgICAgICAgcmV0dXJuIFZLX0w7Ci0gICAgY2FzZSAnbSc6Ci0gICAg
Y2FzZSAnTSc6Ci0gICAgICAgIHJldHVybiBWS19NOwotICAgIGNhc2UgJ24nOgotICAgIGNhc2Ug
J04nOgotICAgICAgICByZXR1cm4gVktfTjsKLSAgICBjYXNlICdvJzoKLSAgICBjYXNlICdPJzoK
LSAgICAgICAgcmV0dXJuIFZLX087Ci0gICAgY2FzZSAncCc6Ci0gICAgY2FzZSAnUCc6Ci0gICAg
ICAgIHJldHVybiBWS19QOwotICAgIGNhc2UgJ3EnOgotICAgIGNhc2UgJ1EnOgotICAgICAgICBy
ZXR1cm4gVktfUTsKLSAgICBjYXNlICdyJzoKLSAgICBjYXNlICdSJzoKLSAgICAgICAgcmV0dXJu
IFZLX1I7Ci0gICAgY2FzZSAncyc6Ci0gICAgY2FzZSAnUyc6Ci0gICAgICAgIHJldHVybiBWS19T
OwotICAgIGNhc2UgJ3QnOgotICAgIGNhc2UgJ1QnOgotICAgICAgICByZXR1cm4gVktfVDsKLSAg
ICBjYXNlICd1JzoKLSAgICBjYXNlICdVJzoKLSAgICAgICAgcmV0dXJuIFZLX1U7Ci0gICAgY2Fz
ZSAndic6Ci0gICAgY2FzZSAnVic6Ci0gICAgICAgIHJldHVybiBWS19WOwotICAgIGNhc2UgJ3cn
OgotICAgIGNhc2UgJ1cnOgotICAgICAgICByZXR1cm4gVktfVzsKLSAgICBjYXNlICd4JzoKLSAg
ICBjYXNlICdYJzoKLSAgICAgICAgcmV0dXJuIFZLX1g7Ci0gICAgY2FzZSAneSc6Ci0gICAgY2Fz
ZSAnWSc6Ci0gICAgICAgIHJldHVybiBWS19ZOwotICAgIGNhc2UgJ3onOgotICAgIGNhc2UgJ1on
OgotICAgICAgICByZXR1cm4gVktfWjsKLSAgICBjYXNlICc7JzoKLSAgICBjYXNlICc6JzoKLSAg
ICAgICAgcmV0dXJuIFZLX09FTV8xOwotICAgIGNhc2UgJysnOgotICAgIGNhc2UgJz0nOgotICAg
ICAgICByZXR1cm4gVktfT0VNX1BMVVM7Ci0gICAgY2FzZSAnLCc6Ci0gICAgY2FzZSAnPCc6Ci0g
ICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7Ci0gICAgY2FzZSAnLSc6Ci0gICAgY2FzZSAnXyc6
Ci0gICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7Ci0gICAgY2FzZSAnLic6Ci0gICAgY2FzZSAn
Pic6Ci0gICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOwotICAgIGNhc2UgJy8nOgotICAgIGNh
c2UgJz8nOgotICAgICAgICByZXR1cm4gVktfT0VNXzI7Ci0gICAgY2FzZSAnYCc6Ci0gICAgY2Fz
ZSAnfic6Ci0gICAgICAgIHJldHVybiBWS19PRU1fMzsKLSAgICBjYXNlICdbJzoKLSAgICBjYXNl
ICd7JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV80OwotICAgIGNhc2UgJ1xcJzoKLSAgICBjYXNl
ICd8JzoKLSAgICAgICAgcmV0dXJuIFZLX09FTV81OwotICAgIGNhc2UgJ10nOgotICAgIGNhc2Ug
J30nOgotICAgICAgICByZXR1cm4gVktfT0VNXzY7Ci0gICAgY2FzZSAnXCcnOgotICAgIGNhc2Ug
JyInOgotICAgICAgICByZXR1cm4gVktfT0VNXzc7Ci0gICAgfQotICAgIHJldHVybiBzaW5nbGVC
eXRlOwotfQotCi1QbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChC
TWVzc2FnZSogbWVzc2FnZSkKLSAgICA6IG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNL
ZXlwYWQoZmFsc2UpCi0gICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQotICAgICwgbV9jdHJsS2V5KGZh
bHNlKQotICAgICwgbV9hbHRLZXkoZmFsc2UpCi0gICAgLCBtX21ldGFLZXkoZmFsc2UpCi17Ci0g
ICAgQlN0cmluZyBieXRlcyA9IG1lc3NhZ2UtPkZpbmRTdHJpbmcoImJ5dGVzIik7Ci0KLSAgICBt
X25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gbWVzc2FnZS0+RmluZEludDMyKCJrZXkiKTsKLQotICAg
IG1fdGV4dCA9IFN0cmluZzo6ZnJvbVVURjgoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgp
KTsKLSAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKGJ5dGVzLlN0cmluZygpLCBieXRlcy5M
ZW5ndGgoKSk7Ci0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvckhhaWt1S2V5
Q29kZShieXRlcy5CeXRlQXQoMCksIG1fbmF0aXZlVmlydHVhbEtleUNvZGUpOwotCi0gICAgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5
dGVBdCgwKSwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSk7Ci0KLSAgICBpZiAobWVzc2FnZS0+d2hh
dCA9PSBCX0tFWV9VUCkKLSAgICAgICAgbV90eXBlID0gS2V5VXA7Ci0gICAgZWxzZSBpZiAobWVz
c2FnZS0+d2hhdCA9PSBCX0tFWV9ET1dOKQotICAgICAgICBtX3R5cGUgPSBLZXlEb3duOwotCi0g
ICAgaW50MzIgbW9kaWZpZXJzID0gbWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMiKTsKLSAg
ICBtX3NoaWZ0S2V5ID0gbW9kaWZpZXJzICYgQl9TSElGVF9LRVk7Ci0gICAgbV9jdHJsS2V5ID0g
bW9kaWZpZXJzICYgQl9DT01NQU5EX0tFWTsKLSAgICBtX2FsdEtleSA9IG1vZGlmaWVycyAmIEJf
Q09OVFJPTF9LRVk7Ci0gICAgbV9tZXRhS2V5ID0gbW9kaWZpZXJzICYgQl9PUFRJT05fS0VZOwot
fQotCi12b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50
KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQotewotICAgIC8vIENh
biBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdLZXlEb3duIG9yIENoYXIsIGFz
IHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNpb25zLgotICAgIEFTU0VSVCht
X3R5cGUgPT0gS2V5RG93bik7Ci0gICAgbV90eXBlID0gdHlwZTsKLQotICAgIGlmIChiYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlwZSA9PSBS
YXdLZXlEb3duKSB7Ci0gICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwotICAgICAgICBtX3VubW9k
aWZpZWRUZXh0ID0gU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9rZXlJZGVudGlm
aWVyID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKLSAg
ICB9Ci19Ci0KLWJvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0
ZSgpCi17Ci0gICAgcmV0dXJuIDo6bW9kaWZpZXJzKCkgJiBCX0NBUFNfTE9DSzsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJvb2wmIHNo
aWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkpCi17Ci0g
ICAgdW5pdDMyIG1vZGlmaWVycyA9IDo6bW9kaWZpZXJzKCk7Ci0gICAgc2hpZnRLZXkgPSBtb2Rp
ZmllcnMgJiBCX1NISUZUX0tFWTsKLSAgICBjdHJsS2V5ID0gbW9kaWZpZXJzICYgQl9DT01NQU5E
X0tFWTsKLSAgICBhbHRLZXkgPSBtb2RpZmllcnMgJiBCX0NPTlRST0xfS0VZOwotICAgIG1ldGFL
ZXkgPSBtb2RpZmllcnMgJiBCX09QVElPTl9LRVk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2
ZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSA8TWVzc2FnZS5oPgotI2luY2x1ZGUgPFZpZXcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSkKLSAgICA6IG1fcG9zaXRpb24obWVz
c2FnZS0+RmluZFBvaW50KCJiZTp2aWV3X3doZXJlIikpCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9u
KG1lc3NhZ2UtPkZpbmRQb2ludCgic2NyZWVuX3doZXJlIikpCi0gICAgLCBtX2NsaWNrQ291bnQo
bWVzc2FnZS0+RmluZEludDMyKCJjbGlja3MiKSkKLSAgICAsIG1fdGltZXN0YW1wKG1lc3NhZ2Ut
PkZpbmRJbnQ2NCgid2hlbiIpIC8gMTAwMDAwMC4wKQotewotICAgIGludDMyIGJ1dHRvbnMgPSAw
OwotICAgIGlmIChtZXNzYWdlLT53aGF0ID09IEJfTU9VU0VfVVApCi0gICAgICAgIG1lc3NhZ2Ut
PkZpbmRJbnQzMigicHJldmlvdXMgYnV0dG9ucyIsICZidXR0b25zKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1lc3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIsICZidXR0b25zKTsKLQotICAgIGlmIChi
dXR0b25zICYgQl9QUklNQVJZX01PVVNFX0JVVFRPTikKLSAgICAgICAgbV9idXR0b24gPSBMZWZ0
QnV0dG9uOwotICAgIGVsc2UgaWYgKGJ1dHRvbnMgJiBCX1NFQ09OREFSWV9NT1VTRV9CVVRUT04p
Ci0gICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci0gICAgZWxzZSBpZiAoYnV0dG9ucyAm
IEJfVEVSVElBUllfTU9VU0VfQlVUVE9OKQotICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRv
bjsKLSAgICBlbHNlCi0gICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Ci0KLSAgICBzd2l0Y2gg
KG1lc3NhZ2UtPndoYXQpIHsKLSAgICBjYXNlIEJfTU9VU0VfRE9XTjoKLSAgICAgICAgbV9ldmVu
dFR5cGUgPSBNb3VzZUV2ZW50UHJlc3NlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCX01P
VVNFX1VQOgotICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBCX01PVVNFX01PVkVEOgotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwotICAgICAgICBicmVhazsKLSAgICB9Owot
Ci0gICAgaW50MzIgbW9kaWZpZXJzID0gbWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMiKTsK
LSAgICBtX3NoaWZ0S2V5ID0gbW9kaWZpZXJzICYgQl9TSElGVF9LRVk7Ci0gICAgbV9jdHJsS2V5
ID0gbW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWTsKLSAgICBtX2FsdEtleSA9IG1vZGlmaWVycyAm
IEJfQ09NTUFORF9LRVk7Ci0gICAgbV9tZXRhS2V5ID0gbW9kaWZpZXJzICYgQl9PUFRJT05fS0VZ
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAJ
KHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZv
cm1XaGVlbEV2ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3Rp
cHBpQGdteC5kZT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0KLSNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KLSNpbmNsdWRlIDxN
ZXNzYWdlLmg+Ci0jaW5jbHVkZSA8UG9pbnQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEJNZXNzYWdlKiBtZXNzYWdl
KQotICAgIDogbV9wb3NpdGlvbihtZXNzYWdlLT5GaW5kUG9pbnQoImJlOnZpZXdfd2hlcmUiKSkK
LSAgICAsIG1fZ2xvYmFsUG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJzY3JlZW5fd2hlcmUi
KSkKLSAgICAsIG1fZGVsdGFYKG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hlZWxfZGVsdGFfeCIp
KQotICAgICwgbV9kZWx0YVkobWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVlbF9kZWx0YV95Iikp
Ci0gICAgLCBtX3doZWVsVGlja3NYKG1fZGVsdGFYKQotICAgICwgbV93aGVlbFRpY2tzWShtX2Rl
bHRhWSkKLSAgICAsIG1fZ3JhbnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQpCi0gICAg
LCBtX2lzQWNjZXB0ZWQoZmFsc2UpCi17Ci0gICAgbV9kZWx0YVggKj0gLVNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKLSAgICBtX2RlbHRhWSAqPSAtU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpOwotCi0gICAgaW50MzIgbW9kaWZpZXJzID0gbWVzc2FnZS0+RmluZEludDMyKCJt
b2RpZmllcnMiKTsKLSAgICBtX3NoaWZ0S2V5ID0gbW9kaWZpZXJzICYgQl9TSElGVF9LRVk7Ci0g
ICAgbV9jdHJsS2V5ID0gbW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWTsKLSAgICBtX2FsdEtleSA9
IG1vZGlmaWVycyAmIEJfQ09NTUFORF9LRVk7Ci0gICAgbV9tZXRhS2V5ID0gbW9kaWZpZXJzICYg
Ql9PUFRJT05fS0VZOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAJKHJldmlz
aW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFp
a3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVs
ZW1lbnRzIGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOf
bXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUG9wdXBNZW51SGFpa3UuaCIKLQotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgot
I2luY2x1ZGUgPEhhbmRsZXIuaD4KLSNpbmNsdWRlIDxNZW51SXRlbS5oPgotI2luY2x1ZGUgPE1l
c3NhZ2UuaD4KLSNpbmNsdWRlIDxQb3BVcE1lbnUuaD4KLSNpbmNsdWRlIDxTdHJpbmcuaD4KLSNp
bmNsdWRlIDxXaW5kb3cuaD4KLSNpbmNsdWRlIDxzdXBwb3J0L0F1dG9sb2NrLmg+Ci0jaW5jbHVk
ZSA8c3VwcG9ydC9Mb2NrZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgdWludDMyIGtQb3B1cFJlc3VsdCA9ICdwbXJzJzsKLXN0YXRpYyBjb25zdCB1aW50MzIga1Bv
cHVwSGlkZGVuID0gJ3BtaGQnOwotCi0vLyBUaGlzIEJIYW5kbGVyIGlzIGFkZGVkIHRvIHRoZSBh
cHBsaWNhdGlvbiAobWFpbikgdGhyZWFkLCBzbyB0aGF0IHdlCi0vLyBpbnZva2UgbWV0aG9kcyBv
biB0aGUgUG9wdXBNZW51Q2xpZW50IHdpdGhpbiB0aGUgbWFpbiB0aHJlYWQuCi1jbGFzcyBQb3B1
cE1lbnVIYW5kbGVyIDogcHVibGljIEJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBQb3B1cE1lbnVI
YW5kbGVyKFBvcHVwTWVudUNsaWVudCogcG9wdXBDbGllbnQpCi0gICAgICAgIDogbV9wb3B1cENs
aWVudChwb3B1cENsaWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIE1lc3Nh
Z2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobWVz
c2FnZS0+d2hhdCkgewotICAgICAgICBjYXNlIGtQb3B1cFJlc3VsdDogewotICAgICAgICAgICAg
aW50MzIgaW5kZXggPSAwOwotICAgICAgICAgICAgbWVzc2FnZS0+RmluZEludDMyKCJpbmRleCIs
ICZpbmRleCk7Ci0gICAgICAgICAgICBtX3BvcHVwQ2xpZW50LT52YWx1ZUNoYW5nZWQoaW5kZXgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBrUG9wdXBIaWRk
ZW46Ci0gICAgICAgICAgICBtX3BvcHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBCSGFuZGxlcjo6TWVz
c2FnZVJlY2VpdmVkKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFBvcHVwTWVudUNsaWVudCogbV9wb3B1cENsaWVudDsKLX07Ci0KLWNsYXNzIEhhaWt1UG9wdXAg
OiBwdWJsaWMgQlBvcFVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgSGFpa3VQb3B1cChQb3B1cE1lbnVD
bGllbnQqIHBvcHVwQ2xpZW50KQotICAgICAgICA6IEJQb3BVcE1lbnUoIldlYkNvcmUgUG9wdXAi
LCB0cnVlLCBmYWxzZSkKLSAgICAgICAgLCBtX3BvcHVwQ2xpZW50KHBvcHVwQ2xpZW50KQotICAg
ICAgICAsIG1fSGFuZGxlcihwb3B1cENsaWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChiZV9hcHAt
PkxvY2soKSkgewotICAgICAgICAgICAgYmVfYXBwLT5BZGRIYW5kbGVyKCZtX0hhbmRsZXIpOwot
ICAgICAgICAgICAgYmVfYXBwLT5VbmxvY2soKTsKLSAgICAgICAgfQotICAgICAgICBTZXRBc3lu
Y0F1dG9EZXN0cnVjdChmYWxzZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+SGFpa3VQb3B1cCgp
Ci0gICAgewotICAgICAgICBpZiAoYmVfYXBwLT5Mb2NrKCkpIHsKLSAgICAgICAgICAgIGJlX2Fw
cC0+UmVtb3ZlSGFuZGxlcigmbV9IYW5kbGVyKTsKLSAgICAgICAgICAgIGJlX2FwcC0+VW5sb2Nr
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNob3coY29uc3QgSW50UmVjdCYgcmVj
dCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgICAvLyBDbGVhbiBv
dXQgdGhlIG1lbnUgZmlyc3QKLSAgICAgICAgZm9yIChpbnQzMiBpID0gQ291bnRJdGVtcygpIC0g
MTsgaSA+PSAwOyBpLS0pCi0gICAgICAgICAgICBkZWxldGUgUmVtb3ZlSXRlbShpKTsKLQotICAg
ICAgICAvLyBQb3B1cGxhdGUgdGhlIG1lbnUgZnJvbSB0aGUgY2xpZW50Ci0gICAgICAgIGludCBp
dGVtQ291bnQgPSBtX3BvcHVwQ2xpZW50LT5saXN0U2l6ZSgpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGl0ZW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobV9wb3B1cENsaWVu
dC0+aXRlbUlzU2VwYXJhdG9yKGkpKQotICAgICAgICAgICAgICAgIEFkZFNlcGFyYXRvckl0ZW0o
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlYkNvcmUg
ZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuICJHcm91cCIgYW5kICJMYWJlbCIKLSAgICAgICAgICAgICAg
ICAvLyBoZXJlLCBidXQgYm90aCB0eXBlcyBvZiBpdGVtIChyYWRpbyBvciBjaGVjayBtYXJrKSBj
dXJyZW50bHkKLSAgICAgICAgICAgICAgICAvLyBsb29rIHRoZSBzYW1lIG9uIEhhaWt1LgotICAg
ICAgICAgICAgICAgIEJTdHJpbmcgbGFiZWwobV9wb3B1cENsaWVudC0+aXRlbVRleHQoaSkpOwot
ICAgICAgICAgICAgICAgIEJNZXNzYWdlKiBtZXNzYWdlID0gbmV3IEJNZXNzYWdlKGtQb3B1cFJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZS0+QWRkSW50MzIoImluZGV4IiwgaSk7Ci0g
ICAgICAgICAgICAgICAgQk1lbnVJdGVtKiBpdGVtID0gbmV3IEJNZW51SXRlbShsYWJlbC5TdHJp
bmcoKSwgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgQWRkSXRlbShpdGVtKTsKLSAgICAgICAg
ICAgICAgICBpdGVtLT5TZXRUYXJnZXQoQk1lc3NlbmdlcigmbV9IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICAgICAgaXRlbS0+U2V0RW5hYmxlZChtX3BvcHVwQ2xpZW50LT5pdGVtSXNFbmFibGVkKGkp
KTsKLSAgICAgICAgICAgICAgICBpdGVtLT5TZXRNYXJrZWQoaSA9PSBpbmRleCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGZvcmNlIGEgbGF5b3V0
IG5vdywgb3IgdGhlIGl0ZW0gZnJhbWVzIHdpbGwgbm90IGJlCi0gICAgICAgIC8vIGNvbXB1dGVk
IHlldCwgc28gd2UgY2Fubm90IG1vdmUgdGhlIGN1cnJlbnQgaXRlbSB1bmRlciB0aGUgbW91c2Uu
Ci0gICAgICAgIERvTGF5b3V0KCk7Ci0KLSAgICAgICAgLy8gQWNjb3VudCBmb3IgZnJhbWUgb2Yg
bWVudSBmaWVsZAotICAgICAgICBCUmVjdCBzY3JlZW5SZWN0KHZpZXctPmNvbnRlbnRzVG9TY3Jl
ZW4ocmVjdCkpOwotICAgICAgICBzY3JlZW5SZWN0Lk9mZnNldEJ5KDIsIDIpOwotICAgICAgICAv
LyBNb3ZlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtIHVuZGVyIHRoZSBtb3VzZS4KLSAgICAgICAg
aWYgKEJNZW51SXRlbSogaXRlbSA9IEl0ZW1BdChpbmRleCkpCi0gICAgICAgICAgICBzY3JlZW5S
ZWN0Lk9mZnNldEJ5KDAsIC1pdGVtLT5GcmFtZSgpLnRvcCk7Ci0KLSAgICAgICAgQlJlY3Qgb3Bl
blJlY3QgPSBCb3VuZHMoKS5PZmZzZXRUb1NlbGYoc2NyZWVuUmVjdC5MZWZ0VG9wKCkpOwotCi0g
ICAgICAgIEdvKHNjcmVlblJlY3QuTGVmdFRvcCgpLCB0cnVlLCB0cnVlLCBvcGVuUmVjdCwgdHJ1
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBoaWRlKCkKLSAgICB7Ci0gICAgICAgIGlmICghSXNIaWRk
ZW4oKSkKLSAgICAgICAgICAgIEhpZGUoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIEhpZGUoKQotICAgIHsKLSAgICAgICAgQlBvcFVwTWVudTo6SGlkZSgpOwotICAgICAg
ICBiZV9hcHAtPlBvc3RNZXNzYWdlKGtQb3B1cEhpZGRlbiwgJm1fSGFuZGxlcik7Ci0gICAgfQot
Ci0gICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwotICAgIFBvcHVwTWVudUhhbmRs
ZXIgbV9IYW5kbGVyOwotfTsKLQotUG9wdXBNZW51SGFpa3U6OlBvcHVwTWVudUhhaWt1KFBvcHVw
TWVudUNsaWVudCogY2xpZW50KQotICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCi0gICAgLCBt
X21lbnUobmV3IEhhaWt1UG9wdXAoY2xpZW50KSkKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIGFk
ZGl0aW9uYWwgcmVmZXJlbmNlcyB0byB0aGUgY2xpZW50LCBzaW5jZSB3ZSBjb21wbGV0ZWx5Ci0g
ICAgLy8gY29udHJvbCBhbnkgc3ViLW9iamVjdHMgd2UgY3JlYXRlIHRoYXQgbmVlZCBpdCBhcyB3
ZWxsLgotfQotCi1Qb3B1cE1lbnVIYWlrdTo6flBvcHVwTWVudUhhaWt1KCkKLXsKLSAgICBkZWxl
dGUgbV9tZW51OwotfQotCi12b2lkIFBvcHVwTWVudUhhaWt1OjpkaXNjb25uZWN0Q2xpZW50KCkK
LXsKLSAgICBtX3BvcHVwQ2xpZW50ID0gMDsKLX0KLQotdm9pZCBQb3B1cE1lbnVIYWlrdTo6c2hv
dyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKLXsKLSAg
ICAvLyBUaGUgbWVudSB3aWxsIHVwZGF0ZSBpdHNlbGYgZnJvbSB0aGUgUG9wdXBNZW51Q2xpZW50
IGJlZm9yZSBzaG93aW5nLgotICAgIG1fbWVudS0+c2hvdyhyZWN0LCB2aWV3LCBpbmRleCk7Ci19
Ci0KLXZvaWQgUG9wdXBNZW51SGFpa3U6OmhpZGUoKQotewotICAgIG1fbWVudS0+aGlkZSgpOwot
fQotCi12b2lkIFBvcHVwTWVudUhhaWt1Ojp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgY2xp
ZW50KCktPnNldFRleHRGcm9tSXRlbShtX3BvcHVwQ2xpZW50LT5zZWxlY3RlZEluZGV4KCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuaAkocmV2aXNpb24gOTU5MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBQb3B1cE1lbnVI
YWlrdV9oCi0jZGVmaW5lIFBvcHVwTWVudUhhaWt1X2gKLQotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgSGFpa3VQb3B1
cDsKLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgUG9wdXBNZW51SGFpa3UgOiBwdWJsaWMgUG9w
dXBNZW51IHsKLXB1YmxpYzoKLSAgICBQb3B1cE1lbnVIYWlrdShQb3B1cE1lbnVDbGllbnQqKTsK
LSAgICB+UG9wdXBNZW51SGFpa3UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IElu
dFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQgaW5kZXgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpc2Nvbm5lY3RDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAgICBQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBDbGllbnQ7IH0KLQotICAgIFBvcHVwTWVudUNs
aWVudCogbV9wb3B1cENsaWVudDsKLSAgICBIYWlrdVBvcHVwKiBtX21lbnU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBQb3B1cE1lbnVIYWlrdV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBN
YXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lSGFpa3Uu
aCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSA8Q29udHJvbExvb2suaD4KLSNpbmNsdWRlIDxWaWV3Lmg+Ci0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZUhhaWt1OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVI
YWlrdSgpKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1l
Rm9yUGFnZShQYWdlKikKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJlbmRlclRoZW1lID0g
UmVuZGVyVGhlbWVIYWlrdTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOwotICAgIHJldHVybiByZW5k
ZXJUaGVtZTsKLX0KLQotUmVuZGVyVGhlbWVIYWlrdTo6UmVuZGVyVGhlbWVIYWlrdSgpCi17Ci19
Ci0KLVJlbmRlclRoZW1lSGFpa3U6On5SZW5kZXJUaGVtZUhhaWt1KCkKLXsKLX0KLQotc3RhdGlj
IGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRj
aCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0
b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoK
LSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBj
YXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUhhaWt1OjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFu
Y2UoKSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IodWlfY29sb3Io
Ql9DT05UUk9MX0hJR0hMSUdIVF9DT0xPUikpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUhhaWt1
OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hMSUdIVF9DT0xPUikpOwotfQot
Ci1Db2xvciBSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09OVFJPTF9U
RVhUX0NPTE9SKSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcih1
aV9jb2xvcihCX0NPTlRST0xfVEVYVF9DT0xPUikpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUhh
aWt1OjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENvbG9yKHVpX2NvbG9yKEJfTUVOVV9TRUxFQ1RFRF9CQUNLR1JPVU5EX0NPTE9SKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVIYWlrdTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIGludFJlY3QpCi17Ci0gICAgaWYgKGluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZ2Jf
Y29sb3IgYmFzZSA9IHVpX2NvbG9yKEJfUEFORUxfQkFDS0dST1VORF9DT0xPUik7Ci0gICAgQlJl
Y3QgcmVjdCA9IGludFJlY3Q7Ci0gICAgQlZpZXcqIHZpZXcgPSBpbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwotCi0gICAgaWYgKCFiZV9jb250cm9sX2xvb2spCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJlX2NvbnRyb2xfbG9vay0+RHJhd0NoZWNrQm94KHZpZXcsIHJlY3Qs
IHJlY3QsIGJhc2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclRoZW1lSGFp
a3U6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaW50
IHNpemUgPSAxMDsKLQotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNw
ZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBBIGhhcmQtY29kZWQgc2l6ZSBvZiAnc2l6
ZScgaXMgdXNlZC4gVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuCi0gICAgaWYg
KHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoc2l6ZSwgRml4ZWQpKTsKLQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNB
dXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUsIEZpeGVkKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIGludFJlY3QpCi17Ci0gICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZ2JfY29sb3IgYmFzZSA9IHVpX2NvbG9yKEJfUEFORUxfQkFDS0dST1VORF9DT0xPUik7
Ci0gICAgQlJlY3QgcmVjdCA9IGludFJlY3Q7Ci0gICAgQlZpZXcqIHZpZXcgPSBpbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKCFiZV9jb250cm9sX2xvb2spCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJlX2NvbnRyb2xfbG9vay0+RHJhd1JhZGlvQnV0dG9u
KHZpZXcsIHJlY3QsIHJlY3QsIGJhc2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJl
bmRlclRoZW1lSGFpa3U6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBjaGVja2JveGVzLgotICAgIHNldENoZWNrYm94
U2l6ZShzdHlsZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6YWRqdXN0TWVudUxpc3RT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKLXsKLSAgICAvLyBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgYXJyb3cuCi0gICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgoMjIsIEZpeGVkKSk7Ci0gICAgY29uc3QgaW50IG1pbkhl
aWdodCA9IDIwOwotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4
ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUhhaWt1OjpwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVtZUhhaWt1LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVI
YWlrdS5oCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1JlbmRlclRoZW1lSGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+Ci0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJUaGVtZUhhaWt1X2gKLSNkZWZp
bmUgUmVuZGVyVGhlbWVIYWlrdV9oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBSZW5kZXJUaGVtZUhhaWt1IDogcHVibGljIFJl
bmRlclRoZW1lIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZW5kZXJUaGVtZUhhaWt1KCk7Ci0g
ICAgICAgIHZpcnR1YWwgflJlbmRlclRoZW1lSGFpa3UoKTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOwotCi0gICAgICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFi
b3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJh
dyB0aGUgZm9jdXMgcmluZy4KLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgLy8gVGhlIHBsYXRmb3JtIHNl
bGVjdGlvbiBjb2xvci4KLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNl
YXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mKSBjb25zdDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50
Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVIYWlrdV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwCShyZXZpc2lv
biA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNj
cmVlbi5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0j
aW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+Ci0jaW5jbHVkZSA8aW50ZXJmYWNlL1NjcmVlbi5oPgot
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KikK
LXsKLSAgICBCU2NyZWVuIHNjcmVlbjsKLSAgICAvLyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2Ny
ZWVuIGlzIHZhbGlkCi0gICAgcmV0dXJuIEZsb2F0UmVjdChzY3JlZW4uRnJhbWUoKSk7Ci19Ci0K
LUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCB1c2UgdGhlIGdldF9kZXNrYmFyX2ZyYW1lKCkgZnVuY3Rpb24KLSAg
ICAvLyBmcm9tIEludGVyZmFjZURlZnMuaCB0byBtYWtlIHRoaXMgc21hbGxlcgotICAgIHJldHVy
biBzY3JlZW5SZWN0KHdpZGdldCk7Ci19Ci0KLWludCBzY3JlZW5EZXB0aChXaWRnZXQqKQotewot
ICAgIEJTY3JlZW4gc2NyZWVuOwotICAgIC8vIEZJWE1FOiBXZSBhc3N1bWUgdGhpcyBzY3JlZW4g
aXMgdmFsaWQKLSAgICBjb2xvcl9zcGFjZSBjcyA9IHNjcmVlbi5Db2xvclNwYWNlKCk7Ci0KLSAg
ICBzaXplX3QgcGl4ZWxDaHVuaywgcm93QWxpZ25tZW50LCBwaXhlbHNQZXJDaHVuazsKLSAgICBp
ZiAoZ2V0X3BpeGVsX3NpemVfZm9yKGNzLCAmcGl4ZWxDaHVuaywgJnJvd0FsaWdubWVudCwgJnBp
eGVsc1BlckNodW5rKSA9PSBCX09LKQotICAgICAgICAvLyBGSVhNRTogTm90IHN1cmUgaWYgdGhp
cyBpcyByaWdodAotICAgICAgICByZXR1cm4gcGl4ZWxDaHVuayAqIDg7Ci0KLSAgICByZXR1cm4g
ODsKLX0KLQotaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gODsKLX0KLQotYm9vbCBzY3JlZW5Jc01vbm9jaHJv
bWUoV2lkZ2V0KikKLXsKLSAgICBCU2NyZWVuIHNjcmVlbjsKLSAgICAvLyBGSVhNRTogV2UgYXNz
dW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCi0gICAgcmV0dXJuIHNjcmVlbi5Db2xvclNwYWNlKCkg
PT0gQl9NT05PQ0hST01FXzFfQklUOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbGJhclRoZW1lSGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbGJhclRo
ZW1lSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1Njcm9sbGJhclRoZW1lSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZUhhaWt1LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlIDxDb250cm9sTG9vay5oPgotI2luY2x1ZGUgPEludGVy
ZmFjZURlZnMuaD4KLQotCi1pbnQgYnV0dG9uV2lkdGgoaW50IHNjcm9sbGJhcldpZHRoLCBpbnQg
dGhpY2tuZXNzKQotewotICAgIHJldHVybiBzY3JvbGxiYXJXaWR0aCA8IDIgKiB0aGlja25lc3Mg
PyBzY3JvbGxiYXJXaWR0aCAvIDIgOiB0aGlja25lc3M7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCi17Ci0g
ICAgc3RhdGljIFNjcm9sbGJhclRoZW1lSGFpa3UgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsK
LX0KLQotU2Nyb2xsYmFyVGhlbWVIYWlrdTo6U2Nyb2xsYmFyVGhlbWVIYWlrdSgpCi17Ci19Ci0K
LVNjcm9sbGJhclRoZW1lSGFpa3U6On5TY3JvbGxiYXJUaGVtZUhhaWt1KCkKLXsKLX0KLQotaW50
IFNjcm9sbGJhclRoZW1lSGFpa3U6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG1ha2UgYSBkaXN0
aW5jdGlvbiBiZXR3ZWVuIGEgU21hbGwgYW5kIGEgUmVndWxhciBTY3JvbGxiYXI/Ci0gICAgcmV0
dXJuIDE2OwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lSGFpa3U6Omhhc0J1dHRvbnMoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwotfQot
Ci1ib29sIFNjcm9sbGJhclRoZW1lSGFpa3U6Omhhc1RodW1iKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQotewotICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiB0aHVtYkxlbmd0aChzY3Jv
bGxiYXIpID4gMDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUhhaWt1OjpiYWNrQnV0dG9u
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQotewot
ICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotCi0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgIElu
dFBvaW50IGJ1dHRvbk9yaWdpbihzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkpOwotICAg
IEludFNpemUgYnV0dG9uU2l6ZSA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyCi0gICAgICAgID8gSW50U2l6ZShidXR0b25XaWR0aChzY3JvbGxiYXItPndp
ZHRoKCksIHRoaWNrbmVzcyksIHRoaWNrbmVzcykKLSAgICAgICAgOiBJbnRTaXplKHRoaWNrbmVz
cywgYnV0dG9uV2lkdGgoc2Nyb2xsYmFyLT5oZWlnaHQoKSwgdGhpY2tuZXNzKSk7Ci0gICAgSW50
UmVjdCBidXR0b25SZWN0KGJ1dHRvbk9yaWdpbiwgYnV0dG9uU2l6ZSk7Ci0KLSAgICByZXR1cm4g
YnV0dG9uUmVjdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUhhaWt1Ojpmb3J3YXJkQnV0
dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQot
ewotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7Ci0KLSAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0g
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIGludCB3aWR0aCA9IGJ1dHRvbldpZHRoKHNjcm9sbGJhci0+d2lkdGgoKSwgdGhp
Y2tuZXNzKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxi
YXItPndpZHRoKCkgLSB3aWR0aCwgc2Nyb2xsYmFyLT55KCksIHdpZHRoLCB0aGlja25lc3MpOwot
ICAgIH0KLQotICAgIGludCBoZWlnaHQgPSBidXR0b25XaWR0aChzY3JvbGxiYXItPmhlaWdodCgp
LCB0aGlja25lc3MpOwotICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxi
YXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBoZWlnaHQsIHRoaWNrbmVzcywgaGVpZ2h0
KTsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUhhaWt1Ojp0cmFja1JlY3QoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGJvb2wpCi17Ci0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNr
bmVzcygpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHRoaWNrbmVz
cykKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0
KHNjcm9sbGJhci0+eCgpICsgdGhpY2tuZXNzLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53
aWR0aCgpIC0gMiAqIHRoaWNrbmVzcywgdGhpY2tuZXNzKTsKLSAgICB9Ci0gICAgaWYgKHNjcm9s
bGJhci0+aGVpZ2h0KCkgPCAyICogdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwotICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIHRo
aWNrbmVzcywgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gMiAqIHRoaWNrbmVzcyk7
Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVIYWlrdTo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
aWYgKCFiZV9jb250cm9sX2xvb2spCi0gICAgICAgIHJldHVybjsKLQotICAgIEJSZWN0IHJlY3Qg
PSB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBmYWxzZSk7Ci0gICAgb3JpZW50YXRpb24gc2Nyb2xsYmFy
T3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IEJfSE9SSVpPTlRBTCA6IEJfVkVSVElDQUw7Ci0KLSAgICBiZV9jb250cm9sX2xvb2st
PkRyYXdTY3JvbGxCYXJCYWNrZ3JvdW5kKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCByZWN0LCB1aV9jb2xvcihCX1BBTkVMX0JBQ0tHUk9VTkRfQ09MT1IpLCAwLCBzY3JvbGxiYXJP
cmllbnRhdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVIYWlrdTo6cGFpbnRCdXR0b24o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIGlmICghYmVfY29udHJvbF9s
b29rKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCUmVjdCBkcmF3UmVjdCA9IEJSZWN0KHJlY3Qp
OwotICAgIEJWaWV3KiB2aWV3ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmdi
X2NvbG9yIHBhbmVsQmdDb2xvciA9IHVpX2NvbG9yKEJfUEFORUxfQkFDS0dST1VORF9DT0xPUik7
Ci0gICAgcmdiX2NvbG9yIGJ1dHRvbkJnQ29sb3IgPSB0aW50X2NvbG9yKHBhbmVsQmdDb2xvciwg
Ql9MSUdIVEVOXzFfVElOVCk7Ci0KLSAgICBiZV9jb250cm9sX2xvb2stPkRyYXdCdXR0b25GcmFt
ZSh2aWV3LCBkcmF3UmVjdCwgZHJhd1JlY3QsIGJ1dHRvbkJnQ29sb3IsIHBhbmVsQmdDb2xvcik7
Ci0gICAgYmVfY29udHJvbF9sb29rLT5EcmF3QnV0dG9uQmFja2dyb3VuZCh2aWV3LCBkcmF3UmVj
dCwgZHJhd1JlY3QsIGJ1dHRvbkJnQ29sb3IpOwotCi0gICAgaW50IGFycm93RGlyZWN0aW9uOwot
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0g
ICAgICAgIGFycm93RGlyZWN0aW9uID0gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ID8gQkNv
bnRyb2xMb29rOjpCX1VQX0FSUk9XIDogQkNvbnRyb2xMb29rOjpCX0RPV05fQVJST1c7Ci0gICAg
ZWxzZQotICAgICAgICBhcnJvd0RpcmVjdGlvbiA9IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCA/IEJDb250cm9sTG9vazo6Ql9MRUZUX0FSUk9XIDogQkNvbnRyb2xMb29rOjpCX1JJR0hUX0FS
Uk9XOwotCi0gICAgYmVfY29udHJvbF9sb29rLT5EcmF3QXJyb3dTaGFwZSh2aWV3LCBkcmF3UmVj
dCwgZHJhd1JlY3QsIHVpX2NvbG9yKEJfQ09OVFJPTF9URVhUX0NPTE9SKSwgYXJyb3dEaXJlY3Rp
b24pOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lSGFpa3U6OnBhaW50VGh1bWIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghYmVfY29udHJvbF9sb29rKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCUmVjdCBkcmF3
UmVjdCA9IEJSZWN0KHJlY3QpOwotICAgIEJWaWV3KiB2aWV3ID0gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgcmdiX2NvbG9yIHBhbmVsQmdDb2xvciA9IHVpX2NvbG9yKEJfUEFORUxf
QkFDS0dST1VORF9DT0xPUik7Ci0gICAgcmdiX2NvbG9yIGJ1dHRvbkJnQ29sb3IgPSB0aW50X2Nv
bG9yKHBhbmVsQmdDb2xvciwgQl9MSUdIVEVOXzFfVElOVCk7Ci0KLSAgICBiZV9jb250cm9sX2xv
b2stPkRyYXdCdXR0b25GcmFtZSh2aWV3LCBkcmF3UmVjdCwgZHJhd1JlY3QsIGJ1dHRvbkJnQ29s
b3IsIHBhbmVsQmdDb2xvcik7Ci0gICAgYmVfY29udHJvbF9sb29rLT5EcmF3QnV0dG9uQmFja2dy
b3VuZCh2aWV3LCBkcmF3UmVjdCwgZHJhd1JlY3QsIGJ1dHRvbkJnQ29sb3IpOwotfQotCi19Ci0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbGJhclRoZW1lSGFpa3Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxiYXJU
aGVtZUhhaWt1LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvU2Nyb2xsYmFyVGhlbWVIYWlrdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwu
Y29tPiBBbGwgUmlnaHRzIFJlc2VydmVkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhclRoZW1lSGFpa3VfaAotI2RlZmluZSBTY3Jv
bGxiYXJUaGVtZUhhaWt1X2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBTY3JvbGxiYXI7Ci0KLSAgICBjbGFz
cyBTY3JvbGxiYXJUaGVtZUhhaWt1IDogcHVibGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsK
LSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVIYWlrdSgpOwotICAg
ICAgICAgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVIYWlrdSgpOwotCi0gICAgICAgICAgICB2
aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1
bGFyU2Nyb2xsYmFyKTsKLQotICAgICAgICAgICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Ny
b2xsYmFyKik7Ci0gICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7
Ci0KLSAgICAgICAgICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIq
LCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nKTsKLSAgICAgICAgICAgIHZpcnR1YWwgSW50
UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBh
aW50aW5nKTsKLSAgICAgICAgICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFy
KiwgYm9vbCBwYWludGluZyk7Ci0KLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9s
bGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKik7Ci0gICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgICAgICAgICAgdmlydHVhbCB2b2lk
IHBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwotICAgIH07Ci0KLX0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlrdS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51SGFpa3UuaCIKLQotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TZWFyY2hQb3B1cE1lbnVIYWlrdTo6U2Vh
cmNoUG9wdXBNZW51SGFpa3UoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3BvcHVw
KGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVIYWlrdShjbGllbnQpKSkKLXsKLX0KLQotdm9pZCBTZWFy
Y2hQb3B1cE1lbnVIYWlrdTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgU2VhcmNoUG9wdXBNZW51SGFpa3U6OmxvYWRSZWNlbnRTZWFy
Y2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVt
cykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFNlYXJjaFBvcHVwTWVudUhh
aWt1OjplbmFibGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotUG9wdXBNZW51KiBTZWFyY2hQb3B1cE1lbnVIYWlrdTo6cG9wdXBNZW51KCkKLXsK
LSAgICByZXR1cm4gbV9wb3B1cC5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlr
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NlYXJjaFBv
cHVwTWVudUhhaWt1LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51SGFpa3Vf
aAotI2RlZmluZSBTZWFyY2hQb3B1cE1lbnVIYWlrdV9oCi0KLSNpbmNsdWRlICJQb3B1cE1lbnVI
YWlrdS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNlYXJjaFBvcHVwTWVudUhhaWt1IDogcHVibGljIFNlYXJjaFBvcHVwTWVu
dSB7Ci1wdWJsaWM6Ci0gICAgU2VhcmNoUG9wdXBNZW51SGFpa3UoUG9wdXBNZW51Q2xpZW50Kik7
Ci0KLSAgICB2aXJ0dWFsIFBvcHVwTWVudSogcG9wdXBNZW51KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZWNlbnRTZWFy
Y2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVt
cyk7Ci0gICAgdmlydHVhbCBib29sIGVuYWJsZWQoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8
UG9wdXBNZW51SGFpa3U+IG1fcG9wdXA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTZWFyY2hQb3B1
cE1lbnVIYWlrdV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRC
dWZmZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2hhcmVkQnVmZmVySGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZEJ1ZmZlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8
c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSA8RmlsZS5oPgotI2luY2x1ZGUgPFN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lKQotewotICAgIGlmIChmaWxlTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgQkZpbGUgZmlsZShCU3RyaW5nKGZpbGVOYW1lKS5TdHJpbmcoKSwgQl9SRUFEX09O
TFkpOwotICAgIGlmIChmaWxlLkluaXRDaGVjaygpICE9IEJfT0spCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgb2ZmX3Qgc2l6ZTsKLSAgICBmaWxlLkdldFNpemUoJnNpemUpOwotCi0gICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcihzaXplKTsKLSAgICBmaWxlLlJlYWQoYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYnVmZmVy
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKLQotI2luY2x1ZGUgPE1lc3Nh
Z2VGaWx0ZXIuaD4KLSNpbmNsdWRlIDxNZXNzYWdlUnVubmVyLmg+Ci0jaW5jbHVkZSA8TG9vcGVy
Lmg+Ci0jaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KLSNpbmNsdWRlIDxzdXBwb3J0L0F1dG9s
b2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNkZWZpbmUgRklSRV9NRVNT
QUdFICdmaXJlJwotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkVGltZXJI
YWlrdTogcHVibGljIEJNZXNzYWdlRmlsdGVyIHsKLSAgICBmcmllbmQgdm9pZCBzZXRTaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpOwotcHVibGljOgotICAgIHN0YXRpYyBTaGFy
ZWRUaW1lckhhaWt1KiBpbnN0YW5jZSgpOwotCi0gICAgdm9pZCBzdGFydChkb3VibGUpOwotICAg
IHZvaWQgc3RvcCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBmaWx0ZXJfcmVzdWx0IEZp
bHRlcihCTWVzc2FnZSosIEJIYW5kbGVyKiopOwotCi1wcml2YXRlOgotICAgIFNoYXJlZFRpbWVy
SGFpa3UoKTsKLSAgICB+U2hhcmVkVGltZXJIYWlrdSgpOwotCi0gICAgdm9pZCAoKm1fdGltZXJG
dW5jdGlvbikoKTsKLSAgICBib29sIG1fc2hvdWxkUnVuOwotfTsKLQotU2hhcmVkVGltZXJIYWlr
dTo6U2hhcmVkVGltZXJIYWlrdSgpCi0gICAgOiBCTWVzc2FnZUZpbHRlcihGSVJFX01FU1NBR0Up
Ci0gICAgLCBtX3RpbWVyRnVuY3Rpb24oMCkKLSAgICAsIG1fc2hvdWxkUnVuKGZhbHNlKQotewot
fQotCi1TaGFyZWRUaW1lckhhaWt1Ojp+U2hhcmVkVGltZXJIYWlrdSgpCi17Ci19Ci0KLVNoYXJl
ZFRpbWVySGFpa3UqIFNoYXJlZFRpbWVySGFpa3U6Omluc3RhbmNlKCkKLXsKLSAgICBCTG9vcGVy
KiBsb29wZXIgPSBCTG9vcGVyOjpMb29wZXJGb3JUaHJlYWQoZmluZF90aHJlYWQoMCkpOwotICAg
IHN0YXRpYyBTaGFyZWRUaW1lckhhaWt1KiB0aW1lcjsKLQotICAgIGlmICghdGltZXIpIHsKLSAg
ICAgICAgQkF1dG9sb2NrIGxvY2sobG9vcGVyKTsKLSAgICAgICAgdGltZXIgPSBuZXcgU2hhcmVk
VGltZXJIYWlrdSgpOwotICAgICAgICBsb29wZXItPkFkZENvbW1vbkZpbHRlcih0aW1lcik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRpbWVyOwotfQotCi12b2lkIFNoYXJlZFRpbWVySGFpa3U6OnN0
YXJ0KGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKLXsKLSAgICBtX3Nob3VsZFJ1biA9IHRydWU7
Ci0KLSAgICBiaWd0aW1lX3QgaW50ZXJ2YWxJbk1pY3JvU2Vjb25kcyA9IGludGVydmFsSW5TZWNv
bmRzICogMTAwMDAwMDsKLQotICAgIEJNZXNzYWdlUnVubmVyOjpTdGFydFNlbmRpbmcoTG9vcGVy
KCksIG5ldyBCTWVzc2FnZShGSVJFX01FU1NBR0UpLCBpbnRlcnZhbEluTWljcm9TZWNvbmRzLCAx
KTsKLX0KLQotdm9pZCBTaGFyZWRUaW1lckhhaWt1OjpzdG9wKCkKLXsKLSAgICBtX3Nob3VsZFJ1
biA9IGZhbHNlOwotfQotCi1maWx0ZXJfcmVzdWx0IFNoYXJlZFRpbWVySGFpa3U6OkZpbHRlcihC
TWVzc2FnZSosIEJIYW5kbGVyKiopCi17Ci0gICAgaWYgKG1fc2hvdWxkUnVuICYmIG1fdGltZXJG
dW5jdGlvbikKLSAgICAgICAgbV90aW1lckZ1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gQl9TS0lQ
X01FU1NBR0U7Ci19Ci0KLS8vIFdlYkNvcmUgZnVuY3Rpb25zCi12b2lkIHNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBTaGFyZWRUaW1lckhhaWt1OjppbnN0
YW5jZSgpLT5tX3RpbWVyRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmly
ZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKLXsKLSAgICBTaGFyZWRUaW1lckhhaWt1OjppbnN0
YW5jZSgpLT5zdGFydChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKLXsK
LSAgICBTaGFyZWRUaW1lckhhaWt1OjppbnN0YW5jZSgpLT5zdG9wKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5k
SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nv
dW5kSGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1NvdW5kSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb3VuZC5oIgotCi0jaW5jbHVkZSA8QmVlcC5oPgotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzeXN0ZW1CZWVwKCkKLXsKLSAgICBiZWVwKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA5NTkyMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIlNTTEtleUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9y
PGNoYXI+KCk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmlu
ZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi12b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1mbG9hdCB1c2VySWRsZVRpbWUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgY2FsbE9uTWFpblRo
cmVhZCh2b2lkICgqKSgpKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBL
VVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93
c2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIHN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFN0
ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0K
LSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxWaWV3Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQXV0b1BsYXRmb3JtV2lkZ2V0TG9ja2VyIHsKLXB1YmxpYzoKLSAgICBBdXRvUGxh
dGZvcm1XaWRnZXRMb2NrZXIoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotICAgICAgICA6IG1fd2lk
Z2V0KHdpZGdldCkKLSAgICB7Ci0gICAgICAgIGlmICghbV93aWRnZXQgfHwgbV93aWRnZXQtPkxv
Y2tMb29wZXJXaXRoVGltZW91dCg1MDAwKSAhPSBCX09LKQotICAgICAgICAgICAgbV93aWRnZXQg
PSAwOwotICAgIH0KLQotICAgIH5BdXRvUGxhdGZvcm1XaWRnZXRMb2NrZXIoKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fd2lkZ2V0KQotICAgICAgICAgICAgbV93aWRnZXQtPlVubG9ja0xvb3Blcigp
OwotICAgIH0KLQotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fd2lkZ2V0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybVdpZGdldCBtX3dp
ZGdldDsKLX07Ci0KLVdpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLSAgICA6
IG1fdG9wTGV2ZWxQbGF0Zm9ybVdpZGdldCgwKQotewotICAgIGluaXQod2lkZ2V0KTsKLX0KLQot
V2lkZ2V0Ojp+V2lkZ2V0KCkKLXsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWU7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX2ZyYW1lID0gcmVjdDsKLX0KLQotdm9p
ZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCkgewot
ICAgICAgICBBdXRvUGxhdGZvcm1XaWRnZXRMb2NrZXIgbG9ja2VyKHRvcExldmVsUGxhdGZvcm1X
aWRnZXQoKSk7Ci0gICAgICAgIGlmIChsb2NrZXIuaXNMb2NrZWQoKSkKLSAgICAgICAgICAgIHRv
cExldmVsUGxhdGZvcm1XaWRnZXQoKS0+TWFrZUZvY3VzKCk7Ci0gICAgfQotfQotCi12b2lkIFdp
ZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotewotICAgIEF1dG9QbGF0Zm9y
bVdpZGdldExvY2tlciBsb2NrZXIodG9wTGV2ZWxQbGF0Zm9ybVdpZGdldCgpKTsKLSAgICBpZiAo
bG9ja2VyLmlzTG9ja2VkKCkpCi0gICAgICAgIHRvcExldmVsUGxhdGZvcm1XaWRnZXQoKS0+U2V0
Vmlld0N1cnNvcihjdXJzb3IuaW1wbCgpKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3coKQotewot
ICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOwotICAgIGlmICghaXNQYXJlbnRWaXNpYmxlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEF1dG9QbGF0Zm9ybVdpZGdldExvY2tlciBsb2NrZXIocGxh
dGZvcm1XaWRnZXQoKSk7Ci0gICAgaWYgKGxvY2tlci5pc0xvY2tlZCgpICYmIHBsYXRmb3JtV2lk
Z2V0KCktPklzSGlkZGVuKCkpCi0gICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPlNob3coKTsKLX0K
LQotdm9pZCBXaWRnZXQ6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKLSAg
ICBpZiAoIWlzUGFyZW50VmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBdXRvUGxh
dGZvcm1XaWRnZXRMb2NrZXIgbG9ja2VyKHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIGlmIChsb2Nr
ZXIuaXNMb2NrZWQoKSAmJiAhcGxhdGZvcm1XaWRnZXQoKS0+SXNIaWRkZW4oKSkKLSAgICAgICAg
cGxhdGZvcm1XaWRnZXQoKS0+SGlkZSgpOwotfQotCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgSW50UmVjdCBjb25zdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9J
bWFnZURlY29kZXJIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgU3RlcGhhbiBBw59tdXMsIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPEJp
dG1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlRnJh
bWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIGludCBieXRlc1BlclJvdyA9IHdp
ZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBPd25QdHI8QkJpdG1hcD4gYml0bWFwKG5l
dyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpLCAwLCBCX1JH
QkEzMiwgYnl0ZXNQZXJSb3cpKTsKLQotICAgIGNvbnN0IHVpbnQ4KiBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9ieXRlcyk7Ci0gICAgdWludDgqIGRlc3RpbmF0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJpdG1hcC0+Qml0cygpKTsKLSAgICBpbnQgaCA9
IGhlaWdodCgpOwotICAgIGludCB3ID0gd2lkdGgoKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGg7IHkrKykgewotI2lmIDAKLS8vIEZJWE1FOiBFbmFibGUgdGhpcyBjb252ZXJzaW9uIG9uY2Ug
SGFpa3UgaGFzIEJfUkdCQTMyUFtyZW11bHRpcGxpZWRdLi4uCi0gICAgICAgIG1lbWNweShkc3Qs
IHNvdXJjZSwgYnl0ZXNQZXJSb3cpOwotI2Vsc2UKLSAgICAgICAgY29uc3QgdWludDgqIHNvdXJj
ZUhhbmRsZSA9IHNvdXJjZTsKLSAgICAgICAgdWludDgqIGRlc3RpbmF0aW9uSGFuZGxlID0gZGVz
dGluYXRpb247Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7Ci0gICAgICAg
ICAgICBpZiAoc291cmNlSGFuZGxlWzNdID09IDI1NSB8fCAhc291cmNlSGFuZGxlWzNdKSB7Ci0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25IYW5kbGVbMF0gPSBzb3VyY2VIYW5kbGVbMF07Ci0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25IYW5kbGVbMV0gPSBzb3VyY2VIYW5kbGVbMV07Ci0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25IYW5kbGVbMl0gPSBzb3VyY2VIYW5kbGVbMl07Ci0g
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25IYW5kbGVbM10gPSBzb3VyY2VIYW5kbGVbM107Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGFuZGxlWzBd
ID0gc3RhdGljX2Nhc3Q8dWludDE2Pihzb3VyY2VIYW5kbGVbMF0pICogMjU1IC8gc291cmNlSGFu
ZGxlWzNdOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGFuZGxlWzFdID0gc3RhdGljX2Nh
c3Q8dWludDE2Pihzb3VyY2VIYW5kbGVbMV0pICogMjU1IC8gc291cmNlSGFuZGxlWzNdOwotICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGFuZGxlWzJdID0gc3RhdGljX2Nhc3Q8dWludDE2Pihz
b3VyY2VIYW5kbGVbMl0pICogMjU1IC8gc291cmNlSGFuZGxlWzNdOwotICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uSGFuZGxlWzNdID0gc291cmNlSGFuZGxlWzNdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVzdGluYXRpb25IYW5kbGUgKz0gNDsKLSAgICAgICAgICAgIHNvdXJjZUhh
bmRsZSArPSA0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZGVzdGluYXRpb24gKz0gYnl0
ZXNQZXJSb3c7Ci0gICAgICAgIHNvdXJjZSArPSBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYml0bWFwLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmgJKHJldmlz
aW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDYgQEAKICNpZm5kZWYgVW5pY29kZVJhbmdl
X0gKICNkZWZpbmUgVW5pY29kZVJhbmdlX0gKIAotI2lmIFBMQVRGT1JNKEhBSUtVKQotI2luY2x1
ZGUgInN0ZGludC5oIgotI2VuZGlmCi0KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvaGFpa3UvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRCcmVha0l0ZXJhdG9y
SW50ZXJuYWxJQ1VIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNoYXIqIGN1
cnJlbnRTZWFyY2hMb2NhbGVJRCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gIiI7Ci19Ci0KLWNvbnN0IGNoYXIqIGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImVuX3VzIjsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTkyMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEx
LTA5LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3Zl
IFBMQVRGT1JNKEhBSUtVKSBhbmQgYXNzb2NpYXRlZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5n
LWhlYWRlcnMucGw6CisKIDIwMTEtMDktMjQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBbHdheXMgZW5hYmxlIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVh
ZGVycy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZv
cndhcmRpbmctaGVhZGVycy5wbAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCB1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zOwogCiBteSAkc3JjUm9vdCA9
IHJlYWxwYXRoKEZpbGU6OlNwZWMtPmNhdGZpbGUoZGlybmFtZShhYnNfcGF0aCgkMCkpLCAiLi4v
Li4iKSk7CiBteSAkaW5jRnJvbVJvb3QgPSBhYnNfcGF0aCgkQVJHVlswXSk7Ci1teSBAcGxhdGZv
cm1QcmVmaXhlcyA9ICgiYnJldyIsICJjZiIsICJjaHJvbWl1bSIsICJjdXJsIiwgImVmbCIsICJn
dGsiLCAiaGFpa3UiLCAibWFjIiwgInF0IiwgInNvdXAiLCAidjgiLCAid2luIiwgInd4Iik7Citt
eSBAcGxhdGZvcm1QcmVmaXhlcyA9ICgiYnJldyIsICJjZiIsICJjaHJvbWl1bSIsICJjdXJsIiwg
ImVmbCIsICJndGsiLCAibWFjIiwgInF0IiwgInNvdXAiLCAidjgiLCAid2luIiwgInd4Iik7CiBt
eSBAZnJhbWV3b3JrcyA9ICggIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiLCAiV2ViS2l0MiIp
OwogbXkgQHNraXBwZWRQcmVmaXhlczsKIG15IEBmcmFtZXdvcmtIZWFkZXJzOwpJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDk1OTIxKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0wOS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBQTEFURk9STShIQUlLVSkgYW5kIGFzc29jaWF0
ZWQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg3NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGhhaWt1OiBSZW1vdmVkLgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0OiBSZW1vdmVk
LgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlr
dS5oOiBSZW1vdmVkLgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51
Q2xpZW50SGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0
L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoYWlrdS9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50SGFpa3UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhhaWt1
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5oOiBSZW1vdmVkLgorICAgICAgICAqIGhh
aWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRIYWlrdS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaGFpa3UvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaDogUmVtb3ZlZC4KKwogMjAxMS0wOS0yMyAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEF4ZSBXZWJJbWFn
ZVJlbmRlcmVyRmFjdG9yeQpJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1OTIw
KQorKysgU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA5NiArMCwwIEBACi0yMDExLTA5LTI0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgQWx3YXlzIGVuYWJsZSBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NjcK
LQotICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFd4OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotCi0yMDExLTA5LTE3ICBNaWhhaSBQ
YXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIEZyYW1lTG9hZGVyQ2xp
ZW50IEJhY2tGb3J3YXJkTGlzdC1yZWxhdGVkIG1ldGhvZHMgYXJlIHVuc3VlZAotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTMKLQotICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBSZW1vdmUgRnJhbWVMb2FkZXJDbGll
bnQgbWV0aG9kcyB0aGF0IHdlcmUgYWRkZWQgYnkgcjUxNjI5LCBzaW5jZSBvbmx5ICAgICAgICAK
LSAgICAgICAgdGhlIG9sZCAoc2luY2UtZGVsZXRlZCkgQW5kcm9pZCBwb3J0IG5lZWRlZCB0aGVt
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0y
MDExLTA5LTE1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmVu
YW1lIEVOQUJMRShEQVRBQkFTRSkgdG8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjA1Ci0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oOgotCi0yMDExLTA4LTMwICBLYXVzdHViaCBBdHJhd2Fsa2FyICA8a2F1c3R1
YmhAbW90b3JvbGEuY29tPgotCi0gICAgICAgIFRoZSB1bnVzZWQgU2Nyb2xsVmlldyogYXJndW1l
bnQgY2FuIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgIHNjcm9sbFJlY3RJbnRv
Vmlldy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
MTE3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KToKLQotMjAxMS0wOC0xNyAgQWRhbSBS
b2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgTWFrZSBXZWJDb3JlIGtlZXAgdHJh
Y2sgb2YgdGhlIGN1cnJlbnQgZGV2aWNlIHNjYWxlIGZhY3RvcgotCi0gICAgICAgIEZpeGVzIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzY2NDEzPiBXZWJDb3JlIHJlcXVpcmVzIGV2ZXJ5IFdlYktpdCBw
b3J0IHRvIGtlZXAgdHJhY2sgb2YgdGhlCi0gICAgICAgIGRldmljZSBzY2FsZSBmYWN0b3IKLQot
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRIYWlrdS5oOgotICAgICAgICBSZW1vdmVkIGRldmljZVNjYWxlRmFjdG9yLgotCi0y
MDExLTA4LTE1ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgotCi0gICAgICAg
IEZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2ZlckxvYWRpbmdSZXNvdXJjZUZyb21QYWdlIGRvZXMg
bm90IGhhdmUgZW5vdWdoIHBhcmFtZXRlcnMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2MTY1Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5j
cHA6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2Zlckxv
YWRpbmdSZXNvdXJjZUZyb21QYWdlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTEtMDgtMTAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBw
bGUuY29tPgotCi0gICAgICAgIENsZWFyIHVwIHNjYWxlIGZhY3RvciB0ZXJtaW5vbG9neQotCi0g
ICAgICAgIFdlYktpdCBieSBhbmQgbGFyZ2UgZGVhbHMgd2l0aCB0d28gc2NhbGUgZmFjdG9yczog
b25lIGludHJpbnNpYyB0byB0aGUgZGV2aWNlIG9uIHdoaWNoIHRoZQotICAgICAgICBzb2Z0d2Fy
ZSBpcyBydW5uaW5nLCBhbmQgb25lIHRoYXQgaXMgcGVyLVBhZ2UgYW5kIGNhbiBiZSBjb250cm9s
bGVkIHZpYSBBUEkgY2FsbHMuIFRoaXMKLSAgICAgICAgcGF0Y2ggbmFtZXMgdGhlIGZvcm1lciAi
ZGV2aWNlU2NhbGVGYWN0b3IiIGFuZCB0aGUgbGF0dGVyICJwYWdlU2NhbGVGYWN0b3IiLCBhbmQg
bWFrZXMgdGhlCi0gICAgICAgIGNvZGUgdXNlIHRob3NlIG5hbWVzLiBJdCBzaG91bGQgaW50cm9k
dWNlIG5vIGJlaGF2aW9yIGNoYW5nZXMuCi0KLSAgICAgICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvNTU3ODc+IFdlYktpdCB1c2VzIG11bHRpcGxlIGNvbmZsaWN0aW5nIG5hbWVzIHRvIHJl
ZmVyIHRvIHRoZQotICAgICAgICBkZXZpY2Ugc2NhbGUgZmFjdG9yCi0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1
Lmg6Ci0KLTIwMTEtMDgtMDMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
Ci0KLSAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIE5vZGUgcGFyYW1ldGVyIGZyb20gdGhl
IEluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NTU0OQotCi0gICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2Vt
aWtoYXRza3kuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlnaGxpZ2h0
KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgotCi0y
MDExLTA3LTI2ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWQ9J2ZpbGVuYW1lJyBhdHRyaWJ1dGUg
aW4gYW5jaG9ycy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY0NTgwCi0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c3RhcnREb3dubG9hZCk6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0yMDExLTA3LTE1ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+Ci0KLSAgICAgICAgUkVHUkVTU0lPTjogTW91
c2UgY3Vyc29yIGRvZXNu4oCZdCBoaWRlIHdoZW4gZnVsbCBzY3JlZW4gdmlkZW8gSFVEIGhpZGVz
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDYxNQot
Ci0gICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZUNsaWVudEhhaWt1OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMpOiBBZGRlZCB0aGlz
IHN0dWIuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQot
MjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgotCi0gICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRlIHNob3VsZCBub3QgaW1tZWRpYXRlbHkgZmFpbCB3
aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVvdGEKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTc3Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhh
aWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpyZWFjaGVkQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oOgotCi0yMDExLTA2LTE4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAg
ICAgU2VwYXJhdGUgY29uY2VybnMgb2YgbG9hZGluZyBmaWxlIGljb25zIGFuZCBjaG9vc2luZyBm
aWxlcy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYy
OTMxCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0g
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6bG9hZEljb25Gb3JGaWxlcyk6IFJl
bmFtZWQuCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQot
MjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCi0KLSAgICAgICAgUmVuYW1lIEZyYW1lTG9h
ZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvciB0byB1c2UgdGhlIHBhc3Qg
dGVuc2UKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYy
NTE2Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNw
cDoKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmludGVycnVwdGVk
Rm9yUG9saWN5Q2hhbmdlRXJyb3IpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3UuaDoKLQotMjAxMS0wNS0xMyAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5j
b20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgotCi0gICAgICAgIENhbid0
IGhvcml6b250YWxseSBzY3JvbGwgaWZyYW1lcyBhbmQgb3ZlcmZsb3cgYmVjYXVzZSB3aGVlbCBl
dmVudHMgYXJlIGFsd2F5cyBhY2NlcHRlZAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjA3NzkKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEhhaWt1Lmg6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2hv
dWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKTogRGVmYXVsdCBpbXBsIG9mIG5ldyBDaHJvbWVDbGll
bnQgbWV0aG9kCi0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6bnVtV2hlZWxF
dmVudEhhbmRsZXJzQ2hhbmdlZCk6IERlZmF1bHQgaW1wbCBvZiBuZXcgQ2hyb21lQ2xpZW50IG1l
dGhvZAotCi0yMDExLTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgotCi0gICAgICAgIFJlbmFtZSBTZWxlY3Rp
b25Db250cm9sbGVyIHRvIEZyYW1lU2VsZWN0aW9uCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIzNAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFp
a3U6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotCi0yMDExLTA1LTA0ICBDcmlzIE5lY2thciAgPGNk
bkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAg
ICAgICBFeHBvc2UgV2ViVmlldyBkaXJlY3RseSB0aHJvdWdoIENocm9tZUNsaWVudC4KLSAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTAyCi0KLSAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OndlYlZpZXcpOgotCi0yMDExLTA0LTIxICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
Ci0KLSAgICAgICAgQWRkIEZyYW1lKiB0byB0aGUgYXJndW1lbnQgbGlzdHMgb2YgY2FuQ29weUN1
dCBhbmQgY2FuUGFzdGUKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU5MTUzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlr
dS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Y2FuQ29weUN1dCk6
Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUGFzdGUpOgotICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTEtMDQtMDQgIE1P
UklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
Unlvc3VrZSBOaXdhLgotCi0gICAgICAgIFtSZWZhY3RvcmluZ10gU3BlbGxDaGVja2luZ1Jlc3Vs
dCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBUZXh0Q2hlY2tpbmdSZXN1bHQKLSAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MDg1Ci0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oOgotICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yQ2xpZW50SGFpa3U6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMS0wNC0wNCAg
Q2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KLQotICAgICAgICBzZXRDb250ZW50RWRpdGFibGUgd2l0aCB0cnVlL2ZhbHNlL2lu
aGVyaXQgc3RyaW5nIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5Ci0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjA1OAotCi0gICAgICAgIE1vdmUgaXNDb250
ZW50RWRpdGFibGUgZnJvbSBIVE1MRWxlbWVudCB0byBOb2RlLiBXZWJLaXQgc2hvdWxkIG9ubHkg
YWNjZXNzIGlzQ29udGVudEVkaXRhYmxlCi0gICAgICAgIGFzIHJlbmRlcmVySXNFZGl0YWJsZSBp
cyBmb3IgV2ViQ29yZSBpbnRlcm5hbCB1c2UuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlr
dTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTEtMDMtMzEgIEV2YW4gTWFydGluICA8ZXZh
bkBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAg
ICAgICAgPHRpdGxlPiBzaG91bGQgc3VwcG9ydCBkaXIgYXR0cmlidXRlCi0gICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDk2MQotCi0gICAgICAgIFVwZGF0
ZSB0byBuZXcgRnJhbWVMb2FkZXJDbGllbnQgaW50ZXJmYWNlLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6Ci0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0yMDExLTAzLTI1
ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGVsZSBQZXRlcnNvbi4KLQotICAgICAgICBSRUdSRVNTSU9OIChyNzA3NDgpOiBsYXRlc3Qgbmln
aHRseSBidWlsZHMga2lsbHMgQUNfUXVpY2tUaW1lLmpzCi0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTAxNgotCi0gICAgICAgIFVwZGF0ZSBvYmplY3RD
b250ZW50VHlwZSgpIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB0aGUKLSAgICAgICAgc2hvdWxk
UHJlZmVyUGx1Z0luc0ZvckltYWdlcyBmbGFnLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpvYmplY3RDb250ZW50VHlwZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0yMDExLTAzLTI1ICBDaGFuZyBTaHUgIDxj
c2h1QHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0g
ICAgICAgIHJlbmFtZSBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSBhbmQgYWxsIGNhbGwgc2l0ZXMg
dG8gcmVuZGVyZXJJc0VkaXRhYmxlCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDI5MAotCi0gICAgICAgIFRoaXMgaXMgcGFydCBvZiB0aGUgZWZmb3J0
IHRvIHNlcGFyYXRlIEpTIEFQSSBIVE1MRWxlbWVudCBpc0NvbnRlbnRFZGl0YWJsZSBmcm9tCi0g
ICAgICAgIGludGVybmFsIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJsZS4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKLQotMjAxMS0wMy0yNCAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjgxOTE2IGFuZCByODE5MTcuCi0gICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzgxOTE2Ci0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzgxOTE3Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzA3MQotCi0gICAgICAgIGJyb2tlIGEgdGVzdCBvbiBwbGF0Zm9ybXMgdGhh
dCBkbyBub3QgaGF2ZSBRdWlja1RpbWUgaW5zdGFsbGVkCi0gICAgICAgIChSZXF1ZXN0ZWQgYnkg
ZXN0ZXMgb24gI3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6Om9iamVjdENvbnRlbnRUeXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTEtMDMtMjQgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBw
bGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIFJF
R1JFU1NJT04gKHI3MDc0OCk6IGxhdGVzdCBuaWdodGx5IGJ1aWxkcyBraWxscyBBQ19RdWlja1Rp
bWUuanMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
MDE2Ci0KLSAgICAgICAgVXBkYXRlIG9iamVjdENvbnRlbnRUeXBlKCkgaW1wbGVtZW50YXRpb24g
dG8gaGFuZGxlIHRoZQotICAgICAgICBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzIGZsYWcu
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoK
LSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om9iamVjdENvbnRlbnRU
eXBlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1Lmg6
Ci0KLTIwMTEtMDMtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAgICAgUmVwbGFjZSBXZWJLaXQyJ3Mg
ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUgd2l0aCBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4MjcKLQotICAg
ICAgICBSZW5hbWVkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1J
TUVUeXBlIHRvIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UKLSAgICAgICAgYW5kIHBh
c3MgdGhlIGVudGlyZSByZXNwb25zZSwgaW5zdGVhZCBvZiBqdXN0IHRoZSBNSU1FVHlwZS4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JSZXNwb25zZSk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRIYWlrdS5oOgotCi0yMDExLTAzLTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgotCi0gICAgICAgIFJlbW92aW5nIGFuIGluY2x1ZGUgb2YgV2ViQ29yZUtleWJvYXJkVUlN
b2RlLmggdGhhdCBJdmUganVzdCBhZGRlZC4gSXQncyBhbHJlYWR5IGluY2x1ZGVkCi0gICAgICAg
IHZpYSBDaHJvbWVDbGllbnQuaAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuaDoKLQotMjAxMS0wMy0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxl
LmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBSRUdS
RVNTSU9OIChXZWJLaXQyKTogVGFiIGtleXMgbm8gbG9uZ2VyIG9ic2VydmUgRnVsbCBLZXlib2Fy
ZCBBY2Nlc3MKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU1NjMzCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTYzMDIzPgotCi0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwOiAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50
SGFpa3U6OmtleWJvYXJkVUlNb2RlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oOgotICAgICAgICBJbXBsZW1lbnQga2V5Ym9hcmRVSU1vZGUoKSBpbnN0ZWFk
IG9mIHRhYnNUb0xpbmtzKCkuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBzaW5jZQotICAg
ICAgICB0aGlzIHBsYXRmb3JtIGRvZXNuJ3Qgb2JzZXJ2ZSBvciBoYXZlIGZ1bGwga2V5Ym9hcmQg
YWNjZXNzIHN0YXRlLgotCi0yMDExLTAyLTI4ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgotCi0gICAgICAgIFJlbW92ZSB0
aGUgc3VwcG9ydCBvZiBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUgYW5kIGl0cyBkZXBlbmRlbmNp
ZXMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5
MgotCi0gICAgICAgIFJlbW92ZSB0aGUgV2ViS2l0IHNpZGUgaW1wbGVtZW50YXRpb24uCi0KLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuaDoKLQotMjAxMS0wMi0xNyAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRh
bXVyYS4KLQotICAgICAgICBSZW5hbWUgUG9zaXRpb246Om5vZGUoKSB0byBQb3NpdGlvbjo6ZGVw
cmVjYXRlZE5vZGUoKQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQ2MjIKLQotICAgICAgICBSZXBsYWNlZCB0aGUgY2FsbCB0byBub2RlKCkgYnkgYSBj
YWxsIHRvIGNvbnRhaW5lck5vZGUoKSBiZWNhdXNlIHRoZSByZXR1cm5lZCBub2RlIGlzCi0gICAg
ICAgIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBzZWxlY3RlZCBjb250ZW50
cyBhcmUgZWRpdGFibGUgYW5kIHN1Y2ggYSBjaGVjawotICAgICAgICBtdXN0IGJlIGRvbmUgYWdh
aW5zdCB0aGUgY29udGFpbmVyIG5vZGUuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6
aGFuZGxlS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTEtMDItMTkgIENoYXJsaWUgUmVpcyAgPGNyZWlz
QGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCi0K
LSAgICAgICAgRW5zdXJlIGxvYWRpbmcgaGFzIHN0b3BwZWQgaW4gSGlzdG9yeUNvbnRyb2xsZXI6
OmdvVG9JdGVtCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDUxNwotCi0gICAgICAgIEFkZCBhIEZyYW1lTG9hZGVyQ2xpZW50IGNhbGxiYWNrIGZvciB3
aGV0aGVyIHRvIHN0b3AgbG9hZGluZyBiZWZvcmUgZ29Ub0l0ZW0uCi0KLSAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ZvcndhcmQtdG8tZnJhZ21lbnQtZmlyZXMtb25sb2FkLmh0
bWwKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3Bw
OgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2hvdWxkU3RvcExv
YWRpbmdGb3JIaXN0b3J5SXRlbSk6IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50SGFpa3UuaDoKLQotMjAxMS0wMS0yNiAgTU9SSVRBIEhhamltZSAgPG1v
cnJpdGFAZ29vZ2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCi0K
LSAgICAgICAgUmVmYWN0b3Jpbmc6IEV4dHJhY3QgVGV4dENoZWNrZXJDbGllbnQgZnJvbSBFZGl0
b3JDbGllbnQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzMjEzCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oOgot
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6OnRleHRDaGVja2VyKToKLQotMjAx
MS0wMi0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIEFkZCBFZGl0b3JDbGllbnQgY2FsbGJhY2tz
IHRvIG92ZXJyaWRlIGlzRE9NUGFzdGVBbGxvd2VkIGFuZCBqYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjQxNwotCi0gICAgICAgIEFkZGVkIHR3byBjYWxsYmFjayBmdW5jdGlvbnMsIGNhbkNvcHlDdXQg
YW5kIGNhblBhc3RlIHRvIEVkaXRvckNsaWVudC4gVGhleSBhcmUgY3VycmVudGx5Ci0gICAgICAg
IG5vdCBpbXBsZW1lbnRlZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpjYW5Db3B5
Q3V0KTogQWRkZWQuCi0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUGFz
dGUpOiBBZGRlZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5o
OgotCi0yMDExLTAyLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgUmVtb3ZlIG9ycGhhbiBjb2Rl
IGZyb20gb2xkIHBhcnNlcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTM5ODQKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhh
aWt1LmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgot
Ci0yMDExLTAyLTA3ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgQWRhbSBSb2JlbiBhbmQgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgV2ViS2l0
MjogZHJhZyBhbmQgZHJvcCBzdXBwb3J0IG9uIFdpbmRvd3MuCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjc3NQotCi0gICAgICAgIFJlbW92ZWQgY3Jl
YXRlRHJhZ0ltYWdlRm9yTGluayBmcm9tIERyYWdDbGllbnQuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EcmFnQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRIYWlrdS5oOgotCi0yMDExLTAyLTA3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9n
YUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCi0KLSAg
ICAgICAgW0hhaWt1XSBGcmFtZUxvYWRlckNsaWVudCBjYWxscyBsb2FkVVJMSW5DaGlsZEZyYW1l
IG9uIHRoZSBjaGlsZCdzIGZyYW1lIGxvYWRlcgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM4OTMKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6Y3JlYXRlRnJhbWUpOiBVc2UgbV9mcmFtZSBpbnN0ZWFkIG9mIGNoaWxkRnJh
bWUuCi0KLTIwMTEtMDEtMjggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KLQotICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgotCi0gICAgICAgIDxzZWxlY3Q+IGNhbid0IGRp
c3BsYXkgcmlnaHQtdG8tbGVmdCAocnRsKSBsYW5ndWFnZXMKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzg1Ci0KLSAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnRIYWlrdTo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbik6
IEFkZGVkLgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6Ci0K
LTIwMTEtMDEtMjcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KLQotICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgotCi0gICAgICAgIFVzZSBEb2N1bWVudDo6dXJsKCkg
aW5zdGVhZCBvZiBGcmFtZUxvYWRlcjo6dXJsKCkuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTE2NQotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCk6Ci0KLTIwMTAtMTIt
MjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KLQotICAgICAgICBXZWJLaXQyIG5lZWRzIHRvIG1pcnJvciB0aGUgZnJhbWUg
dHJlZSBpbiB0aGUgVUlQcm9jZXNzCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MTU0NgotCi0gICAgICAgIC0gQWRkIGNsaWVudCBmdW5jdGlvbnMgdG8g
bm90aWZ5IHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBhZGRlZCBvcgotICAgICAgICAgIHJlbW92ZWQg
ZnJvbSB0aGUgcGFnZSBjYWNoZS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlkU2F2ZVRvUGFnZUNhY2hlKToKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAtMTItMjIgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCi0KLSAgICAgICAgRWRpdG9yLmggZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgU2VsZWN0aW9u
Q29udHJvbGxlci5oCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MTQ0MQotCi0gICAgICAgIFJlbmFtZWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVj
dGlvbiB0byBTZWxlY3Rpb25EaXJlY3Rpb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlr
dTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6Ci0KLTIwMTAtMTAtMjggIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KLQot
ICAgICAgICBzcGVsbGNoZWNrIGRvZXMgbm90IGNoZWNrIHBhc3RlZCB0ZXh0Ci0gICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA5MgotCi0gICAgICAgIEFk
ZGVkIGEgc3R1YiBpbXBsZW1lbW50YXRpb24uCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRIYWlrdS5oOgotICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50SGFpa3U6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKLQotMjAxMC0xMi0wMSAgSmlhIFB1ICA8anB1QGFw
cGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBT
dXBwb3J0IG11bHRpcGxlIGNvcnJlY3Rpb24gY2FuZGlkYXRlcyBwYW5lbCBmb3IgbWlzc3BlbGxl
ZCB3b3JkIG9uIE1hYyBPUyBYLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTAxMzcKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NjgwNTk+Ci0KLSAg
ICAgICAgQWRvcHRlZCBuZXcgZnVuY3Rpb24gc2lnbmF0dXJlIGRlZmluZWQgaW4gYmFzZSBjbGFz
cy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoKLSAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1OjpnZXRHdWVzc2VzRm9yV29yZCk6Ci0g
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0xMS0w
OCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg2ODUKLSAgICAgICAgTm90aWZ5IFVJIHByb2Nlc3MgYWJvdXQgZm9jdXNl
ZCBmcmFtZQotCi0gICAgICAgIEFkZGVkIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBu
ZXcgQ2hyb21lQ2xpZW50IG1ldGhvZC4gQWxzbywgYWRkZWQgbWlzc2luZyAidmlydHVhbCIKLSAg
ICAgICAga2V5d29yZHMgYWxsIG92ZXIgdGhlIHBsYWNlLgotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50SGFpa3U6OmZvY3VzZWRGcmFtZUNoYW5nZWQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEhhaWt1Lmg6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlr
dTo6c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UpOgotICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50SGFpa3U6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6Ci0K
LTIwMTAtMTEtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KLQotICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NzY2MDU0Nz4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODY5
OQotICAgICAgICBDb250ZXh0IG1lbnUgc3VwcG9ydCBmb3IgV2ViS2l0IDIuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OnNob3dDb250ZXh0TWVudSk6Ci0KLTIwMTAtMTAtMjkgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ4NTc2Ci0gICAgICAgIExldCBXZWJLaXQyIGNsaWVudCBrbm93IHdoZW4gYSBmcmFtZSBp
cyBhIGZyYW1lc2V0Ci0KLSAgICAgICAgQWRkZWQgYSBibGFuayBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgbmV3IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQpOgotCi0yMDEwLTEwLTI2ICBK
ZW5uIEJyYWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2Vk
IGJ5IERtaXRyeSBUaXRvdi4KLQotICAgICAgICBSZXNvdXJjZSB0cmFja2luZyBmYWlsdXJlIHdo
ZW4gdHJ5aW5nIHRvIG1vdmUgYSBmcmFtZSBiZXR3ZWVuIGRvY3VtZW50cwotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MTMKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFn
ZSk6Ci0gICAgICAgIEVtcHR5IG1ldGhvZC4KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAtMTAtMjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCi0KLSAgICAg
ICAgV2ViS2l0MiBuZWVkcyB0byBwYXNzIHRoZSBjdXJyZW50IGV2ZW50IG1vZGlmaWVyIGZsYWdz
IHdoZW4gcmVxdWVzdGluZyBhIG5ldyB3aW5kb3cKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MTQwCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlr
dTo6Y3JlYXRlV2luZG93KToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRI
YWlrdS5oOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3Uu
Y3BwOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hD
cmVhdGVQYWdlKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhh
aWt1Lmg6Ci0gICAgICAgIEFkZCBOYXZpZ2F0aW9uQWN0aW9uIHBhcmFtZXRlci4KLQotMjAxMC0w
OS0yOCAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCi0KLSAgICAgICAgQWRkZWQgb2xkUGFnZSBwYXJhbSB0
byBGcmFtZUxvYWRlckNsaWVudDo6ZGlkVHJhbnNmZXJDaGlsZEZyYW1lVG9OZXdEb2N1bWVudC4K
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NjYzCi0K
LSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoKLSAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFRyYW5zZmVyQ2hpbGRG
cmFtZVRvTmV3RG9jdW1lbnQpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50SGFpa3UuaDoKLQotMjAxMC0wOS0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCi0KLSAgICAgICAgUGFz
dGUgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIFdlYkNvcmUgbGlrZSBDb3B5IGFuZCBDdXQgZm9y
IE1hYyBhbHNvLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDU0OTQKLSAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1Mzc+Ci0KLSAgICAgICAgT24g
dGhlIE1hYyBwbGF0Zm9ybSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwYXN0ZSBvcGVyYXRp
b24gaXMgYWxsIGRvbmUKLSAgICAgICAgYXQgdGhlIFdlYktpdCBsZXZlbC4gSW4gb3JkZXIgdG8g
c3VwcG9ydCBpdCBvbiBXZWJLaXQyIGl0IGlzIG5lY2Vzc2FyeSB0bwotICAgICAgICByZWZhY3Rv
ciB0aGUgY29kZSBhbmQgbW92ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXQgdGhlIGxldmVsIG9mIFdl
YkNvcmUgbGlrZQotICAgICAgICB3ZSBhbHJlYWR5IGhhdmUgb24gV2luZG93cy4KLSAgICAgICAg
VGhlIG9yaWdpbmFsIGNvZGUgcmVsaWVzIG9uIHNvbWUgaW4gQXBwS2l0IGZ1bmN0aW9ucyB0aGF0
IGNhbGwgYmFjayBpbnRvCi0gICAgICAgIFdlYktpdCBjYXVzaW5nIHByb2JsZW1zIGluIFdlYktp
dDIuIEFsbCB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQKLSAgICAgICAgYXQgdGhl
IGxldmVsIG9mIHRoZSBlZGl0b3IgY2xpZW50IHdoZXJlIGl0IGNhbiBiZSBkZWFsdCB3aXRoIGFw
cHJvcHJpYXRlbHkuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNh
blNob3dNSU1FVHlwZUFzSFRNTCk6IEFkZGVkIHN0dWIuCi0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0yMDEwLTA5LTEwICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgot
Ci0gICAgICAgIE1vdmUgY29kZSBmcm9tIFdlYktpdC1sYXllciB0byBEb2N1bWVudExvYWRlcgot
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1NjkKLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y29tbWl0dGVkTG9hZCk6Ci0K
LTIwMTAtMDktMTAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KLQotICAgICAgICBNYWluIHJlc291cmNlIGJ5dGVzIHNo
b3VsZG4ndCBib3VuY2UgdGhyb3VnaCBGcmFtZUxvYWRlcgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0OTYKLQotICAgICAgICBOb3cgcmV0dXJuIHRo
ZSBieXRlcyB0byB0aGUgRG9jdW1lbnRMb2FkZXIuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmNvbW1pdHRlZExvYWQpOgotCi0yMDEwLTA4LTA2ICBHYXZpbiBCYXJy
YWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KLQotICAgICAgICBSdWJiZXIgc3RhbXBl
ZCBieSBTYW0gV2VpbmlnCi0KLSAgICAgICAgQnVnIDQzNTk0IC0gQWRkIHN0cmluZyBmb3J3YXJk
cyB0byBGb3J3YXJkLmgKLSAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGZvcndhcmQg
ZGVjbGFyYXRpb25zIGZvciB0aGVzZSBjbGFzc2VzIGZyb20KLSAgICAgICAgV2ViQ29yZS9XZWJL
aXQgKGEgc3RlcCBpbiBtb3ZpbmcgdGhlc2UgY2xhc3MgZnJvbSBXZWJDb3JlOjogdG8gV1RGOjop
LgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAt
MDgtMDYgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KLQotICAgICAgICBSb2xs
IG91dCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC82NDgwMSwgd2hpY2ggYnJva2Ug
dGhlIFNhZmFyaSBXaW5kb3dzIEJ1aWxkLgotICAgICAgICBVbnJldmlld2VkLgotCi0gICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAtMDctMjcgIEx1aXog
QWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gRmlzaGVyLgotCi0gICAgICAgIFBvcHVwTWVudSByZWZhY3RvcmluZyBpbiBw
cmVwYXJhdGlvbiB0byBXZWJLaXQyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MjU5MgotCi0gICAgICAgIEFzIENocm9tZUNsaWVudCB3YXMgbWFkZSBy
ZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIFBvcHVwTWVudSBhbmQgU2VhcmNoUG9wdXBNZW51Ci0g
ICAgICAgIGluc3RhbmNlcywgY29uY3JldGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSBDaHJv
bWVDbGllbnQgbmVlZGVkIHRvIGJlIGNoYW5nZWQgdG8KLSAgICAgICAgaW1wbGVtZW50IHRoZSBu
ZXcgbWV0aG9kcy4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1
LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZWxlY3RJdGVtV3Jp
dGluZ0RpcmVjdGlvbklzTmF0dXJhbCk6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRI
YWlrdTo6Y3JlYXRlUG9wdXBNZW51KToKLSAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhh
aWt1OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAtMDgtMDIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0Bj
aHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgU3BlY3VsYXRpdmUgcmV2ZXJ0IG9mIDY0NDI1IGR1ZSB0
byBDaHJvbWl1bSBpbnN0YWJpbGl0eQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDMzNDcKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEhhaWt1LmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlr
dS5oOgotCi0yMDEwLTA3LTI3ICBMdWl6IEFnb3N0aW5pICA8bHVpei5hZ29zdGluaUBvcGVuYm9z
c2Eub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KLQotICAgICAgICBQ
b3B1cE1lbnUgcmVmYWN0b3JpbmcgaW4gcHJlcGFyYXRpb24gdG8gV2ViS2l0MgotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI1OTIKLQotICAgICAgICBB
cyBDaHJvbWVDbGllbnQgd2FzIG1hZGUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBQb3B1cE1l
bnUgYW5kIFNlYXJjaFBvcHVwTWVudQotICAgICAgICBpbnN0YW5jZXMsIGNvbmNyZXRlIGNsYXNz
ZXMgdGhhdCBpbmhlcml0IGZyb20gQ2hyb21lQ2xpZW50IG5lZWRlZCB0byBiZSBjaGFuZ2VkIHRv
Ci0gICAgICAgIGltcGxlbWVudCB0aGUgbmV3IG1ldGhvZHMuCi0KLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRIYWlrdTo6c2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwpOgotICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVBvcHVwTWVudSk6Ci0gICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KToKLSAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotCi0yMDEwLTA3LTMx
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KLQotICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByNjQ0MjIuCi0gICAgICAgIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcvY2hhbmdlc2V0LzY0NDIyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MzMwNAotCi0gICAgICAgIEJ1aWxkIGZpeGVzIGFyZSBuZWVkZWQgZm9y
IFNub3cgTGVvcGFyZCBhbmQgV2luZG93cy4KLSAgICAgICAgKFJlcXVlc3RlZCBieSBsY2Egb24g
I3dlYmtpdCkuCi0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5j
cHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQotMjAx
MC0wNy0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KLQot
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCi0KLSAgICAgICAgUG9wdXBNZW51IHJl
ZmFjdG9yaW5nIGluIHByZXBhcmF0aW9uIHRvIFdlYktpdDIKLSAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNTkyCi0KLSAgICAgICAgQXMgQ2hyb21lQ2xp
ZW50IHdhcyBtYWRlIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgUG9wdXBNZW51IGFuZCBTZWFy
Y2hQb3B1cE1lbnUKLSAgICAgICAgaW5zdGFuY2VzLCBjb25jcmV0ZSBjbGFzc2VzIHRoYXQgaW5o
ZXJpdCBmcm9tIENocm9tZUNsaWVudCBuZWVkZWQgdG8gYmUgY2hhbmdlZCB0bwotICAgICAgICBp
bXBsZW1lbnQgdGhlIG5ldyBtZXRob2RzLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6
OnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKToKLSAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVQb3B1cE1lbnUpOgotICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVNlYXJjaFBvcHVwTWVudSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0wNy0zMCAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IEtpbHplci4KLQotICAgICAgICBMaW1pdCBBcHBsaWNhdGlvbkNhY2hlIFRvdGFsIGFuZCBQZXIt
T3JpZ2luIFN0b3JhZ2UgQ2FwYWNpdHkgKFF1b3RhcykKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjI3Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRX
eDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Ci0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0wNy0xNiAgWmhlIFN1ICA8c3V6
aGVAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0g
ICAgICAgIFJFR1JFU1NJT04ocjYxNDg0KTogQnJva2UgZm9jdXMgYmVoYXZpb3VyIG9uIFF0IGFu
ZCBwcm9iYWJseSBvdGhlciBwbGF0Zm9ybXMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMjUzCi0KLSAgICAgICAgRHVtbXkgaW1wbGVtZW50YXRpb24g
b2YgRWRpdG9yQ2xpZW50Ojp3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZS4KLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEhhaWt1Ojp3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSk6Ci0gICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0wNy0xNCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgot
Ci0gICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDIyMzIKLSAgICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJzb3IpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6Ci0gICAgICAgIENoYW5nZSBwcm90b3R5
cGUgdG8gbWF0Y2ggbmV3IG9uZS4KLQotMjAxMC0wNi0xNCAgSWx5YSBUaWtob25vdnNreSAgPGxv
aXNsb0BjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
LQotICAgICAgICBXZWJJbnNwZWN0b3I6IE9uIHRoZSB3YXkgdG8gUmVtb3RlIERlYnVnZ2luZyB3
ZSB3YW50IHRvIHRyYW5zZmVyIGRvbS90aW1lbGluZS9ldGMKLSAgICAgICAgZGF0YSBmcm9tIGlu
c3BlY3RlZCBwYWdlIHRvIFdlYkluc3BlY3RvciBhcyBKU09OIHN0cmluZyB2aWEgaHR0cC4gVGhl
IG5hdGl2ZQotICAgICAgICBzZXJpYWxpemF0aW9uIHRvIEpTT04gc3RyaW5nIGlzIHN1cHBvcnRl
ZCBieSBJbnNwZWN0b3JWYWx1ZSdzIGNsYXNzZXMuIFRoaXMgcGF0Y2gKLSAgICAgICAgaGFzIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiBzZW5kTWVzc2FnZVRvRnJvbnRlbmQgZnVuY3Rpb24uIFdlYktp
dCB2ZXJzaW9uIG9mIGl0IHN0aWxsCi0gICAgICAgIHVzZXMgU2NyaXB0RnVuY3Rpb25DYWxsIGFu
ZCB3aWxsIGJlIHN3aXRjaGVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGEgbGl0dGxlIGJpdCBsYXRl
ci4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM0
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6Ci0g
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgot
Ci0yMDEwLTA2LTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
LQotICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjA4ODkuCi0gICAgICAgIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzYwODg5Ci0gICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM2NQotCi0gICAgICAgIGd0ayBib3QgaGFzIHNv
bWUga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbiAoUmVxdWVzdGVkIGJ5Ci0gICAgICAgIGxvaXNs
byBvbiAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dEhhaWt1LmNwcDoKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oOgotCi0yMDEwLTA2LTA3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KLQotICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgotCi0gICAgICAgIFdlYklu
c3BlY3RvcjogT24gdGhlIHdheSB0byBSZW1vdGUgRGVidWdnaW5nIHdlIHdhbnQgdG8gdHJhbnNm
ZXIgZG9tL3RpbWVsaW5lL2V0YwotICAgICAgICBkYXRhIGZyb20gaW5zcGVjdGVkIHBhZ2UgdG8g
V2ViSW5zcGVjdG9yIGFzIEpTT04gc3RyaW5nIHZpYSBodHRwLiBUaGUgbmF0aXZlCi0gICAgICAg
IHNlcmlhbGl6YXRpb24gdG8gSlNPTiBzdHJpbmcgaXMgc3VwcG9ydGVkIGJ5IEluc3BlY3RvclZh
bHVlJ3MgY2xhc3Nlcy4gVGhpcyBwYXRjaAotICAgICAgICBoYXMgdGhlIGltcGxlbWVudGF0aW9u
IG9mIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCBmdW5jdGlvbi4gV2ViS2l0IHZlcnNpb24gb2YgaXQg
c3RpbGwKLSAgICAgICAgdXNlcyBTY3JpcHRGdW5jdGlvbkNhbGwgYW5kIHdpbGwgYmUgc3dpdGNo
ZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQgYSBsaXR0bGUgYml0IGxhdGVyLgotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzQKLQotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudEhhaWt1OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6Ci0KLTIwMTAtMDUtMzEgIEx5
b24gQ2hlbiAgPGxpYWNoZW5AcmltLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRh
bXVyYS4KLQotICAgICAgICBFbnVtIHZhbHVlIEZPUldBUkQsIEJBQ0tXQVJELCBSSUdIVCwgTEVG
VCBhcmUgY2F1c2luZyBtYWNybyBjb25mbGljdHMuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTUzMAotCi0gICAgICAgIENoYW5nZSBlbnVtIEVBbHRl
cmF0aW9uIGZyb20geyBNT1ZFLCBFWFRFTkQgfSB0byB7IEFsdGVyYXRpb25Nb3ZlLCBBbHRlcmF0
aW9uRXh0ZW5kIH0gYW5kIGVudW0gRURpcmVjdGlvbiB7IEZPUldBUkQsIEJBQ0tXQVJELCBSSUdI
VCwgTEVGVH0gdG8geyBEaXJlY3Rpb25Gb3J3YXJkLCBEaXJlY3Rpb25CYWNrd2FyZCwgRGlyZWN0
aW9uUmlnaHQsIERpcmVjdGlvbkxlZnQgfSB0byBhdm9pZCBtYWNybyBjb25mbGljdCwgYW5kIGFs
c28gYmV0dGVyIGNvZGluZyBzdHlsZSBjb25mb3JtYW5jZS4KLQotICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKLQotMjAxMC0wNS0zMCAgTHlvbiBDaGVu
ICA8bGlhY2hlbkByaW0uY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgot
Ci0gICAgICAgIFRoaXMgaXMgYSBjb2Rpbmcgc3R5bGUgY2xlYW51cCBiZWZvcmUgZml4aW5nIHRv
IGJ1ZyAzNTUzMC4KLQotICAgICAgICBFbnVtIHZhbHVlIEZPUldBUkQsIEJBQ0tXQVJELCBSSUdI
VCwgTEVGVCBhcmUgY2F1c2luZyBtYWNybyBjb25mbGljdHMuCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTUzMAotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xp
ZW50SGFpa3U6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgotCi0yMDEwLTA1LTAzICBKZW5zIEFsZmtl
ICA8c25lakBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgotCi0gICAgICAgIFtjaHJvbWl1bV0gQWRkICJ3aWxsU2VuZFN1Ym1pdEV2ZW50IiBob29rIHRv
IFdlYkZyYW1lQ2xpZW50IGFuZCBGcmFtZUxvYWRlckNsaWVudAotICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgzOTcKLQotICAgICAgICBObyB0ZXN0cyAo
ZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIG9ubHkgdGhyb3VnaCBuYXRpdmUgV2ViS2l0IEFQSS4p
Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1Lmg6Ci0g
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxTZW5k
U3VibWl0RXZlbnQpOgotCi0yMDEwLTA0LTIwICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgRmFjdG9y
IERvY3VtZW50V3JpdGVyIG91dCBvZiBGcmFtZUxvYWRlcgotICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxNzUKLQotICAgICAgICBVcGRhdGUgdGhlc2Ug
Y2FsbHNpdGVzIGJlY2F1c2UgdGhlIG1ldGhvZCBtb3ZlZCB0byBEb2N1bWVudFdyaXRlci4KLQot
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y29tbWl0dGVkTG9hZCk6Ci0K
LTIwMTAtMDQtMjAgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIENoYW5nZSBhIHBhcmFtZXRlciB0
eXBlIG9mIGNob29zZUljb25Gb3JGaWxlcygpCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzUwNAotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6
OmNob29zZUljb25Gb3JGaWxlcyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuaDoKLQotMjAxMC0wNC0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3NDY4Lgot
ICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NzQ2OAotICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0MzMKLQotICAgICAgICBC
cm9rZSB0aGUgd29ybGQuLi4gIE11c3QgaGF2ZSBhcHBsaWVkIHRoZSBwYXRjaCB3cm9uZwotICAg
ICAgICAoUmVxdWVzdGVkIGJ5IGFiYXJ0aCBvbiAjd2Via2l0KS4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y29tbWl0dGVkTG9hZCk6Ci0KLTIwMTAtMDQtMTEgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KLQotICAgICAgICBGYWN0b3IgRG9jdW1lbnRXcml0ZXIgb3V0IG9mIEZyYW1lTG9h
ZGVyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzE3
NQotCi0gICAgICAgIFVwZGF0ZSB0aGVzZSBjYWxsc2l0ZXMgYmVjYXVzZSB0aGUgbWV0aG9kIG1v
dmVkIHRvIERvY3VtZW50V3JpdGVyLgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEhhaWt1Ojpjb21taXR0ZWRMb2FkKToKLQotMjAxMC0wNC0wNyAgQW5kcmV5IEtvc3lha292ICA8
Y2FzZXFAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCi0KLSAgICAgICAgUmVtb3ZlZCByZWR1bmRhbnQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCgpCi0gICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjk0OQotCi0gICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oOgotCi0yMDEwLTAzLTMxICBNYXJjdXMgQnVsYWNo
ICA8YnVsYWNoQGNocm9taXVtLm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Js
b3cuCi0KLSAgICAgICAgQWRkcyBHZW9sb2NhdGlvbiBwYXJhbSBmb3IgY2FuY2VsR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzEKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEhhaWt1Lmg6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6
Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKLQotMjAxMC0wMy0y
OCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBCdWlsZCBm
aXguIEluY2x1ZGUgV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbnN0ZWFkIG9mIEtleWJvYXJkQ29k
ZXMuaC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcDoK
LQotMjAxMC0wMy0yNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0KLSAgICAgICAgTWFrZSBJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZXMoKSBvcHRpb25hbC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDcyCi0KLSAgICAgICAgLSBSZW5hbWUgaWNvbkZvckZpbGVzKCkg
dG8gY2hvb3NlSWNvbkZvckZpbGVzKCkuCi0gICAgICAgIC0gQ2FsbCBJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMoKSBmcm9tIGNob29zZUljb25Gb3JGaWxlcygpLgotCi0gICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6Q2hyb21l
Q2xpZW50SGFpa3U6OmNob29zZUljb25Gb3JGaWxlcyk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0wMy0xNiAgWXVyeSBTZW1pa2hhdHNreSA8
eXVyeXNAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4u
Ci0KLSAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlk
ZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJ
bnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250
cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3Rv
ciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LgotCi0gICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2Ug
dG8gdGhlIGVtYmVkZGVyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTAzNgotCi0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50SGFpa3U6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50SGFpa3UuaDoKLQotMjAxMC0wMy0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgotCi0gICAgICAgIFJl
bW92ZSBpbnZhbGlkYXRlQ29udGVudHMsIGl0IGlzbid0IHVzZWQgYW5kIGl0IG5ldmVyIG1ha2Vz
IHNlbnNlIHRvIG9ubHkgaW52YWxpZGF0ZSB0aGUgY29udGVudHMuCi0KLSAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKLQotMjAxMC0wMy0wMiAgQWRhbSBUcmVhdCAgPGF0cmVh
dEByaW0uY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCi0KLSAgICAgICAg
QWRhcHQgdGhlIGhhaWt1IHBvcnQgdG8gdGhlIHJlZmFjdG9yaW5nIG9mIHJlcGFpbnQgbWV0aG9k
cy4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQy
MTQKLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjppbnZhbGlkYXRlQ29udGVudHMpOgot
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmludmFsaWRhdGVXaW5kb3cpOgot
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OmludmFsaWRhdGVDb250ZW50c0Fu
ZFdpbmRvdyk6Ci0gICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250
ZW50c0ZvclNsb3dTY3JvbGwpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEhhaWt1Lmg6Ci0KLTIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUu
Y29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgotCi0gICAgICAgIEFkZHMg
Q2hyb21lQ2xpZW50OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTYyCi0K
LSAgICAgICAgVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgc28gdGhhdCBhIEdlb2xvY2F0aW9uIG9i
amVjdCBjYW4gY2FuY2VsIGFuCi0gICAgICAgIGFzeW5jaHJvbm91cyBwZXJtaXNzaW9uIHJlcXVl
c3QuIFRoaXMgYWxsb3dzIHRoZSBjaHJvbWUgY2xpZW50IHRvIGNhbmNlbAotICAgICAgICBhbnkg
VUkgaXQgaXMgc2hvd2luZyBmb3IgdGhlIHBlcm1pc3Npb24gcmVxdWVzdC4KLQotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6Ci0gICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKToKLQotMjAxMC0wMi0xNyAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbiwgRGFyaW4gRmlzaGVyLCBTaW1vbiBI
YXVzbWFubi4KLQotICAgICAgICBXaGVuIGEgbGl2ZSBpZnJhbWUgZWxlbWVudCBpcyBtb3ZlZCBi
ZXR3ZWVuIHBhZ2VzLCBpdCBzdGlsbCBkZXBlbmRzIG9uIHRoZSBvbGQgcGFnZS4KLSAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MzgyCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFRyYW5zZmVyQ2hpbGRGcmFtZVRvTmV3
RG9jdW1lbnQpOgotICAgICAgICBBZGRlZCBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBhIG5ldyB2
aXJ0dWFsIG1ldGhvZC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3UuaDoKLQotMjAxMC0wMi0xNyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgSW50cm9k
dWNlcyBuZXcgSWNvbiBsb2FkaW5nIGludGVyZmFjZSBpbiBvcmRlciB0byBzdXBwb3J0Ci0gICAg
ICAgIGFzeW5jaHJvbm91cyBsb2FkaW5nLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzIwNTQKLQotICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50
YXRpb24gb2YgQ2hyb21lQ2xpZW50OjppY29uRm9yRmlsZXMoKS4KLQotICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OkNocm9t
ZUNsaWVudEhhaWt1OjppY29uRm9yRmlsZXMpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEhhaWt1Lmg6Ci0KLTIwMDktMTItMDYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1h
eGltZUBnbWFpbC5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQotICAg
ICAgICBCdWlsZCBmaXguIEFkZCBpbiBGcmFtZUxvYWRlckNsaWVudEhhaWt1IHRoZSBkZWNsYXJh
dGlvbiBvZiB0aHJlZSBmdW5jdGlvbnMgaW50cm9kdWNlZCBpbiByNTE2NDQuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGlu
UGFnZSk6Ci0gICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UpOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaDoKLQotMjAwOS0xMi0wMyAg
UGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGRoY3AtMTcyLTI4LTE3NC0yMjAuc3BiLmNvcnAuZ29v
Z2xlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCi0KLSAgICAg
ICAgV2ViIEluc3BlY3RvcjogU2ltcGxpZnkgdGhlIHNldHRpbmdzIHN1cHBvcnQgaW4gaW5zcGVj
dG9yIGNvbnRyb2xsZXIuCi0KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyMDc2Ci0KLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6cG9w
dWxhdGVTZXR0aW5nKToKLSAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEhhaWt1Ojpz
dG9yZVNldHRpbmcpOgotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhh
aWt1Lmg6Ci0KLTIwMDktMTItMDMgIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29tPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KLQotICAgICAgICBbQW5kcm9pZF0gVGhl
IEZyYW1lTG9hZGVyQ2xpZW50IGlzIHVuYXdhcmUgb2YgQmFja0ZvcndhcmRMaXN0IGNoYW5nZXMu
Ci0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTkxNAot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0g
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEFkZEJh
Y2tGb3J3YXJkSXRlbSk6IEFkZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbi4gTWV0aG9kIGFkZGVk
IHRvIEZyYW1lTG9hZGVyQ2xpZW50IGJ5IEFuZHJvaWQgKHNlZSBidWcpLgotICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZW1vdmVCYWNrRm9yd2Fy
ZEl0ZW0pOiBkaXR0by4KLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkQ2hhbmdlQmFja0ZvcndhcmRJbmRleCk6IGRpdHRvLgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaDoKLQotMjAwOS0xMS0xMyAgQWRh
bSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+Ci0KLSAgICAgICAgVXBkYXRlIGZvciBjaGFuZ2Vz
IHRvIEZyYW1lTG9hZGVyQ2xpZW50Ci0KLSAgICAgICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMzExMjQ+IFRlbGwgdGhlIFdlYkZyYW1lTG9hZERlbGVnYXRlIHdoZW4KLSAgICAgICAgd2lu
ZG93IG9iamVjdHMgaW4gaXNvbGF0ZWQgd29ybGRzIGFyZSBjbGVhcmVkCi0KLSAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KLQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3UuY3BwOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgotICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaDoKLSAgICAgICAgUmVwbGFjZWQg
d2luZG93T2JqZWN0Q2xlYXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24uIERvZXMgbm90aGluZyBpZiB0
aGUKLSAgICAgICAgcGFzc2VkLWluIHdvcmxkIGlzIG5vdCB0aGUgbWFpblRocmVhZE5vcm1hbFdv
cmxkKCkuCi0KLTIwMDktMTAtMzAgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0ub3JnPgot
Ci0gICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgotCi0gICAgICAgIE5vdGlmeSB0aGUg
Y2hyb21lIHdoZW4gdGhlIGZvY3VzZWQgbm9kZSBoYXMgY2hhbmdlZC4KLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODMyCi0KLSAgICAgICAgQWRkZWQg
c3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgbmV3IENocm9tZUNsaWVudCBmdW5jdGlvbi4KLQotICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKLSAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojpmb2N1c2VkTm9kZUNoYW5nZWQpOgotICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6Ci0KLTIwMDktMTAtMDcgIEFkYW0g
QmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KLQotICAgICAgICBGYWN0b3IgUG9saWN5Q2hlY2tlciBvdXQgb2YgRnJhbWVMb2FkZXIK
LSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMTU1Ci0K
LSAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRoZSBwb2xpY3kgb2JqZWN0Lgot
Ci0gICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHA6Ci0g
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxTdWJt
aXRGb3JtKToKLSAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUpOgotICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgot
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKLQotMjAwOS0wOS0xNyAgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gSGF1c21hbm4uCi0KLSAgICAgICAgTWFrZSBQbGF0Zm9ybVdpbmRvdyByZXR1cm4gc29t
ZXRoaW5nIGVsc2UgdGhhbiBQbGF0Zm9ybVdpZGdldAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODUKLQotICAgICAgICBSZWZsZWN0IHRoZSByZW5h
bWUgb2YgcGxhdGZvcm1XaW5kb3cgYW5kIGl0J3MgcmV0dXJuIHR5cGUuCi0KLSAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRIYWlrdTo6cGxhdGZvcm1QYWdlQ2xpZW50KToKLSAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotCi0yMDA5LTA4LTI4ICBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgotCi0gICAgICAgIFJl
dmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KLQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4ODkKLSAgICAgICAgW0dUS10gc2Nyb2xsYmFyIHBvbGlj
eSBmb3IgbWFpbiBmcmFtZSBpcyBub3QgaW1wbGVtZW50YWJsZQotCi0gICAgICAgIEFkZCBlbXB0
eSBpbXBsZW1lbnRhdGlvbiBmb3IgbmV3IENocm9tZUNsaWVudCBtZXRob2QuCi0KLSAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgotICAgICAgICAoQ2hyb21lQ2xp
ZW50SGFpa3U6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKToKLQotMjAwOS0wNy0yOSAgS2V2aW4g
TWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KLQotICAgICAgICBBZGRlZCBmb3VuZGF0aW9uIHdvcmsgdG8gYWxsb3cg
YSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGZvciB0aGUgV2ViCi0gICAgICAgIEluc3BlY3Rvci4K
LQotICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcDoKLSAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKToKLSAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oOgotCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2Uv
V2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SGFpa3UuaCIKLQotI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIkljb24uaCIK
LSNpbmNsdWRlICJOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51SGFpa3UuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1l
bnVIYWlrdS5oIgotCi0jaW5jbHVkZSA8QWxlcnQuaD4KLSNpbmNsdWRlIDxTdHJpbmcuaD4KLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNocm9tZUNsaWVudEhhaWt1OjpDaHJvbWVDbGllbnRI
YWlrdSgpCi17Ci19Ci0KLUNocm9tZUNsaWVudEhhaWt1Ojp+Q2hyb21lQ2xpZW50SGFpa3UoKQot
ewotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpjaHJvbWVEZXN0cm95ZWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFdpbmRv
d1JlY3QoY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1G
bG9hdFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7Ci19Ci0KLUZs
b2F0UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6cGFnZVJlY3QoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OmZvY3VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIENocm9tZUNsaWVudEhhaWt1Ojp1bmZvY3VzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudEhhaWt1OjpjYW5UYWtlRm9jdXMoRm9jdXNEaXJl
Y3Rpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6dGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmZvY3VzZWRO
b2RlQ2hhbmdlZChOb2RlKikKLXsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Zm9jdXNl
ZEZyYW1lQ2hhbmdlZChGcmFtZSopCi17Ci19Ci0KLVBhZ2UqIENocm9tZUNsaWVudEhhaWt1Ojpj
cmVhdGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXMmLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1QYWdlKiBDaHJvbWVD
bGllbnRIYWlrdTo6Y3JlYXRlTW9kYWxEaWFsb2coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IENocm9tZUNsaWVudEhhaWt1OjpzaG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1ib29sIENocm9tZUNsaWVudEhhaWt1OjpjYW5SdW5Nb2RhbCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6
OnJ1bk1vZGFsKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudEhhaWt1Ojp0b29sYmFyc1Zpc2libGUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENocm9t
ZUNsaWVudEhhaWt1OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c3RhdHVzYmFyVmlzaWJsZSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsYmFyc1Zp
c2libGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6bWVudWJhclZp
c2libGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRSZXNpemFibGUoYm9vbCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdlVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
c291cmNlSUQpCi17Ci0gICAgcHJpbnRmKCJNRVNTQUdFICVzOiVpICVzXG4iLCBCU3RyaW5nKHNv
dXJjZUlEKS5TdHJpbmcoKSwgbGluZU51bWJlciwgQlN0cmluZyhtZXNzYWdlKS5TdHJpbmcoKSk7
Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQotewotICAgIHByaW50ZigiTUVTU0FHRSAlczolaSAl
c1xuIiwgQlN0cmluZyhzb3VyY2VJRCkuU3RyaW5nKCksIGxpbmVOdW1iZXIsIEJTdHJpbmcobWVz
c2FnZSkuU3RyaW5nKCkpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdl
VG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCi17
Ci0gICAgcHJpbnRmKCJNRVNTQUdFICVzOiVpICVzXG4iLCBCU3RyaW5nKHNvdXJjZUlEKS5TdHJp
bmcoKSwgbGluZU51bWJlciwgQlN0cmluZyhtZXNzYWdlKS5TdHJpbmcoKSk7Ci19Ci0KLWJvb2wg
Q2hyb21lQ2xpZW50SGFpa3U6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ2hyb21l
Q2xpZW50SGFpa3U6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2xvc2VXaW5kb3dTb29uKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1Ojpy
dW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1zZykKLXsKLSAgICBCQWxl
cnQqIGFsZXJ0ID0gbmV3IEJBbGVydCgiSmF2YVNjcmlwdCIsIEJTdHJpbmcobXNnKS5TdHJpbmco
KSwgIk9LIik7Ci0gICAgYWxlcnQtPkdvKCk7Ci19Ci0KLWJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6
OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtc2cpCi17Ci0gICAg
QkFsZXJ0KiBhbGVydCA9IG5ldyBCQWxlcnQoIkphdmFTY3JpcHQiLCBCU3RyaW5nKG1zZykuU3Ry
aW5nKCksICJZZXMiLCAiTm8iKTsKLSAgICByZXR1cm4gIWFsZXJ0LT5HbygpOwotfQotCi1ib29s
IENocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIENocm9tZUNsaWVudEhhaWt1OjpzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotS2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50SGFpa3U6OmtleWJvYXJk
VUlNb2RlKCkKLXsKLSAgICByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OwotfQotCi1JbnRS
ZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6aW52YWxpZGF0
ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3co
Y29uc3QgSW50UmVjdCYsIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25z
dCBJbnRSZWN0JiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudEhhaWt1OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0
IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotSW50UG9pbnQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjcmVl
blRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBJbnRQb2ludCgpOwotfQotCi1JbnRSZWN0IENocm9tZUNsaWVudEhhaWt1
Ojp3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLVBsYXRmb3JtUGFnZUNsaWVudCBD
aHJvbWVDbGllbnRIYWlrdTo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBQbGF0Zm9ybVdpZGdldCgpOwotfQotCi12b2lkIENo
cm9tZUNsaWVudEhhaWt1Ojpjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6
ZSYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZFRvRGly
dHlSZWdpb24oY29uc3QgSW50UmVjdCYpCi17Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6
OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKQotewotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1Ojp1cGRhdGVCYWNraW5nU3RvcmUo
KQotewotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXQsIHVuc2lnbmVkIC8qbW9kaWZpZXJGbGFncyovKQot
ewotICAgIC8vIFNvbWUgZXh0cmEgaW5mbwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0aXApCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0VG9v
bFRpcChjb25zdCBTdHJpbmcmIHRpcCwgVGV4dERpcmVjdGlvbikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpwcmludChGcmFtZSopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRXeDo6cmVhY2hlZE1h
eEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50V3g6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qLCBpbnQ2NF90KQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1p
c3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIENocm9tZUNsaWVudEhhaWt1Ojpsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIEZpbGVJY29uTG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgbG9hZGVyLT5u
b3RpZnlGaW5pc2hlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7Ci19Ci0K
LXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLS92b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJz
b3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi0vIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5n
ZWQuIFRoaXMgZnVuY3Rpb24KLS8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRs
aW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCi12b2lkIENocm9tZUNsaWVudEhhaWt1Ojpmb3JtU3Rh
dGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVy
YWwoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6
c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFBvcHVwTWVudT4gQ2hyb21lQ2xpZW50SGFp
a3U6OmNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTWVudUhhaWt1KGNsaWVudCkpOwotfQotCi1QYXNz
UmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gQ2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVNlYXJjaFBv
cHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudUhhaWt1KGNsaWVudCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291
cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaHJvbWVDbGllbnRIYWlrdV9oCi0jZGVmaW5lIENo
cm9tZUNsaWVudEhhaWt1X2gKLQotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0gICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIFBhZ2U7Ci0gICAgc3RydWN0
IEZyYW1lTG9hZFJlcXVlc3Q7Ci0KLSAgICBjbGFzcyBDaHJvbWVDbGllbnRIYWlrdSA6IHB1Ymxp
YyBDaHJvbWVDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2hyb21lQ2xpZW50SGFpa3Uo
KTsKLSAgICAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50SGFpa3UoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCogd2ViVmll
dygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3QoKTsKLQotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBmb2N1cygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKTsKLQotICAgICAgICB2
aXJ0dWFsIHZvaWQgZm9jdXNlZE5vZGVDaGFuZ2VkKE5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGZvY3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqKTsKLQotICAgICAgICB2aXJ0dWFsIFBhZ2Uq
IGNyZWF0ZVdpbmRvdyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKTsK
LSAgICAgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVNb2RhbERpYWxvZyhGcmFtZSosIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3coKTsKLQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk1v
ZGFsKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xiYXJzVmlzaWJsZShib29sKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHRvb2xiYXJzVmlzaWJsZSgpOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
c3RhdHVzYmFyVmlzaWJsZSgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxiYXJz
VmlzaWJsZShib29sKTsKLSAgICAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCk7
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldE1lbnViYXJWaXNpYmxlKGJvb2wpOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgbWVudWJhclZpc2libGUoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBpbnQsIGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKTsK
LQotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VXaW5kb3dTb29uKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRB
bGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2
YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCk7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICAgICAgdmlydHVh
bCBXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpOwotICAgICAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgYm9vbCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYsIGJv
b2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9s
bChjb25zdCBJbnRSZWN0JiwgYm9vbCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpOwotCi0gICAgICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVu
VG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBJbnRSZWN0
IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBQ
bGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJl
Y3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBhZGRUb0RpcnR5
UmVnaW9uKGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUo
aW50LCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQg
dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNN
b2RlRGlkQ2hhbmdlKCkgY29uc3QgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1v
dmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFn
cyk7Ci0KLSAgICAgICAgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYsIFRleHREaXJlY3Rpb24pOwot
Ci0gICAgICAgIHZvaWQgcHJpbnQoRnJhbWUqKTsKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7Ci0jZW5kaWYKLQotICAgICAgICB2aXJ0dWFsIGJvb2wg
c2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKTsKLSAg
ICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVw
TWVudUNsaWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2VhcmNoUG9w
dXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3Q7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFj
ZU5lZWRlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKTsKLSNp
ZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0
TWVudSgpIHsgfQotI2VuZGlmCi0KLSAgICAgICAgLy8gVGhpcyBpcyBhbiBhc3luY2hyb25vdXMg
Y2FsbC4gVGhlIENocm9tZUNsaWVudCBjYW4gZGlzcGxheSBVSSBhc2tpbmcgdGhlIHVzZXIgZm9y
IHBlcm1pc3Npb24KLSAgICAgICAgLy8gdG8gdXNlIEdlb2xvY29jYXRpb24uCi0gICAgICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBH
ZW9sb2NhdGlvbiopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7IH0KLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nl
cj4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIEZpbGVJY29uTG9hZGVyKik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1
cnNvcihjb25zdCBDdXJzb3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3Zlcyhib29sKTsKLQotICAgICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCB0
aGUgZ2l2ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCi0gICAgICAg
IC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5
IGZhc3QuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9k
ZSopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24o
V2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVkKSB7IH0K
LSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4
dE1lbnVDbGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYktpdC9o
YWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oIgotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ29u
dGV4dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVEZXN0cm95ZWQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xp
ZW50SGFpa3U6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENvbnRleHRNZW51KiBtZW51
KQotewotICAgIHJldHVybiBtZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7Ci19Ci0KLXZvaWQg
Q29udGV4dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6ZG93bmxvYWRVUkwoY29uc3QgS1VSTCYg
dXJsKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGll
bnRIYWlrdTo6bG9va1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OnNwZWFrKGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDb250ZXh0TWVudUNsaWVu
dEhhaWt1Ojppc1NwZWFraW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUNsaWVudEhhaWt1OjpzdG9wU3BlYWtpbmco
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVDbGllbnRI
YWlrdTo6c2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
SGFpa3UuaAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29udGV4dE1lbnVDbGllbnRIYWlrdV9oCi0jZGVmaW5l
IENvbnRleHRNZW51Q2xpZW50SGFpa3VfaAotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQu
aCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQ29udGV4dE1lbnU7Ci0KLSAg
ICBjbGFzcyBDb250ZXh0TWVudUNsaWVudEhhaWt1IDogcHVibGljIENvbnRleHRNZW51Q2xpZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudURlc3Ryb3ll
ZCgpOwotCi0gICAgICAgIHZpcnR1YWwgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZ2V0Q3VzdG9t
TWVudUZyb21EZWZhdWx0SXRlbXMoQ29udGV4dE1lbnUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNvbnN0IENvbnRleHRN
ZW51Kik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkVVJMKGNvbnN0IEtVUkwmIHVy
bCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTcGVha2luZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCk7Ci0g
ICAgfTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENvbnRleHRNZW51Q2xp
ZW50SGFpa3VfaAotCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9XZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA5NTkyMCkKKysrIFNvdXJj
ZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRyYWdDbGllbnRIYWlrdS5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURyYWdEZXN0aW5hdGlvbkFjdGlv
biBEcmFnQ2xpZW50SGFpa3U6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7Ci19
Ci0KLXZvaWQgRHJhZ0NsaWVudEhhaWt1Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIERyYWdDbGllbnRIYWlrdTo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLURyYWdTb3VyY2VBY3Rpb24gRHJhZ0Ns
aWVudEhhaWt1OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uQW55
OwotfQotCi12b2lkIERyYWdDbGllbnRIYWlrdTo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9u
KERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERyYWdDbGllbnRIYWlrdTo6c3RhcnREcmFnKERy
YWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBD
bGlwYm9hcmQqLCBGcmFtZSosIGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
aGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmgJKHJldmlzaW9uIDk1OTIwKQor
KysgU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50SGFpa3UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
RHJhZ0NsaWVudC5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIERyYWdD
bGllbnRIYWlrdSA6IHB1YmxpYyBEcmFnQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRp
b25BY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEcmFnRGF0YSopOwotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKLSAgICAgICAgdmlydHVhbCBEcmFnU291
cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291
cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBk
cmFnSW1hZ2VPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxz
ZSk7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1
LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29t
PgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkVkaXRvckNsaWVudEhhaWt1LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1FZGl0b3JDbGllbnRIYWlrdTo6RWRpdG9yQ2xpZW50SGFpa3Uo
KQotICAgIDogbV9lZGl0aW5nKGZhbHNlKQotICAgICwgbV9pblVuZG9SZWRvKGZhbHNlKQotewot
fQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAg
bV9wYWdlID0gcGFnZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cGFnZURlc3Ryb3ll
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRIYWlr
dTo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3VsZFNob3dE
ZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRvckNsaWVudEhhaWt1OjpzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEVkaXRvckNsaWVudEhhaWt1Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEVkaXRvckNsaWVudEhhaWt1Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5n
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEVkaXRvckNsaWVudEhhaWt1
Ojppc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0b2dnbGVHcmFt
bWFyQ2hlY2tpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWludCBFZGl0b3JD
bGllbnRIYWlrdTo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3Vs
ZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkRW5k
RWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkSW5zZXJ0Tm9k
ZShOb2RlKiwgUmFuZ2UqLCBFZGl0b3JJbnNlcnRBY3Rpb24pCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBSYW5nZSosIEVkaXRvckluc2VydEFjdGlvbikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVk
aXRvckNsaWVudEhhaWt1OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFu
Z2UsIFJhbmdlKiB0b1JhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRI
YWlrdTo6c2hvdWxkQXBwbHlTdHlsZShXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6UmFuZ2UqKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRWRpdG9y
Q2xpZW50SGFpa3U6OnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKFJhbmdlKiwgUmFuZ2UqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRWRp
dG9yQ2xpZW50SGFpa3U6OmRpZEJlZ2luRWRpdGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICBtX2VkaXRpbmcgPSB0cnVlOwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1Ojpy
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmRpZEVu
ZEVkaXRpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9lZGl0aW5nID0gZmFs
c2U7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVu
dEhhaWt1OjpkaWRTZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnJlZ2lzdGVyQ29tbWFu
ZEZvclVuZG8oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPiBjbWQpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cmVnaXN0
ZXJDb21tYW5kRm9yUmVkbyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIEVkaXRvckNsaWVudEhhaWt1OjpjYW5Db3B5Q3V0KFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBk
ZWZhdWx0VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLX0KLQotYm9v
bCBFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUGFzdGUoV2ViQ29yZTo6RnJhbWUqLCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotfQotCi1ib29sIEVk
aXRvckNsaWVudEhhaWt1OjpjYW5VbmRvKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6Y2FuUmVk
bygpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnVuZG8oKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgbV9pblVuZG9SZWRvID0gdHJ1ZTsKLSAgICBtX2luVW5kb1JlZG8gPSBmYWxzZTsK
LX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cmVkbygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBtX2luVW5kb1JlZG8gPSB0cnVlOwotICAgIG1faW5VbmRvUmVkbyA9IGZhbHNl
OwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtldmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOwotICAg
IGlmICgha2V2ZW50IHx8IGtldmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
S2V5VXApCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoc3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAg
ICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgICAgIGNh
c2UgVktfQkFDSzoKLSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVj
dGlvbihEaXJlY3Rpb25CYWNrd2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENo
YXJhY3RlckdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFZLX0RFTEVURToKLSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERp
cmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDog
Q2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgVktfTEVGVDoKLSAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtl
dmVudC0+c2hpZnRLZXkoKSA/IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kIDogRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aW9uTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVy
R3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZLX1JJR0hUOgotICAgICAgICAg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V2ZW50LT5zaGlmdEtleSgpID8gRnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQgOiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1v
dmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb25SaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtl
eSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V2ZW50LT5zaGlmdEtleSgpID8gRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQg
OiBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEaXJlY3Rpb25CYWNrd2FyZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJp
dHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZLX0RPV046Ci0g
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXZlbnQtPnNoaWZ0S2V5KCkg
PyBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCA6IEZyYW1lU2VsZWN0aW9uOjpBbHRl
cmF0aW9uTW92ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVj
dGlvbkZvcndhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXZl
bnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBWS19QUklPUjogLy8gUGFnZVVwCi0gICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVVcEJ5UGFnZUFuZE1vZGlmeUNhcmV0Iik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWS19ORVhUOiAvLyBQYWdlRG93bgotICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlRG93bkJ5UGFnZUFuZE1vZGlm
eUNhcmV0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWS19SRVRVUk46Ci0g
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIkluc2VydExpbmVCcmVhayIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVktfVEFCOgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKCFrZXZlbnQtPmN0cmxLZXko
KSAmJiAha2V2ZW50LT5hbHRLZXkoKSAmJiAha2V2ZW50LT50ZXh0KCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGtldmVudC0+dGV4dCgpLmxlbmd0aCgpID09IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVUNoYXIgY2ggPSBrZXZlbnQtPnRleHQoKVswXTsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRo
ZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2ggPCAnICcpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGtl
dmVudC0+dGV4dCgpLCBldmVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGtldmVudC0+Y3Ry
bEtleSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFs
S2V5Q29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWS19BOgotICAgICAgICAgICAgICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0I6Ci0gICAgICAgICAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0M6Ci0gICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ29weSIpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0k6Ci0gICAgICAgICAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlSXRhbGljIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVktfVjoKLSAgICAgICAg
ICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJQYXN0ZSIpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZLX1g6Ci0gICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ3V0Iik7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVktfWToKLSAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJSZWRvIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVktfWjoKLSAgICAgICAgICAgICAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJVbmRvIik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGtl
dmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKLSAgICAgICAgY2FzZSBWS19VUDoKLSAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTW92ZVVwIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKCJNb3ZlRG93biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVktfUFJJT1I6IC8vIFBhZ2VVcAotICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21t
YW5kKCJNb3ZlVXBCeVBhZ2VBbmRNb2RpZnlDYXJldCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgVktfTkVYVDogLy8gUGFnZURvd24KLSAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZCgiTW92ZURvd25CeVBhZ2VBbmRNb2RpZnlDYXJldCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVktfSE9NRToKLSAgICAgICAgICAgIGlmIChrZXZlbnQt
PmN0cmxLZXkoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1v
dmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFZLX0VORDoKLSAgICAgICAgICAgIGlmIChrZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAg
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1vdmVUb0VuZE9mRG9jdW1lbnQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKGtl
dmVudC0+Y3RybEtleSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWS19BOgotICAgICAg
ICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZLX0M6IGNhc2Ug
VktfWDoKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJDb3B5
Iik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFp
a3U6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0RmllbGREaWRC
ZWdpbkVkaXRpbmcoRWxlbWVudCopCi17Ci0gICAgbV9lZGl0aW5nID0gdHJ1ZTsKLX0KLQotdm9p
ZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KikKLXsK
LSAgICBtX2VkaXRpbmcgPSBmYWxzZTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dGV4
dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLWJvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVu
dChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1l
bnQqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFp
a3U6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6Omlnbm9yZVdvcmRJblNwZWxsRG9j
dW1lbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEVkaXRvckNsaWVudEhhaWt1OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCopCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotU3RyaW5nIEVkaXRvckNsaWVudEhhaWt1OjpnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lk
IEVkaXRvckNsaWVudEhhaWt1OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGlu
dCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEVkaXRvckNsaWVudEhhaWt1Ojp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3dTcGVsbGluZ1VJ
KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBFZGl0b3JDbGllbnRI
YWlrdTo6c3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8
U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEVk
aXRvckNsaWVudEhhaWt1Ojp3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6c2V0SW5wdXRNZXRob2RT
dGF0ZShib29sIGVuYWJsZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBF
ZGl0b3JDbGllbnRIYWlrdTo6aXNFZGl0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lZGl0
aW5nOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5oCShyZXZp
c2lvbiA5NTkyMCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFZGl0b3JDbGllbnRIYWlrdV9ICi0jZGVmaW5l
IEVkaXRvckNsaWVudEhhaWt1X0gKLQotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1
ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVmQ291bnRlZC5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBFZGl0b3JDbGllbnRIYWlrdSA6IHB1YmxpYyBFZGl0b3JDbGllbnQs
IHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBFZGl0b3JD
bGllbnRIYWlrdSgpOwotICAgICAgICB2b2lkIHNldFBhZ2UoIFBhZ2UqIHBhZ2UgKTsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwotCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U2hvd0RlbGV0ZUludGVyZmFjZShIVE1MRWxlbWVudCopOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVj
dFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0b2dn
bGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0b2dnbGVHcmFtbWFy
Q2hlY2tpbmcoKTsKLSAgICAgICAgdmlydHVhbCBpbnQgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKik7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFJhbmdlKik7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKE5vZGUqLCBSYW5nZSosIEVkaXRvckluc2VydEFj
dGlvbik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmlu
ZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKTsKLSAgICAgICAgdmlydHVhbCBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoUmFuZ2UqIGZyb21SYW5nZSwgUmFuZ2UqIHRvUmFuZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZyk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKik7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShSYW5nZSosIFJhbmdlKik7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5n
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJk
KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5k
Rm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db3B5
Q3V0KEZyYW1lKiwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuUGFzdGUoRnJhbWUqLCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5SZWRv
KCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVuZG8oKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlZG8oKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVu
dChLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dE1ldGhv
ZEtleWRvd24oS2V5Ym9hcmRFdmVudCopOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdGV4dEZp
ZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB0ZXh0RGlk
Q2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZG9UZXh0
RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJp
bmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAg
dmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQo
Y29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjaGVj
a0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFy
RGV0YWlsPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcm
LCBjb25zdCBHcmFtbWFyRGV0YWlsJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KTsKLSAgICAgICAgdmlydHVhbCBib29sIHNw
ZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlcyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RT
dGF0ZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVu
YWJsZWQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoU3Bl
bGxDaGVja2VyKiwgaW50LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgU3Ry
aW5nJikge30KLSAgICAgICAgdmlydHVhbCBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIo
KSB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICAgICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFBhZ2UqIG1fcGFnZTsKLSAgICAgICAgYm9vbCBtX2VkaXRp
bmc7Ci0gICAgICAgIGJvb2wgbV9pblVuZG9SZWRvOyAvLyBvdXIgdW5kbyBzdGFjayB3b3JrcyBk
aWZmZXJlbnRseSAtIGRvbid0IHJlLWVudGVyIQotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVkaXRvckNsaWVudEhhaWt1X2gKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEhhaWt1LmNwcAkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDg2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IERvbiBHaWJzb24gPGRn
aWJzb243N0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEhhaWt1Lmgi
Ci0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0KLSNpbmNsdWRlIDxNZXNzYWdl
Lmg+Ci0jaW5jbHVkZSA8U3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxhcHAvTWVzc2VuZ2VyLmg+Ci0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFtZUxvYWRlckNsaWVudEhhaWt1OjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1KCkKLSAgICA6IG1fZnJhbWUoMCkKLXsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9mcmFtZSA9
IGZyYW1lOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldFdlYlZpZXcoV2Vi
Vmlldyogd2VidmlldykKLXsKLSAgICBtX3dlYlZpZXcgPSB3ZWJ2aWV3OwotICAgIG1fbWVzc2Vu
Z2VyID0gbmV3IEJNZXNzZW5nZXIobV93ZWJWaWV3KTsKLSAgICBBU1NFUlQobV9tZXNzZW5nZXIt
PklzVmFsaWQoKSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNoRnJh
bWVMb2FkZXIoKQotewotICAgIG1fZnJhbWUgPSAwOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6Omhhc1dlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlZpZXc7Ci19
Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6aGFzQmFja0ZvcndhcmRMaXN0KCkgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlc2V0QmFja0ZvcndhcmRMaXN0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByb3Zp
c2lvbmFsSXRlbUlzVGFyZ2V0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjptYWtlUmVw
cmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VMYXlvdXQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9yY2VM
YXlvdXRGb3JOb25IVE1MKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRl
SGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRhdGVIaXN0b3J5Rm9yUmVs
b2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlSGlzdG9y
eUZvckludGVybmFsTG9hZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRhdGVIaXN0b3J5QWZ0ZXJDbGllbnRSZWRpcmVjdCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpzZXRDb3BpZXNPblNjcm9sbCgpCi17Ci0gICAgLy8gYXBwYXJlbnRseSBtYWMgc3BlY2lm
aWMKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Mb2FkRXJyb3JSZXNldFRva2VuKiBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1Ojp0b2tlbkZvckxvYWRFcnJvclJlc2V0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tlbiopCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpkb05v
dFJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tlbiopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3aWxsQ2xvc2VE
b2N1bWVudCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVu
dDMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKQotewotICAgIGlmIChtX3dl
YlZpZXcpIHsKLSAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX09OTE9BRF9IQU5ETEUpOwot
ICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fbWVzc2Vu
Z2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7Ci0gICAgfQotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLCBkb3VibGUgaW50ZXJ2YWws
IGRvdWJsZSBmaXJlRGF0ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJl
cGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFs
TG9hZCgpCi17Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2FnZSBtZXNzYWdl
KExPQURfTkVHT0NJQVRJTkcpOwotICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV9m
cmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRS
ZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aFRpdGxlJiB0aXRsZSkKLXsKLSAgICBpZiAobV93
ZWJWaWV3KSB7Ci0gICAgICAgIC8vIEZJWE1FOiB1c2UgZGlyZWN0aW9uIG9mIHRpdGxlLgotICAg
ICAgICBtX3dlYlZpZXctPlNldFBhZ2VUaXRsZSh0aXRsZS5tX3N0cmluZygpKTsKLSAgICAgICAg
Qk1lc3NhZ2UgbWVzc2FnZShUSVRMRV9DSEFOR0VEKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJp
bmcoInRpdGxlIiwgdGl0bGUuc3RyaW5nKCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1l
c3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQotewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAg
ICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX1RSQU5TRkVSUklORyk7Ci0gICAgICAgIG1lc3NhZ2Uu
QWRkU3RyaW5nKCJ1cmwiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpLnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdl
KCZtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQotewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAg
ICAgICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX0RPQ19DT01QTEVURUQpOwotICAgICAgICBtZXNz
YWdlLkFkZFN0cmluZygidXJsIiwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkp
OwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0KLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFNob3coKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuY2VsUG9saWN5Q2hlY2so
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9u
LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCi17Ci0gICAgLy8gRklYTUU6IFNlbmQgYW4gZXZlbnQg
dG8gYWxsb3cgZm9yIGFsZXJ0cyBhbmQgY2FuY2VsbGF0aW9uLgotICAgIGlmICghbV9mcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigp
LT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJldmVy
dFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NTdGFy
dGVkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNh
dGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgaWYg
KG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfRExfQ09NUExFVEVE
KTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIG1fZnJhbWUtPmRvY3VtZW50KCkt
PnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNz
YWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvZ3Jlc3NT
dGFydGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6cHJvZ3Jlc3NDb21wbGV0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyB0aGlzIGlz
IG9ubHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFsIEFQSSBmb3IgdGhl
IERPTQotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxDaGFuZ2VUaXRsZShE
b2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogZG9jTG9h
ZGVyKQotewotICAgIHNldFRpdGxlKGRvY0xvYWRlci0+dGl0bGUoKSwgZG9jTG9hZGVyLT51cmwo
KSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluaXNoZWRMb2FkaW5nKERv
Y3VtZW50TG9hZGVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcmIE1J
TUVUeXBlKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotICAgIAotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5TaG93TUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlcHJl
c2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJp
bmcgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZnJhbWVMb2FkQ29tcGxldGVkKCkKLXsKLSAgICBpZiAobV93ZWJWaWV3LT5Mb2NrTG9vcGVyKCkp
IHsKLSAgICAgICAgbV93ZWJWaWV3LT5EcmF3KG1fd2ViVmlldy0+Qm91bmRzKCkpOwotICAgICAg
ICBtX3dlYlZpZXctPlVubG9ja0xvb3BlcigpOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlc3Rv
cmVWaWV3U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJl
bnQoY29uc3QgS1VSTCYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6YWRkSGlzdG9yeUl0
ZW1Gb3JGcmFnbWVudFNjcm9sbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaWRGaW5pc2hMb2FkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByZXBhcmVGb3JE
YXRhU291cmNlUmVwbGFjZW1lbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
Y29uc3QgS1VSTCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnVzZXJBZ2VudChjb25zdCBLVVJMJikKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCJNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgVTsgSW5maU5ldCAwLjE7IEhhaWt1KSBB
cHBsZVdlYktpdC80MjArIChLSFRNTCwgbGlrZSBHZWNrbykiKTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lTG9hZGVy
RGVzdHJveWVkKCkKLXsKLSAgICBtX2ZyYW1lID0gMDsKLSAgICBtX21lc3NlbmdlciA9IDA7Ci0g
ICAgZGVsZXRlIHRoaXM7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuSGFu
ZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6cGFydENsZWFyZWRJbkJlZ2luKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3Rv
cnkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2hvdWxkR29U
b0hpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0
ZW0qKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShXZWJDb3JlOjpI
aXN0b3J5SXRlbSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpjYW5DYWNoZVBhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRG9jdW1lbnRFcnJv
cihXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGxvYWRlci0+Y29tbWl0RGF0YShkYXRh
LCBsZW5ndGgpOwotfQotCi1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KFN0cmluZygpLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksIFN0cmluZygpKTsKLX0KLQotV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5n
KCksIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3Ry
aW5nKCkpOwotfQotCi1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKCksIFdlYktpdEVycm9y
Q2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotfQotCi1X
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmludGVycnVwdGVk
Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
U3RyaW5nKCksIFdlYktpdEVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSwg
cmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotfQotCi1XZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKCksIFdlYktpdEVycm9y
Q2Fubm90U2hvd01JTUVUeXBlLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwot
fQotCi1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmZpbGVE
b2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0
cmluZygpLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwsIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBTdHJpbmcoKSk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2hvdWxkRmFs
bEJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVdURjo6UGFzc1JlZlB0cjxEb2N1
bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCi17Ci0gICAgcmV0dXJuIERvY3VtZW50
TG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwotfQotCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojphc3NpZ25JZGVu
dGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50
TG9hZGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbFNl
bmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShE
b2N1bWVudExvYWRlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVJlc3Bv
bnNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9y
ZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fZmlyc3REYXRhID0gdHJ1ZTsKLX0KLQotdm9pZCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZCwgaW50IGxlbmd0aCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxv
bmcpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZywgY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgaWYgKG1fd2ViVmlldykgewot
ICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfRkFJTEVEKTsKLSAgICAgICAgbWVzc2FnZS5B
ZGRTdHJpbmcoInVybCIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2Uo
Jm1lc3NhZ2UpOwotICAgIH0KLX0KLQotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNw
YXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsUHJv
dmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9h
ZChjb25zdCBSZXNvdXJjZUVycm9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1G
cmFtZSogRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdl
YkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hl
Y2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xp
Y3lGdW5jdGlvbiBmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIHRhcmdldE5hbWUpCi17Ci0gICAg
aWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0g
ICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoTkVXX1dJTkRPV19SRVFVRVNURUQpOwotICAgICAgICBt
ZXNzYWdlLkFkZFN0cmluZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAg
IGlmIChtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICAo
bV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25v
cmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKG1fZnJh
bWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikK
LXsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIWZ1bmN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoTkFWSUdBVElPTl9S
RVFVRVNURUQpOwotICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgcmVxdWVzdC51cmwo
KS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7
Ci0KLSAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlv
bikoUG9saWN5VXNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiAvKiBz
dWdnZXN0ZWROYW1lICovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXJnaW5X
aWR0aCwgaW50IG1hcmdpbkhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFwcGx5
IHRoZSByaWdodCBwcm9wZXJ0eSB0byB0aGUgZnJhbWVWaWV3LiAoc2Nyb2xsYmFyLG1hcmdpbnMp
Ci0KLSAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fZnJhbWUt
PnBhZ2UoKSwgb3duZXJFbGVtZW50LCB0aGlzKTsKLSAgICBzZXRGcmFtZShjaGlsZEZyYW1lLmdl
dCgpKTsKLQotICAgIFJlZlB0cjxGcmFtZVZpZXc+IGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3Jl
YXRlKGNoaWxkRnJhbWUuZ2V0KCkpOwotCi0gICAgZnJhbWVWaWV3LT5zZXRBbGxvd3NTY3JvbGxp
bmcoYWxsb3dzU2Nyb2xsaW5nKTsKLSAgICBmcmFtZVZpZXctPmRlcmVmKCk7Ci0gICAgY2hpbGRG
cmFtZS0+c2V0VmlldyhmcmFtZVZpZXcuZ2V0KCkpOwotICAgIGNoaWxkRnJhbWUtPmluaXQoKTsK
LQotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKLSAgICBtX2ZyYW1lLT50
cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOwotCi0gICAgbV9mcmFtZS0+bG9hZGVyKCkt
PmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjaGlsZEZyYW1lLmdldCgpKTsK
LQotICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQg
ZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAgaWYgKCFjaGlsZEZyYW1lLT50cmVlKCktPnBhcmVudCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjaGlsZEZyYW1lLnJlbGVhc2UoKTsK
LQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZGlkVHJhbnNmZXJDaGlsZEZyYW1lVG9OZXdEb2N1bWVudChQYWdl
KikKLXsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2ZlckxvYWRpbmdS
ZXNvdXJjZUZyb21QYWdlKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UGFnZSopCi17Ci19Ci0KLU9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6
ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvYWRNYW51YWxs
eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2lu
V2lkZ2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotfQotCi1SZXNv
dXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgV2ViS2l0RXJyb3JDYW5u
b3RMb2FkUGx1Z0luLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotfQotCi1Q
YXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxl
dFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1lbnQqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGJh
c2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpvdmVycmlkZU1lZGlhVHlwZSgp
IGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKLXsKLSAgICBpZiAod29ybGQgIT0g
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3dl
YlZpZXcpIHsKLSAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShKQVZBU0NSSVBUX1dJTkRPV19PQkpF
Q1RfQ0xFQVJFRCk7Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7
Ci0gICAgfQotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZSgpCi17Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlkUGVy
Zm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oYm9vbCBsaXN0ZW4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRG
cmFtZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJh
bWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCi17Ci0gICAgQVNTRVJU
KG1fZnJhbWUpOwotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotCi0gICAgUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKTsKLSAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICBib29sIGlzTWFpbkZyYW1l
ID0gbV9mcmFtZSA9PSBwYWdlLT5tYWluRnJhbWUoKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXco
MCk7Ci0KLSAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXc7Ci0gICAgaWYgKGlzTWFpbkZy
YW1lKSB7Ci0gICAgICAgIGlmIChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgewotICAgICAgICAg
ICAgLy8gV2UgbG9jayB0aGUgbG9vcGVyIGluIG9yZGVyIHRvIGdldCB0aGUgYm91bmRzIG9mIHRo
ZSBXZWJWaWV3LgotICAgICAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUobV9m
cmFtZSwgSW50UmVjdChtX3dlYlZpZXctPkJvdW5kcygpKS5zaXplKCkpOwotICAgICAgICAgICAg
bV93ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lKTsKLQotICAgIEFTU0VSVChm
cmFtZVZpZXcpOwotICAgIG1fZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKLQotICAgIGZyYW1l
Vmlldy0+c2V0UGxhdGZvcm1XaWRnZXQobV93ZWJWaWV3KTsKLQotICAgIGlmIChIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgIG1f
ZnJhbWUtPnZpZXcoKS0+c2V0U2Nyb2xsYmFyTW9kZXMob3duZXItPnNjcm9sbGluZ01vZGUoKSwg
b3duZXItPnNjcm9sbGluZ01vZGUoKSk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKLXsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaAkocmV2aXNpb24g
OTU5MjApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+IEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dV9oCi0jZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3VfaAotCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLQotY2xhc3MgQk1lc3NlbmdlcjsKLWNsYXNzIFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLSAgICBjbGFzcyBEb2N1
bWVudExvYWRlcjsKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNzIEZvcm1TdGF0ZTsKLSAg
ICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwotICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOwotCi0g
ICAgc3RydWN0IExvYWRFcnJvclJlc2V0VG9rZW47Ci0KLSAgICBjbGFzcyBGcmFtZUxvYWRlckNs
aWVudEhhaWt1IDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoKTsKLSAgICAgICAgfkZyYW1lTG9hZGVyQ2xpZW50
SGFpa3UoKSB7IH0KLSAgICAgICAgdm9pZCBzZXRGcmFtZShGcmFtZSopOwotICAgICAgICB2b2lk
IHNldFdlYlZpZXcoV2ViVmlldyopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJhbWVM
b2FkZXIoKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OwotCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNCYWNrRm9yd2FyZExpc3QoKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHJlc2V0QmFja0ZvcndhcmRMaXN0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBi
b29sIHByb3Zpc2lvbmFsSXRlbUlzVGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIG1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZm9yY2VMYXlvdXQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9y
Tm9uSFRNTCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0
KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5h
dmlnYXRpb24oKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQo
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JJbnRlcm5hbExvYWQoKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3QoKTsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKTsKLQotICAgICAgICB2
aXJ0dWFsIExvYWRFcnJvclJlc2V0VG9rZW4qIHRva2VuRm9yTG9hZEVycm9yUmVzZXQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tl
biopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZG9Ob3RSZXNldEFmdGVyTG9hZEVycm9yKExvYWRF
cnJvclJlc2V0VG9rZW4qKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENsb3NlRG9jdW1l
bnQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MygpOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bExvYWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3QoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRS
ZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2Uo
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdl
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxl
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hTaG93KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQb2xpY3lDaGVj
aygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQo
SFRNTEZvcm1FbGVtZW50KikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxT
dWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVu
dExvYWRlciopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRl
KERvY3VtZW50TG9hZGVyKik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0Vz
dGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFBy
b2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJv
Z3Jlc3NTdGFydGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzc0NvbXBsZXRlZCgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopOwotCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlw
ZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGVBc0hUTUwoY29u
c3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCByZXByZXNl
bnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVMb2FkQ29tcGxldGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9J
dGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVmlld1N0YXRl
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIHNob3VsZFRyZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0IEtV
UkwmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21l
bnRTY3JvbGwoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25z
dCBLVVJMJik7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwm
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUo
V2ViQ29yZTo6Q2FjaGVkRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25U
b0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpOwotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhp
c3RvcnlSZWRpcmVjdExpbmtzKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1RvSGlz
dG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5
SXRlbSopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3Q7Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0dGVkTG9h
ZChEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIFJl
c291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAg
ICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0Jik7Ci0gICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBp
bnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwot
ICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgZmls
ZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAgdmly
dHVhbCBib29sIHNob3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAg
dmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9h
ZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdWJzdGl0dXRl
RGF0YSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEb2N1bWVudExvYWRlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3QmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZywgaW50KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9h
ZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50KTsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoY29u
c3QgTmF2aWdhdGlvbkFjdGlvbiYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JSZXNwb25zZShGcmFtZVBvbGljeUZ1bmN0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1
bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYp
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSA9IFN0cmluZygpKTsKLQotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGhlcmUsIGJ1dCBpdCdzIG5l
ZWRlZCBmb3IgdGhlIHRlc3RzIGN1cnJlbnRseS4KLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnRD
bGVhcmVkSW5CZWdpbigpOwotCi0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGcmFtZT4gY3Jl
YXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBp
bnQgbWFyZ2luSGVpZ2h0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFRyYW5zZmVyQ2hpbGRG
cmFtZVRvTmV3RG9jdW1lbnQoV2ViQ29yZTo6UGFnZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
dHJhbnNmZXJMb2FkaW5nUmVzb3VyY2VGcm9tUGFnZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlBhZ2UqKTsKLSAgICAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdpZGdldD4gY3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1
Z0luRWxlbWVudCosIGNvbnN0IEtVUkwmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGNvbnN0IFN0cmluZyYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGxvYWRNYW51YWxseSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCk7Ci0gICAgICAgIHZpcnR1
YWwgUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLQotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVK
YXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVudCosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKLQotICAgICAgICB2aXJ0dWFsIE9iamVj
dENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIHNob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpOwotICAgICAgICB2
aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29y
bGQqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29s
IGxpc3RlbiA9IHRydWUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7
Ci0gICAgICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICAgICAgQk1lc3NlbmdlciogbV9tZXNz
ZW5nZXI7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICAgICAgYm9v
bCBtX2ZpcnN0RGF0YTsKLSAgICB9OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRnJhbWVMb2FkZXJDbGllbnRIYWlrdV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAko
cmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SGFpa3Uu
aCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBJbnNwZWN0b3JDbGllbnRI
YWlrdTo6aW5zcGVjdG9yRGVzdHJveWVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlnaGxpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpoaWRlSGlnaGxpZ2h0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1
Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6c3Rv
cmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEhhaWt1LmgJKHJldmlzaW9uIDk1OTIwKQorKysgU291cmNlL1dlYktpdC9oYWlr
dS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5zcGVjdG9yQ2xpZW50SGFpa3VfaAot
I2RlZmluZSBJbnNwZWN0b3JDbGllbnRIYWlrdV9oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgTm9kZTsKLSAgICBjbGFzcyBQYWdlOwotCi0gICAgY2xhc3MgSW5zcGVjdG9yQ2xp
ZW50SGFpa3UgOiBwdWJsaWMgSW5zcGVjdG9yQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBoaWRlSGlnaGxpZ2h0KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGlu
Zyhjb25zdCBXVEY6OlN0cmluZyYga2V5LCBXVEY6OlN0cmluZyogdmFsdWUpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdURjo6U3RyaW5nJiBrZXksIGNvbnN0IFdU
Rjo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIH07Ci19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBJbnNwZWN0b3JDbGllbnRIYWlrdV9oCi0KSW5kZXg6IFNvdXJjZS9j
bWFrZS9XZWJLaXRQYWNrYWdpbmcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2NtYWtlL1dl
YktpdFBhY2thZ2luZy5jbWFrZQkocmV2aXNpb24gOTU5MjApCisrKyBTb3VyY2UvY21ha2UvV2Vi
S2l0UGFja2FnaW5nLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDYgQEAgSUYo
Tk9UIERFRklORUQgQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFUwogICAgICAgIi9jdXJsLyIgIi9D
dXJsLyIgImN1cmxcXFxcLiIgIkN1cmxcXFxcLiIKICAgICAgICIvZ3N0cmVhbWVyLyIgIi9Hc3Ry
ZWFtZXIvIiAiZ3N0cmVhbWVyXFxcXC4iICJHc3RyZWFtZXJcXFxcLiIKICAgICAgICIvZ3RrLyIg
Ii9HdGsvIiAiZ3RrXFxcXC4iICJHdGtcXFxcLiIKLSAgICAgICIvaGFpa3UvIiAiL0hhaWt1LyIg
ImhhaWt1XFxcXC4iICJIYWlrdVxcXFwuIgogICAgICAgIi9pcGhvbmUvIiAiL0lwaG9uZS8iICJp
cGhvbmVcXFxcLiIgIklwaG9uZVxcXFwuIgogICAgICAgIi9tYWMvIiAiL01hYy8iICJtYWNcXFxc
LiIgIk1hY1xcXFwuIgogICAgICAgIi9vcGVudHlwZS8iICIvT3BlbnR5cGUvIiAib3BlbnR5cGVc
XFxcLiIgIk9wZW50eXBlXFxcXC4iCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTkyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTI1ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIFBMQVRGT1JNKEhBSUtVKSBhbmQg
YXNzb2NpYXRlZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODc3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2J1aWxkLnB5OgorICAgICAg
ICAqIHdhZi9idWlsZC9zZXR0aW5ncy5weToKKwogMjAxMS0wOS0yNCAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEFsd2F5cyBlbmFibGUgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9idWlsZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jb25maWcvYnVpbGQucHkJKHJldmlzaW9uIDk1OTIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY29uZmlnL2J1aWxkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2
IEBAIGRlZiBfc2hvdWxkX2ZpbGVfdHJpZ2dlcl9idWlsZCh0YXJnZXRfcGwKICAgICAgICAgKCJX
ZWJzaXRlcyIsIFtdKSwKICAgICAgICAgKCJicmV3IiwgW10pLAogICAgICAgICAoImVmbCIsIFtd
KSwKLSAgICAgICAgKCJoYWlrdSIsIFtdKSwKICAgICAgICAgKCJpcGhvbmUiLCBbXSksCiAgICAg
ICAgICgib3BlbmdsIiwgW10pLAogICAgICAgICAoIm9wZW50eXBlIiwgW10pLApJbmRleDogVG9v
bHMvd2FmL2J1aWxkL3NldHRpbmdzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3dhZi9idWlsZC9z
ZXR0aW5ncy5weQkocmV2aXNpb24gOTU5MjApCisrKyBUb29scy93YWYvYnVpbGQvc2V0dGluZ3Mu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDYgQEAgcG9ydHMgPSBbCiAgICAgJ0JyZXcn
LAogICAgICdDaHJvbWl1bScsCiAgICAgJ0d0aycsCi0gICAgJ0hhaWt1JywKICAgICAnTWFjJywK
ICAgICAnTm9uZScsCiAgICAgJ1F0JywK
</data>
<flag name="review"
          id="105614"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>