<?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>152421</bug_id>
          
          <creation_ts>2015-12-18 00:37:20 -0800</creation_ts>
          <short_desc>Move networking code from Shared to NetworkProcess</short_desc>
          <delta_ts>2015-12-18 10:08:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1150232</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-18 00:37:20 -0800</bug_when>
    <thetext>Move networking code from Shared to NetworkProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150233</commentid>
    <comment_count>1</comment_count>
      <attachid>267616</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-18 00:39:13 -0800</bug_when>
    <thetext>Created attachment 267616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150234</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-18 00:49:25 -0800</bug_when>
    <thetext>This applies, it just doesn&apos;t like the fact that the Source/WebKit2/Shared/Network/CustomProtocols directory doesn&apos;t exist.  It builds fine on Mac and I&apos;ll fix any other builds that break.  

Please review anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150309</commentid>
    <comment_count>3</comment_count>
      <attachid>267616</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-18 10:06:13 -0800</bug_when>
    <thetext>Comment on attachment 267616
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150312</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-18 10:08:49 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/194272</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267616</attachid>
            <date>2015-12-18 00:39:13 -0800</date>
            <delta_ts>2015-12-18 10:06:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152421-20151218003832.patch</filename>
            <type>text/plain</type>
            <size>450094</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE1LTEyLTE4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBuZXR3
b3JraW5nIGNvZGUgZnJvbSBTaGFyZWQgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjQyMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHJlY2VudGx5IHJlbW92aW5n
IHRoZSBub24tTmV0d29ya1Byb2Nlc3MgY29uZmlndXJhdGlvbnMsIHRoaXMgY29kZSBpcyBubyBs
b25nZXIgc2hhcmVkIHdpdGggdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0N1c3RvbVByb3RvY29sczogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25s
b2FkczogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5oLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZElELmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvRG93bmxvYWRJRC5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmguCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmguCisgICAgICAgICogUGxhdGZvcm1F
ZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1NYWMuY21ha2U6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2FkczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBT
aGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Rv
d25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkSUQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2NvY29hOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvRG93bmxvYWRzL2VmbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvRG93bmxv
YWRzL2VmbC9Eb3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9Eb3dubG9hZHMvZ3RrOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9Eb3dubG9hZHMv
Z3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVk
L0Rvd25sb2Fkcy9pb3M6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9pb3Mv
RG93bmxvYWRJT1MubW06IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9tYWM6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW06
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9zb3VwOiBSZW1vdmVkLgorICAg
ICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXBFcnJvcnMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvTmV0d29yazogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHM6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbjogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Q
cm90b2NvbE1hbmFnZXJJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmg6IFJlbW92
ZWQuCisgICAgICAgICogU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6IFJl
bW92ZWQuCisgICAgICAgICogU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL05ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE1LTEyLTE4ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHR5cGVzIGZvciBEb3du
bG9hZElEIGFuZCBUYXNrSWRlbnRpZmllcgpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC01LDYgKzUsOCBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2VzcyIKKyAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3Mv
Q3VzdG9tUHJvdG9jb2xzIgorICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2NhY2hlIgogICAgICIke1dFQktJVDJfRElS
fS9QbGF0Zm9ybSIKQEAgLTE3LDEwICsxOSw3IEBAIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0NvcmVJUENTdXBwb3J0IgogICAgICIk
e1dFQktJVDJfRElSfS9TaGFyZWQvRGF0YWJhc2VzIgogICAgICIke1dFQktJVDJfRElSfS9TaGFy
ZWQvRGF0YWJhc2VzL0luZGV4ZWREQiIKLSAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0Rvd25s
b2FkcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0ZpbGVBUEkiCi0gICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9OZXR3b3JrIgotICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9QbHVnaW5zIgog
ICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZSIKICAgICAiJHtXRUJL
SVQyX0RJUn0vU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExIgpAQCAtMTk5LDYgKzE5OCwxMyBA
QCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxp
dGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCiAgICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCiAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKKworICAgIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKKyAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAorCiAgICAgUGxhdGZvcm0vTG9nZ2lu
Zy5jcHAKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwCiAKQEAgLTMxNywxMyArMzIzLDYgQEAgc2V0
KFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvSURCVXRp
bGl0aWVzLmNwcAogCi0gICAgU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKLSAgICBTaGFy
ZWQvRG93bmxvYWRzL0Rvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwCi0gICAgU2hhcmVk
L0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCi0KLSAgICBTaGFyZWQvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKLSAgICBTaGFyZWQvTmV0d29yay9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKLQogICAgIFNoYXJlZC9QbHVnaW5zL05QSWRl
bnRpZmllckRhdGEuY3BwCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIuY3BwCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94eS5jcHAKQEAgLTY0Niw2ICs2
NDUsOCBAQCBzZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAK
KyAgICBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Lm1lc3NhZ2VzLmluCisKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLm1lc3Nh
Z2VzLmluCkBAIC02NTksOCArNjYwLDYgQEAgc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMK
IAogICAgIFNoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KIAotICAgIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2Nv
bE1hbmFnZXIubWVzc2FnZXMuaW4KLQogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyLm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5t
ZXNzYWdlcy5pbgpJbmRleDogU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQiBcCiAgICAgJChXZWJLaXQyKS9EYXRhYmFzZVByb2Nlc3MvbWFjIFwK
ICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL05ldHdvcmtQ
cm9jZXNzL0N1c3RvbVByb3RvY29scyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2Vzcy9t
YWMgXAogICAgICQoV2ViS2l0MikvUGx1Z2luUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9QbHVn
aW5Qcm9jZXNzL21hYyBcCkBAIC0zMyw3ICszNCw2IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0
MikvU2hhcmVkIFwKICAgICAkKFdlYktpdDIpL1NoYXJlZC9BUEkvQ29jb2EgXAogICAgICQoV2Vi
S2l0MikvU2hhcmVkL0F1dGhlbnRpY2F0aW9uIFwKLSAgICAkKFdlYktpdDIpL1NoYXJlZC9OZXR3
b3JrL0N1c3RvbVByb3RvY29scyBcCiAgICAgJChXZWJLaXQyKS9TaGFyZWQvbWFjIFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvQXBwbGljYXRpb25DYWNoZSBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0Nvb2tpZXMgXApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UJKHJldmlz
aW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsMTMgQEAKIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IERhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKIAorICAgIE5l
dHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlcklt
cGwuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyU291cC5jcHAKKworICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9lZmwv
RG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcAorCisgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAorCiAgICAgTmV0d29ya1Byb2Nlc3MvZWZsL05ldHdvcmtQ
cm9jZXNzTWFpbkVmbC5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcApAQCAtMjcsMTMgKzM0LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFj
ZS5jcHAKIAotICAgIFNoYXJlZC9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5j
cHAKLQotICAgIFNoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCi0KLSAgICBT
aGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJ
bXBsLmNwcAotICAgIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVBy
b3RvY29sTWFuYWdlclNvdXAuY3BwCi0KICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEv
TmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwCiAKICAgICBTaGFyZWQvUGx1Z2lucy91bml4L1Bs
dWdpblNlYXJjaFBhdGguY3BwCkBAIC0yNDYsMTMgKzI0NiwxMyBAQCBsaXN0KEFQUEVORCBXZWJL
aXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0
d29yay9zb3VwIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy91bml4IgorICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cCIKKyAgICAiJHtXRUJLSVQy
X0RJUn0vTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L05ldHdvcmtQcm9jZXNzL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3Mv
dW5peCIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vZWZsIgogICAgICIke1dFQktJVDJf
RElSfS9TaGFyZWQvQVBJL2MvZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0Rvd25sb2Fkcy9zb3Vw
IgotICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291
cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL1BsdWdpbnMvdW5peCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vU2hhcmVkL2dsaWIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9lZmwiCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNl
L1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDEz
IEBAIHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVBREVSIE9OKQogbGlzdChBUFBFTkQgV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgRGF0YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3Rr
LmNwcAogCisgICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VySW1wbC5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
c291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorCisgICAgTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCisKKyAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAogCkBAIC01MCwxMyArNTcsNiBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdl
Q2Fpcm8uY3BwCiAKLSAgICBTaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNH
dGsuY3BwCi0KLSAgICBTaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAotCi0g
ICAgU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VySW1wbC5jcHAKLSAgICBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0
b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAotCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
eDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcAogCiAgICAgU2hhcmVkL1BsdWdpbnMvdW5p
eC9QbHVnaW5TZWFyY2hQYXRoLmNwcApAQCAtNDk2LDEyICs0OTYsMTIgQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50
IgogICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MvdW5peCIKKyAgICAiJHtXRUJL
SVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAiCisgICAgIiR7V0VC
S0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy9ndGsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9j
ZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL0lQQy9nbGliIgogICAgICIk
e1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZ3RrIgotICAgICIke1dFQktJVDJfRElSfS9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cCIKLSAgICAiJHtXRUJLSVQyX0RJUn0vU2hh
cmVkL0Rvd25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvUGx1Z2lucy91
bml4IgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvZ2xpYiIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vU2hhcmVkL2d0ayIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMTIsNiArMTIsMTAgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIERhdGFiYXNlUHJvY2Vzcy9tYWMvRGF0YWJhc2VQ
cm9jZXNzTWFjLm1tCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2Ev
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KKworICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KKwogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFDb2NvYS5tbQogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUlPQ2hhbm5lbENvY29hLm1tCiAKQEAgLTg5LDEwICs5Myw2IEBAIGxpc3QoQVBQRU5EIFdlYktp
dDJfU09VUkNFUwogICAgIFNoYXJlZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbQogICAgIFNoYXJl
ZC9Db2NvYS9XS09iamVjdC5tbQogCi0gICAgU2hhcmVkL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRN
YWMubW0KLQotICAgIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQotCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFj
L05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
bWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5NDI2MykJKGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOjE5NDI2MykK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6Ok5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzKCkKK3sKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKKyAgICBl
bmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CisgICAgZW5jb2RlciA8PCBkaXNrQ2FjaGVT
aXplT3ZlcnJpZGU7CisgICAgZW5jb2RlciA8PCBjYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZh
bHVhdGlvbjsKKyAgICBlbmNvZGVyIDw8IGRpc2tDYWNoZURpcmVjdG9yeTsKKyAgICBlbmNvZGVy
IDw8IGRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBl
bmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisgICAgZW5jb2Rl
ciA8PCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbjsKKyNl
bmRpZgorI2VuZGlmCisjaWYgRU5BQkxFKFNFQ0NPTVBfRklMVEVSUykKKyAgICBlbmNvZGVyIDw8
IGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCisgICAgZW5jb2RlciA8PCB1
aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElP
UykKKyAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
CisgICAgZW5jb2RlciA8PCBjb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
CisgICAgZW5jb2RlciA8PCBwYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Cisj
ZW5kaWYKKyAgICBlbmNvZGVyIDw8IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsKKyAg
ICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzOworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIGVuY29kZXIgPDwgcGFyZW50UHJvY2Vzc05hbWU7CisgICAg
ZW5jb2RlciA8PCB1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgbnNV
UkxDYWNoZU1lbW9yeUNhcGFjaXR5OworICAgIGVuY29kZXIgPDwgbnNVUkxDYWNoZURpc2tDYXBh
Y2l0eTsKKyAgICBlbmNvZGVyIDw8IGh0dHBQcm94eTsKKyAgICBlbmNvZGVyIDw8IGh0dHBzUHJv
eHk7CisjaWYgVEFSR0VUX09TX0lQSE9ORSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMCkKKyAgICBJUEM6OmVuY29kZShlbmNvZGVy
LCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CisjZW5kaWYKKyNlbmRpZgorI2lmIFVTRShTT1VQ
KQorICAgIGVuY29kZXIgPDwgY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoOworICAgIGVuY29k
ZXIgPDwgY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOworICAgIGVuY29kZXIuZW5jb2RlRW51
bShjb29raWVBY2NlcHRQb2xpY3kpOworICAgIGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwor
ICAgIGVuY29kZXIgPDwgbGFuZ3VhZ2VzOworI2VuZGlmCit9CisKK2Jvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKK3sKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wcml2YXRlQnJvd3NpbmdFbmFibGVkKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5jYWNoZU1v
ZGVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmRpc2tDYWNoZVNpemVPdmVycmlkZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVh
dGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5kaXNrQ2FjaGVEaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91
bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmcpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZVNw
ZWN1bGF0aXZlUmV2YWxpZGF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisj
ZW5kaWYKKyNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMTAwCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
KyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2ll
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkRm9y
Q3VzdG9tUHJvdG9jb2xzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBhcmVudFByb2Nlc3NOYW1lKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVp
UHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQubnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5zVVJMQ2Fj
aGVEaXNrQ2FwYWNpdHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuaHR0cFByb3h5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmh0dHBzUHJveHkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjaWYgVEFSR0VUX09TX0lQSE9ORSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMCkKKyAgICBpZiAoIUlQQzo6ZGVjb2RlKGRl
Y29kZXIsIHJlc3VsdC5uZXR3b3JrQVRTQ29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVF
bnVtKHJlc3VsdC5jb29raWVBY2NlcHRQb2xpY3kpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaWdub3JlVExTRXJyb3JzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmxhbmd1YWdlcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCShyZXZpc2lvbiAxOTQyNjMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6MTk0MjYzKQorKysgU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnNfaAorI2RlZmluZSBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVyc19oCisKKyNpbmNsdWRlICJDYWNoZU1vZGVsLmgiCisjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgIkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSVBDIHsKKyAgICBjbGFzcyBB
cmd1bWVudERlY29kZXI7CisgICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsK
KyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycygpOworCisgICAgdm9pZCBlbmNv
ZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
SVBDOjpBcmd1bWVudERlY29kZXImLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYp
OworCisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworICAgIENhY2hlTW9kZWwgY2Fj
aGVNb2RlbDsKKyAgICBpbnQ2NF90IGRpc2tDYWNoZVNpemVPdmVycmlkZSB7IC0xIH07CisgICAg
Ym9vbCBjYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbjsKKworICAgIFN0cmluZyBk
aXNrQ2FjaGVEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGRpc2tDYWNo
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyAg
ICBib29sIHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZTsKKyAgICBib29sIHNob3VsZEVuYWJsZU5l
dHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZzsKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVD
VUxBVElWRV9SRVZBTElEQVRJT04pCisgICAgYm9vbCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVT
cGVjdWxhdGl2ZVJldmFsaWRhdGlvbjsKKyNlbmRpZgorI2VuZGlmCisjaWYgRU5BQkxFKFNFQ0NP
TVBfRklMVEVSUykKKyAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeTsKKyNlbmRpZgor
I2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDExMDAKKyAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZp
ZXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOworI2VuZGlmCisgICAgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Np
b247CisKKyAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVBy
b3RvY29sczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFN0cmluZyBwYXJlbnRQcm9jZXNz
TmFtZTsKKyAgICBTdHJpbmcgdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKKyAgICB1aW50NjRf
dCBuc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHk7CisgICAgdWludDY0X3QgbnNVUkxDYWNoZURpc2tD
YXBhY2l0eTsKKworICAgIFN0cmluZyBodHRwUHJveHk7CisgICAgU3RyaW5nIGh0dHBzUHJveHk7
CisjaWYgVEFSR0VUX09TX0lQSE9ORSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMCkKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBu
ZXR3b3JrQVRTQ29udGV4dDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBT
dHJpbmcgY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoOworICAgIHVpbnQzMl90IGNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZTsKKyAgICBIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFj
Y2VwdFBvbGljeTsKKyAgICBib29sIGlnbm9yZVRMU0Vycm9yczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBsYW5ndWFnZXM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnNfaApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw4IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7Ci0gICAg
Y2xhc3MgQXJndW1lbnREZWNvZGVyOwotICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK2NsYXNz
IEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc1N1cHBsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaAkocmV2aXNpb24gMTk0MjYzKQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaDox
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1N1
cHBsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRfaAorI2RlZmluZSBOZXR3b3JrUHJvY2Vz
c1N1cHBsZW1lbnRfaAorCisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOworCitjbGFzcyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQgOiBwdWJsaWMgQ2hpbGRQcm9j
ZXNzU3VwcGxlbWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQorICAgIHsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIE5ldHdvcmtQcm9jZXNzU3VwcGxl
bWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAxOTQy
NjMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmNwcDoxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzLmgiCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycygpCisgICAgOiBpZGVudGlmaWVyKDApCisgICAgLCB3ZWJQYWdlSUQoMCkK
KyAgICAsIHdlYkZyYW1lSUQoMCkKKyAgICAsIHNlc3Npb25JRChTZXNzaW9uSUQ6OmVtcHR5U2Vz
c2lvbklEKCkpCisgICAgLCBjb250ZW50U25pZmZpbmdQb2xpY3koU25pZmZDb250ZW50KQorICAg
ICwgYWxsb3dTdG9yZWRDcmVkZW50aWFscyhEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCisg
ICAgLCBjbGllbnRDcmVkZW50aWFsUG9saWN5KERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlh
bHMpCisgICAgLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHRydWUp
CisgICAgLCBkZWZlcnNMb2FkaW5nKGZhbHNlKQorICAgICwgbmVlZHNDZXJ0aWZpY2F0ZUluZm8o
ZmFsc2UpCisgICAgLCBtYXhpbXVtQnVmZmVyaW5nVGltZSgwX21zKQoreworfQorCit2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29k
ZXIgPDwgd2ViUGFnZUlEOworICAgIGVuY29kZXIgPDwgd2ViRnJhbWVJRDsKKyAgICBlbmNvZGVy
IDw8IHNlc3Npb25JRDsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3Q7CisKKyAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGJvb2w+KHJlcXVlc3QuaHR0cEJvZHkoKSk7CisgICAgaWYgKHJlcXVlc3Qu
aHR0cEJvZHkoKSkgeworICAgICAgICByZXF1ZXN0Lmh0dHBCb2R5KCktPmVuY29kZShlbmNvZGVy
KTsKKworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiYgZWxlbWVudHMgPSBy
ZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCk7CisgICAgICAgIHNpemVfdCBmaWxlQ291bnQg
PSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBlbGVtZW50cy5zaXplKCk7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09
IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpCisgICAgICAgICAgICAgICAgKytm
aWxlQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheSByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zOworICAgICAgICByZXF1ZXN0Qm9keVNh
bmRib3hFeHRlbnNpb25zLmFsbG9jYXRlKGZpbGVDb3VudCk7CisgICAgICAgIHNpemVfdCBleHRl
bnNpb25JbmRleCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGVsZW1l
bnRzLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICAgICAgaWYgKGVsZW1lbnQu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxl
ID8gZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lOworICAg
ICAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpSZWFkT25seSwgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tleHRlbnNp
b25JbmRleCsrXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlciA8
PCByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zOworICAgIH0KKworICAgIGlmIChyZXF1ZXN0
LnVybCgpLmlzTG9jYWxGaWxlKCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHJlcXVlc3RTYW5kYm94RXh0ZW5zaW9uOworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUocmVxdWVzdC51cmwoKS5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9u
OjpSZWFkT25seSwgcmVxdWVzdFNhbmRib3hFeHRlbnNpb24pOworICAgICAgICBlbmNvZGVyIDw8
IHJlcXVlc3RTYW5kYm94RXh0ZW5zaW9uOworICAgIH0KKworICAgIGVuY29kZXIuZW5jb2RlRW51
bShjb250ZW50U25pZmZpbmdQb2xpY3kpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbGxvd1N0
b3JlZENyZWRlbnRpYWxzKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oY2xpZW50Q3JlZGVudGlh
bFBvbGljeSk7CisgICAgZW5jb2RlciA8PCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0OworICAgIGVuY29kZXIgPDwgZGVmZXJzTG9hZGluZzsKKyAgICBlbmNvZGVyIDw8
IG5lZWRzQ2VydGlmaWNhdGVJbmZvOworICAgIGVuY29kZXIgPDwgbWF4aW11bUJ1ZmZlcmluZ1Rp
bWU7Cit9CisKK2Jvb2wgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMm
IHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZGVudGlmaWVyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
d2ViUGFnZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQud2ViRnJhbWVJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlc3Npb25JRCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcXVlc3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhc0hUVFBCb2R5OworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGFzSFRUUEJvZHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFz
SFRUUEJvZHkpIHsKKyAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IEZvcm1EYXRh
OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmICghZm9ybURhdGEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KGZvcm1EYXRh
LnJlbGVhc2UoKSk7CisKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgcmVx
dWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9keVNh
bmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoUmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZShyZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQucmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uLnJl
bGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVzdWx0LnJlcXVlc3QudXJs
KCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVz
b3VyY2VTYW5kYm94RXh0ZW5zaW9uSGFuZGxlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc291cmNlU2FuZGJveEV4dGVuc2lvbkhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJlc3VsdC5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUocmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICB9CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuY29udGVudFNuaWZmaW5nUG9saWN5
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJl
c3VsdC5hbGxvd1N0b3JlZENyZWRlbnRpYWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5jbGllbnRDcmVkZW50aWFsUG9saWN5KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGVmZXJzTG9hZGluZykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZWVk
c0NlcnRpZmljYXRlSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tYXhpbXVtQnVmZmVyaW5nVGltZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDE5NDI2MykJKGZyb20g
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuaDoxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzX2gK
KyNkZWZpbmUgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnNfaAorCisjaW5jbHVkZSAiU2Fu
ZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KKwor
bmFtZXNwYWNlIElQQyB7CisgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOworICAgIGNsYXNzIEFy
Z3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgdWludDY0
X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMgeworcHVibGljOgorICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKCk7
CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgIHN0
YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIE5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzJik7CisKKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXI7
CisgICAgdWludDY0X3Qgd2ViUGFnZUlEOworICAgIHVpbnQ2NF90IHdlYkZyYW1lSUQ7CisgICAg
V2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdDsKKyAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiByZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25zOyAvLyBDcmVhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBz
ZW5kZXIuCisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IHJlc291cmNlU2FuZGJveEV4dGVu
c2lvbjsgLy8gQ3JlYXRlZCBhdXRvbWF0aWNhbGx5IGZvciB0aGUgc2VuZGVyLgorICAgIFdlYkNv
cmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBjb250ZW50U25pZmZpbmdQb2xpY3k7CisgICAgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBXZWJD
b3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OworICAgIGJvb2wg
ZGVmZXJzTG9hZGluZzsKKyAgICBib29sIG5lZWRzQ2VydGlmaWNhdGVJbmZvOworICAgIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMgbWF4aW11bUJ1ZmZlcmluZ1RpbWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Vz
c2lvbklELmg+CiAKIG5hbWVzcGFjZSBJUEMgewotICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsK
LSAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFz
cyBBcmd1bWVudEVuY29kZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3Bw
CShyZXZpc2lvbiAxOTQyNjQpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMv
RG93bmxvYWQuY3BwOjE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRG93bmxvYWQu
aCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRG93bmxvYWRQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworI2lmICFVU0UoTkVUV09SS19T
RVNTSU9OKQorI2luY2x1ZGUgIkRvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCIKKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdl
ciYgZG93bmxvYWRNYW5hZ2VyLCBjb25zdCBOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgRG93bmxv
YWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisjZWxzZQor
RG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3du
bG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKKyNlbmRp
ZgorICAgIDogbV9kb3dubG9hZE1hbmFnZXIoZG93bmxvYWRNYW5hZ2VyKQorICAgICwgbV9kb3du
bG9hZElEKGRvd25sb2FkSUQpCisgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKKyNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQorICAgICwgbV9zZXNzaW9uKHNlc3Npb24pCisjZW5kaWYKK3sKKyAgICBB
U1NFUlQobV9kb3dubG9hZElELmRvd25sb2FkSUQoKSk7CisKKyAgICBtX2Rvd25sb2FkTWFuYWdl
ci5kaWRDcmVhdGVEb3dubG9hZCgpOworfQorCitEb3dubG9hZDo6fkRvd25sb2FkKCkKK3sKKyAg
ICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKworICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ry
b3lEb3dubG9hZCgpOworfQorCit2b2lkIERvd25sb2FkOjpkaWRTdGFydCgpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkU3RhcnQobV9yZXF1ZXN0KSk7Cit9CisKK3Zv
aWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit7CisjaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBtX2Rv
d25sb2FkTWFuYWdlci5kb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsK
KyNlbmRpZgorfQorCit2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQ
cm94eTo6RGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgRG93bmxvYWQ6
OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGxlbmd0aCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKK30KKworYm9vbCBEb3dubG9h
ZDo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjpTaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShtaW1lVHlwZSksIE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpTaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZTo6
UmVwbHkocmVzdWx0KSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworU3RyaW5nIERvd25sb2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSkKK3sK
KyAgICBTdHJpbmcgZGVzdGluYXRpb247CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNh
bmRib3hFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6RGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWUp
LCBNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWU6OlJlcGx5KGRlc3RpbmF0aW9uLCBhbGxvd092ZXJ3cml0ZSwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBtX3NhbmRib3hF
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5z
aW9uLT5jb25zdW1lKCk7CisKKyAgICByZXR1cm4gZGVzdGluYXRpb247Cit9CisKK3ZvaWQgRG93
bmxvYWQ6OmRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDcmVhdGVEZXN0aW5hdGlvbihwYXRoKSk7
Cit9CisKK3ZvaWQgRG93bmxvYWQ6OmRpZEZpbmlzaCgpCit7CisgICAgcGxhdGZvcm1EaWRGaW5p
c2goKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZEZpbmlzaCgpKTsK
KworICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5z
aW9uLT5yZXZva2UoKTsKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworfQor
Cit2b2lkIERvd25sb2FkOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpCit7CisgICAgc2VuZChNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6RGlkRmFpbChlcnJvciwgcmVzdW1lRGF0YSkpOworCisgICAgaWYgKG1f
c2FuZGJveEV4dGVuc2lvbikgeworICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgp
OworICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRyOworICAgIH0KKyAgICBtX2Rv
d25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOworfQorCit2b2lkIERvd25sb2Fk
OjpkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQoreworICAg
IHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENhbmNlbChyZXN1bWVEYXRhKSk7CisK
KyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lv
bi0+cmV2b2tlKCk7CisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7CisgICAg
fQorICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkRmluaXNoZWQodGhpcyk7Cit9CisKK0lQ
Qzo6Q29ubmVjdGlvbiogRG93bmxvYWQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkKK3sKKyAg
ICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKTsKK30K
KwordWludDY0X3QgRG93bmxvYWQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkKK3sKKyAg
ICByZXR1cm4gbV9kb3dubG9hZElELmRvd25sb2FkSUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDggKzI5LDggQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRv
d25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNp
b24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAkocmV2aXNpb24gMTk0MjY0KQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkLmg6MTk0MjY0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERvd25s
b2FkX2gKKyNkZWZpbmUgRG93bmxvYWRfaAorCisjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRv
d25sb2FkVGFzazsKKyNlbHNlCitPQkpDX0NMQVNTIE5TVVJMRG93bmxvYWQ7CitPQkpDX0NMQVNT
IFdLRG93bmxvYWRBc0RlbGVnYXRlOworI2VuZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CisjaW5jbHVkZSA8bWVt
b3J5PgorI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorI2luY2x1ZGUgPENGTmV0d29yay9D
RlVSTERvd25sb2FkUHJpdi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0
YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CitjbGFzcyBDcmVkZW50aWFsOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2Ns
YXNzIFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ7CitjbGFz
cyBEb3dubG9hZE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CitjbGFzcyBOZXR3b3Jr
U2Vzc2lvbjsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIERvd25sb2FkIDogcHVibGljIElQQzo6
TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWQpOworcHVi
bGljOgorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5h
Z2VyJiwgY29uc3QgTmV0d29ya1Nlc3Npb24mLCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKKyNlbHNlCisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwg
RG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisjZW5kaWYKKyAg
ICB+RG93bmxvYWQoKTsKKworICAgIHZvaWQgc3RhcnQoKTsKKyNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKSAmJiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIGRhdGFUYXNrRGlkQmVjb21lRG93bmxv
YWRUYXNrKGNvbnN0IE5ldHdvcmtTZXNzaW9uJiwgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25s
b2FkVGFzaz4mJik7CisjZWxzZQorICAgIHZvaWQgc3RhcnRXaXRoSGFuZGxlKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlm
CisgICAgdm9pZCByZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAg
IHZvaWQgY2FuY2VsKCk7CisKKyAgICBEb3dubG9hZElEIGRvd25sb2FkSUQoKSBjb25zdCB7IHJl
dHVybiBtX2Rvd25sb2FkSUQ7IH0KKworICAgIHZvaWQgZGlkU3RhcnQoKTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IGxlbmd0aCk7CisgICAgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3Jp
dGUpOworICAgIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQgcGxhdGZvcm1EaWRGaW5pc2goKTsKKyAg
ICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7CisgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKKworI2lmIFVTRShDRk5FVFdPUkspCisgICAg
RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudCogYXV0aGVudGljYXRpb25DbGllbnQoKTsKKyNl
bmRpZgorCisgICAgLy8gQXV0aGVudGljYXRpb24KKyAgICBzdGF0aWMgdm9pZCByZWNlaXZlZENy
ZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJik7CisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7CisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICBzdGF0aWMgdm9pZCByZWNlaXZl
ZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKKyAgICBzdGF0aWMgdm9pZCByZWNlaXZlZENoYWxsZW5nZVJlamVj
dGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCisgICAgdm9p
ZCB1c2VDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwg
Y29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOworICAgIHZvaWQgY29udGludWVXaXRob3V0Q3Jl
ZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHZv
aWQgY2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKKworcHJpdmF0ZToKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIK
KyAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisgICAgRG93
bmxvYWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKKyAgICBEb3dubG9hZElEIG1fZG93bmxv
YWRJRDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OworCisgICAgUmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgY29uc3QgTmV0d29ya1Nlc3Np
b24mIG1fc2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBt
X2Rvd25sb2FkOworI2Vsc2UKKyAgICBSZXRhaW5QdHI8TlNVUkxEb3dubG9hZD4gbV9uc1VSTERv
d25sb2FkOworICAgIFJldGFpblB0cjxXS0Rvd25sb2FkQXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsK
KyNlbmRpZgorI2VuZGlmCisjaWYgVVNFKENGTkVUV09SSykKKyAgICBSZXRhaW5QdHI8Q0ZVUkxE
b3dubG9hZFJlZj4gbV9kb3dubG9hZDsKKyAgICBSZWZQdHI8RG93bmxvYWRBdXRoZW50aWNhdGlv
bkNsaWVudD4gbV9hdXRoZW50aWNhdGlvbkNsaWVudDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oRUZMKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRG93bmxvYWRfaApJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkSUQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRJRC5oCShyZXZpc2lv
biAxOTQyNjQpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRJ
RC5oOjE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZElELmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRG93bmxvYWRJRF9oCisjZGVmaW5lIERvd25sb2FkSURfaAorCisjaW5jbHVkZSAi
QXJndW1lbnRDb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUg
IkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBEb3dubG9hZElEIHsKK3B1YmxpYzoKKyAgICBEb3dubG9h
ZElEKCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgRG93bmxvYWRJRCh1aW50NjRfdCBk
b3dubG9hZElEKQorICAgICAgICA6IG1fZG93bmxvYWRJRChkb3dubG9hZElEKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRG93bmxvYWRJRCBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9kb3dubG9hZElEID09IG90aGVyLm1fZG93bmxvYWRJRDsgfQorCisgICAgdWludDY0X3Qg
ZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRJRDsgfQorcHJpdmF0ZToKKyAg
ICB1aW50NjRfdCBtX2Rvd25sb2FkSUQgeyAwIH07Cit9OworCit9CisKK25hbWVzcGFjZSBJUEMg
eworICAgIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkRvd25sb2Fk
SUQ+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJLaXQ6OkRvd25sb2FkSUQmIGRvd25sb2FkSUQpCisgICAgeworICAgICAgICBlbmNv
ZGVyIDw8IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJLaXQ6OkRvd25sb2FkSUQmIGRvd25s
b2FkSUQpCisgICAgeworICAgICAgICB1aW50NjRfdCBpZDsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZG93bmxv
YWRJRCA9IFdlYktpdDo6RG93bmxvYWRJRChpZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9OworCit9CisKK25hbWVzcGFjZSBXVEYgeworICAgIAorc3RydWN0IERv
d25sb2FkSURIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJLaXQ6OkRv
d25sb2FkSUQmIGQpIHsgcmV0dXJuIGludEhhc2goZC5kb3dubG9hZElEKCkpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgV2ViS2l0OjpEb3dubG9hZElEJiBhLCBjb25zdCBXZWJLaXQ6
OkRvd25sb2FkSUQmIGIpIHsgcmV0dXJuIGEuZG93bmxvYWRJRCgpID09IGIuZG93bmxvYWRJRCgp
OyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSB0cnVlOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViS2l0OjpEb3dubG9h
ZElEPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYktpdDo6RG93bmxvYWRJRD4geworICAgIHN0YXRp
YyBXZWJLaXQ6OkRvd25sb2FkSUQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQorICAgIAor
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJLaXQ6OkRvd25sb2FkSUQm
IHNsb3QpIHsgc2xvdCA9IFdlYktpdDo6RG93bmxvYWRJRChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
V2ViS2l0OjpEb3dubG9hZElEJiBzbG90KSB7IHJldHVybiBzbG90LmRvd25sb2FkSUQoKSA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7IH0KK307Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJLaXQ6OkRvd25sb2FkSUQ+IHsKKyAgICB0eXBlZGVmIERvd25s
b2FkSURIYXNoIEhhc2g7Cit9OworCit9CisjZW5kaWYgLyogRG93bmxvYWRJRF9oICovCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTk0MjY0KQkoZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6MTk0MjY0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJEb3du
bG9hZC5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0Rvd25sb2FkTWFuYWdlcjo6RG93bmxvYWRNYW5hZ2VyKENsaWVu
dCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorCit2b2lkIERvd25sb2Fk
TWFuYWdlcjo6c3RhcnREb3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRv
d25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6
Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgaWYgKCFuZXR3b3JrU2Vzc2lvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25s
b2FkPigqdGhpcywgKm5ldHdvcmtTZXNzaW9uLCBkb3dubG9hZElELCByZXF1ZXN0KTsKKyNlbHNl
CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KCp0aGlzLCBk
b3dubG9hZElELCByZXF1ZXN0KTsKKyNlbmRpZgorICAgIGRvd25sb2FkLT5zdGFydCgpOworCisg
ICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CisgICAgbV9kb3du
bG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkpOworfQorCisjaWYgIVVT
RShORVRXT1JLX1NFU1NJT04pCit2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udmVydEhhbmRsZVRv
RG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2Fk
PigqdGhpcywgZG93bmxvYWRJRCwgcmVxdWVzdCk7CisKKyAgICBkb3dubG9hZC0+c3RhcnRXaXRo
SGFuZGxlKGhhbmRsZSwgcmVzcG9uc2UpOworICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFp
bnMoZG93bmxvYWRJRCkpOworICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEY6Om1v
dmUoZG93bmxvYWQpKTsKK30KKyNlbmRpZgorCit2b2lkIERvd25sb2FkTWFuYWdlcjo6cmVzdW1l
RG93bmxvYWQoU2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCit7CisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICAvLyBEb3du
bG9hZDo6cmVzdW1lKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIERvd25sb2FkJ3Mg
cmVzb3VyY2UgcmVxdWVzdC4KKyAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxE
b3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQsIFJlc291cmNlUmVxdWVzdCgpKTsKKworICAgIGRv
d25sb2FkLT5yZXN1bWUocmVzdW1lRGF0YSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7
CisgICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CisgICAgbV9k
b3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkpOworI2VuZGlmCit9
CisKK3ZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZChEb3dubG9hZElEIGRvd25s
b2FkSUQpCit7CisgICAgRG93bmxvYWQqIGRvd25sb2FkID0gbV9kb3dubG9hZHMuZ2V0KGRvd25s
b2FkSUQpOworICAgIGlmICghZG93bmxvYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRvd25s
b2FkLT5jYW5jZWwoKTsKK30KKwordm9pZCBEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkRmluaXNo
ZWQoRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlu
cyhkb3dubG9hZC0+ZG93bmxvYWRJRCgpKSk7CisgICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25s
b2FkLT5kb3dubG9hZElEKCkpOworfQorCit2b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRl
RG93bmxvYWQoKQoreworICAgIG1fY2xpZW50LT5kaWRDcmVhdGVEb3dubG9hZCgpOworfQorCit2
b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkRGVzdHJveURvd25sb2FkKCkKK3sKKyAgICBtX2NsaWVu
dC0+ZGlkRGVzdHJveURvd25sb2FkKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogRG93bmxvYWRN
YW5hZ2VyOjpkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpCit7CisgICAgcmV0dXJuIG1fY2xpZW50
LT5kb3dubG9hZFByb3h5Q29ubmVjdGlvbigpOworfQorCitBdXRoZW50aWNhdGlvbk1hbmFnZXIm
IERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkKK3sKKyAg
ICByZXR1cm4gbV9jbGllbnQtPmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9u
IDE5NDI2NCkJKGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1h
bmFnZXIuaDoxOTQyNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRG93bmxvYWRNYW5hZ2VyX2gKKyNkZWZpbmUgRG93bmxvYWRNYW5h
Z2VyX2gKKworI2luY2x1ZGUgIkRvd25sb2FkLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lv
bi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKK2NsYXNzIFJlc291cmNlSGFuZGxlOworI2VuZGlmCitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7
CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgU2Vzc2lvbklEOworfQorCituYW1lc3Bh
Y2UgSVBDIHsKK2NsYXNzIENvbm5lY3Rpb247CitjbGFzcyBEYXRhUmVmZXJlbmNlOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQXV0aGVudGljYXRpb25NYW5hZ2VyOworY2xhc3Mg
RG93bmxvYWQ7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CitjbGFzcyBXZWJQYWdlOworCitjbGFz
cyBEb3dubG9hZE1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25sb2FkTWFu
YWdlcik7CisKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0
ZURvd25sb2FkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRGVzdHJveURvd25sb2Fk
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogZG93bmxvYWRQcm94eUNv
bm5lY3Rpb24oKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBk
b3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKSA9IDA7CisgICAgfTsKKworICAgIGV4cGxp
Y2l0IERvd25sb2FkTWFuYWdlcihDbGllbnQqKTsKKworICAgIHZvaWQgc3RhcnREb3dubG9hZChX
ZWJDb3JlOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpOworI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIHZvaWQgY29udmVydEhhbmRs
ZVRvRG93bmxvYWQoRG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
Jik7CisjZW5kaWYKKworICAgIHZvaWQgcmVzdW1lRG93bmxvYWQoV2ViQ29yZTo6U2Vzc2lvbklE
LCBEb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CisKKyAgICB2
b2lkIGNhbmNlbERvd25sb2FkKERvd25sb2FkSUQpOworCisgICAgdm9pZCBkb3dubG9hZEZpbmlz
aGVkKERvd25sb2FkKik7CisgICAgYm9vbCBpc0Rvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
IW1fZG93bmxvYWRzLmlzRW1wdHkoKTsgfQorICAgIHVpbnQ2NF90IGFjdGl2ZURvd25sb2FkQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2Fkcy5zaXplKCk7IH0KKworICAgIHZvaWQgZGlk
Q3JlYXRlRG93bmxvYWQoKTsKKyAgICB2b2lkIGRpZERlc3Ryb3lEb3dubG9hZCgpOworCisgICAg
SVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpOworICAgIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCk7CisKK3ByaXZh
dGU6CisgICAgQ2xpZW50KiBtX2NsaWVudDsKKyAgICBIYXNoTWFwPERvd25sb2FkSUQsIHN0ZDo6
dW5pcXVlX3B0cjxEb3dubG9hZD4+IG1fZG93bmxvYWRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBEb3dubG9hZE1hbmFnZXJfaApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDE5NDI2MykKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1h
bmFnZXIuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5j
ZS5oIgotI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRvd25s
b2FkTWFuYWdlci5oIgotI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0KLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSNpbmNsdWRlICJEb3dubG9hZEF1dGhl
bnRpY2F0aW9uQ2xpZW50LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLURvd25sb2Fk
OjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgY29uc3QgTmV0d29y
a1Nlc3Npb24mIHNlc3Npb24sIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQotI2Vsc2UKLURvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCi0jZW5kaWYKLSAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25s
b2FkTWFuYWdlcikKLSAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9yZXF1
ZXN0KHJlcXVlc3QpCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIG1fc2Vzc2lvbihz
ZXNzaW9uKQotI2VuZGlmCi17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OwotCi0gICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKLX0KLQotRG93
bmxvYWQ6On5Eb3dubG9hZCgpCi17Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBt
X2Rvd25sb2FkTWFuYWdlci5kaWREZXN0cm95RG93bmxvYWQoKTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6ZGlkU3RhcnQoKQotewotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFN0
YXJ0KG1fcmVxdWVzdCkpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKQotewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSNlbHNlCi0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRzQXV0aGVudGlj
YXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25z
ZSkpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVu
Z3RoKSk7Ci19Ci0KLWJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgYm9vbCByZXN1bHQ7Ci0gICAgaWYg
KCFzZW5kU3luYyhNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6U2hvdWxkRGVjb2RlU291cmNlRGF0
YU9mTUlNRVR5cGUobWltZVR5cGUpLCBNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6U2hvdWxkRGVj
b2RlU291cmNlRGF0YU9mTUlNRVR5cGU6OlJlcGx5KHJlc3VsdCkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBEb3dubG9hZDo6ZGVjaWRl
RGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Ym9vbCYgYWxsb3dPdmVyd3JpdGUpCi17Ci0gICAgU3RyaW5nIGRlc3RpbmF0aW9uOwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICgh
c2VuZFN5bmMoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lKSwgTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOjpSZXBseShkZXN0aW5hdGlvbiwgYWxs
b3dPdmVyd3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwotICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24p
Ci0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwotCi0gICAgcmV0dXJuIGRl
c3RpbmF0aW9uOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlk
Q3JlYXRlRGVzdGluYXRpb24ocGF0aCkpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRGaW5pc2go
KQotewotICAgIHBsYXRmb3JtRGlkRmluaXNoKCk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjpEaWRGaW5pc2goKSk7Ci0KLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7
Ci0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+cmV2b2tlKCk7Ci0gICAgICAgIG1fc2FuZGJv
eEV4dGVuc2lvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93
bmxvYWRGaW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRh
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZEZhaWwoZXJyb3IsIHJl
c3VtZURhdGEpKTsKLQotICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pIHsKLSAgICAgICAgbV9z
YW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsKLSAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0g
bnVsbHB0cjsKLSAgICB9Ci0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0
aGlzKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgcmVzdW1lRGF0YSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpE
aWRDYW5jZWwocmVzdW1lRGF0YSkpOwotCi0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikgewot
ICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwotICAgICAgICBtX3NhbmRib3hF
eHRlbnNpb24gPSBudWxscHRyOwotICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9h
ZEZpbmlzaGVkKHRoaXMpOwotfQotCi1JUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjptZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25s
b2FkUHJveHlDb25uZWN0aW9uKCk7Ci19Ci0KLXVpbnQ2NF90IERvd25sb2FkOjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpCi17Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRJRC5kb3dubG9hZElE
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvRG93bmxvYWQuaAkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEb3dubG9hZF9oCi0jZGVmaW5l
IERvd25sb2FkX2gKLQotI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKLSNpbmNsdWRlICJNZXNzYWdl
U2VuZGVyLmgiCi0jaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQotT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7Ci0j
ZWxzZQotT0JKQ19DTEFTUyBOU1VSTERvd25sb2FkOwotT0JKQ19DTEFTUyBXS0Rvd25sb2FkQXNE
ZWxlZ2F0ZTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNlbmRpZgot
Ci0jaWYgVVNFKENGTkVUV09SSykKLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9hZFBy
aXYuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERhdGFSZWZlcmVuY2U7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwot
Y2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIFJlc291cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJjZUhh
bmRsZTsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OwotY2xhc3MgRG93bmxvYWRNYW5h
Z2VyOwotY2xhc3MgTmV0d29ya0RhdGFUYXNrOwotY2xhc3MgTmV0d29ya1Nlc3Npb247Ci1jbGFz
cyBXZWJQYWdlOwotCi1jbGFzcyBEb3dubG9hZCA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25sb2FkKTsKLXB1YmxpYzoKLSNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQotICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIGNvbnN0IE5l
dHdvcmtTZXNzaW9uJiwgRG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7Ci0jZWxzZQotICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotI2VuZGlmCi0gICAgfkRvd25sb2FkKCk7
Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgdm9pZCBkYXRhVGFza0RpZEJlY29tZURvd25sb2FkVGFzayhjb25zdCBO
ZXR3b3JrU2Vzc2lvbiYsIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+JiYpOwot
I2Vsc2UKLSAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSNlbmRpZgotICAgIHZvaWQgcmVz
dW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNhbmNlbCgp
OwotCi0gICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9h
ZElEOyB9Ci0KLSAgICB2b2lkIGRpZFN0YXJ0KCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwotICAg
IGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0gICAgU3RyaW5nIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKLSAgICB2b2lk
IGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdm9pZCBkaWRG
aW5pc2goKTsKLSAgICB2b2lkIHBsYXRmb3JtRGlkRmluaXNoKCk7Ci0gICAgdm9pZCBkaWRGYWls
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IHJlc3VtZURhdGEpOwotICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgcmVzdW1lRGF0YSk7Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIERvd25sb2FkQXV0aGVu
dGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIC8v
IEF1dGhlbnRpY2F0aW9uCi0gICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpOwotICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0
Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAg
IHN0YXRpYyB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9QZXJm
b3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLQotICAgIHZvaWQgdXNlQ3JlZGVudGlh
bChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmKTsKLSAgICB2b2lkIGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIGNhbmNlbEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAgdmlydHVhbCBJ
UEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLQotICAgIERvd25sb2FkTWFuYWdlciYg
bV9kb3dubG9hZE1hbmFnZXI7Ci0gICAgRG93bmxvYWRJRCBtX2Rvd25sb2FkSUQ7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKLQotICAgIFJlZlB0cjxTYW5kYm94RXh0
ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNpb247Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQotICAgIGNvbnN0IE5ldHdvcmtTZXNzaW9uJiBtX3Nlc3Npb247
Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsKLSNl
bHNlCi0gICAgUmV0YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3dubG9hZDsKLSAgICBS
ZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0jZW5kaWYKLSNlbmRp
ZgotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1f
ZG93bmxvYWQ7Ci0gICAgUmVmUHRyPERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ+IG1fYXV0
aGVudGljYXRpb25DbGllbnQ7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+
IG1fZG93bmxvYWRDbGllbnQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBt
X3Jlc291cmNlSGFuZGxlOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIERvd25sb2FkX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNw
cAkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25s
b2FkQXV0aGVudGljYXRpb25DbGllbnQuaCIKLQotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQot
Ci0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpEb3dubG9h
ZEF1dGhlbnRpY2F0aW9uQ2xpZW50KERvd25sb2FkKiBkb3dubG9hZCkKLSAgICA6IG1fZG93bmxv
YWQoZG93bmxvYWQpCi17Ci0gICAgQVNTRVJUX0FSRyhkb3dubG9hZCwgZG93bmxvYWQpOwotfQot
Ci12b2lkIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ6OnJlY2VpdmVkQ3JlZGVudGlhbChj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKQotewotICAg
IC8vIEZJWE1FICgxMTk2NjcpOiBUaGlzIGNhbiBwcm9iYWJseSBiZSBqdXN0IHJlbW92ZWQuCi19
Ci0KLXZvaWQgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudDo6cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikK
LXsKLSAgICAvLyBGSVhNRSAoMTE5NjY3KTogVGhpcyBjYW4gcHJvYmFibHkgYmUganVzdCByZW1v
dmVkLgotfQotCi12b2lkIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ6OnJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICAvLyBGSVhN
RSAoMTE5NjY3KTogVGhpcyBjYW4gcHJvYmFibHkgYmUganVzdCByZW1vdmVkLgotfQotCi12b2lk
IERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ6OnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURl
ZmF1bHRIYW5kbGluZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgLy8g
RklYTUUgKDExOTY2Nyk6IFRoaXMgY2FuIHByb2JhYmx5IGJlIGp1c3QgcmVtb3ZlZC4KLX0KLQot
dm9pZCBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpyZWNlaXZlZENoYWxsZW5nZVJlamVj
dGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgLy8gRklYTUUgKDEx
OTY2Nyk6IFRoaXMgY2FuIHByb2JhYmx5IGJlIGp1c3QgcmVtb3ZlZC4KLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgJ
KHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93
bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnRfaAot
I2RlZmluZSBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50X2gKLQotI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNsaWVudC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OwotICAgIGNsYXNzIENyZWRlbnRpYWw7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBEb3dubG9hZDsKLQotY2xhc3MgRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ+LCBwdWJsaWMgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG93bmxv
YWRBdXRoZW50aWNhdGlvbkNsaWVudD4gY3JlYXRlKERvd25sb2FkKiBkb3dubG9hZCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50KGRvd25sb2FkKSk7
IH0KLQotICAgIHZvaWQgZGV0YWNoKCkgeyBtX2Rvd25sb2FkID0gMDsgfQotCi0gICAgdXNpbmcg
UmVmQ291bnRlZDxEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Pjo6cmVmOwotICAgIHVzaW5n
IFJlZkNvdW50ZWQ8RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudD46OmRlcmVmOwotCi1wcml2
YXRlOgotICAgIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQoRG93bmxvYWQqKTsKLQotICAg
IHZpcnR1YWwgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlh
bChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJl
cXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDaGFsbGVu
Z2VSZWplY3Rpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJy
aWRlIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVu
dCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQotCi0gICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNT
SU9OKQotCi0jZW5kaWYgLy8gRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkSUQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkSUQuaAkocmV2aXNpb24g
MTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZElELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRG93
bmxvYWRJRF9oCi0jZGVmaW5lIERvd25sb2FkSURfaAotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2Rl
ci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5j
b2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBEb3dubG9hZElEIHsKLXB1YmxpYzoKLSAgICBEb3dubG9hZElEKCkKLSAgICB7
Ci0gICAgfQotCi0gICAgZXhwbGljaXQgRG93bmxvYWRJRCh1aW50NjRfdCBkb3dubG9hZElEKQot
ICAgICAgICA6IG1fZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgIHsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yPT0oRG93bmxvYWRJRCBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kb3dubG9h
ZElEID09IG90aGVyLm1fZG93bmxvYWRJRDsgfQotCi0gICAgdWludDY0X3QgZG93bmxvYWRJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRJRDsgfQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBt
X2Rvd25sb2FkSUQgeyAwIH07Ci19OwotCi19Ci0KLW5hbWVzcGFjZSBJUEMgewotICAgIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkRvd25sb2FkSUQ+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJLaXQ6
OkRvd25sb2FkSUQmIGRvd25sb2FkSUQpCi0gICAgewotICAgICAgICBlbmNvZGVyIDw8IGRvd25s
b2FkSUQuZG93bmxvYWRJRCgpOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBXZWJLaXQ6OkRvd25sb2FkSUQmIGRvd25sb2FkSUQpCi0gICAg
ewotICAgICAgICB1aW50NjRfdCBpZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZG93bmxvYWRJRCA9IFdlYktp
dDo6RG93bmxvYWRJRChpZCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIAotc3RydWN0IERvd25sb2FkSURIYXNo
IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJLaXQ6OkRvd25sb2FkSUQmIGQp
IHsgcmV0dXJuIGludEhhc2goZC5kb3dubG9hZElEKCkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgV2ViS2l0OjpEb3dubG9hZElEJiBhLCBjb25zdCBXZWJLaXQ6OkRvd25sb2FkSUQm
IGIpIHsgcmV0dXJuIGEuZG93bmxvYWRJRCgpID09IGIuZG93bmxvYWRJRCgpOyB9Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViS2l0OjpEb3dubG9hZElEPiA6IEdlbmVy
aWNIYXNoVHJhaXRzPFdlYktpdDo6RG93bmxvYWRJRD4gewotICAgIHN0YXRpYyBXZWJLaXQ6OkRv
d25sb2FkSUQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJLaXQ6OkRvd25sb2FkSUQmIHNsb3QpIHsgc2xv
dCA9IFdlYktpdDo6RG93bmxvYWRJRChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4
KCkpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViS2l0OjpEb3du
bG9hZElEJiBzbG90KSB7IHJldHVybiBzbG90LmRvd25sb2FkSUQoKSA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxXZWJLaXQ6OkRvd25sb2FkSUQ+IHsKLSAgICB0eXBlZGVmIERvd25sb2FkSURIYXNoIEhh
c2g7Ci19OwotCi19Ci0jZW5kaWYgLyogRG93bmxvYWRJRF9oICovCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2Fk
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCi0KLSNp
bmNsdWRlICJEb3dubG9hZC5oIgotI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklE
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLURvd25sb2FkTWFuYWdlcjo6RG93bmxvYWRN
YW5hZ2VyKENsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi12
b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBE
b3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gU2Vz
c2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFuZXR3b3Jr
U2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERvd25sb2FkPigqdGhpcywgKm5ldHdvcmtTZXNzaW9uLCBkb3dubG9hZElELCByZXF1
ZXN0KTsKLSNlbHNlCi0gICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxv
YWQ+KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0KTsKLSNlbmRpZgotICAgIGRvd25sb2FkLT5z
dGFydCgpOwotCi0gICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7
Ci0gICAgbV9kb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkpOwot
fQotCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi12b2lkIERvd25sb2FkTWFuYWdlcjo6Y29u
dmVydEhhbmRsZVRvRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPERvd25sb2FkPigqdGhpcywgZG93bmxvYWRJRCwgcmVxdWVzdCk7Ci0KLSAgICBkb3dubG9h
ZC0+c3RhcnRXaXRoSGFuZGxlKGhhbmRsZSwgcmVzcG9uc2UpOwotICAgIEFTU0VSVCghbV9kb3du
bG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwotICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9h
ZElELCBXVEY6Om1vdmUoZG93bmxvYWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIERvd25sb2FkTWFu
YWdlcjo6cmVzdW1lRG93bmxvYWQoU2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi17
Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UK
LSAgICAvLyBEb3dubG9hZDo6cmVzdW1lKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhl
IERvd25sb2FkJ3MgcmVzb3VyY2UgcmVxdWVzdC4KLSAgICBhdXRvIGRvd25sb2FkID0gc3RkOjpt
YWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQsIFJlc291cmNlUmVxdWVzdCgp
KTsKLQotICAgIGRvd25sb2FkLT5yZXN1bWUocmVzdW1lRGF0YSwgcGF0aCwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSk7Ci0gICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElE
KSk7Ci0gICAgbV9kb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkp
OwotI2VuZGlmCi19Ci0KLXZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZChEb3du
bG9hZElEIGRvd25sb2FkSUQpCi17Ci0gICAgRG93bmxvYWQqIGRvd25sb2FkID0gbV9kb3dubG9h
ZHMuZ2V0KGRvd25sb2FkSUQpOwotICAgIGlmICghZG93bmxvYWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGRvd25sb2FkLT5jYW5jZWwoKTsKLX0KLQotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmRv
d25sb2FkRmluaXNoZWQoRG93bmxvYWQqIGRvd25sb2FkKQotewotICAgIEFTU0VSVChtX2Rvd25s
b2Fkcy5jb250YWlucyhkb3dubG9hZC0+ZG93bmxvYWRJRCgpKSk7Ci0gICAgbV9kb3dubG9hZHMu
cmVtb3ZlKGRvd25sb2FkLT5kb3dubG9hZElEKCkpOwotfQotCi12b2lkIERvd25sb2FkTWFuYWdl
cjo6ZGlkQ3JlYXRlRG93bmxvYWQoKQotewotICAgIG1fY2xpZW50LT5kaWRDcmVhdGVEb3dubG9h
ZCgpOwotfQotCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkRGVzdHJveURvd25sb2FkKCkKLXsK
LSAgICBtX2NsaWVudC0+ZGlkRGVzdHJveURvd25sb2FkKCk7Ci19Ci0KLUlQQzo6Q29ubmVjdGlv
biogRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpCi17Ci0gICAgcmV0
dXJuIG1fY2xpZW50LT5kb3dubG9hZFByb3h5Q29ubmVjdGlvbigpOwotfQotCi1BdXRoZW50aWNh
dGlvbk1hbmFnZXImIERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5h
Z2VyKCkKLXsKLSAgICByZXR1cm4gbV9jbGllbnQtPmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFu
YWdlcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAkocmV2aXNpb24gMTk0
MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBE
b3dubG9hZE1hbmFnZXJfaAotI2RlZmluZSBEb3dubG9hZE1hbmFnZXJfaAotCi0jaW5jbHVkZSAi
RG93bmxvYWQuaCIKLSNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotY2xhc3MgUmVzb3VyY2VI
YW5kbGU7Ci0jZW5kaWYKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVz
cG9uc2U7Ci1jbGFzcyBTZXNzaW9uSUQ7Ci19Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQ29u
bmVjdGlvbjsKLWNsYXNzIERhdGFSZWZlcmVuY2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBBdXRoZW50aWNhdGlvbk1hbmFnZXI7Ci1jbGFzcyBEb3dubG9hZDsKLWNsYXNzIE5l
dHdvcmtEYXRhVGFzazsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIERvd25sb2FkTWFuYWdlciB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRNYW5hZ2VyKTsKLQotcHVibGljOgot
ICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQo
KSB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWREZXN0cm95RG93bmxvYWQoKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpID0gMDsKLSAg
ICAgICAgdmlydHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0
aW9uTWFuYWdlcigpID0gMDsKLSAgICB9OwotCi0gICAgZXhwbGljaXQgRG93bmxvYWRNYW5hZ2Vy
KENsaWVudCopOwotCi0gICAgdm9pZCBzdGFydERvd25sb2FkKFdlYkNvcmU6OlNlc3Npb25JRCwg
RG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0jaWYgIVVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgdm9pZCBjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9h
ZElELCBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSNlbmRpZgotCi0gICAg
dm9pZCByZXN1bWVEb3dubG9hZChXZWJDb3JlOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKLQotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQo
RG93bmxvYWRJRCk7Ci0KLSAgICB2b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxvYWQqKTsKLSAg
ICBib29sIGlzRG93bmxvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhbV9kb3dubG9hZHMuaXNFbXB0
eSgpOyB9Ci0gICAgdWludDY0X3QgYWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG93bmxvYWRzLnNpemUoKTsgfQotCi0gICAgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOwot
ICAgIHZvaWQgZGlkRGVzdHJveURvd25sb2FkKCk7Ci0KLSAgICBJUEM6OkNvbm5lY3Rpb24qIGRv
d25sb2FkUHJveHlDb25uZWN0aW9uKCk7Ci0gICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3du
bG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKTsKLQotcHJpdmF0ZToKLSAgICBDbGllbnQqIG1f
Y2xpZW50OwotICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2Fk
Pj4gbV9kb3dubG9hZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IERvd25sb2FkTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRz
L2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCShyZXZpc2lvbiAxOTQyNjMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiRG93bmxvYWQuaCIKLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
Ci0KLSNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
ICAgIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBbbV9kb3dubG9hZCBjYW5jZWxd
OwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2VmbC9Eb3dubG9hZFNvdXBFcnJv
cnNFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMv
ZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgotCi0jaW5j
bHVkZSA8V2ViQ29yZS9FcnJvcnNFZmwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJy
b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1SZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoaW50IGVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2Ny
aXB0aW9uKQotewotICAgIHJldHVybiBkb3dubG9hZE5ldHdvcmtFcnJvcihSZXNvdXJjZUVycm9y
KGVycm9yRG9tYWluRG93bmxvYWQsIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVz
Y3JpcHRpb24pKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRp
b25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIHJldHVybiBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IocmVzcG9uc2Us
IG1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3Vw
RXJyb3JzR3RrLmNwcAkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Vy
cm9yc0d0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlc291cmNlRXJyb3Ig
cGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCi17Ci0gICAg
cmV0dXJuIGRvd25sb2FkTmV0d29ya0Vycm9yKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3du
bG9hZCwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikpOwotfQot
Ci1SZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
cmV0dXJuIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihyZXNwb25zZSwgbWVzc2FnZSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0JKHJldmlzaW9uIDE5NDI2MykKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJEb3dubG9hZC5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhVVNFKE5FVFdP
UktfU0VTU0lPTikKLQotI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgotI2ltcG9ydCA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVzcG9uc2UuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9S
dW5Mb29wLmg+Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJM
RG93bmxvYWQuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotLy8gRklYTUU6IElmIHBvc3NpYmxl
LCB3ZSBzaG91bGQgY29uc2lkZXIgbW92aW5nIHNvbWUgY2FsbGJhY2tzIG9mZiB0aGUgbWFpbiB0
aHJlYWQgb3IgYXQgbGVhc3QKLS8vIG1ha2luZyB0aGVtIGFzeW5jaG9ub3VzIGNhbGxzLgotc3Rh
dGljIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQodm9pZCheYmxvY2spKCkpCi17Ci0gICAgaWYg
KFJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGJsb2NrKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGJs
b2NrKTsKLX0KLQotc3RhdGljIGlubGluZSBEb3dubG9hZCogdG9Eb3dubG9hZChjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEb3dubG9hZCo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBEb3dubG9h
ZENsaWVudChDRlVSTERvd25sb2FkQ2xpZW50JiBjbGllbnQsIERvd25sb2FkJiBkb3dubG9hZCkK
LXsKLSAgICBtZW1zZXQoJmNsaWVudCwgMCwgc2l6ZW9mKGNsaWVudCkpOwotICAgIGNsaWVudC5j
bGllbnRJbmZvID0gJmRvd25sb2FkOwotCi0gICAgY2xpZW50LmRpZFN0YXJ0ID0gW10oQ0ZVUkxE
b3dubG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRjaE9u
TWFpblRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkU3Rh
cnQoKTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLQotICAgIGNsaWVudC53aWxsU2VuZFJlcXVlc3Qg
PSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNw
b25zZVJlZiwgY29uc3Qgdm9pZCopIC0+IENGVVJMUmVxdWVzdFJlZiB7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDRlVSTFJlcXVlc3RSZWY+KENGUmV0YWluKHJlcXVlc3QpKTsKLSAgICB9
OwotCi0gICAgY2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IFtdKENGVVJMRG93bmxvYWRSZWYs
IENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAg
ICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgICAgIHRvRG93bmxvYWQoY2xp
ZW50SW5mbyktPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Ci0gICAgICAgIH0pOwotICAg
IH07Ci0KLSAgICBjbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBbXShDRlVSTERvd25sb2FkUmVmLCBD
RkluZGV4IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRj
aE9uTWFpblRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlk
UmVjZWl2ZURhdGEobGVuZ3RoKTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLQotICAgIGNsaWVudC5z
aG91bGREZWNvZGVEYXRhT2ZNSU1FVHlwZSA9IFtdKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5n
UmVmIGVuY29kaW5nVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgLT4gQm9vbGVhbiB7Ci0g
ICAgICAgIF9fYmxvY2sgQk9PTCByZXR1cm5WYWx1ZSA9IE5POwotICAgICAgICBkaXNwYXRjaE9u
TWFpblRocmVhZCheewotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0Rvd25sb2FkKGNsaWVu
dEluZm8pLT5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShlbmNvZGluZ1R5cGUpOwot
ICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH07Ci0KLSAgICBj
bGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZSA9IFtdKENGVVJM
RG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIG9iamVjdE5hbWUsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAg
ICAgICAgIGJvb2wgYWxsb3dPdmVyd3JpdGU7Ci0gICAgICAgICAgICBTdHJpbmcgZGVzdGluYXRp
b24gPSB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZShvYmplY3ROYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgICAgICBpZiAo
IWRlc3RpbmF0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIENGVVJMRG93bmxvYWRTZXRE
ZXN0aW5hdGlvbihkb3dubG9hZFJlZiwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTFJlZj4oW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbl0pLCBhbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAg
IH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBbXShDRlVS
TERvd25sb2FkUmVmLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7Ci0g
ICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgICAgICB0b0Rvd25sb2FkKGNs
aWVudEluZm8pLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihDRlVSTEdldFN0cmluZyhwYXRoKSk7Ci0g
ICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkRmluaXNoID0gW10oQ0ZVUkxEb3du
bG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRjaE9uTWFp
blRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkRmluaXNo
KCk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkRmFpbCA9IFtdKENGVVJM
RG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgICAg
IGF1dG8gcmVzdW1lRGF0YSA9IGFkb3B0Q0YoQ0ZVUkxEb3dubG9hZENvcHlSZXN1bWVEYXRhKGRv
d25sb2FkUmVmKSk7Ci0gICAgICAgICAgICB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kaWRGYWls
KGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UocmVzdW1lRGF0YSA/IENGRGF0YUdldEJ5dGVQdHIo
cmVzdW1lRGF0YS5nZXQoKSkgOiBudWxscHRyLCByZXN1bWVEYXRhID8gQ0ZEYXRhR2V0TGVuZ3Ro
KHJlc3VtZURhdGEuZ2V0KCkpIDogMCkpOwotICAgICAgICB9KTsKLSAgICB9OwotfQotI2VuZGlm
IC8vIFVTRShDRk5FVFdPUkspCi0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydFdp
dGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0jaWYgVVNFKENGTkVUV09SSykKLSAgICBDRlVSTERvd25sb2FkQ2xpZW50
IGNsaWVudDsKLSAgICBzZXRVcERvd25sb2FkQ2xpZW50KGNsaWVudCwgKnRoaXMpOwotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIG1fZG93bmxvYWQgPSBhZG9wdENGKENG
VVJMRG93bmxvYWRDcmVhdGVBbmRTdGFydFdpdGhMb2FkaW5nQ29ubmVjdGlvbihOVUxMLCBoYW5k
bGUtPnJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKS5nZXQoKSwgbV9yZXF1ZXN0LmNmVVJM
UmVxdWVzdChVcGRhdGVIVFRQQm9keSksIHJlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKSwgJmNsaWVu
dCkpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2Vsc2UKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNlbCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURp
ZEZpbmlzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6
cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3Qg
Q3JlZGVudGlhbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVj
ZWl2ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IERvd25sb2FkOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQko
cmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9tYWMv
RG93bmxvYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMzExICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRvd25sb2FkLmgiCi0KLSNp
ZiBQTEFURk9STShNQUMpICYmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi0jaW1wb3J0IDxXZWJD
b3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRp
Y2F0aW9uTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbXBv
cnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIldlYlBhZ2UuaCIKLQotQGludGVyZmFjZSBO
U1VSTERvd25sb2FkIChXZWJOU1VSTERvd25sb2FkRGV0YWlscykKLSsoaWQpX2Rvd25sb2FkV2l0
aExvYWRpbmdDb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZTooaWQpZGVsZWdhdGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3h5OihpZClwcm94eTsKLUBlbmQKLQotQGludGVyZmFjZSBX
S0Rvd25sb2FkQXNEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTERvd25sb2FkRGVsZWdhdGU+IHsK
LSAgICBXZWJLaXQ6OkRvd25sb2FkKiBfZG93bmxvYWQ7Ci19Ci0tIChpZClpbml0V2l0aERvd25s
b2FkOihXZWJLaXQ6OkRvd25sb2FkKilkb3dubG9hZDsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLUBl
bmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12
b2lkIERvd25sb2FkOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOwot
ICAgIEFTU0VSVCghbV9kZWxlZ2F0ZSk7Ci0KLSAgICBtX2RlbGVnYXRlID0gYWRvcHROUyhbW1dL
RG93bmxvYWRBc0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBtX25zVVJMRG93bmxvYWQgPSBhZG9w
dE5TKFtbTlNVUkxEb3dubG9hZCBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0Om1fcmVxdWVzdC5uc1VS
TFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpIGRlbGVnYXRlOm1fZGVsZWdhdGUuZ2V0KCldKTsKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIC8vIEZJWE1FOiBBbGxvdyB0aGlzIHRv
IGJlIGNoYW5nZWQgYnkgdGhlIGNsaWVudC4KLSAgICBbbV9uc1VSTERvd25sb2FkIHNldERlbGV0
ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydFdpdGhIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCi17Ci0gICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOwotICAgIEFTU0VSVCghbV9kZWxl
Z2F0ZSk7Ci0KLSAgICBtX2RlbGVnYXRlID0gYWRvcHROUyhbW1dLRG93bmxvYWRBc0RlbGVnYXRl
IGFsbG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKLSAgICBtX25zVVJMRG93bmxvYWQgPSBb
TlNVUkxEb3dubG9hZCBfZG93bmxvYWRXaXRoTG9hZGluZ0Nvbm5lY3Rpb246aGFuZGxlLT5jb25u
ZWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3Q6bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9k
eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2U6cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZTptX2Rl
bGVnYXRlLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm94eTpuaWxdOwotCi0gICAgLy8gRklYTUU6IEFsbG93IHRo
aXMgdG8gYmUgY2hhbmdlZCBieSB0aGUgY2xpZW50LgotICAgIFttX25zVVJMRG93bmxvYWQgc2V0
RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTpOT107Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlc3VtZShj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQot
ewotICAgIEFTU0VSVCghbV9uc1VSTERvd25sb2FkKTsKLSAgICBBU1NFUlQoIW1fZGVsZWdhdGUp
OwotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNh
bmRib3hFeHRlbnNpb25IYW5kbGUpOwotICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCi0gICAg
ICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwotCi0jcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCi0gICAgbV9kZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS0Rvd25sb2FkQXNE
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhEb3dubG9hZDp0aGlzXSk7Ci0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCi0KLSAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6cmVzdW1lRGF0YS5kYXRhKCkgbGVuZ3RoOnJlc3VtZURhdGEuc2l6ZSgp
XSk7Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgbV9uc1VSTERvd25s
b2FkID0gYWRvcHROUyhbW05TVVJMRG93bmxvYWQgYWxsb2NdIGluaXRXaXRoUmVzdW1lRGF0YTpu
c0RhdGEuZ2V0KCkgZGVsZWdhdGU6bV9kZWxlZ2F0ZS5nZXQoKSBwYXRoOnBhdGhdKTsKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIG1fcmVxdWVzdCA9IFttX25zVVJMRG93bmxv
YWQgcmVxdWVzdF07Ci0KLSAgICAvLyBGSVhNRTogQWxsb3cgdGhpcyB0byBiZSBjaGFuZ2VkIGJ5
IHRoZSBjbGllbnQuCi0gICAgW21fbnNVUkxEb3dubG9hZCBzZXREZWxldGVzRmlsZVVwb25GYWls
dXJlOk5PXTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBbbV9uc1VSTERv
d25sb2FkIGNhbmNlbF07Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXN1bWVEYXRhID0gW21f
bnNVUkxEb3dubG9hZCByZXN1bWVEYXRhXTsKLSAgICBkaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJl
bmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtyZXN1bWVEYXRhIGJ5dGVzXSks
IFtyZXN1bWVEYXRhIGxlbmd0aF0pKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9uc1VSTERvd25sb2FkKTsKLSAgICBBU1NFUlQobV9k
ZWxlZ2F0ZSk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBtX2RlbGVnYXRl
ID0gbnVsbHB0cjsKLSAgICBtX25zVVJMRG93bmxvYWQgPSBudWxscHRyOwotfQotCi12b2lkIERv
d25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlY2Vp
dmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgW2F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLnNlbmRlcigpIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlhbC5uc0Ny
ZWRlbnRpYWwoKSBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotfQotCi12b2lkIERvd25sb2Fk
OjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5j
ZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBjYW5jZWxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJlcXVl
c3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5zZW5kZXIoKSBwZXJmb3JtRGVmYXVsdEhhbmRsaW5nRm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgp
XTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAg
IFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSByZWplY3RQcm90ZWN0aW9uU3BhY2VB
bmRDb250aW51ZVdpdGhDaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUBp
bXBsZW1lbnRhdGlvbiBXS0Rvd25sb2FkQXNEZWxlZ2F0ZQotCi0vLyBGSVhNRTogSXQgd291bGQg
YmUgbmljZSBpZiB0aGVzZSBjYWxsYmFja3Mgd291bGRuJ3QgaGF2ZSB0byBiZSBpbnZva2VkIG9u
IHRoZSBtYWluIHRocmVhZC4KLXN0YXRpYyB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKHZvaWQg
KF5ibG9jaykoKSkKLXsKLSAgICBpZiAoUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgYmxv
Y2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRpc3BhdGNoX3N5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgYmxvY2spOwotfQotCi0tIChpZClpbml0V2l0aERvd25sb2Fk
OihXZWJLaXQ6OkRvd25sb2FkKilkb3dubG9hZAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX2Rvd25sb2FkID0g
ZG93bmxvYWQ7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewot
ICAgIF9kb3dubG9hZCA9IDA7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWREaWRCZWdpbjooTlNVUkxE
b3dubG9hZCAqKWRvd25sb2FkCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAg
ICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+ZGlkU3RhcnQoKTsKLSAg
ICB9KTsKLX0KLQotLSAoTlNVUkxSZXF1ZXN0ICopZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilk
b3dubG9hZCB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RS
ZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UKLXsKLSAgICByZXR1cm4g
cmVxdWVzdDsKLX0KLQotLSAoQk9PTClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWNvbm5lY3Rp
b24gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9u
U3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKWRvd25sb2Fk
OihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCi17Ci0gICAgZGlz
cGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAg
IF9kb3dubG9hZC0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxl
bmdlKSk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilk
b3dubG9hZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLSAoQk9PTClkb3dubG9hZFNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOihOU1VSTERvd25sb2FkICopZG93bmxvYWQKLXsKLSAgICByZXR1cm4gTk87
Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRSZWNl
aXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQotewotICAgIGRpc3BhdGNoT25N
YWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxv
YWQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQp
ZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCB3aWxsUmVzdW1lV2l0aFJlc3BvbnNl
OihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbUJ5dGU6KGxvbmcgbG9uZylzdGFydGluZ0J5
dGUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRSZWNlaXZl
RGF0YU9mTGVuZ3RoOihOU1VJbnRlZ2VyKWxlbmd0aAotewotICAgIGRpc3BhdGNoT25NYWluVGhy
ZWFkKF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxvYWQtPmRp
ZFJlY2VpdmVEYXRhKGxlbmd0aCk7Ci0gICAgfSk7Ci19Ci0KLS0gKEJPT0wpZG93bmxvYWQ6KE5T
VVJMRG93bmxvYWQgKilkb3dubG9hZCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZToo
TlNTdHJpbmcgKillbmNvZGluZ1R5cGUKLXsKLSAgICBfX2Jsb2NrIEJPT0wgcmV0dXJuVmFsdWU7
Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gX2Rvd25sb2FkLT5zaG91bGREZWNvZGVTb3VyY2VEYXRh
T2ZNSU1FVHlwZShlbmNvZGluZ1R5cGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IFlFUzsKLSAgICB9KTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQot
LSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lCi17Ci0gICAgZGlz
cGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uOwotICAgICAg
ICBib29sIGFsbG93T3ZlcndyaXRlOwotICAgICAgICBpZiAoX2Rvd25sb2FkKQotICAgICAgICAg
ICAgZGVzdGluYXRpb24gPSBfZG93bmxvYWQtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKGZpbGVuYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0KLSAgICAgICAgaWYgKCFkZXN0
aW5hdGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIFtkb3dubG9hZCBzZXREZXN0aW5hdGlvbjpk
ZXN0aW5hdGlvbiBhbGxvd092ZXJ3cml0ZTphbGxvd092ZXJ3cml0ZV07Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRDcmVhdGVEZXN0
aW5hdGlvbjooTlNTdHJpbmcgKilwYXRoCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsK
LSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+ZGlkQ3JlYXRl
RGVzdGluYXRpb24ocGF0aCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWREaWRGaW5p
c2g6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZAotewotICAgIGRpc3BhdGNoT25NYWluVGhyZWFk
KF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxvYWQtPmRpZEZp
bmlzaCgpOwotICAgIH0pOwotfQotCi0tICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICop
ZG93bmxvYWQgZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgZGlzcGF0
Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKCFfZG93bmxvYWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gcmVzdW1lRGF0YSA9IFtkb3dubG9h
ZCByZXN1bWVEYXRhXTsKLSAgICAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2Uo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3Jlc3VtZURhdGEgYnl0ZXNdKSwgW3Jl
c3VtZURhdGEgbGVuZ3RoXSk7Ci0KLSAgICAgICAgX2Rvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBk
YXRhUmVmZXJlbmNlKTsKLSAgICB9KTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0o
TUFDKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNs
dWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
aWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jZW5kaWYKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBE
b3dubG9hZENsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGljOgotICAgIERvd25sb2FkQ2xp
ZW50KERvd25sb2FkKiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQot
ICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZE
b3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAgICwgbV9hbGxvd092ZXJ3cml0
ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2FkQ2xpZW50KCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmlsZV9kZWxldGUobV9kZXN0aW5h
dGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgIGlmIChtX2ludGVy
bWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0g
ICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGRvd25sb2FkRmFpbGVk
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmlsZXNJ
Zk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFS
ZWZlcmVuY2UoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAg
ICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLQotICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA+PSA0MDApIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxv
YWROZXR3b3JrRXJyb3IocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgcmVzcG9uc2UudXJsKCku
c3RyaW5nKCksIHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlc3Bv
bnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCk7Ci0gICAgICAgIGlmIChzdWdnZXN0ZWRGaWxlbmFtZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSByZXNwb25zZS51cmwoKTsKLSAgICAg
ICAgICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgICAgICAgICB1cmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzdWdnZXN0ZWRGaWxlbmFtZSA9IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwubGFzdFBhdGhDb21wb25lbnQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBTdHJpbmcgZGVzdGluYXRpb25VUkkgPSBtX2Rvd25sb2FkLT5kZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092
ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQ
TEFURk9STShHVEspCi0gICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1
cF9wcmludGYoXygiQ2Fubm90IGRldGVybWluZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2Fk
IHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1lICVzIiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKLSAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21V
VEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxzZQotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBkZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3du
bG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxlbmFtZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlv
bkVycm9yKHJlc3BvbnNlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3VyaShkZXN0aW5hdGlvblVSSS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIEdSZWZQ
dHI8R0ZpbGVPdXRwdXRTdHJlYW0+IG91dHB1dFN0cmVhbTsKLSAgICAgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBpZiAobV9hbGxvd092ZXJ3cml0ZSkKLSAgICAgICAg
ICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgbnVsbHB0ciwgRkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwg
JmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dHB1dFN0cmVh
bSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJ
TEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBpZiAo
IW91dHB1dFN0cmVhbSkgewotICAgICAgICAgICAgbV9kZXN0aW5hdGlvbkZpbGUuY2xlYXIoKTsK
LSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVy
cm9yKHJlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGludGVybWVkaWF0ZVVSSSA9IGRlc3RpbmF0aW9uVVJJ
ICsgIi53a2Rvd25sb2FkIjsKLSAgICAgICAgbV9pbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOwotICAg
ICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2ludGVybWVk
aWF0ZUZpbGUuZ2V0KCksIDAsIFRSVUUsIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgJmVycm9yLm91
dFB0cigpKSk7Ci0gICAgICAgIGlmICghbV9vdXRwdXRTdHJlYW0pIHsKLSAgICAgICAgICAgIGRv
d25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBl
cnJvci0+bWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbV9kb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24oZGVzdGluYXRpb25VUkkpOwotICAg
IH0KLQotICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFy
KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pCi0gICAg
ewotICAgICAgICBpZiAobV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpIHsKLSAgICAg
ICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlci5zdG9wKCk7Ci0gICAgICAgICAgICBoYW5kbGVS
ZXNwb25zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwotICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGdfb3V0cHV0X3N0cmVh
bV93cml0ZV9hbGwoR19PVVRQVVRfU1RSRUFNKG1fb3V0cHV0U3RyZWFtLmdldCgpKSwgZGF0YSwg
bGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0
aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0
ZXNXcml0dGVuKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqLCBkb3VibGUpCi0gICAgewotICAgICAgICBtX291dHB1dFN0cmVhbSA9IDA7Ci0KLSAg
ICAgICAgQVNTRVJUKG1fZGVzdGluYXRpb25GaWxlKTsKLSAgICAgICAgQVNTRVJUKG1faW50ZXJt
ZWRpYXRlRmlsZSk7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAg
ICAgaWYgKCFnX2ZpbGVfbW92ZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZGVzdGluYXRp
b25GaWxlLmdldCgpLCBHX0ZJTEVfQ09QWV9PVkVSV1JJVEUsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBs
YXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdl
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdG
aWxlSW5mbz4gaW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW5mb19uZXcoKSk7Ci0gICAgICAgIENT
dHJpbmcgdXJpID0gbV9yZXNwb25zZS51cmwoKS5zdHJpbmcoKS51dGY4KCk7Ci0gICAgICAgIGdf
ZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93
bmxvYWQtdXJpIiwgdXJpLmRhdGEoKSk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1
dGVfc3RyaW5nKGluZm8uZ2V0KCksICJ4YXR0cjo6eGRnLm9yaWdpbi51cmwiLCB1cmkuZGF0YSgp
KTsKLSAgICAgICAgZ19maWxlX3NldF9hdHRyaWJ1dGVzX2FzeW5jKG1fZGVzdGluYXRpb25GaWxl
LmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgIG1fZG93bmxvYWQt
PmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAgICAgZG93bmxvYWRGYWls
ZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3Iu
ZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikKLSAgICB7Ci0gICAgICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFu
ZGxlKikKLSAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7Ci0gICAgICAgIGhhbmRsZS0+
Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQoKTsKLSAgICAgICAgbV9kb3du
bG9hZC0+ZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGhhbmRsZVJlc3BvbnNlKCkKLSAgICB7Ci0gICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShudWxs
cHRyLCBtX2RlbGF5ZWRSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCBoYW5kbGVSZXNwb25z
ZUxhdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fcmVzcG9uc2UuaXNOdWxsKCkpOwotICAgICAgICBBU1NFUlQoIW1faGFuZGxlUmVz
cG9uc2VMYXRlci5pc0FjdGl2ZSgpKTsKLQotICAgICAgICBtX2RlbGF5ZWRSZXNwb25zZSA9IHJl
c3BvbnNlOwotCi0gICAgICAgIC8vIENhbGwgZGlkUmVjZWl2ZVJlc3BvbnNlIGluIGFuIGlkbGUg
dG8gbWFrZSBzdXJlIHRoZSBkb3dubG9hZCBpcyBhZGRlZAotICAgICAgICAvLyB0byB0aGUgRG93
bmxvYWRNYW5hZ2VyIGRvd25sb2FkcyBtYXAuCi0gICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRl
ci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0gICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Ci0g
ICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gbV9vdXRwdXRTdHJlYW07Ci0gICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZGVzdGluYXRpb25G
aWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1faW50ZXJtZWRpYXRlRmlsZTsKLSAgICBSZXNvdXJj
ZVJlc3BvbnNlIG1fZGVsYXllZFJlc3BvbnNlOwotICAgIFJ1bkxvb3A6OlRpbWVyPERvd25sb2Fk
Q2xpZW50PiBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7Ci0gICAgYm9vbCBtX2FsbG93T3ZlcndyaXRl
OwotfTsKLQotdm9pZCBEb3dubG9hZDo6c3RhcnQoKQotewotICAgIEFTU0VSVCghbV9kb3dubG9h
ZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2Fk
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4odGhpcyk7Ci0gICAgbV9y
ZXNvdXJjZUhhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoMCwgbV9yZXF1ZXN0LCBtX2Rv
d25sb2FkQ2xpZW50LmdldCgpLCBmYWxzZSwgZmFsc2UpOwotICAgIGRpZFN0YXJ0KCk7Ci19Ci0K
LXZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VI
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCgh
bV9kb3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBt
X2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4odGhpcyk7
Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IHJlc291cmNlSGFuZGxlLT5yZWxlYXNlRm9yRG93bmxv
YWQobV9kb3dubG9hZENsaWVudC5nZXQoKSk7Ci0gICAgZGlkU3RhcnQoKTsKLSAgICBzdGF0aWNf
Y2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5oYW5kbGVSZXNw
b25zZUxhdGVyKHJlc3BvbnNlKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6
Y2FuY2VsKCkKLXsKLSAgICBpZiAoIW1fcmVzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENhbmNlbGxpbmcgdGhlIGRvd25sb2FkIHdpbGwgZGVsZXRlIGl0IGFuZCBwbGF0
Zm9ybUludmFsaWRhdGUoKSB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAv
LyBTbywgd2UgbmVlZCB0byBzZXQgbV9yZXNvdXJjZUhhbmRsZSB0byBudWxscHRyIGJlZm9yZSBh
Y3R1YWxseSBjYW5jZWxsaW5nIHRoZSBkb3dubG9hZCB0byBtYWtlIHN1cmUKLSAgICAvLyBpdCB3
b24ndCBiZSBjYW5jZWxsZWQgYWdhaW4gYnkgcGxhdGZvcm1JbnZhbGlkYXRlLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzY1MC4KLSAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IHJlc291cmNlSGFuZGxlID0gbV9yZXNvdXJjZUhhbmRsZS5yZWxlYXNlKCk7
Ci0gICAgc3RhdGljX2Nhc3Q8RG93bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgp
KS0+Y2FuY2VsKHJlc291cmNlSGFuZGxlLmdldCgpKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAobV9yZXNvdXJjZUhhbmRsZSkgewotICAgICAg
ICBtX3Jlc291cmNlSGFuZGxlLT5jbGVhckNsaWVudCgpOwotICAgICAgICBtX3Jlc291cmNlSGFu
ZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgbV9yZXNvdXJjZUhhbmRsZSA9IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6
OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gbnVsbHB0cjsK
LX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRD
cmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBEb3dubG9hZDo6Y29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSAmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
RG93bmxvYWQ6OnVzZUNyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBj
b25zdCBDcmVkZW50aWFsJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERv
d25sb2FkOjpjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cmVjZWl2ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERv
d25sb2FkOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxv
YWRTb3VwRXJyb3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9zb3VwL0Rvd25sb2FkU291cEVycm9ycy5oCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBEb3dubG9hZFNvdXBFcnJvcnNfaAotI2RlZmluZSBEb3dubG9hZFNvdXBFcnJvcnNfaAotCi0j
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciBwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbik7Ci1XZWJD
b3JlOjpSZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERvd25sb2FkU291cEVycm9yc19oCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2Ev
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFu
YWdlckNvY29hLm1tCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkN1c3RvbVByb3RvY29sTWFuYWdlci5oIgotCi0j
aW1wb3J0ICJDaGlsZFByb2Nlc3MuaCIKLSNpbXBvcnQgIkN1c3RvbVByb3RvY29sTWFuYWdlck1l
c3NhZ2VzLmgiCi0jaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgi
Ci0jaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCi0jaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1w
b3J0ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0IDxXZWJDb3JlL1VS
TC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+
Ci0KLSNpZmRlZiBfX2hhc19pbmNsdWRlCi0jaWYgX19oYXNfaW5jbHVkZSg8Rm91bmRhdGlvbi9O
U1VSTENvbm5lY3Rpb25Qcml2YXRlLmg+KQotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5l
Y3Rpb25Qcml2YXRlLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi1AaW50ZXJmYWNlIE5TVVJMQ29ubmVj
dGlvbiAoKQotKyAoQ0ZSdW5Mb29wUmVmKXJlc291cmNlTG9hZGVyUnVuTG9vcDsKLUBlbmQKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBD
dXN0b21Qcm90b2NvbE1hbmFnZXIqIHNoYXJlZEN1c3RvbVByb3RvY29sTWFuYWdlcjsKLQotc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlQ3VzdG9tUHJvdG9jb2xJRCgpCi17Ci0gICAgc3RhdGljIHVp
bnQ2NF90IHVuaXF1ZUN1c3RvbVByb3RvY29sSUQgPSAwOwotICAgIHJldHVybiArK3VuaXF1ZUN1
c3RvbVByb3RvY29sSUQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1AaW50ZXJmYWNl
IFdLQ3VzdG9tUHJvdG9jb2wgOiBOU1VSTFByb3RvY29sIHsKLUBwcml2YXRlCi0gICAgdWludDY0
X3QgX2N1c3RvbVByb3RvY29sSUQ7Ci19Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQ7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0N1
c3RvbVByb3RvY29sCi0KLUBzeW50aGVzaXplIGN1c3RvbVByb3RvY29sSUQgPSBfY3VzdG9tUHJv
dG9jb2xJRDsKLQotKyAoQk9PTCljYW5Jbml0V2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJl
cXVlc3QKLXsKLSAgICByZXR1cm4gc2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5zdXBwb3J0
c1NjaGVtZShbW1tyZXF1ZXN0IFVSTF0gc2NoZW1lXSBsb3dlcmNhc2VTdHJpbmddKTsKLX0KLQot
KyAoTlNVUkxSZXF1ZXN0ICopY2Fub25pY2FsUmVxdWVzdEZvclJlcXVlc3Q6KE5TVVJMUmVxdWVz
dCAqKXJlcXVlc3QKLXsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotKyAoQk9PTClyZXF1ZXN0
SXNDYWNoZUVxdWl2YWxlbnQ6KE5TVVJMUmVxdWVzdCAqKWEgdG9SZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKiliCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChpZClpbml0V2l0aFJlcXVlc3Q6KE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3QgY2FjaGVkUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
KiljYWNoZWRSZXNwb25zZSBjbGllbnQ6KGlkPE5TVVJMUHJvdG9jb2xDbGllbnQ+KWNsaWVudAot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QgY2FjaGVkUmVzcG9u
c2U6Y2FjaGVkUmVzcG9uc2UgY2xpZW50OmNsaWVudF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIF9jdXN0b21Qcm90b2NvbElEID0gZ2VuZXJhdGVDdXN0
b21Qcm90b2NvbElEKCk7Ci0gICAgc2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5hZGRDdXN0
b21Qcm90b2NvbChzZWxmKTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzdGFydExv
YWRpbmcKLXsKLSAgICBzaGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXItPmNoaWxkUHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RhcnRMb2FkaW5n
KHNlbGYuY3VzdG9tUHJvdG9jb2xJRCwgW3NlbGYgcmVxdWVzdF0pLCAwKTsKLX0KLQotLSAodm9p
ZClzdG9wTG9hZGluZwotewotICAgIHNoYXJlZEN1c3RvbVByb3RvY29sTWFuYWdlci0+Y2hpbGRQ
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpTdG9w
TG9hZGluZyhzZWxmLmN1c3RvbVByb3RvY29sSUQpLCAwKTsKLSAgICBzaGFyZWRDdXN0b21Qcm90
b2NvbE1hbmFnZXItPnJlbW92ZUN1c3RvbVByb3RvY29sKHNlbGYpOwotfQotCi1AZW5kCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jb25zdCBjaGFyKiBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN1
cHBsZW1lbnROYW1lKCkKLXsKLSAgICByZXR1cm4gIkN1c3RvbVByb3RvY29sTWFuYWdlciI7Ci19
Ci0KLUN1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKENoaWxkUHJv
Y2VzcyogY2hpbGRQcm9jZXNzKQotICAgIDogbV9jaGlsZFByb2Nlc3MoY2hpbGRQcm9jZXNzKQot
ICAgICwgbV9tZXNzYWdlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQu
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyIikpCi17Ci0gICAgQVNTRVJUKCFzaGFyZWRDdXN0b21Qcm90
b2NvbE1hbmFnZXIpOwotICAgIHNoYXJlZEN1c3RvbVByb3RvY29sTWFuYWdlciA9IHRoaXM7Ci19
Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMpOwotfQotCi12b2lkIEN1
c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBbTlNVUkxQcm90b2NvbCByZWdpc3Rl
ckNsYXNzOltXS0N1c3RvbVByb3RvY29sIGNsYXNzXV07Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyU2NoZW1lKHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHNbaV0pOwotfQotCi12b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6YWRkQ3VzdG9tUHJvdG9jb2woV0tDdXN0b21Qcm90b2NvbCAqY3VzdG9tUHJv
dG9jb2wpCi17Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sKTsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAu
YWRkKGN1c3RvbVByb3RvY29sLmN1c3RvbVByb3RvY29sSUQsIGN1c3RvbVByb3RvY29sKTsKLX0K
LQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlbW92ZUN1c3RvbVByb3RvY29sKFdLQ3Vz
dG9tUHJvdG9jb2wgKmN1c3RvbVByb3RvY29sKQotewotICAgIEFTU0VSVChjdXN0b21Qcm90b2Nv
bCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9jdXN0b21Qcm90b2NvbE1hcE11dGV4KTsKLSAg
ICBtX2N1c3RvbVByb3RvY29sTWFwLnJlbW92ZShjdXN0b21Qcm90b2NvbC5jdXN0b21Qcm90b2Nv
bElEKTsKLX0KLSAgICAKLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVt
ZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBBU1NFUlQoIXNjaGVtZS5pc051bGwoKSk7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9yZWdpc3RlcmVkU2NoZW1lc011dGV4KTsKLSAgICBt
X3JlZ2lzdGVyZWRTY2hlbWVzLmFkZChzY2hlbWUpOwotfQotICAgIAotdm9pZCBDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OnVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0g
ICAgQVNTRVJUKCFzY2hlbWUuaXNOdWxsKCkpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcmVn
aXN0ZXJlZFNjaGVtZXNNdXRleCk7Ci0gICAgbV9yZWdpc3RlcmVkU2NoZW1lcy5yZW1vdmUoc2No
ZW1lKTsKLX0KLQotYm9vbCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN1cHBvcnRzU2NoZW1lKGNv
bnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcmVnaXN0ZXJlZFNjaGVt
ZXNNdXRleCk7Ci0gICAgcmV0dXJuIG1fcmVnaXN0ZXJlZFNjaGVtZXMuY29udGFpbnMoc2NoZW1l
KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoT25SZXNvdXJjZUxvYWRlclJ1bkxv
b3Aodm9pZCAoXmJsb2NrKSgpKQotewotICAgIENGUnVuTG9vcFBlcmZvcm1CbG9jayhbTlNVUkxD
b25uZWN0aW9uIHJlc291cmNlTG9hZGVyUnVuTG9vcF0sIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwg
YmxvY2spOwotICAgIENGUnVuTG9vcFdha2VVcChbTlNVUkxDb25uZWN0aW9uIHJlc291cmNlTG9h
ZGVyUnVuTG9vcF0pOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkRmFpbFdp
dGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiBlcnJvcikKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gcHJvdG9j
b2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAgIGlmICghcHJvdG9jb2wp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU0Vycm9yPiBuc0Vycm9yID0gZXJy
b3IubnNFcnJvcigpOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVyUnVuTG9vcCheIHsK
LSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sOnByb3RvY29sLmdldCgpIGRp
ZEZhaWxXaXRoRXJyb3I6bnNFcnJvci5nZXQoKV07Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVDdXN0
b21Qcm90b2NvbChwcm90b2NvbC5nZXQoKSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjpkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEpCi17Ci0gICAgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IHBy
b3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0b21Qcm90b2NvbElEKTsKLSAgICBpZiAoIXByb3Rv
Y29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpk
YXRhLnNpemUoKV0pOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVyUnVuTG9vcCheIHsK
LSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sOnByb3RvY29sLmdldCgpIGRp
ZExvYWREYXRhOm5zRGF0YS5nZXQoKV07Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVpbnQzMl90IGNhY2hl
U3RvcmFnZVBvbGljeSkKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gcHJvdG9j
b2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAgIGlmICghcHJvdG9jb2wp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBuc1Jlc3Bv
bnNlID0gcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNl
TG9hZGVyUnVuTG9vcCheIHsKLSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29s
OnByb3RvY29sLmdldCgpIGRpZFJlY2VpdmVSZXNwb25zZTpuc1Jlc3BvbnNlLmdldCgpIGNhY2hl
U3RvcmFnZVBvbGljeTpzdGF0aWNfY2FzdDxOU1VSTENhY2hlU3RvcmFnZVBvbGljeT4oY2FjaGVT
dG9yYWdlUG9saWN5KV07Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
OjpkaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpCi17Ci0gICAgUmV0
YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0b21Q
cm90b2NvbElEKTsKLSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
aXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKF4gewotICAgICAgICBbW3Byb3RvY29sIGNs
aWVudF0gVVJMUHJvdG9jb2xEaWRGaW5pc2hMb2FkaW5nOnByb3RvY29sLmdldCgpXTsKLSAgICB9
KTsKLQotICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKHByb3RvY29sLmdldCgpKTsKLX0KLQotdm9p
ZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3Qg
Y3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewot
ICAgIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbCA9IHByb3RvY29sRm9ySUQo
Y3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gbnNSZXF1ZXN0ID0gcmVxdWVzdC5uc1VSTFJl
cXVlc3QoV2ViQ29yZTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7Ci0gICAgUmV0YWluUHRyPE5TVVJM
UmVzcG9uc2U+IG5zUmVkaXJlY3RSZXNwb25zZSA9IHJlZGlyZWN0UmVzcG9uc2UubnNVUkxSZXNw
b25zZSgpOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVyUnVuTG9vcChbcHJvdG9jb2ws
IG5zUmVxdWVzdCwgbnNSZWRpcmVjdFJlc3BvbnNlXSgpIHsKLSAgICAgICAgW1twcm90b2NvbCBj
bGllbnRdIFVSTFByb3RvY29sOnByb3RvY29sLmdldCgpIHdhc1JlZGlyZWN0ZWRUb1JlcXVlc3Q6
bnNSZXF1ZXN0LmdldCgpIHJlZGlyZWN0UmVzcG9uc2U6bnNSZWRpcmVjdFJlc3BvbnNlLmdldCgp
XTsKLSAgICB9KTsKLX0KLQotUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6cHJvdG9jb2xGb3JJRCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VzdG9tUHJvdG9jb2xNYXBNdXRleCk7Ci0KLSAgICBD
dXN0b21Qcm90b2NvbE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2N1c3RvbVByb3RvY29sTWFw
LmZpbmQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKGl0ID09IG1fY3VzdG9tUHJvdG9jb2xN
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgQVNTRVJUKGl0LT52YWx1
ZSk7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEN1c3RvbVByb3RvY29sTWFuYWdlcl9oCi0jZGVm
aW5lIEN1c3RvbVByb3RvY29sTWFuYWdlcl9oCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
Ci1PQkpDX0NMQVNTIFdLQ3VzdG9tUHJvdG9jb2w7Ci0jZWxzZQotI2luY2x1ZGUgIkN1c3RvbVBy
b3RvY29sTWFuYWdlckltcGwuaCIKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3Mg
RGF0YVJlZmVyZW5jZTsKLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIENoaWxkUHJvY2VzczsKLXN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczsKLQotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIDogcHVibGljIE5ldHdv
cmtQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVz
c2FnZVJlY2VpdmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21Qcm90b2NvbE1h
bmFnZXIpOwotcHVibGljOgotICAgIGV4cGxpY2l0IEN1c3RvbVByb3RvY29sTWFuYWdlcihDaGls
ZFByb2Nlc3MqKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwot
Ci0gICAgQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
UHJvY2VzczsgfQotCi0gICAgdm9pZCByZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBzdXBwb3J0
c1NjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2
b2lkIGFkZEN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKik7Ci0gICAgdm9pZCByZW1v
dmVDdXN0b21Qcm90b2NvbChXS0N1c3RvbVByb3RvY29sICopOwotI2VuZGlmCi0KLXByaXZhdGU6
Ci0gICAgLy8gQ2hpbGRQcm9jZXNzU3VwcGxlbWVudAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5l
Y3Rpb24oSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBOZXR3b3JrUHJvY2Vz
c1N1cHBsZW1lbnQKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkRmFpbFdpdGhFcnJv
cih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
Jik7Ci0gICAgdm9pZCBkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
dWludDMyX3QgY2FjaGVTdG9yYWdlUG9saWN5KTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmco
dWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgdm9pZCB3YXNSZWRpcmVjdGVkVG9SZXF1
ZXN0KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
OwotCi0gICAgQ2hpbGRQcm9jZXNzKiBtX2NoaWxkUHJvY2VzczsKLSAgICBSZWZQdHI8V29ya1F1
ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX3JlZ2lzdGVyZWRTY2hlbWVzOwotICAgIExvY2sgbV9yZWdpc3RlcmVkU2NoZW1l
c011dGV4OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZXRhaW5QdHI8V0tDdXN0
b21Qcm90b2NvbD4+IEN1c3RvbVByb3RvY29sTWFwOwotICAgIEN1c3RvbVByb3RvY29sTWFwIG1f
Y3VzdG9tUHJvdG9jb2xNYXA7Ci0gICAgTG9jayBtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXg7Ci0g
ICAgCi0gICAgLy8gV0tDdXN0b21Qcm90b2NvbCBvYmplY3RzIGNhbiBiZSByZW1vdmVkIGZyb20g
dGhlIG1fY3VzdG9tUHJvdG9jb2xNYXAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgotICAgIC8vIFdl
IHJldHVybiBhIFJldGFpblB0ciBoZXJlIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHJldHVybiBh
IHJhdyBwb2ludGVyIHNpbmNlIHRoZSBvYmplY3QgbWlnaHQgaW1tZWRpYXRlbHkgYmUgZGVzdHJv
eWVkIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLgotICAgIFJldGFpblB0cjxXS0N1c3RvbVByb3Rv
Y29sPiBwcm90b2NvbEZvcklEKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwotI2Vsc2UKLSAg
ICAvLyBGSVhNRTogTW92ZSBtYWMgc3BlY2lmaWMgY29kZSB0byBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsPiBt
X2ltcGw7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTk0MjYzKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3Rv
Y29sTWFuYWdlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMSwzMiArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0j
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IEN1c3Rv
bVByb3RvY29sTWFuYWdlciB7Ci0gICAgRGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Q
cm90b2NvbElELCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQotICAgIERpZExvYWREYXRh
KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotICAg
IERpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCB1aW50MzJfdCBjYWNoZVN0b3JhZ2VQb2xpY3kpCi0g
ICAgRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotICAgIFdhc1Jl
ZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVkaXJlY3RS
ZXNwb25zZSk7Ci0KLSAgICBSZWdpc3RlclNjaGVtZShTdHJpbmcgbmFtZSkKLSAgICBVbnJlZ2lz
dGVyU2NoZW1lKFN0cmluZyBuYW1lKQotfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5jcHAJKHJldmlzaW9uIDE5NDI2MykK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1
c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCi0KLSNpbmNsdWRl
ICJDaGlsZFByb2Nlc3MuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0u
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKQotewotICAgIHN0YXRp
YyB1aW50NjRfdCB1bmlxdWVDdXN0b21Qcm90b2NvbElEID0gMDsKLSAgICByZXR1cm4gKyt1bmlx
dWVDdXN0b21Qcm90b2NvbElEOwotfQotCi1zdHJ1Y3QgV2ViU291cFJlcXVlc3RBc3luY0RhdGEg
ewotICAgIFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKEdUYXNrKiB0YXNrLCBXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWMqIHJlcXVlc3RHZW5lcmljKQotICAgICAgICA6IHRhc2sodGFzaykKLSAgICAg
ICAgLCByZXF1ZXN0KHJlcXVlc3RHZW5lcmljKQotICAgICAgICAsIGNhbmNlbGxhYmxlKGdfdGFz
a19nZXRfY2FuY2VsbGFibGUodGFzaykpCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgc3RydWN0
IGNvbnRhaW5zIGEgbnVsbCByZXF1ZXN0LCBpdCBpcyBiZWNhdXNlIHRoZSByZXF1ZXN0IGZhaWxl
ZC4KLSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChyZXF1ZXN0KSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAgfQotCi0gICAgfldlYlNv
dXBSZXF1ZXN0QXN5bmNEYXRhKCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXF1ZXN0KQotICAgICAg
ICAgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChyZXF1ZXN0KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAgfQotCi0gICAgYm9vbCByZXF1
ZXN0RmFpbGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChjYW5jZWxsYWJsZS5nZXQoKSkgfHwgIXJlcXVlc3Q7Ci0gICAgfQotCi0gICAgR1JlZlB0
cjxHVGFzaz4gcmVsZWFzZVRhc2soKQotICAgIHsKLSAgICAgICAgR1Rhc2sqIHJldHVyblZhbHVl
ID0gdGFzazsKLSAgICAgICAgdGFzayA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBhZG9wdEdS
ZWYocmV0dXJuVmFsdWUpOwotICAgIH0KLQotICAgIEdUYXNrKiB0YXNrOwotICAgIFdlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdDsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2Fu
Y2VsbGFibGU7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IHN0cmVhbTsKLX07Ci0KLUN1c3Rv
bVByb3RvY29sTWFuYWdlckltcGw6OkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoQ2hpbGRQcm9j
ZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0g
ICAgLCBtX3NjaGVtZXMoYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhn
X2ZyZWUpKSkKLXsKLX0KLQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6fkN1c3RvbVByb3Rv
Y29sTWFuYWdlckltcGwoKQotewotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6
OnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChtX3NjaGVt
ZXMtPmxlbikKLSAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobV9zY2hlbWVz
LmdldCgpLCBtX3NjaGVtZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChtX3NjaGVt
ZXMuZ2V0KCksIGdfc3RyZHVwKHNjaGVtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZ19wdHJfYXJy
YXlfYWRkKG1fc2NoZW1lcy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vz
c2lvbiA9IFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3Vw
U2Vzc2lvbigpOwotICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIGdlbmVyaWNSZXF1ZXN0Q2xhc3MgPSBz
dGF0aWNfY2FzdDxTb3VwUmVxdWVzdENsYXNzKj4oZ190eXBlX2NsYXNzX3JlZihXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwotICAgIGdlbmVyaWNSZXF1ZXN0Q2xhc3MtPnNjaGVt
ZXMgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KG1f
c2NoZW1lcy0+cGRhdGEpKTsKLSAgICBzdGF0aWNfY2FzdDxXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWNDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVS
SUMpKS0+Y2xpZW50ID0gdGhpczsKLSAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmVfYnlfdHlw
ZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7Ci19Ci0KLWJvb2wg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6c3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCi17Ci0gICAgaWYgKHNjaGVtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQ1N0cmluZyBjU2NoZW1lID0gc2NoZW1lLnV0ZjgoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zY2hlbWVzLT5sZW47ICsraSkgewotICAgICAgICBpZiAoY1NjaGVt
ZSA9PSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19wdHJfYXJyYXlfaW5kZXgobV9zY2hlbWVzLmdldCgp
LCBpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkRmFpbFdpdGhFcnJv
cih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvcikKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSogZGF0YSA9IG1fY3VzdG9t
UHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIEFTU0VSVChkYXRhKTsKLQot
ICAgIC8vIEVpdGhlciB3ZSBoYXZlbid0IHN0YXJ0ZWQgcmVhZGluZyB0aGUgc3RyZWFtIHlldCwg
aW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZQotICAgIC8vIHRhc2sgZmlyc3Qs
IG9yIHdlIGZhaWxlZCByZWFkaW5nIGl0IGFuZCB0aGUgdGFzayB3YXMgYWxyZWFkeSBjb21wbGV0
ZWQgYnkgZGlkTG9hZERhdGEoKS4KLSAgICBBU1NFUlQoIWRhdGEtPnN0cmVhbSB8fCAhZGF0YS0+
dGFzayk7Ci0KLSAgICBpZiAoIWRhdGEtPnN0cmVhbSkgewotICAgICAgICBHUmVmUHRyPEdUYXNr
PiB0YXNrID0gZGF0YS0+cmVsZWFzZVRhc2soKTsKLSAgICAgICAgQVNTRVJUKHRhc2suZ2V0KCkp
OwotICAgICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKGVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAotICAgICAgICAgICAgZXJy
b3IuZXJyb3JDb2RlKCksICIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1EaWRGYWlsV2l0aEVycm9yKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEt
PnN0cmVhbS5nZXQoKSksIGVycm9yKTsKLQotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAucmVtb3Zl
KGN1c3RvbVByb3RvY29sSUQpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6
OmRpZExvYWREYXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSog
ZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIC8v
IFRoZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3QgbWFwIGlm
IGEgcHJldmlvdXMgY2h1bmsgZmFpbGVkCi0gICAgLy8gYW5kIGEgbmV3IG1lc3NhZ2Ugd2FzIHNl
bnQgYnkgdGhlIFVJIHByb2Nlc3MgYmVmb3JlIGJlaW5nIG5vdGlmaWVkIGFib3V0IHRoZSBmYWls
dXJlLgotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFkYXRhLT5z
dHJlYW0pIHsKLSAgICAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGRhdGEtPnJlbGVhc2VUYXNr
KCk7Ci0gICAgICAgIEFTU0VSVCh0YXNrLmdldCgpKTsKLQotICAgICAgICBnb2Zmc2V0IHNvdXBD
b250ZW50TGVuZ3RoID0gc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChTT1VQX1JFUVVF
U1QoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkpKSk7Ci0gICAgICAgIHVpbnQ2
NF90IGNvbnRlbnRMZW5ndGggPSBzb3VwQ29udGVudExlbmd0aCA9PSAtMSA/IDAgOiBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oc291cENvbnRlbnRMZW5ndGgpOwotICAgICAgICBpZiAoIWRhdGFSZWZl
cmVuY2Uuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSByZXBseSwganVzdCBjcmVhdGUg
YW5kIGVtcHR5IEdNZW1vcnlJbnB1dFN0cmVhbS4KLSAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9
IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChkYXRhUmVm
ZXJlbmNlLnNpemUoKSA9PSBjb250ZW50TGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBXZSBkb24n
dCBleHBlY3QgbW9yZSBkYXRhLCBzbyB3ZSBjYW4ganVzdCBjcmVhdGUgYSBHTWVtb3J5SW5wdXRT
dHJlYW0gd2l0aCBhbGwgdGhlIGRhdGEuCi0gICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSBnX21l
bW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShnX21lbWR1cChkYXRhUmVmZXJlbmNlLmRh
dGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpLCBjb250ZW50TGVuZ3RoLCBnX2ZyZWUpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgZXhwZWN0IG1vcmUgZGF0YSBjaHVua3Mg
ZnJvbSB0aGUgVUkgcHJvY2Vzcy4KLSAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IHdlYmtpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcoY29udGVudExlbmd0aCk7Ci0gICAgICAgICAgICB3ZWJr
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVU
X1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJl
ZmVyZW5jZS5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRl
cih0YXNrLmdldCgpLCBkYXRhLT5zdHJlYW0uZ2V0KCksIGdfb2JqZWN0X3VucmVmKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkYXRhLT5yZXF1ZXN0RmFpbGVkKCkpIHsKLSAg
ICAgICAgLy8gUmVzb3VyY2VSZXF1ZXN0IGZhaWxlZCBvciBpdCB3YXMgY2FuY2VsbGVkLiBJdCBk
b2Vzbid0IG1hdHRlciBoZXJlIHRoZSBlcnJvciBvciBpZiBpdCB3YXMgY2FuY2VsbGVkLAotICAg
ICAgICAvLyBiZWNhdXNlIHRoYXQncyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIHJlc291cmNlIGhh
bmRsZSBjbGllbnQsIHdlIGp1c3Qgd2FudCB0byBub3RpZnkgdGhlIFVJIHByb2Nlc3MKLSAgICAg
ICAgLy8gdG8gc3RvcCByZWFkaW5nIGRhdGEgZnJvbSB0aGUgdXNlciBpbnB1dCBzdHJlYW0uIElm
IFVJIHByb2Nlc3MgYWxyZWFkeSBzZW50IGFsbCB0aGUgZGF0YSB3ZSBzaW1wbHkKLSAgICAgICAg
Ly8gZmluaXNoIHNpbGVudGx5LgotICAgICAgICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW1GaW5pc2hlZChXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJl
YW0uZ2V0KCkpKSkKLSAgICAgICAgICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RvcExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCks
IDApOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5z
dHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkp
OwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZFJlY2VpdmVSZXNwb25z
ZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSogZGF0YSA9IG1f
Y3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIC8vIFRoZSBkYXRh
IG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3QgbWFwIGlmIGFuIGVycm9y
IGhhcHBlbmVkIGV2ZW4gYmVmb3JlIHRoaXMgcG9pbnQuCi0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZGF0YS0+dGFzayk7Ci0KLSAgICBXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWMqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ190YXNr
X2dldF9zb3VyY2Vfb2JqZWN0KGRhdGEtPnRhc2spKTsKLSAgICB3ZWJraXRTb3VwUmVxdWVzdEdl
bmVyaWNTZXRDb250ZW50TGVuZ3RoKHJlcXVlc3QsIHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExl
bmd0aCgpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgOiAtMSk7Ci0gICAgd2Vi
a2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVxdWVzdCwgIXJlc3BvbnNlLm1p
bWVUeXBlKCkuaXNFbXB0eSgpID8gcmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCkuZGF0YSgpIDog
MCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkRmluaXNoTG9hZGlu
Zyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewotICAgIEFTU0VSVChtX2N1c3RvbVByb3Rv
Y29sTWFwLmNvbnRhaW5zKGN1c3RvbVByb3RvY29sSUQpKTsKLSAgICBtX2N1c3RvbVByb3RvY29s
TWFwLnJlbW92ZShjdXN0b21Qcm90b2NvbElEKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1h
bmFnZXJJbXBsOjpzdGFydChHVGFzayogdGFzaykKLXsKLSAgICB1aW50NjRfdCBjdXN0b21Qcm90
b2NvbElEID0gZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCk7Ci0gICAgV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljKiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKGdfdGFza19n
ZXRfc291cmNlX29iamVjdCh0YXNrKSk7Ci0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5zZXQoY3Vz
dG9tUHJvdG9jb2xJRCwgc3RkOjptYWtlX3VuaXF1ZTxXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YT4o
dGFzaywgcmVxdWVzdCkpOwotCi0gICAgbV9jaGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpTdGFydExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCwg
KndlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3QocmVxdWVzdCkpLCAwKTsKLX0KLQot
R0lucHV0U3RyZWFtKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpmaW5pc2goR1Rhc2sqIHRh
c2ssIEdFcnJvcioqIGVycm9yKQotewotICAgIGdwb2ludGVyIGlucHV0U3RyZWFtID0gZ190YXNr
X3Byb3BhZ2F0ZV9wb2ludGVyKHRhc2ssIGVycm9yKTsKLSAgICByZXR1cm4gaW5wdXRTdHJlYW0g
PyBHX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbSkgOiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2Nv
bE1hbmFnZXJJbXBsLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbF9oCi0jZGVm
aW5lIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGxfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEYXRhUmVmZXJlbmNlOwotfSAvLyBuYW1l
c3BhY2UgSVBDCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJlc291cmNlRXJyb3I7Ci1j
bGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgQ2hpbGRQcm9jZXNzOwotc3RydWN0IFdlYlNvdXBSZXF1ZXN0
QXN5bmNEYXRhOwotCi1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsIDogcHVibGljIFdl
YkNvcmU6OldlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCk7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbChDaGlsZFByb2Nlc3MqKTsKLSAgICB+Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VySW1wbCgpOwotCi0gICAgdm9pZCByZWdpc3RlclNjaGVtZShjb25zdCBT
dHJpbmcmKTsKLSAgICBib29sIHN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
dm9pZCBkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIGRpZExvYWREYXRhKHVpbnQ2NF90IGN1
c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodWludDY0X3Qg
Y3VzdG9tUHJvdG9jb2xJRCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzdGFydChHVGFzayopIGZp
bmFsIG92ZXJyaWRlOwotICAgIEdJbnB1dFN0cmVhbSogZmluaXNoKEdUYXNrKiwgR0Vycm9yKiop
IGZpbmFsIG92ZXJyaWRlOwotCi0gICAgQ2hpbGRQcm9jZXNzKiBtX2NoaWxkUHJvY2VzczsKLSAg
ICBHUmVmUHRyPEdQdHJBcnJheT4gbV9zY2hlbWVzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIHN0
ZDo6dW5pcXVlX3B0cjxXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YT4+IG1fY3VzdG9tUHJvdG9jb2xN
YXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEN1c3RvbVByb3Rv
Y29sTWFuYWdlckltcGxfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3Rv
Y29sTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNz
LmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5oIgotI2luY2x1ZGUgIkN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY29uc3QgY2hhciogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdXBwbGVtZW50
TmFtZSgpCi17Ci0gICAgcmV0dXJuICJDdXN0b21Qcm90b2NvbE1hbmFnZXIiOwotfQotCi1DdXN0
b21Qcm90b2NvbE1hbmFnZXI6OkN1c3RvbVByb3RvY29sTWFuYWdlcihDaGlsZFByb2Nlc3MqIGNo
aWxkUHJvY2VzcykKLSAgICA6IG1fY2hpbGRQcm9jZXNzKGNoaWxkUHJvY2VzcykKLSAgICAsIG1f
bWVzc2FnZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkN1c3RvbVBy
b3RvY29sTWFuYWdlciIpKQotICAgICwgbV9pbXBsKHN0ZDo6bWFrZV91bmlxdWU8Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VySW1wbD4oY2hpbGRQcm9jZXNzKSkKLXsKLX0KLQotdm9pZCBDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX21l
c3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Ojppbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVn
aXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29sc1tpXSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVt
ZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBtX2ltcGwtPnJlZ2lzdGVyU2NoZW1lKHNj
aGVtZSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp1bnJlZ2lzdGVyU2NoZW1l
KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBDdXN0
b21Qcm90b2NvbE1hbmFnZXI6OnN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQot
ewotICAgIHJldHVybiBtX2ltcGwtPnN1cHBvcnRzU2NoZW1lKHNjaGVtZSk7Ci19Ci0KLXZvaWQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVBy
b3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIG1f
aW1wbC0+ZGlkRmFpbFdpdGhFcnJvcihjdXN0b21Qcm90b2NvbElELCBlcnJvcik7Ci19Ci0KLXZv
aWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90
b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpCi17Ci0gICAg
bV9pbXBsLT5kaWRMb2FkRGF0YShjdXN0b21Qcm90b2NvbElELCBkYXRhUmVmZXJlbmNlKTsKLX0K
LQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRf
dCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgdWludDMyX3QpCi17Ci0gICAgbV9pbXBsLT5kaWRSZWNlaXZlUmVzcG9uc2UoY3VzdG9t
UHJvdG9jb2xJRCwgcmVzcG9uc2UpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
ZGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewotICAgIG1faW1w
bC0+ZGlkRmluaXNoTG9hZGluZyhjdXN0b21Qcm90b2NvbElEKTsKLX0KLQotdm9pZCBDdXN0b21Q
cm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMTk0MjYz
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNDRi5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6TmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKQotewotfQotCi12b2lkIE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAg
IGVuY29kZXIuZW5jb2RlRW51bShjYWNoZU1vZGVsKTsKLSAgICBlbmNvZGVyIDw8IGRpc2tDYWNo
ZVNpemVPdmVycmlkZTsKLSAgICBlbmNvZGVyIDw8IGNhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RF
dmFsdWF0aW9uOwotICAgIGVuY29kZXIgPDwgZGlza0NhY2hlRGlyZWN0b3J5OwotICAgIGVuY29k
ZXIgPDwgZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQotICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlOwotICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nOwotI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKLSAgICBlbmNv
ZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uOwot
I2VuZGlmCi0jZW5kaWYKLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJTKQotICAgIGVuY29kZXIg
PDwgY29va2llU3RvcmFnZURpcmVjdG9yeTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKLSAgICBlbmNvZGVyIDw8
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0o
SU9TKQotICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBlbmNvZGVyIDw8IGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBlbmNvZGVyIDw8IHBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSNlbmRpZgotICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwot
ICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHM7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZW5jb2RlciA8PCBwYXJlbnRQcm9jZXNzTmFtZTsKLSAg
ICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7Ci0gICAgZW5jb2RlciA8PCBu
c1VSTENhY2hlTWVtb3J5Q2FwYWNpdHk7Ci0gICAgZW5jb2RlciA8PCBuc1VSTENhY2hlRGlza0Nh
cGFjaXR5OwotICAgIGVuY29kZXIgPDwgaHR0cFByb3h5OwotICAgIGVuY29kZXIgPDwgaHR0cHNQ
cm94eTsKLSNpZiBUQVJHRVRfT1NfSVBIT05FIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwKQotICAgIElQQzo6ZW5jb2RlKGVuY29k
ZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKLSNlbmRpZgotI2VuZGlmCi0jaWYgVVNFKFNP
VVApCi0gICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7Ci0gICAgZW5j
b2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7Ci0gICAgZW5jb2Rlci5lbmNvZGVF
bnVtKGNvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7
Ci0gICAgZW5jb2RlciA8PCBsYW5ndWFnZXM7Ci0jZW5kaWYKLX0KLQotYm9vbCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcmVzdWx0KQotewotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByaXZhdGVCcm93c2luZ0VuYWJsZWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNhY2hl
TW9kZWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuZGlza0NhY2hlU2l6ZU92ZXJyaWRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFs
dWF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmRpc2tDYWNoZURpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNo
b3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04p
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVSZXZhbGlkYXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LSNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuY29va2llU3RvcmFnZURpcmVjdG9yeSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDExMDAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51aVByb2Nl
c3NDb29raWVTdG9yYWdlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRG
b3JDdXN0b21Qcm90b2NvbHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGFyZW50UHJvY2Vzc05hbWUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubnNVUkxD
YWNoZURpc2tDYXBhY2l0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5odHRwUHJveHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaHR0cHNQcm94eSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNpZiBUQVJHRVRfT1NfSVBIT05FIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwKQotICAgIGlmICghSVBDOjpkZWNvZGUo
ZGVjb2RlciwgcmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFVTRShTT1VQKQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZ25vcmVUTFNFcnJvcnMpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubGFuZ3VhZ2Vz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzX2gKLSNkZWZpbmUgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnNfaAot
Ci0jaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgotI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIK
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLSNpZiBVU0UoU09VUCkKLSNpbmNsdWRlICJIVFRQQ29va2llQWNjZXB0UG9saWN5LmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIElQQyB7Ci0gICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwotICAg
IGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVj
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7Ci0gICAgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiwgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQotICAgIGJvb2wgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZDsKLSAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWw7Ci0gICAgaW50NjRf
dCBkaXNrQ2FjaGVTaXplT3ZlcnJpZGUgeyAtMSB9OwotICAgIGJvb2wgY2FuSGFuZGxlSFRUUFNT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb247Ci0KLSAgICBTdHJpbmcgZGlza0NhY2hlRGlyZWN0b3J5Owot
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBkaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgYm9vbCBzaG91bGRFbmFibGVO
ZXR3b3JrQ2FjaGU7Ci0gICAgYm9vbCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVFZmZpY2FjeUxv
Z2dpbmc7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9O
KQotICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVSZXZhbGlkYXRp
b247Ci0jZW5kaWYKLSNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwotI2VuZGlmCi0jaWYgUExB
VEZPUk0oSU9TKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb250
YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgot
ICAgIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwotCi0gICAgVmVjdG9yPFN0
cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHM7Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBTdHJpbmcgcGFyZW50UHJvY2Vzc05hbWU7Ci0gICAgU3RyaW5nIHVp
UHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7Ci0gICAgdWludDY0X3QgbnNVUkxDYWNoZU1lbW9yeUNh
cGFjaXR5OwotICAgIHVpbnQ2NF90IG5zVVJMQ2FjaGVEaXNrQ2FwYWNpdHk7Ci0KLSAgICBTdHJp
bmcgaHR0cFByb3h5OwotICAgIFN0cmluZyBodHRwc1Byb3h5OwotI2lmIFRBUkdFVF9PU19JUEhP
TkUgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDExMDApCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbmV0d29ya0FUU0NvbnRleHQ7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0gICAgU3RyaW5nIGNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aDsKLSAgICB1aW50MzJfdCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7
Ci0gICAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgYm9v
bCBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotI2VuZGlm
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oCShyZXZpc2lvbiAxOTQy
NjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1N1cHBs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRfaAotI2RlZmluZSBOZXR3b3JrUHJvY2Vzc1N1
cHBsZW1lbnRfaAotCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oIgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OwotCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQgOiBwdWJsaWMgQ2hpbGRQcm9jZXNz
U3VwcGxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29uc3Qg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQotICAgIHsKLSAgICB9Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVu
dF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAxOTQyNjMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiRGF0YVJl
ZmVyZW5jZS5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLU5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycygpCi0gICAgOiBp
ZGVudGlmaWVyKDApCi0gICAgLCB3ZWJQYWdlSUQoMCkKLSAgICAsIHdlYkZyYW1lSUQoMCkKLSAg
ICAsIHNlc3Npb25JRChTZXNzaW9uSUQ6OmVtcHR5U2Vzc2lvbklEKCkpCi0gICAgLCBjb250ZW50
U25pZmZpbmdQb2xpY3koU25pZmZDb250ZW50KQotICAgICwgYWxsb3dTdG9yZWRDcmVkZW50aWFs
cyhEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBjbGllbnRDcmVkZW50aWFsUG9s
aWN5KERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpCi0gICAgLCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHRydWUpCi0gICAgLCBkZWZlcnNMb2FkaW5nKGZh
bHNlKQotICAgICwgbmVlZHNDZXJ0aWZpY2F0ZUluZm8oZmFsc2UpCi0gICAgLCBtYXhpbXVtQnVm
ZmVyaW5nVGltZSgwX21zKQotewotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBpZGVudGlmaWVyOwotICAgIGVuY29kZXIgPDwgd2ViUGFnZUlEOwotICAgIGVu
Y29kZXIgPDwgd2ViRnJhbWVJRDsKLSAgICBlbmNvZGVyIDw8IHNlc3Npb25JRDsKLSAgICBlbmNv
ZGVyIDw8IHJlcXVlc3Q7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGJvb2w+KHJlcXVl
c3QuaHR0cEJvZHkoKSk7Ci0gICAgaWYgKHJlcXVlc3QuaHR0cEJvZHkoKSkgewotICAgICAgICBy
ZXF1ZXN0Lmh0dHBCb2R5KCktPmVuY29kZShlbmNvZGVyKTsKLQotICAgICAgICBjb25zdCBWZWN0
b3I8Rm9ybURhdGFFbGVtZW50PiYgZWxlbWVudHMgPSByZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1l
bnRzKCk7Ci0gICAgICAgIHNpemVfdCBmaWxlQ291bnQgPSAwOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMCwgY291bnQgPSBlbGVtZW50cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6
RW5jb2RlZEZpbGUpCi0gICAgICAgICAgICAgICAgKytmaWxlQ291bnQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSByZXF1ZXN0Qm9keVNhbmRib3hF
eHRlbnNpb25zOwotICAgICAgICByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLmFsbG9jYXRl
KGZpbGVDb3VudCk7Ci0gICAgICAgIHNpemVfdCBleHRlbnNpb25JbmRleCA9IDA7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGVsZW1lbnRzLnNpemUoKTsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGVsZW1l
bnRzW2ldOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVu
dDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBh
dGggPSBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gZWxlbWVudC5tX2dlbmVyYXRlZEZp
bGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lOwotICAgICAgICAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgcmVx
dWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tleHRlbnNpb25JbmRleCsrXSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW5jb2RlciA8PCByZXF1ZXN0Qm9keVNhbmRib3hFeHRl
bnNpb25zOwotICAgIH0KLQotICAgIGlmIChyZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkpIHsK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlcXVlc3RTYW5kYm94RXh0ZW5zaW9u
OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocmVxdWVzdC51cmwoKS5m
aWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgcmVxdWVzdFNhbmRi
b3hFeHRlbnNpb24pOwotICAgICAgICBlbmNvZGVyIDw8IHJlcXVlc3RTYW5kYm94RXh0ZW5zaW9u
OwotICAgIH0KLQotICAgIGVuY29kZXIuZW5jb2RlRW51bShjb250ZW50U25pZmZpbmdQb2xpY3kp
OwotICAgIGVuY29kZXIuZW5jb2RlRW51bShhbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0oY2xpZW50Q3JlZGVudGlhbFBvbGljeSk7Ci0gICAgZW5jb2RlciA8
PCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGVuY29kZXIg
PDwgZGVmZXJzTG9hZGluZzsKLSAgICBlbmNvZGVyIDw8IG5lZWRzQ2VydGlmaWNhdGVJbmZvOwot
ICAgIGVuY29kZXIgPDwgbWF4aW11bUJ1ZmZlcmluZ1RpbWU7Ci19Ci0KLWJvb2wgTmV0d29ya1Jl
c291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5pZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQud2ViUGFnZUlEKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQud2ViRnJhbWVJRCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnNlc3Npb25JRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnJlcXVlc3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGhhc0hUVFBCb2R5OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzSFRUUEJvZHkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFzSFRUUEJvZHkpIHsKLSAgICAgICAgUmVm
UHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IEZvcm1EYXRhOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghZm9ybURhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
c3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KGZvcm1EYXRhLnJlbGVhc2UoKSk7Ci0KLSAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9u
SGFuZGxlczsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1ZXN0Qm9keVNhbmRib3hF
eHRlbnNpb25IYW5kbGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGV4
dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShyZXF1ZXN0Qm9keVNhbmRib3hFeHRl
bnNpb25IYW5kbGVzW2ldKSkKLSAgICAgICAgICAgICAgICByZXN1bHQucmVxdWVzdEJvZHlTYW5k
Ym94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAocmVzdWx0LnJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSkgewotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc291cmNlU2FuZGJveEV4dGVuc2lv
bkhhbmRsZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC5yZXNv
dXJjZVNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocmVzb3VyY2VT
YW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
RW51bShyZXN1bHQuY29udGVudFNuaWZmaW5nUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5hbGxvd1N0b3JlZENyZWRlbnRp
YWxzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVt
KHJlc3VsdC5jbGllbnRDcmVkZW50aWFsUG9saWN5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuZGVmZXJzTG9hZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZWVkc0NlcnRpZmljYXRlSW5mbykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXhpbXVt
QnVmZmVyaW5nVGltZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnNfaAotI2RlZmluZSBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyc19oCi0K
LSNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nl
c3Npb25JRC5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLSAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7
Ci0gICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
dHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwotCi1jbGFzcyBOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyB7Ci1wdWJsaWM6Ci0gICAgTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmKTsKLQotICAgIFJlc291cmNlTG9hZElkZW50aWZp
ZXIgaWRlbnRpZmllcjsKLSAgICB1aW50NjRfdCB3ZWJQYWdlSUQ7Ci0gICAgdWludDY0X3Qgd2Vi
RnJhbWVJRDsKLSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEOwotICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVu
c2lvbj4+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnM7IC8vIENyZWF0ZWQgYXV0b21hdGlj
YWxseSBmb3IgdGhlIHNlbmRlci4KLSAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gcmVzb3Vy
Y2VTYW5kYm94RXh0ZW5zaW9uOyAvLyBDcmVhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBzZW5k
ZXIuCi0gICAgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1Bv
bGljeTsKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRp
YWxzOwotICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlh
bFBvbGljeTsKLSAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3Q7Ci0gICAgYm9vbCBkZWZlcnNMb2FkaW5nOwotICAgIGJvb2wgbmVlZHNDZXJ0aWZpY2F0ZUlu
Zm87Ci0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtYXhpbXVtQnVmZmVyaW5nVGltZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9E
b3dubG9hZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25s
b2FkLmgiCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRvd25s
b2FkUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlci5oIgotI2luY2x1
ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLSNpZiAhVVNFKE5FVFdP
UktfU0VTU0lPTikKLSNpbmNsdWRlICJEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgiCi0j
ZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLURvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImIGRvd25sb2FkTWFuYWdlciwgY29uc3QgTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIERv
d25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotI2Vs
c2UKLURvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwg
RG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi0j
ZW5kaWYKLSAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKLSAgICAsIG1f
ZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0jaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKLSAgICAsIG1fc2Vzc2lvbihzZXNzaW9uKQotI2VuZGlmCi17Ci0g
ICAgQVNTRVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwotCi0gICAgbV9kb3dubG9hZE1h
bmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKLX0KLQotRG93bmxvYWQ6On5Eb3dubG9hZCgpCi17
Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWRE
ZXN0cm95RG93bmxvYWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkU3RhcnQoKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFN0YXJ0KG1fcmVxdWVzdCkpOwotfQot
Ci12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCi0gICAg
bV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwotfQotCi12b2lkIERvd25s
b2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7Ci19Ci0KLWJvb2wgRG93
bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgYm9vbCByZXN1bHQ7Ci0gICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6U2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUobWltZVR5cGUp
LCBNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6U2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5
cGU6OlJlcGx5KHJlc3VsdCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLVN0cmluZyBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUp
Ci17Ci0gICAgU3RyaW5nIGRlc3RpbmF0aW9uOwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OkRv
d25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVu
YW1lKSwgTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lOjpSZXBseShkZXN0aW5hdGlvbiwgYWxsb3dPdmVyd3JpdGUsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgbV9zYW5k
Ym94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpOwotICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCi0gICAgICAgIG1fc2FuZGJveEV4
dGVuc2lvbi0+Y29uc3VtZSgpOwotCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfQotCi12b2lk
IERvd25sb2FkOjpkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ3JlYXRlRGVzdGluYXRpb24ocGF0
aCkpOwotfQotCi12b2lkIERvd25sb2FkOjpkaWRGaW5pc2goKQotewotICAgIHBsYXRmb3JtRGlk
RmluaXNoKCk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRGaW5pc2go
KSk7Ci0KLSAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7Ci0gICAgICAgIG1fc2FuZGJveEV4
dGVuc2lvbi0+cmV2b2tlKCk7Ci0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7
Ci0gICAgfQotCi0gICAgbV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsK
LX0KLQotdm9pZCBEb3dubG9hZDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6OkRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGEpKTsKLQotICAgIGlm
IChtX3NhbmRib3hFeHRlbnNpb24pIHsKLSAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5yZXZv
a2UoKTsKLSAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKLSAgICB9Ci0gICAg
bV9kb3dubG9hZE1hbmFnZXIuZG93bmxvYWRGaW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBEb3du
bG9hZDo6ZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDYW5jZWwocmVzdW1lRGF0YSkp
OwotCi0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikgewotICAgICAgICBtX3NhbmRib3hFeHRl
bnNpb24tPnJldm9rZSgpOwotICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRyOwot
ICAgIH0KLSAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOwotfQot
Ci1JUEM6OkNvbm5lY3Rpb24qIERvd25sb2FkOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpCi17
Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2FkUHJveHlDb25uZWN0aW9uKCk7
Ci19Ci0KLXVpbnQ2NF90IERvd25sb2FkOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpCi17
Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxv
YWQuaAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEb3dubG9hZF9oCi0jZGVmaW5lIERvd25sb2FkX2gKLQotI2luY2x1
ZGUgIkRvd25sb2FkSUQuaCIKLSNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7Ci0jZWxzZQotT0JKQ19DTEFTUyBOU1VS
TERvd25sb2FkOwotT0JKQ19DTEFTUyBXS0Rvd25sb2FkQXNEZWxlZ2F0ZTsKLSNlbmRpZgotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNs
aWVudC5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNlbmRpZgotCi0jaWYgVVNFKENGTkVUV09SSykK
LSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9hZFByaXYuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgSVBDIHsKLWNsYXNzIERhdGFSZWZlcmVuY2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotY2xhc3MgQ3JlZGVudGlhbDsKLWNs
YXNzIFJlc291cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJjZUhhbmRsZTsKLWNsYXNzIFJlc291cmNl
UmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEb3dubG9hZEF1dGhl
bnRpY2F0aW9uQ2xpZW50OwotY2xhc3MgRG93bmxvYWRNYW5hZ2VyOwotY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOwotY2xhc3MgTmV0d29ya1Nlc3Npb247Ci1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBE
b3dubG9hZCA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERvd25sb2FkKTsKLXB1YmxpYzoKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIGNvbnN0IE5ldHdvcmtTZXNzaW9uJiwgRG93bmxv
YWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0jZWxzZQotICAgIERvd25s
b2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpOwotI2VuZGlmCi0gICAgfkRvd25sb2FkKCk7Ci0KLSAgICB2b2lkIHN0YXJ0KCk7
Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBk
YXRhVGFza0RpZEJlY29tZURvd25sb2FkVGFzayhjb25zdCBOZXR3b3JrU2Vzc2lvbiYsIFJldGFp
blB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+JiYpOwotI2Vsc2UKLSAgICB2b2lkIHN0YXJ0
V2l0aEhhbmRsZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmKTsKLSNlbmRpZgotICAgIHZvaWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNhbmNlbCgpOwotCi0gICAgRG93bmxvYWRJRCBk
b3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZElEOyB9Ci0KLSAgICB2b2lkIGRp
ZFN0YXJ0KCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBk
aWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwotICAgIGJvb2wgc2hvdWxkRGVjb2RlU291
cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgU3RyaW5nIGRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKLSAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9u
KGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdm9pZCBkaWRGaW5pc2goKTsKLSAgICB2b2lkIHBs
YXRmb3JtRGlkRmluaXNoKCk7Ci0gICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwotICAgIHZv
aWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7Ci0KLSNp
ZiBVU0UoQ0ZORVRXT1JLKQotICAgIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQqIGF1dGhl
bnRpY2F0aW9uQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIC8vIEF1dGhlbnRpY2F0aW9uCi0gICAg
c3RhdGljIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOwotICAgIHN0YXRpYyB2
b2lkIHJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBXZWJD
b3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVk
Q2FuY2VsbGF0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0g
ICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNv
bnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgc3RhdGljIHZvaWQg
cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKLQotICAgIHZvaWQgdXNlQ3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKLSAgICB2
b2lkIGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIGNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNv
bnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0KLXByaXZhdGU6Ci0gICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwbGF0Zm9ybUlu
dmFsaWRhdGUoKTsKLQotICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7Ci0g
ICAgRG93bmxvYWRJRCBtX2Rvd25sb2FkSUQ7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
IG1fcmVxdWVzdDsKLQotICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRl
bnNpb247Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIGNvbnN0IE5ldHdvcmtTZXNzaW9uJiBtX3Nlc3Npb247Ci0gICAgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsKLSNlbHNlCi0gICAgUmV0YWluUHRyPE5T
VVJMRG93bmxvYWQ+IG1fbnNVUkxEb3dubG9hZDsKLSAgICBSZXRhaW5QdHI8V0tEb3dubG9hZEFz
RGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0jZW5kaWYKLSNlbmRpZgotI2lmIFVTRShDRk5FVFdPUksp
Ci0gICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7Ci0gICAgUmVmUHRy
PERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQ+IG1fYXV0aGVudGljYXRpb25DbGllbnQ7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlSGFuZGxlOwotI2Vu
ZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERvd25sb2FkX2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNh
dGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcAkocmV2aXNpb24gMTk0MjYzKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9u
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkQXV0aGVudGljYXRpb25DbGll
bnQuaCIKLQotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi0jaW5jbHVkZSAiRG93bmxvYWQu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1E
b3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50OjpEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
KERvd25sb2FkKiBkb3dubG9hZCkKLSAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi17Ci0gICAg
QVNTRVJUX0FSRyhkb3dubG9hZCwgZG93bmxvYWQpOwotfQotCi12b2lkIERvd25sb2FkQXV0aGVu
dGljYXRpb25DbGllbnQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKQotewotICAgIC8vIEZJWE1FICgxMTk2NjcpOiBU
aGlzIGNhbiBwcm9iYWJseSBiZSBqdXN0IHJlbW92ZWQuCi19Ci0KLXZvaWQgRG93bmxvYWRBdXRo
ZW50aWNhdGlvbkNsaWVudDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50
aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICAvLyBGSVhNRSAoMTE5
NjY3KTogVGhpcyBjYW4gcHJvYmFibHkgYmUganVzdCByZW1vdmVkLgotfQotCi12b2lkIERvd25s
b2FkQXV0aGVudGljYXRpb25DbGllbnQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICAvLyBGSVhNRSAoMTE5NjY3KTogVGhpcyBjYW4g
cHJvYmFibHkgYmUganVzdCByZW1vdmVkLgotfQotCi12b2lkIERvd25sb2FkQXV0aGVudGljYXRp
b25DbGllbnQ6OnJlY2VpdmVkUmVxdWVzdFRvUGVyZm9ybURlZmF1bHRIYW5kbGluZyhjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgLy8gRklYTUUgKDExOTY2Nyk6IFRoaXMg
Y2FuIHByb2JhYmx5IGJlIGp1c3QgcmVtb3ZlZC4KLX0KLQotdm9pZCBEb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50OjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgLy8gRklYTUUgKDExOTY2Nyk6IFRoaXMgY2FuIHByb2Jh
Ymx5IGJlIGp1c3QgcmVtb3ZlZC4KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRp
Y2F0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDE5NDI2MykKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnRfaAotI2RlZmluZSBEb3dubG9hZEF1dGhl
bnRpY2F0aW9uQ2xpZW50X2gKLQotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotICAgIGNsYXNzIENyZWRlbnRp
YWw7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEb3dubG9hZDsKLQotY2xhc3Mg
RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPERvd25sb2Fk
QXV0aGVudGljYXRpb25DbGllbnQ+LCBwdWJsaWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DbGll
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVu
dD4gY3JlYXRlKERvd25sb2FkKiBkb3dubG9hZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb3du
bG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50KGRvd25sb2FkKSk7IH0KLQotICAgIHZvaWQgZGV0YWNo
KCkgeyBtX2Rvd25sb2FkID0gMDsgfQotCi0gICAgdXNpbmcgUmVmQ291bnRlZDxEb3dubG9hZEF1
dGhlbnRpY2F0aW9uQ2xpZW50Pjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG93bmxvYWRB
dXRoZW50aWNhdGlvbkNsaWVudD46OmRlcmVmOwotCi1wcml2YXRlOgotICAgIERvd25sb2FkQXV0
aGVudGljYXRpb25DbGllbnQoRG93bmxvYWQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25z
dCBXZWJDb3JlOjpDcmVkZW50aWFsJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlY2Vp
dmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZENhbmNlbGxhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0
SGFuZGxpbmcoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
dm9pZCByZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIG92ZXJyaWRlIHsgZGVyZWYo
KTsgfQotCi0gICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi0jZW5kaWYgLy8gRG93
bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RG93bmxvYWRzL0Rvd25sb2FkSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRG93bmxvYWRzL0Rvd25sb2FkSUQuaAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZElELmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
OTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRG93bmxvYWRJRF9oCi0jZGVmaW5lIERv
d25sb2FkSURfaAotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2Rlci5oIgotI2luY2x1ZGUgIkFyZ3Vt
ZW50RGVjb2Rlci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEb3dubG9hZElE
IHsKLXB1YmxpYzoKLSAgICBEb3dubG9hZElEKCkKLSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGlj
aXQgRG93bmxvYWRJRCh1aW50NjRfdCBkb3dubG9hZElEKQotICAgICAgICA6IG1fZG93bmxvYWRJ
RChkb3dubG9hZElEKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oRG93bmxv
YWRJRCBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZElEID09IG90aGVyLm1fZG93bmxv
YWRJRDsgfQotCi0gICAgdWludDY0X3QgZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93
bmxvYWRJRDsgfQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBtX2Rvd25sb2FkSUQgeyAwIH07Ci19
OwotCi19Ci0KLW5hbWVzcGFjZSBJUEMgewotICAgIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJLaXQ6OkRvd25sb2FkSUQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJLaXQ6OkRvd25sb2FkSUQmIGRvd25sb2Fk
SUQpCi0gICAgewotICAgICAgICBlbmNvZGVyIDw8IGRvd25sb2FkSUQuZG93bmxvYWRJRCgpOwot
ICAgIH0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBX
ZWJLaXQ6OkRvd25sb2FkSUQmIGRvd25sb2FkSUQpCi0gICAgewotICAgICAgICB1aW50NjRfdCBp
ZDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgZG93bmxvYWRJRCA9IFdlYktpdDo6RG93bmxvYWRJRChpZCk7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi19Ci0KLW5hbWVzcGFj
ZSBXVEYgewotICAgIAotc3RydWN0IERvd25sb2FkSURIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBXZWJLaXQ6OkRvd25sb2FkSUQmIGQpIHsgcmV0dXJuIGludEhhc2goZC5k
b3dubG9hZElEKCkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViS2l0OjpEb3du
bG9hZElEJiBhLCBjb25zdCBXZWJLaXQ6OkRvd25sb2FkSUQmIGIpIHsgcmV0dXJuIGEuZG93bmxv
YWRJRCgpID09IGIuZG93bmxvYWRJRCgpOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8V2ViS2l0OjpEb3dubG9hZElEPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYktpdDo6
RG93bmxvYWRJRD4gewotICAgIHN0YXRpYyBXZWJLaXQ6OkRvd25sb2FkSUQgZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIHsgfTsgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShXZWJLaXQ6OkRvd25sb2FkSUQmIHNsb3QpIHsgc2xvdCA9IFdlYktpdDo6RG93bmxvYWRJ
RChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpOyB9Ci0gICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoY29uc3QgV2ViS2l0OjpEb3dubG9hZElEJiBzbG90KSB7IHJldHVy
biBzbG90LmRvd25sb2FkSUQoKSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4
KCk7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJLaXQ6OkRvd25sb2Fk
SUQ+IHsKLSAgICB0eXBlZGVmIERvd25sb2FkSURIYXNoIEhhc2g7Ci19OwotCi19Ci0jZW5kaWYg
LyogRG93bmxvYWRJRF9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCShyZXZpc2lvbiAxOTQyNjQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJEb3dubG9hZC5oIgot
I2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLURvd25sb2FkTWFuYWdlcjo6RG93bmxvYWRNYW5hZ2VyKENsaWVudCogY2xpZW50
KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi12b2lkIERvd25sb2FkTWFuYWdlcjo6
c3RhcnREb3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtT
ZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFuZXR3b3JrU2Vzc2lvbikKLSAgICAgICAgcmV0
dXJuOwotICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPigqdGhp
cywgKm5ldHdvcmtTZXNzaW9uLCBkb3dubG9hZElELCByZXF1ZXN0KTsKLSNlbHNlCi0gICAgYXV0
byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KCp0aGlzLCBkb3dubG9hZElE
LCByZXF1ZXN0KTsKLSNlbmRpZgotICAgIGRvd25sb2FkLT5zdGFydCgpOwotCi0gICAgQVNTRVJU
KCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7Ci0gICAgbV9kb3dubG9hZHMuYWRk
KGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkpOwotfQotCi0jaWYgIVVTRShORVRXT1JL
X1NFU1NJT04pCi12b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udmVydEhhbmRsZVRvRG93bmxvYWQo
RG93bmxvYWRJRCBkb3dubG9hZElELCBSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQot
ewotICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPigqdGhpcywg
ZG93bmxvYWRJRCwgcmVxdWVzdCk7Ci0KLSAgICBkb3dubG9hZC0+c3RhcnRXaXRoSGFuZGxlKGhh
bmRsZSwgcmVzcG9uc2UpOwotICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxv
YWRJRCkpOwotICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEY6Om1vdmUoZG93bmxv
YWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIERvd25sb2FkTWFuYWdlcjo6cmVzdW1lRG93bmxvYWQo
U2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi17Ci0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKLSAgICAvLyBEb3dubG9hZDo6cmVz
dW1lKCkgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIERvd25sb2FkJ3MgcmVzb3VyY2Ug
cmVxdWVzdC4KLSAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4o
KnRoaXMsIGRvd25sb2FkSUQsIFJlc291cmNlUmVxdWVzdCgpKTsKLQotICAgIGRvd25sb2FkLT5y
ZXN1bWUocmVzdW1lRGF0YSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgQVNT
RVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7Ci0gICAgbV9kb3dubG9hZHMu
YWRkKGRvd25sb2FkSUQsIFdURjo6bW92ZShkb3dubG9hZCkpOwotI2VuZGlmCi19Ci0KLXZvaWQg
RG93bmxvYWRNYW5hZ2VyOjpjYW5jZWxEb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQpCi17
Ci0gICAgRG93bmxvYWQqIGRvd25sb2FkID0gbV9kb3dubG9hZHMuZ2V0KGRvd25sb2FkSUQpOwot
ICAgIGlmICghZG93bmxvYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvd25sb2FkLT5jYW5j
ZWwoKTsKLX0KLQotdm9pZCBEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkRmluaXNoZWQoRG93bmxv
YWQqIGRvd25sb2FkKQotewotICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9h
ZC0+ZG93bmxvYWRJRCgpKSk7Ci0gICAgbV9kb3dubG9hZHMucmVtb3ZlKGRvd25sb2FkLT5kb3du
bG9hZElEKCkpOwotfQotCi12b2lkIERvd25sb2FkTWFuYWdlcjo6ZGlkQ3JlYXRlRG93bmxvYWQo
KQotewotICAgIG1fY2xpZW50LT5kaWRDcmVhdGVEb3dubG9hZCgpOwotfQotCi12b2lkIERvd25s
b2FkTWFuYWdlcjo6ZGlkRGVzdHJveURvd25sb2FkKCkKLXsKLSAgICBtX2NsaWVudC0+ZGlkRGVz
dHJveURvd25sb2FkKCk7Ci19Ci0KLUlQQzo6Q29ubmVjdGlvbiogRG93bmxvYWRNYW5hZ2VyOjpk
b3dubG9hZFByb3h5Q29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5kb3dubG9h
ZFByb3h5Q29ubmVjdGlvbigpOwotfQotCi1BdXRoZW50aWNhdGlvbk1hbmFnZXImIERvd25sb2Fk
TWFuYWdlcjo6ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4g
bV9jbGllbnQtPmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvRG93
bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAkocmV2aXNpb24gMTk0MjY0KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEb3dubG9hZE1hbmFnZXJfaAotI2Rl
ZmluZSBEb3dubG9hZE1hbmFnZXJfaAotCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLSNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotI2lmICFV
U0UoTkVUV09SS19TRVNTSU9OKQotY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci0jZW5kaWYKLWNsYXNz
IFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTZXNzaW9u
SUQ7Ci19Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQ29ubmVjdGlvbjsKLWNsYXNzIERhdGFS
ZWZlcmVuY2U7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBBdXRoZW50aWNhdGlv
bk1hbmFnZXI7Ci1jbGFzcyBEb3dubG9hZDsKLWNsYXNzIE5ldHdvcmtEYXRhVGFzazsKLWNsYXNz
IFdlYlBhZ2U7Ci0KLWNsYXNzIERvd25sb2FkTWFuYWdlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRG93bmxvYWRNYW5hZ2VyKTsKLQotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0g
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWREZXN0cm95RG93bmxvYWQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9u
KiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpID0gMDsKLSAgICAgICAgdmlydHVhbCBBdXRoZW50
aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpID0gMDsKLSAg
ICB9OwotCi0gICAgZXhwbGljaXQgRG93bmxvYWRNYW5hZ2VyKENsaWVudCopOwotCi0gICAgdm9p
ZCBzdGFydERvd25sb2FkKFdlYkNvcmU6OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAg
dm9pZCBjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKTsKLSNlbmRpZgotCi0gICAgdm9pZCByZXN1bWVEb3dubG9hZChX
ZWJDb3JlOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
cmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmKTsKLQotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQoRG93bmxvYWRJRCk7Ci0KLSAgICB2
b2lkIGRvd25sb2FkRmluaXNoZWQoRG93bmxvYWQqKTsKLSAgICBib29sIGlzRG93bmxvYWRpbmco
KSBjb25zdCB7IHJldHVybiAhbV9kb3dubG9hZHMuaXNFbXB0eSgpOyB9Ci0gICAgdWludDY0X3Qg
YWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRzLnNpemUoKTsg
fQotCi0gICAgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpOwotICAgIHZvaWQgZGlkRGVzdHJveURv
d25sb2FkKCk7Ci0KLSAgICBJUEM6OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9u
KCk7Ci0gICAgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1h
bmFnZXIoKTsKLQotcHJpdmF0ZToKLSAgICBDbGllbnQqIG1fY2xpZW50OwotICAgIEhhc2hNYXA8
RG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPj4gbV9kb3dubG9hZHM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERvd25sb2FkTWFuYWdlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9jb2NvYS9E
b3dubG9hZENvY29hLm1tCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRG93
bmxvYWQuaCIKLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0KLSNpbXBvcnQgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93bmxvYWQ6
OnN0YXJ0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpy
ZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBEb3dubG9hZDo6
Y2FuY2VsKCkKLXsKLSAgICBbbV9kb3dubG9hZCBjYW5jZWxdOwotfQotCi12b2lkIERvd25sb2Fk
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0K
LQotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL2VmbC9Eb3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9y
c0VmbC5jcHAJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3du
bG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNF
ZmwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZXNvdXJjZUVycm9yIHBsYXRm
b3JtRG93bmxvYWROZXR3b3JrRXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBmYWls
aW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKQotewotICAgIHJldHVy
biBkb3dubG9hZE5ldHdvcmtFcnJvcihSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQs
IGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24pKTsKLX0KLQotUmVz
b3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVy
biBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IocmVzcG9uc2UsIG1lc3NhZ2UpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMv
Z3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAkocmV2aXNp
b24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxv
YWRTb3VwRXJyb3JzR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRT
b3VwRXJyb3JzLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlc291cmNlRXJyb3IgcGxhdGZvcm1Eb3dubG9hZE5ldHdv
cmtFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0
cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJuIGRvd25sb2FkTmV0d29y
a0Vycm9yKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgZXJyb3JDb2RlLCBmYWls
aW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikpOwotfQotCi1SZXNvdXJjZUVycm9yIHBsYXRm
b3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGRvd25sb2FkRGVzdGlu
YXRpb25FcnJvcihyZXNwb25zZSwgbWVzc2FnZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93
bmxvYWRJT1MubW0JKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
b3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEb3dubG9hZC5o
IgotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQotI2ltcG9y
dCAiRGF0YVJlZmVyZW5jZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+Ci0KLSNpZiBVU0Uo
Q0ZORVRXT1JLKQotI2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMRG93bmxvYWQuaD4KLSNlbmRpZgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBV
U0UoQ0ZORVRXT1JLKQotLy8gRklYTUU6IElmIHBvc3NpYmxlLCB3ZSBzaG91bGQgY29uc2lkZXIg
bW92aW5nIHNvbWUgY2FsbGJhY2tzIG9mZiB0aGUgbWFpbiB0aHJlYWQgb3IgYXQgbGVhc3QKLS8v
IG1ha2luZyB0aGVtIGFzeW5jaG9ub3VzIGNhbGxzLgotc3RhdGljIHZvaWQgZGlzcGF0Y2hPbk1h
aW5UaHJlYWQodm9pZCheYmxvY2spKCkpCi17Ci0gICAgaWYgKFJ1bkxvb3A6OmlzTWFpbigpKSB7
Ci0gICAgICAgIGJsb2NrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkaXNwYXRj
aF9zeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGJsb2NrKTsKLX0KLQotc3RhdGljIGlu
bGluZSBEb3dubG9hZCogdG9Eb3dubG9hZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEb3dubG9hZCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudElu
Zm8pKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBEb3dubG9hZENsaWVudChDRlVSTERvd25sb2Fk
Q2xpZW50JiBjbGllbnQsIERvd25sb2FkJiBkb3dubG9hZCkKLXsKLSAgICBtZW1zZXQoJmNsaWVu
dCwgMCwgc2l6ZW9mKGNsaWVudCkpOwotICAgIGNsaWVudC5jbGllbnRJbmZvID0gJmRvd25sb2Fk
OwotCi0gICAgY2xpZW50LmRpZFN0YXJ0ID0gW10oQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAg
ICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkU3RhcnQoKTsKLSAgICAgICAgfSk7Ci0g
ICAgfTsKLQotICAgIGNsaWVudC53aWxsU2VuZFJlcXVlc3QgPSBbXShDRlVSTERvd25sb2FkUmVm
LCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCop
IC0+IENGVVJMUmVxdWVzdFJlZiB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRlVSTFJl
cXVlc3RSZWY+KENGUmV0YWluKHJlcXVlc3QpKTsKLSAgICB9OwotCi0gICAgY2xpZW50LmRpZFJl
Y2VpdmVSZXNwb25zZSA9IFtdKENGVVJMRG93bmxvYWRSZWYsIENGVVJMUmVzcG9uc2VSZWYgcmVz
cG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoXnsKLSAgICAgICAgICAgIHRvRG93bmxvYWQoY2xpZW50SW5mbyktPmRpZFJlY2VpdmVS
ZXNwb25zZShyZXNwb25zZSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlk
UmVjZWl2ZURhdGEgPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRkluZGV4IGxlbmd0aCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAg
ICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkUmVjZWl2ZURhdGEobGVuZ3RoKTsK
LSAgICAgICAgfSk7Ci0gICAgfTsKLQotICAgIGNsaWVudC5zaG91bGREZWNvZGVEYXRhT2ZNSU1F
VHlwZSA9IFtdKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIGVuY29kaW5nVHlwZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykgLT4gQm9vbGVhbiB7Ci0gICAgICAgIF9fYmxvY2sgQk9PTCBy
ZXR1cm5WYWx1ZSA9IE5POwotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5zaG91bGREZWNvZGVT
b3VyY2VEYXRhT2ZNSU1FVHlwZShlbmNvZGluZ1R5cGUpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZSA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRS
ZWYsIENGU3RyaW5nUmVmIG9iamVjdE5hbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAg
ICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgICAgIGJvb2wgYWxsb3dPdmVy
d3JpdGU7Ci0gICAgICAgICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSB0b0Rvd25sb2FkKGNsaWVu
dEluZm8pLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShvYmplY3ROYW1l
LCBhbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgp
KQotICAgICAgICAgICAgICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbihkb3dubG9hZFJl
ZiwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTFJlZj4oW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0
aW5hdGlvbl0pLCBhbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBj
bGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJl
ZiBwYXRoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7Ci0gICAgICAgIGRpc3BhdGNoT25NYWlu
VGhyZWFkKF57Ci0gICAgICAgICAgICB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kaWRDcmVhdGVE
ZXN0aW5hdGlvbihDRlVSTEdldFN0cmluZyhwYXRoKSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0K
LSAgICBjbGllbnQuZGlkRmluaXNoID0gW10oQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykgewotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAgICAg
ICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkRmluaXNoKCk7Ci0gICAgICAgIH0pOwotICAg
IH07Ci0KLSAgICBjbGllbnQuZGlkRmFpbCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRS
ZWYsIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAgICAgICAg
ZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgICAgIGF1dG8gcmVzdW1lRGF0YSA9IGFk
b3B0Q0YoQ0ZVUkxEb3dubG9hZENvcHlSZXN1bWVEYXRhKGRvd25sb2FkUmVmKSk7Ci0gICAgICAg
ICAgICB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFSZWZl
cmVuY2UocmVzdW1lRGF0YSA/IENGRGF0YUdldEJ5dGVQdHIocmVzdW1lRGF0YS5nZXQoKSkgOiBu
dWxscHRyLCByZXN1bWVEYXRhID8gQ0ZEYXRhR2V0TGVuZ3RoKHJlc3VtZURhdGEuZ2V0KCkpIDog
MCkpOwotICAgICAgICB9KTsKLSAgICB9OwotfQotI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCi0K
LXZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0jaWYgVVNF
KENGTkVUV09SSykKLSAgICBDRlVSTERvd25sb2FkQ2xpZW50IGNsaWVudDsKLSAgICBzZXRVcERv
d25sb2FkQ2xpZW50KGNsaWVudCwgKnRoaXMpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFy
YXRpb25zIgotICAgIG1fZG93bmxvYWQgPSBhZG9wdENGKENGVVJMRG93bmxvYWRDcmVhdGVBbmRT
dGFydFdpdGhMb2FkaW5nQ29ubmVjdGlvbihOVUxMLCBoYW5kbGUtPnJlbGVhc2VDb25uZWN0aW9u
Rm9yRG93bmxvYWQoKS5nZXQoKSwgbV9yZXF1ZXN0LmNmVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9k
eSksIHJlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKSwgJmNsaWVudCkpOwotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCi19Ci0K
LXZvaWQgRG93bmxvYWQ6OmNhbmNlbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENh
bmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9QZXJmb3Jt
RGVmYXVsdEhhbmRsaW5nKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENo
YWxsZW5nZVJlamVjdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93
bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQkocmV2aXNpb24gMTk0MjYzKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsMzExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkRvd25sb2FkLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFV
U0UoTkVUV09SS19TRVNTSU9OKQotCi0jaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIK
LSNpbXBvcnQgIldlYlBhZ2UuaCIKLQotQGludGVyZmFjZSBOU1VSTERvd25sb2FkIChXZWJOU1VS
TERvd25sb2FkRGV0YWlscykKLSsoaWQpX2Rvd25sb2FkV2l0aExvYWRpbmdDb25uZWN0aW9uOihO
U1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxlZ2F0ZTooaWQpZGVsZWdhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3h5OihpZClwcm94eTsKLUBlbmQKLQotQGludGVyZmFjZSBXS0Rvd25sb2FkQXNEZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxOU1VSTERvd25sb2FkRGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OkRvd25sb2Fk
KiBfZG93bmxvYWQ7Ci19Ci0tIChpZClpbml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2Fk
Kilkb3dubG9hZDsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIERvd25sb2FkOjpzdGFydCgp
Ci17Ci0gICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOwotICAgIEFTU0VSVCghbV9kZWxlZ2F0
ZSk7Ci0KLSAgICBtX2RlbGVnYXRlID0gYWRvcHROUyhbW1dLRG93bmxvYWRBc0RlbGVnYXRlIGFs
bG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBtX25zVVJMRG93bmxvYWQgPSBhZG9wdE5TKFtbTlNVUkxEb3dubG9hZCBh
bGxvY10gaW5pdFdpdGhSZXF1ZXN0Om1fcmVxdWVzdC5uc1VSTFJlcXVlc3QoVXBkYXRlSFRUUEJv
ZHkpIGRlbGVnYXRlOm1fZGVsZWdhdGUuZ2V0KCldKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKLQotICAgIC8vIEZJWE1FOiBBbGxvdyB0aGlzIHRvIGJlIGNoYW5nZWQgYnkgdGhlIGNs
aWVudC4KLSAgICBbbV9uc1VSTERvd25sb2FkIHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9d
OwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKCFt
X25zVVJMRG93bmxvYWQpOwotICAgIEFTU0VSVCghbV9kZWxlZ2F0ZSk7Ci0KLSAgICBtX2RlbGVn
YXRlID0gYWRvcHROUyhbW1dLRG93bmxvYWRBc0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25s
b2FkOnRoaXNdKTsKLSAgICBtX25zVVJMRG93bmxvYWQgPSBbTlNVUkxEb3dubG9hZCBfZG93bmxv
YWRXaXRoTG9hZGluZ0Nvbm5lY3Rpb246aGFuZGxlLT5jb25uZWN0aW9uKCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6
bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6cmVzcG9u
c2UubnNVUkxSZXNwb25zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZTptX2RlbGVnYXRlLmdldCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm94eTpuaWxdOwotCi0gICAgLy8gRklYTUU6IEFsbG93IHRoaXMgdG8gYmUgY2hhbmdlZCBieSB0
aGUgY2xpZW50LgotICAgIFttX25zVVJMRG93bmxvYWQgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVy
ZTpOT107Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQotewotICAgIEFTU0VSVCghbV9uc1VS
TERvd25sb2FkKTsKLSAgICBBU1NFUlQoIW1fZGVsZWdhdGUpOwotCi0gICAgbV9zYW5kYm94RXh0
ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUp
OwotICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCi0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lv
bi0+Y29uc3VtZSgpOwotCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAg
bV9kZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS0Rvd25sb2FkQXNEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhEb3dubG9hZDp0aGlzXSk7Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0KLSAgICBh
dXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzdW1l
RGF0YS5kYXRhKCkgbGVuZ3RoOnJlc3VtZURhdGEuc2l6ZSgpXSk7Ci0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgbV9uc1VSTERvd25sb2FkID0gYWRvcHROUyhbW05TVVJM
RG93bmxvYWQgYWxsb2NdIGluaXRXaXRoUmVzdW1lRGF0YTpuc0RhdGEuZ2V0KCkgZGVsZWdhdGU6
bV9kZWxlZ2F0ZS5nZXQoKSBwYXRoOnBhdGhdKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKLQotICAgIG1fcmVxdWVzdCA9IFttX25zVVJMRG93bmxvYWQgcmVxdWVzdF07Ci0KLSAgICAv
LyBGSVhNRTogQWxsb3cgdGhpcyB0byBiZSBjaGFuZ2VkIGJ5IHRoZSBjbGllbnQuCi0gICAgW21f
bnNVUkxEb3dubG9hZCBzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlOk5PXTsKLX0KLQotdm9pZCBE
b3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBbbV9uc1VSTERvd25sb2FkIGNhbmNlbF07Ci0KLSAg
ICBSZXRhaW5QdHI8TlNEYXRhPiByZXN1bWVEYXRhID0gW21fbnNVUkxEb3dubG9hZCByZXN1bWVE
YXRhXTsKLSAgICBkaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KFtyZXN1bWVEYXRhIGJ5dGVzXSksIFtyZXN1bWVEYXRhIGxlbmd0aF0p
KTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NF
UlQobV9uc1VSTERvd25sb2FkKTsKLSAgICBBU1NFUlQobV9kZWxlZ2F0ZSk7Ci0KLSAgICBbbV9k
ZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKLSAgICBtX2RlbGVnYXRlID0gbnVsbHB0cjsKLSAgICBtX25z
VVJMRG93bmxvYWQgPSBudWxscHRyOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZp
bmlzaCgpCi17Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IENy
ZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgW2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLnNl
bmRlcigpIHVzZUNyZWRlbnRpYWw6Y3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSBmb3JBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKCldOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb0Nv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5z
ZW5kZXIoKSBjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgp
XTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTphdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCld
OwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFu
ZGxpbmcoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBwZXJmb3JtRGVm
YXVsdEhhbmRsaW5nRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5zZW5kZXIoKSByZWplY3RQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZVdpdGhDaGFsbGVu
Z2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgp
XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0Rvd25s
b2FkQXNEZWxlZ2F0ZQotCi0vLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGVzZSBjYWxs
YmFja3Mgd291bGRuJ3QgaGF2ZSB0byBiZSBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLXN0
YXRpYyB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKHZvaWQgKF5ibG9jaykoKSkKLXsKLSAgICBp
ZiAoUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgYmxvY2soKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGRpc3BhdGNoX3N5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
YmxvY2spOwotfQotCi0tIChpZClpbml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2FkKilk
b3dubG9hZAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgX2Rvd25sb2FkID0gZG93bmxvYWQ7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9kb3dubG9hZCA9IDA7Ci19
Ci0KLS0gKHZvaWQpZG93bmxvYWREaWRCZWdpbjooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkCi17
Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAg
ICAgICAgICAgIF9kb3dubG9hZC0+ZGlkU3RhcnQoKTsKLSAgICB9KTsKLX0KLQotLSAoTlNVUkxS
ZXF1ZXN0ICopZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCB3aWxsU2VuZFJlcXVl
c3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25z
ZSAqKXJlZGlyZWN0UmVzcG9uc2UKLXsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotLSAoQk9P
TClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWNvbm5lY3Rpb24gY2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3Bh
Y2UKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93
bmxvYWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsK
LSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvcmUoY2hhbGxlbmdlKSk7Ci0gICAgfSk7Ci19Ci0K
LS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRDYW5jZWxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxs
ZW5nZQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotLSAoQk9PTClkb3dubG9hZFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTERv
d25sb2FkICopZG93bmxvYWQKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpZG93bmxv
YWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKilyZXNwb25zZQotewotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAg
IGlmIChfZG93bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25z
ZShyZXNwb25zZSk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxv
YWQgKilkb3dubG9hZCB3aWxsUmVzdW1lV2l0aFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVz
cG9uc2UgZnJvbUJ5dGU6KGxvbmcgbG9uZylzdGFydGluZ0J5dGUKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6
KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoOihOU1VJbnRl
Z2VyKWxlbmd0aAotewotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChf
ZG93bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGxlbmd0aCk7
Ci0gICAgfSk7Ci19Ci0KLS0gKEJPT0wpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9h
ZCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZTooTlNTdHJpbmcgKillbmNvZGluZ1R5
cGUKLXsKLSAgICBfX2Jsb2NrIEJPT0wgcmV0dXJuVmFsdWU7Ci0gICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gX2Rvd25sb2FkLT5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShlbmNvZGluZ1R5
cGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFlFUzsKLSAgICB9
KTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotLSAodm9pZClkb3dubG9hZDooTlNV
UkxEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lOihOU1N0cmluZyAqKWZpbGVuYW1lCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsK
LSAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uOwotICAgICAgICBib29sIGFsbG93T3ZlcndyaXRl
OwotICAgICAgICBpZiAoX2Rvd25sb2FkKQotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBfZG93
bmxvYWQtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lLCBh
bGxvd092ZXJ3cml0ZSk7Ci0KLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKLSAg
ICAgICAgICAgIFtkb3dubG9hZCBzZXREZXN0aW5hdGlvbjpkZXN0aW5hdGlvbiBhbGxvd092ZXJ3
cml0ZTphbGxvd092ZXJ3cml0ZV07Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5T
VVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRDcmVhdGVEZXN0aW5hdGlvbjooTlNTdHJpbmcgKilw
YXRoCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9h
ZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24ocGF0aCk7Ci0g
ICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWREaWRGaW5pc2g6KE5TVVJMRG93bmxvYWQgKilk
b3dubG9hZAotewotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChfZG93
bmxvYWQpCi0gICAgICAgICAgICBfZG93bmxvYWQtPmRpZEZpbmlzaCgpOwotICAgIH0pOwotfQot
Ci0tICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkRmFpbFdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAg
ICAgICAgaWYgKCFfZG93bmxvYWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmV0
YWluUHRyPE5TRGF0YT4gcmVzdW1lRGF0YSA9IFtkb3dubG9hZCByZXN1bWVEYXRhXTsKLSAgICAg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oW3Jlc3VtZURhdGEgYnl0ZXNdKSwgW3Jlc3VtZURhdGEgbGVuZ3RoXSk7Ci0K
LSAgICAgICAgX2Rvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBkYXRhUmVmZXJlbmNlKTsKLSAgICB9
KTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhVVNFKE5FVFdPUktf
U0VTU0lPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3du
bG9hZFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQnJlbnQg
RnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
PgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEb3dubG9hZENsaWVudCA6IHB1Ymxp
YyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxv
YWRDbGllbnQpOwotcHVibGljOgotICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkKiBkb3dubG9h
ZCkKLSAgICAgICAgOiBtX2Rvd25sb2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVz
cG9uc2VMYXRlcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxl
UmVzcG9uc2UpCi0gICAgICAgICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgfkRvd25sb2FkQ2xpZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxl
dGVGaWxlc0lmTmVlZGVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkK
LSAgICAgICAgICAgIGdfZmlsZV9kZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOwotCi0gICAgICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVs
ZXRlKG1faW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB2b2lkIGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQotICAgIHsKLSAgICAgICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBt
X2Rvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UoKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSByZXNw
b25zZTsKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsK
LQotICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAg
ICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IocmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIHJlc3BvbnNlLmh0
dHBTdGF0dXNUZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1l
KCk7Ci0gICAgICAgIGlmIChzdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIFVSTCB1cmwgPSByZXNwb25zZS51cmwoKTsKLSAgICAgICAgICAgIHVybC5zZXRRdWVyeShT
dHJpbmcoKSk7Ci0gICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0g
ICAgICAgICAgICBzdWdnZXN0ZWRGaWxlbmFtZSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1
cmwubGFzdFBhdGhDb21wb25lbnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZGVz
dGluYXRpb25VUkkgPSBtX2Rvd25sb2FkLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlm
IChkZXN0aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRl
dGVybWluZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVu
YW1lICVzIiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0j
ZWxzZQotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5v
dCBkZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBm
aWxlbmFtZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25s
b2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBlcnJv
ck1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
ZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlv
blVSSS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+
IG91dHB1dFN0cmVhbTsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAg
ICAgICBpZiAobV9hbGxvd092ZXJ3cml0ZSkKLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA9IGFk
b3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwg
RkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVf
Y3JlYXRlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxw
dHIsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBpZiAoIW91dHB1dFN0cmVhbSkgewotICAg
ICAgICAgICAgbV9kZXN0aW5hdGlvbkZpbGUuY2xlYXIoKTsKLSAgICAgICAgICAgIGRvd25sb2Fk
RmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBlcnJvci0+
bWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3Ry
aW5nIGludGVybWVkaWF0ZVVSSSA9IGRlc3RpbmF0aW9uVVJJICsgIi53a2Rvd25sb2FkIjsKLSAg
ICAgICAgbV9pbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShp
bnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX291dHB1dFN0cmVhbSA9
IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIDAsIFRS
VUUsIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlm
ICghbV9vdXRwdXRTdHJlYW0pIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3Jt
RG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkQ3Jl
YXRlRGVzdGluYXRpb24oZGVzdGluYXRpb25VUkkpOwotICAgIH0KLQotICAgIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pCi0gICAgewotICAgICAgICBpZiAobV9oYW5k
bGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgIG1faGFuZGxlUmVzcG9u
c2VMYXRlci5zdG9wKCk7Ci0gICAgICAgICAgICBoYW5kbGVSZXNwb25zZSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwoR19PVVRQVVRf
U1RSRUFNKG1fb3V0cHV0U3RyZWFtLmdldCgpKSwgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVu
LCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9u
c2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9kb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCi0gICAg
ewotICAgICAgICBtX291dHB1dFN0cmVhbSA9IDA7Ci0KLSAgICAgICAgQVNTRVJUKG1fZGVzdGlu
YXRpb25GaWxlKTsKLSAgICAgICAgQVNTRVJUKG1faW50ZXJtZWRpYXRlRmlsZSk7Ci0gICAgICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgaWYgKCFnX2ZpbGVfbW92ZSht
X2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVf
Q09QWV9PVkVSV1JJVEUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIo
KSkpIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5h
dGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfaW5mb19uZXcoKSk7Ci0gICAgICAgIENTdHJpbmcgdXJpID0gbV9yZXNwb25z
ZS51cmwoKS5zdHJpbmcoKS51dGY4KCk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1
dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwgdXJpLmRhdGEo
KSk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCks
ICJ4YXR0cjo6eGRnLm9yaWdpbi51cmwiLCB1cmkuZGF0YSgpKTsKLSAgICAgICAgZ19maWxlX3Nl
dF9hdHRyaWJ1dGVzX2FzeW5jKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBpbmZvLmdldCgpLCBH
X0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIpOwotCi0gICAgICAgIG1fZG93bmxvYWQtPmRpZEZpbmlzaCgpOwotICAgIH0K
LQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQotICAgIHsKLSAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5l
dHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5s
b2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7Ci0gICAgfQotCi0gICAgdm9pZCB3YXNCbG9ja2VkKFJl
c291cmNlSGFuZGxlKikKLSAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKLSAgICB7Ci0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKLSAgICB7Ci0gICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRl
bGV0ZUZpbGVzSWZOZWVkZWQoKTsKLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkQ2FuY2VsKElQQzo6
RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlKCkKLSAg
ICB7Ci0gICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShudWxscHRyLCBtX2RlbGF5ZWRSZXNwb25z
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBoYW5kbGVSZXNwb25zZUxhdGVyKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNO
dWxsKCkpOwotICAgICAgICBBU1NFUlQoIW1faGFuZGxlUmVzcG9uc2VMYXRlci5pc0FjdGl2ZSgp
KTsKLQotICAgICAgICBtX2RlbGF5ZWRSZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgICAgIC8v
IENhbGwgZGlkUmVjZWl2ZVJlc3BvbnNlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIHRoZSBkb3du
bG9hZCBpcyBhZGRlZAotICAgICAgICAvLyB0byB0aGUgRG93bmxvYWRNYW5hZ2VyIGRvd25sb2Fk
cyBtYXAuCi0gICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlci5zdGFydE9uZVNob3QoMCk7Ci0g
ICAgfQotCi0gICAgRG93bmxvYWQqIG1fZG93bmxvYWQ7Ci0gICAgR1JlZlB0cjxHRmlsZU91dHB1
dFN0cmVhbT4gbV9vdXRwdXRTdHJlYW07Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNl
OwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0Zp
bGU+IG1faW50ZXJtZWRpYXRlRmlsZTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fZGVsYXllZFJl
c3BvbnNlOwotICAgIFJ1bkxvb3A6OlRpbWVyPERvd25sb2FkQ2xpZW50PiBtX2hhbmRsZVJlc3Bv
bnNlTGF0ZXI7Ci0gICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlOwotfTsKLQotdm9pZCBEb3dubG9h
ZDo6c3RhcnQoKQotewotICAgIEFTU0VSVCghbV9kb3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJU
KCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxEb3dubG9hZENsaWVudD4odGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IFJlc291
cmNlSGFuZGxlOjpjcmVhdGUoMCwgbV9yZXF1ZXN0LCBtX2Rvd25sb2FkQ2xpZW50LmdldCgpLCBm
YWxzZSwgZmFsc2UpOwotICAgIGRpZFN0YXJ0KCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0
V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9kb3dubG9hZENsaWVudCk7Ci0g
ICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4odGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRs
ZSA9IHJlc291cmNlSGFuZGxlLT5yZWxlYXNlRm9yRG93bmxvYWQobV9kb3dubG9hZENsaWVudC5n
ZXQoKSk7Ci0gICAgZGlkU3RhcnQoKTsKLSAgICBzdGF0aWNfY2FzdDxEb3dubG9hZENsaWVudCo+
KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5oYW5kbGVSZXNwb25zZUxhdGVyKHJlc3BvbnNlKTsK
LX0KLQotdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBpZiAo
IW1fcmVzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENhbmNlbGxpbmcg
dGhlIGRvd25sb2FkIHdpbGwgZGVsZXRlIGl0IGFuZCBwbGF0Zm9ybUludmFsaWRhdGUoKSB3aWxs
IGJlIGNhbGxlZCBieSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAvLyBTbywgd2UgbmVlZCB0byBzZXQg
bV9yZXNvdXJjZUhhbmRsZSB0byBudWxscHRyIGJlZm9yZSBhY3R1YWxseSBjYW5jZWxsaW5nIHRo
ZSBkb3dubG9hZCB0byBtYWtlIHN1cmUKLSAgICAvLyBpdCB3b24ndCBiZSBjYW5jZWxsZWQgYWdh
aW4gYnkgcGxhdGZvcm1JbnZhbGlkYXRlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNzY1MC4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IHJlc291cmNl
SGFuZGxlID0gbV9yZXNvdXJjZUhhbmRsZS5yZWxlYXNlKCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93
bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+Y2FuY2VsKHJlc291cmNlSGFu
ZGxlLmdldCgpKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsK
LSAgICBpZiAobV9yZXNvdXJjZUhhbmRsZSkgewotICAgICAgICBtX3Jlc291cmNlSGFuZGxlLT5j
bGVhckNsaWVudCgpOwotICAgICAgICBtX3Jlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsKLSAgICAg
ICAgbV9yZXNvdXJjZUhhbmRsZSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9kb3dubG9hZENs
aWVudCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkK
LXsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKLX0KLQotdm9pZCBEb3dubG9hZDo6
cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3Qg
Q3JlZGVudGlhbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnVzZUNyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Q
ZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENoYWxs
ZW5nZVJlamVjdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291
cEVycm9ycy5oCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93
bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEb3dubG9hZFNvdXBFcnJvcnNf
aAotI2RlZmluZSBEb3dubG9hZFNvdXBFcnJvcnNfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkTmV0
d29ya0Vycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3Qg
U3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbik7Ci1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBs
YXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIERvd25sb2FkU291cEVycm9yc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCShyZXZp
c2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2NvY29hL0Rv
d25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRG93bmxvYWQuaCIKLQotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0KLSNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBbbV9k
b3dubG9hZCBjYW5jZWxdOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShORVRX
T1JLX1NFU1NJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2VmbC9E
b3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAJKHJldmlzaW9uIDE5
NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291
cEVycm9yc0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkU291cEVy
cm9ycy5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNFZmwuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlRXJyb3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1SZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZERlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBkb3dubG9hZE5ldHdvcmtFcnJv
cihSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIGVycm9yQ29kZSwgZmFpbGluZ1VS
TCwgbG9jYWxpemVkRGVzY3JpcHRpb24pKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwbGF0Zm9ybURv
d25sb2FkRGVzdGluYXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBkb3dubG9hZERlc3RpbmF0aW9u
RXJyb3IocmVzcG9uc2UsIG1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9y
c0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9n
dGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCi0KLSNpbmNs
dWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJv
ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVJlc291cmNlRXJyb3IgcGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihpbnQgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3Jp
cHRpb24pCi17Ci0gICAgcmV0dXJuIGRvd25sb2FkTmV0d29ya0Vycm9yKFJlc291cmNlRXJyb3Io
ZXJyb3JEb21haW5Eb3dubG9hZCwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNj
cmlwdGlvbikpOwotfQotCi1SZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlv
bkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgcmV0dXJuIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihyZXNwb25zZSwg
bWVzc2FnZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0JKHJldmlzaW9u
IDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2Fk
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJEb3dubG9hZC5oIgotCi0jaWYgUExBVEZPUk0oSU9T
KSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQotI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgot
I2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNv
dXJjZUVycm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotI2ltcG9ydCA8
Q0ZOZXR3b3JrL0NGVVJMRG93bmxvYWQuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotLy8gRklY
TUU6IElmIHBvc3NpYmxlLCB3ZSBzaG91bGQgY29uc2lkZXIgbW92aW5nIHNvbWUgY2FsbGJhY2tz
IG9mZiB0aGUgbWFpbiB0aHJlYWQgb3IgYXQgbGVhc3QKLS8vIG1ha2luZyB0aGVtIGFzeW5jaG9u
b3VzIGNhbGxzLgotc3RhdGljIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQodm9pZCheYmxvY2sp
KCkpCi17Ci0gICAgaWYgKFJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGJsb2NrKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIGJsb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSBEb3dubG9hZCogdG9Eb3du
bG9hZChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
b3dubG9hZCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLX0KLQotc3RhdGljIHZv
aWQgc2V0VXBEb3dubG9hZENsaWVudChDRlVSTERvd25sb2FkQ2xpZW50JiBjbGllbnQsIERvd25s
b2FkJiBkb3dubG9hZCkKLXsKLSAgICBtZW1zZXQoJmNsaWVudCwgMCwgc2l6ZW9mKGNsaWVudCkp
OwotICAgIGNsaWVudC5jbGllbnRJbmZvID0gJmRvd25sb2FkOwotCi0gICAgY2xpZW50LmRpZFN0
YXJ0ID0gW10oQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewotICAg
ICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChjbGll
bnRJbmZvKS0+ZGlkU3RhcnQoKTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLQotICAgIGNsaWVudC53
aWxsU2VuZFJlcXVlc3QgPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlcXVlc3RSZWYgcmVx
dWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCopIC0+IENGVVJMUmVxdWVzdFJlZiB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRlVSTFJlcXVlc3RSZWY+KENGUmV0YWluKHJl
cXVlc3QpKTsKLSAgICB9OwotCi0gICAgY2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IFtdKENG
VVJMRG93bmxvYWRSZWYsIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgICAg
IHRvRG93bmxvYWQoY2xpZW50SW5mbyktPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Ci0g
ICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBbXShDRlVS
TERvd25sb2FkUmVmLCBDRkluZGV4IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewot
ICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChj
bGllbnRJbmZvKS0+ZGlkUmVjZWl2ZURhdGEobGVuZ3RoKTsKLSAgICAgICAgfSk7Ci0gICAgfTsK
LQotICAgIGNsaWVudC5zaG91bGREZWNvZGVEYXRhT2ZNSU1FVHlwZSA9IFtdKENGVVJMRG93bmxv
YWRSZWYsIENGU3RyaW5nUmVmIGVuY29kaW5nVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykg
LT4gQm9vbGVhbiB7Ci0gICAgICAgIF9fYmxvY2sgQk9PTCByZXR1cm5WYWx1ZSA9IE5POwotICAg
ICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0
b0Rvd25sb2FkKGNsaWVudEluZm8pLT5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShl
bmNvZGluZ1R5cGUpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwot
ICAgIH07Ci0KLSAgICBjbGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0
TmFtZSA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIG9iamVj
dE5hbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoXnsKLSAgICAgICAgICAgIGJvb2wgYWxsb3dPdmVyd3JpdGU7Ci0gICAgICAgICAgICBT
dHJpbmcgZGVzdGluYXRpb24gPSB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShvYmplY3ROYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0g
ICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIENG
VVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbihkb3dubG9hZFJlZiwgcmVpbnRlcnByZXRfY2FzdDxD
RlVSTFJlZj4oW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbl0pLCBhbGxvd092ZXJ3
cml0ZSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkQ3JlYXRlRGVzdGlu
YXRpb24gPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKSB7Ci0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgICAg
ICB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihDRlVSTEdldFN0
cmluZyhwYXRoKSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlkRmluaXNo
ID0gW10oQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewotICAgICAg
ICBkaXNwYXRjaE9uTWFpblRocmVhZCheewotICAgICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJ
bmZvKS0+ZGlkRmluaXNoKCk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBjbGllbnQuZGlk
RmFpbCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIENGRXJyb3JSZWYgZXJyb3Is
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQo
XnsKLSAgICAgICAgICAgIGF1dG8gcmVzdW1lRGF0YSA9IGFkb3B0Q0YoQ0ZVUkxEb3dubG9hZENv
cHlSZXN1bWVEYXRhKGRvd25sb2FkUmVmKSk7Ci0gICAgICAgICAgICB0b0Rvd25sb2FkKGNsaWVu
dEluZm8pLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UocmVzdW1lRGF0YSA/IENG
RGF0YUdldEJ5dGVQdHIocmVzdW1lRGF0YS5nZXQoKSkgOiBudWxscHRyLCByZXN1bWVEYXRhID8g
Q0ZEYXRhR2V0TGVuZ3RoKHJlc3VtZURhdGEuZ2V0KCkpIDogMCkpOwotICAgICAgICB9KTsKLSAg
ICB9OwotfQotI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCi0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZXN1bWUo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERv
d25sb2FkOjpzdGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0jaWYgVVNFKENGTkVUV09SSykKLSAgICBDRlVS
TERvd25sb2FkQ2xpZW50IGNsaWVudDsKLSAgICBzZXRVcERvd25sb2FkQ2xpZW50KGNsaWVudCwg
KnRoaXMpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIG1fZG93bmxv
YWQgPSBhZG9wdENGKENGVVJMRG93bmxvYWRDcmVhdGVBbmRTdGFydFdpdGhMb2FkaW5nQ29ubmVj
dGlvbihOVUxMLCBoYW5kbGUtPnJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKS5nZXQoKSwg
bV9yZXF1ZXN0LmNmVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSksIHJlc3BvbnNlLmNmVVJMUmVz
cG9uc2UoKSwgJmNsaWVudCkpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2Vsc2UK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNl
bCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZv
cm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25s
b2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50
aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25z
dCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL21hYy9E
b3dubG9hZE1hYy5tbQkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMzExICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkRv
d25sb2FkLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFVU0UoTkVUV09SS19TRVNTSU9OKQot
Ci0jaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KLSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIldlYlBhZ2UuaCIK
LQotQGludGVyZmFjZSBOU1VSTERvd25sb2FkIChXZWJOU1VSTERvd25sb2FkRGV0YWlscykKLSso
aWQpX2Rvd25sb2FkV2l0aExvYWRpbmdDb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25u
ZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKilyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZTooaWQpZGVsZWdh
dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5OihpZClwcm94eTsKLUBlbmQK
LQotQGludGVyZmFjZSBXS0Rvd25sb2FkQXNEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTERvd25s
b2FkRGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OkRvd25sb2FkKiBfZG93bmxvYWQ7Ci19Ci0tIChp
ZClpbml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2FkKilkb3dubG9hZDsKLS0gKHZvaWQp
aW52YWxpZGF0ZTsKLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi12b2lkIERvd25sb2FkOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKCFtX25z
VVJMRG93bmxvYWQpOwotICAgIEFTU0VSVCghbV9kZWxlZ2F0ZSk7Ci0KLSAgICBtX2RlbGVnYXRl
ID0gYWRvcHROUyhbW1dLRG93bmxvYWRBc0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25sb2Fk
OnRoaXNdKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBtX25zVVJM
RG93bmxvYWQgPSBhZG9wdE5TKFtbTlNVUkxEb3dubG9hZCBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0
Om1fcmVxdWVzdC5uc1VSTFJlcXVlc3QoVXBkYXRlSFRUUEJvZHkpIGRlbGVnYXRlOm1fZGVsZWdh
dGUuZ2V0KCldKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIC8vIEZJWE1F
OiBBbGxvdyB0aGlzIHRvIGJlIGNoYW5nZWQgYnkgdGhlIGNsaWVudC4KLSAgICBbbV9uc1VSTERv
d25sb2FkIHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOwotfQotCi12b2lkIERvd25sb2Fk
OjpzdGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKCFtX25zVVJMRG93bmxvYWQpOwotICAg
IEFTU0VSVCghbV9kZWxlZ2F0ZSk7Ci0KLSAgICBtX2RlbGVnYXRlID0gYWRvcHROUyhbW1dLRG93
bmxvYWRBc0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aERvd25sb2FkOnRoaXNdKTsKLSAgICBtX25z
VVJMRG93bmxvYWQgPSBbTlNVUkxEb3dubG9hZCBfZG93bmxvYWRXaXRoTG9hZGluZ0Nvbm5lY3Rp
b246aGFuZGxlLT5jb25uZWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6bV9yZXF1ZXN0Lm5zVVJMUmVxdWVz
dChVcGRhdGVIVFRQQm9keSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxlZ2F0ZTptX2RlbGVnYXRlLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eTpuaWxdOwotCi0gICAgLy8g
RklYTUU6IEFsbG93IHRoaXMgdG8gYmUgY2hhbmdlZCBieSB0aGUgY2xpZW50LgotICAgIFttX25z
VVJMRG93bmxvYWQgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTpOT107Ci19Ci0KLXZvaWQgRG93
bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKQotewotICAgIEFTU0VSVCghbV9uc1VSTERvd25sb2FkKTsKLSAgICBBU1NF
UlQoIW1fZGVsZWdhdGUpOwotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwotICAgIGlmIChtX3NhbmRib3hF
eHRlbnNpb24pCi0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwotCi0jcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgbV9kZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tXS0Rvd25sb2FkQXNEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhEb3dubG9hZDp0aGlzXSk7Ci0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0KLSAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cmVzdW1lRGF0YS5kYXRhKCkgbGVuZ3RoOnJl
c3VtZURhdGEuc2l6ZSgpXSk7Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0g
ICAgbV9uc1VSTERvd25sb2FkID0gYWRvcHROUyhbW05TVVJMRG93bmxvYWQgYWxsb2NdIGluaXRX
aXRoUmVzdW1lRGF0YTpuc0RhdGEuZ2V0KCkgZGVsZWdhdGU6bV9kZWxlZ2F0ZS5nZXQoKSBwYXRo
OnBhdGhdKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIG1fcmVxdWVzdCA9
IFttX25zVVJMRG93bmxvYWQgcmVxdWVzdF07Ci0KLSAgICAvLyBGSVhNRTogQWxsb3cgdGhpcyB0
byBiZSBjaGFuZ2VkIGJ5IHRoZSBjbGllbnQuCi0gICAgW21fbnNVUkxEb3dubG9hZCBzZXREZWxl
dGVzRmlsZVVwb25GYWlsdXJlOk5PXTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsK
LSAgICBbbV9uc1VSTERvd25sb2FkIGNhbmNlbF07Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBy
ZXN1bWVEYXRhID0gW21fbnNVUkxEb3dubG9hZCByZXN1bWVEYXRhXTsKLSAgICBkaWRDYW5jZWwo
SVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtyZXN1
bWVEYXRhIGJ5dGVzXSksIFtyZXN1bWVEYXRhIGxlbmd0aF0pKTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9uc1VSTERvd25sb2FkKTsK
LSAgICBBU1NFUlQobV9kZWxlZ2F0ZSk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBpbnZhbGlkYXRlXTsK
LSAgICBtX2RlbGVnYXRlID0gbnVsbHB0cjsKLSAgICBtX25zVVJMRG93bmxvYWQgPSBudWxscHRy
OwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0KLXZvaWQg
RG93bmxvYWQ6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
Ci17Ci0gICAgW2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLnNlbmRlcigpIHVzZUNyZWRlbnRpYWw6
Y3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTphdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotfQot
Ci12b2lkIERvd25sb2FkOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBjb250aW51ZVdpdGhv
dXRDcmVkZW50aWFsRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBEb3dubG9h
ZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5z
ZW5kZXIoKSBjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTphdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCldOwotfQotCi12b2lkIERvd25sb2Fk
OjpyZWNlaXZlZFJlcXVlc3RUb1BlcmZvcm1EZWZhdWx0SGFuZGxpbmcoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQotewotICAgIFthdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSBwZXJmb3JtRGVmYXVsdEhhbmRsaW5nRm9yQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDaGFsbGVuZ2VS
ZWplY3Rpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKQotewotICAgIFthdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5zZW5kZXIoKSByZWplY3RQ
cm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZVdpdGhDaGFsbGVuZ2U6YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0Rvd25sb2FkQXNEZWxlZ2F0ZQotCi0vLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGVzZSBjYWxsYmFja3Mgd291bGRuJ3QgaGF2ZSB0
byBiZSBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLXN0YXRpYyB2b2lkIGRpc3BhdGNoT25N
YWluVGhyZWFkKHZvaWQgKF5ibG9jaykoKSkKLXsKLSAgICBpZiAoUnVuTG9vcDo6aXNNYWluKCkp
IHsKLSAgICAgICAgYmxvY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRpc3Bh
dGNoX3N5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgYmxvY2spOwotfQotCi0tIChpZClp
bml0V2l0aERvd25sb2FkOihXZWJLaXQ6OkRvd25sb2FkKilkb3dubG9hZAotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgX2Rvd25sb2FkID0gZG93bmxvYWQ7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
aW52YWxpZGF0ZQotewotICAgIF9kb3dubG9hZCA9IDA7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWRE
aWRCZWdpbjooTlNVUkxEb3dubG9hZCAqKWRvd25sb2FkCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+
ZGlkU3RhcnQoKTsKLSAgICB9KTsKLX0KLQotLSAoTlNVUkxSZXF1ZXN0ICopZG93bmxvYWQ6KE5T
VVJMRG93bmxvYWQgKilkb3dubG9hZCB3aWxsU2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJl
cXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UK
LXsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotLSAoQk9PTClkb3dubG9hZDooTlNVUkxEb3du
bG9hZCAqKWNvbm5lY3Rpb24gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZToo
TlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5POwotfQotCi0t
ICh2b2lkKWRvd25sb2FkOihOU1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxl
bmdlCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9h
ZCkKLSAgICAgICAgICAgIF9kb3dubG9hZC0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKGNvcmUoY2hhbGxlbmdlKSk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5T
VVJMRG93bmxvYWQgKilkb3dubG9hZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZToo
TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZQotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLSAoQk9PTClkb3dubG9h
ZFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTERvd25sb2FkICopZG93bmxvYWQKLXsK
LSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilk
b3dubG9hZCBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQotewot
ICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAg
ICAgICAgICBfZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Ci0gICAgfSk7
Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCB3aWxsUmVz
dW1lV2l0aFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgZnJvbUJ5dGU6KGxvbmcg
bG9uZylzdGFydGluZ0J5dGUKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3du
bG9hZCBkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoOihOU1VJbnRlZ2VyKWxlbmd0aAotewotICAgIGRp
c3BhdGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAgICAgICAg
ICBfZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGxlbmd0aCk7Ci0gICAgfSk7Ci19Ci0KLS0gKEJP
T0wpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZCBzaG91bGREZWNvZGVTb3VyY2VE
YXRhT2ZNSU1FVHlwZTooTlNTdHJpbmcgKillbmNvZGluZ1R5cGUKLXsKLSAgICBfX2Jsb2NrIEJP
T0wgcmV0dXJuVmFsdWU7Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYg
KF9kb3dubG9hZCkKLSAgICAgICAgICAgIHJldHVyblZhbHVlID0gX2Rvd25sb2FkLT5zaG91bGRE
ZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShlbmNvZGluZ1R5cGUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFlFUzsKLSAgICB9KTsKLQotICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKLX0KLQotLSAodm9pZClkb3dubG9hZDooTlNVUkxEb3dubG9hZCAqKWRvd25sb2Fk
IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVu
YW1lCi17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgU3RyaW5nIGRlc3Rp
bmF0aW9uOwotICAgICAgICBib29sIGFsbG93T3ZlcndyaXRlOwotICAgICAgICBpZiAoX2Rvd25s
b2FkKQotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBfZG93bmxvYWQtPmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0KLSAg
ICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKLSAgICAgICAgICAgIFtkb3dubG9hZCBz
ZXREZXN0aW5hdGlvbjpkZXN0aW5hdGlvbiBhbGxvd092ZXJ3cml0ZTphbGxvd092ZXJ3cml0ZV07
Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZG93bmxvYWQ6KE5TVVJMRG93bmxvYWQgKilkb3dubG9h
ZCBkaWRDcmVhdGVEZXN0aW5hdGlvbjooTlNTdHJpbmcgKilwYXRoCi17Ci0gICAgZGlzcGF0Y2hP
bk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKF9kb3dubG9hZCkKLSAgICAgICAgICAgIF9kb3du
bG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24ocGF0aCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQp
ZG93bmxvYWREaWRGaW5pc2g6KE5TVVJMRG93bmxvYWQgKilkb3dubG9hZAotewotICAgIGRpc3Bh
dGNoT25NYWluVGhyZWFkKF57Ci0gICAgICAgIGlmIChfZG93bmxvYWQpCi0gICAgICAgICAgICBf
ZG93bmxvYWQtPmRpZEZpbmlzaCgpOwotICAgIH0pOwotfQotCi0tICh2b2lkKWRvd25sb2FkOihO
U1VSTERvd25sb2FkICopZG93bmxvYWQgZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9y
Ci17Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKLSAgICAgICAgaWYgKCFfZG93bmxvYWQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gcmVzdW1l
RGF0YSA9IFtkb3dubG9hZCByZXN1bWVEYXRhXTsKLSAgICAgICAgSVBDOjpEYXRhUmVmZXJlbmNl
IGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW3Jlc3VtZURh
dGEgYnl0ZXNdKSwgW3Jlc3VtZURhdGEgbGVuZ3RoXSk7Ci0KLSAgICAgICAgX2Rvd25sb2FkLT5k
aWRGYWlsKGVycm9yLCBkYXRhUmVmZXJlbmNlKTsKLSAgICB9KTsKLX0KLQotQGVuZAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAu
Y3BwCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Vi
a2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25s
b2FkLmgiCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRG93bmxvYWRT
b3VwRXJyb3JzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8u
aD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGli
Lmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBEb3dubG9hZENsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGljOgot
ICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkKiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rvd25s
b2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAgICwg
bV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2FkQ2xp
ZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmlsZV9k
ZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAg
ICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rlc3Rp
bmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRlRmls
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lk
IGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLT5kaWRGYWlsKGVy
cm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICAgICAgbV9kb3du
bG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLQotICAgICAgICBpZiAocmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVk
KHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwg
cmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzdWdnZXN0ZWRG
aWxlbmFtZSA9IHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCk7Ci0gICAgICAgIGlmIChzdWdn
ZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSByZXNwb25z
ZS51cmwoKTsKLSAgICAgICAgICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzdWdnZXN0ZWRG
aWxlbmFtZSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwubGFzdFBhdGhDb21wb25lbnQo
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZGVzdGluYXRpb25VUkkgPSBtX2Rvd25s
b2FkLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxl
bmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvblVSSS5pc0Vt
cHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+
IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRldGVybWluZSBkZXN0aW5hdGlvbiBV
UkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1lICVzIiksIHN1Z2dlc3RlZEZp
bGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxzZQotICAgICAgICAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBkZXRlcm1pbmUgZGVzdGluYXRp
b24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxlbmFtZSAiLCBzdWdnZXN0ZWRG
aWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93
bmxvYWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fZGVzdGluYXRpb25GaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlvblVSSS51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgICAgIEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+IG91dHB1dFN0cmVhbTsKLSAgICAg
ICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBpZiAobV9hbGxvd092ZXJ3
cml0ZSkKLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFj
ZShtX2Rlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgRkFMU0UsIEdfRklMRV9DUkVBVEVf
Tk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfY3JlYXRlKG1fZGVzdGluYXRpb25G
aWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkp
OwotICAgICAgICBpZiAoIW91dHB1dFN0cmVhbSkgewotICAgICAgICAgICAgbV9kZXN0aW5hdGlv
bkZpbGUuY2xlYXIoKTsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxv
YWREZXN0aW5hdGlvbkVycm9yKHJlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGludGVybWVkaWF0ZVVSSSA9
IGRlc3RpbmF0aW9uVVJJICsgIi53a2Rvd25sb2FkIjsKLSAgICAgICAgbV9pbnRlcm1lZGlhdGVG
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgp
LmRhdGEoKSkpOwotICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVw
bGFjZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIDAsIFRSVUUsIEdfRklMRV9DUkVBVEVfTk9O
RSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghbV9vdXRwdXRTdHJlYW0pIHsK
LSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVy
cm9yKHJlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24oZGVzdGlu
YXRpb25VUkkpOwotICAgIH0KLQotICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIGludCAvKmVuY29kZWREYXRh
TGVuZ3RoKi8pCi0gICAgewotICAgICAgICBpZiAobV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0
aXZlKCkpIHsKLSAgICAgICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlci5zdG9wKCk7Ci0gICAg
ICAgICAgICBoYW5kbGVSZXNwb25zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3NpemUgYnl0
ZXNXcml0dGVuOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
IGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwoR19PVVRQVVRfU1RSRUFNKG1fb3V0cHV0U3RyZWFt
LmdldCgpKSwgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAmZXJyb3Iub3V0UHRyKCkp
OwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRm
b3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9kb3dubG9hZC0+ZGlk
UmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCi0gICAgewotICAgICAgICBtX291dHB1dFN0
cmVhbSA9IDA7Ci0KLSAgICAgICAgQVNTRVJUKG1fZGVzdGluYXRpb25GaWxlKTsKLSAgICAgICAg
QVNTRVJUKG1faW50ZXJtZWRpYXRlRmlsZSk7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9y
PiBlcnJvcjsKLSAgICAgICAgaWYgKCFnX2ZpbGVfbW92ZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0
KCksIG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ09QWV9PVkVSV1JJVEUsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpIHsKLSAgICAgICAgICAgIGRv
d25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2Us
IGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW5mb19uZXco
KSk7Ci0gICAgICAgIENTdHJpbmcgdXJpID0gbV9yZXNwb25zZS51cmwoKS5zdHJpbmcoKS51dGY4
KCk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCks
ICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwgdXJpLmRhdGEoKSk7Ci0gICAgICAgIGdfZmlsZV9p
bmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJ4YXR0cjo6eGRnLm9yaWdpbi51
cmwiLCB1cmkuZGF0YSgpKTsKLSAgICAgICAgZ19maWxlX3NldF9hdHRyaWJ1dGVzX2FzeW5jKG1f
ZGVzdGluYXRpb25GaWxlLmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05F
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAg
ICAgIG1fZG93bmxvYWQtPmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAg
ICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJv
ckNvZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigp
KSk7Ci0gICAgfQotCi0gICAgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikKLSAgICB7
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5ub3RTaG93
VVJMKFJlc291cmNlSGFuZGxlKikKLSAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7Ci0g
ICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQoKTsK
LSAgICAgICAgbV9kb3dubG9hZC0+ZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlKCkKLSAgICB7Ci0gICAgICAgIGRpZFJlY2Vp
dmVSZXNwb25zZShudWxscHRyLCBtX2RlbGF5ZWRSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBoYW5kbGVSZXNwb25zZUxhdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNOdWxsKCkpOwotICAgICAgICBBU1NF
UlQoIW1faGFuZGxlUmVzcG9uc2VMYXRlci5pc0FjdGl2ZSgpKTsKLQotICAgICAgICBtX2RlbGF5
ZWRSZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgICAgIC8vIENhbGwgZGlkUmVjZWl2ZVJlc3Bv
bnNlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIHRoZSBkb3dubG9hZCBpcyBhZGRlZAotICAgICAg
ICAvLyB0byB0aGUgRG93bmxvYWRNYW5hZ2VyIGRvd25sb2FkcyBtYXAuCi0gICAgICAgIG1faGFu
ZGxlUmVzcG9uc2VMYXRlci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0gICAgRG93bmxvYWQq
IG1fZG93bmxvYWQ7Ci0gICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gbV9vdXRwdXRTdHJl
YW07Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIEdSZWZQdHI8R0ZpbGU+
IG1fZGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1faW50ZXJtZWRpYXRlRmls
ZTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fZGVsYXllZFJlc3BvbnNlOwotICAgIFJ1bkxvb3A6
OlRpbWVyPERvd25sb2FkQ2xpZW50PiBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7Ci0gICAgYm9vbCBt
X2FsbG93T3ZlcndyaXRlOwotfTsKLQotdm9pZCBEb3dubG9hZDo6c3RhcnQoKQotewotICAgIEFT
U0VSVCghbV9kb3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsK
LSAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4o
dGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoMCwg
bV9yZXF1ZXN0LCBtX2Rvd25sb2FkQ2xpZW50LmdldCgpLCBmYWxzZSwgZmFsc2UpOwotICAgIGRp
ZFN0YXJ0KCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhh
bmRsZSogcmVzb3VyY2VIYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQot
ewotICAgIEFTU0VSVCghbV9kb3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNl
SGFuZGxlKTsKLSAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9h
ZENsaWVudD4odGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IHJlc291cmNlSGFuZGxlLT5y
ZWxlYXNlRm9yRG93bmxvYWQobV9kb3dubG9hZENsaWVudC5nZXQoKSk7Ci0gICAgZGlkU3RhcnQo
KTsKLSAgICBzdGF0aWNfY2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0
KCkpLT5oYW5kbGVSZXNwb25zZUxhdGVyKHJlc3BvbnNlKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6
cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBEb3dubG9hZDo6Y2FuY2VsKCkKLXsKLSAgICBpZiAoIW1fcmVzb3VyY2VIYW5kbGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIENhbmNlbGxpbmcgdGhlIGRvd25sb2FkIHdpbGwgZGVs
ZXRlIGl0IGFuZCBwbGF0Zm9ybUludmFsaWRhdGUoKSB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZGVz
dHJ1Y3Rvci4KLSAgICAvLyBTbywgd2UgbmVlZCB0byBzZXQgbV9yZXNvdXJjZUhhbmRsZSB0byBu
dWxscHRyIGJlZm9yZSBhY3R1YWxseSBjYW5jZWxsaW5nIHRoZSBkb3dubG9hZCB0byBtYWtlIHN1
cmUKLSAgICAvLyBpdCB3b24ndCBiZSBjYW5jZWxsZWQgYWdhaW4gYnkgcGxhdGZvcm1JbnZhbGlk
YXRlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzY1MC4K
LSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IHJlc291cmNlSGFuZGxlID0gbV9yZXNvdXJjZUhh
bmRsZS5yZWxlYXNlKCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93bmxvYWRDbGllbnQqPihtX2Rvd25s
b2FkQ2xpZW50LmdldCgpKS0+Y2FuY2VsKHJlc291cmNlSGFuZGxlLmdldCgpKTsKLX0KLQotdm9p
ZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAobV9yZXNvdXJjZUhh
bmRsZSkgewotICAgICAgICBtX3Jlc291cmNlSGFuZGxlLT5jbGVhckNsaWVudCgpOwotICAgICAg
ICBtX3Jlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgbV9yZXNvdXJjZUhhbmRsZSA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLSAgICBtX3Jlc291cmNlSGFu
ZGxlID0gbnVsbHB0cjsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRDcmVkZW50aWFsKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENh
bmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y29udGludWVXaXRob3V0Q3JlZGVudGlh
bChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAmKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnVzZUNyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBEb3dubG9hZDo6cmVjZWl2ZWRSZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5n
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIERvd25sb2FkOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxv
YWRzL3NvdXAvRG93bmxvYWRTb3VwRXJyb3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cEVycm9ycy5oCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRT
b3VwRXJyb3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEb3dubG9hZFNvdXBFcnJvcnNfaAotI2RlZmluZSBEb3dubG9hZFNv
dXBFcnJvcnNfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGludCBlcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNj
cmlwdGlvbik7Ci1XZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBsYXRmb3JtRG93bmxvYWREZXN0aW5h
dGlvbkVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIERvd25sb2Fk
U291cEVycm9yc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1
c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkN1c3RvbVByb3RvY29s
TWFuYWdlci5oIgotCi0jaW1wb3J0ICJDaGlsZFByb2Nlc3MuaCIKLSNpbXBvcnQgIkN1c3RvbVBy
b3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCi0jaW1wb3J0ICJOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL1VSTC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+Ci0KLSNpZmRlZiBfX2hhc19pbmNsdWRlCi0jaWYgX19oYXNfaW5jbHVk
ZSg8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb25Qcml2YXRlLmg+KQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9OU1VSTENvbm5lY3Rpb25Qcml2YXRlLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi1AaW50ZXJm
YWNlIE5TVVJMQ29ubmVjdGlvbiAoKQotKyAoQ0ZSdW5Mb29wUmVmKXJlc291cmNlTG9hZGVyUnVu
TG9vcDsKLUBlbmQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXN0YXRpYyBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIHNoYXJlZEN1c3RvbVByb3RvY29s
TWFuYWdlcjsKLQotc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlQ3VzdG9tUHJvdG9jb2xJRCgpCi17
Ci0gICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1ZUN1c3RvbVByb3RvY29sSUQgPSAwOwotICAgIHJl
dHVybiArK3VuaXF1ZUN1c3RvbVByb3RvY29sSUQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi1AaW50ZXJmYWNlIFdLQ3VzdG9tUHJvdG9jb2wgOiBOU1VSTFByb3RvY29sIHsKLUBwcml2
YXRlCi0gICAgdWludDY0X3QgX2N1c3RvbVByb3RvY29sSUQ7Ci19Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQ7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXS0N1c3RvbVByb3RvY29sCi0KLUBzeW50aGVzaXplIGN1c3RvbVByb3RvY29s
SUQgPSBfY3VzdG9tUHJvdG9jb2xJRDsKLQotKyAoQk9PTCljYW5Jbml0V2l0aFJlcXVlc3Q6KE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3QKLXsKLSAgICByZXR1cm4gc2hhcmVkQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLT5zdXBwb3J0c1NjaGVtZShbW1tyZXF1ZXN0IFVSTF0gc2NoZW1lXSBsb3dlcmNhc2VT
dHJpbmddKTsKLX0KLQotKyAoTlNVUkxSZXF1ZXN0ICopY2Fub25pY2FsUmVxdWVzdEZvclJlcXVl
c3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKLXsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQot
KyAoQk9PTClyZXF1ZXN0SXNDYWNoZUVxdWl2YWxlbnQ6KE5TVVJMUmVxdWVzdCAqKWEgdG9SZXF1
ZXN0OihOU1VSTFJlcXVlc3QgKiliCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChpZClpbml0
V2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgY2FjaGVkUmVzcG9uc2U6KE5TQ2Fj
aGVkVVJMUmVzcG9uc2UgKiljYWNoZWRSZXNwb25zZSBjbGllbnQ6KGlkPE5TVVJMUHJvdG9jb2xD
bGllbnQ+KWNsaWVudAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSZXF1ZXN0OnJlcXVl
c3QgY2FjaGVkUmVzcG9uc2U6Y2FjaGVkUmVzcG9uc2UgY2xpZW50OmNsaWVudF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9jdXN0b21Qcm90b2NvbElE
ID0gZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCk7Ci0gICAgc2hhcmVkQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLT5hZGRDdXN0b21Qcm90b2NvbChzZWxmKTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzdGFydExvYWRpbmcKLXsKLSAgICBzaGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXIt
PmNoaWxkUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eTo6U3RhcnRMb2FkaW5nKHNlbGYuY3VzdG9tUHJvdG9jb2xJRCwgW3NlbGYgcmVxdWVzdF0pLCAw
KTsKLX0KLQotLSAodm9pZClzdG9wTG9hZGluZwotewotICAgIHNoYXJlZEN1c3RvbVByb3RvY29s
TWFuYWdlci0+Y2hpbGRQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpTdG9wTG9hZGluZyhzZWxmLmN1c3RvbVByb3RvY29sSUQpLCAwKTsKLSAgICBz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXItPnJlbW92ZUN1c3RvbVByb3RvY29sKHNlbGYpOwot
fQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jb25zdCBjaGFyKiBDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OnN1cHBsZW1lbnROYW1lKCkKLXsKLSAgICByZXR1cm4gIkN1c3RvbVByb3Rv
Y29sTWFuYWdlciI7Ci19Ci0KLUN1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKENoaWxkUHJvY2VzcyogY2hpbGRQcm9jZXNzKQotICAgIDogbV9jaGlsZFByb2Nlc3Mo
Y2hpbGRQcm9jZXNzKQotICAgICwgbV9tZXNzYWdlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNv
bS5hcHBsZS5XZWJLaXQuQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIikpCi17Ci0gICAgQVNTRVJUKCFz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXIpOwotICAgIHNoYXJlZEN1c3RvbVByb3RvY29sTWFu
YWdlciA9IHRoaXM7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlv
bi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMp
OwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBbTlNVUkxQ
cm90b2NvbCByZWdpc3RlckNsYXNzOltXS0N1c3RvbVByb3RvY29sIGNsYXNzXV07Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyU2NoZW1lKHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHNbaV0pOwotfQotCi12
b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6YWRkQ3VzdG9tUHJvdG9jb2woV0tDdXN0b21Qcm90
b2NvbCAqY3VzdG9tUHJvdG9jb2wpCi17Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sKTsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOwotICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYXAuYWRkKGN1c3RvbVByb3RvY29sLmN1c3RvbVByb3RvY29sSUQsIGN1c3Rv
bVByb3RvY29sKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlbW92ZUN1c3Rv
bVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKmN1c3RvbVByb3RvY29sKQotewotICAgIEFTU0VS
VChjdXN0b21Qcm90b2NvbCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9jdXN0b21Qcm90b2Nv
bE1hcE11dGV4KTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLnJlbW92ZShjdXN0b21Qcm90b2Nv
bC5jdXN0b21Qcm90b2NvbElEKTsKLX0KLSAgICAKLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
OjpyZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBBU1NFUlQoIXNj
aGVtZS5pc051bGwoKSk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9yZWdpc3RlcmVkU2NoZW1l
c011dGV4KTsKLSAgICBtX3JlZ2lzdGVyZWRTY2hlbWVzLmFkZChzY2hlbWUpOwotfQotICAgIAot
dm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5n
JiBzY2hlbWUpCi17Ci0gICAgQVNTRVJUKCFzY2hlbWUuaXNOdWxsKCkpOwotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcmVnaXN0ZXJlZFNjaGVtZXNNdXRleCk7Ci0gICAgbV9yZWdpc3RlcmVkU2No
ZW1lcy5yZW1vdmUoc2NoZW1lKTsKLX0KLQotYm9vbCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN1
cHBvcnRzU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hlbWUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cmVnaXN0ZXJlZFNjaGVtZXNNdXRleCk7Ci0gICAgcmV0dXJuIG1fcmVnaXN0ZXJlZFNjaGVtZXMu
Y29udGFpbnMoc2NoZW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoT25SZXNv
dXJjZUxvYWRlclJ1bkxvb3Aodm9pZCAoXmJsb2NrKSgpKQotewotICAgIENGUnVuTG9vcFBlcmZv
cm1CbG9jayhbTlNVUkxDb25uZWN0aW9uIHJlc291cmNlTG9hZGVyUnVuTG9vcF0sIGtDRlJ1bkxv
b3BEZWZhdWx0TW9kZSwgYmxvY2spOwotICAgIENGUnVuTG9vcFdha2VVcChbTlNVUkxDb25uZWN0
aW9uIHJlc291cmNlTG9hZGVyUnVuTG9vcF0pOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFu
YWdlcjo6ZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Q
cm90b2NvbD4gcHJvdG9jb2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAg
IGlmICghcHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU0Vycm9y
PiBuc0Vycm9yID0gZXJyb3IubnNFcnJvcigpOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9h
ZGVyUnVuTG9vcCheIHsKLSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sOnBy
b3RvY29sLmdldCgpIGRpZEZhaWxXaXRoRXJyb3I6bnNFcnJvci5nZXQoKV07Ci0gICAgfSk7Ci0K
LSAgICByZW1vdmVDdXN0b21Qcm90b2NvbChwcm90b2NvbC5nZXQoKSk7Ci19Ci0KLXZvaWQgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElE
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpCi17Ci0gICAgUmV0YWluUHRyPFdLQ3Vz
dG9tUHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0b21Qcm90b2NvbElEKTsK
LSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8TlNE
YXRhPiBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRhdGEu
ZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV0pOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9h
ZGVyUnVuTG9vcCheIHsKLSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sOnBy
b3RvY29sLmdldCgpIGRpZExvYWREYXRhOm5zRGF0YS5nZXQoKV07Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IHVpbnQzMl90IGNhY2hlU3RvcmFnZVBvbGljeSkKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Q
cm90b2NvbD4gcHJvdG9jb2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAg
IGlmICghcHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU1VSTFJl
c3BvbnNlPiBuc1Jlc3BvbnNlID0gcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwotCi0gICAgZGlz
cGF0Y2hPblJlc291cmNlTG9hZGVyUnVuTG9vcCheIHsKLSAgICAgICAgW1twcm90b2NvbCBjbGll
bnRdIFVSTFByb3RvY29sOnByb3RvY29sLmdldCgpIGRpZFJlY2VpdmVSZXNwb25zZTpuc1Jlc3Bv
bnNlLmdldCgpIGNhY2hlU3RvcmFnZVBvbGljeTpzdGF0aWNfY2FzdDxOU1VSTENhY2hlU3RvcmFn
ZVBvbGljeT4oY2FjaGVTdG9yYWdlUG9saWN5KV07Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpkaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29s
SUQpCi17Ci0gICAgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9j
b2xGb3JJRChjdXN0b21Qcm90b2NvbElEKTsKLSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkaXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKF4gewotICAgICAg
ICBbW3Byb3RvY29sIGNsaWVudF0gVVJMUHJvdG9jb2xEaWRGaW5pc2hMb2FkaW5nOnByb3RvY29s
LmdldCgpXTsKLSAgICB9KTsKLQotICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKHByb3RvY29sLmdl
dCgpKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1Jl
cXVlc3QodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQotewotICAgIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbCA9
IHByb3RvY29sRm9ySUQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVzdD4gbnNSZXF1ZXN0ID0g
cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7Ci0gICAg
UmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zUmVkaXJlY3RSZXNwb25zZSA9IHJlZGlyZWN0UmVz
cG9uc2UubnNVUkxSZXNwb25zZSgpOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVyUnVu
TG9vcChbcHJvdG9jb2wsIG5zUmVxdWVzdCwgbnNSZWRpcmVjdFJlc3BvbnNlXSgpIHsKLSAgICAg
ICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sOnByb3RvY29sLmdldCgpIHdhc1JlZGly
ZWN0ZWRUb1JlcXVlc3Q6bnNSZXF1ZXN0LmdldCgpIHJlZGlyZWN0UmVzcG9uc2U6bnNSZWRpcmVj
dFJlc3BvbnNlLmdldCgpXTsKLSAgICB9KTsKLX0KLQotUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9j
b2w+IEN1c3RvbVByb3RvY29sTWFuYWdlcjo6cHJvdG9jb2xGb3JJRCh1aW50NjRfdCBjdXN0b21Q
cm90b2NvbElEKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VzdG9tUHJvdG9jb2xNYXBN
dXRleCk7Ci0KLSAgICBDdXN0b21Qcm90b2NvbE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2N1
c3RvbVByb3RvY29sTWFwLmZpbmQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKGl0ID09IG1f
Y3VzdG9tUHJvdG9jb2xNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAg
QVNTRVJUKGl0LT52YWx1ZSk7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdl
ci5oCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEN1c3RvbVByb3RvY29s
TWFuYWdlcl9oCi0jZGVmaW5lIEN1c3RvbVByb3RvY29sTWFuYWdlcl9oCi0KLSNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCi0jaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci1PQkpDX0NMQVNTIFdLQ3VzdG9tUHJvdG9jb2w7Ci0jZWxzZQotI2lu
Y2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaCIKLSNlbmRpZgotCi0KLW5hbWVzcGFj
ZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENoaWxkUHJvY2VzczsKLXN0cnVjdCBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKLQotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
IDogcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIElQQzo6Q29ubmVjdGlv
bjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
dXN0b21Qcm90b2NvbE1hbmFnZXIpOwotcHVibGljOgotICAgIGV4cGxpY2l0IEN1c3RvbVByb3Rv
Y29sTWFuYWdlcihDaGlsZFByb2Nlc3MqKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBw
bGVtZW50TmFtZSgpOwotCi0gICAgQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MoKSBjb25zdCB7
IHJldHVybiBtX2NoaWxkUHJvY2VzczsgfQotCi0gICAgdm9pZCByZWdpc3RlclNjaGVtZShjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgYm9vbCBzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICB2b2lkIGFkZEN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKik7
Ci0gICAgdm9pZCByZW1vdmVDdXN0b21Qcm90b2NvbChXS0N1c3RvbVByb3RvY29sICopOwotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgLy8gQ2hpbGRQcm9jZXNzU3VwcGxlbWVudAotICAgIHZvaWQg
aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7Ci0KLSAgICAv
LyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCBkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Q
cm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgdWludDMyX3QgY2FjaGVTdG9yYWdlUG9saWN5KTsKLSAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgdm9pZCB3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpOwotCi0gICAgQ2hpbGRQcm9jZXNzKiBtX2NoaWxkUHJvY2VzczsKLSAg
ICBSZWZQdHI8V29ya1F1ZXVlPiBtX21lc3NhZ2VRdWV1ZTsKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRTY2hlbWVzOwotICAgIExvY2sgbV9y
ZWdpc3RlcmVkU2NoZW1lc011dGV4OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBS
ZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4+IEN1c3RvbVByb3RvY29sTWFwOwotICAgIEN1c3Rv
bVByb3RvY29sTWFwIG1fY3VzdG9tUHJvdG9jb2xNYXA7Ci0gICAgTG9jayBtX2N1c3RvbVByb3Rv
Y29sTWFwTXV0ZXg7Ci0gICAgCi0gICAgLy8gV0tDdXN0b21Qcm90b2NvbCBvYmplY3RzIGNhbiBi
ZSByZW1vdmVkIGZyb20gdGhlIG1fY3VzdG9tUHJvdG9jb2xNYXAgZnJvbSBtdWx0aXBsZSB0aHJl
YWRzLgotICAgIC8vIFdlIHJldHVybiBhIFJldGFpblB0ciBoZXJlIGJlY2F1c2UgaXQgaXMgdW5z
YWZlIHRvIHJldHVybiBhIHJhdyBwb2ludGVyIHNpbmNlIHRoZSBvYmplY3QgbWlnaHQgaW1tZWRp
YXRlbHkgYmUgZGVzdHJveWVkIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLgotICAgIFJldGFpblB0
cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbEZvcklEKHVpbnQ2NF90IGN1c3RvbVByb3RvY29s
SUQpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogTW92ZSBtYWMgc3BlY2lmaWMgY29kZSB0byBDdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXN0b21Qcm90b2Nv
bE1hbmFnZXJJbXBsPiBtX2ltcGw7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MSwzMiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1l
c3NhZ2VzIC0+IEN1c3RvbVByb3RvY29sTWFuYWdlciB7Ci0gICAgRGlkRmFpbFdpdGhFcnJvcih1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQot
ICAgIERpZExvYWREYXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIElQQzo6RGF0YVJlZmVy
ZW5jZSBkYXRhKQotICAgIERpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElELCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCB1aW50MzJfdCBjYWNoZVN0
b3JhZ2VQb2xpY3kpCi0gICAgRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElEKQotICAgIFdhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJ
RCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgcmVkaXJlY3RSZXNwb25zZSk7Ci0KLSAgICBSZWdpc3RlclNjaGVtZShTdHJpbmcgbmFt
ZSkKLSAgICBVbnJlZ2lzdGVyU2NoZW1lKFN0cmluZyBuYW1lKQotfQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5jcHAJKHJl
dmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBs
LmgiCi0KLSNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXNwb25zZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQo
KQotewotICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVDdXN0b21Qcm90b2NvbElEID0gMDsKLSAg
ICByZXR1cm4gKyt1bmlxdWVDdXN0b21Qcm90b2NvbElEOwotfQotCi1zdHJ1Y3QgV2ViU291cFJl
cXVlc3RBc3luY0RhdGEgewotICAgIFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKEdUYXNrKiB0YXNr
LCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3RHZW5lcmljKQotICAgICAgICA6IHRh
c2sodGFzaykKLSAgICAgICAgLCByZXF1ZXN0KHJlcXVlc3RHZW5lcmljKQotICAgICAgICAsIGNh
bmNlbGxhYmxlKGdfdGFza19nZXRfY2FuY2VsbGFibGUodGFzaykpCi0gICAgewotICAgICAgICAv
LyBJZiB0aGUgc3RydWN0IGNvbnRhaW5zIGEgbnVsbCByZXF1ZXN0LCBpdCBpcyBiZWNhdXNlIHRo
ZSByZXF1ZXN0IGZhaWxlZC4KLSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09C
SkVDVChyZXF1ZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAg
fQotCi0gICAgfldlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKCkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZXF1ZXN0KQotICAgICAgICAgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlcihHX09CSkVD
VChyZXF1ZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAgfQot
Ci0gICAgYm9vbCByZXF1ZXN0RmFpbGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjYW5jZWxsYWJsZS5nZXQoKSkgfHwgIXJlcXVlc3Q7Ci0gICAg
fQotCi0gICAgR1JlZlB0cjxHVGFzaz4gcmVsZWFzZVRhc2soKQotICAgIHsKLSAgICAgICAgR1Rh
c2sqIHJldHVyblZhbHVlID0gdGFzazsKLSAgICAgICAgdGFzayA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBhZG9wdEdSZWYocmV0dXJuVmFsdWUpOwotICAgIH0KLQotICAgIEdUYXNrKiB0YXNr
OwotICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdDsKLSAgICBHUmVmUHRyPEdD
YW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IHN0cmVh
bTsKLX07Ci0KLUN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckltcGwoQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2Vzcyhj
aGlsZFByb2Nlc3MpCi0gICAgLCBtX3NjaGVtZXMoYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193
aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKSkKLXsKLX0KLQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1w
bDo6fkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoKQotewotfQotCi12b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlckltcGw6OnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewot
ICAgIGlmIChtX3NjaGVtZXMtPmxlbikKLSAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4
X2Zhc3QobV9zY2hlbWVzLmdldCgpLCBtX3NjaGVtZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2Fy
cmF5X2FkZChtX3NjaGVtZXMuZ2V0KCksIGdfc3RyZHVwKHNjaGVtZS51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgZ19wdHJfYXJyYXlfYWRkKG1fc2NoZW1lcy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBT
b3VwU2Vzc2lvbiogc2Vzc2lvbiA9IFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVs
dFNlc3Npb24oKS5zb3VwU2Vzc2lvbigpOwotICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIGdlbmVyaWNS
ZXF1ZXN0Q2xhc3MgPSBzdGF0aWNfY2FzdDxTb3VwUmVxdWVzdENsYXNzKj4oZ190eXBlX2NsYXNz
X3JlZihXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwotICAgIGdlbmVyaWNSZXF1
ZXN0Q2xhc3MtPnNjaGVtZXMgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKio+KG1fc2NoZW1lcy0+cGRhdGEpKTsKLSAgICBzdGF0aWNfY2FzdDxXZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWNDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0dFTkVSSUMpKS0+Y2xpZW50ID0gdGhpczsKLSAgICBzb3VwX3Nlc3Npb25fYWRk
X2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJ
Qyk7Ci19Ci0KLWJvb2wgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6c3VwcG9ydHNTY2hlbWUo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgaWYgKHNjaGVtZS5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBjU2NoZW1lID0gc2NoZW1lLnV0ZjgoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zY2hlbWVzLT5sZW47ICsraSkgewotICAg
ICAgICBpZiAoY1NjaGVtZSA9PSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19wdHJfYXJyYXlfaW5kZXgo
bV9zY2hlbWVzLmdldCgpLCBpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6
ZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSog
ZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIEFT
U0VSVChkYXRhKTsKLQotICAgIC8vIEVpdGhlciB3ZSBoYXZlbid0IHN0YXJ0ZWQgcmVhZGluZyB0
aGUgc3RyZWFtIHlldCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZQotICAg
IC8vIHRhc2sgZmlyc3QsIG9yIHdlIGZhaWxlZCByZWFkaW5nIGl0IGFuZCB0aGUgdGFzayB3YXMg
YWxyZWFkeSBjb21wbGV0ZWQgYnkgZGlkTG9hZERhdGEoKS4KLSAgICBBU1NFUlQoIWRhdGEtPnN0
cmVhbSB8fCAhZGF0YS0+dGFzayk7Ci0KLSAgICBpZiAoIWRhdGEtPnN0cmVhbSkgewotICAgICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gZGF0YS0+cmVsZWFzZVRhc2soKTsKLSAgICAgICAgQVNT
RVJUKHRhc2suZ2V0KCkpOwotICAgICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdl
dCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAot
ICAgICAgICAgICAgZXJyb3IuZXJyb3JDb2RlKCksICIlcyIsIGVycm9yLmxvY2FsaXplZERlc2Ny
aXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1EaWRGYWlsV2l0aEVycm9yKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNKGRhdGEtPnN0cmVhbS5nZXQoKSksIGVycm9yKTsKLQotICAgIG1fY3VzdG9tUHJv
dG9jb2xNYXAucmVtb3ZlKGN1c3RvbVByb3RvY29sSUQpOwotfQotCi12b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlckltcGw6OmRpZExvYWREYXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkKLXsKLSAgICBXZWJTb3VwUmVx
dWVzdEFzeW5jRGF0YSogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3Rv
Y29sSUQpOwotICAgIC8vIFRoZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhl
IHJlcXVlc3QgbWFwIGlmIGEgcHJldmlvdXMgY2h1bmsgZmFpbGVkCi0gICAgLy8gYW5kIGEgbmV3
IG1lc3NhZ2Ugd2FzIHNlbnQgYnkgdGhlIFVJIHByb2Nlc3MgYmVmb3JlIGJlaW5nIG5vdGlmaWVk
IGFib3V0IHRoZSBmYWlsdXJlLgotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFkYXRhLT5zdHJlYW0pIHsKLSAgICAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGRh
dGEtPnJlbGVhc2VUYXNrKCk7Ci0gICAgICAgIEFTU0VSVCh0YXNrLmdldCgpKTsKLQotICAgICAg
ICBnb2Zmc2V0IHNvdXBDb250ZW50TGVuZ3RoID0gc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xl
bmd0aChTT1VQX1JFUVVFU1QoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkpKSk7
Ci0gICAgICAgIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGggPSBzb3VwQ29udGVudExlbmd0aCA9PSAt
MSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc291cENvbnRlbnRMZW5ndGgpOwotICAgICAg
ICBpZiAoIWRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSByZXBs
eSwganVzdCBjcmVhdGUgYW5kIGVtcHR5IEdNZW1vcnlJbnB1dFN0cmVhbS4KLSAgICAgICAgICAg
IGRhdGEtPnN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKTsKLSAgICAgICAgfSBl
bHNlIGlmIChkYXRhUmVmZXJlbmNlLnNpemUoKSA9PSBjb250ZW50TGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAvLyBXZSBkb24ndCBleHBlY3QgbW9yZSBkYXRhLCBzbyB3ZSBjYW4ganVzdCBjcmVhdGUg
YSBHTWVtb3J5SW5wdXRTdHJlYW0gd2l0aCBhbGwgdGhlIGRhdGEuCi0gICAgICAgICAgICBkYXRh
LT5zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShnX21lbWR1cChk
YXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpLCBjb250ZW50TGVuZ3Ro
LCBnX2ZyZWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgZXhwZWN0IG1v
cmUgZGF0YSBjaHVua3MgZnJvbSB0aGUgVUkgcHJvY2Vzcy4KLSAgICAgICAgICAgIGRhdGEtPnN0
cmVhbSA9IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcoY29udGVudExlbmd0aCk7Ci0g
ICAgICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09V
UF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNl
LmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIGdfdGFz
a19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgpLCBkYXRhLT5zdHJlYW0uZ2V0KCksIGdfb2JqZWN0
X3VucmVmKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkYXRhLT5yZXF1ZXN0
RmFpbGVkKCkpIHsKLSAgICAgICAgLy8gUmVzb3VyY2VSZXF1ZXN0IGZhaWxlZCBvciBpdCB3YXMg
Y2FuY2VsbGVkLiBJdCBkb2Vzbid0IG1hdHRlciBoZXJlIHRoZSBlcnJvciBvciBpZiBpdCB3YXMg
Y2FuY2VsbGVkLAotICAgICAgICAvLyBiZWNhdXNlIHRoYXQncyBhbHJlYWR5IGhhbmRsZWQgYnkg
dGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQsIHdlIGp1c3Qgd2FudCB0byBub3RpZnkgdGhlIFVJ
IHByb2Nlc3MKLSAgICAgICAgLy8gdG8gc3RvcCByZWFkaW5nIGRhdGEgZnJvbSB0aGUgdXNlciBp
bnB1dCBzdHJlYW0uIElmIFVJIHByb2Nlc3MgYWxyZWFkeSBzZW50IGFsbCB0aGUgZGF0YSB3ZSBz
aW1wbHkKLSAgICAgICAgLy8gZmluaXNoIHNpbGVudGx5LgotICAgICAgICBpZiAoIXdlYmtpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NU
UkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpKSkKLSAgICAgICAgICAgIG1fY2hpbGRQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RvcExvYWRpbmcoY3Vz
dG9tUHJvdG9jb2xJRCksIDApOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3ZWJr
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVU
X1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJl
ZmVyZW5jZS5zaXplKCkpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRp
ZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5j
RGF0YSogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwot
ICAgIC8vIFRoZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3Qg
bWFwIGlmIGFuIGVycm9yIGhhcHBlbmVkIGV2ZW4gYmVmb3JlIHRoaXMgcG9pbnQuCi0gICAgaWYg
KCFkYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZGF0YS0+dGFzayk7Ci0KLSAg
ICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNU
X0dFTkVSSUMoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KGRhdGEtPnRhc2spKTsKLSAgICB3ZWJr
aXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50TGVuZ3RoKHJlcXVlc3QsIHJlc3BvbnNlLmV4
cGVjdGVkQ29udGVudExlbmd0aCgpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkg
OiAtMSk7Ci0gICAgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVxdWVz
dCwgIXJlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpID8gcmVzcG9uc2UubWltZVR5cGUoKS51
dGY4KCkuZGF0YSgpIDogMCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6
ZGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewotICAgIEFTU0VS
VChtX2N1c3RvbVByb3RvY29sTWFwLmNvbnRhaW5zKGN1c3RvbVByb3RvY29sSUQpKTsKLSAgICBt
X2N1c3RvbVByb3RvY29sTWFwLnJlbW92ZShjdXN0b21Qcm90b2NvbElEKTsKLX0KLQotdm9pZCBD
dXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpzdGFydChHVGFzayogdGFzaykKLXsKLSAgICB1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElEID0gZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCk7Ci0gICAg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9H
RU5FUklDKGdfdGFza19nZXRfc291cmNlX29iamVjdCh0YXNrKSk7Ci0gICAgbV9jdXN0b21Qcm90
b2NvbE1hcC5zZXQoY3VzdG9tUHJvdG9jb2xJRCwgc3RkOjptYWtlX3VuaXF1ZTxXZWJTb3VwUmVx
dWVzdEFzeW5jRGF0YT4odGFzaywgcmVxdWVzdCkpOwotCi0gICAgbV9jaGlsZFByb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpTdGFydExvYWRpbmcoY3Vz
dG9tUHJvdG9jb2xJRCwgKndlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3QocmVxdWVz
dCkpLCAwKTsKLX0KLQotR0lucHV0U3RyZWFtKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpm
aW5pc2goR1Rhc2sqIHRhc2ssIEdFcnJvcioqIGVycm9yKQotewotICAgIGdwb2ludGVyIGlucHV0
U3RyZWFtID0gZ190YXNrX3Byb3BhZ2F0ZV9wb2ludGVyKHRhc2ssIGVycm9yKTsKLSAgICByZXR1
cm4gaW5wdXRTdHJlYW0gPyBHX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbSkgOiAwOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291
cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3Rv
Y29sTWFuYWdlckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VySW1wbF9oCi0jZGVmaW5lIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGxfaAotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEYXRhUmVmZXJl
bmNlOwotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJl
c291cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ2hpbGRQcm9jZXNzOwotc3RydWN0
IFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhOwotCi1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJJ
bXBsIDogcHVibGljIFdlYkNvcmU6OldlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudCB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCk7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbChDaGlsZFByb2Nlc3Mq
KTsKLSAgICB+Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCgpOwotCi0gICAgdm9pZCByZWdpc3Rl
clNjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgdm9pZCBkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVByb3Rv
Y29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIGRpZExvYWRE
YXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
OwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBz
dGFydChHVGFzayopIGZpbmFsIG92ZXJyaWRlOwotICAgIEdJbnB1dFN0cmVhbSogZmluaXNoKEdU
YXNrKiwgR0Vycm9yKiopIGZpbmFsIG92ZXJyaWRlOwotCi0gICAgQ2hpbGRQcm9jZXNzKiBtX2No
aWxkUHJvY2VzczsKLSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9zY2hlbWVzOwotICAgIEhhc2hN
YXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YT4+IG1f
Y3VzdG9tUHJvdG9jb2xNYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGxfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5
NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9z
b3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlci5oIgotCi0jaW5jbHVk
ZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5o
IgotI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgY2hhciogQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjpzdXBwbGVtZW50TmFtZSgpCi17Ci0gICAgcmV0dXJuICJDdXN0b21Qcm90b2NvbE1hbmFn
ZXIiOwotfQotCi1DdXN0b21Qcm90b2NvbE1hbmFnZXI6OkN1c3RvbVByb3RvY29sTWFuYWdlcihD
aGlsZFByb2Nlc3MqIGNoaWxkUHJvY2VzcykKLSAgICA6IG1fY2hpbGRQcm9jZXNzKGNoaWxkUHJv
Y2VzcykKLSAgICAsIG1fbWVzc2FnZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUu
V2ViS2l0LkN1c3RvbVByb3RvY29sTWFuYWdlciIpKQotICAgICwgbV9pbXBsKHN0ZDo6bWFrZV91
bmlxdWU8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbD4oY2hpbGRQcm9jZXNzKSkKLXsKLX0KLQot
dm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX21lc3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsr
aSkKLSAgICAgICAgcmVnaXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29sc1tpXSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
OjpyZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBtX2ltcGwtPnJl
Z2lzdGVyU2NoZW1lKHNjaGVtZSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp1
bnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotYm9vbCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0
cmluZyYgc2NoZW1lKQotewotICAgIHJldHVybiBtX2ltcGwtPnN1cHBvcnRzU2NoZW1lKHNjaGVt
ZSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWlsV2l0aEVycm9yKHVp
bnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVy
cm9yKQotewotICAgIG1faW1wbC0+ZGlkRmFpbFdpdGhFcnJvcihjdXN0b21Qcm90b2NvbElELCBl
cnJvcik7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRMb2FkRGF0YSh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZl
cmVuY2UpCi17Ci0gICAgbV9pbXBsLT5kaWRMb2FkRGF0YShjdXN0b21Qcm90b2NvbElELCBkYXRh
UmVmZXJlbmNlKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgdWludDMyX3QpCi17Ci0gICAgbV9pbXBsLT5kaWRSZWNlaXZl
UmVzcG9uc2UoY3VzdG9tUHJvdG9jb2xJRCwgcmVzcG9uc2UpOwotfQotCi12b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlcjo6ZGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElE
KQotewotICAgIG1faW1wbC0+ZGlkRmluaXNoTG9hZGluZyhjdXN0b21Qcm90b2NvbElEKTsKLX0K
LQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWlu
dDY0X3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
cmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVy
cy5oIgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNDRi5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKQotewotfQotCi12
b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBwcml2YXRlQnJvd3Np
bmdFbmFibGVkOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShjYWNoZU1vZGVsKTsKLSAgICBlbmNv
ZGVyIDw8IGRpc2tDYWNoZVNpemVPdmVycmlkZTsKLSAgICBlbmNvZGVyIDw8IGNhbkhhbmRsZUhU
VFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOwotICAgIGVuY29kZXIgPDwgZGlza0NhY2hlRGlyZWN0
b3J5OwotICAgIGVuY29kZXIgPDwgZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0
d29ya0NhY2hlOwotICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlRWZmaWNh
Y3lMb2dnaW5nOwotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURB
VElPTikKLSAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
UmV2YWxpZGF0aW9uOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBFTkFCTEUoU0VDQ09NUF9GSUxURVJT
KQotICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZURpcmVjdG9yeTsKLSNlbmRpZgotI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAK
LSAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwotI2VuZGlm
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIGVuY29kZXIgPDwgY29va2llU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBhcmVudEJ1bmRsZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgotICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uOwotICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0
b21Qcm90b2NvbHM7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZW5jb2RlciA8PCBwYXJlbnRQ
cm9jZXNzTmFtZTsKLSAgICBlbmNvZGVyIDw8IHVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7Ci0g
ICAgZW5jb2RlciA8PCBuc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHk7Ci0gICAgZW5jb2RlciA8PCBu
c1VSTENhY2hlRGlza0NhcGFjaXR5OwotICAgIGVuY29kZXIgPDwgaHR0cFByb3h5OwotICAgIGVu
Y29kZXIgPDwgaHR0cHNQcm94eTsKLSNpZiBUQVJHRVRfT1NfSVBIT05FIHx8IChQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwKQotICAgIElQ
Qzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKLSNlbmRpZgotI2Vu
ZGlmCi0jaWYgVVNFKFNPVVApCi0gICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGg7Ci0gICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKGNvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBp
Z25vcmVUTFNFcnJvcnM7Ci0gICAgZW5jb2RlciA8PCBsYW5ndWFnZXM7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcmVz
dWx0KQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnByaXZhdGVCcm93c2luZ0Vu
YWJsZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzdWx0LmNhY2hlTW9kZWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuZGlza0NhY2hlU2l6ZU92ZXJyaWRlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNhbkhhbmRsZUhUVFBT
U2VydmVyVHJ1c3RFdmFsdWF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRpc2tDYWNoZURpcmVjdG9yeSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kaXNrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxl
TmV0d29ya0NhY2hlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04pCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5h
YmxlTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVSZXZhbGlkYXRpb24pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLSNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJTFRFUlMpCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llU3RvcmFnZURpcmVjdG9yeSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRhaW5l
ckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2No
ZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGFy
ZW50UHJvY2Vzc05hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uc1VSTENhY2hlTWVtb3J5
Q2FwYWNpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQubnNVUkxDYWNoZURpc2tDYXBhY2l0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5odHRwUHJveHkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaHR0cHNQcm94eSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBUQVJHRVRfT1NfSVBIT05FIHx8IChQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwKQotICAgIGlm
ICghSVBDOjpkZWNvZGUoZGVjb2RlciwgcmVzdWx0Lm5ldHdvcmtBVFNDb250ZXh0KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFVTRShTT1VQKQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZ25vcmVUTFNF
cnJvcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubGFuZ3VhZ2VzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzX2gKLSNkZWZpbmUgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnNfaAotCi0jaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgotI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoU09VUCkKLSNpbmNsdWRlICJIVFRQQ29va2llQWNj
ZXB0UG9saWN5LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElQQyB7Ci0gICAgY2xhc3MgQXJndW1l
bnREZWNvZGVyOwotICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7Ci0gICAg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQgZW5jb2RlKElQ
Qzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6
QXJndW1lbnREZWNvZGVyJiwgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQot
ICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKLSAgICBDYWNoZU1vZGVsIGNhY2hlTW9k
ZWw7Ci0gICAgaW50NjRfdCBkaXNrQ2FjaGVTaXplT3ZlcnJpZGUgeyAtMSB9OwotICAgIGJvb2wg
Y2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb247Ci0KLSAgICBTdHJpbmcgZGlza0Nh
Y2hlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBkaXNrQ2FjaGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgYm9v
bCBzaG91bGRFbmFibGVOZXR3b3JrQ2FjaGU7Ci0gICAgYm9vbCBzaG91bGRFbmFibGVOZXR3b3Jr
Q2FjaGVFZmZpY2FjeUxvZ2dpbmc7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJ
VkVfUkVWQUxJREFUSU9OKQotICAgIGJvb2wgc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlU3BlY3Vs
YXRpdmVSZXZhbGlkYXRpb247Ci0jZW5kaWYKLSNlbmRpZgotI2lmIEVOQUJMRShTRUNDT01QX0ZJ
TFRFUlMpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAw
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwot
I2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBj
b29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBjb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwot
Ci0gICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHM7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBTdHJpbmcgcGFyZW50UHJvY2Vzc05hbWU7
Ci0gICAgU3RyaW5nIHVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7Ci0gICAgdWludDY0X3QgbnNV
UkxDYWNoZU1lbW9yeUNhcGFjaXR5OwotICAgIHVpbnQ2NF90IG5zVVJMQ2FjaGVEaXNrQ2FwYWNp
dHk7Ci0KLSAgICBTdHJpbmcgaHR0cFByb3h5OwotICAgIFN0cmluZyBodHRwc1Byb3h5OwotI2lm
IFRBUkdFVF9PU19JUEhPTkUgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDExMDApCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbmV0d29y
a0FUU0NvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0gICAgU3RyaW5n
IGNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aDsKLSAgICB1aW50MzJfdCBjb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGU7Ci0gICAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQ
b2xpY3k7Ci0gICAgYm9vbCBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGFu
Z3VhZ2VzOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5o
CShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRfaAotI2RlZmluZSBO
ZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRfaAotCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzU3VwcGxl
bWVudC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOwotCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQgOiBwdWJs
aWMgQ2hpbGRQcm9jZXNzU3VwcGxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQotICAgIHsK
LSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIE5ldHdvcmtQ
cm9jZXNzU3VwcGxlbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9O
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCShy
ZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Jl
c291cmNlTG9hZFBhcmFtZXRlcnMuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LU5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycygpCi0gICAgOiBpZGVudGlmaWVyKDApCi0gICAgLCB3ZWJQYWdlSUQoMCkKLSAgICAsIHdl
YkZyYW1lSUQoMCkKLSAgICAsIHNlc3Npb25JRChTZXNzaW9uSUQ6OmVtcHR5U2Vzc2lvbklEKCkp
Ci0gICAgLCBjb250ZW50U25pZmZpbmdQb2xpY3koU25pZmZDb250ZW50KQotICAgICwgYWxsb3dT
dG9yZWRDcmVkZW50aWFscyhEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBjbGll
bnRDcmVkZW50aWFsUG9saWN5KERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpCi0gICAg
LCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHRydWUpCi0gICAgLCBk
ZWZlcnNMb2FkaW5nKGZhbHNlKQotICAgICwgbmVlZHNDZXJ0aWZpY2F0ZUluZm8oZmFsc2UpCi0g
ICAgLCBtYXhpbXVtQnVmZmVyaW5nVGltZSgwX21zKQotewotfQotCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOwotICAgIGVuY29kZXIgPDwgd2Vi
UGFnZUlEOwotICAgIGVuY29kZXIgPDwgd2ViRnJhbWVJRDsKLSAgICBlbmNvZGVyIDw8IHNlc3Np
b25JRDsKLSAgICBlbmNvZGVyIDw8IHJlcXVlc3Q7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGJvb2w+KHJlcXVlc3QuaHR0cEJvZHkoKSk7Ci0gICAgaWYgKHJlcXVlc3QuaHR0cEJvZHko
KSkgewotICAgICAgICByZXF1ZXN0Lmh0dHBCb2R5KCktPmVuY29kZShlbmNvZGVyKTsKLQotICAg
ICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiYgZWxlbWVudHMgPSByZXF1ZXN0Lmh0
dHBCb2R5KCktPmVsZW1lbnRzKCk7Ci0gICAgICAgIHNpemVfdCBmaWxlQ291bnQgPSAwOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBlbGVtZW50cy5zaXplKCk7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpCi0gICAgICAgICAgICAgICAgKytmaWxlQ291bnQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSByZXF1
ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zOwotICAgICAgICByZXF1ZXN0Qm9keVNhbmRib3hFeHRl
bnNpb25zLmFsbG9jYXRlKGZpbGVDb3VudCk7Ci0gICAgICAgIHNpemVfdCBleHRlbnNpb25JbmRl
eCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGVsZW1lbnRzLnNpemUo
KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYg
ZWxlbWVudCA9IGVsZW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09
IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gZWxlbWVu
dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lOwotICAgICAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpSZWFkT25seSwgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tleHRlbnNpb25JbmRleCsr
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW5jb2RlciA8PCByZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25zOwotICAgIH0KLQotICAgIGlmIChyZXF1ZXN0LnVybCgpLmlz
TG9jYWxGaWxlKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlcXVlc3RT
YW5kYm94RXh0ZW5zaW9uOwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
cmVxdWVzdC51cmwoKS5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25s
eSwgcmVxdWVzdFNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBlbmNvZGVyIDw8IHJlcXVlc3RT
YW5kYm94RXh0ZW5zaW9uOwotICAgIH0KLQotICAgIGVuY29kZXIuZW5jb2RlRW51bShjb250ZW50
U25pZmZpbmdQb2xpY3kpOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShhbGxvd1N0b3JlZENyZWRl
bnRpYWxzKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oY2xpZW50Q3JlZGVudGlhbFBvbGljeSk7
Ci0gICAgZW5jb2RlciA8PCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
OwotICAgIGVuY29kZXIgPDwgZGVmZXJzTG9hZGluZzsKLSAgICBlbmNvZGVyIDw8IG5lZWRzQ2Vy
dGlmaWNhdGVJbmZvOwotICAgIGVuY29kZXIgPDwgbWF4aW11bUJ1ZmZlcmluZ1RpbWU7Ci19Ci0K
LWJvb2wgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHJlc3VsdCkK
LXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZGVudGlmaWVyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQud2ViUGFnZUlE
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQud2ViRnJhbWVJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnNlc3Npb25JRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcXVlc3QpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBib29sIGhhc0hUVFBCb2R5OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFz
SFRUUEJvZHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGFzSFRUUEJvZHkp
IHsKLSAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IEZvcm1EYXRhOjpkZWNvZGUo
ZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZm9ybURhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJlc3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KGZvcm1EYXRhLnJlbGVhc2Uo
KSk7Ci0KLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgcmVxdWVzdEJvZHlT
YW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXF1
ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9keVNhbmRib3hFeHRl
bnNpb25IYW5kbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShyZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKSkKLSAgICAgICAgICAgICAgICByZXN1bHQu
cmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uLnJlbGVhc2UoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LnJlcXVlc3QudXJsKCkuaXNMb2Nh
bEZpbGUoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VTYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc291cmNl
U2FuZGJveEV4dGVuc2lvbkhhbmRsZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlc3VsdC5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGUocmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuY29udGVudFNuaWZmaW5nUG9saWN5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5hbGxv
d1N0b3JlZENyZWRlbnRpYWxzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5jbGllbnRDcmVkZW50aWFsUG9saWN5KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGVmZXJzTG9hZGluZykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZWVkc0NlcnRpZmlj
YXRlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5tYXhpbXVtQnVmZmVyaW5nVGltZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnNfaAotI2RlZmluZSBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVyc19oCi0KLSNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLSAgICBjbGFzcyBB
cmd1bWVudERlY29kZXI7Ci0gICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotdHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwot
Ci1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyB7Ci1wdWJsaWM6Ci0gICAgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6QXJn
dW1lbnRFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1l
bnREZWNvZGVyJiwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmKTsKLQotICAgIFJlc291
cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICB1aW50NjRfdCB3ZWJQYWdlSUQ7Ci0g
ICAgdWludDY0X3Qgd2ViRnJhbWVJRDsKLSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklE
OwotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgIFZlY3RvcjxSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnM7IC8vIENy
ZWF0ZWQgYXV0b21hdGljYWxseSBmb3IgdGhlIHNlbmRlci4KLSAgICBSZWZQdHI8U2FuZGJveEV4
dGVuc2lvbj4gcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uOyAvLyBDcmVhdGVkIGF1dG9tYXRpY2Fs
bHkgZm9yIHRoZSBzZW5kZXIuCi0gICAgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IGNv
bnRlbnRTbmlmZmluZ1BvbGljeTsKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBhbGxv
d1N0b3JlZENyZWRlbnRpYWxzOwotICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3kg
Y2xpZW50Q3JlZGVudGlhbFBvbGljeTsKLSAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhU
VFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgYm9vbCBkZWZlcnNMb2FkaW5nOwotICAgIGJvb2wgbmVl
ZHNDZXJ0aWZpY2F0ZUluZm87Ci0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtYXhpbXVt
QnVmZmVyaW5nVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkocmV2aXNpb24g
MTk0MjYzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCIKLQotI2ltcG9ydCAiQ2hpbGRQcm9jZXNzLmgi
Ci0jaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiRGF0YVJlZmVyZW5j
ZS5oIgotI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbXBv
cnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIgotI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotCi0jaWZkZWYgX19oYXNfaW5jbHVk
ZQotI2lmIF9faGFzX2luY2x1ZGUoPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uUHJpdmF0ZS5o
PikKLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uUHJpdmF0ZS5oPgotI2VuZGlm
Ci0jZW5kaWYKLQotQGludGVyZmFjZSBOU1VSTENvbm5lY3Rpb24gKCkKLSsgKENGUnVuTG9vcFJl
ZilyZXNvdXJjZUxvYWRlclJ1bkxvb3A7Ci1AZW5kCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXI7Ci0KLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1
c3RvbVByb3RvY29sSUQoKQotewotICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVDdXN0b21Qcm90
b2NvbElEID0gMDsKLSAgICByZXR1cm4gKyt1bmlxdWVDdXN0b21Qcm90b2NvbElEOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotQGludGVyZmFjZSBXS0N1c3RvbVByb3RvY29sIDogTlNV
UkxQcm90b2NvbCB7Ci1AcHJpdmF0ZQotICAgIHVpbnQ2NF90IF9jdXN0b21Qcm90b2NvbElEOwot
fQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSB1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElEOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tDdXN0b21Qcm90b2NvbAotCi1Ac3ludGhl
c2l6ZSBjdXN0b21Qcm90b2NvbElEID0gX2N1c3RvbVByb3RvY29sSUQ7Ci0KLSsgKEJPT0wpY2Fu
SW5pdFdpdGhSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Ci17Ci0gICAgcmV0dXJuIHNo
YXJlZEN1c3RvbVByb3RvY29sTWFuYWdlci0+c3VwcG9ydHNTY2hlbWUoW1tbcmVxdWVzdCBVUkxd
IHNjaGVtZV0gbG93ZXJjYXNlU3RyaW5nXSk7Ci19Ci0KLSsgKE5TVVJMUmVxdWVzdCAqKWNhbm9u
aWNhbFJlcXVlc3RGb3JSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Ci17Ci0gICAgcmV0
dXJuIHJlcXVlc3Q7Ci19Ci0KLSsgKEJPT0wpcmVxdWVzdElzQ2FjaGVFcXVpdmFsZW50OihOU1VS
TFJlcXVlc3QgKilhIHRvUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopYgotewotICAgIHJldHVybiBO
TzsKLX0KLQotLSAoaWQpaW5pdFdpdGhSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IGNh
Y2hlZFJlc3BvbnNlOihOU0NhY2hlZFVSTFJlc3BvbnNlICopY2FjaGVkUmVzcG9uc2UgY2xpZW50
OihpZDxOU1VSTFByb3RvY29sQ2xpZW50PiljbGllbnQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRXaXRoUmVxdWVzdDpyZXF1ZXN0IGNhY2hlZFJlc3BvbnNlOmNhY2hlZFJlc3BvbnNlIGNsaWVu
dDpjbGllbnRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBfY3VzdG9tUHJvdG9jb2xJRCA9IGdlbmVyYXRlQ3VzdG9tUHJvdG9jb2xJRCgpOwotICAgIHNo
YXJlZEN1c3RvbVByb3RvY29sTWFuYWdlci0+YWRkQ3VzdG9tUHJvdG9jb2woc2VsZik7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc3RhcnRMb2FkaW5nCi17Ci0gICAgc2hhcmVkQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLT5jaGlsZFByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6OlN0YXJ0TG9hZGluZyhzZWxmLmN1c3RvbVByb3RvY29sSUQs
IFtzZWxmIHJlcXVlc3RdKSwgMCk7Ci19Ci0KLS0gKHZvaWQpc3RvcExvYWRpbmcKLXsKLSAgICBz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXItPmNoaWxkUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RvcExvYWRpbmcoc2VsZi5jdXN0b21Qcm90
b2NvbElEKSwgMCk7Ci0gICAgc2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5yZW1vdmVDdXN0
b21Qcm90b2NvbChzZWxmKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29u
c3QgY2hhciogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdXBwbGVtZW50TmFtZSgpCi17Ci0gICAg
cmV0dXJuICJDdXN0b21Qcm90b2NvbE1hbmFnZXIiOwotfQotCi1DdXN0b21Qcm90b2NvbE1hbmFn
ZXI6OkN1c3RvbVByb3RvY29sTWFuYWdlcihDaGlsZFByb2Nlc3MqIGNoaWxkUHJvY2VzcykKLSAg
ICA6IG1fY2hpbGRQcm9jZXNzKGNoaWxkUHJvY2VzcykKLSAgICAsIG1fbWVzc2FnZVF1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkN1c3RvbVByb3RvY29sTWFuYWdlciIp
KQotewotICAgIEFTU0VSVCghc2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsKLSAgICBzaGFy
ZWRDdXN0b21Qcm90b2NvbE1hbmFnZXIgPSB0aGlzOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29s
TWFuYWdlcjo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
KQotewotICAgIGNvbm5lY3Rpb24tPmFkZFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fbWVzc2Fn
ZVF1ZXVlLmdldCgpLCB0aGlzKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6Omlu
aXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCi17Ci0gICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2Nv
bCBjbGFzc11dOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICBy
ZWdpc3RlclNjaGVtZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJv
dG9jb2xzW2ldKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmFkZEN1c3RvbVBy
b3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKmN1c3RvbVByb3RvY29sKQotewotICAgIEFTU0VSVChj
dXN0b21Qcm90b2NvbCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9jdXN0b21Qcm90b2NvbE1h
cE11dGV4KTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLmFkZChjdXN0b21Qcm90b2NvbC5jdXN0
b21Qcm90b2NvbElELCBjdXN0b21Qcm90b2NvbCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyOjpyZW1vdmVDdXN0b21Qcm90b2NvbChXS0N1c3RvbVByb3RvY29sICpjdXN0b21Qcm90
b2NvbCkKLXsKLSAgICBBU1NFUlQoY3VzdG9tUHJvdG9jb2wpOwotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fY3VzdG9tUHJvdG9jb2xNYXBNdXRleCk7Ci0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5y
ZW1vdmUoY3VzdG9tUHJvdG9jb2wuY3VzdG9tUHJvdG9jb2xJRCk7Ci19Ci0gICAgCi12b2lkIEN1
c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUp
Ci17Ci0gICAgQVNTRVJUKCFzY2hlbWUuaXNOdWxsKCkpOwotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcmVnaXN0ZXJlZFNjaGVtZXNNdXRleCk7Ci0gICAgbV9yZWdpc3RlcmVkU2NoZW1lcy5hZGQo
c2NoZW1lKTsKLX0KLSAgICAKLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp1bnJlZ2lzdGVy
U2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIEFTU0VSVCghc2NoZW1lLmlzTnVs
bCgpKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3JlZ2lzdGVyZWRTY2hlbWVzTXV0ZXgpOwot
ICAgIG1fcmVnaXN0ZXJlZFNjaGVtZXMucmVtb3ZlKHNjaGVtZSk7Ci19Ci0KLWJvb2wgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsK
LSAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3JlZ2lzdGVyZWRTY2hlbWVzTXV0ZXgpOwotICAgIHJldHVybiBt
X3JlZ2lzdGVyZWRTY2hlbWVzLmNvbnRhaW5zKHNjaGVtZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBkaXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKHZvaWQgKF5ibG9jaykoKSkKLXsK
LSAgICBDRlJ1bkxvb3BQZXJmb3JtQmxvY2soW05TVVJMQ29ubmVjdGlvbiByZXNvdXJjZUxvYWRl
clJ1bkxvb3BdLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIGJsb2NrKTsKLSAgICBDRlJ1bkxvb3BX
YWtlVXAoW05TVVJMQ29ubmVjdGlvbiByZXNvdXJjZUxvYWRlclJ1bkxvb3BdKTsKLX0KLQotdm9p
ZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZhaWxXaXRoRXJyb3IodWludDY0X3QgY3VzdG9t
UHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0
b21Qcm90b2NvbElEKTsKLSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZXRhaW5QdHI8TlNFcnJvcj4gbnNFcnJvciA9IGVycm9yLm5zRXJyb3IoKTsKLQotICAgIGRp
c3BhdGNoT25SZXNvdXJjZUxvYWRlclJ1bkxvb3AoXiB7Ci0gICAgICAgIFtbcHJvdG9jb2wgY2xp
ZW50XSBVUkxQcm90b2NvbDpwcm90b2NvbC5nZXQoKSBkaWRGYWlsV2l0aEVycm9yOm5zRXJyb3Iu
Z2V0KCldOwotICAgIH0pOwotCi0gICAgcmVtb3ZlQ3VzdG9tUHJvdG9jb2wocHJvdG9jb2wuZ2V0
KCkpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkTG9hZERhdGEodWludDY0
X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewot
ICAgIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbCA9IHByb3RvY29sRm9ySUQo
Y3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmV0YWluUHRyPE5TRGF0YT4gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpkYXRhLmRhdGEoKSBsZW5ndGg6ZGF0YS5zaXplKCldKTsKLQotICAgIGRp
c3BhdGNoT25SZXNvdXJjZUxvYWRlclJ1bkxvb3AoXiB7Ci0gICAgICAgIFtbcHJvdG9jb2wgY2xp
ZW50XSBVUkxQcm90b2NvbDpwcm90b2NvbC5nZXQoKSBkaWRMb2FkRGF0YTpuc0RhdGEuZ2V0KCld
OwotICAgIH0pOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCB1aW50MzJfdCBjYWNoZVN0b3JhZ2VQb2xpY3kpCi17Ci0gICAg
UmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0
b21Qcm90b2NvbElEKTsKLSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNSZXNwb25zZSA9IHJlc3BvbnNlLm5zVVJMUmVz
cG9uc2UoKTsKLQotICAgIGRpc3BhdGNoT25SZXNvdXJjZUxvYWRlclJ1bkxvb3AoXiB7Ci0gICAg
ICAgIFtbcHJvdG9jb2wgY2xpZW50XSBVUkxQcm90b2NvbDpwcm90b2NvbC5nZXQoKSBkaWRSZWNl
aXZlUmVzcG9uc2U6bnNSZXNwb25zZS5nZXQoKSBjYWNoZVN0b3JhZ2VQb2xpY3k6c3RhdGljX2Nh
c3Q8TlNVUkxDYWNoZVN0b3JhZ2VQb2xpY3k+KGNhY2hlU3RvcmFnZVBvbGljeSldOwotICAgIH0p
OwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkRmluaXNoTG9hZGluZyh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewotICAgIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29s
PiBwcm90b2NvbCA9IHByb3RvY29sRm9ySUQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFw
cm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVy
UnVuTG9vcCheIHsKLSAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29sRGlkRmlu
aXNoTG9hZGluZzpwcm90b2NvbC5nZXQoKV07Ci0gICAgfSk7Ci0KLSAgICByZW1vdmVDdXN0b21Q
cm90b2NvbChwcm90b2NvbC5nZXQoKSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Q
cm90b2NvbD4gcHJvdG9jb2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAg
IGlmICghcHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxOU1VSTFJl
cXVlc3Q+IG5zUmVxdWVzdCA9IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkRvTm90VXBk
YXRlSFRUUEJvZHkpOwotICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBuc1JlZGlyZWN0UmVz
cG9uc2UgPSByZWRpcmVjdFJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKLQotICAgIGRpc3BhdGNo
T25SZXNvdXJjZUxvYWRlclJ1bkxvb3AoW3Byb3RvY29sLCBuc1JlcXVlc3QsIG5zUmVkaXJlY3RS
ZXNwb25zZV0oKSB7Ci0gICAgICAgIFtbcHJvdG9jb2wgY2xpZW50XSBVUkxQcm90b2NvbDpwcm90
b2NvbC5nZXQoKSB3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0Om5zUmVxdWVzdC5nZXQoKSByZWRpcmVj
dFJlc3BvbnNlOm5zUmVkaXJlY3RSZXNwb25zZS5nZXQoKV07Ci0gICAgfSk7Ci19Ci0KLVJldGFp
blB0cjxXS0N1c3RvbVByb3RvY29sPiBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnByb3RvY29sRm9y
SUQodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOwotCi0gICAgQ3VzdG9tUHJvdG9jb2xNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9jdXN0b21Qcm90b2NvbE1hcC5maW5kKGN1c3RvbVByb3RvY29sSUQp
OwotICAgIGlmIChpdCA9PSBtX2N1c3RvbVByb3RvY29sTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIEFTU0VSVChpdC0+dmFsdWUpOwotICAgIHJldHVybiBpdC0+dmFs
dWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9D
dXN0b21Qcm90b2NvbE1hbmFnZXIuaAkocmV2aXNpb24gMTk0MjYzKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBDdXN0b21Qcm90b2NvbE1hbmFnZXJfaAotI2RlZmluZSBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJfaAotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
U3VwcGxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotT0JKQ19DTEFTUyBXS0N1c3RvbVBy
b3RvY29sOwotI2Vsc2UKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCi0j
ZW5kaWYKLQotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERhdGFSZWZlcmVuY2U7Ci19IC8vIG5h
bWVzcGFjZSBJUEMKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmVzb3VyY2VFcnJvcjsK
LWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDaGlsZFByb2Nl
c3M7Ci1zdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7Ci0KLWNsYXNzIEN1
c3RvbVByb3RvY29sTWFuYWdlciA6IHB1YmxpYyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQsIHB1
YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9jZXNzKik7Ci0KLSAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIENoaWxkUHJvY2VzcyogY2hp
bGRQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZFByb2Nlc3M7IH0KLQotICAgIHZvaWQg
cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1l
KGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgc3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJik7
Ci0gICAgCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBhZGRDdXN0b21Qcm90b2NvbChX
S0N1c3RvbVByb3RvY29sICopOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tUHJvdG9jb2woV0tDdXN0
b21Qcm90b2NvbCAqKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIENoaWxkUHJvY2Vzc1N1
cHBsZW1lbnQKLSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiop
IG92ZXJyaWRlOwotCi0gICAgLy8gTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50Ci0gICAgdm9pZCBp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGRpZEZhaWxXaXRoRXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkTG9hZERh
dGEodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7
Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHVpbnQzMl90IGNhY2hlU3RvcmFnZVBv
bGljeSk7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29s
SUQpOwotICAgIHZvaWQgd2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCBjdXN0b21Qcm90
b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLQotICAgIENoaWxkUHJvY2Vzcyog
bV9jaGlsZFByb2Nlc3M7Ci0gICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9tZXNzYWdlUXVldWU7Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkU2No
ZW1lczsKLSAgICBMb2NrIG1fcmVnaXN0ZXJlZFNjaGVtZXNNdXRleDsKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+PiBDdXN0b21Qcm90
b2NvbE1hcDsKLSAgICBDdXN0b21Qcm90b2NvbE1hcCBtX2N1c3RvbVByb3RvY29sTWFwOwotICAg
IExvY2sgbV9jdXN0b21Qcm90b2NvbE1hcE11dGV4OwotICAgIAotICAgIC8vIFdLQ3VzdG9tUHJv
dG9jb2wgb2JqZWN0cyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBtX2N1c3RvbVByb3RvY29sTWFw
IGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KLSAgICAvLyBXZSByZXR1cm4gYSBSZXRhaW5QdHIgaGVy
ZSBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byByZXR1cm4gYSByYXcgcG9pbnRlciBzaW5jZSB0aGUg
b2JqZWN0IG1pZ2h0IGltbWVkaWF0ZWx5IGJlIGRlc3Ryb3llZCBmcm9tIGEgZGlmZmVyZW50IHRo
cmVhZC4KLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gcHJvdG9jb2xGb3JJRCh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElEKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IE1vdmUgbWFjIHNw
ZWNpZmljIGNvZGUgdG8gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC4KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbD4gbV9pbXBsOwotI2VuZGlmCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEN1c3RvbVByb3RvY29sTWFuYWdlcl9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIu
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBDdXN0b21Qcm90b2NvbE1hbmFnZXIgewotICAg
IERpZEZhaWxXaXRoRXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciBlcnJvcikKLSAgICBEaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElELCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLSAgICBEaWRSZWNlaXZlUmVzcG9uc2UodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSwgdWludDMyX3QgY2FjaGVTdG9yYWdlUG9saWN5KQotICAgIERpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKLSAgICBXYXNSZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2
NF90IGN1c3RvbVByb3RvY29sSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0LCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2UpOwotCi0gICAgUmVnaXN0
ZXJTY2hlbWUoU3RyaW5nIG5hbWUpCi0gICAgVW5yZWdpc3RlclNjaGVtZShTdHJpbmcgbmFtZSkK
LX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9z
b3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29s
TWFuYWdlckltcGwuY3BwCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VySW1wbC5oIgotCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5j
bHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNs
dWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nv
dXBOZXR3b3JrU2Vzc2lvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViS2l0U291cFJlcXVlc3RH
ZW5lcmljLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJh
dGVDdXN0b21Qcm90b2NvbElEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ3VzdG9t
UHJvdG9jb2xJRCA9IDA7Ci0gICAgcmV0dXJuICsrdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRDsKLX0K
LQotc3RydWN0IFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhIHsKLSAgICBXZWJTb3VwUmVxdWVzdEFz
eW5jRGF0YShHVGFzayogdGFzaywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0R2Vu
ZXJpYykKLSAgICAgICAgOiB0YXNrKHRhc2spCi0gICAgICAgICwgcmVxdWVzdChyZXF1ZXN0R2Vu
ZXJpYykKLSAgICAgICAgLCBjYW5jZWxsYWJsZShnX3Rhc2tfZ2V0X2NhbmNlbGxhYmxlKHRhc2sp
KQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0cnVjdCBjb250YWlucyBhIG51bGwgcmVxdWVz
dCwgaXQgaXMgYmVjYXVzZSB0aGUgcmVxdWVzdCBmYWlsZWQuCi0gICAgICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVxdWVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmcmVxdWVzdCkpOwotICAgIH0KLQotICAgIH5XZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSgpCi0g
ICAgewotICAgICAgICBpZiAocmVxdWVzdCkKLSAgICAgICAgICAgIGdfb2JqZWN0X3JlbW92ZV93
ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVxdWVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
cmVxdWVzdCkpOwotICAgIH0KLQotICAgIGJvb2wgcmVxdWVzdEZhaWxlZCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY2FuY2VsbGFibGUuZ2V0KCkp
IHx8ICFyZXF1ZXN0OwotICAgIH0KLQotICAgIEdSZWZQdHI8R1Rhc2s+IHJlbGVhc2VUYXNrKCkK
LSAgICB7Ci0gICAgICAgIEdUYXNrKiByZXR1cm5WYWx1ZSA9IHRhc2s7Ci0gICAgICAgIHRhc2sg
PSBudWxscHRyOwotICAgICAgICByZXR1cm4gYWRvcHRHUmVmKHJldHVyblZhbHVlKTsKLSAgICB9
Ci0KLSAgICBHVGFzayogdGFzazsKLSAgICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVl
c3Q7Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOwotICAgIEdSZWZQdHI8
R0lucHV0U3RyZWFtPiBzdHJlYW07Ci19OwotCi1DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKENoaWxkUHJvY2VzcyogY2hpbGRQcm9jZXNzKQotICAg
IDogbV9jaGlsZFByb2Nlc3MoY2hpbGRQcm9jZXNzKQotICAgICwgbV9zY2hlbWVzKGFkb3B0R1Jl
ZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSkpCi17Ci19Ci0KLUN1c3Rv
bVByb3RvY29sTWFuYWdlckltcGw6On5DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKCkKLXsKLX0K
LQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpyZWdpc3RlclNjaGVtZShjb25zdCBT
dHJpbmcmIHNjaGVtZSkKLXsKLSAgICBpZiAobV9zY2hlbWVzLT5sZW4pCi0gICAgICAgIGdfcHRy
X2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KG1fc2NoZW1lcy5nZXQoKSwgbV9zY2hlbWVzLT5sZW4g
LSAxKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobV9zY2hlbWVzLmdldCgpLCBnX3N0cmR1cChzY2hl
bWUudXRmOCgpLmRhdGEoKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChtX3NjaGVtZXMuZ2V0KCks
IG51bGxwdHIpOwotCi0gICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuc291cFNlc3Npb24oKTsKLSAgICBTb3VwUmVx
dWVzdENsYXNzKiBnZW5lcmljUmVxdWVzdENsYXNzID0gc3RhdGljX2Nhc3Q8U291cFJlcXVlc3RD
bGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMp
KTsKLSAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0gY29uc3RfY2FzdDxjb25zdCBj
aGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3NjaGVtZXMtPnBkYXRhKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8V2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MqPihnX3R5cGVfY2xhc3Nf
cmVmKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSktPmNsaWVudCA9IHRoaXM7Ci0g
ICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlX2J5X3R5cGUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0dFTkVSSUMpOwotfQotCi1ib29sIEN1c3RvbVByb3RvY29sTWFuYWdlcklt
cGw6OnN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hl
bWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgY1NjaGVt
ZSA9IHNjaGVtZS51dGY4KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2NoZW1l
cy0+bGVuOyArK2kpIHsKLSAgICAgICAgaWYgKGNTY2hlbWUgPT0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGdfcHRyX2FycmF5X2luZGV4KG1fc2NoZW1lcy5nZXQoKSwgaSkpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlckltcGw6OmRpZEZhaWxXaXRoRXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgV2ViU291
cFJlcXVlc3RBc3luY0RhdGEqIGRhdGEgPSBtX2N1c3RvbVByb3RvY29sTWFwLmdldChjdXN0b21Q
cm90b2NvbElEKTsKLSAgICBBU1NFUlQoZGF0YSk7Ci0KLSAgICAvLyBFaXRoZXIgd2UgaGF2ZW4n
dCBzdGFydGVkIHJlYWRpbmcgdGhlIHN0cmVhbSB5ZXQsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0
byBjb21wbGV0ZSB0aGUKLSAgICAvLyB0YXNrIGZpcnN0LCBvciB3ZSBmYWlsZWQgcmVhZGluZyBp
dCBhbmQgdGhlIHRhc2sgd2FzIGFscmVhZHkgY29tcGxldGVkIGJ5IGRpZExvYWREYXRhKCkuCi0g
ICAgQVNTRVJUKCFkYXRhLT5zdHJlYW0gfHwgIWRhdGEtPnRhc2spOwotCi0gICAgaWYgKCFkYXRh
LT5zdHJlYW0pIHsKLSAgICAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGRhdGEtPnJlbGVhc2VU
YXNrKCk7Ci0gICAgICAgIEFTU0VSVCh0YXNrLmdldCgpKTsKLSAgICAgICAgZ190YXNrX3JldHVy
bl9uZXdfZXJyb3IodGFzay5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvci5kb21haW4o
KS51dGY4KCkuZGF0YSgpKSwKLSAgICAgICAgICAgIGVycm9yLmVycm9yQ29kZSgpLCAiJXMiLCBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0gZWxzZQot
ICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRGlkRmFpbFdpdGhFcnJvcihXRUJL
SVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBlcnJvcik7
Ci0KLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLnJlbW92ZShjdXN0b21Qcm90b2NvbElEKTsKLX0K
LQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpkaWRMb2FkRGF0YSh1aW50NjRfdCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2Up
Ci17Ci0gICAgV2ViU291cFJlcXVlc3RBc3luY0RhdGEqIGRhdGEgPSBtX2N1c3RvbVByb3RvY29s
TWFwLmdldChjdXN0b21Qcm90b2NvbElEKTsKLSAgICAvLyBUaGUgZGF0YSBtaWdodCBoYXZlIGJl
ZW4gcmVtb3ZlZCBmcm9tIHRoZSByZXF1ZXN0IG1hcCBpZiBhIHByZXZpb3VzIGNodW5rIGZhaWxl
ZAotICAgIC8vIGFuZCBhIG5ldyBtZXNzYWdlIHdhcyBzZW50IGJ5IHRoZSBVSSBwcm9jZXNzIGJl
Zm9yZSBiZWluZyBub3RpZmllZCBhYm91dCB0aGUgZmFpbHVyZS4KLSAgICBpZiAoIWRhdGEpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghZGF0YS0+c3RyZWFtKSB7Ci0gICAgICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBkYXRhLT5yZWxlYXNlVGFzaygpOwotICAgICAgICBBU1NFUlQodGFz
ay5nZXQoKSk7Ci0KLSAgICAgICAgZ29mZnNldCBzb3VwQ29udGVudExlbmd0aCA9IHNvdXBfcmVx
dWVzdF9nZXRfY29udGVudF9sZW5ndGgoU09VUF9SRVFVRVNUKGdfdGFza19nZXRfc291cmNlX29i
amVjdCh0YXNrLmdldCgpKSkpOwotICAgICAgICB1aW50NjRfdCBjb250ZW50TGVuZ3RoID0gc291
cENvbnRlbnRMZW5ndGggPT0gLTEgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNvdXBDb250
ZW50TGVuZ3RoKTsKLSAgICAgICAgaWYgKCFkYXRhUmVmZXJlbmNlLnNpemUoKSkgewotICAgICAg
ICAgICAgLy8gRW1wdHkgcmVwbHksIGp1c3QgY3JlYXRlIGFuZCBlbXB0eSBHTWVtb3J5SW5wdXRT
dHJlYW0uCi0gICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1f
bmV3KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGF0YVJlZmVyZW5jZS5zaXplKCkgPT0gY29udGVu
dExlbmd0aCkgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IG1vcmUgZGF0YSwgc28g
d2UgY2FuIGp1c3QgY3JlYXRlIGEgR01lbW9yeUlucHV0U3RyZWFtIHdpdGggYWxsIHRoZSBkYXRh
LgotICAgICAgICAgICAgZGF0YS0+c3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19m
cm9tX2RhdGEoZ19tZW1kdXAoZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6
ZSgpKSwgY29udGVudExlbmd0aCwgZ19mcmVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFdlIGV4cGVjdCBtb3JlIGRhdGEgY2h1bmtzIGZyb20gdGhlIFVJIHByb2Nlc3MuCi0g
ICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3
KGNvbnRlbnRMZW5ndGgpOwotICAgICAgICAgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdl
dCgpKSwgZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgZGF0YS0+c3Ry
ZWFtLmdldCgpLCBnX29iamVjdF91bnJlZik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZGF0YS0+cmVxdWVzdEZhaWxlZCgpKSB7Ci0gICAgICAgIC8vIFJlc291cmNlUmVxdWVz
dCBmYWlsZWQgb3IgaXQgd2FzIGNhbmNlbGxlZC4gSXQgZG9lc24ndCBtYXR0ZXIgaGVyZSB0aGUg
ZXJyb3Igb3IgaWYgaXQgd2FzIGNhbmNlbGxlZCwKLSAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3Mg
YWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50LCB3ZSBqdXN0IHdh
bnQgdG8gbm90aWZ5IHRoZSBVSSBwcm9jZXNzCi0gICAgICAgIC8vIHRvIHN0b3AgcmVhZGluZyBk
YXRhIGZyb20gdGhlIHVzZXIgaW5wdXQgc3RyZWFtLiBJZiBVSSBwcm9jZXNzIGFscmVhZHkgc2Vu
dCBhbGwgdGhlIGRhdGEgd2Ugc2ltcGx5Ci0gICAgICAgIC8vIGZpbmlzaCBzaWxlbnRseS4KLSAg
ICAgICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoV0VCS0lUX1NP
VVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSkpCi0gICAgICAgICAg
ICBtX2NoaWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHk6OlN0b3BMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQpLCAwKTsKLQotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lU
X1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSwgZGF0YVJlZmVy
ZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90
b2NvbE1hbmFnZXJJbXBsOjpkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAg
V2ViU291cFJlcXVlc3RBc3luY0RhdGEqIGRhdGEgPSBtX2N1c3RvbVByb3RvY29sTWFwLmdldChj
dXN0b21Qcm90b2NvbElEKTsKLSAgICAvLyBUaGUgZGF0YSBtaWdodCBoYXZlIGJlZW4gcmVtb3Zl
ZCBmcm9tIHRoZSByZXF1ZXN0IG1hcCBpZiBhbiBlcnJvciBoYXBwZW5lZCBldmVuIGJlZm9yZSB0
aGlzIHBvaW50LgotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGRhdGEtPnRhc2spOwotCi0gICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0ID0g
V0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKGdfdGFza19nZXRfc291cmNlX29iamVjdChkYXRh
LT50YXNrKSk7Ci0gICAgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudExlbmd0aChy
ZXF1ZXN0LCByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSA/IHJlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCgpIDogLTEpOwotICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1Nl
dENvbnRlbnRUeXBlKHJlcXVlc3QsICFyZXNwb25zZS5taW1lVHlwZSgpLmlzRW1wdHkoKSA/IHJl
c3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpLmRhdGEoKSA6IDApOwotfQotCi12b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlckltcGw6OmRpZEZpbmlzaExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCkKLXsKLSAgICBBU1NFUlQobV9jdXN0b21Qcm90b2NvbE1hcC5jb250YWlucyhjdXN0b21Q
cm90b2NvbElEKSk7Ci0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5yZW1vdmUoY3VzdG9tUHJvdG9j
b2xJRCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6c3RhcnQoR1Rhc2sq
IHRhc2spCi17Ci0gICAgdWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCA9IGdlbmVyYXRlQ3VzdG9t
UHJvdG9jb2xJRCgpOwotICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QodGFzaykp
OwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAuc2V0KGN1c3RvbVByb3RvY29sSUQsIHN0ZDo6bWFr
ZV91bmlxdWU8V2ViU291cFJlcXVlc3RBc3luY0RhdGE+KHRhc2ssIHJlcXVlc3QpKTsKLQotICAg
IG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eTo6U3RhcnRMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQsICp3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNHZXRSZXF1ZXN0KHJlcXVlc3QpKSwgMCk7Ci19Ci0KLUdJbnB1dFN0cmVhbSogQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VySW1wbDo6ZmluaXNoKEdUYXNrKiB0YXNrLCBHRXJyb3IqKiBlcnJvcikKLXsK
LSAgICBncG9pbnRlciBpbnB1dFN0cmVhbSA9IGdfdGFza19wcm9wYWdhdGVfcG9pbnRlcih0YXNr
LCBlcnJvcik7Ci0gICAgcmV0dXJuIGlucHV0U3RyZWFtID8gR19JTlBVVF9TVFJFQU0oaW5wdXRT
dHJlYW0pIDogMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1h
bmFnZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5oCShyZXZpc2lv
biAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IEN1c3RvbVByb3RvY29sTWFuYWdlckltcGxfaAotI2RlZmluZSBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xp
ZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMg
ewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENo
aWxkUHJvY2VzczsKLXN0cnVjdCBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YTsKLQotY2xhc3MgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWNDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1c3RvbVByb3RvY29s
TWFuYWdlckltcGwpOwotcHVibGljOgotICAgIGV4cGxpY2l0IEN1c3RvbVByb3RvY29sTWFuYWdl
ckltcGwoQ2hpbGRQcm9jZXNzKik7Ci0gICAgfkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoKTsK
LQotICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBzdXBw
b3J0c1NjaGVtZShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZGlkRmFpbFdpdGhFcnJvcih1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
Ci0gICAgdm9pZCBkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRf
dCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0g
ICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwotCi1w
cml2YXRlOgotICAgIHZvaWQgc3RhcnQoR1Rhc2sqKSBmaW5hbCBvdmVycmlkZTsKLSAgICBHSW5w
dXRTdHJlYW0qIGZpbmlzaChHVGFzayosIEdFcnJvcioqKSBmaW5hbCBvdmVycmlkZTsKLQotICAg
IENoaWxkUHJvY2VzcyogbV9jaGlsZFByb2Nlc3M7Ci0gICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1f
c2NoZW1lczsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViU291cFJl
cXVlc3RBc3luY0RhdGE+PiBtX2N1c3RvbVByb3RvY29sTWFwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEln
YWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1h
bmFnZXIuaCIKLQotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkN1c3RvbVBy
b3RvY29sTWFuYWdlckltcGwuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNz
YWdlcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IGNoYXIq
IEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAi
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsKLX0KLQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2No
aWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0gICAgLCBtX21lc3NhZ2VRdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DdXN0b21Qcm90b2NvbE1hbmFnZXIiKSkKLSAgICAs
IG1faW1wbChzdGQ6Om1ha2VfdW5pcXVlPEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw+KGNoaWxk
UHJvY2VzcykpCi17Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlv
bi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMp
OwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Q
cm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyU2NoZW1lKHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHNbaV0pOwotfQotCi12b2lkIEN1
c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUp
Ci17Ci0gICAgbV9pbXBsLT5yZWdpc3RlclNjaGVtZShzY2hlbWUpOwotfQotCi12b2lkIEN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6dW5yZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdXBw
b3J0c1NjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5z
dXBwb3J0c1NjaGVtZShzY2hlbWUpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
ZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBtX2ltcGwtPmRpZEZhaWxXaXRoRXJyb3Io
Y3VzdG9tUHJvdG9jb2xJRCwgZXJyb3IpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6ZGlkTG9hZERhdGEodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQotewotICAgIG1faW1wbC0+ZGlkTG9hZERhdGEoY3Vz
dG9tUHJvdG9jb2xJRCwgZGF0YVJlZmVyZW5jZSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVpbnQzMl90KQotewotICAg
IG1faW1wbC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGN1c3RvbVByb3RvY29sSUQsIHJlc3BvbnNlKTsK
LX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZpbmlzaExvYWRpbmcodWludDY0
X3QgY3VzdG9tUHJvdG9jb2xJRCkKLXsKLSAgICBtX2ltcGwtPmRpZEZpbmlzaExvYWRpbmcoY3Vz
dG9tUHJvdG9jb2xJRCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp3YXNSZWRp
cmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJD
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0
b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0JKHJldmlzaW9u
IDE5NDI2MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSwyNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgiCi0KLSNpbXBvcnQgIkNoaWxkUHJvY2Vzcy5o
IgotI2ltcG9ydCAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIkN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKLSNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1w
b3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlRXJyb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLQotI2lmZGVmIF9faGFzX2luY2x1
ZGUKLSNpZiBfX2hhc19pbmNsdWRlKDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvblByaXZhdGUu
aD4pCi0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvblByaXZhdGUuaD4KLSNlbmRp
ZgotI2VuZGlmCi0KLUBpbnRlcmZhY2UgTlNVUkxDb25uZWN0aW9uICgpCi0rIChDRlJ1bkxvb3BS
ZWYpcmVzb3VyY2VMb2FkZXJSdW5Mb29wOwotQGVuZAotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIEN1c3RvbVByb3RvY29sTWFuYWdlciog
c2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVD
dXN0b21Qcm90b2NvbElEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ3VzdG9tUHJv
dG9jb2xJRCA9IDA7Ci0gICAgcmV0dXJuICsrdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUBpbnRlcmZhY2UgV0tDdXN0b21Qcm90b2NvbCA6IE5T
VVJMUHJvdG9jb2wgewotQHByaXZhdGUKLSAgICB1aW50NjRfdCBfY3VzdG9tUHJvdG9jb2xJRDsK
LX0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgdWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLQ3VzdG9tUHJvdG9jb2wKLQotQHN5bnRo
ZXNpemUgY3VzdG9tUHJvdG9jb2xJRCA9IF9jdXN0b21Qcm90b2NvbElEOwotCi0rIChCT09MKWNh
bkluaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIHJldHVybiBz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXItPnN1cHBvcnRzU2NoZW1lKFtbW3JlcXVlc3QgVVJM
XSBzY2hlbWVdIGxvd2VyY2FzZVN0cmluZ10pOwotfQotCi0rIChOU1VSTFJlcXVlc3QgKiljYW5v
bmljYWxSZXF1ZXN0Rm9yUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIHJl
dHVybiByZXF1ZXN0OwotfQotCi0rIChCT09MKXJlcXVlc3RJc0NhY2hlRXF1aXZhbGVudDooTlNV
UkxSZXF1ZXN0ICopYSB0b1JlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKWIKLXsKLSAgICByZXR1cm4g
Tk87Ci19Ci0KLS0gKGlkKWluaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBj
YWNoZWRSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKWNhY2hlZFJlc3BvbnNlIGNsaWVu
dDooaWQ8TlNVUkxQcm90b2NvbENsaWVudD4pY2xpZW50Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0V2l0aFJlcXVlc3Q6cmVxdWVzdCBjYWNoZWRSZXNwb25zZTpjYWNoZWRSZXNwb25zZSBjbGll
bnQ6Y2xpZW50XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgX2N1c3RvbVByb3RvY29sSUQgPSBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKTsKLSAgICBz
aGFyZWRDdXN0b21Qcm90b2NvbE1hbmFnZXItPmFkZEN1c3RvbVByb3RvY29sKHNlbGYpOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXN0YXJ0TG9hZGluZwotewotICAgIHNoYXJlZEN1
c3RvbVByb3RvY29sTWFuYWdlci0+Y2hpbGRQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjpTdGFydExvYWRpbmcoc2VsZi5jdXN0b21Qcm90b2NvbElE
LCBbc2VsZiByZXF1ZXN0XSksIDApOwotfQotCi0tICh2b2lkKXN0b3BMb2FkaW5nCi17Ci0gICAg
c2hhcmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5jaGlsZFByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OlN0b3BMb2FkaW5nKHNlbGYuY3VzdG9tUHJv
dG9jb2xJRCksIDApOwotICAgIHNoYXJlZEN1c3RvbVByb3RvY29sTWFuYWdlci0+cmVtb3ZlQ3Vz
dG9tUHJvdG9jb2woc2VsZik7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNv
bnN0IGNoYXIqIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcGxlbWVudE5hbWUoKQotewotICAg
IHJldHVybiAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsKLX0KLQotQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MpCi0g
ICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0gICAgLCBtX21lc3NhZ2VRdWV1ZShX
b3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DdXN0b21Qcm90b2NvbE1hbmFnZXIi
KSkKLXsKLSAgICBBU1NFUlQoIXNoYXJlZEN1c3RvbVByb3RvY29sTWFuYWdlcik7Ci0gICAgc2hh
cmVkQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gdGhpczsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
bikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX21lc3Nh
Z2VRdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQotewotICAgIFtOU1VSTFByb3RvY29sIHJlZ2lzdGVyQ2xhc3M6W1dLQ3VzdG9tUHJvdG9j
b2wgY2xhc3NdXTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVnaXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVBy
b3RvY29sc1tpXSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjphZGRDdXN0b21Q
cm90b2NvbChXS0N1c3RvbVByb3RvY29sICpjdXN0b21Qcm90b2NvbCkKLXsKLSAgICBBU1NFUlQo
Y3VzdG9tUHJvdG9jb2wpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VzdG9tUHJvdG9jb2xN
YXBNdXRleCk7Ci0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5hZGQoY3VzdG9tUHJvdG9jb2wuY3Vz
dG9tUHJvdG9jb2xJRCwgY3VzdG9tUHJvdG9jb2wpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29s
TWFuYWdlcjo6cmVtb3ZlQ3VzdG9tUHJvdG9jb2woV0tDdXN0b21Qcm90b2NvbCAqY3VzdG9tUHJv
dG9jb2wpCi17Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sKTsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAu
cmVtb3ZlKGN1c3RvbVByb3RvY29sLmN1c3RvbVByb3RvY29sSUQpOwotfQotICAgIAotdm9pZCBD
dXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1l
KQotewotICAgIEFTU0VSVCghc2NoZW1lLmlzTnVsbCgpKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3JlZ2lzdGVyZWRTY2hlbWVzTXV0ZXgpOwotICAgIG1fcmVnaXN0ZXJlZFNjaGVtZXMuYWRk
KHNjaGVtZSk7Ci19Ci0gICAgCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6dW5yZWdpc3Rl
clNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBBU1NFUlQoIXNjaGVtZS5pc051
bGwoKSk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9yZWdpc3RlcmVkU2NoZW1lc011dGV4KTsK
LSAgICBtX3JlZ2lzdGVyZWRTY2hlbWVzLnJlbW92ZShzY2hlbWUpOwotfQotCi1ib29sIEN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6c3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17
Ci0gICAgaWYgKHNjaGVtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
TG9ja0hvbGRlciBsb2NrZXIobV9yZWdpc3RlcmVkU2NoZW1lc011dGV4KTsKLSAgICByZXR1cm4g
bV9yZWdpc3RlcmVkU2NoZW1lcy5jb250YWlucyhzY2hlbWUpOwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgZGlzcGF0Y2hPblJlc291cmNlTG9hZGVyUnVuTG9vcCh2b2lkICheYmxvY2spKCkpCi17
Ci0gICAgQ0ZSdW5Mb29wUGVyZm9ybUJsb2NrKFtOU1VSTENvbm5lY3Rpb24gcmVzb3VyY2VMb2Fk
ZXJSdW5Mb29wXSwga0NGUnVuTG9vcERlZmF1bHRNb2RlLCBibG9jayk7Ci0gICAgQ0ZSdW5Mb29w
V2FrZVVwKFtOU1VSTENvbm5lY3Rpb24gcmVzb3VyY2VMb2FkZXJSdW5Mb29wXSk7Ci19Ci0KLXZv
aWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3Rv
bVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAg
IFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbCA9IHByb3RvY29sRm9ySUQoY3Vz
dG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmV0YWluUHRyPE5TRXJyb3I+IG5zRXJyb3IgPSBlcnJvci5uc0Vycm9yKCk7Ci0KLSAgICBk
aXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKF4gewotICAgICAgICBbW3Byb3RvY29sIGNs
aWVudF0gVVJMUHJvdG9jb2w6cHJvdG9jb2wuZ2V0KCkgZGlkRmFpbFdpdGhFcnJvcjpuc0Vycm9y
LmdldCgpXTsKLSAgICB9KTsKLQotICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKHByb3RvY29sLmdl
dCgpKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZExvYWREYXRhKHVpbnQ2
NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKLXsK
LSAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gcHJvdG9jb2wgPSBwcm90b2NvbEZvcklE
KGN1c3RvbVByb3RvY29sSUQpOwotICAgIGlmICghcHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXSk7Ci0KLSAgICBk
aXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKF4gewotICAgICAgICBbW3Byb3RvY29sIGNs
aWVudF0gVVJMUHJvdG9jb2w6cHJvdG9jb2wuZ2V0KCkgZGlkTG9hZERhdGE6bnNEYXRhLmdldCgp
XTsKLSAgICB9KTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgdWludDMyX3QgY2FjaGVTdG9yYWdlUG9saWN5KQotewotICAg
IFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sPiBwcm90b2NvbCA9IHByb3RvY29sRm9ySUQoY3Vz
dG9tUHJvdG9jb2xJRCk7Ci0gICAgaWYgKCFwcm90b2NvbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG5zUmVzcG9uc2UgPSByZXNwb25zZS5uc1VSTFJl
c3BvbnNlKCk7Ci0KLSAgICBkaXNwYXRjaE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKF4gewotICAg
ICAgICBbW3Byb3RvY29sIGNsaWVudF0gVVJMUHJvdG9jb2w6cHJvdG9jb2wuZ2V0KCkgZGlkUmVj
ZWl2ZVJlc3BvbnNlOm5zUmVzcG9uc2UuZ2V0KCkgY2FjaGVTdG9yYWdlUG9saWN5OnN0YXRpY19j
YXN0PE5TVVJMQ2FjaGVTdG9yYWdlUG9saWN5PihjYWNoZVN0b3JhZ2VQb2xpY3kpXTsKLSAgICB9
KTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKLXsKLSAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2Nv
bD4gcHJvdG9jb2wgPSBwcm90b2NvbEZvcklEKGN1c3RvbVByb3RvY29sSUQpOwotICAgIGlmICgh
cHJvdG9jb2wpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRpc3BhdGNoT25SZXNvdXJjZUxvYWRl
clJ1bkxvb3AoXiB7Ci0gICAgICAgIFtbcHJvdG9jb2wgY2xpZW50XSBVUkxQcm90b2NvbERpZEZp
bmlzaExvYWRpbmc6cHJvdG9jb2wuZ2V0KCldOwotICAgIH0pOwotCi0gICAgcmVtb3ZlQ3VzdG9t
UHJvdG9jb2wocHJvdG9jb2wuZ2V0KCkpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgUmV0YWluUHRyPFdLQ3VzdG9t
UHJvdG9jb2w+IHByb3RvY29sID0gcHJvdG9jb2xGb3JJRChjdXN0b21Qcm90b2NvbElEKTsKLSAg
ICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8TlNVUkxS
ZXF1ZXN0PiBuc1JlcXVlc3QgPSByZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpEb05vdFVw
ZGF0ZUhUVFBCb2R5KTsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbnNSZWRpcmVjdFJl
c3BvbnNlID0gcmVkaXJlY3RSZXNwb25zZS5uc1VSTFJlc3BvbnNlKCk7Ci0KLSAgICBkaXNwYXRj
aE9uUmVzb3VyY2VMb2FkZXJSdW5Mb29wKFtwcm90b2NvbCwgbnNSZXF1ZXN0LCBuc1JlZGlyZWN0
UmVzcG9uc2VdKCkgewotICAgICAgICBbW3Byb3RvY29sIGNsaWVudF0gVVJMUHJvdG9jb2w6cHJv
dG9jb2wuZ2V0KCkgd2FzUmVkaXJlY3RlZFRvUmVxdWVzdDpuc1JlcXVlc3QuZ2V0KCkgcmVkaXJl
Y3RSZXNwb25zZTpuc1JlZGlyZWN0UmVzcG9uc2UuZ2V0KCldOwotICAgIH0pOwotfQotCi1SZXRh
aW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpwcm90b2NvbEZv
cklEKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9jdXN0b21Qcm90b2NvbE1hcE11dGV4KTsKLQotICAgIEN1c3RvbVByb3RvY29sTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZmluZChjdXN0b21Qcm90b2NvbElE
KTsKLSAgICBpZiAoaXQgPT0gbV9jdXN0b21Qcm90b2NvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBBU1NFUlQoaXQtPnZhbHVlKTsKLSAgICByZXR1cm4gaXQtPnZh
bHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlcklt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCShyZXZpc2lvbiAx
OTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMv
c291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5oIgotCi0j
aW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCkKLXsKLSAg
ICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRCA9IDA7Ci0gICAgcmV0dXJu
ICsrdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRDsKLX0KLQotc3RydWN0IFdlYlNvdXBSZXF1ZXN0QXN5
bmNEYXRhIHsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YShHVGFzayogdGFzaywgV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0R2VuZXJpYykKLSAgICAgICAgOiB0YXNrKHRhc2sp
Ci0gICAgICAgICwgcmVxdWVzdChyZXF1ZXN0R2VuZXJpYykKLSAgICAgICAgLCBjYW5jZWxsYWJs
ZShnX3Rhc2tfZ2V0X2NhbmNlbGxhYmxlKHRhc2spKQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhl
IHN0cnVjdCBjb250YWlucyBhIG51bGwgcmVxdWVzdCwgaXQgaXMgYmVjYXVzZSB0aGUgcmVxdWVz
dCBmYWlsZWQuCi0gICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVx
dWVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcmVxdWVzdCkpOwotICAgIH0KLQotICAg
IH5XZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSgpCi0gICAgewotICAgICAgICBpZiAocmVxdWVzdCkK
LSAgICAgICAgICAgIGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVxdWVz
dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcmVxdWVzdCkpOwotICAgIH0KLQotICAgIGJv
b2wgcmVxdWVzdEZhaWxlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gZ19jYW5jZWxsYWJsZV9p
c19jYW5jZWxsZWQoY2FuY2VsbGFibGUuZ2V0KCkpIHx8ICFyZXF1ZXN0OwotICAgIH0KLQotICAg
IEdSZWZQdHI8R1Rhc2s+IHJlbGVhc2VUYXNrKCkKLSAgICB7Ci0gICAgICAgIEdUYXNrKiByZXR1
cm5WYWx1ZSA9IHRhc2s7Ci0gICAgICAgIHRhc2sgPSBudWxscHRyOwotICAgICAgICByZXR1cm4g
YWRvcHRHUmVmKHJldHVyblZhbHVlKTsKLSAgICB9Ci0KLSAgICBHVGFzayogdGFzazsKLSAgICBX
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFi
bGU+IGNhbmNlbGxhYmxlOwotICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBzdHJlYW07Ci19Owot
Ci1DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKENo
aWxkUHJvY2VzcyogY2hpbGRQcm9jZXNzKQotICAgIDogbV9jaGlsZFByb2Nlc3MoY2hpbGRQcm9j
ZXNzKQotICAgICwgbV9zY2hlbWVzKGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVl
X2Z1bmMoZ19mcmVlKSkpCi17Ci19Ci0KLUN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6On5DdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsKCkKLXsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsOjpyZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBpZiAo
bV9zY2hlbWVzLT5sZW4pCi0gICAgICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KG1f
c2NoZW1lcy5nZXQoKSwgbV9zY2hlbWVzLT5sZW4gLSAxKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bV9zY2hlbWVzLmdldCgpLCBnX3N0cmR1cChzY2hlbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIGdf
cHRyX2FycmF5X2FkZChtX3NjaGVtZXMuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgU291cFNlc3Np
b24qIHNlc3Npb24gPSBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9u
KCkuc291cFNlc3Npb24oKTsKLSAgICBTb3VwUmVxdWVzdENsYXNzKiBnZW5lcmljUmVxdWVzdENs
YXNzID0gc3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpKTsKLSAgICBnZW5lcmljUmVxdWVzdENsYXNz
LT5zY2hlbWVzID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cioqPihtX3NjaGVtZXMtPnBkYXRhKSk7Ci0gICAgc3RhdGljX2Nhc3Q8V2ViS2l0U291cFJlcXVl
c3RHZW5lcmljQ2xhc3MqPihnX3R5cGVfY2xhc3NfcmVmKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9HRU5FUklDKSktPmNsaWVudCA9IHRoaXM7Ci0gICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJl
X2J5X3R5cGUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpOwotfQot
Ci1ib29sIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OnN1cHBvcnRzU2NoZW1lKGNvbnN0IFN0
cmluZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hlbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENTdHJpbmcgY1NjaGVtZSA9IHNjaGVtZS51dGY4KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2NoZW1lcy0+bGVuOyArK2kpIHsKLSAgICAgICAgaWYg
KGNTY2hlbWUgPT0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfcHRyX2FycmF5X2luZGV4KG1fc2NoZW1l
cy5nZXQoKSwgaSkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZEZhaWxX
aXRoRXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCi17Ci0gICAgV2ViU291cFJlcXVlc3RBc3luY0RhdGEqIGRhdGEgPSBt
X2N1c3RvbVByb3RvY29sTWFwLmdldChjdXN0b21Qcm90b2NvbElEKTsKLSAgICBBU1NFUlQoZGF0
YSk7Ci0KLSAgICAvLyBFaXRoZXIgd2UgaGF2ZW4ndCBzdGFydGVkIHJlYWRpbmcgdGhlIHN0cmVh
bSB5ZXQsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUKLSAgICAvLyB0YXNr
IGZpcnN0LCBvciB3ZSBmYWlsZWQgcmVhZGluZyBpdCBhbmQgdGhlIHRhc2sgd2FzIGFscmVhZHkg
Y29tcGxldGVkIGJ5IGRpZExvYWREYXRhKCkuCi0gICAgQVNTRVJUKCFkYXRhLT5zdHJlYW0gfHwg
IWRhdGEtPnRhc2spOwotCi0gICAgaWYgKCFkYXRhLT5zdHJlYW0pIHsKLSAgICAgICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGRhdGEtPnJlbGVhc2VUYXNrKCk7Ci0gICAgICAgIEFTU0VSVCh0YXNr
LmdldCgpKTsKLSAgICAgICAgZ190YXNrX3JldHVybl9uZXdfZXJyb3IodGFzay5nZXQoKSwgZ19x
dWFya19mcm9tX3N0cmluZyhlcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKLSAgICAgICAg
ICAgIGVycm9yLmVycm9yQ29kZSgpLCAiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0gZWxzZQotICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtRGlkRmFpbFdpdGhFcnJvcihXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVB
TShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBlcnJvcik7Ci0KLSAgICBtX2N1c3RvbVByb3RvY29sTWFw
LnJlbW92ZShjdXN0b21Qcm90b2NvbElEKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsOjpkaWRMb2FkRGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpCi17Ci0gICAgV2ViU291cFJlcXVlc3RBc3lu
Y0RhdGEqIGRhdGEgPSBtX2N1c3RvbVByb3RvY29sTWFwLmdldChjdXN0b21Qcm90b2NvbElEKTsK
LSAgICAvLyBUaGUgZGF0YSBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSByZXF1ZXN0
IG1hcCBpZiBhIHByZXZpb3VzIGNodW5rIGZhaWxlZAotICAgIC8vIGFuZCBhIG5ldyBtZXNzYWdl
IHdhcyBzZW50IGJ5IHRoZSBVSSBwcm9jZXNzIGJlZm9yZSBiZWluZyBub3RpZmllZCBhYm91dCB0
aGUgZmFpbHVyZS4KLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
ZGF0YS0+c3RyZWFtKSB7Ci0gICAgICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBkYXRhLT5yZWxl
YXNlVGFzaygpOwotICAgICAgICBBU1NFUlQodGFzay5nZXQoKSk7Ci0KLSAgICAgICAgZ29mZnNl
dCBzb3VwQ29udGVudExlbmd0aCA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgoU09V
UF9SRVFVRVNUKGdfdGFza19nZXRfc291cmNlX29iamVjdCh0YXNrLmdldCgpKSkpOwotICAgICAg
ICB1aW50NjRfdCBjb250ZW50TGVuZ3RoID0gc291cENvbnRlbnRMZW5ndGggPT0gLTEgPyAwIDog
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNvdXBDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgaWYgKCFk
YXRhUmVmZXJlbmNlLnNpemUoKSkgewotICAgICAgICAgICAgLy8gRW1wdHkgcmVwbHksIGp1c3Qg
Y3JlYXRlIGFuZCBlbXB0eSBHTWVtb3J5SW5wdXRTdHJlYW0uCi0gICAgICAgICAgICBkYXRhLT5z
dHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
ZGF0YVJlZmVyZW5jZS5zaXplKCkgPT0gY29udGVudExlbmd0aCkgewotICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgZXhwZWN0IG1vcmUgZGF0YSwgc28gd2UgY2FuIGp1c3QgY3JlYXRlIGEgR01lbW9y
eUlucHV0U3RyZWFtIHdpdGggYWxsIHRoZSBkYXRhLgotICAgICAgICAgICAgZGF0YS0+c3RyZWFt
ID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEoZ19tZW1kdXAoZGF0YVJlZmVy
ZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSwgY29udGVudExlbmd0aCwgZ19mcmVl
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGV4cGVjdCBtb3JlIGRhdGEg
Y2h1bmtzIGZyb20gdGhlIFVJIHByb2Nlc3MuCi0gICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSB3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3KGNvbnRlbnRMZW5ndGgpOwotICAgICAgICAg
ICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVT
VF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSwgZGF0YVJlZmVyZW5jZS5kYXRhKCks
IGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBnX3Rhc2tfcmV0dXJu
X3BvaW50ZXIodGFzay5nZXQoKSwgZGF0YS0+c3RyZWFtLmdldCgpLCBnX29iamVjdF91bnJlZik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YS0+cmVxdWVzdEZhaWxlZCgp
KSB7Ci0gICAgICAgIC8vIFJlc291cmNlUmVxdWVzdCBmYWlsZWQgb3IgaXQgd2FzIGNhbmNlbGxl
ZC4gSXQgZG9lc24ndCBtYXR0ZXIgaGVyZSB0aGUgZXJyb3Igb3IgaWYgaXQgd2FzIGNhbmNlbGxl
ZCwKLSAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSByZXNv
dXJjZSBoYW5kbGUgY2xpZW50LCB3ZSBqdXN0IHdhbnQgdG8gbm90aWZ5IHRoZSBVSSBwcm9jZXNz
Ci0gICAgICAgIC8vIHRvIHN0b3AgcmVhZGluZyBkYXRhIGZyb20gdGhlIHVzZXIgaW5wdXQgc3Ry
ZWFtLiBJZiBVSSBwcm9jZXNzIGFscmVhZHkgc2VudCBhbGwgdGhlIGRhdGEgd2Ugc2ltcGx5Ci0g
ICAgICAgIC8vIGZpbmlzaCBzaWxlbnRseS4KLSAgICAgICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtRmluaXNoZWQoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0
YS0+c3RyZWFtLmdldCgpKSkpCi0gICAgICAgICAgICBtX2NoaWxkUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OlN0b3BMb2FkaW5nKGN1c3RvbVByb3Rv
Y29sSUQpLCAwKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0o
ZGF0YS0+c3RyZWFtLmdldCgpKSwgZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uu
c2l6ZSgpKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpkaWRSZWNlaXZl
UmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgV2ViU291cFJlcXVlc3RBc3luY0RhdGEqIGRh
dGEgPSBtX2N1c3RvbVByb3RvY29sTWFwLmdldChjdXN0b21Qcm90b2NvbElEKTsKLSAgICAvLyBU
aGUgZGF0YSBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSByZXF1ZXN0IG1hcCBpZiBh
biBlcnJvciBoYXBwZW5lZCBldmVuIGJlZm9yZSB0aGlzIHBvaW50LgotICAgIGlmICghZGF0YSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGRhdGEtPnRhc2spOwotCi0gICAgV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklD
KGdfdGFza19nZXRfc291cmNlX29iamVjdChkYXRhLT50YXNrKSk7Ci0gICAgd2Via2l0U291cFJl
cXVlc3RHZW5lcmljU2V0Q29udGVudExlbmd0aChyZXF1ZXN0LCByZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKSA/IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpIDogLTEpOwot
ICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRUeXBlKHJlcXVlc3QsICFyZXNw
b25zZS5taW1lVHlwZSgpLmlzRW1wdHkoKSA/IHJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpLmRh
dGEoKSA6IDApOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZEZpbmlz
aExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKLXsKLSAgICBBU1NFUlQobV9jdXN0
b21Qcm90b2NvbE1hcC5jb250YWlucyhjdXN0b21Qcm90b2NvbElEKSk7Ci0gICAgbV9jdXN0b21Q
cm90b2NvbE1hcC5yZW1vdmUoY3VzdG9tUHJvdG9jb2xJRCk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VySW1wbDo6c3RhcnQoR1Rhc2sqIHRhc2spCi17Ci0gICAgdWludDY0X3QgY3Vz
dG9tUHJvdG9jb2xJRCA9IGdlbmVyYXRlQ3VzdG9tUHJvdG9jb2xJRCgpOwotICAgIFdlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhn
X3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QodGFzaykpOwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAu
c2V0KGN1c3RvbVByb3RvY29sSUQsIHN0ZDo6bWFrZV91bmlxdWU8V2ViU291cFJlcXVlc3RBc3lu
Y0RhdGE+KHRhc2ssIHJlcXVlc3QpKTsKLQotICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RhcnRMb2FkaW5nKGN1c3RvbVByb3Rv
Y29sSUQsICp3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRSZXF1ZXN0KHJlcXVlc3QpKSwgMCk7
Ci19Ci0KLUdJbnB1dFN0cmVhbSogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZmluaXNoKEdU
YXNrKiB0YXNrLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBncG9pbnRlciBpbnB1dFN0cmVhbSA9
IGdfdGFza19wcm9wYWdhdGVfcG9pbnRlcih0YXNrLCBlcnJvcik7Ci0gICAgcmV0dXJuIGlucHV0
U3RyZWFtID8gR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0pIDogMDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VySW1wbC5oCShyZXZpc2lvbiAxOTQyNjMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGxf
aAotI2RlZmluZSBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsX2gKLQotI2luY2x1ZGUgPFdlYkNv
cmUvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0g
Ly8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZXNvdXJjZUVy
cm9yOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENoaWxkUHJvY2VzczsKLXN0cnVjdCBXZWJTb3Vw
UmVxdWVzdEFzeW5jRGF0YTsKLQotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCA6IHB1
YmxpYyBXZWJDb3JlOjpXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwpOwotcHVibGljOgotICAg
IGV4cGxpY2l0IEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoQ2hpbGRQcm9jZXNzKik7Ci0gICAg
fkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmKTsK
LQotICAgIHZvaWQgZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCBkaWRMb2FkRGF0YSh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKLSAgICB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVp
bnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnQoR1Rh
c2sqKSBmaW5hbCBvdmVycmlkZTsKLSAgICBHSW5wdXRTdHJlYW0qIGZpbmlzaChHVGFzayosIEdF
cnJvcioqKSBmaW5hbCBvdmVycmlkZTsKLQotICAgIENoaWxkUHJvY2VzcyogbV9jaGlsZFByb2Nl
c3M7Ci0gICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1fc2NoZW1lczsKLSAgICBIYXNoTWFwPHVpbnQ2
NF90LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViU291cFJlcXVlc3RBc3luY0RhdGE+PiBtX2N1c3RvbVBy
b3RvY29sTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCShyZXZpc2lvbiAxOTQyNjMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0
b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCIKLQotI2luY2x1ZGUgIkNoaWxk
UHJvY2Vzcy5oIgotI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaCIKLSNpbmNs
dWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IGNoYXIqIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3Vw
cGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsKLX0K
LQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9j
ZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0g
ICAgLCBtX21lc3NhZ2VRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5D
dXN0b21Qcm90b2NvbE1hbmFnZXIiKSkKLSAgICAsIG1faW1wbChzdGQ6Om1ha2VfdW5pcXVlPEN1
c3RvbVByb3RvY29sTWFuYWdlckltcGw+KGNoaWxkUHJvY2VzcykpCi17Ci19Ci0KLXZvaWQgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29s
TWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHJlZ2lzdGVyU2NoZW1lKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0
b21Qcm90b2NvbHNbaV0pOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0
ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgbV9pbXBsLT5yZWdpc3RlclNj
aGVtZShzY2hlbWUpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6dW5yZWdpc3Rl
clNjaGVtZShjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJv
b2wgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmIHNj
aGVtZSkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5zdXBwb3J0c1NjaGVtZShzY2hlbWUpOwotfQot
Ci12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsK
LSAgICBtX2ltcGwtPmRpZEZhaWxXaXRoRXJyb3IoY3VzdG9tUHJvdG9jb2xJRCwgZXJyb3IpOwot
fQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkTG9hZERhdGEodWludDY0X3QgY3Vz
dG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQot
ewotICAgIG1faW1wbC0+ZGlkTG9hZERhdGEoY3VzdG9tUHJvdG9jb2xJRCwgZGF0YVJlZmVyZW5j
ZSk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
dWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIHVpbnQzMl90KQotewotICAgIG1faW1wbC0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KGN1c3RvbVByb3RvY29sSUQsIHJlc3BvbnNlKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OmRpZEZpbmlzaExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKLXsKLSAg
ICBtX2ltcGwtPmRpZEZpbmlzaExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCk7Ci19Ci0KLXZvaWQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NDI2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTg1LDggKzU4NSw2
IEBACiAJCTI5ODRGNTdEMTY0QjkxNUYwMDRCQzBDNiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOTg0RjU3QjE2NEI5MTVGMDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oICovOyB9OwogCQkyOTg0RjU4ODE2NEJBMDk1MDA0QkMwQzYgLyogQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODRGNTg2MTY0QkEwOTUwMDRCQzBDNiAvKiBDdXN0
b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyOTg0RjU4OTE2
NEJBMDk1MDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODRGNTg3MTY0QkEwOTUw
MDRCQzBDNiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwotCQkyOTg5
QTQxMTE2N0QxODM0MDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTg5QTQxMDE2N0Qx
ODM0MDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gKi87IH07Ci0JCTI5
ODlBNDE0MTY3RDE4NEIwMDRGOTZEMiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODlBNDEyMTY3RDE4NEIw
MDRGOTZEMiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLzsgfTsKIAkJMjlBRDMwOTMxNjRC
NEM1RDAwNzJERUE5IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFEMzA5MjE2NEI0QzVEMDA3MkRF
QTkgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuaCAqLzsgfTsKIAkJMjlBRDMwOTYxNjRC
NEM5MzAwNzJERUE5IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBRDMwOTUxNjRCNEM5MzAw
NzJERUE5IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWFjLm1tICovOyB9OwogCQkyOUNE
NTVBQTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE4
MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oICov
OyB9OwpAQCAtNjcyLDcgKzY3MCw2IEBACiAJCTJEQTk0NEEyMTg4NEU0RjAwMEVEODZEQiAvKiBX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0OUIxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYlBsYXRmb3Jt
VG91Y2hQb2ludElPUy5jcHAgKi87IH07CiAJCTJEQTk0NEEzMTg4NEU0RjAwMEVEODZEQiAvKiBX
ZWJUb3VjaEV2ZW50SU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTk0NDlDMTg4NEU0RjAwMEVEODZEQiAvKiBXZWJUb3VjaEV2ZW50SU9TLmNw
cCAqLzsgfTsKIAkJMkRBOTQ0QTQxODg0RTRGMDAwRUQ4NkRCIC8qIEdlc3R1cmVUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0OUQxODg0
RTRGMDAwRUQ4NkRCIC8qIEdlc3R1cmVUeXBlcy5oICovOyB9OwotCQkyREE5NDRBNzE4ODRFOTQ4
MDBFRDg2REIgLyogRG93bmxvYWRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREE5NDRBNjE4ODRFOTQ4MDBFRDg2REIgLyogRG93bmxvYWRJT1Mu
bW0gKi87IH07CiAJCTJEQTk0NEFEMTg4NEU5QkEwMEVEODZEQiAvKiBUZXh0Q2hlY2tlcklPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NEE5
MTg4NEU5QkEwMEVEODZEQiAvKiBUZXh0Q2hlY2tlcklPUy5tbSAqLzsgfTsKIAkJMkRBOTQ0QUYx
ODg0RTlCQTAwRUQ4NkRCIC8qIFdlYlBhZ2VQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NEFCMTg4NEU5QkEwMEVEODZEQiAvKiBX
ZWJQYWdlUHJveHlJT1MubW0gKi87IH07CiAJCTJEQTk0NEIwMTg4NEU5QkEwMEVEODZEQiAvKiBX
ZWJQcm9jZXNzUHJveHlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyREE5NDRBQzE4ODRFOUJBMDBFRDg2REIgLyogV2ViUHJvY2Vzc1Byb3h5SU9T
Lm1tICovOyB9OwpAQCAtOTYzLDggKzk2MCw2IEBACiAJCTUxNzk1NTZBMTYyODc2RjMwMEZBNDNC
NiAvKiBOZXR3b3JrUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwQ0M3RTAxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzLmgg
Ki87IH07CiAJCTUxNzk1NTZEMTYyODc3QjEwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEND
N0VBMTYxMzhFNzIwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCAqLzsgfTsKIAkJ
NTE3OTU1NkUxNjI4NzdCMzAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzUHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMENDN0VCMTYxMzhFNzIw
MEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5LmggKi87IH07Ci0JCTUxNzk1NTcwMTYyODc3
Q0YwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE4QTYxMjE2MjdGMzI1
MDAwRDkwRTkgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovOyB9Owot
CQk1MTc5NTU3MTE2Mjg3N0QyMDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QThBNjBGMTYyN0YyQkQwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFNDE2M0E0
ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4NkMw
MEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwogCQk1
MTdERDVCRTE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3REQ1QkMxODBEQTdE
MzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcCAqLzsgfTsKQEAgLTk4NiwxMyAr
OTgxLDYgQEAKIAkJNTE4RThFRjgxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MThFOEVGMzE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcCAqLzsg
fTsKIAkJNTE4RThFRjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThFRjQx
NkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oICovOyB9OwogCQk1MThF
OEVGQjE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RUY3MTZCMjA5
MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tICovOyB9OwotCQk1MThF
OEYwNzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThFRkUxNkIyMDkzNzAwRTkxNDI5IC8qIERv
d25sb2FkLmNwcCAqLzsgfTsKLQkJNTE4RThGMDgxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2Fk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEVG
RjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuaCAqLzsgfTsKLQkJNTE4RThGMDkxNkIyMDkz
NzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThGMDAxNkIyMDkzNzAwRTkx
NDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwICovOyB9OwotCQk1MThFOEYw
QTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThGMDExNkIyMDkz
NzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCAqLzsgfTsKLQkJNTE4
RThGMEIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwMjE2QjIwOTM3MDBFOTE0
MjkgLyogRG93bmxvYWRNYW5hZ2VyLmNwcCAqLzsgfTsKLQkJNTE4RThGMEMxNkIyMDkzNzAwRTkx
NDI5IC8qIERvd25sb2FkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdl
ci5oICovOyB9OwotCQk1MThFOEYwRDE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThFOEYwNTE2
QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi87IH07CiAJCTUxOTMzREVGMTk2NUVC
MzEwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTkzM0RFQjE5NjVFQjI0MDA4QUMzRUEgLyogTWVudVV0aWxp
dGllcy5oICovOyB9OwogCQk1MTkzM0RGMDE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGll
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTMz
REVDMTk2NUVCMjQwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLm1tICovOyB9OwogCQk1MUE0RDVB
OTE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEQ1QTgxNkNBQzRGRjAwMEU2MTVF
IC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTEwMTQsOCArMTAwMiw2IEBACiAJ
CTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENvcGllci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBMjQ0NTE4NThG
NDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9OwogCQk1MUM5NjEx
ODE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM5
NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CiAJCTUxQzk2MTE5MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKLQkJNTFDQkJBMEYxNjUyMTlCNjAwNUJFOEZEIC8qIE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JCQTBEMTY1MjE5QjYwMDVCRThGRCAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07Ci0JCTUxQ0JCQTEwMTY1MjE5QjYwMDVC
RThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDQkJBMEUxNjUyMTlCNjAwNUJFOEZEIC8q
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggKi87IH07CiAJCTUxQ0QxQzVEMUIzNDkz
QUYwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzU5MUIzNDkzQTkwMDE0MkNBNSAvKiBX
S1NlY3VyaXR5T3JpZ2luUmVmLmNwcCAqLzsgfTsKIAkJNTFDRDFDNUUxQjM0OTNCNDAwMTQyQ0E1
IC8qIFdLU2VjdXJpdHlPcmlnaW5SZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzVBMUIzNDkzQTkwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3Jp
Z2luUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTFDRDFDNjUxQjM0QjlENDAwMTQyQ0E1IC8qIFdLU2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzVGMUIzNEI5Qzkw
MDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHVibGljLCApOyB9OyB9OwpAQCAtMTA2NCwxMCArMTA1MCwyNSBAQAogCQk1MjcyQjI4QTE0
MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8qIFN0
YXRpc3RpY3NEYXRhLmNwcCAqLzsgfTsKIAkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0
YXRpc3RpY3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLzsgfTsK
IAkJNTI4QzM3QzExOTVDQkIxQTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RjI4MTAx
OTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVDMTQyNkUxMUMyM0Y1MEIw
MEQ0MTE4MyAvKiBEb3dubG9hZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzA5MzIwNjFDMjM2MDExMDA3QUFBN0MgLyogRG93bmxvYWRJRC5oICov
OyB9OworCQk1QzE0MjZFQzFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUMxNDI2RTIxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcCAqLzsgfTsKKwkJNUMxNDI2RUQxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFMzFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKKwkJNUMxNDI2RUUxQzIzRjgwOTAwRDQx
MTgzIC8qIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTQxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdv
cmtQcm9jZXNzU3VwcGxlbWVudC5oICovOyB9OworCQk1QzE0MjZFRjFDMjNGODA5MDBENDExODMg
LyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTUxQzIzRjgwNTAwRDQxMTgzIC8qIE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCAqLzsgfTsKKwkJNUMxNDI2RjAxQzIzRjgw
OTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFNjFDMjNGODA1MDBENDEx
ODMgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCAqLzsgfTsKKwkJNUMxNDI3MDEx
QzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkYzMUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9h
ZC5jcHAgKi87IH07CisJCTVDMTQyNzAyMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RjQxQzIz
Rjg0MzAwRDQxMTgzIC8qIERvd25sb2FkLmggKi87IH07CisJCTVDMTQyNzAzMUMyM0Y4NEMwMEQ0
MTE4MyAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkY1MUMyM0Y4NDMwMEQ0MTE4MyAv
KiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKKwkJNUMxNDI3MDQxQzIz
Rjg0QzAwRDQxMTgzIC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkY2MUMyM0Y4NDMwMEQ0
MTE4MyAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggKi87IH07CisJCTVDMTQyNzA1
MUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZGNzFDMjNGODQzMDBENDExODMgLyogRG93bmxv
YWRJRC5oICovOyB9OworCQk1QzE0MjcwNjFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWRNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
MTQyNkY4MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICovOyB9OworCQk1
QzE0MjcwNzFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZGOTFDMjNGODQzMDBENDEx
ODMgLyogRG93bmxvYWRNYW5hZ2VyLmggKi87IH07CisJCTVDMTQyNzExMUMyM0Y4OUUwMEQ0MTE4
MyAvKiBEb3dubG9hZElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDMTQyNzBEMUMyM0Y4ODUwMEQ0MTE4MyAvKiBEb3dubG9hZElPUy5tbSAqLzsg
fTsKKwkJNUMxNDI3MTIxQzIzRjg5RTAwRDQxMTgzIC8qIERvd25sb2FkTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3MEYxQzIzRjg5OTAw
RDQxMTgzIC8qIERvd25sb2FkTWFjLm1tICovOyB9OworCQk1QzE0MjcxMzFDMjNGODlFMDBENDEx
ODMgLyogRG93bmxvYWRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDMTQyNzA5MUMyM0Y4NjkwMEQ0MTE4MyAvKiBEb3dubG9hZENvY29hLm1t
ICovOyB9OworCQk1QzE0MjcxODFDMjNGOEI3MDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0
MjcxNDFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggKi87IH07CisJ
CTVDMTQyNzFEMUMyM0Y4Q0YwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzFC
MUMyM0Y4Q0MwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSAqLzsgfTsK
IAkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBE
Q0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKIAkJNUMyMENCQTAx
QkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0
d29ya1Nlc3Npb24uaCAqLzsgfTsKLQkJNUM5Qjg2MTMxQzIyM0VBRjAwMTEwRjM2IC8qIERvd25s
b2FkQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzlCODYxMTFDMjIzRTc5MDAxMTBGMzYgLyogRG93bmxvYWRDb2NvYS5tbSAqLzsgfTsKIAkJ
NURBNkVEMEExNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJh
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURB
NkVEMDgxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZpcm9ubWVudEV4dHJhY3Rv
ci5oICovOyB9OwogCQk1REE2RUQwQjE0OTA2MDY5MDBCNDFEMTIgLyogRHluYW1pY0xpbmtlckVu
dmlyb25tZW50RXh0cmFjdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNURBNkVEMDkxNDkwNjA2OTAwQjQxRDEyIC8qIER5bmFtaWNMaW5rZXJFbnZp
cm9ubWVudEV4dHJhY3Rvci5tbSAqLzsgfTsKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8q
IFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rv
ci5jcHAgKi87IH07CkBAIC0xNjUxLDcgKzE2NTIsNiBAQAogCQlCQ0YwNDlFNjExRkUyMEY2MDBG
ODZBNTggLyogV0tCdW5kbGVGcmFtZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjA0OUU0MTFGRTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRs
ZUZyYW1lUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUJDRjA0OUU3MTFGRTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRsZVByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjA0OUU1MTFG
RTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRsZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0YxODYzODE2N0QwNzFFMDBBMUE4NUEgLyog
Q2FjaGVNb2RlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0YxODYzNzE2N0QwNzFFMDBBMUE4NUEgLyogQ2FjaGVNb2RlbC5jcHAgKi87IH07Ci0J
CUJDRjRERTIzMTY4RTRCRDUwMEM5NEFGQyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjRERTIyMTY4
RTRCRDUwMEM5NEFGQyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCAqLzsgfTsKIAkJQkNG
NERFMjUxNjhGQTQ0ODAwQzk0QUZDIC8qIFdlYkNvbnRleHRTdXBwbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y0REUyNDE2OEZBNDQ4MDBD
OTRBRkMgLyogV2ViQ29udGV4dFN1cHBsZW1lbnQuaCAqLzsgfTsKIAkJQkNGNTA3MjgxMjQzMjlB
QTAwNTk1NUFFIC8qIFdlYkNlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNTA3MjYxMjQzMjlBQTAwNTk1NUFFIC8qIFdlYkNl
cnRpZmljYXRlSW5mby5oICovOyB9OwogCQlCQ0Y2OUY5QTExNzZDRUQ2MDA0NzFBNTIgLyogV2Vi
TmF2aWdhdGlvbkRhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRh
U3RvcmUuaCAqLzsgfTsKQEAgLTI3MzAsOSArMjczMCw2IEBACiAJCTI5ODRGNTdCMTY0QjkxNUYw
MDRCQzBDNiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk4NEY1ODYxNjRCQTA5NTAwNEJD
MEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTg0RjU4NzE2NEJB
MDk1MDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjk4OUE0MTAxNjdEMTgzNDAwNEY5NkQyIC8q
IEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTI5ODlBNDEyMTY3RDE4NEIwMDRGOTZEMiAvKiBDdXN0b21Qcm90
b2NvbE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmg7IHBhdGggPSBOZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90
b2NvbE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjk4OUE0MTMxNjdE
MTg0QjAwNEY5NkQyIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGgg
PSBOZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QUQzMDkyMTY0QjRDNUQwMDcyREVB
OSAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oOyBwYXRoID0gQ3VzdG9tUHJv
dG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI5QUQzMDk1MTY0QjRDOTMwMDcyREVBOSAvKiBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWFjLm1tOyBwYXRoID0gQ3VzdG9tUHJvdG9jb2xzL21h
Yy9DdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjlBRDMwOTcxNjRCNEUyMTAwNzJERUE5IC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBwYXRoID0gQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjgzNCw3ICsyODMxLDYgQEAKIAkJMkRBOTQ0OUIxODg0RTRGMDAwRUQ4NkRCIC8qIFdl
YlBsYXRmb3JtVG91Y2hQb2ludElPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJQbGF0Zm9ybVRvdWNoUG9pbnRJT1MuY3BwOyBwYXRoID0gaW9zL1dlYlBsYXRm
b3JtVG91Y2hQb2ludElPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQTk0
NDlDMTg4NEU0RjAwMEVEODZEQiAvKiBXZWJUb3VjaEV2ZW50SU9TLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlRvdWNoRXZlbnRJT1MuY3BwOyBwYXRoID0gaW9z
L1dlYlRvdWNoRXZlbnRJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREE5
NDQ5RDE4ODRFNEYwMDBFRDg2REIgLyogR2VzdHVyZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEdlc3R1cmVUeXBlcy5oOyBwYXRoID0gaW9zL0dlc3R1cmVUeXBlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyREE5NDRBNjE4ODRFOTQ4MDBFRDg2REIg
LyogRG93bmxvYWRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBEb3dubG9hZElPUy5tbTsgcGF0aCA9IERvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQTk0NEE5MTg4NEU5QkEwMEVEODZEQiAvKiBU
ZXh0Q2hlY2tlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFRleHRDaGVja2VySU9TLm1tOyBwYXRoID0gaW9zL1RleHRDaGVja2VySU9TLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyREE5NDRBQjE4ODRFOUJBMDBFRDg2REIgLyogV2ViUGFn
ZVByb3h5SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
UGFnZVByb3h5SU9TLm1tOyBwYXRoID0gaW9zL1dlYlBhZ2VQcm94eUlPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBOTQ0QUMxODg0RTlCQTAwRUQ4NkRCIC8qIFdlYlByb2Nl
c3NQcm94eUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdl
YlByb2Nlc3NQcm94eUlPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcm9jZXNzUHJveHlJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTYzLDEzICszMTU5LDYgQEAKIAkJNTE4RThF
RjQxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaDsgcGF0aCA9IEF1
dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MThFOEVGNTE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5h
Z2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFu
YWdlci5tZXNzYWdlcy5pbjsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFu
YWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4RThFRjcx
NkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MThFOEVGRTE2QjIwOTM3MDBFOTE0
MjkgLyogRG93bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RG93bmxvYWQuY3BwOyBwYXRoID0gRG93bmxvYWRzL0Rvd25sb2FkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTE4RThFRkYxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2FkLmg7IHBhdGggPSBEb3du
bG9hZHMvRG93bmxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4RThGMDAx
NkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRBdXRoZW50aWNhdGlvbkNs
aWVudC5jcHA7IHBhdGggPSBEb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOEU4RjAxMTZCMjA5MzcwMEU5MTQy
OSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaDsgcGF0aCA9IERvd25s
b2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRNYW5hZ2VyLmNw
cDsgcGF0aCA9IERvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MThFOEYwMzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2FkTWFuYWdlci5oOyBw
YXRoID0gRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MThFOEYwNTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEb3dubG9hZE1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5MzNERUIxOTY1RUIyNDAwOEFDM0VBIC8qIE1lbnVV
dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVudVV0aWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTkzM0RFQzE5NjVFQjI0MDA4QUMz
RUEgLyogTWVudVV0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE1lbnVVdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aXN0aWNzUmVxdWVzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTgzLDggKzMxNzIsNiBAQAogCQk1MUE3RjJGMjEy
NUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTdGMkY0MTI1
QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE4
NENFMjEyN0YzODZCMDBDQTZFQTQgLyogV2ViQ29udGV4dE1lbnVQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb250ZXh0TWVudVByb3h5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBOEE2MEYxNjI3RjJCRDAwMEQ5MEU5IC8qIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg7IHBhdGggPSBOZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQThBNjEyMTYyN0YzMjUwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHBhdGggPSBOZXR3b3JrL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQThBNjE3MTYyN0Y1QkIwMDBE
OTBFOSAvKiBOZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBOZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE5
RTEwODEzMTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjAyLDggKzMxODksNiBAQAog
CQk1MUM5NjExNTE4M0M5NUZGMDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM5NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURC
U2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDOTYxMTcxODNEMjk0NzAwRDIwMDJF
IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFDQkJBMEQxNjUyMTlCNjAwNUJFOEZEIC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDsgcGF0aCA9IE5ldHdvcmsv
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MUNCQkEwRTE2NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMuaDsgcGF0aCA9IE5ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDRDFDNTkxQjM0OTNB
OTAwMTQyQ0E1IC8qIFdLU2VjdXJpdHlPcmlnaW5SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0tTZWN1cml0eU9yaWdpblJlZi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxQ0QxQzVBMUIzNDkzQTkwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3Jp
Z2luUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2VjdXJpdHlPcmln
aW5SZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDRDFDNUYxQjM0QjlDOTAw
MTQyQ0E1IC8qIFdLU2VjdXJpdHlPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tTZWN1cml0eU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzI1NywxMCArMzI0MiwyNiBAQAogCQk1MUZEMThCNDE2NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29y
a1Jlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdv
cmtSZXNvdXJjZUxvYWRlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNzJCMjg4MTQwNjk4NUQw
MDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aXN0aWNzRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1QzA5MzIwNjFDMjM2MDExMDA3QUFBN0MgLyogRG93bmxvYWRJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEb3dubG9hZElELmg7IHBhdGggPSBE
b3dubG9hZHMvRG93bmxvYWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzE0
MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
QzE0MjZFMzFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQyNkU0
MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50Lmg7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUMxNDI2RTUxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUMxNDI2RTYxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzE0
MjZGMzFDMjNGODQzMDBENDExODMgLyogRG93bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMxNDI2
RjQxQzIzRjg0MzAwRDQxMTgzIC8qIERvd25sb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMxNDI2RjUxQzIzRjg0MzAw
RDQxMTgzIC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRBdXRoZW50aWNhdGlvbkNs
aWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQyNkY2MUMyM0Y4NDMw
MEQ0MTE4MyAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaDsgcGF0aCA9
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQyNkY3MUMyM0Y4NDMwMEQ0MTE4MyAv
KiBEb3dubG9hZElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERvd25sb2Fk
SUQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZElELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQyNkY4MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3du
bG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRG93
bmxvYWRNYW5hZ2VyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzE0MjZGOTFDMjNG
ODQzMDBENDExODMgLyogRG93bmxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERvd25sb2FkTWFuYWdlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzE0
MjcwOTFDMjNGODY5MDBENDExODMgLyogRG93bmxvYWRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERvd25sb2FkQ29jb2EubW07IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUMxNDI3MEQxQzIzRjg4NTAwRDQxMTgzIC8qIERvd25sb2FkSU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRG93bmxvYWRJT1MubW07
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzE0MjcwRjFDMjNGODk5MDBENDExODMgLyogRG93
bmxvYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEb3du
bG9hZE1hYy5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQyNzE0MUMyM0Y4QjAwMEQ0
MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9D
dXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDMTQyNzE1MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1h
bmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLm1lc3NhZ2VzLmluOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xz
L0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUMxNDI3MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
ckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90
b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lv
bkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29y
a1Nlc3Npb25Db2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjBDQjlFMUJCMERE
MTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM5Qjg2MTExQzIyM0U3OTAw
MTEwRjM2IC8qIERvd25sb2FkQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBEb3dubG9hZENvY29hLm1tOyBwYXRoID0gRG93bmxvYWRzL2NvY29hL0Rvd25s
b2FkQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1
NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2lu
U2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZF
RDA4MTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHluYW1pY0xpbmtlckVudmlyb25t
ZW50RXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQTZFRDA5MTQ5
MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJvbm1lbnRFeHRyYWN0b3IubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEeW5hbWljTGlua2VyRW52aXJv
bm1lbnRFeHRyYWN0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODkzLDcg
KzM4OTQsNiBAQAogCQlCQ0YwNEM4QzExRkY5QjdEMDBGODZBNTggLyogQVBJT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0YwNEM4RTExRkY5RjZFMDBGODZBNTggLyogQVBJU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0YxODYzNzE2N0QwNzFFMDBBMUE4NUEgLyogQ2FjaGVNb2Rl
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZU1vZGVsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNGNERFMjIxNjhFNEJENTAwQzk0QUZD
IC8qIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaDsgcGF0aCA9IE5ldHdvcmsvTmV0d29y
a1Byb2Nlc3NTdXBwbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjRE
RTI0MTY4RkE0NDgwMEM5NEFGQyAvKiBXZWJDb250ZXh0U3VwcGxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0U3VwcGxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0Y1MDY4NDEyNDMxODYxMDA1OTU1QUUgLyogU2VjdXJpdHku
ZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBTZWN1cml0eS5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TZWN1cml0eS5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCUJDRjUwNzI2MTI0MzI5QUEwMDU5NTVBRSAvKiBXZWJDZXJ0
aWZpY2F0ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ2VydGlm
aWNhdGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzA5LDEyICs0NzA5
LDEwIEBACiAJCQkJQzAxQTI1RkYxMjY2MkYyMTAwQzlFRDU1IC8qIGNnICovLAogCQkJCTM3QzRD
MDkwMTgxNEIzN0IwMDM2ODhCOSAvKiBDb2NvYSAqLywKIAkJCQk1MUUzNTFDMjE4MEYyQzg1MDBF
NTNCRTkgLyogRGF0YWJhc2VzICovLAotCQkJCTUxOEU4RUYyMTZCMjA4RjgwMEU5MTQyOSAvKiBE
b3dubG9hZHMgKi8sCiAJCQkJQkM4MjgzNjgxNkIzNTg3OTAwQTI3OEZFIC8qIEVudHJ5UG9pbnRV
dGlsaXRpZXMgKi8sCiAJCQkJRTE3MDg3NzIxNkQ2Q0ZFQzAwRjk5MjI2IC8qIEZpbGVBUEkgKi8s
CiAJCQkJMkRBOTQ0OTYxODg0RTREQTAwRUQ4NkRCIC8qIGlvcyAqLywKIAkJCQlCQzExMUI1QTEx
MkY2MjgyMDAzMzdCQUIgLyogbWFjICovLAotCQkJCTUxQThBNjBEMTYyN0YyQUMwMDBEOTBFOSAv
KiBOZXR3b3JrICovLAogCQkJCTFBQUUwNThDMTI3OURDRDQwMDg1MjQxOCAvKiBQbHVnaW5zICov
LAogCQkJCTM3MDk1MDQ5MThBOUZBRDIwMDg3QUU1RCAvKiBwb3NpeCAqLywKIAkJCQkwRjU5NDdB
MDE4N0IzQjcxMDA0Mzc4NTcgLyogU2Nyb2xsaW5nICovLApAQCAtNTA3MSwyNSArNTA2OSw2IEBA
CiAJCQlwYXRoID0gQ29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQky
OTg5QTQwRTE2N0QxODEzMDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9jb2xzICovID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyOTg5QTQwRjE2N0QxODFCMDA0Rjk2
RDIgLyogQ29jb2EgKi8sCi0JCQkJMjk4OUE0MTIxNjdEMTg0QjAwNEY5NkQyIC8qIEN1c3RvbVBy
b3RvY29sTWFuYWdlci5oICovLAotCQkJCTI5ODlBNDEzMTY3RDE4NEIwMDRGOTZEMiAvKiBDdXN0
b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkpOwotCQkJbmFtZSA9IEN1c3Rv
bVByb3RvY29sczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTI5ODlBNDBG
MTY3RDE4MUIwMDRGOTZEMiAvKiBDb2NvYSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMjk4OUE0MTAxNjdEMTgzNDAwNEY5NkQyIC8qIEN1c3RvbVByb3Rv
Y29sTWFuYWdlckNvY29hLm1tICovLAotCQkJKTsKLQkJCW5hbWUgPSBDb2NvYTsKLQkJCXBhdGgg
PSBOZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07CiAJCTI5QUQzMDkxMTY0QjRDMTAwMDcyREVBOSAvKiBDdXN0b21Qcm90b2NvbHMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTE0NywxNCAr
NTEyNiw2IEBACiAJCQluYW1lID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJMkRBOTQ0QTUxODg0RTkzQzAwRUQ4NkRCIC8qIGlvcyAqLyA9IHsKLQkJCWlzYSA9IFBC
WEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkRBOTQ0QTYxODg0RTk0ODAwRUQ4NkRCIC8q
IERvd25sb2FkSU9TLm1tICovLAotCQkJKTsKLQkJCW5hbWUgPSBpb3M7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwogCQkyREE5NDRBODE4ODRFOUFCMDBFRDg2REIgLyogaW9zICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTU1NzAsNiArNTU0
MSwxMyBAQAogCQk1MTBDQzdEQTE2MTM4RTAxMDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTVDMTQyNkYyMUMy
M0Y4MkQwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbHMgKi8sCisJCQkJNUMxNDI2RjExQzIzRjgx
NzAwRDQxMTgzIC8qIERvd25sb2FkcyAqLywKKwkJCQk1QzE0MjZFMjFDMjNGODA1MDBENDExODMg
LyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovLAorCQkJCTVDMTQyNkUz
MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICov
LAorCQkJCTVDMTQyNkU0MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1l
bnQuaCAqLywKKwkJCQk1QzE0MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuY3BwICovLAorCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0MTE4MyAvKiBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oICovLAogCQkJCUU0ODlEMjgyMUEwQTJCRTgw
MDc4QzA2QSAvKiBjYWNoZSAqLywKIAkJCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29j
b2EgKi8sCiAJCQkJQkM4MjgzN0MxNkI0NURBNTAwQTI3OEZFIC8qIEVudHJ5UG9pbnQgKi8sCkBA
IC01NzQ0LDIzICs1NzIyLDYgQEAKIAkJCW5hbWUgPSBBdXRoZW50aWNhdGlvbjsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTUxOEU4RUYyMTZCMjA4RjgwMEU5MTQyOSAvKiBE
b3dubG9hZHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJ
CTVDMDkzMjA2MUMyMzYwMTEwMDdBQUE3QyAvKiBEb3dubG9hZElELmggKi8sCi0JCQkJNUM5Qjg2
MEUxQzIyM0U1NDAwMTEwRjM2IC8qIGNvY29hICovLAotCQkJCTJEQTk0NEE1MTg4NEU5M0MwMEVE
ODZEQiAvKiBpb3MgKi8sCi0JCQkJNTE4RThGMDQxNkIyMDkzNzAwRTkxNDI5IC8qIG1hYyAqLywK
LQkJCQk1MThFOEVGRTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQuY3BwICovLAotCQkJCTUx
OEU4RUZGMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZC5oICovLAotCQkJCTUxOEU4RjAwMTZC
MjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcCAqLywKLQkJ
CQk1MThFOEYwMTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVu
dC5oICovLAotCQkJCTUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIu
Y3BwICovLAotCQkJCTUxOEU4RjAzMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIu
aCAqLywKLQkJCSk7Ci0JCQluYW1lID0gRG93bmxvYWRzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKIAkJNTE4RThFRjYxNkIyMDkxQzAwRTkxNDI5IC8qIG1hYyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC01NzcwLDI4ICs1NzMxLDYgQEAK
IAkJCXBhdGggPSBBdXRoZW50aWNhdGlvbi9tYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OwotCQk1MThFOEYwNDE2QjIwOTM3MDBFOTE0MjkgLyogbWFjICovID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk1MThFOEYwNTE2QjIwOTM3MDBFOTE0
MjkgLyogRG93bmxvYWRNYWMubW0gKi8sCi0JCQkpOwotCQkJbmFtZSA9IG1hYzsKLQkJCXBhdGgg
PSBEb3dubG9hZHMvbWFjOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJNTFB
OEE2MEQxNjI3RjJBQzAwMEQ5MEU5IC8qIE5ldHdvcmsgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91
cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTI5ODlBNDBFMTY3RDE4MTMwMDRGOTZEMiAvKiBDdXN0
b21Qcm90b2NvbHMgKi8sCi0JCQkJNTFBOEE2MTIxNjI3RjMyNTAwMEQ5MEU5IC8qIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLywKLQkJCQk1MUE4QTYwRjE2MjdGMkJEMDAw
RDkwRTkgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLywKLQkJCQlCQ0Y0
REUyMjE2OEU0QkQ1MDBDOTRBRkMgLyogTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmggKi8sCi0J
CQkJNTFDQkJBMEQxNjUyMTlCNjAwNUJFOEZEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzLmNwcCAqLywKLQkJCQk1MUNCQkEwRTE2NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMuaCAqLywKLQkJCSk7Ci0JCQluYW1lID0gTmV0d29yazsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTUxQjE1QTdEMTM4NDM5QjIwMDMyMUFEOCAv
KiB1bml4ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTU5
MDIsMTQgKzU4NDEsNjUgQEAKIAkJCW5hbWUgPSBJY29uRGF0YWJhc2U7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQk1QzlCODYwRTFDMjIzRTU0MDAxMTBGMzYgLyogY29jb2Eg
Ki8gPSB7CisJCTVDMTQyNkYxMUMyM0Y4MTcwMEQ0MTE4MyAvKiBEb3dubG9hZHMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDMTQyNzBDMUMyM0Y4Nzcw
MEQ0MTE4MyAvKiBpb3MgKi8sCisJCQkJNUMxNDI3MEIxQzIzRjg3MTAwRDQxMTgzIC8qIG1hYyAq
LywKKwkJCQk1QzE0MjcwODFDMjNGODUyMDBENDExODMgLyogY29jb2EgKi8sCisJCQkJNUMxNDI2
RjMxQzIzRjg0MzAwRDQxMTgzIC8qIERvd25sb2FkLmNwcCAqLywKKwkJCQk1QzE0MjZGNDFDMjNG
ODQzMDBENDExODMgLyogRG93bmxvYWQuaCAqLywKKwkJCQk1QzE0MjZGNTFDMjNGODQzMDBENDEx
ODMgLyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAgKi8sCisJCQkJNUMxNDI2RjYx
QzIzRjg0MzAwRDQxMTgzIC8qIERvd25sb2FkQXV0aGVudGljYXRpb25DbGllbnQuaCAqLywKKwkJ
CQk1QzE0MjZGNzFDMjNGODQzMDBENDExODMgLyogRG93bmxvYWRJRC5oICovLAorCQkJCTVDMTQy
NkY4MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuY3BwICovLAorCQkJCTVDMTQy
NkY5MUMyM0Y4NDMwMEQ0MTE4MyAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLywKKwkJCSk7CisJCQlu
YW1lID0gRG93bmxvYWRzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNUMx
NDI2RjIxQzIzRjgyRDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29scyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNUM5Qjg2MTExQzIyM0U3OTAwMTEwRjM2
IC8qIERvd25sb2FkQ29jb2EubW0gKi8sCisJCQkJNUMxNDI3MUExQzIzRjhCRjAwRDQxMTgzIC8q
IENvY29hICovLAorCQkJCTVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2Nv
bE1hbmFnZXIuaCAqLywKKwkJCQk1QzE0MjcxNTFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCW5hbWUgPSBDdXN0b21Qcm90
b2NvbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1QzE0MjcwODFDMjNG
ODUyMDBENDExODMgLyogY29jb2EgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTVDMTQyNzA5MUMyM0Y4NjkwMEQ0MTE4MyAvKiBEb3dubG9hZENvY29hLm1t
ICovLAogCQkJKTsKIAkJCW5hbWUgPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTVDMTQyNzBCMUMyM0Y4NzEwMEQ0MTE4MyAvKiBtYWMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDMTQyNzBGMUMyM0Y4OTkwMEQ0MTE4
MyAvKiBEb3dubG9hZE1hYy5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gbWFjOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNUMxNDI3MEMxQzIzRjg3NzAwRDQxMTgzIC8qIGlv
cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUMxNDI3
MEQxQzIzRjg4NTAwRDQxMTgzIC8qIERvd25sb2FkSU9TLm1tICovLAorCQkJKTsKKwkJCW5hbWUg
PSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1QzE0MjcxQTFDMjNG
OEJGMDBENDExODMgLyogQ29jb2EgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTVDMTQyNzFCMUMyM0Y4Q0MwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1h
bmFnZXJDb2NvYS5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gQ29jb2E7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQk2RUU4NDlDNDEzNjhEOTA0MDAzOEQ0ODEgLyogbWFjICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc2OTMsNiArNzY4
Myw3IEBACiAJCQkJN0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0
ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyog
QVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYxMTNF
MjUxMjZDRTE4MjAwNTdEMEE3IC8qIEFQSVVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNUMxNDI2RjAxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzg5RDI5NDFBNjcxMjJGMDAzQTVG
REUgLyogQVBJVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ4Nzg2MjQxQkRCNThG
RjAwRDAyQUJCIC8qIEFQSVVzZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUUx
QUZFRDE2QjIxMDE3MDA2Q0MxRjIgLyogQVBJV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03NzM4LDcgKzc3MjksNiBAQAogCQkJCUNEQzM4MzBDMTcyMTIyODIwMDhBMkZDMyAvKiBDb29r
aWVTdG9yYWdlU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMUEwQkQzMUE0OEU2
QzYwMDU0RUY3NCAvKiBDb3JlUERGU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODc4QjYxNTEz
MzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKLQkJCQky
OTg5QTQxNDE2N0QxODRCMDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyOTg0RjU4OTE2NEJBMDk1MDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QUQzMDkzMTY0QjRDNUQwMDcy
REVBOSAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Mjk4NEY1N0QxNjRCOTE1RjAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzc1MSwxMCArNzc0MSw3IEBACiAJCQkJQ0UxQTBC
RDQxQTQ4RTZDNjAwNTRFRjc0IC8qIERhdGFEZXRlY3RvcnNVSVNQSS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFDNzUzODAxODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgzODkxQjZDMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4RThGMDgxNkIyMDkzNzAwRTkxNDI5IC8q
IERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MThFOEYwQTE2QjIwOTM3MDBFOTE0Mjkg
LyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFE
RjYzMTMxOEUwQjdDODAwM0EzRTJBIC8qIERvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MThFOEYwQzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUI3RDRDQTEyODhBQUE3MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFEMjVFOTYxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2Fk
UHJveHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdENjFBMTI4OEI5RDkwMENGRDA4QyAv
KiBEb3dubG9hZFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzg2NCwxNSArNzg1
MSwxMiBAQAogCQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzk1NTZBMTYyODc2RjMwMEZBNDNCNiAvKiBO
ZXR3b3JrUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5
NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MTc5NTU3MTE2Mjg3N0QyMDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjMxOTk1MTYyODlBNjMwMEUyMkYwMCAv
KiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTRBOTU0QTE2
RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNzk1NTZFMTYyODc3QjMwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vz
c1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNBMTYzRDE2MzA4OEY2MDA1RDdEMjIgLyog
TmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0Y0REUy
MzE2OEU0QkQ1MDBDOTRBRkMgLyogTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUZEMThCNjE2NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxQ0JCQTEw
MTY1MjE5QjYwMDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1NjE0ODk5QzA5MDA4MTBENzEgLyogTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEyNjFGMTQ4
RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBp
biBIZWFkZXJzICovLApAQCAtNzg4OSw2ICs3ODczLDcgQEAKIAkJCQkzNzU0RDU0NTFCM0EyOUZE
MDAzQTRDN0YgLyogTlNJbnZvY2F0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBQ0Ex
MzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0NGNjcyRDEyQzdFREY3MDA4RjlDMzUgLyogT3JpZ2luQW5kRGF0YWJhc2VzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1QzE0MjcxODFDMjNGOEI3MDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyog
UGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhC
IC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTYyMThCQkUzRDkwMDBG
Q0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTMyLDYgKzgxMTcs
NyBAQAogCQkJCUJDMDMyRDhGMTBGNDM3QTAwMDU4QzE1QSAvKiBXZWJQYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIwNjEyOUEwQTY3MDBEMTc0
QTQgLyogV2ViUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzE0MjcwNzFDMjNGODRD
MDBENDExODMgLyogRG93bmxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjI1
MjEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM3QjYyMTUxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjU1LDYgKzgyNDEsNyBAQAogCQkJCTFB
QjQ3NERBMTg0RDQ0MjUwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NERFMTg0RDQ0NTkwMDUxQjYyMiAvKiBXS0J1bmRs
ZVBhZ2VVSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGMDQ5RTcxMUZFMjBGNjAwRjg2
QTU4IC8qIFdLQnVuZGxlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUMxNDI2RUQxQzIz
RjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzYwQzU3OTEyNDBBNTQ2MDA4QzVFMjkgLyogV0tCdW5kbGVSYW5nZUhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RDI0QzcxNkNENzNDNTAwN0Q1NDYxIC8qIFdL
QnVuZGxlUmFuZ2VIYW5kbGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY5RjEy
MEI2MzVGMDA4MjZDMEMgLyogV0tCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC04MzA1LDYgKzgyOTIsNyBAQAogCQkJCUM1NDI1NkI3MThCRUMxOEMwMERFNDE3OSAvKiBXS0Zv
cm1QZXJpcGhlcmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTQyNTZCODE4QkVDMThDMDBERTQx
NzkgLyogV0tGb3JtUG9wb3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU0MjU2QkExOEJFQzE4
QzAwREU0MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRyb2wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVD
MTQyNkVFMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRTQ2OTVBMTIxNEVERjQwMDBCOThFQiAvKiBXS0Zvcm1TdWJtaXNz
aW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3REZBNzAwMTgxMEJCOTIwMDFGNEE5
RiAvKiBXS0ZvdW5kYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDAxMzlCMTEwRkE0MjAw
MDNCOEE2NyAvKiBXS0ZyYW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTgzMTUsNyArODMwMyw2IEBA
CiAJCQkJQkNCOUY2QTUxMTIzREQwRDAwQTEzN0UwIC8qIFdLRnJhbWVQb2xpY3lMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBRUEyMkYxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtl
eWJvYXJkQWNjZXNzV2F0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDQTg1QzkxMzJBQkE0
RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTVDMTQyNkUxMUMyM0Y1MEIwMEQ0MTE4MyAvKiBEb3dubG9hZElELmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzU0Q0MxMjEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4
MTJENkNEMTIwMDEyQTcyQSAvKiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LApAQCAtODM4NCw2ICs4MzcxLDcgQEAKIAkJCQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3QzUgLyog
V0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjhB
MUY0MTg0MDBCOEYwMEU5QUU2OSAvKiBXS1BhZ2VGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUI4QTFGNjE4NDAwQjlEMDBFOUFFNjkgLyogV0tQYWdlRmluZE1hdGNoZXNDbGllbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDMTQyNzA1MUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9h
ZElELmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFGMDE4NDAwQjAwMDBFOUFFNjkgLyogV0tQ
YWdlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYzMzcxMkE0NUFCQTAwRDE3
NEE0IC8qIFdLUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlFQTMwRDFBOTZDQjU5
MDAyRDI4MDcgLyogV0tQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtODQ2OCw2ICs4NDU2LDcgQEAKIAkJCQlCQzg2OTlCNTExNkFBREFBMDAyQTkyNUIgLyogV0tW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg2OTlCNzExNkFBREFBMDAyQTkyNUIgLyogV0tW
aWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjhBNDk3MUFGOTY1QTEwMEYxOTBD
OSAvKiBXS1ZpZXdMYXlvdXRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUMxNDI3MDIx
QzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRkE2MTc5
RjEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg0OTMsNiArODQ4Miw3IEBACiAJCQkJMUY3NTA2QjUxODU5MTY1
NDAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJblNjcmlwdFdvcmxkSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNDgzMkNDMUE5QkM0NjUwMDhCNERGRSAvKiBXS1dlYnNpdGVEYXRh
UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ4MzJDRTFBOUJDNDg0MDA4QjRERkUgLyog
V0tXZWJzaXRlRGF0YVJlY29yZEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzE0Mjcw
NDFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFBNjU0RDExQjE0RjcxNDAwQkYxRDNFIC8qIFdLV2Vic2l0ZURhdGFS
ZWNvcmRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJENjE4
N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQ5NiwxMyArOTQ4NiwxMyBAQAogCQkJCTUxMDZEN0MyMThCREJFNzMwMDBBQjE2
NiAvKiBDb250ZXh0TWVudUNvbnRleHREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQzM4
MzEwMTcyMTI0NDAwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUI4NzhCNjE2MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4g
U291cmNlcyAqLywKLQkJCQkyOTg5QTQxMTE2N0QxODM0MDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTg0RjU4ODE2NEJBMDk1MDA0
QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTI5QUQzMDk2MTY0QjRDOTMwMDcyREVBOSAvKiBDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5ODRGNTdDMTY0QjkxNUYwMDRC
QzBDNiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUUzNTFGRjE4MEY1RDBGMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9j
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBE
YXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFEMEQ0MzExODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUMxNDI3MDMxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25s
b2FkQXV0aGVudGljYXRpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMEQ0MzYx
ODNCMzUzRDAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTExNUM3MTQxOTBGODlFNDAwRUNDNTE2IC8q
IERhdGFiYXNlUHJvY2Vzc0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTM1MjAyMTgwRjVE
MUUwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTk1
MTcsMTIgKzk1MDcsNyBAQAogCQkJCTFBQzc1MzdGMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMzQ5NDY0MUJDQzJFQzMwMDY0RjBCRSAv
KiBEZXByZWNhdGVkUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODM4OTFCNkQxQTY4
QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTE4RThGMDcxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxOEU4RjA5MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0
aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExREY2MzEyMThFMEI3QzgwMDNBM0Uy
QSAvKiBEb3dubG9hZENsaWVudC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTJEQTk0NEE3MTg4NEU5
NDgwMEVEODZEQiAvKiBEb3dubG9hZElPUy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxOEU4RjBE
MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUx
OEU4RjBCMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFCN0Q0Q0IxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFEMjVFOTUxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2FkUHJv
eHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8q
IERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjA2
LDYgKzk1OTEsNyBAQAogCQkJCTFBNEE5QzU1MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBs
dWdpbk1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBOUM5QTEyQjgyMUNEMDA4RkU5
ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE1
ODg5MzExRUU3MDQwMDA2MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUMxNDI3MDYxQzIzRjg0QzAwRDQxMTgzIC8qIERvd25sb2FkTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTc5OEM3OTE2RTY4MTg4MDAyNDAxMzkgLyogTmV0d29y
a0Jsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQzNkVDQTFBMEQwM0ZBMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OUQ0MEQ5MUFE
M0ZCMjEwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTk2MzMsNyArOTYxOSw2IEBACiAJCQkJN0VDNEYwRkIxOEU0QUNCQjAwODA1NkFGIC8q
IE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTgzRERFQzE2MzBC
REZDMDA4QkU1QzcgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3OTU1NzAxNjI4NzdD
RjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJEQTk0NEJEMTg4NTExRTcwMEVEODZEQiAvKiBOZXR3b3JrUHJvY2Vzc0lP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNzk1NTY3MTYyODc2Q0IwMEZBNDNCNiAvKiBOZXR3
b3JrUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODI4Mzg0MTZCNDVEQTUwMEEy
NzhGRSAvKiBOZXR3b3JrUHJvY2Vzc01haW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTk2NDUsNyAr
OTYzMCw2IEBACiAJCQkJNTFGRDE4QjUxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUzQjY3RjE2RjI2NkIzMDA5OTY4REMg
LyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1MjU1
MUExNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUNCQkEwRjE2NTIxOUI2MDA1QkU4RkQgLyogTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Mjgz
QUMxNkI0QkYzRjAwQTI3OEZFIC8qIE5ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMkVDNTUxNDg5OTgyRTAwODEwRDcxIC8qIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTcxOCw2
ICs5NzAyLDcgQEAKIAkJCQlCQzExMUIxRDExMkY1RkU2MDAzMzdCQUIgLyogUHJvY2Vzc0xhdW5j
aGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFNjdBMjYxOTEwQjlEOTAwMDA0QUI3IC8q
IFByb2Nlc3NUaHJvdHRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5RUUxOTA3QUQ2
RjAwRjdDOTJCIC8qIFF1aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1QzE0MjcxMzFDMjNGODlFMDBENDExODMgLyogRG93bmxvYWRDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTJENDdCNTZDMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEREY3MzE2MThFOTUwNjAwMDRGNUE2NiAvKiBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUIxNkFFOTE2NEIzQTg4MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbSBpbiBT
b3VyY2VzICovLApAQCAtOTkzOSw2ICs5OTI0LDcgQEAKIAkJCQlCQzdCNjIxNjEyQTQyMTlBMDBE
MTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlENTVE
RjExNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJEOUVBMzExMUE5NkQ5RUIwMDJEMjgwNyAvKiBXZWJQYWdl
SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUMxNDI2RUMxQzIz
RjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTJEQTk0NEJBMTg4NEVBM0MwMEVEODZEQiAvKiBXZWJQYWdlSU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NjNENkUxMTNERDFBNTAwNTc0QkUyIC8qIFdlYlBhZ2VN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMENFNzJBMDEyNDdFNzFEMDBCQzBFQzQgLyogV2Vi
UGFnZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5NTEsOCArOTkzNywx
MCBAQAogCQkJCTUxMjEyN0MzMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNDY5NEQwMUE1MUUzNjgwMEFENTg0NSAvKiBX
ZWJQYXN0ZWJvYXJkUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M0Njk0Q0MxQTRCNTEw
QTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUMxNDI2RUYxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNDY5NEM5MUE0QjRFQTEwMEFENTg0NSAvKiBX
ZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEzRTczNjIxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1QzE0MjcwMTFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEREQxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRm
b3JtVG91Y2hQb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMjE4ODRFNEYwMDBF
RDg2REIgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50SU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxRDU5MjlFMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xMDAwMiw2ICs5OTkwLDcgQEAKIAkJCQkyREE5NDRBMzE4ODRFNEYwMDBFRDg2
REIgLyogV2ViVG91Y2hFdmVudElPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0EwRUY4MDEy
MzMxRTc4MDA3RDNDRkIgLyogV2ViVW5kb1N0ZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFB
RjA4QUQxOTI2OTM2NzAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1QzE0MjcxRDFDMjNGOENGMDBENDExODMgLyogQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhCNzE5MjY5RTZEMDBC
NjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBQUYwOEExMTkyNjgxRDEwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzM2MUQ3ODE5MjgwM0JE
MDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA0OCwxMSArMTAwMzcsMTMgQEAKIAkJCQlFRENBNzFC
NzEyOEREQThDMDAyMDFCMjYgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzYwQzU3QTEyNDBBNTQ2MDA4QzVFMjkgLyogV0tCdW5kbGVSYW5nZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0REY5RTEyMEI2MzVGMDA4MjZDMEMgLyogV0tCdW5k
bGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1QzE0MjcxMjFDMjNGODlFMDBE
NDExODMgLyogRG93bmxvYWRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGNTEyNEZG
MDI3MDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc2MjgxMjRGRjA0MDAwNjhGMjBBIC8qIFdLQ2VydGlmaWNhdGVJbmZvTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBMjg0RDYxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUJDNEE2Mjk2MTQ3MzEzQTAwMDZDNjgxQSAvKiBXS0Nvbm5l
Y3Rpb25SZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNEQxOEJCRTA0NDAwMEZDRkM5
IC8qIFdLQ29udGVudFZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQk1QzE0MjcxMTFDMjNGODlF
MDBENDExODMgLyogRG93bmxvYWRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU2RDE4
QkJGMjZBMDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNCOUUyNEMxMTIwRTE1QzAwQTEzN0UwIC8qIFdLQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUU1MkY5NzE5MjAyNjMzMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmln
dXJhdGlvblJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTY1LDcgKzEwMTU2LDYgQEAKIAkJ
CQlCQzQwNzYwMzEyNEZGMDI3MDA2OEYyMEEgLyogV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzVBOEQyRDgxODdEMzA0MDAwQzM5QzlFIC8qIFdLU2Vzc2lv
blJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQURFNDZCMjE5NTRFQzYxMDAwRjc5ODUgLyog
V0tTZXNzaW9uU3RhdGVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUM5Qjg2MTMxQzIyM0VB
RjAwMTEwRjM2IC8qIERvd25sb2FkQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTNFNDYy
RTFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MDUxMjRGRjAyNzAwNjhGMjBBIC8qIFdLU3RyaW5nLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjE5MTI0RkYwMzcwMDY4RjIwQSAvKiBXS1N0cmlu
Z0NGLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="292643"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>