<?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>226410</bug_id>
          
          <creation_ts>2021-05-28 18:02:43 -0700</creation_ts>
          <short_desc>[Windows] Remove some of the unneeded WebKitLegacy Windows-specific plug-in code</short_desc>
          <delta_ts>2021-05-30 19:58:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765043</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 18:02:43 -0700</bug_when>
    <thetext>Remove some of the unneeded WebKitLegacy Windows-specific plug-in code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765046</commentid>
    <comment_count>1</comment_count>
      <attachid>430081</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 18:13:05 -0700</bug_when>
    <thetext>Created attachment 430081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765276</commentid>
    <comment_count>2</comment_count>
      <attachid>430158</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-30 17:24:58 -0700</bug_when>
    <thetext>Created attachment 430158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765298</commentid>
    <comment_count>3</comment_count>
      <attachid>430158</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-30 19:38:22 -0700</bug_when>
    <thetext>Comment on attachment 430158
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765301</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-30 19:57:10 -0700</bug_when>
    <thetext>Committed r278265 (238302@main): &lt;https://commits.webkit.org/238302@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430158.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765302</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-30 19:58:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78672498&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430081</attachid>
            <date>2021-05-28 18:13:05 -0700</date>
            <delta_ts>2021-05-30 17:24:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226410-20210528181304.patch</filename>
            <type>text/plain</type>
            <size>249414</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCmluZGV4IDUwY2Fj
ZTAzZTNlNzYyYWZjMGYyMmQ0NTNhZDkzZjY2NWQyYTFmOTMuLmU5ZmY1ODkzNmIxNmRkZWNlNTRl
MWU4Mjk3YWFhYTNjNjY5MDk2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjEtMDUtMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lZWRlZCBXZWJLaXRMZWdhY3kgV2luZG93cy1zcGVjaWZp
YyBwbHVnLWluIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNjQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQgYWxsIHRoZSBjb2RlIGluIHRoZSB3
aW4vUGx1Z2lucyBkaXJlY3RvcnkuCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6IERpdHRv
LgorCiAyMDIxLTA1LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkIHVzaW5nIHN0ZDo6b3B0aW9uYWwgZGlyZWN0bHkgaW5zdGVhZCBv
ZiB0aHJvdWdoIFdURjo6T3B0aW9uYWwgdHlwZWRlZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9n
CmluZGV4IDYzZGI5YTIxNTk1NTBiODU0N2NhNDkwYWZhZmE2YzU2NGQ5N2I5ZmMuLmI3YjBmYjFj
MTMyMGFiNDk2NGZjODAxZDFkNTAwNWNjNzBkMWQxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgb2YgdGhlIHVubmVlZGVkIFdlYktpdExl
Z2FjeSBXaW5kb3dzLXNwZWNpZmljIHBsdWctaW4gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW1v
dmVkLgorICAgICAgICAqIFBsdWdpbnMvUGxhdGZvcm1Nb2R1bGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBQbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5E
YXRhYmFzZVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFBsdWdpbnMvUGx1Z2luUGFja2FnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luUGFja2FnZVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5R
dWlya1NldC5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblN0cmVhbS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFBsdWdpbnMvUGx1Z2luVmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5WaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5WaWV3V2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVtb3ZlZC4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0Lmg6IFJlbW92ZWQgUGx1Z2lu
Vmlldy5oLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwOiBSZW1vdmVkIGluY2x1ZGVzIG9mCisgICAgICAgIFBsdWdpbkRhdGFiYXNlLmgsIFBsdWdp
blBhY2thZ2UuaCwgUGx1Z2luVmlldy5oLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50KTogUmVtb3ZlZCBtX21hbnVhbExvYWRlciBhbmQKKyAgICAg
ICAgbV9oYXNTZXRuUmVzcG9uc2VUb1BsdWdpbi4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcik6IFJlbW92ZWQgYWxsIHRoZSBjb2RlIGhlcmUsCisg
ICAgICAgIHdoaWNoIHdhcyBvbmx5IHVzZWQgZm9yIG1fbWFudWFsTG9hZGVyLgorICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQpOiBSZW1vdmVkIGNvZGUgdGhhdCBy
dW5zIG9ubHkgaWYKKyAgICAgICAgbV9tYW51YWxMb2FkZXIgaXMgbm9uLW51bGwuCisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKTogUmVtb3ZlZCBhbGwgdGhl
IGNvZGUgaGVyZSwgd2hpY2gKKyAgICAgICAgd2FzIG9ubHkgdXNlZCBmb3IgbV9tYW51YWxMb2Fk
ZXIuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOiBS
ZW1vdmVkIGNhbGwgdG8gcGx1Zy1pbiBkYXRhYmFzZQorICAgICAgICB0byBmaWd1cmUgb3V0IE1J
TUUgdHlwZSBhbmQgc2VsZWN0IGEgcGx1Zy1pbiB0byBsb2FkLgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVnaW4gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6IFJldHVybiBu
dWxscHRyLiBObyBsb25nZXIgc3VwcG9ydAorICAgICAgICBOZXRzY2FwZS1zdHlsZSBwbHVnLWlu
cywgbm9yIGNhbGwgdGhlIGVtYmVkZGVkVmlld1dpdGhBcmd1bWVudHMgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOiBSZW1vdmVk
IGFsbCB0aGUgY29kZSBoZXJlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lmg6IFJlbW92ZWQgZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbiwKKyAgICAg
ICAgbV9tYW51YWxMb2FkZXIsIGFuZCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luLgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHA6IFJlbW92ZWQgaW5j
bHVkZSBvZiBQbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
OjpyZWZyZXNoUGx1Z2lucyk6IFJlbW92ZWQgYWxsIHRoZSBjb2RlIGhlcmUuCisgICAgICAgIChX
ZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnBsdWdpbkluZm8pOiBEaXR0by4KKyAgICAgICAgKFdlYlBs
dWdpbkluZm9Qcm92aWRlcjo6d2ViVmlzaWJsZVBsdWdpbkluZm8pOiBEaXR0by4KKyAgICAgICAg
KiBXZWJGcmFtZS5jcHA6IFJlbW92ZWQgaW5jbHVkZXMgb2YgUGx1Z2luRGF0YWJhc2UuaCBhbmQg
UGx1Z2luVmlldy5oLgorICAgICAgICAqIFdlYlZpZXcuY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YlZpZXc6OldlYlZpZXdXbmRQcm9jKTogUmVtb3ZlZCB3b3JrYXJvdW5kIHNwZWNpZmljYWxseSBm
b3IgdGhlCisgICAgICAgIFdpbmRvd3MgTWVkaWEgUGxheWVyIHBsdWctaW4uCisgICAgICAgIChX
ZWJWaWV3OjphZGRBZGRpdGlvbmFsUGx1Z2luRGlyZWN0b3J5KTogUmVtb3ZlZCBhbGwgdGhlIGNv
ZGUgaGVyZS4KKwogMjAyMS0wNS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTmV4dCBzdGVwIHRvd2FyZCB1c2luZyBzdGQ6Om9wdGlvbmFsIGRpcmVjdGx5IGlu
c3RlYWQgb2YgdGhyb3VnaCBXVEY6Ok9wdGlvbmFsIHR5cGVkZWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1Bs
YXRmb3JtRlRXLmNtYWtlCmluZGV4IDIzYjBmYzMwZjczNTY3NGY5NGIzMTU5ODQ5ZmYxODcwNGRh
OWZlYzMuLjdlYmM3NWQwMTEzNTk5NmQxNmM3ZWQ4MmQ4YzdlYmI5ZTQyZGE2MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtMjcsNyArMjcsNiBAQCBsaXN0KEFQUEVO
RCBXZWJLaXRMZWdhY3lfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7Q01BS0Vf
QklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRlL0phdmFTY3JpcHRDb3JlIgogICAgICIke0NN
QUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9XZWJDb3JlIgogICAgICIke1dFQktJ
VExFR0FDWV9ESVJ9L3dpbiIKLSAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4vcGx1Z2lucyIK
ICAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4vV2ViQ29yZVN1cHBvcnQiCiAgICAgIiR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V2ViS2l0TGVn
YWN5X0RFUklWRURfU09VUkNFU19ESVJ9L0ludGVyZmFjZXMiCkBAIC0xNzEsMTggKzE3MCw2IEBA
IGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXMKICAgICB3aW4vV2ViVmll
dy5jcHAKICAgICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUuY3BwCiAKLSAgICB3aW4vcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAK
LSAgICB3aW4vcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW4uY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKLSAgICB3aW4v
cGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAotICAgIHdpbi9wbHVnaW5zL1Bs
dWdpblZpZXdXaW4uY3BwCi0gICAgd2luL3BsdWdpbnMvbnBhcGkuY3BwCi0KICAgICB3aW4vc3Rv
cmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAogKQogCkBAIC0yMjgsMjggKzIxNSw2IEBAIGlm
IChVU0VfQ0YpCiAgICAgKQogZW5kaWYgKCkKIAotaWYgKENNQUtFX1NJWkVPRl9WT0lEX1AgRVFV
QUwgOCkKLSAgICBlbmFibGVfbGFuZ3VhZ2UoQVNNX01BU00pCi0gICAgaWYgKE1TVkMpCi0gICAg
ICAgIHNldChNQVNNX0VYRUNVVEFCTEUgbWw2NCkKLSAgICAgICAgc2V0KE1BU01fRkxBR1MgL2Mg
L0ZvKQotICAgICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgICAgICBPVVRQVVQgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vUGFpbnRIb29rcy5vYmoKLSAgICAgICAg
ICAgIE1BSU5fREVQRU5ERU5DWSB3aW4vcGx1Z2lucy9QYWludEhvb2tzLmFzbQotICAgICAgICAg
ICAgQ09NTUFORCAke01BU01fRVhFQ1VUQUJMRX0gJHtNQVNNX0ZMQUdTfQotICAgICAgICAgICAg
ICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1BhaW50SG9va3Mub2JqCi0g
ICAgICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbi9wbHVnaW5zL1Bh
aW50SG9va3MuYXNtCi0gICAgICAgICAgICBWRVJCQVRJTSkKLSAgICAgICAgbGlzdChBUFBFTkQg
V2ViS2l0TGVnYWN5X1NPVVJDRVMKLSAgICAgICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L1BhaW50SG9va3Mub2JqCi0gICAgICAgICkKLSAgICBlbHNlICgpCi0gICAg
ICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTCi0gICAgICAgICAgICB3aW4vcGx1
Z2lucy9QYWludEhvb2tzLmFzbQotICAgICAgICApCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0K
IGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lUX0FERF9UQVJHRVRfQ1hY
X0ZMQUdTKFdlYktpdExlZ2FjeSAtV25vLW92ZXJsb2FkZWQtdmlydHVhbCkKIGVuZGlmICgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNl
L1dlYktpdExlZ2FjeS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAyNDZlYjhmZTZlYWRhNDNhMDhi
MzE2Nzc1NmY2ZjRiN2YwNmU5YmZlLi5jMjIyYTc2YzUwMjlmYjRhM2FjYzlhZWJjNjU2OTM2MDI1
NWY4MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTQ1LDcgKzQ1
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9KYXZhU2NyaXB0
Q29yZSIKICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvV2ViQ29y
ZSIKICAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7V0VCS0lUTEVHQUNZX0RJ
Un0vd2luL3BsdWdpbnMiCiAgICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luL1dlYkNvcmVTdXBw
b3J0IgogICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgog
ICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2VzIgpAQCAt
MTg5LDE4ICsxODgsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2Vz
CiAgICAgd2luL1dlYlZpZXcuY3BwCiAgICAgd2luL1dlYldvcmtlcnNQcml2YXRlLmNwcAogCi0g
ICAgd2luL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2VXaW4uY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCi0gICAgd2lu
L3BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKLSAgICB3aW4vcGx1Z2lucy9Q
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAKLSAgICB3aW4vcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKLSAg
ICB3aW4vcGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcAotICAgIHdpbi9wbHVnaW5zL25wYXBpLmNw
cAotCiAgICAgd2luL3N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKICkKIApAQCAtMjc0
LDI5ICsyNjEsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFUwogICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYlZpZXdQcmVmZXJlbmNlc0NoYW5nZWRH
ZW5lcmF0ZWQuY3BwCiApCiAKLQotaWYgKENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKLSAg
ICBlbmFibGVfbGFuZ3VhZ2UoQVNNX01BU00pCi0gICAgaWYgKE1TVkMpCi0gICAgICAgIHNldChN
QVNNX0VYRUNVVEFCTEUgbWw2NCkKLSAgICAgICAgc2V0KE1BU01fRkxBR1MgL2MgL0ZvKQotICAg
ICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgICAgICBPVVRQVVQgJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vUGFpbnRIb29rcy5vYmoKLSAgICAgICAgICAgIE1BSU5f
REVQRU5ERU5DWSB3aW4vcGx1Z2lucy9QYWludEhvb2tzLmFzbQotICAgICAgICAgICAgQ09NTUFO
RCAke01BU01fRVhFQ1VUQUJMRX0gJHtNQVNNX0ZMQUdTfQotICAgICAgICAgICAgICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1BhaW50SG9va3Mub2JqCi0gICAgICAgICAg
ICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dpbi9wbHVnaW5zL1BhaW50SG9va3Mu
YXNtCi0gICAgICAgICAgICBWRVJCQVRJTSkKLSAgICAgICAgbGlzdChBUFBFTkQgV2ViS2l0TGVn
YWN5X1NPVVJDRVMKLSAgICAgICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L1BhaW50SG9va3Mub2JqCi0gICAgICAgICkKLSAgICBlbHNlICgpCi0gICAgICAgIGxpc3Qo
QVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTCi0gICAgICAgICAgICB3aW4vcGx1Z2lucy9QYWlu
dEhvb2tzLmFzbQotICAgICAgICApCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KIGxpc3QoQVBQ
RU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTICR7V2ViS2l0TGVnYWN5X0lOQ0xVREVTfSAke1dlYktp
dExlZ2FjeV9TT1VSQ0VTX0NsYXNzZXN9ICR7V2ViS2l0TGVnYWN5X1NPVVJDRVNfV2ViQ29yZVN1
cHBvcnR9KQogCiBzb3VyY2VfZ3JvdXAoSW5jbHVkZXMgRklMRVMgJHtXZWJLaXRMZWdhY3lfSU5D
TFVERVN9KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QYWlu
dEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGFpbnRIb29rcy5h
c20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MDg4MTM1NmEwZGRjZDc4MzA3Mjgx
MWU5ZjE1YTExNTk0YjE4NWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQor
KysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTsvKgotOyAgICBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi07Ci07ICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLTsgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLTsgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi07ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLTsKLTsgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi07
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi07ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi07ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotOwotOyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi07ICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi07ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi07ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotOyovCi0KLTtIREMgX19zdGRjYWxsIF9IQmVnaW5QYWludChIV05EIGhXbmQsIExQUEFJ
TlRTVFJVQ1QgbHBQYWludCk7Ci0KLVBVQkxJQyAgX0hCZWdpblBhaW50Ci0KLV9URVhUICAgU0VH
TUVOVAotCi1fSEJlZ2luUGFpbnQgUFJPQwotICAgICBtb3YgIHIxMCxyY3gKLSAgICAgbW92ICBl
YXgsMTAxN2gKLSAgICAgc3lzY2FsbAotICAgICByZXQKLV9IQmVnaW5QYWludCBFTkRQCi0KLV9U
RVhUICAgRU5EUwotCi07Qk9PTCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0
IFBBSU5UU1RSVUNUKiBscFBhaW50KTsKLQotUFVCTElDICBfSEVuZFBhaW50Ci0KLV9URVhUICAg
U0VHTUVOVAotCi1fSEVuZFBhaW50IFBST0MKLSAgICBtb3YgIHIxMCxyY3gKLSAgICBtb3YgIGVh
eCwxMDE5aAotICAgIHN5c2NhbGwKLSAgICByZXQKLV9IRW5kUGFpbnQgRU5EUAotCi1fVEVYVCAg
IEVORFMKLQotRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5z
L1BsYXRmb3JtTW9kdWxlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsYXRm
b3JtTW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNjZlNjM5MzQwOTFl
NDExODdiMjM5OTAzMWJkMzcwYWNmOWNjMTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbGF0Zm9y
bU1vZHVsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
dHlwZWRlZiBITU9EVUxFIFBsYXRmb3JtTW9kdWxlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0cnVjdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gewotICAgIHVuc2lnbmVkIGxlYXN0U2lnOwot
ICAgIHVuc2lnbmVkIG1vc3RTaWc7Ci0KLSAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24odW5zaWdu
ZWQpCi0gICAgICAgIDogbGVhc3RTaWcoMCkKLSAgICAgICAgLCBtb3N0U2lnKDApCi0gICAgewot
ICAgIH0KLQotICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbih1bnNpZ25lZCBsc2IsIHVuc2lnbmVk
IG1zYikKLSAgICAgICAgOiBsZWFzdFNpZyhsc2IpCi0gICAgICAgICwgbW9zdFNpZyhtc2IpCi0g
ICAgewotICAgIH0KLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxYjc5ZTk0ZGY3YzZmMWIwYmNiNWU4YjQ4Zjk5MDBiNDUz
N2U3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDYxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLQotI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0j
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPj4gUGx1Z2lu
UGFja2FnZUJ5TmFtZU1hcDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCi0KLWNvbnN0ZXhwciBzaXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlU2l6ZSA9IDMyNzY4OwotCi1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBsdWdpbk1ldGFk
YXRhQ2FjaGVJc0VuYWJsZWQ7Ci0KLVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2Fj
aGVQYXRoKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjYWNoZVBhdGg7
Ci0gICAgcmV0dXJuIGNhY2hlUGF0aDsKLX0KLQotI2VuZGlmCi0KLVBsdWdpbkRhdGFiYXNlOjpQ
bHVnaW5EYXRhYmFzZSgpCi17Ci19Ci0KLVBsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6
aW5zdGFsbGVkUGx1Z2lucyhib29sIHBvcHVsYXRlKQotewotICAgIHN0YXRpYyBQbHVnaW5EYXRh
YmFzZSogcGx1Z2lucyA9IDA7Ci0KLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lu
cyA9IG5ldyBQbHVnaW5EYXRhYmFzZTsKLQotICAgICAgICBpZiAocG9wdWxhdGUpIHsKLSAgICAg
ICAgICAgIHBsdWdpbnMtPnNldFBsdWdpbkRpcmVjdG9yaWVzKFBsdWdpbkRhdGFiYXNlOjpkZWZh
dWx0UGx1Z2luRGlyZWN0b3JpZXMoKSk7Ci0gICAgICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotYm9vbCBQbHVn
aW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
LXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcg
dGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4gKHJlZnJlc2goKSAm
JiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKLX0KLQotdm9pZCBQ
bHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJl
Y3RvcnkpCi17Ci0gICAgbV9wbHVnaW5EaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKLSAg
ICByZWZyZXNoKCk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQotewotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgaWYgKCFtX3BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQpCi0gICAgICAgIGxvYWRQZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZSgpOwotI2VuZGlmCi0gICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGx1Z2luU2V0IHBsdWdp
bnNUb1VubG9hZDsKLSAgICAgICAgZ2V0RGVsZXRlZFBsdWdpbnMocGx1Z2luc1RvVW5sb2FkKTsK
LQotICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucwotICAgICAgICBhdXRvIGVuZCA9IHBsdWdpbnNU
b1VubG9hZC5lbmQoKTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHJlbW92ZShpdC0+Z2V0KCkpOwot
Ci0gICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gcGF0aHM7Ci0gICAgZ2V0UGx1Z2luUGF0aHNJ
bkRpcmVjdG9yaWVzKHBhdGhzKTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IHBhdGhz
V2l0aFRpbWVzOwotCi0gICAgLy8gV2Ugc2hvdWxkIG9ubHkgc2tpcCB1bmNoYW5nZWQgZmlsZXMg
aWYgd2UgZGlkbid0IHJlbW92ZSBhbnkgcGx1Z2lucyBhYm92ZS4gSWYgd2UgZGlkIHJlbW92ZQot
ICAgIC8vIGFueSBwbHVnaW5zLCB3ZSBuZWVkIHRvIGxvb2sgYXQgZXZlcnkgcGx1Z2luIGZpbGUg
c28gdGhhdCwgZS5nLiwgaWYgdGhlIHVzZXIgaGFzIHR3byB2ZXJzaW9ucwotICAgIC8vIG9mIFJl
YWxQbGF5ZXIgaW5zdGFsbGVkIGFuZCBqdXN0IHJlbW92ZWQgdGhlIG5ld2VyIG9uZSwgd2UnbGwg
cGljayB1cCB0aGUgb2xkZXIgb25lLgotICAgIGJvb2wgc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVz
ID0gIXBsdWdpblNldENoYW5nZWQ7Ci0KLSAgICBhdXRvIHBhdGhzRW5kID0gcGF0aHMuZW5kKCk7
Ci0gICAgZm9yIChhdXRvIGl0ID0gcGF0aHMuYmVnaW4oKTsgaXQgIT0gcGF0aHNFbmQ7ICsraXQp
IHsKLSAgICAgICAgYXV0byBsYXN0TW9kaWZpZWRUaW1lID0gRmlsZVN5c3RlbTo6ZmlsZU1vZGlm
aWNhdGlvblRpbWUoKml0KTsKLSAgICAgICAgaWYgKCFsYXN0TW9kaWZpZWRUaW1lKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQgPSBsYXN0TW9kaWZp
ZWRUaW1lLT5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHNBczx0aW1lX3Q+KCk7Ci0KLSAgICAg
ICAgcGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICAvLyBJ
ZiB0aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1l
IHdlIHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCi0gICAgICAg
IGlmIChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5n
ZXQoKml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBhY2thZ2UgPSBtX3BsdWdpbnNCeVBhdGgu
Z2V0KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVz
IHx8IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9IGxhc3RNb2RpZmllZCk7Ci0gICAgICAg
ICAgICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRv
IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVk
KTsKLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgYWRkKHBhY2thZ2UucmVsZWFzZU5vbk51bGwoKSkp
Ci0gICAgICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBD
YWNoZSBhbGwgdGhlIHBhdGhzIHdlIGZvdW5kIHdpdGggdGhlaXIgdGltZXN0YW1wcyBmb3IgbmV4
dCB0aW1lLgotICAgIHBhdGhzV2l0aFRpbWVzLnN3YXAobV9wbHVnaW5QYXRoc1dpdGhUaW1lcyk7
Ci0KLSAgICBpZiAoIXBsdWdpblNldENoYW5nZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgdXBkYXRlUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotCi0gICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNsZWFyKCk7Ci0KLSAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKLSAgICBh
dXRvIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCi0g
ICAgICAgIGF1dG8gbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7
Ci0gICAgICAgIGF1dG8gbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQo
KTsKLSAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkKLSAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1WZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNl
OjpwbHVnaW5zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsK
LQotICAgIGF1dG8gZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
KCppdCkuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IFBsdWdpbkRhdGFi
YXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
Ci17Ci0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQSA9ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNr
YWdlKiBjb25zdCo+KGEpOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkIgPSAqc3RhdGljX2Nh
c3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihiKTsKLQotICAgIHJldHVybiBwbHVnaW5BLT5jb21w
YXJlKCpwbHVnaW5CKTsKLX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQbHVnaW5QYWNrYWdl
KiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KG1pbWVUeXBlKTsKLSAg
ICBpZiAocHJlZmVycmVkUGx1Z2luCi0gICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFi
bGVkKCkKLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5j
b250YWlucyhtaW1lVHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0KLSAg
ICBhdXRvIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBs
dWdpbiA9ICgqaXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1Z2luLT5pc0VuYWJsZWQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwbHVnaW4tPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2lu
TG9hZGVkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLSAgICAgICAgICAg
IHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcXNv
cnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgpLCBzaXplb2YoUGx1
Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk7Ci0K
LSAgICByZXR1cm4gcGx1Z2luQ2hvaWNlc1swXTsKLX0KLQotU3RyaW5nIFBsdWdpbkRhdGFiYXNl
OjpNSU1FVHlwZUZvckV4dGVuc2lvbihTdHJpbmdWaWV3IGV4dGVuc2lvbikgY29uc3QKLXsKLSAg
ICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgYXV0byBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG1pbWVUeXBlOwotICAg
IFZlY3RvcjxQbHVnaW5QYWNrYWdlKiwgMj4gcGx1Z2luQ2hvaWNlczsKLSAgICBIYXNoTWFwPFBs
dWdpblBhY2thZ2UqLCBTdHJpbmc+IG1pbWVUeXBlRm9yUGx1Z2luOwotCi0gICAgZm9yIChhdXRv
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAo
ISgqaXQpLT5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1
dG8gbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAg
IGZvciAoYXV0byBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBt
aW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0g
bWltZV9pdC0+a2V5OwotICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2lu
ID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAgICAgICAg
Ym9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyB7IGV4dGVuc2lvbnNbaV0gfSwgZXh0ZW5z
aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0
KS5nZXQoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZmVycmVkUGx1Z2luICYmIFBs
dWdpblBhY2thZ2U6OmVxdWFsKCpwbHVnaW4sICpwcmVmZXJyZWRQbHVnaW4pKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVu
c3VyZVBsdWdpbkxvYWRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsK
LSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGVGb3JQbHVnaW4uYWRkKHBsdWdpbiwgbWltZVR5
cGUpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcHBpbmcgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZm91bmRNYXBwaW5nKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2ljZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2lu
Q2hvaWNlcy5zaXplKCksIHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpw
cmVmZXJyZWRQbHVnaW5Db21wYXJlKTsKLQotICAgIHJldHVybiBtaW1lVHlwZUZvclBsdWdpbi5n
ZXQocGx1Z2luQ2hvaWNlc1swXSk7Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNl
OjpmaW5kUGx1Z2luKGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlm
ICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGx1Z2luRm9yTUlNRVR5cGUo
bWltZVR5cGUpOwotICAgIAotICAgIGF1dG8gZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25l
bnQoKTsKLSAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgYXV0byBkb3RQb3NpdGlvbiA9IGZpbGVuYW1lLnJldmVyc2VGaW5k
KCcuJyk7Ci0gICAgaWYgKGRvdFBvc2l0aW9uID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24gPSBNSU1FVHlw
ZUZvckV4dGVuc2lvbihmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zaXRpb24gKyAxKSk7Ci0gICAg
UGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGVGb3JFeHRl
bnNpb24pOwotICAgIGlmICghcGx1Z2luKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJZiBubyBwbHVn
aW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBNSU1FIHR5cGUgY29ycmVz
cG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0gICAgCi0gICAgbWltZVR5cGUgPSBtaW1lVHlwZUZvckV4dGVuc2lvbjsKLSAgICByZXR1cm4g
cGx1Z2luOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCi17
Ci0gICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMo
bWltZVR5cGUpKQotICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLCBwbHVn
aW4pOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxl
ZChjb25zdCBTdHJpbmcmIGZpbGVQYXRoKSBjb25zdAotewotICAgIC8vIFNraXAgcGx1Z2luIGZp
bGVzIHRoYXQgYXJlIGRpc2FibGVkIGJ5IGZpbGVuYW1lLgotICAgIGlmIChtX2Rpc2FibGVkUGx1
Z2luRmlsZXMuY29udGFpbnMoRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKGZpbGVQYXRoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KGZpbGVQYXRoKTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0RGVsZXRlZFBsdWdpbnMo
UGx1Z2luU2V0JiBwbHVnaW5zKSBjb25zdAotewotICAgIGF1dG8gZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgoKml0KS0+cGF0
aCgpKSkKLSAgICAgICAgICAgIHBsdWdpbnMuYWRkKCppdCk7Ci0gICAgfQotfQotCi1ib29sIFBs
dWdpbkRhdGFiYXNlOjphZGQoUmVmPFBsdWdpblBhY2thZ2U+JiYgcGFja2FnZSkKLXsKLSAgICBp
ZiAoIW1fcGx1Z2lucy5hZGQocGFja2FnZS5jb3B5UmVmKCkpLmlzTmV3RW50cnkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgp
LCBwYWNrYWdlLmNvcHlSZWYoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2lu
RGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBwYWNrYWdlKQotewotICAgIGF1dG8gaXQg
PSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKLSAgICBhdXRvIGVuZCA9IHBh
Y2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKLSAgICBmb3IgKCA7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBhdXRvIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5m
aW5kKGl0LT5rZXkpOwotICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1
Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCi0gICAgICAgICAg
ICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7Ci0gICAgfQotCi0gICAg
bV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKLSAgICBtX3BsdWdpbnNCeVBhdGgucmVtb3ZlKHBh
Y2thZ2UtPnBhdGgoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKLXsKLSAg
ICBtX3BsdWdpbnMuY2xlYXIoKTsKLSAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsKLSAgICBt
X3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7Ci0gICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNsZWFyKCk7Ci0gICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlSXNMb2FkZWQgPSBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpy
ZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsKLSAgICBy
ZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Ci19Ci0KLWJvb2wg
UGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKQotewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5p
c05ld0VudHJ5OwotfQotCi0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0vLyBG
b3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVk
Ci0vLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUg
Y29uc3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhl
cmUgdW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVs
dFBsdWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLQotICAg
IC8vIERlZmF1bHQgcGx1Z2luIGRpcmVjdG9yeSBpczogJUFwcERhdGElXE1vemlsbGFccGx1Z2lu
cy4KLSAgICBwYXRocy5hcHBlbmQoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
cyhGaWxlU3lzdGVtOjpyb2FtaW5nVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpLCB7ICJN
b3ppbGxhIiwgInBsdWdpbnMiIH0pKTsKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIFN0cmluZyBwcmVmZXJyZWRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50cyhGaWxlU3lzdGVtOjpyb2FtaW5nVXNlclNwZWNpZmljU3RvcmFnZURp
cmVjdG9yeSgpLCB7ICJNb3ppbGxhIiwgInBsdWdpbnMiIH0pOwotCi0gICAgLy8gVE9ETzogV2Ug
c2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBjb21wYXJpc29uLgotICAg
IHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6
OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0
LgotICAgIGZvciAoYXV0byYgcGx1Z2luRGlyZWN0b3J5IDogbV9wbHVnaW5EaXJlY3Rvcmllcykg
ewotICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbk5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0
b3J5KHBsdWdpbkRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGF1dG8gcGx1Z2luUGF0aCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwbHVnaW5EaXJlY3RvcnksIHBsdWdp
bk5hbWUpOwotICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChwbHVn
aW5QYXRoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMu
YWRkKHBsdWdpblBhdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gIUVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRB
REFUQV9DQUNIRSkKLQotc3RhdGljIHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIp
Ci17Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwotICAgIHNpemVfdCBidWZmZXJDYXBhY2l0
eSA9IDEwMjQ7Ci0gICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0KLSAgICBkbyB7
Ci0gICAgICAgIGJ1ZmZlclNpemUgKz0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGUsIGJ1
ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUpOwot
ICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgewotICAgICAgICAgICAg
aWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hl
U2l6ZSkgewotICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9IHdoaWxlICh0cnVlKTsKLQotICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZSk7Ci19Ci0K
LXN0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3RyaW5nLCBjaGFyKiYg
c3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0KTsKLSAgICByZXN1
bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOwotICAgIHN0YXJ0ICs9IGxl
biArIDE7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgcmVhZFRpbWUodGlt
ZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBp
ZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVkLgotICAgIG1lbWNw
eSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKLSAgICBzdGFydCArPSBzaXpl
b2YodGltZV90KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jb25zdGV4cHIgY2hhciBzY2hl
bWFWZXJzaW9uID0gJzEnOwotY29uc3RleHByIGNoYXIgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRh
Q2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUuYmluIjsKLQotdm9pZCBQbHVn
aW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKLXsKLSAgICBpZiAoIWlz
UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWxlU3lzdGVtOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKLSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOwotICAgIGZp
bGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgRmlsZVN5c3RlbTo6
RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLQotICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxp
ZChmaWxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayBjYWNoZSBhcyBsb2FkZWQg
cmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmUuIElmCi0gICAgLy8gdGhlcmUncyBlcnJv
ciBpbiB0aGUgY2FjaGUsIHdlIHdvbid0IHRyeSB0byBsb2FkIGl0IGFueW1vcmUuCi0gICAgbV9w
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxjaGFy
PiBmaWxlQ29udGVudHM7Ci0gICAgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlLCBm
aWxlQ29udGVudHMpOwotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShmaWxlKTsKLQotICAgIGlm
IChmaWxlQ29udGVudHMuc2l6ZSgpIDwgMiB8fCBmaWxlQ29udGVudHMuZmlyc3QoKSAhPSBzY2hl
bWFWZXJzaW9uIHx8IGZpbGVDb250ZW50cy5sYXN0KCkgIT0gJ1wwJykgewotICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBzY2hl
bWEiKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyKiBidWZmZXJQb3MgPSBmaWxlQ29u
dGVudHMuZGF0YSgpICsgMTsKLSAgICBjaGFyKiBlbmQgPSBmaWxlQ29udGVudHMuZGF0YSgpICsg
ZmlsZUNvbnRlbnRzLnNpemUoKTsKLQotICAgIFBsdWdpblNldCBjYWNoZWRQbHVnaW5zOwotICAg
IEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBjYWNoZWRQbHVnaW5zQnlQ
YXRoOwotCi0gICAgd2hpbGUgKGJ1ZmZlclBvcyA8IGVuZCkgewotICAgICAgICBTdHJpbmcgcGF0
aDsKLSAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZDsKLSAgICAgICAgU3RyaW5nIG5hbWU7Ci0g
ICAgICAgIFN0cmluZyBkZXNjOwotICAgICAgICBTdHJpbmcgbWltZURlc2M7Ci0gICAgICAgIGlm
ICghKHJlYWRVVEY4U3RyaW5nKHBhdGgsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAgICAm
JiByZWFkVGltZShsYXN0TW9kaWZpZWQsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAgICAm
JiByZWFkVVRGOFN0cmluZyhuYW1lLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYg
cmVhZFVURjhTdHJpbmcoZGVzYywgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAgICAgICYmIHJl
YWRVVEY4U3RyaW5nKG1pbWVEZXNjLCBidWZmZXJQb3MsIGVuZCkpKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBk
YXRhIik7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQ
YXRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNraXAg
bWV0YWRhdGEgdGhhdCBwb2ludHMgdG8gcGx1Z2lucyBmcm9tIGRpcmVjdG9yaWVzIHRoYXQKLSAg
ICAgICAgLy8gYXJlIG5vdCBwYXJ0IG9mIHBsdWdpbiBkaXJlY3RvcnkgbGlzdCBhbnltb3JlLgot
ICAgICAgICBTdHJpbmcgcGx1Z2luRGlyZWN0b3J5TmFtZSA9IEZpbGVTeXN0ZW06OnBhcmVudFBh
dGgocGF0aCk7Ci0gICAgICAgIGlmIChtX3BsdWdpbkRpcmVjdG9yaWVzLmZpbmQocGx1Z2luRGly
ZWN0b3J5TmFtZSkgPT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGF1dG8gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2Fj
aGUocGF0aCwgbGFzdE1vZGlmaWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7Ci0KLSAgICAgICAg
aWYgKGNhY2hlZFBsdWdpbnMuYWRkKHBhY2thZ2UuY29weVJlZigpKS5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgICAgICBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lcy5hZGQocGFja2FnZS0+cGF0aCgp
LCBwYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSk7Ci0gICAgICAgICAgICBjYWNoZWRQbHVnaW5zQnlQ
YXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9wbHVnaW5zLnN3YXAoY2FjaGVkUGx1Z2lucyk7Ci0gICAgbV9wbHVnaW5zQnlQYXRoLnN3
YXAoY2FjaGVkUGx1Z2luc0J5UGF0aCk7Ci0gICAgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5zd2Fw
KGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzKTsKLX0KLQotc3RhdGljIGJvb2wgd3JpdGVVVEY4
U3RyaW5nKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKLXsKLSAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwotICAg
IGludCBsZW5ndGggPSB1dGY4U3RyaW5nLmxlbmd0aCgpICsgMTsKLSAgICByZXR1cm4gRmlsZVN5
c3RlbTo6d3JpdGVUb0ZpbGUoZmlsZSwgdXRmOFN0cmluZy5kYXRhKCksIGxlbmd0aCkgPT0gbGVu
Z3RoOwotfQotCi1zdGF0aWMgYm9vbCB3cml0ZVRpbWUoRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGUsIGNvbnN0IHRpbWVfdCYgdGltZSkKLXsKLSAgICByZXR1cm4gRmlsZVN5c3Rl
bTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJnRpbWUp
LCBzaXplb2YodGltZV90KSkgPT0gc2l6ZW9mKHRpbWVfdCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0
YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKLXsKLSAgICBpZiAoIWlzUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWxlU3lzdGVtOjptYWtl
QWxsRGlyZWN0b3JpZXMocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkpOwotICAgIFN0cmlu
ZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRh
Q2FjaGVGaWxlbmFtZSk7Ci0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hl
UGF0aCk7Ci0KLSAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGU7Ci0gICAgZmlsZSA9IEZp
bGVTeXN0ZW06Om9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Bl
bk1vZGU6OldyaXRlKTsKLQotICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxl
KSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBsdWdpbiBtZXRhZGF0YSBj
YWNoZSBmb3Igc2F2aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyIGxv
Y2FsU2NoZW1hVmVyc2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYgKEZpbGVTeXN0ZW06Ondy
aXRlVG9GaWxlKGZpbGUsICZsb2NhbFNjaGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVtYSIp
OwotICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoISh3cml0
ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVU
aW1lKGZpbGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVV
VEY4U3RyaW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRG
OFN0cmluZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgICAgJiYgd3Jp
dGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURlc2NyaXB0aW9uKCkpKSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIHRvIGNh
Y2hlIik7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShmaWxlKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZUVuYWJsZWQoKQotewotICAgIHJldHVybiBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2Fj
aGVJc0VuYWJsZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBnUGVyc2lzdGVudFBsdWdp
bk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0KLVN0cmluZyBQbHVnaW5E
YXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcm
IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJDb3JlOjpwZXJzaXN0ZW50
UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aDsK
LX0KLQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1Bs
dWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcyNDk5YmJk
OTAyNGI5OWZmN2Y1ZWI2MWE4MzBmNzAzYjk3ZTUwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICB0eXBlZGVmIEhhc2hT
ZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaCwgUGx1Z2luUGFja2Fn
ZUhhc2hUcmFpdHM+IFBsdWdpblNldDsKLQotICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luRGF0YWJhc2UpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkRhdGFiYXNlKCk7Ci0KLSAg
ICAgICAgLy8gVGhlIGZpcnN0IGNhbGwgdG8gaW5zdGFsbGVkUGx1Z2lucyBjcmVhdGVzIHRoZSBw
bHVnaW4gZGF0YWJhc2UKLSAgICAgICAgLy8gYW5kIGJ5IGRlZmF1bHQgcG9wdWxhdGVzIGl0IHdp
dGggdGhlIHBsdWdpbnMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCi0gICAgICAgIC8vIEZvciB0
ZXN0aW5nIHB1cnBvc2VzLCBpdCBpcyBwb3NzaWJsZSB0byBub3QgcG9wdWxhdGUgdGhlIGRhdGFi
YXNlCi0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFzIHRoZSBwbHVnaW5zIG1pZ2h0IGFmZmVj
dCB0aGUgRFJUIHJlc3VsdHMgYnkKLSAgICAgICAgLy8gd3JpdGluZyB0byBhLm8uIHN0ZGVyci4K
LSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9w
dWxhdGUgPSB0cnVlKTsKLQotICAgICAgICBib29sIHJlZnJlc2goKTsKLSAgICAgICAgdm9pZCBj
bGVhcigpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsK
LSAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKLSAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsK
LQotICAgICAgICBzdGF0aWMgYm9vbCBpc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeSk7Ci0gICAgICAgIHN0YXRpYyBpbnQgcHJlZmVycmVkUGx1Z2luQ29t
cGFyZShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2Uq
IGZpbmRQbHVnaW4oY29uc3QgVVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAg
ICAgICB2b2lkIHNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbik7Ci0KLSAgICAgICAgdm9pZCBzZXRQbHVnaW5E
aXJlY3Rvcmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BsdWdpbkRpcmVjdG9yaWVzID0g
ZGlyZWN0b3JpZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlbW92ZURpc2FibGVkUGx1
Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICAgICAgYm9vbCBhZGREaXNhYmxl
ZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7Ci0gICAgICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKTsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gcGx1Z2luRGlyZWN0b3JpZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkRpcmVjdG9y
aWVzOyB9Ci0KLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFN0cmluZ1ZpZXcg
ZXh0ZW5zaW9uKSBjb25zdDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCi0gICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFi
bGVkKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5h
YmxlZChib29sIGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7
Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRp
cmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldERlbGV0
ZWRQbHVnaW5zKFBsdWdpblNldCYpIGNvbnN0OwotICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJ
c05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgICAgIC8vIFJldHVybnMg
d2hldGhlciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJl
IGFkZGVkIGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KLSAgICAg
ICAgYm9vbCBhZGQoUmVmPFBsdWdpblBhY2thZ2U+JiYpOwotICAgICAgICB2b2lkIHJlbW92ZShQ
bHVnaW5QYWNrYWdlKik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNI
RSkKLSAgICAgICAgdm9pZCBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwotI2VuZGlmCi0KLSAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fZGlzYWJsZWRQbHVnaW5GaWxlczsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9wbHVnaW5EaXJlY3RvcmllczsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVn
aXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKLSAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsK
LSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsK
LSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBtX3ByZWZlcnJlZFBsdWdpbnM7Ci0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgYm9vbCBtX3BlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlSXNMb2FkZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyNzA4
MWNhYzlhN2QwOGU3YmYxNjcwMzU5N2I4NGYzYTA5Nzc5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KLSNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5
LCBIYXNoU2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQg
cmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lu
cyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAh
PSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4
XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5
cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBX
VEZfQVJSQVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtl
eSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNpemUg
PSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVzdWx0
ID0gZ2V0UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0aCIsICZ0eXBlLCBwYXRoU3RyLCAm
cGF0aFN0clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlw
ZSAhPSBSRUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hZGQo
U3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLSAgICB9
Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMo
SGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVl
RmlsZW5hbWVzOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0g
ICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBTdHJpbmcgb2xkV01QUGx1
Z2luUGF0aDsKLSAgICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsKLQotICAgIGZvciAoYXV0byYg
ZGlyZWN0b3J5IDogbV9wbHVnaW5EaXJlY3RvcmllcykgewotICAgICAgICBTdHJpbmcgcGF0dGVy
biA9IGRpcmVjdG9yeSArICJcXCoiOwotCi0gICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVco
cGF0dGVybi53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7Ci0KLSAgICAg
ICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVB
dHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUoZmluZEZpbGVEYXRhLmNGaWxl
TmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKLSAgICAgICAgICAgIGlmICgh
KHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlsZW5hbWUsICJucCIpICYmIGZp
bGVuYW1lLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoImRsbCIpKQotICAgICAgICAgICAgICAg
ICYmICEoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlsZW5hbWUsICJwbHVnaW4uZGxs
IikgJiYgZGlyZWN0b3J5LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoInNob2Nrd2F2ZSAxMCIp
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZ1bGxQ
YXRoID0gZGlyZWN0b3J5ICsgIlxcIiArIGZpbGVuYW1lOwotICAgICAgICAgICAgaWYgKCF1bmlx
dWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOwotCi0gICAgICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlsZW5hbWUsICJucGRzcGxheS5k
bGwiKSkKLSAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmaWxlbmFtZSwg
Im5wLW1zd21wLmRsbCIpKQotICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxs
UGF0aDsKLQotICAgICAgICB9IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVE
YXRhKSAhPSAwKTsKLQotICAgICAgICBGaW5kQ2xvc2UoaEZpbmQpOwotICAgIH0KLQotICAgIGFk
ZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOwotICAg
IGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7Ci0K
LSAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGlu
IHRoZSBwbHVnaW5zIHNldCwgCi0gICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRv
bid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KLSAgICBpZiAoIW9sZFdNUFBsdWdpblBh
dGguaXNFbXB0eSgpICYmICFuZXdXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcGF0
aHMucmVtb3ZlKG9sZFdNUFBsdWdpblBhdGgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUg
VmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmlu
ZykKLXsKLSAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOwotCi0gICAgdW5zaWduZWQgc3RhcnRQb3Mg
PSAwOwotICAgIHVuc2lnbmVkIGVuZFBvczsKLSAgICAKLSAgICB3aGlsZSAoc3RhcnRQb3MgPCB2
ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7
IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQotICAgICAgICAgICAg
aWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3Nd
ID09ICdfJykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmVyc2lvbi5hcHBlbmQo
cGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50PihTdHJpbmdWaWV3IHsgdmVyc2lv
blN0cmluZyB9LnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpKS52YWx1ZV9v
cigwKSk7Ci0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmVyc2lvbjsKLX0KLQotLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGln
aGVyIHRoYW4gdmVyc2lvbkIKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29u
c3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY29tZSBo
ZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4g
ZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8
U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBs
dWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKLSAgICBIS0VZIGtleTsKLSAgICBMT05H
IHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdDSEFSIG5hbWVbMTI4XTsK
LSAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIC8vIEVudW1lcmF0ZSBz
dWJrZXlzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgICAgICBEV09S
RCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxh
c3RNb2RpZmllZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQ
YXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7Ci0gICAgICAgICAg
ICBIS0VZIGV4dGVuc2lvbnNLZXk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBr
ZXkKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRo
LndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOwot
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAg
ICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgIFdD
SEFSIHBsdWdpbnNEaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgICAgICAgICBEV09S
RCBwbHVnaW5zRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKLSAg
ICAgICAgICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVn
UXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChM
UEJZVEUpJnBsdWdpbnNEaXJlY3RvcnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdf
U1opCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2lu
c0RpcmVjdG9yeVN0ciwgcGx1Z2luc0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkp
OwotCi0gICAgICAgICAgICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICAvLyBUaGUgbmV3
IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0
IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKLSAgICBXQ0hBUiBwbHVnaW5EaXJlY3Rv
cnlTdHJbX01BWF9QQVRIICsgMV07Ci0gICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6
RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBs
dWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVj
dG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRp
cmVjdG9yeVNpemUgPD0gV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQotICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2lu
RGlyZWN0b3J5U2l6ZSAtIDEpKTsKLQotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgRFdPUkQgaW5zdGFsbGF0aW9uRGly
ZWN0b3J5U2l6ZSA9IHNpemVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOwotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0
d2FyZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIs
ICZ0eXBlLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdf
U1opCi0gICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShW
ZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2Fy
ZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAo
cmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG5h
bWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICBWZWN0b3I8aW50PiBs
YXRlc3RBY3JvYmF0VmVyc2lvbjsKLSAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJp
bmc7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsr
KSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIp
OwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4s
IDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1Jf
U1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9i
YXRWZXJzaW9uID0gcGFyc2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7Ci0g
ICAgICAgIGlmIChjb21wYXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRW
ZXJzaW9uKSkgewotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVy
c2lvbjsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5h
bWUsIG5hbWVMZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFsYXRlc3RBY3JvYmF0
VmVyc2lvblN0cmluZy5pc051bGwoKSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBX
Q0hBUiBhY3JvYmF0SW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgYWNy
b2JhdEluc3RhbGxQYXRoU2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOwotCi0g
ICAgICAgIFN0cmluZyBhY3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFj
cm9iYXQgUmVhZGVyXFwiICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxs
UGF0aCI7Ci0gICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBhY3JvYmF0UGx1Z2luS2V5UGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgMCwgJnR5
cGUsIGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOwotCi0g
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgU3RyaW5n
IGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
Ci0gICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi1zdGF0aWMg
aW5saW5lIFN0cmluZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKLXsKLSAgICBXQ0hBUiBtb2R1
bGVGaWxlTmFtZVN0cltfTUFYX1BBVEhdOwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVj
dG9yeTsKLSAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKLQot
ICAgIGlmICghY2FjaGVkUGx1Z2luRGlyZWN0b3J5KSB7Ci0gICAgICAgIGNhY2hlZFBsdWdpbkRp
cmVjdG9yeSA9IHRydWU7Ci0KLSAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9k
dWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7Ci0KLSAgICAgICAg
aWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgp
Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNw
ZWMobW9kdWxlRmlsZU5hbWVTdHIpKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAg
IHBsdWdpbnNEaXJlY3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lu
cyI7Ci0gICAgfQotZXhpdDoKLSAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3Ry
aW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9Q
QVRIXTsKLQotICAgIGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwg
V1RGX0FSUkFZX0xFTkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0NIQVIgbWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBQYXRo
Q29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQo
Im1hY3JvbWVkXFxGbGFzaCIpKTsKLSAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURp
cmVjdG9yeVN0cik7Ci0KLSAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBz
eXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7Ci0gICAg
ZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotfQotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6
ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3Rv
cmllczsKLSAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
OwotCi0gICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAgIGRpcmVjdG9yaWVz
LmFwcGVuZChvdXJEaXJlY3RvcnkpOwotICAgIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9y
eShkaXJlY3Rvcmllcyk7Ci0gICAgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKGRpcmVjdG9y
aWVzKTsKLSAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3RvcnkoZGlyZWN0b3Jp
ZXMpOwotICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7Ci0K
LSAgICByZXR1cm4gZGlyZWN0b3JpZXM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQotewotICAgIFN0
cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCk7Ci0KLSAgICBpZiAo
IW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5z
L1BsdWdpbkRlYnVnLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2lu
RGVidWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGZmNWU5NDEzMTk1MGMz
ZjRmZWI3Mzc0NjUwMmU3MzQ1YTI2MWQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luRGVi
dWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
IlBsdWdpbkRlYnVnLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lm
ICFMT0dfRElTQUJMRUQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7Ci0gICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAv
KiBOUEVSUl9OT19FUlJPUiAqLwotICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNv
ZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLwotICAgICJJbnZhbGlkIGlu
c3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNF
X0VSUk9SICovCi0gICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9GVU5DVEFCTEVfRVJST1IgKi8KLSAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAv
KiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KLSAgICAiTWVtb3J5IGFsbG9jYXRp
b24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KLSAgICAiUGx1Zy1p
biBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8K
LSAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lO
VkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLwotICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBD
b21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9O
X0VSUk9SICovCi0gICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJf
SU5WQUxJRF9QQVJBTSAqLwotICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJS
X0lOVkFMSURfVVJMICovCi0gICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EICovCi0gICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5Q
RVJSX05PX0RBVEEgKi8KLSAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJS
X1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KLSAgICAiVW5rbm93biBlcnJvciBjb2RlIgotfTsKLQot
Y29uc3QgY2hhciogcHJldHR5TmFtZUZvck5QRXJyb3IoTlBFcnJvciBlcnJvcikKLXsKLSAgICBy
ZXR1cm4gZXJyb3JTdHJpbmdzW2Vycm9yXTsKLX0KLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBO
VmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkg
ewotICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4gIk5QTlZ4RGlzcGxheSI7Ci0gICAgY2Fz
ZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4dEFwcENvbnRleHQiOwotICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZuZXRzY2FwZVdpbmRvdyI7Ci0gICAgY2Fz
ZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1cm4gIk5QTlZqYXZhc2NyaXB0RW5hYmxl
ZEJvb2wiOwotICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOiByZXR1cm4gIk5QTlZhc2RFbmFi
bGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDogcmV0dXJuICJOUE5WaXNPZmZs
aW5lQm9vbCI7Ci0KLSAgICBjYXNlIE5QTlZzZXJ2aWNlTWFuYWdlcjogcmV0dXJuICJOUE5Wc2Vy
dmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZET01FbGVtZW50OiBy
ZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUE5WRE9N
V2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAg
Y2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1cm4gIk5QTlZTdXBwb3J0c1hFbWJlZEJv
b2wgKG5vdCBzdXBwb3J0ZWQpIjsKLQotICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiByZXR1
cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7Ci0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2Jq
ZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3QiOwotICAgIGNhc2UgTlBOVlN1
cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3VwcG9ydHNXaW5kb3dsZXNzIjsKLSAgICBj
YXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAiTlBOVnByaXZhdGVNb2RlQm9vbCI7Ci0K
LSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOwotICAgIH0KLX0KLQotQ1N0
cmluZyBwcmV0dHlOYW1lRm9yTlBQVmFyaWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QUFZwbHVnaW5OYW1lU3Ry
aW5nOiByZXR1cm4gIk5QUFZwbHVnaW5OYW1lU3RyaW5nIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5E
ZXNjcmlwdGlvblN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmciOwot
ICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6IHJldHVybiAiTlBQVnBsdWdpbldpbmRvd0Jv
b2wiOwotICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDogcmV0dXJuICJOUFBWcGx1
Z2luVHJhbnNwYXJlbnRCb29sIjsKLQotICAgIGNhc2UgTlBQVmphdmFDbGFzczogcmV0dXJuICJO
UFBWamF2YUNsYXNzIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luV2luZG93
U2l6ZTogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93U2l6ZSAobm90IHN1cHBvcnRlZCkiOwotICAg
IGNhc2UgTlBQVnBsdWdpblRpbWVySW50ZXJ2YWw6IHJldHVybiAiTlBQVnBsdWdpblRpbWVySW50
ZXJ2YWwgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSW5z
dGFuY2U6IHJldHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZSAobm90IHN1cHBvcnRl
ZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJSUQ6IHJldHVybiAiTlBQVnBsdWdp
blNjcmlwdGFibGVJSUQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZqYXZhc2NyaXB0
UHVzaENhbGxlckJvb2w6IHJldHVybiAiTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbCAobm90
IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbktlZXBMaWJyYXJ5SW5NZW1vcnk6IHJl
dHVybiAiTlBQVnBsdWdpbktlZXBMaWJyYXJ5SW5NZW1vcnkgKG5vdCBzdXBwb3J0ZWQpIjsKLSAg
ICBjYXNlIE5QUFZwbHVnaW5OZWVkc1hFbWJlZDogcmV0dXJuICJOUFBWcGx1Z2luTmVlZHNYRW1i
ZWQgKG5vdCBzdXBwb3J0ZWQpIjsKLQotICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9i
amVjdDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IjsKLQotICAgIGNhc2Ug
TlBQVmZvcm1WYWx1ZTogcmV0dXJuICJOUFBWZm9ybVZhbHVlIChub3Qgc3VwcG9ydGVkKSI7Ci0g
ICAgY2FzZSBOUFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5ZWRCb29sOiByZXR1cm4gIk5QUFZw
bHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKLQotICAgIGNh
c2UgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXM6IHJldHVybiAiTlBQVnBsdWdpbldh
bnRzQWxsTmV0d29ya1N0cmVhbXMiOwotICAgIGNhc2UgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVh
bTogcmV0dXJuICJOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtIjsKLQotICAgIGRlZmF1bHQ6IHJl
dHVybiAiVW5rbm93biB2YXJpYWJsZSI7Ci0gICAgfQotfQotCi1DU3RyaW5nIHByZXR0eU5hbWVG
b3JOUE5VUkxWYXJpYWJsZShOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiByZXR1cm4gIk5QTlVSTFZDb29r
aWUiOwotICAgIGNhc2UgTlBOVVJMVlByb3h5OiByZXR1cm4gIk5QTlVSTFZQcm94eSI7Ci0gICAg
ZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19Ci19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhkYzZiZmU5YzFhN2FhMWE4OTgzOTE5YmZlMTMyZDdjZDVlYjBjNjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBQbHVnaW5EZWJ1Z19oCi0jZGVmaW5lIFBsdWdpbkRlYnVnX2gKLQotI2luY2x1ZGUg
PFdlYkNvcmUvTG9nZ2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19OUEVSUk9S
KGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVz
XG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVt
cyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxl
bXMuXG4iKQotCi0jaWYgIUxPR19ESVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1DU3RyaW5n
IHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1DU3RyaW5n
IHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOwotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUg
dmFyaWFibGUpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhTE9HX0RJ
U0FCTEVECi0KLSNlbmRpZiAvLyBQbHVnaW5EZWJ1Z19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyNjY2YmQ1NDg0Yjg3MTQ5OTEwNzJj
ZTIyNGRkNTJkMDg1MWMyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRT
Y2hlZHVsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXImIFBsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI+IHNjaGVkdWxlcjsKLSAgICByZXR1cm4gc2No
ZWR1bGVyOwotfQotCi1QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyKCkKLSAgICA6IG1fY2FsbFBlbmRpbmcoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVDYWxsKE5QUCBucHAsIE1haW5UaHJlYWRG
dW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7
IG1fcXVldWVNdXRleCB9OwotCi0gICAgQ2FsbFF1ZXVlTWFwOjppdGVyYXRvciBpdCA9IG1fY2Fs
bFF1ZXVlTWFwLmZpbmQobnBwKTsKLSAgICBpZiAoaXQgPT0gbV9jYWxsUXVldWVNYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGl0LT52YWx1ZS5hcHBlbmQoQ2FsbChmdW5jdGlvbiwg
dXNlckRhdGEpKTsKLQotICAgIGlmICghbV9jYWxsUGVuZGluZykgewotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxzKCk7Ci0gICAgICAg
IH0pOwotICAgICAgICBtX2NhbGxQZW5kaW5nID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6cmVnaXN0ZXJQbHVnaW4oTlBQIG5wcCkKLXsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgbV9xdWV1ZU11dGV4IH07Ci0KLSAgICBBU1NFUlQoIW1fY2FsbFF1ZXVl
TWFwLmNvbnRhaW5zKG5wcCkpOwotICAgIG1fY2FsbFF1ZXVlTWFwLnNldChucHAsIERlcXVlPENh
bGw+KCkpOwotfQotCi12b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnVucmVnaXN0ZXJQ
bHVnaW4oTlBQIG5wcCkKLXsKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9xdWV1ZU11dGV4IH07Ci0K
LSAgICBBU1NFUlQobV9jYWxsUXVldWVNYXAuY29udGFpbnMobnBwKSk7Ci0gICAgbV9jYWxsUXVl
dWVNYXAucmVtb3ZlKG5wcCk7Ci19Ci0KLXZvaWQgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6
ZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihOUFAgbnBwLCBjb25zdCBEZXF1ZTxDYWxsPiYgY2FsbHMp
Ci17Ci0gICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHMpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIHBsdWctaW4gaGFzIGJlZW4gZGVzdHJveWVkLgotICAgICAgICB7Ci0gICAgICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9xdWV1ZU11dGV4IH07Ci0gICAgICAgICAgICBpZiAoIW1fY2FsbFF1
ZXVlTWFwLmNvbnRhaW5zKG5wcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FsbC5wZXJmb3JtQ2FsbCgpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyOjpkaXNwYXRjaENhbGxzKCkKLXsKLSAgICBtX3F1ZXVlTXV0ZXgu
bG9jaygpOwotICAgIENhbGxRdWV1ZU1hcCBjb3B5KG1fY2FsbFF1ZXVlTWFwKTsKLQotICAgIC8v
IEVtcHR5IGFsbCB0aGUgcXVldWVzIGluIHRoZSBvcmlnaW5hbCBtYXAKLSAgICBmb3IgKGF1dG8m
IGNhbGwgOiBtX2NhbGxRdWV1ZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgY2FsbC5jbGVhcigpOwot
Ci0gICAgbV9jYWxsUGVuZGluZyA9IGZhbHNlOwotICAgIG1fcXVldWVNdXRleC51bmxvY2soKTsK
LQotICAgIGZvciAoYXV0byYgZW50cnkgOiBjb3B5KQotICAgICAgICBkaXNwYXRjaENhbGxzRm9y
UGx1Z2luKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
NzMxYTY4OWY1YmQ2ZjdhY2YwZWY5NzVlY2MxNjE1NDQ2YzIzZWZmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1Bs
dWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFAgTlBQX3Q7
Ci10eXBlZGVmIE5QUF90KiBOUFA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIHR5cGVkZWYgdm9pZCBNYWluVGhyZWFkRnVuY3Rpb24odm9pZCopOwotCi0gICAgc3RhdGlj
IFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXImIHNjaGVkdWxlcigpOwotCi0gICAgdm9pZCBzY2hl
ZHVsZUNhbGwoTlBQLCBNYWluVGhyZWFkRnVuY3Rpb24qLCB2b2lkKiB1c2VyRGF0YSk7Ci0KLSAg
ICB2b2lkIHJlZ2lzdGVyUGx1Z2luKE5QUCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUGx1Z2luKE5Q
UCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXI+OwotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIoKTsKLSAgICB2b2lk
IGRpc3BhdGNoQ2FsbHMoKTsKLQotICAgIGNsYXNzIENhbGw7Ci0KLSAgICB2b2lkIGRpc3BhdGNo
Q2FsbHNGb3JQbHVnaW4oTlBQLCBjb25zdCBEZXF1ZTxDYWxsPiYgY2FsbHMpOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDxOUFAsIERlcXVlPENhbGw+PiBDYWxsUXVldWVNYXA7Ci0KLSAgICBjbGFzcyBD
YWxsIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENhbGwoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5j
dGlvbiwgdm9pZCogdXNlckRhdGEpCi0gICAgICAgICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24p
Ci0gICAgICAgICAgICAsIG1fdXNlckRhdGEodXNlckRhdGEpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgcGVyZm9ybUNhbGwoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2Z1bmN0aW9uKG1fdXNlckRhdGEpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBNYWluVGhyZWFkRnVuY3Rpb24qIG1fZnVuY3Rpb247Ci0gICAgICAgIHZvaWQqIG1f
dXNlckRhdGE7Ci0gICAgfTsKLQotICAgIGJvb2wgbV9jYWxsUGVuZGluZzsKLSAgICBDYWxsUXVl
dWVNYXAgbV9jYWxsUXVldWVNYXA7Ci0gICAgTG9jayBtX3F1ZXVlTXV0ZXg7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9Q
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vUGx1Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggY2RiZTNhNzNlYmY4NmMzZmVjNWQ2YjlhYmM5NGFiOGZiM2FiZGQ3
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgotCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1lciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBh
bnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFs
bG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9y
IHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28gZ2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Ig
a2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgotLy8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRp
bWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGhyb3R0bGVUaW1lSW50
ZXJ2YWwgeyAxNl9tcyB9OwotCi0vLyBEdXJpbmcgYSBjb250aW51b3VzIHN0cmVhbSBvZiBtZXNz
YWdlcywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3RhdGljIGNvbnN0IFNlY29uZHMgTWVzc2Fn
ZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCB7IDVfbXMgfTsKLQotUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQbHVnaW5WaWV3KiBwbHVnaW5WaWV3
KQotICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCi0gICAgLCBtX2JhY2soMCkKLSAgICAs
IG1fZnJvbnQoMCkKLSAgICAsIG1fbWVzc2FnZVRocm90dGxlVGltZXIoKnRoaXMsICZQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQotewotICAgIC8v
IEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCi0gICAg
ICAgIG1faW5saW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsK
LSAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7Ci0g
ICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKLX0KLQotUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQotewot
ICAgIFBsdWdpbk1lc3NhZ2UqIG5leHQ7Ci0KLSAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3Nh
Z2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0g
bWVzc2FnZS0+bmV4dDsKLSAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotfQot
Ci12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBQbHVnaW5N
ZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7Ci0KLSAgICBtZXNzYWdlLT5oV25k
ID0gaFduZDsKLSAgICBtZXNzYWdlLT5tc2cgPSBtc2c7Ci0gICAgbWVzc2FnZS0+d1BhcmFtID0g
d1BhcmFtOwotICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKLSAgICBtZXNzYWdlLT5uZXh0
ID0gMDsKLQotICAgIGlmIChtX2JhY2spCi0gICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7
Ci0gICAgbV9iYWNrID0gbWVzc2FnZTsKLSAgICBpZiAoIW1fZnJvbnQpCi0gICAgICAgIG1fZnJv
bnQgPSBtZXNzYWdlOwotCi0gICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VE
aXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCi0gICAg
Ly8gZ28gYWhlYWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgotICAgIE1vbm90b25p
Y1RpbWUgY3VycmVudFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICBpZiAoY3VycmVu
dFRpbWUgLSBtX2xhc3RNZXNzYWdlVGltZSA+IE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2
YWwpIHsKLSAgICAgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKLSAgICAgICAgbV9sYXN0TWVz
c2FnZVRpbWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgaWYgKCFtX2Zyb250KQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChtZXNz
YWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOwotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW46OnByb2Nlc3NRdWV1ZWRNZXNzYWdlKCkKLXsKLSAgICBQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlID0gbV9mcm9udDsKLSAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKLSAgICBpZiAobWVz
c2FnZSA9PSBtX2JhY2spCi0gICAgICAgIG1fYmFjayA9IDA7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAvLyBQcm90ZWN0IHRoZSBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1
Y3Rpb24gd2hpbGUgY2FsbGluZyBpdHMgd2luZG93IHByb2MuCi0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzY5MzAyODA+Ci0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QobV9wbHVnaW5WaWV3
KTsKLSAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJvYygpLCBt
ZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2FnZS0+bFBh
cmFtKTsKLSNlbmRpZgotCi0gICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpCi17Ci0g
ICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKLQotICAgIGlmIChtX2Zyb250KQotICAgICAgICBt
X21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChtZXNzYWdlVGhyb3R0bGVUaW1lSW50
ZXJ2YWwpOwotfQotCi1QbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjph
bGxvY2F0ZU1lc3NhZ2UoKQotewotICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgICBp
ZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKLSAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlubGlu
ZU1lc3NhZ2VzOwotICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKLQotICAg
IHJldHVybiBtZXNzYWdlOwotfQotCi1ib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Omlz
SW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQotewotICAgIHJldHVybiBtZXNz
YWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVzc2Fn
ZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQotewotICAgIGlmIChp
c0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKLSAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1fZnJl
ZUlubGluZU1lc3NhZ2VzOwotICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGRlbGV0ZSBtZXNzYWdlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdp
bnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0Yjc5ZmU2MmJmZDg0NTk5YjI0ZGMyZDk1YzY4YzUxZTIxNTAzYzMxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCi0j
ZGVmaW5lIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faAotCi0jaW5jbHVkZSA8V2ViQ29yZS9U
aW1lci5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgUGx1Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKLSAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBIV05EIGhXbmQ7Ci0g
ICAgICAgIFVJTlQgbXNnOwotICAgICAgICBXUEFSQU0gd1BhcmFtOwotICAgICAgICBMUEFSQU0g
bFBhcmFtOwotCi0gICAgICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0OwotICAgIH07Ci0K
LSAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luIHsKLSAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
KTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwg
TFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3Nh
Z2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAg
IFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOwotICAgICAgICBib29sIGlzSW5saW5l
TWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2Fn
ZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQotICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3Nh
Z2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGlu
ZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKLSAgICAgICAgTW9ub3Rv
bmljVGltZSBtX2xhc3RNZXNzYWdlVGltZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMDg1YjcxNjQ5OTI4MTQyY2E2Mjg0MDc1MmI0NWJiNGRlMzg5
MDFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLQotI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29wZS5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9I
ZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9N
SU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OUF9qc29iamVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL2NfdXRpbGl0eS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3J1
bnRpbWVfcm9vdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNrYWdlOjp+UGx1Z2lu
UGFja2FnZSgpCi17Ci0gICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyBy
ZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFs
cmVhZHkgcG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAgICAvLyB0aGUgaGFz
aCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCi0g
ICAgLy8gY291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5s
b2FkIGJlZm9yZSB3ZQotICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJv
YmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9sb2FkQ291bnQpCi0g
ICAgICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAgICAgICAgdW5sb2Fk
KCk7Ci0KLSAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6
OmZyZWVMaWJyYXJ5U29vbigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNB
Y3RpdmUoKSk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQoIW1fbG9hZENvdW50
KTsKLQotICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9p
ZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoKQotewotICAgIEFTU0VSVCht
X21vZHVsZSk7Ci0gICAgLy8gRG8gbm90aGluZyBpZiB0aGUgbW9kdWxlIGdvdCBsb2FkZWQgYWdh
aW4gbWVhbndoaWxlCi0gICAgaWYgKCFtX2xvYWRDb3VudCkgewotICAgICAgICA6OkZyZWVMaWJy
YXJ5KG1fbW9kdWxlKTsKLSAgICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0KLQotCi1pbnQg
UGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNv
bnN0Ci17Ci0gICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNl
cyBmaXJzdC4KLSAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29s
IEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NN
dWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJl
dHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBs
dWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJl
ZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShw
YXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBs
dWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50
RGlyZWN0b3J5KCkpOwotICAgIGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblBy
ZWZlcnJlZERpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5
ID8gLTEgOiAxOwotCi0gICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCks
IGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAg
IHJldHVybiBkaWZmOwotCi0gICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8u
dmVyc2lvbigpKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICBy
ZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5w
YXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFja2FnZTo6UGx1
Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVk
KQotICAgIDogbV9pc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAg
LCBtX2xvYWRDb3VudCgwKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZVZlcnNp
b24oMCkKLSAgICAsIG1fbW9kdWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZp
ZWQpCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVl
TGlicmFyeVRpbWVyRmlyZWQpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9D
QUNIRSkKLSAgICAsIG1faW5mb0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsKLSAgICBtX2Zp
bGVOYW1lID0gRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnRE
aXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0
aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAo
IW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRpZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsK
LSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9s
b2FkQ291bnQpOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1
MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkp
Ci0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywg
YXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkg
b2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdl
IHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVn
aW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3
ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5
IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxp
YnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBl
bmFibGVkOwotfQotCi1SZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRl
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQot
ewotICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdp
blBhY2thZ2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7Ci0KLSAgICBpZiAoIXBhY2thZ2UtPmZldGNo
SW5mbygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBwYWNrYWdlOwot
fQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLVJlZjxQbHVn
aW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRp
b24pCi17Ci0gICAgUmVmPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZigqbmV3IFBs
dWdpblBhY2thZ2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7Ci0gICAgcGFja2FnZS0+bV9uYW1lID0g
bmFtZTsKLSAgICBwYWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgcGFj
a2FnZS0+ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwotICAgIHBhY2th
Z2UtPnNldE1JTUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOwotICAgIHBhY2thZ2UtPm1f
aW5mb0lzRnJvbUNhY2hlID0gdHJ1ZTsKLSAgICByZXR1cm4gcGFja2FnZTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMgdm9pZCBnZXRMaXN0RnJv
bVZhcmlhbnRBcmdzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNv
bnN0IE5QVmFyaWFudCogYXJncywgdW5zaWduZWQgYXJnQ291bnQsIEpTQzo6QmluZGluZ3M6OlJv
b3RPYmplY3QqIHJvb3RPYmplY3QsIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImIGFMaXN0KQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQotICAgICAgICBh
TGlzdC5hcHBlbmQoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNh
bEdsb2JhbE9iamVjdCwgJmFyZ3NbaV0sIHJvb3RPYmplY3QpKTsKLX0KLQotc3RhdGljIGJvb2wg
TlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBPYmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZh
cmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENs
YXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7Ci0gICAgICAgIGlmICghcm9vdE9iamVj
dCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgY3Jhc2ggaW4gRmxhc2ggd2hlbiBldmFsdWF0aW5nIGEg
c2NyaXB0IHRoYXQgZGVzdHJveXMgdGhlCi0gICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRl
c3Ryb3kgaXQgYXN5bmNocm9ub3VzbHkuCi0gICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShp
bnN0YW5jZSk7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IEpT
Qzo6QmluZGluZ3M6OmNvbnZlcnROUFN0cmluZ1RvVVRGMTYocyk7Ci0KLSAgICAgICAgSlNDOjpK
U1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShnbG9iYWxPYmplY3QsIEpTQzo6bWFr
ZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKLQotICAgICAgICBK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChnbG9iYWxPYmplY3QsIHJldHVy
blZhbHVlLCB2YXJpYW50KTsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnZhcmlhbnQp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBw
LCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCog
YXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChv
LT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2Jq
ZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsKLQotICAg
ICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG1ldGhv
ZE5hbWUpOwotICAgICAgICBpZiAoIWktPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSAiZXZhbCIgbWV0aG9kLgotICAg
ICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoImV2YWwiKSkg
ewotICAgICAgICAgICAgaWYgKGFyZ0NvdW50ICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGFyZ3NbMF0udHlwZSAhPSBOUFZhcmlhbnRUeXBlX1N0
cmluZykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
V2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwgbywgY29uc3RfY2FzdDxOUFN0cmluZyo+KCZhcmdz
WzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKTsKLSAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
ID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkJpbmRpbmdzOjppZGVu
dGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkp
OwotICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGZ1bmN0aW9uKTsKLSAg
ICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gSlNDOjpDYWxsRGF0YTo6VHlwZTo6Tm9uZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBv
YmplY3QuCi0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICAg
ICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdzLCBhcmdD
b3VudCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHRW
ID0gSlNDOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgb2Jq
LT5pbXAsIGFyZ0xpc3QpOwotCi0gICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVz
dWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQpOwot
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoby0+X2NsYXNzLT5pbnZva2UpCi0gICAgICAgIHJldHVybiBvLT5fY2xh
c3MtPmludm9rZShvLCBtZXRob2ROYW1lLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKLQotICAg
IFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93c2VyRnVuY3MoKQotewotICAgIG1lbXNldCgm
bV9icm93c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jyb3dzZXJGdW5jcykpOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2VyRnVuY3MpOwotICAgIG1fYnJvd3NlckZ1bmNz
LnZlcnNpb24gPSBOUFZlcnNpb24oKTsKLQotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5Q
Tl9HZXRVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAg
IG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG1fYnJv
d3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Mu
d3JpdGUgPSBOUE5fV3JpdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5Q
Tl9EZXN0cm95U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7
Ci0gICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1m
cmVlID0gTlBOX01lbUZyZWU7Ci0gICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVt
Rmx1c2g7Ci0gICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVn
aW5zOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7
Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5Owot
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFs
aWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFs
aWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5m
b3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZh
RW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBO
UE5fR2V0SmF2YVBlZXI7Ci0gICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0
ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93
c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5bmNjYWxsID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2Fs
bDsKLQotICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVh
c2VWYXJpYW50VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdp
ZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJv
bUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVh
dGVPYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5P
YmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9i
amVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBXZWJDb3JlOjpOUE5fSW52b2tlOwot
ICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7Ci0g
ICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBXZWJDb3JlOjpOUE5fRXZhbHVhdGU7Ci0gICAg
bV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OwotICAgIG1fYnJv
d3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAgbV9icm93c2Vy
RnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1Byb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNz
Lmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0aG9kOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2Vw
dGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9
IF9OUE5fRW51bWVyYXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29u
c3RydWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVl
Rm9yVVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVl
Rm9yVVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9H
ZXRBdXRoZW50aWNhdGlvbkluZm87Ci0KLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRt
ZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLWludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29u
c3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvbikgY29uc3QKLXsKLSAgICAv
LyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhhbiwgZXF1
YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbgotICAgIC8vIHRoZSBwYXNzZWQgdmVyc2lvbgotCi0gICAg
aWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcpCi0g
ICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNvbXBhcmVWZXJzaW9uLm1v
c3RTaWcgPyAxIDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyAhPSBjb21w
YXJlVmVyc2lvbi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5sZWFz
dFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotYm9vbCBQ
bHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQoKQotewotICAgIGlmICghbV9pbmZvSXNG
cm9tQ2FjaGUpCi0gICAgICAgIHJldHVybiBtX2lzTG9hZGVkOwotCi0gICAgbV9xdWlya3MgPSBQ
bHVnaW5RdWlya1NldCgpOwotICAgIG1fbmFtZSA9IFN0cmluZygpOwotICAgIG1fZGVzY3JpcHRp
b24gPSBTdHJpbmcoKTsKLSAgICBtX2Z1bGxNSU1FRGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKLSAg
ICBtX21vZHVsZVZlcnNpb24gPSAwOwotCi0gICAgcmV0dXJuIGZldGNoSW5mbygpOwotfQotI2Vu
ZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1
Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTU0ZWZmNDA0ODdlYzdlMjZh
NWI5MDU2ZTkwMDExZjU3NjNhNTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdl
X2gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybU1vZHVsZS5o
IgotI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFsLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQVNDSUlD
YXNlSW5zZW5zaXRpdmVIYXNoPiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0gICAgY2xhc3MgUGx1
Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBSZWZQdHI8UGx1
Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVf
dCYgbGFzdE1vZGlmaWVkKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQotICAgICAgICBzdGF0aWMgUmVmPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9t
Q2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcm
IG1pbWVEZXNjcmlwdGlvbik7Ci0jZW5kaWYKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KLSAgICAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgICAgIGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9Ci0gICAgICAgIGNvbnN0
IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rv
cnk7IH0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2R1bGU7IH0KLSAgICAgICAgdWludDE2X3QgTlBWZXJzaW9uKCkgY29uc3Q7Ci0gICAgICAgIHRp
bWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RNb2RpZmllZDsgfQotCi0g
ICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KLSAgICAgICAgY29uc3QgTUlN
RVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWlt
ZVRvRXh0ZW5zaW9uczsgfQotCi0gICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICAg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZSYgYik7Ci0KLSAgICAgICAgYm9vbCBsb2FkKCk7Ci0gICAgICAgIHZvaWQgdW5sb2Fk
KCk7Ci0gICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci0KLSAgICAgICAgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQotICAgICAgICB2b2lk
IHNldEVuYWJsZWQoYm9vbCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAm
bV9wbHVnaW5GdW5jczsgfQotI2VuZGlmCi0gICAgICAgIGludCBjb21wYXJlRmlsZVZlcnNpb24o
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJikgY29uc3Q7Ci0gICAgICAgIGludCBjb21wYXJl
KGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdDsKLSAgICAgICAgUGx1Z2luUXVpcmtTZXQgcXVp
cmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWlya3M7IH0KLSAgICAgICAgY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVWZXJzaW9uOyB9
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICBi
b29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOwotICAgICAgICB2b2lkIHNldE1JTUVEZXNjcmlwdGlv
bihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7Ci0gICAgICAgIFN0cmluZyBmdWxsTUlN
RURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsTUlNRURlc2NyaXB0aW9uO30KLSNl
bmRpZgotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgYm9vbCBmZXRjaElu
Zm8oKTsKLSAgICAgICAgYm9vbCBpc1BsdWdpbkZvcmJpZGRlbigpOwotICAgICAgICB2b2lkIGRl
dGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLQotICAgICAgICB2b2lkIGRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKLSAgICAgICAgdm9pZCBpbml0
aWFsaXplQnJvd3NlckZ1bmNzKCk7Ci0KLSAgICAgICAgYm9vbCBtX2lzRW5hYmxlZDsKLSAgICAg
ICAgYm9vbCBtX2lzTG9hZGVkOwotICAgICAgICBpbnQgbV9sb2FkQ291bnQ7Ci0KLSAgICAgICAg
U3RyaW5nIG1fZGVzY3JpcHRpb247Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIFN0
cmluZyBtX2ZpbGVOYW1lOwotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgICAgICBTdHJpbmcg
bV9wYXJlbnREaXJlY3Rvcnk7Ci0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIG1fbW9k
dWxlVmVyc2lvbjsKLQotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNj
cmlwdGlvbnM7Ci0gICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25z
OwotCi0gICAgICAgIFBsYXRmb3JtTW9kdWxlIG1fbW9kdWxlOwotICAgICAgICB0aW1lX3QgbV9s
YXN0TW9kaWZpZWQ7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAg
TlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKLSAgICAgICAgTlBQbHVnaW5GdW5j
cyBtX3BsdWdpbkZ1bmNzOwotICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7
Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigpOwotICAgICAgICB2b2lk
IGZyZWVMaWJyYXJ5VGltZXJGaXJlZCgpOwotICAgICAgICBUaW1lciBtX2ZyZWVMaWJyYXJ5VGlt
ZXI7Ci0KLSAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7Ci0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgU3RyaW5nIG1fZnVsbE1JTUVEZXNj
cmlwdGlvbjsKLSAgICAgICAgYm9vbCBtX2luZm9Jc0Zyb21DYWNoZTsKLSNlbmRpZgotICAgIH07
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgYmVjYXVzZSBQbHVnaW5QYWNr
YWdlSGFzaCBpcyBicm9rZW4gYW5kIG1heSBjb25zaWRlciBrZXlzIHdpdGggZGlmZmVyZW50IGhh
c2hlcyBhcyBlcXVhbC4KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2hUcmFpdHMgOiBIYXNo
VHJhaXRzPFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5pbXVtVGFibGVTaXplID0gNjQ7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbHVnaW5QYWNr
YWdlSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHVpbnRwdHJfdCBr
ZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGtleSktPmhhc2go
KTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZT4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KLQotICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCB1aW50cHRyX3QgYSwgY29uc3QgdWludHB0cl90IGIpIHsgcmV0dXJuIGVx
dWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9jYXN0
PFBsdWdpblBhY2thZ2UqPihiKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGIp
IHsgcmV0dXJuIFBsdWdpblBhY2thZ2U6OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KLSAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YjRhYTg5MTVmNjA4ZWQxYzA3Y2IzYjFk
MTkyODc3YTc5ODdmNTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKLQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5o
PgotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8oY29uc3QgTFBW
T0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQotewotICAgIExQVk9JRCBi
dWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5ndGg7Ci0gICAgU3RyaW5nIHN1YkluZm8gPSAiXFxT
dHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOwotICAgIGJvb2wgcmV0dmFsID0gVmVy
UXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLAotICAgICAgICBzdWJJbmZvLndpZGVDaGFyYWN0
ZXJzKCkuZGF0YSgpLAotICAgICAgICAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAo
IXJldHZhbCB8fCBidWZmZXJMZW5ndGggPT0gMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgLy8gU3VidHJhY3QgMSBmcm9tIHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRy
YWlsaW5nIG51bGwgY2hhcmFjdGVyLgotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxVQ2hhcio+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOwotfQotCi1ib29sIFBsdWdpblBh
Y2thZ2U6OmlzUGx1Z2luRm9yYmlkZGVuKCkKLXsKLSAgICBpZiAobmFtZSgpID09ICJDaXRyaXgg
SUNBIENsaWVudCIpIHsKLSAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4g
cmVxdWlyZXMgYSBNb3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+Lgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJs
aWdodCBQbHVnLUluIikgewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTcz
Nzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAg
ICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJl
cHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2Vy
IHZlcnNpb25zCi0gICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQ
bHVnaW5NaW5SZXF1aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAgICAgICBpZiAo
Y29tcGFyZUZpbGVWZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDE1MjE3OiBN
b3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3Jl
LmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewotICAgICAgICAvLyBC
dWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3VuZGF0aW9uIChXUEYp
IHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBsaWNhdGlvbiBTdGF0
ZSBQbHVnaW4iKSB7Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNjg2MAotICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGljYXRpb24gU3RhdGUg
cGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNvcnJ1cHRpb24uIAot
ICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlhaG9vQXBwU3RhdGVQ
bHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAgICAgICAgaWYgKGNv
bXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKLXsKLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo
IikgewotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVu
VmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAvLyBQcmUgMTAgRmxh
c2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxs
YSB1c2VyIGFnZW50Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJz
aW9uKSA8IDApCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemls
bGFVc2VyQWdlbnQpOwotCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxl
SW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01V
c2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxh
c2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29udGFpbnMoIk1pY3Jv
c29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7Ci0gICAgICAgIC8v
IFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cg
Y2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAgLy8gY2FsbCBTZXRX
aW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCi0gICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgICAg
ICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBs
dWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAgLy8gYW5kIGRvbid0
IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBXTVAgaGFzIGEgbW9k
YWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNhbGwgaXQgb3IKLSAg
ICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2FuIGRlbGl2ZXIgbWVz
c2FnZXMgdG8gb3RoZXIKLSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQgYXQgdGltZXMgd2hl
biB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAvLyBleGFtcGxlLCBk
ZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQpLCBhbmQgdGhlc2UK
LSAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkgPT0g
IlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVn
LWluIikgewotICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2FsbCBO
UFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAg
ICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBsZSBpbnN0YW5jZXMg
YXJlIGNyZWF0ZWQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NzczMDcwPiB0cmFja3Mg
YWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAgICAvLyBidWcgaXMg
Zml4ZWQuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxl
SW5zdGFuY2VzKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6
ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBz
aXplLCBzbwotICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBh
IGNvcnJlY3Qgc2l6ZQotICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCi0gICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1
bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAgLy8gTlBPYmplY3Qg
YW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0
IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAvLyBUaHVzLCB3ZSBk
b24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUg
cGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81
NDg3NzQyPi4KLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQi
KQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQot
ICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkp
IHsKLSAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVs
dGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0gICAgICAgIC8vIEph
dmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJl
ZmVyZW5jZSB0byBvdXIgb25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
b250VW5sb2FkUGx1Z2luKTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9u
IHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1z
Ci0gICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7Ci0gICAgfQotCi0g
ICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7Ci0gICAg
ICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFBy
b2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgotICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vy
c2l2ZWx5KTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGxh
c3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0LCAweDAwMDYwMDAw
KTsKLQotICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFu
IDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgotICAgICAgICAvLyBG
SVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBs
dWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAoY29tcGFyZUZpbGVW
ZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikgPiAwKQotICAgICAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0gICAgfQot
fQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAgRFdPUkQgdmVyc2lv
bkluZm9TaXplLCB6ZXJvSGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJz
aW9uSW5mb1NpemVXKG1fcGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEoKSwgJnplcm9IYW5kbGUp
OwotICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgVmVjdG9yPGNoYXI+IHZlcnNpb25JbmZvRGF0YSh2ZXJzaW9uSW5mb1NpemUpOwotCi0g
ICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKG1fcGF0aC53aWRlQ2hhcmFjdGVycygpLmRhdGEo
KSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZGF0YSgpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbV9uYW1lID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9E
YXRhLmRhdGEoKSwgIlByb2R1Y3ROYW1lIik7Ci0gICAgbV9kZXNjcmlwdGlvbiA9IGdldFZlcnNp
b25JbmZvKHZlcnNpb25JbmZvRGF0YS5kYXRhKCksICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBp
ZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZv
U2l6ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5kYXRhKCksIEwi
XFwiLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNf
RklYRURGSUxFSU5GTykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vZHVsZVZlcnNp
b24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7Ci0gICAgbV9tb2R1bGVWZXJzaW9u
Lm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7Ci0KLSAgICBpZiAoaXNQbHVnaW5Gb3Ji
aWRkZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFN0cmluZz4gdHlw
ZXMgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZGF0YSgpLCAiTUlNRVR5cGUiKS5z
cGxpdCgnfCcpOwotICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbkxpc3RzID0gZ2V0VmVyc2lv
bkluZm8odmVyc2lvbkluZm9EYXRhLmRhdGEoKSwgIkZpbGVFeHRlbnRzIikuc3BsaXQoJ3wnKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnMgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9u
SW5mb0RhdGEuZGF0YSgpLCAiRmlsZU9wZW5OYW1lIikuc3BsaXQoJ3wnKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgewotICAgICAgICBTdHJpbmcg
dHlwZSA9IHR5cGVzW2ldLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0gICAgICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbiA9IGkgPCBkZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ld
IDogIiI7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3Rz
LnNpemUoKSA/IGV4dGVuc2lvbkxpc3RzW2ldIDogIiI7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gZXh0ZW5zaW9uc1ZlY3RvciA9IGV4dGVuc2lvbkxpc3Quc3BsaXQoJywnKTsKLQotICAgICAg
ICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNpb24gbGlzdCB0aGF0IG1heSBiZSBhdCB0aGUgZW5k
IG9mIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcuCi0gICAgICAgIGludCBwb3MgPSBkZXNjcmlwdGlv
bi5maW5kKCIoKiIpOwotICAgICAgICBpZiAocG9zICE9IC0xKSB7Ci0gICAgICAgICAgICAvLyBU
aGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mLgotICAgICAg
ICAgICAgaWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQotICAgICAg
ICAgICAgICAgIHBvcy0tOwotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5s
ZWZ0KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHF1aXJrcyBm
b3IgdGhlIE1JTUUgdHlwZXMgdGhpcyBwbHVnLWluIHN1cHBvcnRzCi0gICAgICAgIGRldGVybWlu
ZVF1aXJrcyh0eXBlKTsKLQotICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKHR5cGUsIGV4
dGVuc2lvbnNWZWN0b3IpOwotICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQodHlwZSwg
ZGVzY3JpcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBsdWdp
blBhY2thZ2U6OmxvYWQoKQotewotICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUo
KSkgewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICBtX2ZyZWVMaWJyYXJ5VGlt
ZXIuc3RvcCgpOwotICAgIH0gZWxzZSBpZiAobV9pc0xvYWRlZCkgewotICAgICAgICBpZiAobV9x
dWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcykpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fbG9hZENvdW50Kys7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01B
WF9QQVRIXTsKLQotICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgs
IGN1cnJlbnRQYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTdHJp
bmcgcGF0aCA9IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsK
LQotICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC53aWRlQ2hhcmFjdGVy
cygpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTG9h
ZCB0aGUgbGlicmFyeQotICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlFeFcobV9wYXRo
LndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFU
SCk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkg
ewotICAgICAgICAgICAgaWYgKG1fbW9kdWxlKQotICAgICAgICAgICAgICAgIDo6RnJlZUxpYnJh
cnkobV9tb2R1bGUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFtX21vZHVsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9p
c0xvYWRlZCA9IHRydWU7Ci0KLSAgICBOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50
cnlQb2ludHMgPSAwOwotICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemUgPSAw
OwotICAgIE5QRXJyb3IgbnBFcnIgPSBOUEVSUl9OT19FUlJPUjsKLQotICAgIE5QX0luaXRpYWxp
emUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9J
bml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNG
dW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBf
U2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsK
LQotICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQ
X1NodXRkb3duKQotI2Vsc2UKLSAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5
UG9pbnRzKQotI2VuZGlmCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3Bs
dWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7Ci0g
ICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikK
LSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQot
ICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOwotICAgIExPR19OUEVS
Uk9SKG5wRXJyKTsKLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAg
Z290byBhYm9ydDsKLSNlbmRpZgotICAgIG1fbG9hZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7
Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Ci17IAotICAgIGNv
bnN0IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNo
KCksCi0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fbWlt
ZVRvRXh0ZW5zaW9ucy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6
aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLX0KLQotYm9vbCBQbHVn
aW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNr
YWdlJiBiKQotewotICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXpl
KCkgIT0gYi5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGVuZCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmVuZCgpLmtleXMoKTsKLSAg
ICBmb3IgKGF1dG8gaXQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5iZWdpbigpLmtleXMoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghYi5tX21pbWVUb0V4dGVuc2lvbnMuY29udGFp
bnMoKml0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEyM2QxMDFkY2I1ZDM4NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgUGx1Z2luUXVpcmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWlya1NldF9oCi0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7Ci0gICAgICAgIFBs
dWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAgICAgICBQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAgICBQbHVnaW5RdWly
a1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdpblF1aXJrUmVtb3Zl
V2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdpblF1aXJrVGhyb3R0
bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBsdWdpblF1aXJrRG9u
dFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFBy
b2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAgICBQbHVnaW5RdWly
a0hhc01vZGFsTWVzc2FnZUxvb3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdpblF1aXJrRmxhc2hV
UkxOb3RpZnlCdWcgPSAxIDw8IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9S
ZWN0V2hlblNjcm9sbGluZyA9IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVs
bFdpbmRvd0hhbmRsZU9uRGVzdHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBsdWdpblF1aXJrRG9u
dEFsbG93TXVsdGlwbGVJbnN0YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQbHVnaW5RdWlya1Jl
cXVpcmVzR3RrVG9vbEtpdCA9IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNE
ZWZhdWx0U2NyZWVuRGVwdGggPSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxs
U2V0V2luZG93TW9yZVRoYW5PbmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1Z2luUXVpcmtJZ25v
cmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAgICAgIFBsdWdpblF1
aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQotICAgIGNsYXNzIFBs
dWdpblF1aXJrU2V0IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgUGx1Z2luUXVpcmtT
ZXQoKSA6IG1fcXVpcmtzKDApIHsgfQotICAgICAgICAgICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsg
cXVpcmspIHsgbV9xdWlya3MgfD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJvb2wgY29udGFpbnMo
UGx1Z2luUXVpcmsgcXVpcmspIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYgcXVpcms7IH0KLSAg
ICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtzOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1aXJrU2V0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1NTY4NDZjOWNjZjYwZGQ3ZDQxN2Y2NzhlM2Y3
ODJlZjRmYmU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgi
Ci0KLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIFdl
IHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGlu
ZGljYXRlIGVycm9yCi0vLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVtLgot
c3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4Owot
dXNpbmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFw
PE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1zKCkK
LXsKLSAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0YXRp
Y1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNs
aWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0
IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1
aXJrU2V0JiBxdWlya3MpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3Qp
Ci0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9u
b3RpZnlEYXRhKG5vdGlmeURhdGEpCi0gICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlm
aWNhdGlvbikKLSAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAgICAs
IG1fbG9hZE1hbnVhbGx5KGZhbHNlKQotICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRoaXMs
ICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1wRmls
ZUhhbmRsZShGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICwgbV9w
bHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCi0gICAg
LCBtX3F1aXJrcyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2UpOwotCi0gICAgbV9z
dHJlYW0udXJsID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ucGRh
dGEgPSAwOwotICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9
IDA7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKLSAgICBtX3N0cmVhbS5oZWFkZXJz
ID0gMDsKLQotICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKLX0KLQot
UGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgIGZhc3RG
cmVlKChjaGFyKiltX3N0cmVhbS51cmwpOwotCi0gICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJl
YW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQotewotICAgIEFTU0VSVCghbV9s
b2FkTWFudWFsbHkpOwotICAgIEFTU0VSVChtX2ZyYW1lKTsKLSAgICB3ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoKm1fZnJhbWUsICp0aGlzLCBSZXNv
dXJjZVJlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3QpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSAoUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
PiYmIGxvYWRlcikgewotICAgICAgICBtX2xvYWRlciA9IFdURk1vdmUobG9hZGVyKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OnN0b3AoKQotewotICAgIG1fc3RyZWFtU3RhdGUg
PSBTdHJlYW1TdG9wcGVkOwotCi0gICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7Ci0gICAgICAgIEFT
U0VSVCghbV9sb2FkZXIpOwotCi0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
ciA9IG1fZnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7Ci0gICAgICAgIEFT
U0VSVChkb2N1bWVudExvYWRlcik7Ci0KLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xv
YWRpbmdNYWluUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxN
YWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRlcigpLmNhbmNlbGxlZEVycm9yKG1fcmVzb3Vy
Y2VSZXF1ZXN0KSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2xvYWRl
cikgewotICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0gICAgICAgIG1fbG9hZGVyID0gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBs
YXN0TW9kaWZpZWREYXRlTVMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0g
ICAgYXV0byBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKLSAgICBpZiAo
IWxhc3RNb2RpZmllZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbGFzdE1vZGlm
aWVkLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHNBczx1aW50MzJfdD4o
KTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKLXsKLSAgICBBU1NFUlQo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKLQotICAgIGNvbnN0IFVSTCYg
cmVzcG9uc2VVUkwgPSBtX3Jlc291cmNlUmVzcG9uc2UudXJsKCk7Ci0KLSAgICAvLyBTb21lIHBs
dWdpbnMgKEZsYXNoKSBleHBlY3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNr
IGRlY29kZWQgYXMgdGhpcyBpcyB0aGUKLSAgICAvLyBmb3JtYXQgdXNlZCB3aGVuIHJlcXVlc3Rp
bmcgdGhlIFVSTC4KLSAgICBpZiAocmVzcG9uc2VVUkwucHJvdG9jb2xJc0phdmFTY3JpcHQoKSkK
LSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2Uu
bWltZVR5cGUoKS51dGY4KCk7Ci0KLSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0gICAgaWYg
KG1fcmVzb3VyY2VSZXNwb25zZS5pc0luSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgU3RyaW5nIHNlcGFyYXRvciA9ICI6ICJfczsK
LQotICAgICAgICBTdHJpbmcgc3RhdHVzTGluZSA9ICJIVFRQICIgKyBTdHJpbmc6Om51bWJlciht
X3Jlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgKyAiIE9LXG4iOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5lKTsKLQotICAgICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpLmVuZCgpOwotICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOwot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1faGVhZGVycyA9IHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQg
aXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMg
bGVuZ3RoIHRvIHRoZSBwbHVnaW4sCi0gICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3Rl
ZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KLSAg
ICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0NzA1OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1b
TlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRlbnRMZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMg
bG9naWMuCi0gICAgICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSBtX3Jlc291cmNlUmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50RW5jb2RpbmcpOwotICAg
ICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250ZW50RW5jb2RpbmcgIT0g
ImlkZW50aXR5IikKLSAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IC0xOwotICAg
IH0KLQotICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0YSgpOwotICAgIG1fc3Ry
ZWFtLnBkYXRhID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7Ci0gICAgbV9zdHJlYW0u
ZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKLSAgICBtX3N0cmVhbS5sYXN0
bW9kaWZpZWQgPSBsYXN0TW9kaWZpZWREYXRlTVMobV9yZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBt
X3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0gICAgbV90cmFuc2Zlck1vZGUg
PSBOUF9OT1JNQUw7Ci0gICAgbV9vZmZzZXQgPSAwOwotICAgIG1fcmVhc29uID0gV2ViUmVhc29u
Tm9uZTsKLQotICAgIC8vIFByb3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNh
bGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhhbmRsZXIKLSAgICBSZWZQdHI8UGx1Z2lu
U3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgLy8gY2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBj
b3VsZCByZXN1bHQgaW4gcmUtZW50cmFuY2UgaWYgdGhlIHBsdWctaW4geWllbGRzCi0gICAgLy8g
Y29udHJvbCB0byB0aGUgc3lzdGVtIChyZGFyOi8vNTc0NDg5OSkuIHByZXZlbnQgdGhpcyBieSBk
ZWZlcnJpbmcgZnVydGhlcgotICAgIC8vIGxvYWRpbmcgd2hpbGUgY2FsbGluZyBpbnRvIHRoZSBw
bHVnLWluLgotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xv
YWRpbmcodHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVh
bShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwg
ZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHN0cmVh
bSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KLSAgICBp
ZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgY2FuY2VsQW5kRGVz
dHJveVN0cmVhbShucEVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0cmVh
bVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9O
T1JNQUwpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5U
ZW1wb3JhcnlGaWxlKCJXS1AiLCBtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAgIC8vIFNvbWV0aGlu
ZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCi0gICAgaWYgKCFGaWxlU3lz
dGVtOjppc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKQotICAgICAgICBjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKLX0KLQotTlBQIFBsdWdpblN0cmVhbTo6
b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gc3RyZWFtcygp
LmdldChzdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6Y2FuY2VsQW5kRGVzdHJveVN0
cmVhbShOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLSAgICBzdG9wKCk7Ci19Ci0K
LXZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKLXsKLSAg
ICBtX3JlYXNvbiA9IHJlYXNvbjsKLSAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkgewot
ICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAotICAg
ICAgICBpZiAobV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVz
aXplKDApOwotICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0cmVh
bWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGRlc3Ryb3lTdHJlYW0oKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lT
dHJlYW0oKQotewotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKLSAg
ICBBU1NFUlQoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCk7
Ci0KLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUobV90ZW1wRmlsZUhhbmRsZSk7Ci0KLSAgICBi
b29sIG5ld1N0cmVhbUNhbGxlZCA9IG1fc3RyZWFtLm5kYXRhOwotCi0gICAgLy8gUHJvdGVjdCBm
cm9tIGRlc3RydWN0aW9uIGlmOgotICAgIC8vICBOUE5fRGVzdHJveVN0cmVhbSBpcyBjYWxsZWQg
ZnJvbSBOUFBfTmV3U3RyZWFtIG9yCi0gICAgLy8gIFBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFt
RGlkRmluaXNoTG9hZGluZygpIHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgUmVmUHRy
PFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChuZXdTdHJlYW1DYWxsZWQp
IHsKLSAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2Rl
ID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOwotCi0gICAgICAgICAgICBpZiAobV9s
b2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7
Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFt
LCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAg
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCkgewot
ICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXRE
ZWZlcnNMb2FkaW5nKHRydWUpOwotCi0gICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVn
aW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsK
LQotICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5z
ZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLQotICAgICAgICAgICAgTE9HX05QRVJST1IobnBFcnIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOwotICAgIH0KLQotICAg
IGlmIChtX3NlbmROb3RpZmljYXRpb24pIHsKLSAgICAgICAgLy8gRmxhc2ggOSBjYW4gZGVyZWZl
cmVuY2UgbnVsbCBpZiB3ZSBjYWxsIE5QUF9VUkxOb3RpZnkgd2l0aG91dCBmaXJzdCBjYWxsaW5n
IE5QUF9OZXdTdHJlYW0KLSAgICAgICAgLy8gZm9yIHJlcXVlc3RzIG1hZGUgd2l0aCBOUE5fUG9z
dFVSTE5vdGlmeTsgc2VlIDxyZGFyOi8vNTU4ODgwNz4KLSAgICAgICAgaWYgKG1fbG9hZGVyKQot
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGlm
ICghbmV3U3RyZWFtQ2FsbGVkICYmIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRmxhc2hV
UkxOb3RpZnlCdWcpICYmCi0gICAgICAgICAgICBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShtX3Jlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCksICJwb3N0IikpIHsKLSAgICAgICAgICAg
IG1fdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOwotICAgICAgICAgICAgbV9zdHJlYW0udXJsID0g
IiI7Ci0gICAgICAgICAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0g
ICAgICAgICAgICBzdGF0aWMgY2hhciBlbXB0eU1pbWVUeXBlW10gPSAiIjsKLSAgICAgICAgICAg
IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCBlbXB0eU1pbWVUeXBlLCAmbV9z
dHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5j
cy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKLQotICAg
ICAgICAgICAgLy8gaW4gc3VjY2Vzc2Z1bCByZXF1ZXN0cywgdGhlIFVSTCBpcyBkeW5hbWljYWxs
eSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGluIG91cgotICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rvciwg
c28gcmVzZXQgaXQgdG8gMAotICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICAgICAg
fQotICAgICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJj
ZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5
RGF0YSk7Ci0gICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5zZXRE
ZWZlcnNMb2FkaW5nKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFt
U3RvcHBlZDsKLQotICAgIGlmICghbV9sb2FkTWFudWFsbHkgJiYgbV9jbGllbnQpCi0gICAgICAg
IG1fY2xpZW50LT5zdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwotCi0gICAgaWYgKCFtX3Bh
dGguaXNOdWxsKCkpCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9wYXRoKTsKLX0K
LQotdm9pZCBQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCkKLXsKLSAgICBk
ZWxpdmVyRGF0YSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEoKQotewot
ICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7Ci0gICAgCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUg
PT0gU3RyZWFtU3RvcHBlZCkKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjYW5jZWwgb3Vy
IGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJyb3Igc28gd2UgZG9uJ3QgcmVhY2gg
dGhpcyBjYXNlCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9
IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgaWYgKCFtX3N0cmVhbS5uZGF0YSB8fCBtX2Rl
bGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGludDMyX3Qg
dG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7Ci0gICAgaW50MzJfdCB0b3RhbEJ5
dGVzRGVsaXZlcmVkID0gMDsKLQotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQg
PCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgIGludDMyX3QgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKLQotICAgICAgICBpZiAo
ZGVsaXZlcnlCeXRlcyA8PSAwKSB7Ci0gICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVz
IC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5ndGgg
PSBkZWxpdmVyeUJ5dGVzOwotICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRh
LT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0ZSB0
aGUgZGF0YQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRl
KG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRh
KTsKLSAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAgICAg
IExPR19QTFVHSU5fTkVUX0VSUk9SKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQot
ICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVs
aXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZl
cmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9hZGVy
KQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBpZiAo
dG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVy
ZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3Rh
bEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWxp
dmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxp
dmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNp
emUocmVtYWluaW5nQnl0ZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kZWxp
dmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFz
b25Ob25lKQotICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQotICAg
IH0gCi19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBV
UkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBkaWRS
ZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFp
biIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0YXRl
ID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0U3Ry
aW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5k
YXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0YXRl
ID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9s
b2FkZXIgPSBudWxscHRyOwotCi0gICAgZGVzdHJveVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxs
KCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6d2lsbFNlbmRSZXF1ZXN0KE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpPiYmIGNhbGxiYWNrKQotewot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90aWZ5IHRoZSBwbHVnLWluIHdpdGggTlBQX1VSTFJl
ZGlyZWN0Tm90aWZ5IGhlcmUuCi0gICAgY2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0K
LXZvaWQgUGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0gICAgQVNTRVJU
KG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBtX3Jlc291cmNl
UmVzcG9uc2UgPSByZXNwb25zZTsKLQotICAgIHN0YXJ0U3RyZWFtKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luU3RyZWFtOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9h
ZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVF9VTlVTRUQo
bG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAgLy8gSWYgdGhlIHBsdWctaW4gY2FuY2VscyB0aGUgc3Ry
ZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAotICAgIC8vIHNvIHByb3Rl
Y3QgaXQgaGVyZS4KLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0g
ICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkpIHsKLSAgICAgICAgaWYgKCFt
X2RlbGl2ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhID0gbWFrZVVuaXF1ZTxW
ZWN0b3I8Y2hhcj4+KCk7Ci0KLSAgICAgICAgaW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+
c2l6ZSgpOwotICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKG9sZFNpemUgKyBsZW5ndGgp
OwotICAgICAgICBtZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEs
IGxlbmd0aCk7Ci0KLSAgICAgICAgZGVsaXZlckRhdGEoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9z
dHJlYW1TdGF0ZSAhPSBTdHJlYW1TdG9wcGVkICYmIEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQo
bV90ZW1wRmlsZUhhbmRsZSkpIHsKLSAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IEZpbGVTeXN0
ZW06OndyaXRlVG9GaWxlKG1fdGVtcEZpbGVIYW5kbGUsIGRhdGEsIGxlbmd0aCk7Ci0gICAgICAg
IGlmIChieXRlc1dyaXR0ZW4gIT0gbGVuZ3RoKQotICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJv
eVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblN0cmVh
bTo6ZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNv
dXJjZUVycm9yJikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9h
ZGVyKTsKLQotICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7Ci0KLSAgICAvLyBkZXN0cm95U3Ry
ZWFtIGNhbiByZXN1bHQgaW4gb3VyIGJlaW5nIGRlbGV0ZWQKLSAgICBSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VS
Uik7Ci0KLSAgICBtX2xvYWRlciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpk
aWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0gICAgQVNTRVJU
KG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7Ci0KLSAgICAvLyBkZXN0cm95U3RyZWFt
IGNhbiByZXN1bHQgaW4gb3VyIGJlaW5nIGRlbGV0ZWQKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFt
PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZGVzdHJveVN0cmVhbShOUFJFU19ET05FKTsKLQotICAg
IG1fbG9hZGVyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBQbHVnaW5TdHJlYW06OndhbnRzQWxsU3Ry
ZWFtcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdm9pZCogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAo
bV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbldhbnRzQWxsTmV0
d29ya1N0cmVhbXMsICZyZXN1bHQpICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gISFyZXN1bHQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0MzFiMzYzMDM2MmM5ZTUyMTExOGRkMDMyNzNhNmNkOWMyOGNjNDY3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
c3BvbnNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
bnBydW50aW1lX2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGcmFt
ZTsKLWNsYXNzIFBsdWdpblN0cmVhbTsKLQotZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVh
bUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKLQotY2xhc3Mg
UGx1Z2luU3RyZWFtQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5QbHVnaW5TdHJlYW1D
bGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVn
aW5TdHJlYW0qKSB7IH0KLX07Ci0KLWNsYXNzIFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2lu
U3RyZWFtQ2xpZW50KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0
IE5QUGx1Z2luRnVuY3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWly
a1NldCYgcXVpcmtzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGx1Z2lu
U3RyZWFtKGNsaWVudCwgZnJhbWUsIHJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURh
dGEsIGZ1bmN0aW9ucywgaW5zdGFuY2UsIHF1aXJrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5Q
bHVnaW5TdHJlYW0oKTsKLSAgICAKLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7
Ci0KLSAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7Ci0KLSAgICB2b2lkIHNldExvYWRNYW51YWxseShi
b29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9IGxvYWRNYW51YWxseTsgfQotCi0g
ICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0
IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKLSAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSZWFzb24pOwotCi0gICAgc3RhdGljIE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVh
bSopOwotCi1wcml2YXRlOgotICAgIFBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqLCBG
cmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyosIE5QUCBpbnN0YW5jZSwgY29uc3Qg
UGx1Z2luUXVpcmtTZXQmKTsKLQotICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKLSAgICB2b2lkIGRl
c3Ryb3lTdHJlYW0oTlBSZWFzb24pOwotICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOwotCi0gICAg
Ly8gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLSAgICB2b2lkIHdpbGxTZW5kUmVx
dWVzdChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRmFp
bChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqKSBvdmVycmlkZTsKLSAgICBib29sIHdhbnRzQWxsU3RyZWFtcygpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwotICAgIFJlc291cmNl
UmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0gICAgUGx1Z2luU3RyZWFtQ2xpZW50KiBt
X2NsaWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXI+IG1fbG9hZGVyOwotICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKLSAgICBib29s
IG1fc2VuZE5vdGlmaWNhdGlvbjsKLSAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRl
OwotICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7Ci0KLSAgICBUaW1lciBtX2RlbGF5RGVsaXZlcnlU
aW1lcjsKLSAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPGNoYXI+PiBtX2RlbGl2ZXJ5RGF0YTsKLQotICAgIEZpbGVTeXN0ZW06
OlBsYXRmb3JtRmlsZUhhbmRsZSBtX3RlbXBGaWxlSGFuZGxlOwotCi0gICAgY29uc3QgTlBQbHVn
aW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAgICBOUFAgbV9pbnN0YW5jZTsKLSAgICB1aW50MTZf
dCBtX3RyYW5zZmVyTW9kZTsKLSAgICBpbnQzMl90IG1fb2Zmc2V0OwotICAgIENTdHJpbmcgbV9o
ZWFkZXJzOwotICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAg
TlBTdHJlYW0gbV9zdHJlYW07Ci0gICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7Ci0KLSAgICBm
cmllbmQgY2xhc3MgUGx1Z2luVmlldzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGM0MDU3ZjZiZWY4M2M4MmNiNzdkYzY3MzQ5ODgxMDg4
MWVkMDcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHaXJp
c2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0j
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0JyaWRnZUpTQy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0VsZW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVudC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JbWFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSlNET01CaW5kaW5nLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTW91c2VFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Byb3h5U2VydmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJCb3guaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29u
dHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGlj
YXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2hlZWxFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvY19pbnN0YW5jZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL3J1bnRpbWVfcm9vdC5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUg
IlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKLSNlbmRpZgotCi11c2luZyBKU0M6OkpTTG9j
azsKLXVzaW5nIEpTQzo6SlNPYmplY3Q7Ci11c2luZyBKU0M6OkpTVmFsdWU7Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwotCi1zdGF0aWMgaW50IHNfY2FsbGluZ1BsdWdpbjsKLQotdHlw
ZWRlZiBIYXNoTWFwPE5QUCwgUGx1Z2luVmlldyo+IEluc3RhbmNlTWFwOwotCi1zdGF0aWMgSW5z
dGFuY2VNYXAmIGluc3RhbmNlTWFwKCkKLXsKLSAgICBzdGF0aWMgSW5zdGFuY2VNYXAmIG1hcCA9
ICpuZXcgSW5zdGFuY2VNYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFN0cmluZyBz
Y3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgaWYgKCF1
cmwucHJvdG9jb2xJc0phdmFTY3JpcHQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgLy8gVGhpcyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKLSAgICByZXR1cm4gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsKLX0KLQotUGx1
Z2luVmlldyogUGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7Ci0KLXZvaWQgUGx1
Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKLXsKLSAgICBwb3BQb3B1cHNFbmFi
bGVkU3RhdGUoKTsKLX0KLQotSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0Ci17Ci0gICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KLSAgICBJbnRS
ZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7Ci0gICAgCi0gICAgLy8gVGFrZSBvdXIgZWxlbWVu
dCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFt
ZSB2aWV3LgotICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS52aWV3KCk7Ci0gICAgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCA9IHBhcmVudFZpZXctPndpbmRv
d0NsaXBSZWN0Rm9yRnJhbWVPd25lcihtX2VsZW1lbnQsIHRydWUpOwotICAgIHdpbmRvd0NsaXBS
ZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdCh3
aW5kb3dDbGlwUmVjdCk7Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cmVjdCAhPSBmcmFtZVJlY3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7
Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotICAgIC8vIE9uIFdpbmRvd3MgYWx3YXlz
IGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KLSAgICBzZXROUFdpbmRvd1JlY3QocmVj
dCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5nZWQoKQotewotICAgIHVw
ZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmNsaXBSZWN0Q2hhbmdl
ZCgpCi17Ci0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRXZlbnQoRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dp
bmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBwbHVnLWluIGZy
b20gZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgotICAgIFJlZlB0cjxQbHVn
aW5WaWV3PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQot
ICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSk7Ci0g
ICAgZWxzZSBpZiAoZXZlbnQuaXNLZXlib2FyZEV2ZW50KCkpCi0gICAgICAgIGhhbmRsZUtleWJv
YXJkRXZlbnQoZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKTsKLSAgICBlbHNlIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpCi0gICAgICAgIGV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4g
aGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUs
IHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLX0KLQotdm9p
ZCBQbHVnaW5WaWV3Ojppbml0KCkKLXsKLSAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGlmICgh
bV9wbHVnaW4pIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5v
dEZpbmRQbHVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyciLCBtX3BsdWdp
bi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7
Ci0gICAgICAgIG1fcGx1Z2luID0gbnVsbHB0cjsKLSAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkpIHsKLSAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCi17Ci0gICAgaWYgKCFtX3BhcmVu
dEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIG9ubHkg
ZGVsYXkgc3RhcnRpbmcgdGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYgdGhl
IGxvYWQKLSAgICAvLyBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0
byBkZWxpdmVyIGRhdGEgYmVmb3JlIHdlJ3ZlCi0gICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4K
LSAgICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0
YXJ0TWVkaWEoKSkgewotICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRp
YUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwotICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0
cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhcnQoKTsK
LX0KLQotYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYgKG1faXNTdGFydGVkKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsK
LQotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1
Z2luKG1faW5zdGFuY2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBBU1NFUlQobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJvciBucEVycjsKLSAgICB7
Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCks
IG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1W
YWx1ZXMsIE5VTEwpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAg
TE9HX05QRVJST1IobnBFcnIpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAg
ICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICBQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1Z2luKG1f
aW5zdGFuY2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9pc1N0YXJ0
ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5
KSB7Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICptX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLCBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLCB7IH0sIHsgfSwgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsKLSAgICAg
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQi
KTsKLSAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91
cmwpOwotICAgICAgICBsb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCksIGZhbHNlLCBudWxs
cHRyKTsKLSAgICB9Ci0KLSAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseTsKLQotICAgIGlmICghcGxhdGZvcm1TdGFydCgpKQotICAgICAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0KLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjptZWRpYUNhblN0YXJ0KERvY3VtZW50
JikKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVkKTsKLSAgICBpZiAoIXN0YXJ0KCkpCi0gICAg
ICAgIHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Jj4ocGFyZW50RnJhbWUoKS0+bG9h
ZGVyKCkuY2xpZW50KCkpLmRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVnaW4oKnRoaXMpOwotfQot
Ci1QbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpIik7Ci0KLSAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5p
c0FjdGl2ZSgpKTsKLQotICAgIC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3
ZSdsbCByZXR1cm4gZWFybHkgaW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKLSAgICAvLyBtX2luc3Rh
bmNlIHdpbGwgYmUgMC4KLSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgaW5zdGFuY2VNYXAo
KS5yZW1vdmUobV9pbnN0YW5jZSk7Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQotICAg
ICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIoKnRoaXMpOwotCi0gICAgc3RvcCgpOwotCi0gICAgaWYgKG1fZWxlbWVudE5QT2JqZWN0KQot
ICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QobV9lbGVtZW50TlBPYmplY3QpOwotICAgIAotICAg
IGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7Ci0gICAgZnJlZVN0
cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7Ci0KLSAgICBwbGF0Zm9ybURl
c3Ryb3koKTsKLQotICAgIG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luKHRoaXMpOwotCi0gICAgaWYgKG1fcGx1Z2luICYmICEobV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpKQotICAgICAgICBt
X3BsdWdpbi0+dW5sb2FkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCi17Ci0gICAg
aWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKFBsdWdpbnMsICJQ
bHVnaW5WaWV3OjpzdG9wKCk6IFN0b3BwaW5nIHBsdWctaW4gJyVzJyIsIG1fcGx1Z2luLT5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4g
c3RyZWFtcyA9IG1fc3RyZWFtczsKLSAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46
Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQ
bHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgKCppdCktPnN0b3AoKTsKLSAgICAgICAgZGlzY29ubmVjdFN0cmVh
bSgoKml0KS5nZXQoKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkp
OwotCi0gICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgLy8gVW5zdWJjbGFzcyB0aGUgd2luZG93Ci0gICAgaWYgKG1faXNXaW5k
b3dlZCkgewotICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2lu
ZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwotCi0gICAg
ICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAg
IFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAo
TE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSAgICAvLyBDbGVhciB0aGUgd2luZG93Ci0gICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cgJiYgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRTZXROdWxs
V2luZG93SGFuZGxlT25EZXN0cm95KSkgewotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAg
ICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdp
bmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBQbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOwot
Ci0gICAgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSA9IDA7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBO
UEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5j
ZSwgJnNhdmVkRGF0YSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgTE9HX05Q
RVJST1IobnBFcnIpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKHNhdmVkRGF0YSkgewot
ICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBzYXZlIHRoaXMgZGF0YSBpbnN0ZWFkIG9mIGp1c3Qg
ZGlzY2FyZGluZyBpdAotICAgICAgICBpZiAoc2F2ZWREYXRhLT5idWYpCi0gICAgICAgICAgICBO
UE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1Zik7Ci0gICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0
YSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlldyogcGx1Z2luVmll
dykKLXsKLSAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKLX0KLQotUGx1Z2lu
VmlldyogUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKQotewotICAgIHJldHVybiBzX2N1
cnJlbnRQbHVnaW5WaWV3OwotfQotCi1zdGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cikKLXsKLSAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOwotICAgIGNv
bnN0IHNpemVfdCBjc3RyTGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKLSAgICBjaGFyKiByZXN1bHQg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHJMZW5ndGggKyAxKSk7Ci0K
LSAgICBtZW1jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ckxlbmd0aCk7Ci0gICAgcmVzdWx0
W2NzdHJMZW5ndGhdID0gJ1wwJzsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBp
ZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBkb24ndCBsZXQgYSBw
bHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1l
bnQgdGhhdCBpcyBiZWluZyAKLSAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUg
aW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KLSAgICBjb25zdCBTdHJpbmcmIHRhcmdl
dEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKTsKLSAg
ICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmICh0YXJnZXRGcmFtZU5h
bWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1l
LCAqbV9wYXJlbnRGcmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNl
UmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2
YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IE9wdGlvbmFsPFByb2Nl
c3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogc3RkOjpudWxs
b3B0KTsKLQotICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBpZiB0aGlz
IGlzIG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVy
d2lzZSwKLSAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCi0gICAgICAg
IGlmICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cmVh
bSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVl
c3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5v
dGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5j
cygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICAgICAgbV9zdHJl
YW1zLmFkZChzdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJhbWUgaXMg
b3VyIGZyYW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQotICAgICAgICAgICAgLy8gUGx1Z2luVmll
dywgc28gd2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+Ci0gICAgICAgICAg
ICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgICAgICAgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKm1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVl
c3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSB9OwotICAgICAgICAgICAg
ZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKLSAgICAgICAg
ICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7
Ci0gICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVM
b2FkUmVxdWVzdCkpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4
MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVk
IGxvYWRpbmcKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhj
b21tb25WTSgpKTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAg
ICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5j
ZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0
LT5ub3RpZnlEYXRhKCkpOwotICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZy
YW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCi0gICAgLy8gYW5kIHRoaXMg
aGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KLSAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1l
LmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUs
ICptX3BhcmVudEZyYW1lKSA9PSBtX3BhcmVudEZyYW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRp
bmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNv
IHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3Rl
Y3Rvcih0aGlzKTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4
ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihqc1N0cmluZywgcmVxdWVzdC0+c2hvdWxkQWxs
b3dQb3B1cHMoKSk7Ci0KLSAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIENTdHJpbmcgY3N0cjsKLSAgICAgICAgewotICAgICAgICAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0ID0gKm1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKTsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soJmds
b2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZ2V0U3RyaW5nKCZnbG9iYWxPYmplY3QsIHJlc3VsdFN0
cmluZykpCi0gICAgICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBhdXRvIHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMs
IG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJj
ZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlE
YXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVp
cmtzKCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbS5jb3B5UmVmKCkpOwotICAgICAg
ICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOwotICAgIH0K
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJU
KCFtX3JlcXVlc3RzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2lzSmF2YVNjcmlwdFBhdXNl
ZCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCA9IFdURk1v
dmUobV9yZXF1ZXN0c1swXSk7Ci0gICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7Ci0gICAgCi0gICAg
Ly8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBz
aW5jZSB0aGUgY2FsbCB0bwotICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1
Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KLSAgICBpZiAoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLQotICAgIHBlcmZvcm1S
ZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNjaGVkdWxlUmVx
dWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCkKLXsKLSAgICBtX3Jl
cXVlc3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKLQotICAgIGlmICghbV9pc0phdmFTY3Jp
cHRQYXVzZWQpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQot
Ci1OUEVycm9yIFBsdWdpblZpZXc6OmxvYWQoRnJhbWVMb2FkUmVxdWVzdCYmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBB
U1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0g
IkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkg
PT0gIlBPU1QiKTsKLQotICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnVybCgpOwotICAgIAotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9VUkw7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBi
ZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBhbGwgbG9hZGVycy4K
LSAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlzU3RvcHBpbmcoKSkK
LSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBjb25zdCBTdHJpbmcm
IHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7Ci0gICAgU3Ry
aW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7Ci0KLSAgICBp
ZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgotICAg
ICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOwotCi0gICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJl
cXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4u
Ci0gICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUt
PnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSwgKm1fcGFyZW50RnJhbWUpICE9IG1fcGFyZW50
RnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICB9IGVs
c2UgaWYgKCFtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkRp
c3BsYXkodXJsKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBz
Y2hlZHVsZVJlcXVlc3QobWFrZVVuaXF1ZTxQbHVnaW5SZXF1ZXN0PihXVEZNb3ZlKGZyYW1lTG9h
ZFJlcXVlc3QpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2Vk
KCkpKTsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIFVSTCBtYWtl
VVJMKGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCi17
Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOwotCi0gICAgLy8gU3Ry
aXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
XG4nLCAiIik7Ci0gICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7Ci0K
LSAgICByZXR1cm4gVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2lu
Vmlldzo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2
b2lkKiBub3RpZnlEYXRhKQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVz
dCB7ICptX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLCBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLCB7IH0sIHRhcmdldCwgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVu
a25vd24gfTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkp
OwotCi0gICAgcmV0dXJuIGxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwgdHJ1ZSwgbm90
aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2Fk
UmVxdWVzdCB7ICptX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLCBtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCB7IH0sIHRhcmdldCwgSW5pdGlhdGVkQnlNYWluRnJh
bWU6OlVua25vd24gfTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCks
IHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwgZmFs
c2UsIG51bGxwdHIpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkxOb3RpZnkoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gaGFu
ZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRy
dWUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSkKLXsKLSAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUg
c3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KLSAgICByZXR1cm4g
aGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxlKTsK
LX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpuZXdTdHJlYW0oTlBNSU1FVHlwZSwgY29uc3QgY2hh
ciogLyogdGFyZ2V0ICovLCBOUFN0cmVhbSoqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQot
aW50MzJfdCBQbHVnaW5WaWV3Ojp3cml0ZShOUFN0cmVhbSosIGludDMyX3QgLyogbGVuICovLCB2
b2lkKiAvKiBidWZmZXIgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1
cHBvcnRlZAotICAgIHJldHVybiAtMTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpkZXN0cm95
U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBpZiAoIXN0
cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5j
ZSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7Ci0KLSAgICBQ
bHVnaW5TdHJlYW0qIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW0qPihz
dHJlYW0tPm5kYXRhKTsKLSAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3RyZWFt
KHJlYXNvbik7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldFN0YXR1
c2JhclRleHQoKm1fcGFyZW50RnJhbWUsIFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQot
Ci1OUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlKCVzKTog
IiwgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZhcmlhYmxlLCB2YWx1ZSkuZGF0YSgpKTsKLQot
ICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgot
ICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoKLSAgICAgICAgbV9pc1Ry
YW5zcGFyZW50ID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRp
bWVyRmlyZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0
cy5zaXplKCk7IGkrKykKLSAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0p
OwotICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVnaW5WaWV3Ojpw
dXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3Rh
Y2suYXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKCkKLXsKLSAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJv
b2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Bv
cHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVwU3RhdGVTdGFj
ay5sYXN0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0
SmF2YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQ
YXVzZWQgPT0gcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFTY3JpcHRQYXVz
ZWQgPSBwYXVzZWQ7Ci0KLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIG1f
cmVxdWVzdFRpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1OUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3Qo
KQotewotICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOwotCi0gICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5nIEphdmEncyBOUE5fR2V0
VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KLSAgICAvLyBydW4sIGFsbG93aW5n
IGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1bi4gUHJvdGVjdCB0aGUK
LSAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFyOi8vcHJvYmxlbS82OTc4
ODA0PgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgTlBFcnJv
ciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhj
b21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBF
cnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBs
dWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVn
aW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsK
LSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNlbmRpZgotCi1SZWZQdHI8SlNDOjpCaW5k
aW5nczo6SW5zdGFuY2U+IFBsdWdpblZpZXc6OmJpbmRpbmdJbnN0YW5jZSgpCi17Ci0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3QqIG9iamVjdCA9IG5wT2JqZWN0
KCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KGhhc09uZVJlZigpKSB7Ci0gICAgICAgIC8vIFRoZSByZW5kZXJlciBmb3IgdGhlIFBsdWdpblZp
ZXcgd2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhlIGFib3ZlIGNhbGwsIGFuZAotICAgICAgICAvLyB0
aGUgUGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cywgc28gd2UKLSAgICAgICAgLy8gcmV0dXJuIG51bGwuCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGF1dG8gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0
ZVJvb3RPYmplY3QodGhpcyk7Ci0gICAgYXV0byBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJ
bnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgV1RGTW92ZShyb290KSk7Ci0KLSAgICBfTlBOX1JlbGVh
c2VPYmplY3Qob2JqZWN0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKGluc3RhbmNlKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaXNj
b25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQotewotICAgIEFTU0VSVChtX3N0cmVh
bXMuY29udGFpbnMoc3RyZWFtKSk7Ci0KLSAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQotewotICAgIEFT
U0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwotCi0gICAgdW5z
aWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOwotICAgIHVuc2lnbmVkIHBhcmFtQ291bnQg
PSAwOwotCi0gICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RN
YWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLSAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRl
b1BhcmFtKSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbU5hbWVzW2ldLCAi
d2luZG93bGVzc3ZpZGVvIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
cGFyYW1OYW1lc1tpXSA9PSAicGx1Z2luc3BhZ2UiKQotICAgICAgICAgICAgbV9wbHVnaW5zUGFn
ZSA9IHBhcmFtVmFsdWVzW2ldOwotCi0gICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9
IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7Ci0gICAgICAgIG1fcGFyYW1WYWx1ZXNb
cGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKLQotICAgICAg
ICBwYXJhbUNvdW50Kys7Ci0gICAgfQotCi0gICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsK
LX0KLQotUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgSFRNTFBsdWdJbkVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKLSAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCi0g
ICAgLCBtX3BsdWdpbihwbHVnaW4pCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAsIG1f
aXNTdGFydGVkKGZhbHNlKQotICAgICwgbV91cmwodXJsKQotICAgICwgbV9zdGF0dXMoUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZQ
bHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1faW52YWxpZGF0ZVRpbWVyKCp0
aGlzLCAmUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BvcFBvcHVw
c1N0YXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQp
Ci0gICAgLCBtX2xpZmVTdXBwb3J0VGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjpsaWZlU3VwcG9y
dFRpbWVyRmlyZWQpCi0gICAgLCBtX21vZGUobG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VN
QkVEKQotICAgICwgbV9wYXJhbU5hbWVzKDApCi0gICAgLCBtX3BhcmFtVmFsdWVzKDApCi0gICAg
LCBtX21pbWVUeXBlKG1pbWVUeXBlKQotICAgICwgbV9pbnN0YW5jZSgwKQotICAgICwgbV9lbGVt
ZW50TlBPYmplY3QobnVsbHB0cikKLSAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQotICAgICwgbV9p
c1RyYW5zcGFyZW50KGZhbHNlKQotICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAg
LCBtX2lzV2FpdGluZ1RvU3RhcnQoZmFsc2UpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgLCBtX3BsdWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKLSAg
ICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1fd21QcmludEhEQygw
KQotICAgICwgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNlbmRpZgotICAgICwg
bV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQotICAgICwgbV9tYW51YWxTdHJlYW0oMCkKLSAg
ICAsIG1faXNKYXZhU2NyaXB0UGF1c2VkKGZhbHNlKQotICAgICwgbV9oYXZlQ2FsbGVkU2V0V2lu
ZG93KGZhbHNlKQotewotICAgIGlmICghbV9wbHVnaW4pIHsKLSAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OwotICAgIG1faW5zdGFuY2UtPm5kYXRh
ID0gdGhpczsKLSAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Ci0KLSAgICBpbnN0YW5jZU1hcCgp
LmFkZChtX2luc3RhbmNlLCB0aGlzKTsKLQotICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMpOwotCi0gICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdp
bmRvdykpOwotCi0gICAgcmVzaXplKHNpemUpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZvY3Vz
UGx1Z2luRWxlbWVudCgpCi17Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5w
YWdlKCkpCi0gICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50
KG1fZWxlbWVudCwgKm1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsK
LSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtID0gUGx1
Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgbV9wYXJlbnRGcmFt
ZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwg
cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7
Ci0gICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKLQotICAgIG1fbWFu
dWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17
Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQo
bV9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0
YSgwLCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZpbmlzaExvYWRp
bmcoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAg
QVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hM
b2FkaW5nKDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5
KTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAgICAgIG1fbWFudWFsU3RyZWFt
LT5kaWRGYWlsKDAsIGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDYWxsaW5nUGx1
Z2luKGJvb2wgYikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoYikKLSAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0gICAgZWxzZQotICAgICAgICAt
LXNfY2FsbGluZ1BsdWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7Ci19
Ci0KLWJvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKLXsKLSAgICByZXR1cm4gc19j
YWxsaW5nUGx1Z2luID4gMDsKLX0KLQotUmVmPFBsdWdpblZpZXc+IFBsdWdpblZpZXc6OmNyZWF0
ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxQbHVnSW5FbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5k
IGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IK
LSAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlN
RSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5
ID0gbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6
Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0KLSAg
ICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5k
IHNlYXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKSkgewotICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1l
VHlwZTsKLSAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50
LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxs
eSkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5n
QXJyYXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgZmFz
dEZyZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBd
ID09ICdcbic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5r
TGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBjaGFyKiBieXRl
cyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKLSAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgotICAgICAgICBpZiAo
Ynl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJl
dHVybiBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFm
dGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KLSAgICAgICAg
aWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAg
ICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4
NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgZWxzZSBpZiAo
Ynl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hh
ciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhU
VFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwotICAgIC8vIGEgQ1JMRiBwYWlyLiBV
bmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBX
b3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCi0gICAgLy8gb2Yg
Ym90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKLSAgICAv
LyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCi0g
ICAgLy8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3Qg
Zm91bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRl
cm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCi0gICAgICAgICAgICByZXR1
cm4gYnl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewotICAgICAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKLSAgICAgICAgICAg
IC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgotICAgICAgICAgICAg
Ly8gbmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYXBp
dGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBi
b29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAg
IFVDaGFyIGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+
PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5h
bWVbaV0pOwotICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ld
ID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIo
bmFtZVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGMgPSBuYW1lW2ldOwotCi0gICAg
ICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0g
ZmFsc2U7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFk
ZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciog
ZW9sOwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRz
OwotCi0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwg
b3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVvbCA9
IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBi
eXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAgCi0g
ICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRv
ciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0gICAg
ICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAgICAg
Ynl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENS
TEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAobGlu
ZUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVu
ZCBvZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoKmxp
bmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlv
biBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwo
KSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQg
Y29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv
dXMgaGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZp
ZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUs
IGxpbmVMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5
LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBj
aGFyKiBjb2xvbjsKLSAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzon
ICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxv
b3AKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAotICAgICAg
ICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5l
LCBjb2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoY29sb24gPT0gZW9sKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGVtcHR5
U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOwotCi0gICAgICAgICAgICAgICAgU3RyaW5n
IG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9sZFZh
bHVlICsgIiwgIiArIHZhbHVlOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChs
YXN0S2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gaGVhZGVyRmllbGRzOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3Qo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCi17Ci0gICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVm
KQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLQotICAgIEhUVFBIZWFkZXJN
YXAgaGVhZGVyRmllbGRzOwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgCi0gICAgaWYg
KGZpbGUpIHsKLSAgICAgICAgTlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxl
KGJ1ZmZlciwgbGVuLCBidWYpOwotICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VS
Uk9SKQotICAgICAgICAgICAgcmV0dXJuIHJlYWRSZXN1bHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgYnVmZmVyLnJlc2l6ZShsZW4pOwotICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVm
LCBsZW4pOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEo
KTsKLSAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOwotCi0gICAgaWYgKGFs
bG93SGVhZGVycykgewotICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7
Ci0gICAgICAgICAgICBwb3N0RGF0YSsrOwotICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOwotICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0x
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGlu
IHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRl
cgotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRz
KGJ1ZmZlciwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21ldGlt
ZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhl
eSBwb3N0LAotICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxp
a2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIC8v
IGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgot
ICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChI
VFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNv
bnRlbnRMZW5ndGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBz
dGQ6Om1pbihwYXJzZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazx1bnNpZ25lZD4oY29udGVu
dExlbmd0aCkudmFsdWVfb3IoMCksIGRhdGFMZW5ndGgpOwotICAgICAgICAgICAgICAgIGhlYWRl
ckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAg
ICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgcG9zdERhdGFM
ZW5ndGggPSBkYXRhTGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKm1fcGFyZW50RnJhbWUtPmRv
Y3VtZW50KCksIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHsg
fSwgdGFyZ2V0LCBJbml0aWF0ZWRCeU1haW5GcmFtZTo6VW5rbm93biB9OwotICAgIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVs
ZHMpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5
KEZvcm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7Ci0KLSAgICByZXR1
cm4gbG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpLCBzZW5kTm90aWZpY2F0aW9uLCBub3Rp
ZnlEYXRhKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdp
blJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIWlzVmlzaWJsZSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1f
ZWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OwotICAgIGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBh
ZGRpbmdMZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgp
KTsKLSAgICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVs
bFBsdWdpbkltYWdlOwotICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQotICAgICAgICBudWxsUGx1
Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKLQot
ICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBu
dWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOwotCi0g
ICAgaW50IHhPZmZzZXQgPSAoZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgp
KSAvIDI7Ci0gICAgaW50IHlPZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJl
Y3QuaGVpZ2h0KCkpIC8gMjsKLQotICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQp
OwotCi0gICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5jbGlwKHdpbmRvd0NsaXBSZWN0
KCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5s
b2NhdGlvbigpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotc3RhdGljIGNvbnN0IGNo
YXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKLSAgICAgICAgIldpbmRvd3M7
IFU7IFdpbmRvd3MgTlQgNS4xOyIKLSAgICAgICAgIiBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIw
MDYxMDEwIEZpcmVmb3gvMi4wIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENocm9tZVVz
ZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoIgotICAgICJXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUu
MTsiCi0gICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUv
MTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVz
ZXJBZ2VudCgpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OwotICAgIGVsc2UgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1dhbnRzQ2hyb21lVXNlckFnZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsK
LSAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFnZW50ID0gbV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0KLSAgICByZXR1
cm4gbV91c2VyQWdlbnQuZGF0YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQotewotICAgIHJl
dHVybiBNb3ppbGxhVXNlckFnZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVnaW5WaWV3Ojps
aWZlU3VwcG9ydFRpbWVyRmlyZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6a2VlcEFsaXZlKCkKLXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1cHBvcnRUaW1l
ci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotdm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdp
blZpZXcqIHZpZXcgPSBpbnN0YW5jZU1hcCgpLmdldChpbnN0YW5jZSk7Ci0gICAgaWYgKCF2aWV3
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aWV3LT5rZWVwQWxpdmUoKTsKLX0KLQotTlBFcnJv
ciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYygl
cykiLCBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0KLSAgICBO
UEVycm9yIHJlc3VsdDsKLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwg
dmFsdWUsICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0KLXN0YXRpYyBGcmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBh
cmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChwYXJlbnRGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAotICAgIHJldHVybiBlbGVtZW50LT5kb2N1
bWVudCgpLmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5k
YXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUo
dmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
IGlmIChwbGF0Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2Fz
ZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2Vk
KQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRv
d1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVk
IHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICBpZiAod2luZG93U2Ny
aXB0T2JqZWN0KQotICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2Jq
ZWN0KTsKLQotICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICp2ID0g
d2luZG93U2NyaXB0T2JqZWN0OwotCi0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAg
ICB9Ci0KLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgaWYg
KG1faXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Ci0KLSAgICAgICAgaWYgKCFtX2VsZW1lbnROUE9iamVjdCkgewotICAgICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKLSAgICAg
ICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGZyYW1lLT5zY3Jp
cHQoKS5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAgICAgICAgIGlm
ICghb2JqZWN0KQotICAgICAgICAgICAgICAgIG1fZWxlbWVudE5QT2JqZWN0ID0gX05QTl9DcmVh
dGVOb1NjcmlwdE9iamVjdCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
ZWxlbWVudE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgb2JqZWN0LCBmcmFt
ZS0+c2NyaXB0KCkuYmluZGluZ1Jvb3RPYmplY3QoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBo
ZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW5zL25wcnVudGltZS5o
dG1sI2Jyb3dzZXJhY2Nlc3M+Ci0gICAgICAgIGlmIChtX2VsZW1lbnROUE9iamVjdCkKLSAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KG1fZWxlbWVudE5QT2JqZWN0KTsKLQotICAgICAgICAq
KHZvaWQgKiopdmFsdWUgPSBtX2VsZW1lbnROUE9iamVjdDsKLSAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOwotICAgIH0KLQotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogewotICAg
ICAgICBQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAoIXBh
Z2UpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgKigo
TlBCb29sKil2YWx1ZSkgPSBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwotICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6
OmdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdp
blZpZXc6OmdldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2
YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7
Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0g
ICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsK
LSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBn
ZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGZyYW1l
ICYmIGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IENTdHJpbmcgY29va2llU3RyID0gcGFnZS0+Y29va2llSmFyKCkuY29va2llcygqZnJhbWUtPmRv
Y3VtZW50KCksIHUpLnV0ZjgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0gY29v
a2llU3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgqdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZh
bHVlLCAwLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFs
dWUsIGNvb2tpZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlTdHIgPSB0b1N0cmluZyhXZWJD
b3JlOjpwcm94eVNlcnZlcnNGb3JVUkwodSkpLnV0ZjgoKTsKLSAgICAgICAgICAgIGlmICghcHJv
eHlTdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHByb3h5
U3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIq
PihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewot
ICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOwotICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAqbGVuID0g
c2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNf
RVJST1I7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkw6
ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLU5QRXJyb3Ig
UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICBMT0co
UGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JO
UE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5V
UkxWQ29va2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJh
c2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBj
b25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKLSAg
ICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVu
dCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmRvY3VtZW50KCkgJiYgIWNvb2tp
ZVN0ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1l
LT5kb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUph
cigpLnNldENvb2tpZXMoKmZyYW1lLT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFM
SURfVVJMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6Ci0g
ICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoJXMpOiBQbHVn
aW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5mb3JtYXRpb24uIiwgcHJldHR5TmFt
ZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAgICByZXN1bHQgPSBO
UEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMOiAlcyIsIHByZXR0eU5h
bWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0ID0g
TlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8o
Y29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29u
c3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAvKiByZWFsbSAqLywgY2hhcioqICAv
KiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8sIGNoYXIqKiAvKiBwYXNzd29yZCAq
LywgdWludDMyX3QqIC8qIHBsZW4gKi8pCi17Ci0jaWYgTE9HX0RJU0FCTEVECi0gICAgVU5VU0VE
X1BBUkFNKHByb3RvY29sKTsKLSAgICBVTlVTRURfUEFSQU0oaG9zdCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHBvcnQpOwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRBdXRo
ZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVzLCBwb3J0PSVkIiwgcHJvdG9jb2ws
IGhvc3QsIHBvcnQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQotewotICAgIE5QUF9T
ZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0dmFs
dWU7Ci0gICAgaWYgKCFzZXRWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZh
bHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1
Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdp
blZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlNzZjZDE4ZDczMGUwNjJl
MmI4Y2Q1MjgzNDExNGU4ZTA2ZmNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBm
b3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0jZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYUNhblN0YXJ0TGlzdGVuZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1BsdWdpblZpZXdCYXNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
cXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFt
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4KLSNlbmRpZgotCi10
eXBlZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwotCi1uYW1lc3BhY2Ug
SlNDIHsKLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsK
LSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBj
bGFzcyBGcmFtZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQ7Ci0gICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBjbGFzcyBNb3VzZUV2ZW50Owot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJXaW47Ci0jZW5kaWYKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwotICAgIGNsYXNz
IFBsdWdpblJlcXVlc3Q7Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtOwotICAgIGNsYXNzIFJlc291
cmNlRXJyb3I7Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLSAgICBjbGFzcyBXaGVlbEV2
ZW50OwotCi0gICAgZW51bSBQbHVnaW5TdGF0dXMgewotICAgICAgICBQbHVnaW5TdGF0dXNDYW5O
b3RGaW5kUGx1Z2luLAotICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAotICAg
ICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKLSAgICB9OwotCi0gICAgY2xhc3Mg
UGx1Z2luUmVxdWVzdCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblJlcXVl
c3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdp
blJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdCYmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAg
ICAgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0IHsgV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0
KSB9Ci0gICAgICAgICAgICAsIG1fbm90aWZ5RGF0YSB7IG5vdGlmeURhdGEgfQotICAgICAgICAg
ICAgLCBtX3NlbmROb3RpZmljYXRpb24geyBzZW5kTm90aWZpY2F0aW9uIH0KLSAgICAgICAgICAg
ICwgbV9zaG91bGRBbGxvd1BvcHVwcyB7IHNob3VsZEFsbG93UG9wdXBzIH0KLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQotICAgICAgICB2b2lk
KiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9Ci0gICAgICAgIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsg
fQotICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRBbGxvd1BvcHVwczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
bV9mcmFtZUxvYWRSZXF1ZXN0OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAg
IGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1
cHM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwotICAgIH07
Ci0KLSAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUg
UGx1Z2luU3RyZWFtQ2xpZW50Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IFBsdWdpbk1hbnVhbExvYWRlcgotICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPFBsdWdp
blZpZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBIVE1MUGx1
Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwot
Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2lu
LmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUCBp
bnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0gICAgICAg
IHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBs
dWdpblZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAgICAgICAg
UmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBiaW5kaW5nSW5zdGFuY2UoKSBvdmVycmlk
ZTsKLQotICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
dXM7IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICAvLyBOUE4g
ZnVuY3Rpb25zCi0gICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBFcnJvciBn
ZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwotICAgICAgICBOUEVy
cm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSk7Ci0gICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKLSAg
ICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKLSAgICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVhbSog
c3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKLSAgICAgICAgTlBFcnJvciBkZXN0
cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Ci0jZW5kaWYKLSAg
ICAgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsKLSNl
bmRpZgotICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKLSAgICAgICAg
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QRXJyb3IgZ2V0VmFs
dWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIE5Q
RXJyb3IgZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsK
LSAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOwotICAgICAgICBOUEVycm9yIGdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlh
YmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7Ci0gICAg
ICAgIE5QRXJyb3Igc2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbik7Ci0gICAgICAgIE5Q
RXJyb3IgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBj
aGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciog
cmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwg
dWludDMyX3QqIHBsZW4pOwotICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOwot
ICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOwotI2VuZGlmCi0gICAgICAg
IHZvaWQgZm9yY2VSZWRyYXcoKTsKLSAgICAgICAgdm9pZCBwdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KGJvb2wgc3RhdGUpOwotICAgICAgICB2b2lkIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOwotCi0g
ICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0g
ICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0
SmF2YVNjcmlwdFBhdXNlZChib29sKSBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIHByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qIHN0
cmVhbSkgb3ZlcnJpZGUgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLSNlbmRpZgotCi0g
ICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkg
b3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgc2V0Rm9jdXMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgICAg
IHZvaWQgc2hvdygpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGhpZGUoKSBvdmVycmlkZTsKLSAg
ICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgV2lkZ2V0
OjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqKSBvdmVycmlk
ZTsKLSAgICAgICAgdm9pZCBjbGlwUmVjdENoYW5nZWQoKSBvdmVycmlkZTsKLQotICAgICAgICAv
LyBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0byBvYnRh
aW4gYSBjbGlwIHJlY3QgdGhhdCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwKLSAgICAg
ICAgLy8gZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJlY3RzIGNv
b3JkaW5hdGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNl
LgotICAgICAgICAvLyBUaGlzIGNsaXAgaW5jbHVkZXMgYW55IGNsaXBzIHRoYXQgdGhlIHdpZGdl
dCBpdHNlbGYgc2V0cyB1cCBmb3IgaXRzIGNoaWxkcmVuLgotICAgICAgICBJbnRSZWN0IHdpbmRv
d0NsaXBSZWN0KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBoYW5kbGVFdmVudChFdmVudCYpIG92
ZXJyaWRlOwotICAgICAgICB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kikgb3ZlcnJpZGU7Ci0g
ICAgICAgIHZvaWQgc2V0UGFyZW50VmlzaWJsZShib29sKSBvdmVycmlkZTsKLQotICAgICAgICBi
b29sIGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
ICAgICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZyYW1lLmdl
dCgpOyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKLQotICAgICAgICBj
b25zdCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zUGFnZTsg
fQotICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1l
VHlwZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RhdGljIExSRVNV
TFQgQ0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwotICAgICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgICAgICBXTkRQUk9DIHBsdWdpblduZFByb2Mo
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KLSNlbmRpZgotCi0gICAgICAgIC8v
IFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCi0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJj
ZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNDYWxsaW5nUGx1Z2lu
KCk7Ci0KLSAgICAgICAgYm9vbCBzdGFydCgpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgICAgIHN0YXRpYyB2b2lkIGtlZXBBbGl2ZShOUFApOwotI2VuZGlmCi0gICAg
ICAgIHZvaWQga2VlcEFsaXZlKCk7Ci0KLSNpZiBQTEFURk9STShYMTEpCi0gICAgICAgIHN0YXRp
YyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KEZyYW1lKik7Ci0gICAgICAgIHN0YXRpYyBXaW5k
b3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpOwotI2VuZGlmCi0KLSAgICBwcml2
YXRlOgotICAgICAgICBQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6
ZSYsIFBsdWdpblBhY2thZ2UqLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLQotICAg
ICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Ci0gICAgICAgIGJvb2wgc3RhcnRP
ckFkZFRvVW5zdGFydGVkTGlzdCgpOwotICAgICAgICB2b2lkIGluaXQoKTsKLSAgICAgICAgYm9v
bCBwbGF0Zm9ybVN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc3RvcCgpOwotICAgICAgICB2b2lkIHBs
YXRmb3JtRGVzdHJveSgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmll
dyhQbHVnaW5WaWV3Kik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAg
IE5QRXJyb3IgbG9hZChGcmFtZUxvYWRSZXF1ZXN0JiYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYs
IGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29s
IGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYK
LSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwg
aW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICAgICAgdm9pZCBtZWRpYUNhblN0YXJ0KERvY3VtZW50Jikgb3ZlcnJpZGU7
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBwYWludFdp
bmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYp
OwotICAgICAgICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5U
U1RSVUNUKik7Ci0gICAgICAgIHN0YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05E
LCBjb25zdCBQQUlOVFNUUlVDVCopOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Ci0gICAgICAg
IGJvb2wgcGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUs
IE5QRXJyb3IqIHJlc3VsdCk7Ci0jZW5kaWYKLQotICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFy
ZW50RnJhbWU7Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKLSAgICAg
ICAgSFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICAgICAgYm9vbCBtX2lzU3RhcnRl
ZDsKLSAgICAgICAgVVJMIG1fdXJsOwotICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7Ci0g
ICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKLQotICAgICAgICB2b2lkIHBl
cmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqKTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVl
c3Qoc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+KTsKLSAgICAgICAgdm9pZCByZXF1ZXN0
VGltZXJGaXJlZCgpOwotICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7Ci0gICAg
ICAgIFRpbWVyIG1fcmVxdWVzdFRpbWVyOwotICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1l
cjsKLQotICAgICAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOwotICAgICAgICBU
aW1lciBtX3BvcFBvcHVwc1N0YXRlVGltZXI7Ci0KLSAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRp
bWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOwotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5Q
RXZlbnQmKTsKLSNlbmRpZgotCi0gICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0g
ICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQmKTsKLSAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQmKTsKLQot
ICAgICAgICB2b2lkIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOwotICAgICAgICBS
ZWZQdHI8SW1hZ2U+IHNuYXBzaG90KCk7Ci0KLSAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdDsKLQotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBpbnQgbV9wYXJhbUNv
dW50OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBjaGFyKiogbV9wYXJh
bVZhbHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAgICAgICAgU3RyaW5n
IG1fbWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2VudDsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0YW5jZTsKLSAgICAg
ICAgTlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsK
LQotICAgICAgICBOUE9iamVjdCogbV9lbGVtZW50TlBPYmplY3Q7Ci0jZW5kaWYKLQotICAgICAg
ICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7Ci0KLSAgICAgICAgSGFzaFNldDxS
ZWZQdHI8UGx1Z2luU3RyZWFtPj4gbV9zdHJlYW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3JlcXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dp
bmRvd2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hh
dmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKLSAgICAgICAgV05EUFJP
QyBtX3BsdWdpblduZFByb2M7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7Ci0gICAg
ICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOwotICAgICAgICBIREMgbV93bVByaW50
SERDOwotICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7Ci0jZW5kaWYKLQot
cHVibGljOgotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1
Z2luV2lkZ2V0IHdpZGdldCkgeyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9Ci0gICAgICAg
IFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1
cm4gcGxhdGZvcm1XaWRnZXQoKTsgfQotCi1wcml2YXRlOgotICAgICAgICBJbnRSZWN0IG1fY2xp
cFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCi0g
ICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCi0KLSAgICAg
ICAgYm9vbCBtX2xvYWRNYW51YWxseTsKLSAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9t
YW51YWxTdHJlYW07Ci0KLSAgICAgICAgYm9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKLQotICAg
ICAgICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKLQotICAgICAgICBzdGF0aWMgUGx1Z2lu
Vmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKLSAgICB9OwotCi1pbmxpbmUgUGx1Z2luVmlldyog
dG9QbHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdp
ZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
Kj4od2lkZ2V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhj
b25zdCBXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlz
UGx1Z2luVmlldygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+
KHdpZGdldCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KLXZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0IFBsdWdpblZpZXcqKTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmZjhhMWUyNzlhY2NhN2ZjNjlkZjhmZWFkZGNmMDcwNjNmZTUzMjQyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVl
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9CaXRtYXBJbWFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9u
Vk0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudExvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJ
bkVsZW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hvc3RXaW5kb3cuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0ltYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRpbmcuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2
ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbFdpbmRvd3NDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2
ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0
YW5jZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvY19pbnN0YW5jZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3J1bnRpbWVfcm9v
dC5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KLQotI2lmIFVTRShDQUlS
TykKLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+Ci0jaW5jbHVkZSA8
Y2Fpcm8td2luMzIuaD4KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIEhXTkQgd2luZG93SGFuZGxl
Rm9yUGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50KQotewotICAgIHJldHVybiBj
bGllbnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgSlNDOjpKU0xvY2s7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZp
ZXdDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOwotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2lu
Vmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOwotCi0vLyBUaGUgY29kZSB1
c2VkIHRvIGhvb2sgQmVnaW5QYWludC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUgZnJvbQotLy8g
PGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPi4KLS8vIENvcHly
aWdodCAoQykgMjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgotCi1zdGF0aWMg
dW5zaWduZWQgYmVnaW5QYWludFN5c0NhbGw7Ci1zdGF0aWMgQllURSogYmVnaW5QYWludDsKLQot
c3RhdGljIHVuc2lnbmVkIGVuZFBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBlbmRQYWludDsK
LQotdHlwZWRlZiBIREMgKFdJTkFQSSAqUHRyQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1Qq
KTsKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpQdHJFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRT
VFJVQ1QqKTsKLQotI2lmIENQVShYODZfNjQpCi1leHRlcm4gIkMiIEhEQyBfX3N0ZGNhbGwgX0hC
ZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKLWV4dGVybiAiQyIg
Qk9PTCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBs
cFBhaW50KTsKLSNlbmRpZgotCi1IREMgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEJlZ2luUGFp
bnQoSFdORCBoV25kLCBQQUlOVFNUUlVDVCogbHBQYWludCkKLXsKLSAgICBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBr
V2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0gICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmll
dy0+bV93bVByaW50SERDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdN
X1BSSU5UQ0xJRU5ULCBzbyBzZXQgdXAgdGhlIFBBSU5UU1RSVUNUIHNvCi0gICAgICAgIC8vIHRo
YXQgdGhlIHBsdWdpbiB3aWxsIHBhaW50IGludG8gdGhlIEhEQyB3ZSBwcm92aWRlLgotICAgICAg
ICBtZW1zZXQobHBQYWludCwgMCwgc2l6ZW9mKFBBSU5UU1RSVUNUKSk7Ci0gICAgICAgIGxwUGFp
bnQtPmhkYyA9IHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICAgICAgR2V0Q2xpZW50UmVj
dChoV25kLCAmbHBQYWludC0+cmNQYWludCk7Ci0gICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5t
X3dtUHJpbnRIREM7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChfTV9JWDg2KQotICAgIC8vIENhbGwg
dGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAg
ZWF4LCBiZWdpblBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAg
X19hc20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAotI2Vs
c2UKLSAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0K
LUJPT0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3Qg
UEFJTlRTVFJVQ1QqIGxwUGFpbnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQ
cm9wZXJ0eSkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhE
QykgewotICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwg
c28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51cC4KLSAgICAgICAg
cmV0dXJuIFRSVUU7Ci0gICAgfQotCi0jaWYgZGVmaW5lZCAoX01fSVg4NikKLSAgICAvLyBDYWxs
IHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEVuZFBhaW50LgotICAgIF9fYXNtICAgbW92ICAgICBl
YXgsIGVuZFBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAgX19h
c20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgZW5kUGFpbnQKLSNlbHNlCi0g
ICAgcmV0dXJuIF9IRW5kUGFpbnQoaFduZCwgbHBQYWludCk7Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgaG9vayhjb25zdCBjaGFyKiBtb2R1bGUsIGNvbnN0IGNoYXIqIHByb2MsIHVuc2lnbmVk
JiBzeXNDYWxsSUQsIEJZVEUqJiBwUHJvYywgY29uc3Qgdm9pZCogcE5ld1Byb2MpCi17Ci0gICAg
Ly8gU2VlIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJpbnQuaHRtbD4gZm9y
IGFuIGV4cGxhbmF0aW9uIG9mCi0gICAgLy8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCi0KLSAg
ICBISU5TVEFOQ0UgaE1vZCA9IEdldE1vZHVsZUhhbmRsZUEobW9kdWxlKTsKLQotICAgIHBQcm9j
ID0gcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KEdl
dFByb2NBZGRyZXNzKGhNb2QsIHByb2MpKSk7Ci0KLSNpZiBkZWZpbmVkKF9NX0lYODYpCi0gICAg
aWYgKHBQcm9jWzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5n
IGFuCi0gICAgLy8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0Owot
ICAgIGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUs
ICZmbE9sZFByb3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwUHJvY1swXSA9IDB4RTk7
Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cFByb2MgKyA1KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQotICAgIC8qIERpc2Fzc2VtYmx5
IG9mIEJlZ2luUGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBt
b3YgICAgICAgICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAg
IG1vdiAgICAgICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAg
ICAgICBzeXNjYWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAot
ICAgIDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3
OUZDNUJDIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAg
ICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AK
LSAgICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3
NzlGQzVDMCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAg
ICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9w
Ci0gICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAgIG5vcAotICAgICovCi0gICAg
Ly8gQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5Ci0g
ICAgRFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxE
V09SRCo+KHBQcm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRFdPUkQgZmxP
bGRQcm90ZWN0OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JF
QURXUklURSwgJiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92
IHJheCwgdGhpcwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAqKF9faW50NjQqKShwUHJvYysy
KSA9IChfX2ludDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJh
eAotICAgIHBQcm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBP
ZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQs
IFBBSU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3Qg
UEFJTlRTVFJVQ1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7Ci0g
ICAgaWYgKGhhdmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBoYXZlSG9va2VkID0gdHJ1
ZTsKLQotICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byBy
ZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBh
aW50L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZwotICAg
IC8vIHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZl
Y3RzIHRoZSBlbnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhvb2soInVzZXIzMi5kbGwiLCAi
QmVnaW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9j
YXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2lu
UGFpbnQpKSk7Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lz
Q2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJl
dF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0KLX0KLQotc3RhdGljIGJvb2wg
cmVnaXN0ZXJQbHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdp
bmRvd0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRy
dWU7Ci0KLSAgICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7Ci0KLSAgICBXTkRD
TEFTU0VYIHdjZXg7Ci0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAg
d2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0gICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RC
TENMS1M7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldpbmRvd1Byb2M7Ci0gICAgd2Nl
eC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAg
d2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2Nl
eC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJz
b3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gKEhCUlVTSClDT0xP
Ul9XSU5ET1c7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7Ci0gICAgd2NleC5scHN6Q2xh
c3NOYW1lICA9IGtXZWJQbHVnaW5WaWV3Q2xhc3NOYW1lOwotCi0gICAgcmV0dXJuICEhUmVnaXN0
ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQotTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3OjpQbHVn
aW5WaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKLXsKLSAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7
Ci0KLSAgICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShV
SU5UIG1lc3NhZ2UpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgICAgIGNhc2UgV01f
TEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9S
QlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgSW50UG9pbnQgY29udGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZp
ZXcqIHZpZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gdmlldy0+Y29u
dGVudHNUb1dpbmRvdyhwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBjb250ZW50
c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKLX0KLQotTFJFU1VMVAot
UGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICAvLyA8cmRhcjovLzU3MTExMzY+IFNvbWV0aW1lcyBG
bGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3JlYXRpbmcKLSAgICAvLyBhIGZ1bGwt
c2NyZWVuIHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBpdCwgd2hpY2ggY2F1c2VzIHRoZQot
ICAgIC8vIGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciByZWNlaXZlIG1vdXNlIGV2ZW50cy4g
V2Ugc2V0L3JlbGVhc2UgY2FwdHVyZQotICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVmb3JlIHNl
bmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHByZXZlbnQgdGhhdC4KLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2Fz
ZSBXTV9NQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAg
ICAgIDo6U2V0Q2FwdHVyZShoV25kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdNX0xCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fUkJVVFRPTlVQOgotICAgICAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gbV9sYXN0TWVzc2FnZSAmJgot
ICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFdu
ZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKLSAgICAgICAgbV9pc0NhbGxpbmdQ
bHVnaW5XbmRQcm9jKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChtZXNzYWdlID09IFdN
X1VTRVIgKyAxICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKSkgewotICAgICAgICBpZiAoIW1fbWVz
c2FnZVRocm90dGxlcikKLSAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlciA9IG1ha2VVbmlx
dWU8UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4odGhpcyk7Ci0KLSAgICAgICAgbV9tZXNzYWdl
VGhyb3R0bGVyLT5hcHBlbmRNZXNzYWdlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7
Ci0gICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gdHJ1ZTsKLQotICAgIC8vIElmIHRoZSBw
bHVnLWluIGRvZXNuJ3QgZXhwbGljaXRseSBzdXBwb3J0IGNoYW5naW5nIHRoZSBwb3AtdXAgc3Rh
dGUsIHdlIGVuYWJsZQotICAgIC8vIHBvcHVwcyBmb3IgYWxsIHVzZXIgZ2VzdHVyZXMuCi0gICAg
Ly8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gcG9wIHRoZSBzdGF0ZSBpbiBhIHRpbWVyLCBiZWNhdXNl
IHRoZSBGbGFzaCBwbHVnLWluIAotICAgIC8vIHBvcHMgdXAgd2luZG93cyBpbiByZXNwb25zZSB0
byBhIHBvc3RlZCBtZXNzYWdlLgotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVy
c2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYKLSAgICAgICAgaXNXaW5k
b3dzTWVzc2FnZVVzZXJHZXN0dXJlKG1lc3NhZ2UpICYmICFtX3BvcFBvcHVwc1N0YXRlVGltZXIu
aXNBY3RpdmUoKSkgewotCi0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7Ci0K
LSAgICAgICAgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIH0K
LQotICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7Ci0gICAgICAgIC8vIE1vc3Qg
KGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwg
c28gd2UKLSAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5
IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKLSAgICAgICAgLy8gQmVnaW5QYWludC9FbmRQYWlu
dCB0byBtYWtlIHRoZSBwbHVnaW4gZHJhdyBpbnRvIHRoZSBnaXZlbiBIREMuCi0gICAgICAgIG1l
c3NhZ2UgPSBXTV9QQUlOVDsKLSAgICAgICAgbV93bVByaW50SERDID0gcmVpbnRlcnByZXRfY2Fz
dDxIREM+KHdQYXJhbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRv
dyBwcm9jLgotICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpbldu
ZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIG1fd21QcmludEhE
QyA9IDA7Ci0KLSAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSBmYWxzZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkK
LXsKLSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcm
IGZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIEludFJl
Y3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0
ID0gbV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUo
KSk7Ci0gICAgbV93aW5kb3dSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIG1f
Y2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOwotICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5k
b3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkgJiYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAh
PSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJlY3QpKSB7Ci0KLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgICAgICAvLyBUbyBwcmV2ZW50IGZsYXNo
ZXMgd2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5nIHRoZSB3aW5kb3cK
LSAgICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdpbmRvdyB0byB0aGUg
emVybyByZWN0LgotCi0gICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3QgPSAhbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGlu
Zyk7Ci0KLSAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICBhdXRvIHJn
biA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgICAg
ICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBG
QUxTRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1f
Y2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgOjpTZXRX
aW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgVFJVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5k
b3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QpCi0gICAgICAgICAgICA6Ok1vdmVXaW5kb3cocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93
aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwgVFJVRSk7Ci0KLSAgICAg
ICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1f
Y2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgOjpTZXRX
aW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgVFJVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgICAgICBtX2hh
dmVVcGRhdGVkUGx1Z2luV2lkZ2V0ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotICAgIGlmIChmb2N1c2VkICYmIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNldEZvY3VzKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
OwotCi0gICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLQotICAgIGlmICghbV9wbHVnaW4g
fHwgbV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7
Ci0KLSAgICBucEV2ZW50LmV2ZW50ID0gZm9jdXNlZCA/IFdNX1NFVEZPQ1VTIDogV01fS0lMTEZP
Q1VTOwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLSAgICBucEV2ZW50LmxQYXJhbSA9IDA7Ci0K
LSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2hv
dygpCi17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0KLSAgICBpZiAoaXNQYXJlbnRWaXNp
YmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgU2hvd1dpbmRvdyhwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOwotCi0gICAgV2lkZ2V0OjpzaG93KCk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUoZmFsc2Up
OwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
Ci0gICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfSElERSk7Ci0K
LSAgICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZl
bnQoTlBFdmVudCYgbnBFdmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBib29sIHNob3VsZFBvcCA9IGZh
bHNlOwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJT
X0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJiBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUo
bnBFdmVudC5ldmVudCkpIHsKLSAgICAgICAgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSh0cnVlKTsK
LSAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
LQotICAgIGlmIChzaG91bGRQb3ApIAotICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsK
LQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9U
cmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0g
ICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5U
LCByZWludGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJF
TiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9IGhk
YzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsK
LQotICAgIEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVW
aWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54KCk7
Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsKLSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7
Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsK
LSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50LmxQ
YXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBucEV2
ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAgICBz
ZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdNX1BB
SU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhk
Yyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGly
dHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGlnbm9y
ZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwuCi0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0g
ICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50
V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7Ci0gICAgQVNTRVJU
KGNvbnRleHQuc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKTsKLQotICAgIEludFBvaW50IGxv
Y2F0aW9uSW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIExvY2FsV2lu
ZG93c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgZnJhbWVSZWN0KCksIGZhbHNlKTsK
LQotI2lmIFVTRShDQUlSTykKLSAgICAvLyBNdXN0IGZsdXNoIGRyYXdpbmdzIHVwIHRvIHRoaXMg
cG9pbnQgdG8gdGhlIGJhY2tpbmcgbWV0YWZpbGUsIG90aGVyd2lzZSB0aGUKLSAgICAvLyBwbHVn
aW4gcmVnaW9uIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBhbnkgY2xlYXIgcmVnaW9ucyBzcGVj
aWZpZWQgaW4gdGhlCi0gICAgLy8gY2Fpcm8tY29udHJvbGxlZCBwb3J0aW9ucyBvZiB0aGUgcmVu
ZGVyaW5nLgotICAgIGNhaXJvX3Nob3dfcGFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpKTsKLSNlbmRpZgotCi0gICAgSERDIGhkYyA9IHdpbmRvd3NDb250ZXh0LmhkYygpOwotICAg
IFhGT1JNIG9yaWdpbmFsVHJhbnNmb3JtOwotICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9y
aWdpbmFsVHJhbnNmb3JtKTsKLQotICAgIC8vIFRoZSBwbHVnaW4gZXhwZWN0cyB0aGUgREMgdG8g
YmUgaW4gY2xpZW50IGNvb3JkaW5hdGVzLCBzbyB3ZSB0cmFuc2xhdGUKLSAgICAvLyB0aGUgREMg
dG8gbWFrZSB0aGF0IHNvLgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LmdldENU
TSgpOwotICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5X
aW5kb3cueSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3Rt
LnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMs
ICZ0cmFuc2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0K
LSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBXaWRnZXQ6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9u
Q29udGV4dCopCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3IHRo
ZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCi0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24o
Y29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29udGV4
dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVuc3VyZSB0
aGF0IHdlIGhhdmUgY2FsbGVkIFNldFdpbmRvdyBiZWZvcmUgd2UgdHJ5IHRvIHBhaW50LgotICAg
IGlmICghbV9oYXZlQ2FsbGVkU2V0V2luZG93KQotICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJh
bWVSZWN0KCkpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBpZiAoY29udGV4
dC5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpCi0gICAgICAgICAgICBwYWludFdpbmRvd2Vk
UGx1Z2luSW50b0NvbnRleHQoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVu
dCgpKS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKLSAgICBMb2NhbFdpbmRvd3NDb250
ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIHJlY3RJbldpbmRvdywgbV9pc1RyYW5zcGFyZW50
KTsKLQotICAgIC8vIE9uIFNhZmFyaS9XaW5kb3dzIHdpdGhvdXQgdHJhbnNwYXJlbmN5IGxheWVy
cyB0aGUgR3JhcGhpY3NDb250ZXh0IHJldHVybnMgdGhlIEhEQwotICAgIC8vIG9mIHRoZSB3aW5k
b3cgYW5kIHRoZSBwbHVnaW4gZXhwZWN0cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdpbmRv
dyBjb29yZGluYXRlcy4KLSAgICBpZiAoY29udGV4dC5oZGMoKSA9PSB3aW5kb3dzQ29udGV4dC5o
ZGMoKSkgewotICAgICAgICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAgIEdldFdvcmxkVHJhbnNm
b3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3Jt
LmVEeCA9IDA7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHkgPSAwOwotICAgICAgICBTZXRXb3JsZFRy
YW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7Ci0gICAgfQotCi0gICAg
cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50
KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZl
bnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQua2V5Q29kZSgpOwotCi0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9
IDA7Ci0gICAgfSBlbHNlIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAgICAgIG5wRXZl
bnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5dXBFdmVudCkgewotICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7Ci0gICAg
ICAgIG5wRXZlbnQubFBhcmFtID0gMHg4MDAwOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm47
Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgp
KTsKLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwotfQotCi1leHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwot
Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCYgZXZlbnQpCi17
Ci0gICAgQVNTRVJUKG1fcGx1Z2luICYmICFtX2lzV2luZG93ZWQpOwotCi0gICAgTlBFdmVudCBu
cEV2ZW50OwotCi0gICAgSW50UG9pbnQgcCA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNh
c3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIEludFBvaW50KGV2ZW50LnBhZ2VYKCksIGV2ZW50LnBh
Z2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkp
OwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLQotICAgIGlmIChldmVudC5jdHJsS2V5KCkpCi0g
ICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7Ci0gICAgaWYgKGV2ZW50LnNoaWZ0
S2V5KCkpCi0gICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOwotCi0gICAgaWYgKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKLSAgICAgICAgfHwgZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50Ci0gICAgICAgIHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX01PVVNFTU9WRTsKLSAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbkRvd24oKSkK
LSAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVUVE9O
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246
Ci0gICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgICAg
ICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0g
ICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgY2FzZSBMZWZ0QnV0dG9u
OgotICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX01CVVRUT05ET1dOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUmlnaHRCdXR0b246Ci0gICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRP
V047Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChl
dmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIExlZnRCdXR0b246Ci0gICAgICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRU
T05VUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAg
ICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgIC8vIEZJWE1F
OiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4
IGhlcmUuCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKLQotICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJz
b3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5j
cHAKLSAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0
U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0gICAgaWdub3JlTmV4dFNl
dEN1cnNvciA9IHRydWU7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1
cnJlbnRDdXJzb3IoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmll
dyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAo
cGFyZW50KQotICAgICAgICBpbml0KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0
aGUgcGx1Zy1pbiB3aW5kb3cgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBoYXZlIHRoZSBmb2N1cywg
d2UgbmVlZCB0byAKLSAgICAgICAgLy8gY2xlYXIgaXQgdG8gcHJldmVudCB0aGUgd2ViIHZpZXcg
d2luZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNlIHRoYXQgY2FuCi0gICAgICAgIC8vIHRy
aWdnZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJlaW5nIGRldGFjaGVk
LgotICAgICAgICBIV05EIGZvY3VzZWRXaW5kb3cgPSA6OkdldEZvY3VzKCk7Ci0gICAgICAgIGlm
IChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwgOjpJc0NoaWxkKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5kb3cpKQotICAgICAgICAgICAgOjpTZXRG
b2N1cygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShi
b29sIHZpc2libGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsK
LQotICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewot
ICAgICAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgU2hvd1dp
bmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
aWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0PEZy
YW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgcC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwotCi0gICAgSW50U2l6ZSBzID0g
cmVjdC5zaXplKCk7Ci0gICAgcy5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBtX25wV2luZG93
LnggPSBwLngoKTsKLSAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKLQotICAgIG1fbnBXaW5kb3cu
d2lkdGggPSBzLndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBzLmhlaWdodCgpOwot
Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHMud2lkdGgoKTsKLSAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmJvdHRvbSA9IHMuaGVpZ2h0KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5sZWZ0ID0gMDsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Ci0KLSAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAg
ICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNT
RVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotCi0gICAgICAgIFdORFBST0MgY3VycmVudFdu
ZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3
V25kUHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRv
d0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIp
UGx1Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAo
ZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxl
bmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBHZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklM
RV9BVFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBpZiAoIUdldEZpbGVBdHRyaWJ1dGVzRXhXKGZp
bGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZh
dHRycykpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGlmIChh
dHRycy5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQotICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBIQU5ETEUgZmlsZUhhbmRsZSA9
IENyZWF0ZUZpbGVXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBGSUxFX1JFQURf
REFUQSwgRklMRV9TSEFSRV9SRUFELCAwLCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKLSAgICAKLSAg
ICBpZiAoZmlsZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNp
emVMb3cpOwotCi0gICAgRFdPUkQgYnl0ZXNSZWFkOwotICAgIGludCByZXR2YWwgPSBSZWFkRmls
ZShmaWxlSGFuZGxlLCBidWZmZXIuZGF0YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZieXRlc1Jl
YWQsIDApOwotCi0gICAgQ2xvc2VIYW5kbGUoZmlsZUhhbmRsZSk7Ci0KLSAgICBpZiAocmV0dmFs
ID09IDAgfHwgYnl0ZXNSZWFkICE9IGF0dHJzLm5GaWxlU2l6ZUxvdykKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQot
Ci1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUsIHZv
aWQqLCBOUEVycm9yKikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBIV05EKiB3ID0gcmVpbnRlcnByZXRf
Y2FzdDxIV05EKj4odmFsdWUpOwotICAgICAgICAgICAgKncgPSB3aW5kb3dIYW5kbGVGb3JQYWdl
Q2xpZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCkgOiAwKTsKLSAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5WU3VwcG9y
dHNXaW5kb3dsZXNzOiB7Ci0gICAgICAgICAgICBOUEJvb2wqIGZsYWcgPSByZWludGVycHJldF9j
YXN0PE5QQm9vbCo+KHZhbHVlKTsKLSAgICAgICAgICAgICpmbGFnID0gVFJVRTsKLSAgICAgICAg
ICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0g
eyByZWN0LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSB9OwotICAgICAg
ICA6OkludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwg
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW52YWxpZGF0ZVdpbmRvd2xl
c3NQbHVnaW5SZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0
KE5QUmVjdCogcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJl
Y3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50
b3ApOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0
ID0geyByLngoKSwgci55KCksIHIubWF4WCgpLCByLm1heFkoKSB9OwotICAgICAgICBJbnZhbGlk
YXRlUmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKSkgewotICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMu
YXBwZW5kKHIpOwotICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgxX21zKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChyKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCi17
Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVDVCByOwot
Ci0gICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcmVjdChJbnRQb2lu
dChyLmxlZnQsIHIudG9wKSwgSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5ib3R0b20tci50b3Ap
KTsKLSAgICBpbnZhbGlkYXRlUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3Jj
ZVJlZHJhdygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgOjpVcGRhdGVXaW5k
b3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICA6OlVwZGF0ZVdp
bmRvdyh3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKSk7Ci19Ci0KLWJvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NF
UlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQotICAgIGlm
IChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7Ci0gICAgICAg
IHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQ
YWludCk7Ci0KLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBXU19DSElMRDsKLSAgICAgICAgaWYgKGlz
U2VsZlZpc2libGUoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IFdTX1ZJU0lCTEU7Ci0KLSAgICAg
ICAgSFdORCBwYXJlbnRXaW5kb3dIYW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7
Ci0gICAgICAgIEhXTkQgd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmll
d0NsYXNzTmFtZSwgMCwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAwLCAwLCBwYXJlbnRXaW5kb3dIYW5kbGUsIDAsIFdlYkNvcmU6Omluc3RhbmNl
SGFuZGxlKCksIDApOwotCi0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRvdyk7Ci0KLSAg
ICAgICAgLy8gQ2FsbGluZyBTZXRXaW5kb3dMb25nUHRyQSBoZXJlIG1ha2VzIHRoZSB3aW5kb3cg
cHJvYyBBU0NJSSwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYXQgbGVhc3QKLSAgICAgICAgLy8gdGhl
IFNob2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgotI2lmIENQVShYODZfNjQpCi0gICAgICAgIDo6
U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAo
TE9OR19QVFIpRGVmV2luZG93UHJvY0EpOwotI2Vsc2UKLSAgICAgICAgOjpTZXRXaW5kb3dMb25n
UHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcpRGVmV2luZG93
UHJvY0EpOwotI2VuZGlmCi0gICAgICAgIFNldFByb3AocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
a1dlYlBsdWdpblZpZXdQcm9wZXJ0eSwgdGhpcyk7Ci0KLSAgICAgICAgbV9ucFdpbmRvdy50eXBl
ID0gTlBXaW5kb3dUeXBlV2luZG93OwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRvdy50eXBl
ID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsK
LSAgICB9Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotICAgIGlmICghbV9wbHVnaW4t
PnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQot
ICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBpZiAoIXBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERlc3Ryb3lXaW5k
b3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQo
MCk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQotewotICAgIGF1
dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotCi0gICAg
aWYgKCFtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgLy8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMu
Ci0gICAgICAgIFNldEdyYXBoaWNzTW9kZShoZGMuZ2V0KCksIEdNX0FEVkFOQ0VEKTsKLQotICAg
ICAgICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQo
KSwgJnRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVzcyBwbHVnLWlucyBhc3N1bWUg
dGhhdCB0aGV5J3JlIGRyYXdpbmcgb250byB0aGUgdmlldydzIERDLgotICAgICAgICAvLyBUcmFu
c2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgcGx1Zy1pbiBkcmF3cyBhdCAoMCwgMCkuCi0g
ICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkp
LmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkpLmxvY2F0aW9uKCk7Ci0gICAgICAgIHRyYW5z
Zm9ybS5lRHggPSAtcG9zaXRpb24ueCgpOwotICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gLXBvc2l0
aW9uLnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3Jt
KTsKLSAgICB9Ci0KLSAgICB2b2lkKiBiaXRzOwotICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFw
SW5mbzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBhdXRvIGhibXAg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xP
UlMsICZiaXRzLCAwLCAwKSk7Ci0KLSAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxI
QklUTUFQPihTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKSk7Ci0KLSAgICBwYWlu
dEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjLmdldCgpKTsKLQotICAgIFNlbGVjdE9iamVjdCho
ZGMuZ2V0KCksIGhibXBPbGQpOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaGJt
cC5nZXQoKSk7Ci19Ci0KLWZsb2F0IFBsdWdpblZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3QKLXsKLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7Ci0KLSAgICBpZiAoIXBhcmVudCgp
IHx8ICFwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIHNjYWxlRmFjdG9y
OwotCi0gICAgLy8gRm9yIHdpbmRvd2xlc3MgcGx1Z2lucywgdGhlIGRldmljZSBzY2FsZSBmYWN0
b3Igd2lsbCBiZSBhcHBsaWVkIGFzIGZvciBvdGhlciBwYWdlIGVsZW1lbnRzLgotICAgIGlmICgh
bV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm4gc2NhbGVGYWN0b3I7Ci0KLSAgICBGcmFtZVZp
ZXcmIGZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIGlm
IChmcmFtZVZpZXcuZnJhbWUoKS5kb2N1bWVudCgpKQotICAgICAgICBzY2FsZUZhY3RvciA9IGZy
YW1lVmlldy5mcmFtZSgpLmRvY3VtZW50KCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBy
ZXR1cm4gc2NhbGVGYWN0b3I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL25wYXBpLmNwcCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvbnBhcGkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4NTJiM2RjYTRjODcwNTkyNWNhMjU0YWY1ZGNlYzUzODZmYmM2ZDJk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvbnBhcGkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnaW4gdmlldyBpcyBh
bHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2ls
bCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0
YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0
IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1
Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6OnN0YXJ0
LgotLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUu
IFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVM
TCBpbnN0YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQ
IGluc3RhbmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAg
ICByZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKLX0KLQotdm9pZCogTlBO
X01lbUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0K
LQotdm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11
aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0gICAgLy8gRG8gbm90aGluZwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdl
cykKLXsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Ci19Ci0KLU5QRXJy
b3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIHJldHVy
biBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3Rp
ZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9p
ZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJv
ciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQpCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dFVSTCh1cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVu
LCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVy
bCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0
LCBsZW4sIGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFu
Y2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVh
bSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3Ry
ZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOUE5fV3JpdGUoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQotewot
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0s
IGxlbiwgYnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1cm4gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNv
bik7Ci19Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQotewotICAg
IFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotCi0g
ICAgIGlmICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0
aWMoKTsKLSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgTlBOX1N0
YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOwotfQotCi12b2lkIE5QTl9J
bnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAg
UGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0gICAg
dmlldy0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOwotfQotCi12b2lkIE5QTl9JbnZhbGlk
YXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKLXsKLSAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRS
ZWdpb24pOwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCi17Ci0gICAg
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKLX0KLQotTlBF
cnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSk7Ci0KLSAgICAgaWYgKCF2aWV3KQotICAgICAgICAgcmV0dXJuIFBsdWdpblZp
ZXc6OmdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSk7Ci0KLSAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0K
LQotTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCi17Ci0gICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQotdm9pZCogTlBOX0dldEphdmFF
bnYoKQotewotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIE5Q
Tl9HZXRKYXZhUGVlcihOUFApCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9v
bCBlbmFibGVkKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnB1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTlBOX1BvcFBvcHVwc0VuYWJs
ZWRTdGF0ZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLWV4dGVybiAiQyIgdHlwZWRlZiB2
b2lkIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uKHZvaWQqKTsKLXZvaWQgTlBOX1BsdWdp
blRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFuY2UsIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0
aW9uIGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHR5
cGUgb25seSBkaWZmZXJzIGZyb20gTWFpblRocmVhZEZ1bmN0aW9uIGJ5IGJlaW5nIGV4dGVybiAi
QyIsIHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNhbGxpbmcgY29udmVudGlvbiBvbiBhbnkgY29tcGls
ZXJzIHdlIHVzZS4KLSAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5z
Y2hlZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlcjo6TWFpblRocmVhZEZ1bmN0aW9uKj4oZnVuYyksIHVzZXJEYXRhKTsKLX0KLQotTlBF
cnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCi17Ci0g
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlRm9yVVJM
KHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZUZv
clVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmws
IHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJf
dCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNl
cm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKQot
ewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50
aWNhdGlvbkluZm8ocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1l
LCB1bGVuLCBwYXNzd29yZCwgcGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1l
bnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluc3Rh
bmNlKTsKLSAgICBVTlVTRURfUEFSQU0obWVudSk7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNv
cmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5oCmluZGV4IDI1Mjc5ODJjZWMzZGJkNWY1NzBlMmY1
YmIyNzhhNDFjOGIyOGVmZDYuLjUzOWM0MTIxNmVjMjZjMGE2M2Y3NWYxNTAwOTZlMjdlYmMwMzA5
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L0Vt
YmVkZGVkV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBv
cnQvRW1iZWRkZWRXaWRnZXQuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBFbWJlZGRlZFdp
ZGdldF9oCiAjZGVmaW5lIEVtYmVkZGVkV2lkZ2V0X2gKIAotI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmlu
ZGV4IGE3MzE5NjgyMTBjZDcwOWM1MzhiYjIzMWYzYTU1MWU1NmJhNzRmNDQuLmFlNTViMjRmZjY3
Mjg1ZDhkNjZlYTY4ZDBmNWIyMzM5Zjk4NzdjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAKQEAgLTM0LDkgKzM0LDYgQEAKICNpbmNsdWRlICJEZWZhdWx0UG9saWN5RGVsZWdhdGUu
aCIKICNpbmNsdWRlICJFbWJlZGRlZFdpZGdldC5oIgogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVs
cGVycy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJXZWJBY3Rpb25Qcm9w
ZXJ0eUJhZy5oIgogI2luY2x1ZGUgIldlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgiCiAjaW5j
bHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCkBAIC0xMDksOCArMTA2LDYgQEAgcHVibGljOgogV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50KFdlYkZyYW1lKiB3ZWJGcmFt
ZSkKICAgICA6IG1fcG9saWN5TGlzdGVuZXJQcml2YXRlKG1ha2VVbmlxdWU8V2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByaXZhdGU+KCkpCiAgICAgLCBtX3dlYkZyYW1lKHdlYkZyYW1lKQotICAgICwg
bV9tYW51YWxMb2FkZXIoMCkKLSAgICAsIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4oZmFsc2Up
IAogewogfQogCkBAIC02MjgsMTQgKzYyMyw4IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRm9ybVN0YXRlJiBmb3JtU3RhdGUsIENvbXBsZXRpCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7Ci0gICAgaWYgKCFtX21h
bnVhbExvYWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tYW51YWxMb2FkZXItPmRpZEZh
aWwoZXJyb3IpOwotICAgIG1fbWFudWFsTG9hZGVyID0gMDsKLSAgICBtX2hhc1NlbnRSZXNwb25z
ZVRvUGx1Z2luID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0
RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIC8q
IHN1Z2dlc3RlZE5hbWUgKi8pCkBAIC02NTUsMzggKzY0NCwxNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCiAKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBpZiAoIW1fbWFudWFsTG9hZGVyKQot
ICAgICAgICBsb2FkZXItPmNvbW1pdERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBsb2FkZXItPmNv
bW1pdERhdGEoZGF0YSwgbGVuZ3RoKTsKIAogICAgIC8vIElmIHRoZSBkb2N1bWVudCBpcyBhIHN0
YW5kLWFsb25lIG1lZGlhIGRvY3VtZW50LCBub3cgaXMgdGhlIHJpZ2h0IHRpbWUgdG8gY2FuY2Vs
IHRoZSBXZWJLaXQgbG9hZC4KICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNob3VsZCBiZSBzaGFy
ZWQgYWNyb3NzIGFsbCBwb3J0cy4gPGh0dHA6Ly93ZWJraXQub3JnL2IvNDg3NjI+LgogICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUpOwogICAgIGlmIChjb3JlRnJhbWUtPmRv
Y3VtZW50KCktPmlzTWVkaWFEb2N1bWVudCgpKQogICAgICAgICBsb2FkZXItPmNhbmNlbE1haW5S
ZXNvdXJjZUxvYWQocGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihsb2FkZXItPnJlc3BvbnNlKCkp
KTsKLQotICAgIGlmICghbV9tYW51YWxMb2FkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewotICAgICAgICBtX21hbnVhbExvYWRlci0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9uc2UoKSk7Ci0gICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBzZXRzIHVwIGEgbmV3IHN0cmVhbSB0byB0aGUgcGx1Zy1pbi4gb24gYSBm
dWxsLXBhZ2UgcGx1Zy1pbiwgYSBmYWlsdXJlIGluCi0gICAgICAgIC8vIHNldHRpbmcgdXAgdGhp
cyBzdHJlYW0gY2FuIGNhdXNlIHRoZSBtYWluIGRvY3VtZW50IGxvYWQgdG8gYmUgY2FuY2VsbGVk
LCBzZXR0aW5nIG1fbWFudWFsTG9hZGVyCi0gICAgICAgIC8vIHRvIG51bGwKLSAgICAgICAgaWYg
KCFtX21hbnVhbExvYWRlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7Ci0gICAgfQotICAgIG1fbWFudWFsTG9hZGVyLT5kaWRS
ZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKQogewotICAgIGlmICghbV9tYW51YWxM
b2FkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFudWFsTG9hZGVyLT5kaWRGaW5pc2hM
b2FkaW5nKCk7Ci0gICAgbV9tYW51YWxMb2FkZXIgPSAwOwotICAgIG1faGFzU2VudFJlc3BvbnNl
VG9QbHVnaW4gPSBmYWxzZTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRl
R2xvYmFsSGlzdG9yeSgpCkBAIC05OTksMTQ2ICs5NjcsMjUgQEAgT2JqZWN0Q29udGVudFR5cGUg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IFVSTCYgdXJsLCBj
b25zdAogewogICAgIFN0cmluZyBtaW1lVHlwZSA9IG1pbWVUeXBlSW47CiAKLSAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBkZWNvZGVkUGF0aCA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKTsKLSAgICAgICAgbWltZVR5cGUgPSBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5NSU1FVHlwZUZvckV4dGVuc2lvbihTdHJpbmdW
aWV3IHsgZGVjb2RlZFBhdGggfS5zdWJzdHJpbmcoZGVjb2RlZFBhdGgucmV2ZXJzZUZpbmQoJy4n
KSArIDEpKTsKLSAgICB9Ci0KICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gT2JqZWN0Q29udGVudFR5cGU6OkZyYW1lOyAvLyBHbyBhaGVhZCBhbmQgaG9wZSB0aGF0
IHdlIGNhbiBkaXNwbGF5IHRoZSBjb250ZW50LgogCi0gICAgYm9vbCBwbHVnSW5TdXBwb3J0c01J
TUVUeXBlID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJl
Z2lzdGVyZWQobWltZVR5cGUpOwotCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmpl
Y3RDb250ZW50VHlwZTo6SW1hZ2U7CiAKLSAgICBpZiAocGx1Z0luU3VwcG9ydHNNSU1FVHlwZSkK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlOjpQbHVnSW47Ci0KICAg
ICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVU
eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlOjpGcmFtZTsK
IAogICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6Tm9uZTsKIH0KIAotdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbihjb25z
dCBQbHVnaW5WaWV3JiBwbHVnaW5WaWV3KSBjb25zdAotewotI2lmIFVTRShDRikKLSAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwotCi0gICAgQ09NUHRyPElXZWJS
ZXNvdXJjZUxvYWREZWxlZ2F0ZT4gcmVzb3VyY2VMb2FkRGVsZWdhdGU7Ci0gICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5yZXNvdXJjZUxvYWREZWxlZ2F0ZSgmcmVzb3VyY2VMb2FkRGVsZWdhdGUpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+
IHVzZXJJbmZvID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUobV93ZWJGcmFtZSk7Ci0gICAgQVNTRVJU
KGZyYW1lID09IHBsdWdpblZpZXcucGFyZW50RnJhbWUoKSk7Ci0KLSAgICBpZiAoIXBsdWdpblZp
ZXcucGx1Z2luc1BhZ2UoKS5pc051bGwoKSkgewotICAgICAgICBVUkwgcGx1Z2luUGFnZVVSTCA9
IGZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXMocGx1Z2luVmlldy5wbHVnaW5zUGFnZSgpKSk7Ci0gICAgICAgIGlmIChwbHVnaW5Q
YWdlVVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IGtleSA9IE1hcnNoYWxsaW5nSGVs
cGVyczo6TFBDT0xFU1RSVG9DRlN0cmluZ1JlZihXZWJLaXRFcnJvclBsdWdJblBhZ2VVUkxTdHJp
bmdLZXkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodXNlckluZm8uZ2V0KCks
IGtleS5nZXQoKS5nZXQoKSwgcGx1Z2luUGFnZVVSTC5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghcGx1Z2luVmlldy5taW1lVHlw
ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+PiBrZXkgPSBNYXJzaGFsbGluZ0hlbHBlcnM6OkxQQ09MRVNUUlRvQ0ZTdHJp
bmdSZWYoV2ViS2l0RXJyb3JNSU1FVHlwZUtleSk7Ci0gICAgICAgIENGRGljdGlvbmFyeVNldFZh
bHVlKHVzZXJJbmZvLmdldCgpLCBrZXkuZ2V0KCkuZ2V0KCksIHBsdWdpblZpZXcubWltZVR5cGUo
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAocGx1Z2luVmlldy5w
bHVnaW4oKSkgewotICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IHBsdWdpblZpZXcucGx1Z2lu
KCktPm5hbWUoKTsKLSAgICAgICAgaWYgKCFwbHVnaW5OYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGU3RyaW5nUmVmPj4ga2V5ID0g
TWFyc2hhbGxpbmdIZWxwZXJzOjpMUENPTEVTVFJUb0NGU3RyaW5nUmVmKFdlYktpdEVycm9yUGx1
Z0luTmFtZUtleSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSh1c2VySW5mby5n
ZXQoKSwga2V5LmdldCgpLmdldCgpLCBwbHVnaW5OYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ09NUHRyPENGRGljdGlvbmFyeVByb3BlcnR5QmFn
PiB1c2VySW5mb0JhZyA9IENGRGljdGlvbmFyeVByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZSgp
OwotICAgIHVzZXJJbmZvQmFnLT5zZXREaWN0aW9uYXJ5KHVzZXJJbmZvLmdldCgpKTsKLSAKLSAg
ICBpbnQgZXJyb3JDb2RlID0gMDsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0gICAgc3dpdGNo
IChwbHVnaW5WaWV3LnN0YXR1cygpKSB7Ci0gICAgICAgIGNhc2UgUGx1Z2luU3RhdHVzQ2FuTm90
RmluZFBsdWdpbjoKLSAgICAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90Rmlu
ZFBsdWdJbjsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gV0VCX1VJX1NUUklORygiVGhlIHBs
dWctaW4gY2FuXHhFMlx4ODBceDk5dCBiZSBmb3VuZCIsICJXZWJLaXRFcnJvckNhbm5vdEZpbmRQ
bHVnaW4gZGVzY3JpcHRpb24iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW46Ci0gICAgICAgICAgICBlcnJvckNvZGUgPSBXZWJL
aXRFcnJvckNhbm5vdExvYWRQbHVnSW47Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFdFQl9V
SV9TVFJJTkcoIlRoZSBwbHVnLWluIGNhblx4RTJceDgwXHg5OXQgYmUgbG9hZGVkIiwgIldlYktp
dEVycm9yQ2Fubm90TG9hZFBsdWdpbiBkZXNjcmlwdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoU3RyaW5nKFdlYktpdEVycm9y
RG9tYWluKSwgZXJyb3JDb2RlLCBwbHVnaW5WaWV3LnVybCgpLCBTdHJpbmcoKSk7Ci0gICAgQ09N
UHRyPElXZWJFcnJvcj4gZXJyb3IoQWRvcHRDT00sIFdlYkVycm9yOjpjcmVhdGVJbnN0YW5jZShy
ZXNvdXJjZUVycm9yLCB1c2VySW5mb0JhZy5nZXQoKSkpOwotICAgICAKLSAgICByZXNvdXJjZUxv
YWREZWxlZ2F0ZS0+cGx1Z0luRmFpbGVkV2l0aEVycm9yKHdlYlZpZXcsIGVycm9yLmdldCgpLCBn
ZXRXZWJEYXRhU291cmNlKGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSk7Ci0jZWxz
ZQotICAgIEFTU0VSVCgwKTsKLSNlbmRpZgotfQotCi1SZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhUTUxQ
bHVnSW5FbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCitSZWZQdHI8V2lkZ2V0PiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0lu
RWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQogewotICAgIFdlYlZpZXcqIHdlYlZpZXcg
PSBtX3dlYkZyYW1lLT53ZWJWaWV3KCk7Ci0KLSAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IHVp
OwotICAgIGlmIChTVUNDRUVERUQod2ViVmlldy0+dWlEZWxlZ2F0ZSgmdWkpKSAmJiB1aSkgewot
ICAgICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGVQcml2YXRlPiB1aVByaXZhdGUoUXVlcnksIHVp
KTsKLQotICAgICAgICBpZiAodWlQcml2YXRlKSB7Ci0gICAgICAgICAgICAvLyBBc3NlbWJsZSB0
aGUgdmlldyBhcmd1bWVudHMgaW4gYSBwcm9wZXJ0eSBiYWcuCi0gICAgICAgICAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiB2aWV3QXJndW1lbnRzOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtTmFtZXMuc2l6ZSgpOyBpKyspIAotICAgICAgICAgICAgICAgIHZp
ZXdBcmd1bWVudHMuc2V0KHBhcmFtTmFtZXNbaV0sIHBhcmFtVmFsdWVzW2ldKTsKLSAgICAgICAg
ICAgIENPTVB0cjxJUHJvcGVydHlCYWc+IHZpZXdBcmd1bWVudHNCYWcoQWRvcHRDT00sIENPTVBy
b3BlcnR5QmFnPFN0cmluZz46OmFkb3B0KHZpZXdBcmd1bWVudHMpKTsKLSAgICAgICAgICAgIENP
TVB0cjxJRE9NRWxlbWVudD4gY29udGFpbmluZ0VsZW1lbnQoQWRvcHRDT00sIERPTUVsZW1lbnQ6
OmNyZWF0ZUluc3RhbmNlKCZlbGVtZW50KSk7Ci0KLSAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBDT01WYXJpYW50PiBhcmd1bWVudHM7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50cy5zZXQoV2Vi
RW1iZWRkZWRWaWV3QXR0cmlidXRlc0tleSwgdmlld0FyZ3VtZW50c0JhZyk7Ci0gICAgICAgICAg
ICBhcmd1bWVudHMuc2V0KFdlYkVtYmVkZGVkVmlld0Jhc2VVUkxLZXksIHVybC5zdHJpbmcoKSk7
Ci0gICAgICAgICAgICBhcmd1bWVudHMuc2V0KFdlYkVtYmVkZGVkVmlld0NvbnRhaW5pbmdFbGVt
ZW50S2V5LCBjb250YWluaW5nRWxlbWVudCk7Ci0gICAgICAgICAgICBhcmd1bWVudHMuc2V0KFdl
YkVtYmVkZGVkVmlld01JTUVUeXBlS2V5LCBtaW1lVHlwZSk7Ci0KLSAgICAgICAgICAgIENPTVB0
cjxJUHJvcGVydHlCYWc+IGFyZ3VtZW50c0JhZyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8Q09N
VmFyaWFudD46OmFkb3B0KGFyZ3VtZW50cykpOwotCi0gICAgICAgICAgICBDT01QdHI8SVdlYkVt
YmVkZGVkVmlldz4gdmlldzsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdWlQcml2YXRl
LT5lbWJlZGRlZFZpZXdXaXRoQXJndW1lbnRzKHdlYlZpZXcsIG1fd2ViRnJhbWUsIGFyZ3VtZW50
c0JhZy5nZXQoKSwgJnZpZXcpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7
Ci0gICAgICAgICAgICAgICAgSFdORCBwYXJlbnRXaW5kb3c7Ci0gICAgICAgICAgICAgICAgSFJF
U1VMVCBociA9IHdlYlZpZXctPnZpZXdXaW5kb3coJnBhcmVudFdpbmRvdyk7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIEVt
YmVkZGVkV2lkZ2V0OjpjcmVhdGUodmlldy5nZXQoKSwgJmVsZW1lbnQsIHBhcmVudFdpbmRvdywg
cGx1Z2luU2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fd2ViRnJh
bWUpOwotICAgIGF1dG8gcGx1Z2luVmlldyA9IFBsdWdpblZpZXc6OmNyZWF0ZShmcmFtZSwgcGx1
Z2luU2l6ZSwgJmVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBl
LCBsb2FkTWFudWFsbHkpOwotCi0gICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7Ci0K
LSAgICBkaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHBsdWdpblZpZXcuZ2V0KCkpOwotI2Vu
ZGlmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCYgcGx1Z2luV2lkZ2V0KQordm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0JikKIHsKLSAgICAvLyBJ
ZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHNlZSA8cmRhcjov
L3Byb2JsZW0vNDg1Mjg4OT4KLSAgICBpZiAocGx1Z2luV2lkZ2V0LmlzUGx1Z2luVmlldygpKQot
ICAgICAgICBtX21hbnVhbExvYWRlciA9IHRvUGx1Z2luVmlldygmcGx1Z2luV2lkZ2V0KTsKLSAg
ICBlbHNlIAotICAgICAgICBtX21hbnVhbExvYWRlciA9IHN0YXRpY19jYXN0PEVtYmVkZGVkV2lk
Z2V0Kj4oJnBsdWdpbldpZGdldCk7CiB9CiAKIFdlYkhpc3RvcnkqIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojp3ZWJIaXN0b3J5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDQ1
OWNlMjc4NWE1ZTQzMGU5OWI4YjNhZWJiYjQ0NmYzNmYyNDNjZmYuLmI1MGVkOTc4ZTJiZmFmMjQz
ZjAwMGU3NzNiMjY0MzhlNzg2NGViNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApAQCAt
MzIsMTEgKzMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXJDbGllbnQuaD4KIAotbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlcjsKLSAgICBjbGFzcyBQbHVnaW5W
aWV3OwotfQotCiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkZyYW1lUG9saWN5TGlzdGVuZXI7
CiBjbGFzcyBXZWJIaXN0b3J5OwpAQCAtNDksOCArNDQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRXZWJGcmFtZShXZWJGcmFtZSogd2ViRnJhbWUpIHsgbV93ZWJGcmFtZSA9IHdlYkZyYW1lOyB9
CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV93ZWJGcmFtZTsgfQog
Ci0gICAgdm9pZCBkaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKGNvbnN0IFdlYkNvcmU6OlBs
dWdpblZpZXcmKSBjb25zdDsKLQogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQoKSBjb25zdCBmaW5hbDsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXI+IGZyYW1lSUQoKSBjb25zdCBmaW5hbDsKIApAQCAtMTk5LDkgKzE5Miw0IEBAIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcml2YXRlPiBt
X3BvbGljeUxpc3RlbmVyUHJpdmF0ZTsKIAogICAgIFdlYkZyYW1lKiBtX3dlYkZyYW1lOwotCi0g
ICAgLy8gUG9pbnRzIHRvIHRoZSBtYW51YWwgbG9hZGVyIHRoYXQgZGF0YSBzaG91bGQgYmUgcmVk
aXJlY3RlZCB0by4KLSAgICBXZWJDb3JlOjpQbHVnaW5NYW51YWxMb2FkZXIqIG1fbWFudWFsTG9h
ZGVyOwotCi0gICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdpbkluZm9Q
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bHVnaW5JbmZvUHJvdmlkZXIuY3BwCmluZGV4IDgyNzFjZTcxZDUxOWQ2YmMwZDQwYjEwMWY2NDE5
MGE4YmYwOTBiYWMuLmUwZmVmNDMwYzgzZDYwZTc3ZDQ3YzBmYjZjMjg3ZTlkNmYwNDQxMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdp
bkluZm9Qcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcApAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5j
bHVkZSAiV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
JiBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnNpbmdsZXRvbigpCkBAIC00Niw0NiArNDQsMTQgQEAg
V2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjp+V2ViUGx1Z2luSW5mb1Byb3ZpZGVyKCkKIAogdm9pZCBX
ZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnJlZnJlc2hQbHVnaW5zKCkKIHsKLSAgICBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CiB9CiAKIFZlY3RvcjxXZWJDb3Jl
OjpQbHVnaW5JbmZvPiBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnBsdWdpbkluZm8oV2ViQ29yZTo6
UGFnZSYgcGFnZSwgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBsdWdpbklkZW50
aWZpZXI+PiYpCiB7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IG91dFBsdWdpbnM7
Ci0gICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFi
YXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKTsKLQotICAgIG91dFBsdWdpbnMucmVz
aXplKHBsdWdpbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
cy5zaXplKCk7ICsraSkgewotICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2lu
c1tpXTsKLQotICAgICAgICBQbHVnaW5JbmZvIGluZm87Ci0gICAgICAgIGluZm8ubmFtZSA9IHBh
Y2thZ2UtPm5hbWUoKTsKLSAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
LSAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKLQotICAgICAgICBj
b25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpOwotCi0gICAgICAgIGluZm8ubWltZXMucmVzZXJ2ZUNhcGFj
aXR5KG1pbWVUb0Rlc2NyaXB0aW9ucy5zaXplKCkpOwotCi0gICAgICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwot
ICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
aW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBNaW1lQ2xhc3NJbmZvIG1pbWU7Ci0KLSAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5rZXk7
Ci0gICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICBtaW1lLmV4
dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7Ci0K
LSAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgb3V0UGx1Z2luc1tpXSA9IGluZm87Ci0gICAgfQotICAgIHJldHVybiBvdXRQbHVnaW5zOwor
ICAgIHJldHVybiB7IH07CiB9CiAKIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBXZWJQbHVn
aW5JbmZvUHJvdmlkZXI6OndlYlZpc2libGVQbHVnaW5JbmZvKFdlYkNvcmU6OlBhZ2UmIHBhZ2Us
IGNvbnN0IFVSTCYpCiB7Ci0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBs
dWdpbklkZW50aWZpZXI+PiBzdXBwb3J0ZWRQbHVnaW5OYW1lczsKLSAgICByZXR1cm4gcGx1Z2lu
SW5mbyhwYWdlLCBzdXBwb3J0ZWRQbHVnaW5OYW1lcyk7CisgICAgcmV0dXJuIHsgfTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAppbmRleCA4ZGE5MTk0ODNiMGRhYTcxMGQ2MjM2
MmU5YjNhMDQ2OWQ1MDJiZGNmLi42ZDY3YWE2YzJjM2MxMTE4MWNhYjUzYjJjMDcxMTgyMzc2YzI1
ZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCkBAIC0zMSw4ICszMSw2IEBA
CiAjaW5jbHVkZSAiQ09NUHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJET01Db3JlQ2xhc3Nlcy5o
IgogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldlYkFjdGlvblByb3Bl
cnR5QmFnLmgiCiAjaW5jbHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGF0
YVNvdXJjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA3ZTE3ZjcxZDE0
MmMxNmRhNTNmZTcyNjZmNDRjODg5Y2Q0MzgyZTJlLi45Y2VkZmVmMDhiNTRhNjg5MmYxY2UwZmMy
NTgxODg1ZTg1ZTFhMjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMzMs
OCArMzMsNiBAQAogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKICNpbmNsdWRlICJQYWdlU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
Vmlldy5oIgogI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKQEAgLTI1Nzcs
MTkgKzI1NzUsNiBAQCBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLAogICAgIENPTVB0cjxXZWJWaWV3
PiBwcm90ZWN0b3Iod2ViVmlldyk7CiAgICAgQVNTRVJUKHdlYlZpZXcpOwogCi0gICAgLy8gV2lu
ZG93cyBNZWRpYSBQbGF5ZXIgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgd2lsbCBkZWxp
dmVyIG1lc3NhZ2VzCi0gICAgLy8gdG8gdXMgYXQgaW5hcHByb3ByaWF0ZSB0aW1lcyBhbmQgd2Ug
d2lsbCBjcmFzaCBpZiB3ZSBoYW5kbGUgdGhlbSB3aGVuOgotICAgIC8vIHRoZXkgYXJlIGRlbGl2
ZXJlZC4gV2UgcmVwb3N0IHBhaW50IG1lc3NhZ2VzIHNvIHRoYXQgd2UgZXZlbnR1YWxseSBnZXQK
LSAgICAvLyBhIGNoYW5jZSB0byBwYWludCBvbmNlIHRoZSBtb2RhbCBsb29wIGhhcyBleGl0ZWQs
IGJ1dCBvdGhlciBtZXNzYWdlcwotICAgIC8vIGFyZW4ndCBzYWZlIHRvIHJlcG9zdCwgc28gd2Ug
anVzdCBkcm9wIHRoZW0uCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYg
KFBsdWdpblZpZXc6OmlzQ2FsbGluZ1BsdWdpbigpKSB7Ci0gICAgICAgIGlmIChtZXNzYWdlID09
IFdNX1BBSU5UKQotICAgICAgICAgICAgUG9zdE1lc3NhZ2UoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGJvb2wg
aGFuZGxlZCA9IHRydWU7CiAKICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKQEAgLTYwMjEsOSArNjAw
Niw4IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0QWxsb3dTaXRlU3BlY2lmaWNIYWNrcyhCT09MIGFs
bG93KQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlZpZXc6OmFkZEFkZGl0aW9u
YWxQbHVnaW5EaXJlY3RvcnkoX0luXyBCU1RSIGRpcmVjdG9yeSkKK0hSRVNVTFQgV2ViVmlldzo6
YWRkQWRkaXRpb25hbFBsdWdpbkRpcmVjdG9yeShfSW5fIEJTVFIpCiB7Ci0gICAgUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+YWRkRXh0cmFQbHVnaW5EaXJlY3RvcnkodG9TdHJp
bmcoZGlyZWN0b3J5KSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430158</attachid>
            <date>2021-05-30 17:24:58 -0700</date>
            <delta_ts>2021-05-30 19:57:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226410-20210530172457.patch</filename>
            <type>text/plain</type>
            <size>260370</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCmluZGV4IDUwY2Fj
ZTAzZTNlNzYyYWZjMGYyMmQ0NTNhZDkzZjY2NWQyYTFmOTMuLjQ3ZmI4MDdhMGQ1OGYyMWNhNTQ1
ZGU0MjEyMDA2NmIyNTI4ZmNhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMjEtMDUtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lZWRlZCBXZWJLaXRMZWdhY3kgV2luZG93cy1zcGVjaWZp
YyBwbHVnLWluIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNjQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6IFJlbW92ZWQgYWxsIHRoZSBjb2RlIGluIHRoZSB3
aW4vUGx1Z2lucyBkaXJlY3RvcnksCisgICAgICAgIGFuZCBFbWJlZGRlZFdpZGdldC5oL2NwcC4K
KyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZTogRGl0dG8uCisKIDIwMjEtMDUtMjcgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE5leHQgc3RlcCB0b3dhcmQgdXNp
bmcgc3RkOjpvcHRpb25hbCBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggV1RGOjpPcHRpb25h
bCB0eXBlZGVmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTJmYjA1ZmE2NjUyYWYz
YTcyZDUyZjg4ZGRlMDFiNWZiMTU2MDE2MS4uNjFkOWQxYWFiYmI5OTQ5YzBkOGI1MGVjMTdiOGY0
N2MzMTI4ZTViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBA
CisyMDIxLTA1LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgc29tZSBvZiB0aGUgdW5uZWVkZWQgV2ViS2l0TGVnYWN5IFdpbmRvd3Mtc3BlY2lmaWMg
cGx1Zy1pbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjY0MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFBsdWdpbnMvUGFpbnRIb29rcy5hc206IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lu
cy9QbGF0Zm9ybU1vZHVsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luRGF0
YWJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbkRhdGFiYXNlV2luLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbkRlYnVnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpbkRlYnVnLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1Bs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1Bs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luUGFja2FnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblF1aXJrU2V0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBs
dWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblZpZXcuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFBsdWdpbnMvbnBhcGkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0VtYmVkZGVkV2lkZ2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9F
bWJlZGRlZFdpZGdldC5oOiBSZW1vdmVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwOiBSZW1vdmVkIGluY2x1ZGVzIG9mCisgICAgICAgIFBsdWdp
bkRhdGFiYXNlLmgsIFBsdWdpblBhY2thZ2UuaCwgUGx1Z2luVmlldy5oLgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50KTogUmVtb3ZlZCBtX21hbnVh
bExvYWRlciBhbmQKKyAgICAgICAgbV9oYXNTZXRuUmVzcG9uc2VUb1BsdWdpbi4KKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcik6IFJlbW92ZWQgYWxs
IHRoZSBjb2RlIGhlcmUsCisgICAgICAgIHdoaWNoIHdhcyBvbmx5IHVzZWQgZm9yIG1fbWFudWFs
TG9hZGVyLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQpOiBS
ZW1vdmVkIGNvZGUgdGhhdCBydW5zIG9ubHkgaWYKKyAgICAgICAgbV9tYW51YWxMb2FkZXIgaXMg
bm9uLW51bGwuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5n
KTogUmVtb3ZlZCBhbGwgdGhlIGNvZGUgaGVyZSwgd2hpY2gKKyAgICAgICAgd2FzIG9ubHkgdXNl
ZCBmb3IgbV9tYW51YWxMb2FkZXIuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6b2Jq
ZWN0Q29udGVudFR5cGUpOiBSZW1vdmVkIGNhbGwgdG8gcGx1Zy1pbiBkYXRhYmFzZQorICAgICAg
ICB0byBmaWd1cmUgb3V0IE1JTUUgdHlwZSBhbmQgc2VsZWN0IGEgcGx1Zy1pbiB0byBsb2FkLgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVn
aW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0
ZVBsdWdpbik6IFJldHVybiBudWxscHRyLiBObyBsb25nZXIgc3VwcG9ydAorICAgICAgICBOZXRz
Y2FwZS1zdHlsZSBwbHVnLWlucywgbm9yIGNhbGwgdGhlIGVtYmVkZGVkVmlld1dpdGhBcmd1bWVu
dHMgZnVuY3Rpb24uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRh
VG9QbHVnaW4pOiBSZW1vdmVkIGFsbCB0aGUgY29kZSBoZXJlLgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6IFJlbW92ZWQgZGlzcGF0Y2hEaWRGYWlsVG9T
dGFydFBsdWdpbiwKKyAgICAgICAgbV9tYW51YWxMb2FkZXIsIGFuZCBtX2hhc1NlbnRSZXNwb25z
ZVRvUGx1Z2luLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsdWdpbkluZm9Qcm92aWRl
ci5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZiBQbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2Vi
UGx1Z2luSW5mb1Byb3ZpZGVyOjpyZWZyZXNoUGx1Z2lucyk6IFJlbW92ZWQgYWxsIHRoZSBjb2Rl
IGhlcmUuCisgICAgICAgIChXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnBsdWdpbkluZm8pOiBEaXR0
by4KKyAgICAgICAgKFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6d2ViVmlzaWJsZVBsdWdpbkluZm8p
OiBEaXR0by4KKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6IFJlbW92ZWQgaW5jbHVkZXMgb2YgUGx1
Z2luRGF0YWJhc2UuaCBhbmQgUGx1Z2luVmlldy5oLgorICAgICAgICAqIFdlYlZpZXcuY3BwOiBE
aXR0by4KKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKTogUmVtb3ZlZCB3b3JrYXJv
dW5kIHNwZWNpZmljYWxseSBmb3IgdGhlCisgICAgICAgIFdpbmRvd3MgTWVkaWEgUGxheWVyIHBs
dWctaW4uCisgICAgICAgIChXZWJWaWV3OjphZGRBZGRpdGlvbmFsUGx1Z2luRGlyZWN0b3J5KTog
UmVtb3ZlZCBhbGwgdGhlIGNvZGUgaGVyZS4KKwogMjAyMS0wNS0zMCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFdURjo6T3B0aW9uYWwgc3lub255bSBm
b3Igc3RkOjpvcHRpb25hbCwgdXNpbmcgdGhhdCBjbGFzcyB0ZW1wbGF0ZSBkaXJlY3RseSBpbnN0
ZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlIGIv
U291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCAyM2IwZmMzMGY3MzU2
NzRmOTRiMzE1OTg0OWZmMTg3MDRkYTlmZWMzLi5jZTlhOTdkZDEzZWM3MDJmM2I1NjliYzc1MGY0
ODA4NThiMjIxMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtRlRX
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTI3
LDcgKzI3LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1BSSVZBVEVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9Ly4uL2luY2x1ZGUvcHJpdmF0ZS9KYXZh
U2NyaXB0Q29yZSIKICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUv
V2ViQ29yZSIKICAgICAiJHtXRUJLSVRMRUdBQ1lfRElSfS93aW4iCi0gICAgIiR7V0VCS0lUTEVH
QUNZX0RJUn0vd2luL3BsdWdpbnMiCiAgICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luL1dlYkNv
cmVTdXBwb3J0IgogICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNs
dWRlIgogICAgICIke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbnRlcmZhY2Vz
IgpAQCAtMTcxLDI1ICsxNzAsMTEgQEAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVNf
Q2xhc3NlcwogICAgIHdpbi9XZWJWaWV3LmNwcAogICAgIHdpbi9XZWJXb3JrZXJzUHJpdmF0ZS5j
cHAKIAotICAgIHdpbi9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAotICAgIHdpbi9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlV2luLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAot
ICAgIHdpbi9wbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgd2luL3Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCi0gICAg
d2luL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCi0gICAgd2luL3BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAKLSAgICB3aW4vcGx1Z2lucy9u
cGFwaS5jcHAKLQogICAgIHdpbi9zdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCiApCiAK
IGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0CiAgICAgd2lu
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmNwcAotICAgIHdp
bi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAKLSAgICB3aW4vV2ViQ29yZVN1cHBv
cnQvRW1iZWRkZWRXaWRnZXQuaAogICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCiAgICAgd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCiAgICAgd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcApAQCAtMjI4LDI4ICsyMTMs
NiBAQCBpZiAoVVNFX0NGKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChDTUFLRV9TSVpFT0ZfVk9J
RF9QIEVRVUFMIDgpCi0gICAgZW5hYmxlX2xhbmd1YWdlKEFTTV9NQVNNKQotICAgIGlmIChNU1ZD
KQotICAgICAgICBzZXQoTUFTTV9FWEVDVVRBQkxFIG1sNjQpCi0gICAgICAgIHNldChNQVNNX0ZM
QUdTIC9jIC9GbykKLSAgICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICAgICAgT1VU
UFVUICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1BhaW50SG9va3Mub2JqCi0g
ICAgICAgICAgICBNQUlOX0RFUEVOREVOQ1kgd2luL3BsdWdpbnMvUGFpbnRIb29rcy5hc20KLSAg
ICAgICAgICAgIENPTU1BTkQgJHtNQVNNX0VYRUNVVEFCTEV9ICR7TUFTTV9GTEFHU30KLSAgICAg
ICAgICAgICAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9QYWludEhvb2tz
Lm9iagotICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4vcGx1
Z2lucy9QYWludEhvb2tzLmFzbQotICAgICAgICAgICAgVkVSQkFUSU0pCi0gICAgICAgIGxpc3Qo
QVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTCi0gICAgICAgICAgICAke1dlYktpdExlZ2FjeV9E
RVJJVkVEX1NPVVJDRVNfRElSfS9QYWludEhvb2tzLm9iagotICAgICAgICApCi0gICAgZWxzZSAo
KQotICAgICAgICBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFUwotICAgICAgICAgICAg
d2luL3BsdWdpbnMvUGFpbnRIb29rcy5hc20KLSAgICAgICAgKQotICAgIGVuZGlmICgpCi1lbmRp
ZiAoKQotCiBpZiAoQ09NUElMRVJfSVNfR0NDX09SX0NMQU5HKQogICAgIFdFQktJVF9BRERfVEFS
R0VUX0NYWF9GTEFHUyhXZWJLaXRMZWdhY3kgLVduby1vdmVybG9hZGVkLXZpcnR1YWwpCiBlbmRp
ZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybVdpbi5jbWFrZSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMjQ2ZWI4ZmU2ZWFk
YTQzYTA4YjMxNjc3NTZmNmY0YjdmMDZlOWJmZS4uYmNjNjZjY2JhZjc3MTdmY2U5MTFhYWFiODVj
ZjE2OGUxYTMwMmMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybVdp
bi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtV2luLmNtYWtlCkBAIC00
NSw3ICs0NSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9QUklWQVRFX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS8uLi9pbmNsdWRlL3ByaXZhdGUvSmF2
YVNjcmlwdENvcmUiCiAgICAgIiR7Q01BS0VfQklOQVJZX0RJUn0vLi4vaW5jbHVkZS9wcml2YXRl
L1dlYkNvcmUiCiAgICAgIiR7V0VCS0lUTEVHQUNZX0RJUn0vd2luIgotICAgICIke1dFQktJVExF
R0FDWV9ESVJ9L3dpbi9wbHVnaW5zIgogICAgICIke1dFQktJVExFR0FDWV9ESVJ9L3dpbi9XZWJD
b3JlU3VwcG9ydCIKICAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5j
bHVkZSIKICAgICAiJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSW50ZXJmYWNl
cyIKQEAgLTE4OSwyNSArMTg4LDExIEBAIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VT
X0NsYXNzZXMKICAgICB3aW4vV2ViVmlldy5jcHAKICAgICB3aW4vV2ViV29ya2Vyc1ByaXZhdGUu
Y3BwCiAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKLSAgICB3aW4vcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAK
LSAgICB3aW4vcGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcAotICAgIHdpbi9w
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCi0gICAgd2luL3BsdWdpbnMvUGx1
Z2luUGFja2FnZS5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcAotICAg
IHdpbi9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKLSAgICB3aW4vcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAotICAgIHdpbi9wbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCi0gICAgd2luL3BsdWdpbnMv
bnBhcGkuY3BwCi0KICAgICB3aW4vc3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAogKQog
CiBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19XZWJDb3JlU3VwcG9ydAogICAgIHdp
bi9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5jcHAKLSAgICB3
aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRkZWRXaWRnZXQuY3BwCi0gICAgd2luL1dlYkNvcmVTdXBw
b3J0L0VtYmVkZGVkV2lkZ2V0LmgKICAgICB3aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAogICAgIHdpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAogICAgIHdp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKQEAgLTI3NCwyOSArMjU5
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMKICAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJWaWV3UHJlZmVyZW5jZXNDaGFuZ2VkR2VuZXJhdGVk
LmNwcAogKQogCi0KLWlmIChDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCi0gICAgZW5hYmxl
X2xhbmd1YWdlKEFTTV9NQVNNKQotICAgIGlmIChNU1ZDKQotICAgICAgICBzZXQoTUFTTV9FWEVD
VVRBQkxFIG1sNjQpCi0gICAgICAgIHNldChNQVNNX0ZMQUdTIC9jIC9GbykKLSAgICAgICAgYWRk
X2N1c3RvbV9jb21tYW5kKAotICAgICAgICAgICAgT1VUUFVUICR7V2ViS2l0TGVnYWN5X0RFUklW
RURfU09VUkNFU19ESVJ9L1BhaW50SG9va3Mub2JqCi0gICAgICAgICAgICBNQUlOX0RFUEVOREVO
Q1kgd2luL3BsdWdpbnMvUGFpbnRIb29rcy5hc20KLSAgICAgICAgICAgIENPTU1BTkQgJHtNQVNN
X0VYRUNVVEFCTEV9ICR7TUFTTV9GTEFHU30KLSAgICAgICAgICAgICAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9QYWludEhvb2tzLm9iagotICAgICAgICAgICAgICAgICR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93aW4vcGx1Z2lucy9QYWludEhvb2tzLmFzbQotICAg
ICAgICAgICAgVkVSQkFUSU0pCi0gICAgICAgIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VS
Q0VTCi0gICAgICAgICAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9QYWlu
dEhvb2tzLm9iagotICAgICAgICApCi0gICAgZWxzZSAoKQotICAgICAgICBsaXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfU09VUkNFUwotICAgICAgICAgICAgd2luL3BsdWdpbnMvUGFpbnRIb29rcy5h
c20KLSAgICAgICAgKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQotCiBsaXN0KEFQUEVORCBXZWJL
aXRMZWdhY3lfU09VUkNFUyAke1dlYktpdExlZ2FjeV9JTkNMVURFU30gJHtXZWJLaXRMZWdhY3lf
U09VUkNFU19DbGFzc2VzfSAke1dlYktpdExlZ2FjeV9TT1VSQ0VTX1dlYkNvcmVTdXBwb3J0fSkK
IAogc291cmNlX2dyb3VwKEluY2x1ZGVzIEZJTEVTICR7V2ViS2l0TGVnYWN5X0lOQ0xVREVTfSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGFpbnRIb29rcy5h
c20gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYxNWEx
MTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGFpbnRIb29rcy5hc20KKysrIC9kZXYv
bnVsbApAQCAtMSw1MCArMCwwIEBACi07LyoKLTsgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotOwotOyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi07
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi07ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotOyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi07Ci07ICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotOyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotOyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotOyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLTsKLTsgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotOyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLTsq
LwotCi07SERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNU
IGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IQmVnaW5QYWludAotCi1fVEVYVCAgIFNFR01FTlQKLQot
X0hCZWdpblBhaW50IFBST0MKLSAgICAgbW92ICByMTAscmN4Ci0gICAgIG1vdiAgZWF4LDEwMTdo
Ci0gICAgIHN5c2NhbGwKLSAgICAgcmV0Ci1fSEJlZ2luUGFpbnQgRU5EUAotCi1fVEVYVCAgIEVO
RFMKLQotO0JPT0wgX19zdGRjYWxsIF9IRW5kUGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNU
UlVDVCogbHBQYWludCk7Ci0KLVBVQkxJQyAgX0hFbmRQYWludAotCi1fVEVYVCAgIFNFR01FTlQK
LQotX0hFbmRQYWludCBQUk9DCi0gICAgbW92ICByMTAscmN4Ci0gICAgbW92ICBlYXgsMTAxOWgK
LSAgICBzeXNjYWxsCi0gICAgcmV0Ci1fSEVuZFBhaW50IEVORFAKLQotX1RFWFQgICBFTkRTCi0K
LUVORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbGF0Zm9y
bU1vZHVsZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbGF0Zm9ybU1vZHVs
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY2ZTYzOTM0MDkxZTQxMTg3YjIz
OTkwMzFiZDM3MGFjZjljYzE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGxhdGZvcm1Nb2R1bGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLXR5cGVkZWYg
SE1PRFVMRSBQbGF0Zm9ybU1vZHVsZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
UGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHsKLSAgICB1bnNpZ25lZCBsZWFzdFNpZzsKLSAgICB1bnNp
Z25lZCBtb3N0U2lnOwotCi0gICAgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uKHVuc2lnbmVkKQotICAg
ICAgICA6IGxlYXN0U2lnKDApCi0gICAgICAgICwgbW9zdFNpZygwKQotICAgIHsKLSAgICB9Ci0K
LSAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24odW5zaWduZWQgbHNiLCB1bnNpZ25lZCBtc2IpCi0g
ICAgICAgIDogbGVhc3RTaWcobHNiKQotICAgICAgICAsIG1vc3RTaWcobXNiKQotICAgIHsKLSAg
ICB9Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI5MWI3OWU5NGRmN2M2ZjFiMGJjYjVlOGI0OGY5OTAwYjQ1MzdlNzMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUg
PHd0Zi9GaWxlU3lzdGVtLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4+IFBsdWdpblBhY2thZ2VC
eU5hbWVNYXA7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
Ci1jb25zdGV4cHIgc2l6ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNp
emUgPSAzMjc2ODsKLQotc3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hl
SXNFbmFibGVkOwotCi1TdHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY2FjaGVQYXRoOwotICAgIHJl
dHVybiBjYWNoZVBhdGg7Ci19Ci0KLSNlbmRpZgotCi1QbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0
YWJhc2UoKQotewotfQotCi1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBs
dWdpbnMgPSAwOwotCi0gICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcg
UGx1Z2luRGF0YWJhc2U7Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7Ci0gICAgICAgICAgICBw
bHVnaW5zLT5zZXRQbHVnaW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdp
bkRpcmVjdG9yaWVzKCkpOwotICAgICAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJh
c2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAg
aWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRh
YmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0
YWJhc2U6OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQot
ewotICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Ci0gICAgcmVmcmVz
aCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKLXsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICghbV9wZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZUlzTG9hZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUo
KTsKLSNlbmRpZgotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgaWYg
KCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9Vbmxv
YWQ7Ci0gICAgICAgIGdldERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1VubG9hZCk7Ci0KLSAgICAg
ICAgLy8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgYXV0byBlbmQgPSBwbHVnaW5zVG9VbmxvYWQu
ZW5kKCk7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAg
ICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQot
Ci0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwotICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1l
czsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNraXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRp
ZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUuIElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBh
bnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQs
IGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVyc2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVy
IGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRoZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAg
dGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVn
aW5TZXRDaGFuZ2VkOwotCi0gICAgYXV0byBwYXRoc0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZv
ciAoYXV0byBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAg
ICAgIGF1dG8gbGFzdE1vZGlmaWVkVGltZSA9IEZpbGVTeXN0ZW06OmZpbGVNb2RpZmljYXRpb25U
aW1lKCppdCk7Ci0gICAgICAgIGlmICghbGFzdE1vZGlmaWVkVGltZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkID0gbGFzdE1vZGlmaWVkVGltZS0+
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzQXM8dGltZV90PigpOwotCi0gICAgICAgIHBhdGhz
V2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHBh
dGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSByYW4g
cmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBpZiAoc2hv
dWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0KCppdCkg
PT0gbGFzdE1vZGlmaWVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNrYWdlID0gbV9wbHVnaW5zQnlQYXRoLmdldCgqaXQp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQ
YWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBsYXN0TW9kaWZpZWQpOwotICAgICAgICAgICAgcmVt
b3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBwYWNrYWdl
ID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZSgqaXQsIGxhc3RNb2RpZmllZCk7Ci0gICAg
ICAgIGlmIChwYWNrYWdlICYmIGFkZChwYWNrYWdlLnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAg
ICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgYWxs
IHRoZSBwYXRocyB3ZSBmb3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMgZm9yIG5leHQgdGltZS4K
LSAgICBwYXRoc1dpdGhUaW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRoVGltZXMpOwotCi0gICAg
aWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVh
cigpOwotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgYXV0byBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBh
dXRvIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAgICAg
ICBhdXRvIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7Ci0gICAg
ICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lu
cygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBh
dXRvIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdl
dCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBQbHVnaW5EYXRhYmFzZTo6cHJl
ZmVycmVkUGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQotewotICAg
IFBsdWdpblBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nhc3Q8UGx1Z2luUGFja2FnZSogY29u
c3QqPihhKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5CID0gKnN0YXRpY19jYXN0PFBsdWdp
blBhY2thZ2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4gcGx1Z2luQS0+Y29tcGFyZSgqcGx1
Z2luQik7Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUGx1Z2luUGFja2FnZSogcHJlZmVy
cmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7Ci0gICAgaWYgKHBy
ZWZlcnJlZFBsdWdpbgotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPmlzRW5hYmxlZCgpCi0g
ICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMo
bWltZVR5cGUpKSB7Ci0gICAgICAgIHJldHVybiBwcmVmZXJyZWRQbHVnaW47Ci0gICAgfQotCi0g
ICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwotCi0gICAgYXV0byBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAo
Kml0KS5nZXQoKTsKLQotICAgICAgICBpZiAoIXBsdWdpbi0+aXNFbmFibGVkKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMo
KS5jb250YWlucyhtaW1lVHlwZSkpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICBwbHVnaW5D
aG9pY2VzLmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdp
bkNob2ljZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHFzb3J0KHBsdWdp
bkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2th
Z2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0
dXJuIHBsdWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5
cGVGb3JFeHRlbnNpb24oU3RyaW5nVmlldyBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4
dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGF1dG8g
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBWZWN0b3I8
UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAgSGFzaE1hcDxQbHVnaW5QYWNr
YWdlKiwgU3RyaW5nPiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAgIGZvciAoYXV0byBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+
aXNFbmFibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIG1pbWVf
ZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKLQotICAgICAgICBmb3IgKGF1
dG8gbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAh
PSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQt
PmtleTsKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJl
ZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKLSAgICAgICAgICAgIGJvb2wgZm91
bmRNYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcgeyBleHRlbnNpb25zW2ldIH0sIGV4dGVuc2lvbikpIHsK
LSAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNr
YWdlOjplcXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1Z2luKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCi0gICAgICAgICAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVn
aW5Mb2FkZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7Ci0gICAgICAg
ICAgICAgICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFkZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm91bmRNYXBwaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGZvdW5kTWFwcGluZykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMu
c2l6ZSgpLCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVk
UGx1Z2luQ29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWltZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdp
bkNob2ljZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBs
dWdpbihjb25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoIW1pbWVU
eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBl
KTsKLSAgICAKLSAgICBhdXRvIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0g
ICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcvJykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIGF1dG8gZG90UG9zaXRpb24gPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwot
ICAgIGlmIChkb3RQb3NpdGlvbiA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgCi0gICAgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5cGVGb3JFeHRl
bnNpb24oZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc2l0aW9uICsgMSkpOwotICAgIFBsdWdpblBh
Y2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlRm9yRXh0ZW5zaW9uKTsK
LSAgICBpZiAoIXBsdWdpbikgewotICAgICAgICAvLyBGSVhNRTogSWYgbm8gcGx1Z2luIGNvdWxk
IGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgTUlNRSB0eXBlIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIGV4dGVuc2lvbi4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAot
ICAgIG1pbWVUeXBlID0gbWltZVR5cGVGb3JFeHRlbnNpb247Ci0gICAgcmV0dXJuIHBsdWdpbjsK
LX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKQotewotICAgIGlm
ICghcGx1Z2luIHx8IHBsdWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVUeXBl
KSkKLSAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnNldChtaW1lVHlwZSwgcGx1Z2luKTsKLX0K
LQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0
IGFyZSBkaXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBpZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVz
LmNvbnRhaW5zKEZpbGVTeXN0ZW06OnBhdGhGaWxlTmFtZShmaWxlUGF0aCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0
aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNl
dCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBhdXRvIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAg
ICBmb3IgKGF1dG8gaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCppdCktPnBhdGgoKSkpCi0g
ICAgICAgICAgICBwbHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5EYXRh
YmFzZTo6YWRkKFJlZjxQbHVnaW5QYWNrYWdlPiYmIHBhY2thZ2UpCi17Ci0gICAgaWYgKCFtX3Bs
dWdpbnMuYWRkKHBhY2thZ2UuY29weVJlZigpKS5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBtX3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2Fn
ZS5jb3B5UmVmKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNl
OjpyZW1vdmUoUGx1Z2luUGFja2FnZSogcGFja2FnZSkKLXsKLSAgICBhdXRvIGl0ID0gcGFja2Fn
ZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7Ci0gICAgYXV0byBlbmQgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgYXV0byBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChpdC0+
a2V5KTsKLSAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMuZW5k
KCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBwYWNrYWdlKQotICAgICAgICAgICAgbV9wcmVm
ZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5NYXApOwotICAgIH0KLQotICAgIG1fcGx1Z2lu
cy5yZW1vdmUocGFja2FnZSk7Ci0gICAgbV9wbHVnaW5zQnlQYXRoLnJlbW92ZShwYWNrYWdlLT5w
YXRoKCkpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpjbGVhcigpCi17Ci0gICAgbV9wbHVn
aW5zLmNsZWFyKCk7Ci0gICAgbV9wbHVnaW5zQnlQYXRoLmNsZWFyKCk7Ci0gICAgbV9wbHVnaW5Q
YXRoc1dpdGhUaW1lcy5jbGVhcigpOwotICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigp
OwotICAgIG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9h
ZGVkID0gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlRGlz
YWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1f
ZGlzYWJsZWRQbHVnaW5GaWxlcy5yZW1vdmUoZmlsZU5hbWUpOwotfQotCi1ib29sIFBsdWdpbkRh
dGFiYXNlOjphZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsK
LSAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLmFkZChmaWxlTmFtZSkuaXNOZXdFbnRy
eTsKLX0KLQotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotLy8gRm9yIFNhZmFy
aS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotLy8gaW4g
UGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVj
dHMKLS8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVy
IFhQX1dJTj8KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5E
aXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0KLSAgICAvLyBEZWZh
dWx0IHBsdWdpbiBkaXJlY3RvcnkgaXM6ICVBcHBEYXRhJVxNb3ppbGxhXHBsdWdpbnMuCi0gICAg
cGF0aHMuYXBwZW5kKEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMoRmlsZVN5
c3RlbTo6cm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKSwgeyAiTW96aWxsYSIs
ICJwbHVnaW5zIiB9KSk7Ci0KLSAgICByZXR1cm4gcGF0aHM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0
YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudHMoRmlsZVN5c3RlbTo6cm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3Rvcnko
KSwgeyAiTW96aWxsYSIsICJwbHVnaW5zIiB9KTsKLQotICAgIC8vIFRPRE86IFdlIHNob3VsZCBu
b3JtYWxpemUgdGhlIHBhdGggYmVmb3JlIGRvaW5nIGEgY29tcGFyaXNvbi4KLSAgICByZXR1cm4g
cGF0aCA9PSBwcmVmZXJyZWRQYXRoOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVn
aW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBm
b3IgKGF1dG8mIHBsdWdpbkRpcmVjdG9yeSA6IG1fcGx1Z2luRGlyZWN0b3JpZXMpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBwbHVnaW5OYW1lIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwbHVn
aW5EaXJlY3RvcnkpKSB7Ci0gICAgICAgICAgICBhdXRvIHBsdWdpblBhdGggPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGx1Z2luRGlyZWN0b3J5LCBwbHVnaW5OYW1lKTsK
LSAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQocGx1Z2luUGF0aCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHBhdGhzLmFkZChwbHVn
aW5QYXRoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotI2VuZGlmIC8vICFFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FD
SEUpCi0KLXN0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoRmlsZVN5c3Rl
bTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQotewotICAg
IHNpemVfdCBidWZmZXJTaXplID0gMDsKLSAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSAxMDI0
OwotICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOwotCi0gICAgZG8gewotICAgICAg
ICBidWZmZXJTaXplICs9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlLCBidWZmZXIuZGF0
YSgpICsgYnVmZmVyU2l6ZSwgYnVmZmVyQ2FwYWNpdHkgLSBidWZmZXJTaXplKTsKLSAgICAgICAg
aWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGlmIChidWZm
ZXJDYXBhY2l0eSA8IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUpIHsK
LSAgICAgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOwotICAgICAgICAgICAgICAgIGJ1
ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfSB3aGls
ZSAodHJ1ZSk7Ci0KLSAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlclNpemUpOwotfQotCi1zdGF0aWMg
Ym9vbCByZWFkVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdFN0cmluZywgY2hhciomIHN0YXJ0LCBj
b25zdCBjaGFyKiBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaW50IGxlbiA9IHN0cmxlbihzdGFydCk7Ci0gICAgcmVzdWx0U3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChzdGFydCwgbGVuKTsKLSAgICBzdGFydCArPSBsZW4gKyAxOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHJlYWRUaW1lKHRpbWVfdCYgcmVz
dWx0VGltZSwgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0
ICsgc2l6ZW9mKHRpbWVfdCkgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBUaGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcnkgYWxpZ25lZC4KLSAgICBtZW1jcHkoJnJlc3Vs
dFRpbWUsIHN0YXJ0LCBzaXplb2YodGltZV90KSk7Ci0gICAgc3RhcnQgKz0gc2l6ZW9mKHRpbWVf
dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3RleHByIGNoYXIgc2NoZW1hVmVyc2lv
biA9ICcxJzsKLWNvbnN0ZXhwciBjaGFyIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmls
ZW5hbWVbXSA9ICJQbHVnaW5NZXRhZGF0YUNhY2hlLmJpbiI7Ci0KLXZvaWQgUGx1Z2luRGF0YWJh
c2U6OmxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1G
aWxlSGFuZGxlIGZpbGU7Ci0gICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgp
LCBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKLSAgICBmaWxlID0gRmls
ZVN5c3RlbTo6b3BlbkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVu
TW9kZTo6UmVhZCk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxl
c3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhl
IGNhY2hlLCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLgotICAgIG1fcGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZmlsZUNv
bnRlbnRzOwotICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZSwgZmlsZUNvbnRl
bnRzKTsKLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAoZmlsZUNv
bnRlbnRzLnNpemUoKSA8IDIgfHwgZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1hVmVyc2lv
biB8fCBmaWxlQ29udGVudHMubGFzdCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1hIik7Ci0g
ICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVmZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRh
dGEoKSArIDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIGZpbGVDb250
ZW50cy5zaXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2FjaGVkUGx1Z2luczsKLSAgICBIYXNoTWFw
PFN0cmluZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gY2FjaGVkUGx1Z2luc0J5UGF0aDsKLQot
ICAgIHdoaWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAg
ICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBT
dHJpbmcgZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVEZXNjOwotICAgICAgICBpZiAoIShyZWFk
VVRGOFN0cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFRp
bWUobGFzdE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFVU
RjhTdHJpbmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAgICAgICYmIHJlYWRVVEY4
U3RyaW5nKGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0
cmluZyhtaW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkgewotICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwot
ICAgICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTa2lwIG1ldGFkYXRh
IHRoYXQgcG9pbnRzIHRvIHBsdWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0Ci0gICAgICAgIC8v
IGFyZSBub3QgcGFydCBvZiBwbHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9yZS4KLSAgICAgICAg
U3RyaW5nIHBsdWdpbkRpcmVjdG9yeU5hbWUgPSBGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKHBhdGgp
OwotICAgICAgICBpZiAobV9wbHVnaW5EaXJlY3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9yeU5h
bWUpID09IFdURjo6bm90Rm91bmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBh
dXRvIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgs
IGxhc3RNb2RpZmllZCwgbmFtZSwgZGVzYywgbWltZURlc2MpOwotCi0gICAgICAgIGlmIChjYWNo
ZWRQbHVnaW5zLmFkZChwYWNrYWdlLmNvcHlSZWYoKSkuaXNOZXdFbnRyeSkgewotICAgICAgICAg
ICAgY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2Fn
ZS0+bGFzdE1vZGlmaWVkKCkpOwotICAgICAgICAgICAgY2FjaGVkUGx1Z2luc0J5UGF0aC5hZGQo
cGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGx1
Z2lucy5zd2FwKGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5zd2FwKGNhY2hl
ZFBsdWdpbnNCeVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuc3dhcChjYWNoZWRQ
bHVnaW5QYXRoc1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlVVRGOFN0cmluZyhG
aWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBpbnQgbGVu
Z3RoID0gdXRmOFN0cmluZy5sZW5ndGgoKSArIDE7Ci0gICAgcmV0dXJuIEZpbGVTeXN0ZW06Ondy
aXRlVG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgpLCBsZW5ndGgpID09IGxlbmd0aDsKLX0K
LQotc3RhdGljIGJvb2wgd3JpdGVUaW1lKEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlLCBjb25zdCB0aW1lX3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9m
KHRpbWVfdCkpID09IHNpemVvZih0aW1lX3QpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1
cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVj
dG9yaWVzKHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsKLSAgICBTdHJpbmcgYWJzb2x1
dGVDYWNoZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmls
ZW5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwot
Ci0gICAgaWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBGaWxlU3lzdGVt
OjpvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpX
cml0ZSk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmlsZSkpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgZm9y
IHNhdmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBsb2NhbFNjaGVt
YVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOwotICAgIGlmIChGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKLSAgICAg
ICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8gZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEod3JpdGVVVEY4U3Ry
aW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVGltZShmaWxl
LCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmlu
ZyhmaWxlLCAoKml0KS0+bmFtZSgpKQotICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmco
ZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0
cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlvbigpKSkpIHsKLSAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOwot
ICAgICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZpbGUpOwotICAgICAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZSk7
Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFi
bGVkKCkKLXsKLSAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFi
bGVkOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCi17Ci0gICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlSXNFbmFibGVkID0gaXNFbmFibGVkOwotfQotCi1TdHJpbmcgUGx1Z2luRGF0YWJhc2U6
OnBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBl
cnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOwotfQotCi12b2lkIFBsdWdpbkRhdGFi
YXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgpCi17Ci0gICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Ci19Ci0KLSNl
bmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MjQ5OWJiZDkwMjRiOTlm
ZjdmNWViNjFhODMwZjcwM2I5N2U1MDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiwgUGx1Z2luUGFja2FnZUhhc2gsIFBsdWdpblBhY2thZ2VIYXNoVHJh
aXRzPiBQbHVnaW5TZXQ7Ci0KLSAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZSB7Ci0gICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbkRhdGFiYXNlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5EYXRhYmFzZSgpOwotCi0gICAgICAgIC8v
IFRoZSBmaXJzdCBjYWxsIHRvIGluc3RhbGxlZFBsdWdpbnMgY3JlYXRlcyB0aGUgcGx1Z2luIGRh
dGFiYXNlCi0gICAgICAgIC8vIGFuZCBieSBkZWZhdWx0IHBvcHVsYXRlcyBpdCB3aXRoIHRoZSBw
bHVnaW5zIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgotICAgICAgICAvLyBGb3IgdGVzdGluZyBw
dXJwb3NlcywgaXQgaXMgcG9zc2libGUgdG8gbm90IHBvcHVsYXRlIHRoZSBkYXRhYmFzZQotICAg
ICAgICAvLyBhdXRvbWF0aWNhbGx5LCBhcyB0aGUgcGx1Z2lucyBtaWdodCBhZmZlY3QgdGhlIERS
VCByZXN1bHRzIGJ5Ci0gICAgICAgIC8vIHdyaXRpbmcgdG8gYS5vLiBzdGRlcnIuCi0gICAgICAg
IHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogaW5zdGFsbGVkUGx1Z2lucyhib29sIHBvcHVsYXRlID0g
dHJ1ZSk7Ci0KLSAgICAgICAgYm9vbCByZWZyZXNoKCk7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsK
LSAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBwbHVnaW5zKCkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAg
ICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnkpOwotICAgICAgICBzdGF0aWMgaW50IHByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29u
c3Qgdm9pZCosIGNvbnN0IHZvaWQqKTsKLQotICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1
Z2luKGNvbnN0IFVSTCYsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5QYWNrYWdl
KiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgdm9p
ZCBzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4pOwotCi0gICAgICAgIHZvaWQgc2V0UGx1Z2luRGlyZWN0b3Jp
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjbGVhcigpOwotICAgICAgICAgICAgbV9wbHVnaW5EaXJlY3RvcmllcyA9IGRpcmVjdG9y
aWVzOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7Ci0gICAgICAgIGJvb2wgYWRkRGlzYWJsZWRQbHVnaW5G
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmlu
Zz4gZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBs
dWdpbkRpcmVjdG9yaWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5EaXJlY3RvcmllczsgfQot
Ci0gICAgICAgIFN0cmluZyBNSU1FVHlwZUZvckV4dGVuc2lvbihTdHJpbmdWaWV3IGV4dGVuc2lv
bikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
ICAgICAgICBzdGF0aWMgYm9vbCBpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9v
bCBpc0VuYWJsZWQpOwotICAgICAgICBzdGF0aWMgU3RyaW5nIHBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlUGF0aCgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOwotI2VuZGlm
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rvcmll
cyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXREZWxldGVkUGx1Z2lu
cyhQbHVnaW5TZXQmKSBjb25zdDsKLSAgICAgICAgYm9vbCBmaWxlRXhpc3RzQW5kSXNOb3REaXNh
YmxlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIg
dGhlIHBsdWdpbiB3YXMgYWN0dWFsbHkgYWRkZWQgb3Igbm90IChpdCB3b24ndCBiZSBhZGRlZCBp
ZiBpdCdzIGEgZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIHBsdWdpbikuCi0gICAgICAgIGJvb2wg
YWRkKFJlZjxQbHVnaW5QYWNrYWdlPiYmKTsKLSAgICAgICAgdm9pZCByZW1vdmUoUGx1Z2luUGFj
a2FnZSopOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIHZvaWQgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0gICAgICAgIHZvaWQgdXBk
YXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotCi0gICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2Rpc2FibGVkUGx1Z2luRmlsZXM7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IG1f
cGx1Z2luRGlyZWN0b3JpZXM7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXM7Ci0gICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7Ci0gICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3BsdWdpbnNCeVBhdGg7Ci0gICAgICAg
IEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IG1fcGx1Z2luUGF0aHNXaXRoVGltZXM7Ci0gICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4sIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9wcmVmZXJyZWRQbHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
TUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlz
TG9hZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luRGF0
YWJhc2VXaW4uY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EYXRh
YmFzZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MjcwODFjYWM5YTdk
MDhlN2JmMTY3MDM1OTdiODRmM2EwOTc3OTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5E
YXRhYmFzZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0j
aW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdU
b0ludGVnZXJDb252ZXJzaW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlu
bGluZSB2b2lkIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgSGFzaFNl
dDxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IFJlZ09wZW5LZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBL
RVlfRU5VTUVSQVRFX1NVQl9LRVlTLCAma2V5KTsKLQotICAgIGlmIChyZXN1bHQgIT0gRVJST1Jf
U1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2NoYXJfdCBuYW1lWzEyOF07Ci0gICAg
RklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBm
b3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gV1RGX0FSUkFZ
X0xFTkdUSChuYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5h
bWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVz
dWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBXQ0hB
UiBwYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9m
KHBhdGhTdHIpOwotICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IGdldFJl
Z2lzdHJ5VmFsdWUoa2V5LCBuYW1lLCBMIlBhdGgiLCAmdHlwZSwgcGF0aFN0ciwgJnBhdGhTdHJT
aXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVH
X1NaKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcGF0aHMuYWRkKFN0cmluZyhw
YXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0gICAgfQotCi0gICAg
UmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
dm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8
U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEg
Y2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1l
czsKLQotICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotICAgIFdJTjMy
X0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwotCi0gICAgU3RyaW5nIG9sZFdNUFBsdWdpblBhdGg7
Ci0gICAgU3RyaW5nIG5ld1dNUFBsdWdpblBhdGg7Ci0KLSAgICBmb3IgKGF1dG8mIGRpcmVjdG9y
eSA6IG1fcGx1Z2luRGlyZWN0b3JpZXMpIHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBkaXJl
Y3RvcnkgKyAiXFwqIjsKLQotICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4u
d2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmICho
RmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRl
cyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdj
c2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIShzdGFydHNX
aXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZpbGVuYW1lLCAibnAiKSAmJiBmaWxlbmFtZS5l
bmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJkbGwiKSkKLSAgICAgICAgICAgICAgICAmJiAhKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZpbGVuYW1lLCAicGx1Z2luLmRsbCIpICYmIGRp
cmVjdG9yeS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJzaG9ja3dhdmUgMTAiKSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IGRp
cmVjdG9yeSArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5h
bWVzLmFkZChmdWxsUGF0aCkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgcGF0aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0g
ICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAg
ZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmlsZW5hbWUsICJucC1tc3dt
cC5kbGwiKSkKLSAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7Ci0K
LSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0g
MCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhzKTsKLSAgICBhZGRQbHVn
aW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0aHMpOwotCi0gICAgLy8g
SWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1
Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQg
dXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQbHVnaW5QYXRoLmlzRW1w
dHkoKSAmJiAhbmV3V01QUGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGhzLnJlbW92
ZShvbGRXTVBQbHVnaW5QYXRoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIFZlY3Rvcjxp
bnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0g
ICAgVmVjdG9yPGludD4gdmVyc2lvbjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAg
ICB1bnNpZ25lZCBlbmRQb3M7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0
cmluZy5sZW5ndGgoKSkgewotICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3Mg
PCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKLSAgICAgICAgICAgIGlmICh2ZXJz
aW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHZlcnNpb24uYXBwZW5kKHBhcnNlSW50
ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPGludD4oU3RyaW5nVmlldyB7IHZlcnNpb25TdHJpbmcg
fS5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSkudmFsdWVfb3IoMCkpOwot
ICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNp
b247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFu
IHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3Rv
cjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBp
ZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhl
IHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNv
bXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4m
IGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGly
ZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7
Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVY
VCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1
bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAg
IEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwot
ICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxl
biA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBl
eHRlbnNpb25zS2V5OwotCi0gICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAg
ICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC53aWRlQ2hh
cmFjdGVycygpLmRhdGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsKLQotICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLy8g
Tm93IGdldCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVn
aW5zRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2lu
c0RpcmVjdG9yeVNpemUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9yeVN0cik7Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFs
dWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZw
bHVnaW5zRGlyZWN0b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNpemUpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNEaXJlY3Rv
cnlTdHIsIHBsdWdpbnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAg
ICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9y
eShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgLy8gVGhlIG5ldyBXTVAgRmly
ZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBm
aW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19N
QVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVu
dmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiks
IHBsdWdpbkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIp
KTsKLQotICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlT
aXplIDw9IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgZGly
ZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9y
eVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNp
emUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVcXE1p
Y3Jvc29mdFxcTWVkaWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiLCAmdHlwZSwg
Jmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwot
Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwg
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0
cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2Jl
XFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAh
PSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07
Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNy
b2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0g
ICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAg
ICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAg
ICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAw
LCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1Mp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lv
biA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBp
ZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikp
IHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0g
ICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1l
TGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25T
dHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNy
b2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0
YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBT
dHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJl
YWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwot
ICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNy
b2JhdFBsdWdpbktleVBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIDAsICZ0eXBlLCBhY3Jv
YmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0
UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdElu
c3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAgICAg
ICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBT
dHJpbmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpCi17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5h
bWVTdHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0g
ICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAo
IWNhY2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAgICAgICBjYWNoZWRQbHVnaW5EaXJlY3Rvcnkg
PSB0cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVO
YW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9k
dWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAg
ICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVs
ZUZpbGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5z
RGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAg
IH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNEaXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRp
cmVjdG9yaWVzKQotewotICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0K
LSAgICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJB
WV9MRU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdD
SEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUo
bWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21l
ZFxcRmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlT
dHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGly
ZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9y
aWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5EaXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7Ci0g
ICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAg
IGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQo
b3VyRGlyZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoZGlyZWN0
b3JpZXMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7Ci0g
ICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAg
ICBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotCi0gICAgcmV0
dXJuIGRpcmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmcgb3Vy
RGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpOwotCi0gICAgaWYgKCFvdXJEaXJl
Y3RvcnkuaXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG91
ckRpcmVjdG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYK
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmZjVlOTQxMzE5NTBjM2Y0ZmViNzM3
NDY1MDJlNzM0NWEyNjFkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJQbHVnaW5E
ZWJ1Zy5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiAhTE9HX0RJ
U0FCTEVECi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVycm9yU3RyaW5nc1tdID0gewotICAgICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyogTlBFUlJf
Tk9fRVJST1IgKi8KLSAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2RlIG9jY3Vy
cmVkLiIsIC8qIE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KLSAgICAiSW52YWxpZCBpbnN0YW5jZSBw
YXNzZWQgdG8gdGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUiAq
LwotICAgICJGdW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfRlVOQ1RB
QkxFX0VSUk9SICovCi0gICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyogTlBFUlJf
TU9EVUxFX0xPQURfRkFJTEVEX0VSUk9SICovCi0gICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxl
ZC4iLCAvKiBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCi0gICAgIlBsdWctaW4gbWlzc2lu
ZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICovCi0gICAgIlBs
dWctaW4gZGlyZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BM
VUdJTl9ESVJfRVJST1IgKi8KLSAgICAiVmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29tbXVuaWNh
dG9yIGRvIG5vdCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9FUlJPUiAq
LwotICAgICJQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURf
UEFSQU0gKi8KLSAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1VSTCAqLwotICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9GSUxFX05P
VF9GT1VORCAqLwotICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVSUl9OT19E
QVRBICovCi0gICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9TVFJFQU1f
Tk9UX1NFRUtBQkxFICovCi0gICAgIlVua25vd24gZXJyb3IgY29kZSIKLX07Ci0KLWNvbnN0IGNo
YXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAgcmV0dXJuIGVy
cm9yU3RyaW5nc1tlcnJvcl07Ci19Ci0KLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlKQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBj
YXNlIE5QTlZ4RGlzcGxheTogcmV0dXJuICJOUE5WeERpc3BsYXkiOwotICAgIGNhc2UgTlBOVnh0
QXBwQ29udGV4dDogcmV0dXJuICJOUE5WeHRBcHBDb250ZXh0IjsKLSAgICBjYXNlIE5QTlZuZXRz
Y2FwZVdpbmRvdzogcmV0dXJuICJOUE5WbmV0c2NhcGVXaW5kb3ciOwotICAgIGNhc2UgTlBOVmph
dmFzY3JpcHRFbmFibGVkQm9vbDogcmV0dXJuICJOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sIjsK
LSAgICBjYXNlIE5QTlZhc2RFbmFibGVkQm9vbDogcmV0dXJuICJOUE5WYXNkRW5hYmxlZEJvb2wi
OwotICAgIGNhc2UgTlBOVmlzT2ZmbGluZUJvb2w6IHJldHVybiAiTlBOVmlzT2ZmbGluZUJvb2wi
OwotCi0gICAgY2FzZSBOUE5Wc2VydmljZU1hbmFnZXI6IHJldHVybiAiTlBOVnNlcnZpY2VNYW5h
Z2VyIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUE5WRE9NRWxlbWVudDogcmV0dXJuICJO
UE5WRE9NRWxlbWVudCAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTVdpbmRvdzog
cmV0dXJuICJOUE5WRE9NV2luZG93IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUE5WVG9v
bGtpdDogcmV0dXJuICJOUE5WVG9vbGtpdCAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBO
VlN1cHBvcnRzWEVtYmVkQm9vbDogcmV0dXJuICJOUE5WU3VwcG9ydHNYRW1iZWRCb29sIChub3Qg
c3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogcmV0dXJuICJOUE5W
V2luZG93TlBPYmplY3QiOwotICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogcmV0
dXJuICJOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0IjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1dp
bmRvd2xlc3M6IHJldHVybiAiTlBOVlN1cHBvcnRzV2luZG93bGVzcyI7Ci0gICAgY2FzZSBOUE5W
cHJpdmF0ZU1vZGVCb29sOiByZXR1cm4gIk5QTlZwcml2YXRlTW9kZUJvb2wiOwotCi0gICAgZGVm
YXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJpbmcgcHJl
dHR5TmFtZUZvck5QUFZhcmlhYmxlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKikKLXsKLSAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFtZVN0cmluZzogcmV0
dXJuICJOUFBWcGx1Z2luTmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luRGVzY3JpcHRp
b25TdHJpbmc6IHJldHVybiAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nIjsKLSAgICBjYXNl
IE5QUFZwbHVnaW5XaW5kb3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dCb29sIjsKLSAg
ICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblRyYW5z
cGFyZW50Qm9vbCI7Ci0KLSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVybiAiTlBQVmphdmFD
bGFzcyAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd1NpemU6IHJl
dHVybiAiTlBQVnBsdWdpbldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5Q
UFZwbHVnaW5UaW1lckludGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1lckludGVydmFsIChu
b3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlOiBy
ZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBwb3J0ZWQpIjsKLSAg
ICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRh
YmxlSUlEIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNjcmlwdFB1c2hDYWxs
ZXJCb29sOiByZXR1cm4gIk5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wgKG5vdCBzdXBwb3J0
ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5OiByZXR1cm4gIk5Q
UFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBO
UFBWcGx1Z2luTmVlZHNYRW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRzWEVtYmVkIChub3Qg
c3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Q6IHJl
dHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBjYXNlIE5QUFZmb3Jt
VmFsdWU6IHJldHVybiAiTlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2Ug
TlBQVnBsdWdpblVybFJlcXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVXJs
UmVxdWVzdHNEaXNwbGF5ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZw
bHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVnaW5XYW50c0FsbE5l
dHdvcmtTdHJlYW1zIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW06IHJldHVy
biAiTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSI7Ci0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOwotICAgIH0KLX0KLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJM
VmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJs
ZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tpZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAg
ICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJuICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZGM2YmZlOWMxYTdhYTFhODk4MzkxOWJmZTEzMmQ3Y2Q1ZWIwYzYzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1Bs
dWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
UGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVnaW5EZWJ1Z19oCi0KLSNpbmNsdWRlIDxXZWJDb3Jl
L0xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlm
IChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIExPR19WRVJCT1NFKFBsdWdpbnMsICIlc1xuIiwgcHJl
dHR5TmFtZUZvck5QRXJyb3IoZXJyKSkKLSNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBM
T0dfVkVSQk9TRShQbHVnaW5zLCAiU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBu
ZXR3b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIikK
LQotI2lmICFMT0dfRElTQUJMRUQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFy
KiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKTsKLQotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpOwotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBQVmFyaWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLUNT
dHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxl
KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRAot
Ci0jZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vUGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MjY2NmJkNTQ4NGI4NzE0OTkxMDcyY2UyMjRkZDUy
ZDA4NTFjMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1QbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyJiBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpzY2hlZHVsZXIoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyPiBzY2hlZHVsZXI7Ci0gICAgcmV0dXJuIHNjaGVkdWxlcjsK
LX0KLQotUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6UGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
cigpCi0gICAgOiBtX2NhbGxQZW5kaW5nKGZhbHNlKQotewotfQotCi12b2lkIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlQ2FsbChOUFAgbnBwLCBNYWluVGhyZWFkRnVuY3Rpb24g
ZnVuY3Rpb24sIHZvaWQqIHVzZXJEYXRhKQotewotICAgIExvY2tlciBsb2NrZXIgeyBtX3F1ZXVl
TXV0ZXggfTsKLQotICAgIENhbGxRdWV1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NhbGxRdWV1ZU1h
cC5maW5kKG5wcCk7Ci0gICAgaWYgKGl0ID09IG1fY2FsbFF1ZXVlTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpdC0+dmFsdWUuYXBwZW5kKENhbGwoZnVuY3Rpb24sIHVzZXJEYXRh
KSk7Ci0KLSAgICBpZiAoIW1fY2FsbFBlbmRpbmcpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpc10gewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxscygpOwotICAgICAgICB9KTsKLSAg
ICAgICAgbV9jYWxsUGVuZGluZyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OnJlZ2lzdGVyUGx1Z2luKE5QUCBucHApCi17Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IG1fcXVldWVNdXRleCB9OwotCi0gICAgQVNTRVJUKCFtX2NhbGxRdWV1ZU1hcC5jb250
YWlucyhucHApKTsKLSAgICBtX2NhbGxRdWV1ZU1hcC5zZXQobnBwLCBEZXF1ZTxDYWxsPigpKTsK
LX0KLQotdm9pZCBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjp1bnJlZ2lzdGVyUGx1Z2luKE5Q
UCBucHApCi17Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fcXVldWVNdXRleCB9OwotCi0gICAgQVNT
RVJUKG1fY2FsbFF1ZXVlTWFwLmNvbnRhaW5zKG5wcCkpOwotICAgIG1fY2FsbFF1ZXVlTWFwLnJl
bW92ZShucHApOwotfQotCi12b2lkIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OmRpc3BhdGNo
Q2FsbHNGb3JQbHVnaW4oTlBQIG5wcCwgY29uc3QgRGVxdWU8Q2FsbD4mIGNhbGxzKQotewotICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxzKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwbHVn
LWluIGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAgICAgICAgewotICAgICAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IG1fcXVldWVNdXRleCB9OwotICAgICAgICAgICAgaWYgKCFtX2NhbGxRdWV1ZU1hcC5j
b250YWlucyhucHApKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhbGwucGVyZm9ybUNhbGwoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlcjo6ZGlzcGF0Y2hDYWxscygpCi17Ci0gICAgbV9xdWV1ZU11dGV4LmxvY2soKTsK
LSAgICBDYWxsUXVldWVNYXAgY29weShtX2NhbGxRdWV1ZU1hcCk7Ci0KLSAgICAvLyBFbXB0eSBh
bGwgdGhlIHF1ZXVlcyBpbiB0aGUgb3JpZ2luYWwgbWFwCi0gICAgZm9yIChhdXRvJiBjYWxsIDog
bV9jYWxsUXVldWVNYXAudmFsdWVzKCkpCi0gICAgICAgIGNhbGwuY2xlYXIoKTsKLQotICAgIG1f
Y2FsbFBlbmRpbmcgPSBmYWxzZTsKLSAgICBtX3F1ZXVlTXV0ZXgudW5sb2NrKCk7Ci0KLSAgICBm
b3IgKGF1dG8mIGVudHJ5IDogY29weSkKLSAgICAgICAgZGlzcGF0Y2hDYWxsc0ZvclBsdWdpbihl
bnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzczMWE2ODlm
NWJkNmY3YWNmMGVmOTc1ZWNjMTYxNTQ0NmMyM2VmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotCi10eXBlZGVmIHN0cnVjdCBfTlBQIE5QUF90OwotdHlwZWRl
ZiBOUFBfdCogTlBQOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIHZvaWQgTWFpblRocmVhZEZ1bmN0aW9uKHZvaWQqKTsKLQotICAgIHN0YXRpYyBQbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyJiBzY2hlZHVsZXIoKTsKLQotICAgIHZvaWQgc2NoZWR1bGVDYWxs
KE5QUCwgTWFpblRocmVhZEZ1bmN0aW9uKiwgdm9pZCogdXNlckRhdGEpOwotCi0gICAgdm9pZCBy
ZWdpc3RlclBsdWdpbihOUFApOwotICAgIHZvaWQgdW5yZWdpc3RlclBsdWdpbihOUFApOwotCi1w
cml2YXRlOgotICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxQbHVnaW5NYWluVGhyZWFkU2NoZWR1
bGVyPjsKLSAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyKCk7Ci0gICAgdm9pZCBkaXNwYXRj
aENhbGxzKCk7Ci0KLSAgICBjbGFzcyBDYWxsOwotCi0gICAgdm9pZCBkaXNwYXRjaENhbGxzRm9y
UGx1Z2luKE5QUCwgY29uc3QgRGVxdWU8Q2FsbD4mIGNhbGxzKTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8TlBQLCBEZXF1ZTxDYWxsPj4gQ2FsbFF1ZXVlTWFwOwotCi0gICAgY2xhc3MgQ2FsbCB7Ci0g
ICAgcHVibGljOgotICAgICAgICBDYWxsKE1haW5UaHJlYWRGdW5jdGlvbiogZnVuY3Rpb24sIHZv
aWQqIHVzZXJEYXRhKQotICAgICAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAg
ICAgICAgLCBtX3VzZXJEYXRhKHVzZXJEYXRhKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHBlcmZvcm1DYWxsKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgbV9m
dW5jdGlvbihtX3VzZXJEYXRhKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TWFpblRocmVhZEZ1bmN0aW9uKiBtX2Z1bmN0aW9uOwotICAgICAgICB2b2lkKiBtX3VzZXJEYXRh
OwotICAgIH07Ci0KLSAgICBib29sIG1fY2FsbFBlbmRpbmc7Ci0gICAgQ2FsbFF1ZXVlTWFwIG1f
Y2FsbFF1ZXVlTWFwOwotICAgIExvY2sgbV9xdWV1ZU11dGV4OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9Q
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkYmUzYTczZWJmODZjM2ZlYzVkNmI5YWJjOTRhYjhmYjNhYmRkNzYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vUGx1Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4uaCIKLQotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gU2V0IGEgdGltZXIgdG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVl
ZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVyeSAxNm1zLgotLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxh
c2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbwot
Ly8gcGxheWJhY2ssIGFuZCBhbHNvIGdldHMgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcg
aW50byBoaWdoLXJlc29sdXRpb24KLS8vIHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5j
cHApLgotc3RhdGljIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRocm90dGxlVGltZUludGVydmFsIHsg
MTZfbXMgfTsKLQotLy8gRHVyaW5nIGEgY29udGludW91cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHBy
b2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KLXN0YXRpYyBjb25zdCBTZWNvbmRzIE1lc3NhZ2VEaXJlY3RQ
cm9jZXNzaW5nSW50ZXJ2YWwgeyA1X21zIH07Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46
OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oUGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAgICA6
IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zyb250
KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKLXsKLSAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmVlIGxpc3Qgd2l0aCBvdXIgaW5saW5lIG1lc3NhZ2VzCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3NhZ2VzIC0gMTsgaSsrKQotICAgICAgICBtX2lu
bGluZU1lc3NhZ2VzW2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07Ci0gICAgbV9p
bmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdLm5leHQgPSAwOwotICAgIG1fZnJl
ZUlubGluZU1lc3NhZ2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07Ci19Ci0KLVBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKCkKLXsKLSAgICBQbHVn
aW5NZXNzYWdlKiBuZXh0OwotCi0gICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9m
cm9udDsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IG1lc3NhZ2Ut
Pm5leHQ7Ci0gICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0KLX0KLQotdm9pZCBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjphcHBlbmRNZXNzYWdlKEhXTkQgaFduZCwgVUlOVCBt
c2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOwotCi0gICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7
Ci0gICAgbWVzc2FnZS0+bXNnID0gbXNnOwotICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsK
LSAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07Ci0gICAgbWVzc2FnZS0+bmV4dCA9IDA7Ci0K
LSAgICBpZiAobV9iYWNrKQotICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOwotICAgIG1f
YmFjayA9IG1lc3NhZ2U7Ci0gICAgaWYgKCFtX2Zyb250KQotICAgICAgICBtX2Zyb250ID0gbWVz
c2FnZTsKLQotICAgIC8vIElmIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBNZXNzYWdlRGlyZWN0UHJv
Y2Vzc2luZ0ludGVydmFsIGJldHdlZW4gdGhyb3R0bGVkIG1lc3NhZ2VzLAotICAgIC8vIGdvIGFo
ZWFkIGFuZCBwcm9jZXNzIGEgbWVzc2FnZSBkaXJlY3RseS4KLSAgICBNb25vdG9uaWNUaW1lIGN1
cnJlbnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIC0g
bV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7Ci0g
ICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VUaW1l
ID0gY3VycmVudFRpbWU7Ci0gICAgICAgIGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QobWVzc2FnZVRocm90
dGxlVGltZUludGVydmFsKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpw
cm9jZXNzUXVldWVkTWVzc2FnZSgpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1f
ZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1fZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2UgPT0g
bV9iYWNrKQotICAgICAgICBtX2JhY2sgPSAwOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdo
aWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMw
MjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAg
OjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+
aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0j
ZW5kaWYKLQotICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIFBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQoKQotewotICAgIHByb2Nl
c3NRdWV1ZWRNZXNzYWdlKCk7Ci0KLSAgICBpZiAobV9mcm9udCkKLSAgICAgICAgbV9tZXNzYWdl
VGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QobWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsK
LX0KLQotUGx1Z2luTWVzc2FnZSogUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6YWxsb2NhdGVN
ZXNzYWdlKCkKLXsKLSAgICBQbHVnaW5NZXNzYWdlICptZXNzYWdlOwotCi0gICAgaWYgKG1fZnJl
ZUlubGluZU1lc3NhZ2VzKSB7Ci0gICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdl
czsKLSAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlLT5uZXh0OwotICAgIH0g
ZWxzZQotICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7Ci0KLSAgICByZXR1cm4g
bWVzc2FnZTsKLX0KLQotYm9vbCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjppc0lubGluZU1l
c3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gbWVzc2FnZSA+PSAm
bV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051bUlu
bGluZU1lc3NhZ2VzIC0gMV07Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
ZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKLXsKLSAgICBpZiAoaXNJbmxpbmVN
ZXNzYWdlKG1lc3NhZ2UpKSB7Ci0gICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVN
ZXNzYWdlczsKLSAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlOwotICAgIH0g
ZWxzZQotICAgICAgICBkZWxldGUgbWVzc2FnZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3
OWZlNjJiZmQ4NDU5OWIyNGRjMmQ5NWM2OGM1MWUyMTUwM2MzMS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVn
aW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faAotI2RlZmluZSBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4K
LQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNz
IFBsdWdpblZpZXc7Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7Ci0gICAgICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgSFdORCBoV25kOwotICAgICAgICBV
SU5UIG1zZzsKLSAgICAgICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBBUkFNIGxQYXJhbTsK
LQotICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9OwotCi0gICAgY2xh
c3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQ
bHVnaW5WaWV3Kik7Ci0gICAgICAgIH5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKCk7Ci0KLSAg
ICAgICAgdm9pZCBhcHBlbmRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSk7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7Ci0g
ICAgICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpOwotICAgICAgICBQbHVnaW5N
ZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKTsKLSAgICAgICAgYm9vbCBpc0lubGluZU1lc3NhZ2Uo
UGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7Ci0gICAgICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2lu
TWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgICAgICAgUGx1Z2luVmlldyogbV9wbHVnaW5WaWV3Owot
ICAgICAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1f
ZnJvbnQ7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7
Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdl
c107Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOwotCi0gICAg
ICAgIFRpbWVyIG1fbWVzc2FnZVRocm90dGxlVGltZXI7Ci0gICAgICAgIE1vbm90b25pY1RpbWUg
bV9sYXN0TWVzc2FnZVRpbWU7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzA4NWI3MTY0OTkyODE0MmNhNjI4NDA3NTJiNDViYjRkZTM4OTAxYy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0KLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVS
ZWdpc3RyeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9jX3V0aWxpdHkuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL25wcnVudGltZV9pbXBsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jv
b3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2Uo
KQotewotICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgp
IGlmIFBsdWdpbkRhdGFiYXNlJ3MKLSAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBv
cHVsYXRlZCwgYXMgaXQgcmVtb3ZlcyBpdGVtcyBmcm9tCi0gICAgLy8gdGhlIGhhc2ggdGFibGUu
IENhbGxpbmcgdGhlIGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgotICAgIC8vIGNv
dXJzZSB3b3VsZCBjYXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZv
cmUgd2UKLSAgICAvLyBBU1NFUlQuCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEg
YmV0dGVyIHdheSB0byBmaXggdGhpcy4KLSAgICBpZiAoIW1fbG9hZENvdW50KQotICAgICAgICB1
bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICBlbHNlCi0gICAgICAgIHVubG9hZCgpOwotCi0g
ICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVNvb24oKQotewotICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkp
OwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0gICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7Ci0KLSAg
ICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUp
OwotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53
aGlsZQotICAgIGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAgOjpGcmVlTGlicmFyeShtX21v
ZHVsZSk7Ci0gICAgICAgIG1fbW9kdWxlID0gMDsKLSAgICB9Ci19Ci0KLQotaW50IFBsdWdpblBh
Y2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewot
ICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3Qu
Ci0gICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dz
TXVsdGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJ
bnN0YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFs
bG93c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBp
biBhIHByZWZlcnJlZCBwYXRoIGZpcnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3Rv
cnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGly
ZWN0b3J5KCkpOwotICAgIGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRh
YmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9y
eSgpKTsKLSAgICBpZiAoQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWRE
aXJlY3RvcnkpCi0gICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDog
MTsKLQotICAgIGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJl
VG8ubmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChkaWZmKQotICAgICAgICByZXR1cm4g
ZGlmZjsKLQotICAgIGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24o
KSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgcmV0dXJuIHN0
cmNtcChwYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGly
ZWN0b3J5KCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2th
Z2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLSAgICA6
IG1faXNFbmFibGVkKHRydWUpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2Fk
Q291bnQoMCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCi0g
ICAgLCBtX21vZHVsZSgwKQotICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAg
ICwgbV9mcmVlTGlicmFyeVRpbWVyKCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlU
aW1lckZpcmVkKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0g
ICAgLCBtX2luZm9Jc0Zyb21DYWNoZSh0cnVlKQotI2VuZGlmCi17Ci0gICAgbV9maWxlTmFtZSA9
IEZpbGVTeXN0ZW06OnBhdGhGaWxlTmFtZShtX3BhdGgpOwotICAgIG1fcGFyZW50RGlyZWN0b3J5
ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEp
OwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9h
ZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fTlBQ
X1NodXRkb3duKCk7Ci0jZW5kaWYKLQotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotfQot
Ci12b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCi17Ci0gICAgaWYg
KCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1fbG9hZENvdW50
KTsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotCi0gICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jh
c2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8v
IElmIHRoZSBwbHVnaW4gaGFzIHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGgg
UmVhZGVyIDcsIHdlIG1heSBoYXZlCi0gICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBw
bHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIK
LSAgICAvLyBvcmlnaW5hbCB3aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJh
cnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1bXAgYmFjawotICAgIC8vIHRvIGNvZGUgd2UganVzdCBm
cmVlZCB3aGVuIHdlIHJldHVybiwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFz
dCB1bnRpbAotICAgIC8vIHRoZSBuZXh0IG1lc3NhZ2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29v
bigpOwotCi0gICAgbV9pc0xvYWRlZCA9IGZhbHNlOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6
OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsK
LX0KLQotUmVmUHRyPFBsdWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2Uo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBS
ZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdl
KHBhdGgsIGxhc3RNb2RpZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcGFja2FnZTsKLX0KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1SZWY8UGx1Z2luUGFja2Fn
ZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQotewot
ICAgIFJlZjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYoKm5ldyBQbHVnaW5QYWNr
YWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOwotICAgIHBhY2thZ2UtPm1fbmFtZSA9IG5hbWU7Ci0g
ICAgcGFja2FnZS0+bV9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIHBhY2thZ2UtPmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKLSAgICBwYWNrYWdlLT5zZXRN
SU1FRGVzY3JpcHRpb24obWltZURlc2NyaXB0aW9uKTsKLSAgICBwYWNrYWdlLT5tX2luZm9Jc0Zy
b21DYWNoZSA9IHRydWU7Ci0gICAgcmV0dXJuIHBhY2thZ2U7Ci19Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21WYXJpYW50
QXJncyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBOUFZh
cmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0
KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxpc3QuYXBw
ZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGxleGljYWxHbG9iYWxP
YmplY3QsICZhcmdzW2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9FdmFs
dWF0ZShOUFAgaW5zdGFuY2UsIE5QT2JqZWN0KiBvLCBOUFN0cmluZyogcywgTlBWYXJpYW50KiB2
YXJpYW50KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewot
ICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3Jp
cHRPYmplY3QqPihvKTsKLQotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJv
b3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAvLyBUaGVyZSBpcyBhIGNyYXNoIGluIEZsYXNoIHdoZW4gZXZhbHVhdGluZyBhIHNjcmlwdCB0
aGF0IGRlc3Ryb3lzIHRoZQotICAgICAgICAvLyBQbHVnaW5WaWV3LCBzbyB3ZSBkZXN0cm95IGl0
IGFzeW5jaHJvbm91c2x5LgotICAgICAgICBQbHVnaW5WaWV3OjprZWVwQWxpdmUoaW5zdGFuY2Up
OwotCi0gICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwotCi0gICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSBy
ZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBKU0M6Om1ha2VTb3VyY2Uo
c2NyaXB0U3RyaW5nLCB7IH0pLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgSlNDOjpCaW5k
aW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZ2xvYmFsT2JqZWN0LCByZXR1cm5WYWx1ZSwg
dmFyaWFudCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIFZPSURfVE9fTlBWQVJJQU5UKCp2YXJpYW50KTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmpl
Y3QqIG8sIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVp
bnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoby0+X2NsYXNz
ID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2Jq
ID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0KLSAgICAgICAgSWRl
bnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihtZXRob2ROYW1lKTsK
LSAgICAgICAgaWYgKCFpLT5pc1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgImV2YWwiIG1ldGhvZC4KLSAgICAgICAgaWYg
KG1ldGhvZE5hbWUgPT0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKCJldmFsIikpIHsKLSAgICAg
ICAgICAgIGlmIChhcmdDb3VudCAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChhcmdzWzBdLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
Ok5QTl9FdmFsdWF0ZShucHAsIG8sIGNvbnN0X2Nhc3Q8TlBTdHJpbmcqPigmYXJnc1swXS52YWx1
ZS5zdHJpbmdWYWx1ZSksIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBMb29rIHVw
IHRoZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Qq
IHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7Ci0gICAgICAgIGlmICghcm9vdE9iamVjdCB8
fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7Ci0g
ICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwotCi0gICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+
aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpCaW5kaW5nczo6aWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKLSAgICAg
ICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7Ci0gICAgICAgIGlm
IChjYWxsRGF0YS50eXBlID09IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0Lgot
ICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAgIGdldExp
c3RGcm9tVmFyaWFudEFyZ3MobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJv
b3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG9iai0+aW1wLCBh
cmdMaXN0KTsKLQotICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0
aGUgZnVuY3Rpb24gY2FsbC4KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9O
UFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKG8tPl9jbGFzcy0+aW52b2tlKQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5pbnZv
a2UobywgbWV0aG9kTmFtZSwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7Ci0KLSAgICBWT0lEX1RP
X05QVkFSSUFOVCgqcmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5Q
YWNrYWdlOjppbml0aWFsaXplQnJvd3NlckZ1bmNzKCkKLXsKLSAgICBtZW1zZXQoJm1fYnJvd3Nl
ckZ1bmNzLCAwLCBzaXplb2YobV9icm93c2VyRnVuY3MpKTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5z
aXplID0gc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKTsKLSAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9u
ID0gTlBWZXJzaW9uKCk7Ci0KLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJM
OwotICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0g
TlBOX1dyaXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJv
eVN0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOwotICAgIG1f
YnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7Ci0gICAgbV9icm93c2VyRnVuY3Mu
bWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Ci0gICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5Q
Tl9NZW1GcmVlOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOwot
ICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OwotICAgIG1f
YnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5z
ZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVj
dCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVn
aW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247Ci0gICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRy
YXcgPSBOUE5fRm9yY2VSZWRyYXc7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5Q
Tl9HZXRKYXZhRW52OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEph
dmFQZWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5f
UHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFi
bGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOwotICAgIG1fYnJvd3NlckZ1bmNz
LnBsdWdpbnRocmVhZGFzeW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGw7Ci0KLSAg
ICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFu
dFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmll
cnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldGlu
dGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3Mu
aWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7Ci0gICAgbV9icm93
c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0g
ICAgbV9icm93c2VyRnVuY3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlm
aWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0
OwotICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0Owot
ICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7Ci0g
ICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gV2ViQ29yZTo6TlBOX0ludm9rZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OwotICAgIG1fYnJv
d3NlckZ1bmNzLmV2YWx1YXRlID0gV2ViQ29yZTo6TlBOX0V2YWx1YXRlOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MucmVt
b3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLmhh
c3Byb3BlcnR5ID0gX05QTl9IYXNQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRo
b2QgPSBfTlBOX0hhc01ldGhvZDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBf
TlBOX1NldEV4Y2VwdGlvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0Vu
dW1lcmF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBfTlBOX0NvbnN0cnVjdDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZWZvcnVybCA9IE5QTl9HZXRWYWx1ZUZvclVSTDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZvclVSTDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRhdXRoZW50aWNhdGlvbmluZm8gPSBOUE5fR2V0QXV0aGVu
dGljYXRpb25JbmZvOwotCi0gICAgbV9icm93c2VyRnVuY3MucG9wdXBjb250ZXh0bWVudSA9IE5Q
Tl9Qb3BVcENvbnRleHRNZW51OwotfQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRm
b3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0gICAgLy8gcmV0dXJu
IC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBv
ciBncmVhdGVyIHRoYW4KLSAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQotICAgIGlmIChtX21v
ZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5tb3N0U2lnKQotICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5tb3N0U2lnID8g
MSA6IC0xOwotICAgIGlmIChtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgIT0gY29tcGFyZVZlcnNp
b24ubGVhc3RTaWcpCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPiBj
b21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEgOiAtMTsKLQotICAgIHJldHVybiAwOwotfQotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLWJvb2wgUGx1Z2luUGFj
a2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKCkKLXsKLSAgICBpZiAoIW1faW5mb0lzRnJvbUNhY2hl
KQotICAgICAgICByZXR1cm4gbV9pc0xvYWRlZDsKLQotICAgIG1fcXVpcmtzID0gUGx1Z2luUXVp
cmtTZXQoKTsKLSAgICBtX25hbWUgPSBTdHJpbmcoKTsKLSAgICBtX2Rlc2NyaXB0aW9uID0gU3Ry
aW5nKCk7Ci0gICAgbV9mdWxsTUlNRURlc2NyaXB0aW9uID0gU3RyaW5nKCk7Ci0gICAgbV9tb2R1
bGVWZXJzaW9uID0gMDsKLQotICAgIHJldHVybiBmZXRjaEluZm8oKTsKLX0KLSNlbmRpZgotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblBhY2th
Z2UuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk1NGVmZjQwNDg3ZWM3ZTI2YTViOTA1NmU5
MDAxMWY1NzYzYTU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUGFja2FnZV9oCi0jZGVm
aW5lIFBsdWdpblBhY2thZ2VfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb2R1bGUuaCIKLSNpbmNs
dWRlICJQbHVnaW5RdWlya1NldC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNs
dWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKLQotICAgIGNsYXNzIFBsdWdpblBhY2th
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7Ci0gICAgcHVibGljOgotICAg
ICAgICB+UGx1Z2luUGFja2FnZSgpOwotICAgICAgICBzdGF0aWMgUmVmUHRyPFBsdWdpblBhY2th
Z2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAg
ICAgICAgc3RhdGljIFJlZjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVz
Y3JpcHRpb24pOwotI2VuZGlmCi0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24oKSBj
b25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcm
IHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9Ci0g
ICAgICAgIFBsYXRmb3JtTW9kdWxlIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlOyB9
Ci0gICAgICAgIHVpbnQxNl90IE5QVmVyc2lvbigpIGNvbnN0OwotICAgICAgICB0aW1lX3QgbGFz
dE1vZGlmaWVkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TW9kaWZpZWQ7IH0KLQotICAgICAgICBj
b25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9Ci0gICAgICAgIGNvbnN0IE1JTUVUb0V4dGVu
c2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVu
c2lvbnM7IH0KLQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2Um
IGIpOwotCi0gICAgICAgIGJvb2wgbG9hZCgpOwotICAgICAgICB2b2lkIHVubG9hZCgpOwotICAg
ICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotCi0gICAgICAgIGJvb2wgaXNFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWQ7IH0KLSAgICAgICAgdm9pZCBzZXRFbmFi
bGVkKGJvb2wpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGNv
bnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2lu
RnVuY3M7IH0KLSNlbmRpZgotICAgICAgICBpbnQgY29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiYpIGNvbnN0OwotICAgICAgICBpbnQgY29tcGFyZShjb25zdCBQ
bHVnaW5QYWNrYWdlJikgY29uc3Q7Ci0gICAgICAgIFBsdWdpblF1aXJrU2V0IHF1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIG1fcXVpcmtzOyB9Ci0gICAgICAgIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVy
c2lvbiYgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbjsgfQotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgYm9vbCBlbnN1
cmVQbHVnaW5Mb2FkZWQoKTsKLSAgICAgICAgdm9pZCBzZXRNSU1FRGVzY3JpcHRpb24oY29uc3Qg
U3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pOwotICAgICAgICBTdHJpbmcgZnVsbE1JTUVEZXNjcmlw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjt9Ci0jZW5kaWYKLSAg
ICBwcml2YXRlOgotICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0g
ICAgICAgIGJvb2wgaXNQbHVnaW5Gb3JiaWRkZW4oKTsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVR
dWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1pbmVN
b2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJy
b3dzZXJGdW5jcygpOwotCi0gICAgICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJvb2wg
bV9pc0xvYWRlZDsKLSAgICAgICAgaW50IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmluZyBt
X2Rlc2NyaXB0aW9uOwotICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcgbV9m
aWxlTmFtZTsKLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFyZW50
RGlyZWN0b3J5OwotCi0gICAgICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNp
b247Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25z
OwotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAg
ICAgICBQbGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1vZGlm
aWVkOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9TaHV0
ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVn
aW5GdW5jczsKLSAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2VuZGlm
Ci0KLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwotCi0g
ICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247
Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNGcm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2gg
aXMgYnJva2VuIGFuZCBtYXkgY29uc2lkZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMg
ZXF1YWwuCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxS
ZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2gg
ewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KLSAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBr
ZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgdWludHB0cl90IGEsIGNvbnN0IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWlu
dGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5Q
YWNrYWdlKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVy
biBQbHVnaW5QYWNrYWdlOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0g
ICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGI0YWE4OTE1ZjYwOGVkMWMwN2NiM2IxZDE5Mjg3N2E3
OTg3ZjU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCi0KLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVn
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbmNs
dWRlIDxzaGx3YXBpLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2ZXJz
aW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKLXsKLSAgICBMUFZPSUQgYnVmZmVyOwot
ICAgIFVJTlQgYnVmZmVyTGVuZ3RoOwotICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5nZmls
ZUluZm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKLSAgICBib29sIHJldHZhbCA9IFZlclF1ZXJ5VmFs
dWVXKHZlcnNpb25JbmZvRGF0YSwKLSAgICAgICAgc3ViSW5mby53aWRlQ2hhcmFjdGVycygpLmRh
dGEoKSwKLSAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFyZXR2YWwg
fHwgYnVmZmVyTGVuZ3RoID09IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8v
IFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBu
dWxsIGNoYXJhY3Rlci4KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIq
PihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpp
c1BsdWdpbkZvcmJpZGRlbigpCi17Ci0gICAgaWYgKG5hbWUoKSA9PSAiQ2l0cml4IElDQSBDbGll
bnQiKSB7Ci0gICAgICAgIC8vIFRoZSBDaXRyaXggSUNBIENsaWVudCBwbHVnLWluIHJlcXVpcmVz
IGEgTW96aWxsYS1iYXNlZCBicm93c2VyOyBzZWUgPHJkYXI6Ly82NDE4NjgxPi4KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1
Zy1JbiIpIHsKLSAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFz
aCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KLSAgICAgICAgLy8g
dGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2Ug
dGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKLSAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9u
cwotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2luTWlu
UmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVG
aWxlVmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZpbGVO
YW1lKCksICJucG1vemF4LmRsbCIpKSB7Ci0gICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBB
Y3RpdmVYIGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmaWxlTmFtZSgpLCAibnB3cGYuZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDU3MTE5
OiBNaWNyb3NvZnQgV2luZG93cyBQcmVzZW50YXRpb24gRm91bmRhdGlvbiAoV1BGKSBwbHVnLWlu
IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKG5hbWUoKSA9PSAiWWFob28gQXBwbGljYXRpb24gU3RhdGUgUGx1Z2lu
IikgewotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjY4NjAKLSAgICAgICAgLy8gQnVnIGluIFlhaG9vIEFwcGxpY2F0aW9uIFN0YXRlIHBsdWctaW4g
ZWFybGllciB0aGFuIDEuMC4wLjYgbGVhZHMgdG8gaGVhcCBjb3JydXB0aW9uLiAKLSAgICAgICAg
c3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiB5YWhvb0FwcFN0YXRlUGx1Z2luTWlu
UmVxdWlyZWQoMHgwMDAwMDAwNiwgMHgwMDAxMDAwMCk7Ci0gICAgICAgIGlmIChjb21wYXJlRmls
ZVZlcnNpb24oeWFob29BcHBTdGF0ZVBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1
Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0g
ICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24o
MHgwMDAwMDAwMCwgMHgwMDBhMDAwMCk7Ci0KLSAgICAgICAgLy8gUHJlIDEwIEZsYXNoIG9ubHkg
cmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBh
Z2VudAotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikgPCAw
KQotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFn
ZW50KTsKLQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRh
dGUpOwotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNP
bmVNZXNzYWdlcyk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90
aWZ5QnVnKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAm
JiBuYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgewotICAgICAgICAvLyBUaGUgV01Q
IHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5k
IG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCi0gICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdo
ZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAgICAgLy8gV2lu
ZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28g
anVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCi0gICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0
IHRvIHRoZSBwbHVnLWluLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVX
aW5kb3dsZXNzVmlkZW9QYXJhbSk7Ci0KLSAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3Nh
Z2UgbG9vcCB0aGF0IGl0IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCi0gICAgICAgIC8v
IGFzayBpdCB0byBwYWludC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRv
IG90aGVyCi0gICAgICAgIC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBh
cmUgbm90IGV4cGVjdGluZyB0aGVtIChmb3IKLSAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmlu
ZyBhIFdNX1BBSU5UIG1lc3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCi0gICAgICAg
IC8vIGNhbiBjYXVzZSBjcmFzaGVzLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtI
YXNNb2RhbE1lc3NhZ2VMb29wKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJWTEMgTXVs
dGltZWRpYSBQbHVnaW4iIHx8IG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Zy1pbiIpIHsK
LSAgICAgICAgLy8gVkxDIGhhbmdzIG9uIE5QUF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdp
bmRvdyB3aXRoIGEgbnVsbCB3aW5kb3cgaGFuZGxlCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KTsKLQotICAgICAgICAvLyBW
TEMgMC44LjZkIGFuZCAwLjguNmUgY3Jhc2ggaWYgbXVsdGlwbGUgaW5zdGFuY2VzIGFyZSBjcmVh
dGVkLgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTc3MzA3MD4gdHJhY2tzIGFsbG93aW5n
IG11bHRpcGxlIGluc3RhbmNlcyB3aGVuIHRoaXMKLSAgICAgICAgLy8gYnVnIGlzIGZpeGVkLgot
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNl
cyk7Ci0gICAgfQotCi0gICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhl
IGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28K
LSAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0
IHNpemUKLSAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQotICAgICAgICBtX3F1aXJr
cy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJp
bmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgotICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNz
ZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9i
amVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCi0gICAgLy8gVGh1cywgd2UgZG9uJ3Qga25v
dyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4g
aW5zdGFuY2UgZ29lcyBhd2F5LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4u
Ci0gICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKLSAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAg
ICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZN
cywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3
ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2Ug
dG8gb3VyIG9ubHkgVk0KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9h
ZFBsdWdpbik7Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBl
bXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAg
ICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotICAgIH0KLQotICAgIGlmICht
aW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgewotICAgICAgICAvLyBQ
cmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vy
c2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KLSAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7
Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBsYXN0S25vd25V
bmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24oMHgwMDBCMEIyNCwgMHgwMDA2MDAwMCk7Ci0KLSAg
ICAgICAgLy8gVW5sb2FkaW5nIFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNh
biBjYXVzZSBhIGhhbmc7IHNlZSByZGFyOi8vNTY2OTMxNy4KLSAgICAgICAgLy8gRklYTUU6IFJl
c3VtZSB1bmxvYWRpbmcgd2hlbiB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlz
IGZpeGVkIChyZGFyOi8vNTcxMzE0NykKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihs
YXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24pID4gMCkKLSAgICAgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOwotICAgIH0KLX0KLQotYm9v
bCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQotewotICAgIERXT1JEIHZlcnNpb25JbmZvU2l6
ZSwgemVyb0hhbmRsZTsKLSAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9T
aXplVyhtX3BhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksICZ6ZXJvSGFuZGxlKTsKLSAgICBp
ZiAodmVyc2lvbkluZm9TaXplID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZl
Y3RvcjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEodmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICgh
R2V0RmlsZVZlcnNpb25JbmZvVyhtX3BhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRhKCksIDAsIHZl
cnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmRhdGEoKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fbmFtZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5kYXRh
KCksICJQcm9kdWN0TmFtZSIpOwotICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2
ZXJzaW9uSW5mb0RhdGEuZGF0YSgpLCAiRmlsZURlc2NyaXB0aW9uIik7Ci0gICAgaWYgKG1fbmFt
ZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOwotICAgIFVJTlQgaW5mb1NpemU7Ci0g
ICAgaWYgKCFWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEuZGF0YSgpLCBMIlxcIiwgKExQ
Vk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklM
RUlORk8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2R1bGVWZXJzaW9uLmxlYXN0
U2lnID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwotICAgIG1fbW9kdWxlVmVyc2lvbi5tb3N0U2ln
ID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOwotCi0gICAgaWYgKGlzUGx1Z2luRm9yYmlkZGVuKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gZ2V0
VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmRhdGEoKSwgIk1JTUVUeXBlIikuc3BsaXQoJ3wn
KTsKLSAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25MaXN0cyA9IGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YS5kYXRhKCksICJGaWxlRXh0ZW50cyIpLnNwbGl0KCd8Jyk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gZGVzY3JpcHRpb25zID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRh
LmRhdGEoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8Jyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0
eXBlc1tpXS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24gPSBpIDwgZGVzY3JpcHRpb25zLnNpemUoKSA/IGRlc2NyaXB0aW9uc1tpXSA6ICIiOwot
ICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uTGlzdCA9IGkgPCBleHRlbnNpb25MaXN0cy5zaXplKCkg
PyBleHRlbnNpb25MaXN0c1tpXSA6ICIiOwotCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVu
c2lvbnNWZWN0b3IgPSBleHRlbnNpb25MaXN0LnNwbGl0KCcsJyk7Ci0KLSAgICAgICAgLy8gR2V0
IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0aGUg
ZGVzY3JpcHRpb24gc3RyaW5nLgotICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgi
KCoiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUgbWln
aHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAgIGlm
IChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAgICAg
ICBwb3MtLTsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChwb3Mp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRoZSBN
SU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWlya3Mo
dHlwZSk7Ci0KLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNpb25z
VmVjdG9yKTsKLSAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2NyaXB0
aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdl
Ojpsb2FkKCkKLXsKLSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3Ao
KTsKLSAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtzLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07
Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50
UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBhdGgg
PSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAgICAg
ICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGgud2lkZUNoYXJhY3RlcnMoKS5kYXRh
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxp
YnJhcnkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC53aWRlQ2hh
cmFjdGVycygpLmRhdGEoKSwgMCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOwotCi0g
ICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAg
ICAgICAgIGlmIChtX21vZHVsZSkKLSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9k
dWxlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbV9tb2R1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQg
PSB0cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRz
ID0gMDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBO
UEVycm9yIG5wRXJyID0gTlBFUlJfTk9fRVJST1I7Ci0KLSAgICBOUF9Jbml0aWFsaXplID0gKE5Q
X0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6
ZSIpOwotICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilH
ZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVudHJ5UG9pbnRzIik7Ci0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3du
UHJvY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7Ci0KLSAgICBp
ZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93
bikKLSNlbHNlCi0gICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cykK
LSNlbmRpZgotICAgICAgICBnb3RvIGFib3J0OwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5j
cykpOwotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKLQot
ICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3MpOwotICAgIExPR19O
UEVSUk9SKG5wRXJyKTsKLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAg
IGdvdG8gYWJvcnQ7Ci0KLSAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7Ci0KLSAgICBucEVy
ciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKLSAgICBMT0dfTlBFUlJPUihucEVy
cik7Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJv
cnQ7Ci0jZW5kaWYKLSAgICBtX2xvYWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotCi1hYm9y
dDoKLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoteyAKLSAgICBjb25zdCB1bnNp
Z25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAgbV9uYW1lLmltcGwoKS0+aGFzaCgpLAotICAg
ICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAotICAgICAgICBtX21pbWVUb0V4dGVu
c2lvbnMuc2l6ZSgpCi0gICAgfTsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2Fn
ZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikK
LXsKLSAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0gYi5tX2Rlc2NyaXB0aW9uKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpICE9IGIu
bV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBlbmQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChh
dXRvIGl0ID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoIWIubV9taW1lVG9FeHRlbnNpb25zLmNvbnRhaW5zKCppdCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXVpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIE5QX1ZFUlNJT05fTUlOT1I7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ5YTMzODNkYmI0NDY5MDk5NDA3ZDZiZGExMjNkMTAxZGNiNWQzODQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
UGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFBsdWdpblF1aXJrU2V0X2gKLSNkZWZpbmUgUGx1Z2luUXVpcmtTZXRfaAotCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGVudW0gUGx1Z2luUXVpcmsgewotICAgICAgICBQbHVnaW5RdWly
a1dhbnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKLSAgICAgICAgUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKLSAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRs
ZUludmFsaWRhdGUgPSAxIDw8IDIsIAotICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xl
c3NWaWRlb1BhcmFtID0gMSA8PCAzLAotICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2Vy
UGx1c09uZU1lc3NhZ2VzID0gMSA8PCA0LAotICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQ
bHVnaW4gPSAxIDw8IDUsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2Ft
ZU1lc3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKLSAgICAgICAgUGx1Z2luUXVpcmtIYXNNb2Rh
bE1lc3NhZ2VMb29wID0gMSA8PCA3LAotICAgICAgICBQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5
QnVnID0gMSA8PCA4LAotICAgICAgICBQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5T
Y3JvbGxpbmcgPSAxIDw8IDksCi0gICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dI
YW5kbGVPbkRlc3Ryb3kgPSAxIDw8IDEwLAotICAgICAgICBQbHVnaW5RdWlya0RvbnRBbGxvd011
bHRpcGxlSW5zdGFuY2VzID0gMSA8PCAxMSwKLSAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0
a1Rvb2xLaXQgPSAxIDw8IDEyLAotICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNj
cmVlbkRlcHRoID0gMSA8PCAxMywKLSAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRv
d01vcmVUaGFuT25jZSA9IDEgPDwgMTQsCi0gICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRD
bGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAotICAgICAgICBQbHVnaW5RdWlya1dhbnRz
Q2hyb21lVXNlckFnZW50ID0gMSA8PCAxNgotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5RdWly
a1NldCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFBsdWdpblF1aXJrU2V0KCkgOiBt
X3F1aXJrcygwKSB7IH0KLSAgICAgICAgICAgIHZvaWQgYWRkKFBsdWdpblF1aXJrIHF1aXJrKSB7
IG1fcXVpcmtzIHw9IHF1aXJrOyB9Ci0gICAgICAgICAgICBib29sIGNvbnRhaW5zKFBsdWdpblF1
aXJrIHF1aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAmIHF1aXJrOyB9Ci0gICAgICAgIHBy
aXZhdGU6Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJrczsKLSAgICB9OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQbHVnaW5RdWlya1NldF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI0NTU2ODQ2YzljY2Y2MGRkN2Q0MTdmNjc4ZTNmNzgyZWY0ZmJl
NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgotCi0jaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdWJyZXNvdXJjZUxvYWRlci5oPgotI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0vLyBXZSB1c2UgLTIg
aGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBl
cnJvcgotLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0IGNsYXNoIHdpdGggdGhlbS4KLXN0YXRpYyBj
b25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOwotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0
ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOUFN0cmVh
bSosIE5QUD4gU3RyZWFtTWFwOwotc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCi17Ci0gICAg
c3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1zOwotICAgIHJldHVybiBzdGF0aWNTdHJlYW1z
OwotfQotCi1QbHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqIGNs
aWVudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVz
dCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdp
bkZ1bmNzKiBwbHVnaW5GdW5jcywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYg
cXVpcmtzKQotICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQotICAgICwg
bV9jbGllbnQoY2xpZW50KQotICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fbm90aWZ5RGF0
YShub3RpZnlEYXRhKQotICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24p
Ci0gICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCi0gICAgLCBtX2xvYWRN
YW51YWxseShmYWxzZSkKLSAgICAsIG1fZGVsYXlEZWxpdmVyeVRpbWVyKCp0aGlzLCAmUGx1Z2lu
U3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fdGVtcEZpbGVIYW5kbGUo
RmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAsIG1fcGx1Z2luRnVu
Y3MocGx1Z2luRnVuY3MpCi0gICAgLCBtX2luc3RhbmNlKGluc3RhbmNlKQotICAgICwgbV9xdWly
a3MocXVpcmtzKQotewotICAgIEFTU0VSVChtX2luc3RhbmNlKTsKLQotICAgIG1fc3RyZWFtLnVy
bCA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEgPSAwOwotICAgIG1fc3RyZWFtLnBkYXRhID0gMDsK
LSAgICBtX3N0cmVhbS5lbmQgPSAwOwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOwotICAg
IG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7Ci0gICAgbV9zdHJlYW0uaGVhZGVycyA9IDA7Ci0K
LSAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5jZSk7Ci19Ci0KLVBsdWdpblN0
cmVhbTo6flBsdWdpblN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3Ry
ZWFtU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0KLSAgICBmYXN0RnJlZSgoY2hh
ciopbV9zdHJlYW0udXJsKTsKLQotICAgIHN0cmVhbXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKLX0K
LQotdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoIW1fbG9hZE1hbnVh
bGx5KTsKLSAgICBBU1NFUlQobV9mcmFtZSk7Ci0gICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkuc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKCptX2ZyYW1lLCAqdGhpcywgUmVzb3VyY2VSZXF1
ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0gKFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4mJiBsb2Fk
ZXIpIHsKLSAgICAgICAgbV9sb2FkZXIgPSBXVEZNb3ZlKGxvYWRlcik7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsKLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFt
U3RvcHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51YWxseSkgewotICAgICAgICBBU1NFUlQoIW1f
bG9hZGVyKTsKLQotICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2Zy
YW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAgICBBU1NFUlQoZG9j
dW1lbnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFp
blJlc291cmNlKCkpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291
cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVz
dCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAg
ICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAgICAgICBtX2xvYWRlciA9IG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgbGFzdE1vZGlm
aWVkRGF0ZU1TKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGF1dG8g
bGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7Ci0gICAgaWYgKCFsYXN0TW9k
aWZpZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmllZC52YWx1
ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzQXM8dWludDMyX3Q+KCk7Ci19Ci0K
LXZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25zdCBVUkwmIHJlc3BvbnNl
VVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8gU29tZSBwbHVnaW5zIChG
bGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVk
IGFzIHRoaXMgaXMgdGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBV
UkwuCi0gICAgaWYgKHJlc3BvbnNlVVJMLnByb3RvY29sSXNKYXZhU2NyaXB0KCkpCi0gICAgICAg
IG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3Bv
bnNlVVJMLnN0cmluZygpKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3Ry
ZWFtLnVybCA9IGZhc3RTdHJEdXAocmVzcG9uc2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0KLSAgICBDU3RyaW5nIG1pbWVUeXBlU3RyID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBl
KCkudXRmOCgpOwotCi0gICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLQotICAgIGlmIChtX3Jlc291
cmNlUmVzcG9uc2UuaXNJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7Ci0gICAgICAgIFN0cmluZyBzZXBhcmF0b3IgPSAiOiAiX3M7Ci0KLSAgICAg
ICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJj
ZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQo
KTsKLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29k
ZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0
byB0aGUgcGx1Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhl
IGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVz
cG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgot
ICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29kaW5nKTsKLSAgICAgICAgaWYg
KCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0
eSIpCi0gICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKLSAgICB9Ci0KLSAg
ICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKLSAgICBtX3N0cmVhbS5wZGF0
YSA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fc3RyZWFtLmVuZCA9IG1h
eChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVk
ID0gbGFzdE1vZGlmaWVkRGF0ZU1TKG1fcmVzb3VyY2VSZXNwb25zZSk7Ci0gICAgbV9zdHJlYW0u
bm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKLQotICAgIG1fdHJhbnNmZXJNb2RlID0gTlBfTk9S
TUFMOwotICAgIG1fb2Zmc2V0ID0gMDsKLSAgICBtX3JlYXNvbiA9IFdlYlJlYXNvbk5vbmU7Ci0K
LSAgICAvLyBQcm90ZWN0IHRoZSBzdHJlYW0gaWYgZGVzdHJveXN0cmVhbSBpcyBjYWxsZWQgZnJv
bSB3aXRoaW4gdGhlIG5ld3N0cmVhbSBoYW5kbGVyCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4g
cHJvdGVjdCh0aGlzKTsKLQotICAgIC8vIGNhbGxpbmcgaW50byBhIHBsdWctaW4gY291bGQgcmVz
dWx0IGluIHJlLWVudHJhbmNlIGlmIHRoZSBwbHVnLWluIHlpZWxkcwotICAgIC8vIGNvbnRyb2wg
dG8gdGhlIHN5c3RlbSAocmRhcjovLzU3NDQ4OTkpLiBwcmV2ZW50IHRoaXMgYnkgZGVmZXJyaW5n
IGZ1cnRoZXIKLSAgICAvLyBsb2FkaW5nIHdoaWxlIGNhbGxpbmcgaW50byB0aGUgcGx1Zy1pbi4K
LSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRy
dWUpOwotICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0
YW5jZSwgKE5QTUlNRVR5cGUpbWltZVR5cGVTdHIuZGF0YSgpLCAmbV9zdHJlYW0sIGZhbHNlLCAm
bV90cmFuc2Zlck1vZGUpOwotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgIAotICAgIC8vIElmIHRoZSBzdHJlYW0gd2FzIGRl
c3Ryb3llZCBpbiB0aGUgY2FsbCB0byBuZXdzdHJlYW0gd2UgcmV0dXJuCi0gICAgaWYgKG1fcmVh
c29uICE9IFdlYlJlYXNvbk5vbmUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0obnBFcnIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdHJlYW1TdGF0ZSA9
IFN0cmVhbVN0YXJ0ZWQ7Ci0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5
RmlsZSgiV0tQIiwgbV90ZW1wRmlsZUhhbmRsZSk7Ci0KLSAgICAvLyBTb21ldGhpbmcgd2VudCB3
cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQotICAgIGlmICghRmlsZVN5c3RlbTo6aXNI
YW5kbGVWYWxpZChtX3RlbXBGaWxlSGFuZGxlKSkKLSAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0
cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci19Ci0KLU5QUCBQbHVnaW5TdHJlYW06Om93bmVyRm9y
U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgcmV0dXJuIHN0cmVhbXMoKS5nZXQoc3Ry
ZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBS
ZWFzb24gcmVhc29uKQotewotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7
Ci0KLSAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7Ci0gICAgc3RvcCgpOwotfQotCi12b2lkIFBs
dWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgbV9yZWFz
b24gPSByZWFzb247Ci0gICAgaWYgKG1fcmVhc29uICE9IE5QUkVTX0RPTkUpIHsKLSAgICAgICAg
Ly8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVpbmcgc3RyZWFtZWQKLSAgICAgICAgaWYg
KG1fZGVsaXZlcnlEYXRhKQotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsK
LSAgICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRhICYmIG1fZGVsaXZlcnlEYXRhLT5zaXplKCkg
PiAwKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9u
J3QgZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBk
ZXN0cm95U3RyZWFtKCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKCkK
LXsKLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSk7Ci0gICAgQVNTRVJU
KCFtX2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOwotCi0gICAg
RmlsZVN5c3RlbTo6Y2xvc2VGaWxlKG1fdGVtcEZpbGVIYW5kbGUpOwotCi0gICAgYm9vbCBuZXdT
dHJlYW1DYWxsZWQgPSBtX3N0cmVhbS5uZGF0YTsKLQotICAgIC8vIFByb3RlY3QgZnJvbSBkZXN0
cnVjdGlvbiBpZjoKLSAgICAvLyAgTlBOX0Rlc3Ryb3lTdHJlYW0gaXMgY2FsbGVkIGZyb20gTlBQ
X05ld1N0cmVhbSBvcgotICAgIC8vICBQbHVnaW5TdHJlYW1DbGllbnQ6OnN0cmVhbURpZEZpbmlz
aExvYWRpbmcoKSByZW1vdmVzIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW0+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBpZiAobmV3U3RyZWFtQ2FsbGVkKSB7Ci0gICAg
ICAgIGlmIChtX3JlYXNvbiA9PSBOUFJFU19ET05FICYmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9B
U0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFT05MWSkpIHsKLSAgICAgICAgICAg
IEFTU0VSVCghbV9wYXRoLmlzTnVsbCgpKTsKLQotICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQot
ICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwotICAgICAg
ICAgICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9wYXRo
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpIHsKLSAgICAgICAg
ICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyh0cnVlKTsKLQotICAgICAgICAgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3Mt
PmRlc3Ryb3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7Ci0KLSAgICAg
ICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJz
TG9hZGluZyhmYWxzZSk7Ci0KLSAgICAgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9z
ZW5kTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgIC8vIEZsYXNoIDkgY2FuIGRlcmVmZXJlbmNlIG51
bGwgaWYgd2UgY2FsbCBOUFBfVVJMTm90aWZ5IHdpdGhvdXQgZmlyc3QgY2FsbGluZyBOUFBfTmV3
U3RyZWFtCi0gICAgICAgIC8vIGZvciByZXF1ZXN0cyBtYWRlIHdpdGggTlBOX1Bvc3RVUkxOb3Rp
Znk7IHNlZSA8cmRhcjovLzU1ODg4MDc+Ci0gICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwotICAgICAgICBpZiAoIW5ld1N0
cmVhbUNhbGxlZCAmJiBtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5
QnVnKSAmJgotICAgICAgICAgICAgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9yZXNv
dXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpLCAicG9zdCIpKSB7Ci0gICAgICAgICAgICBtX3RyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICAgICAgICAgIG1fc3RyZWFtLnVybCA9ICIiOwotICAg
ICAgICAgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKLQotICAgICAgICAg
ICAgc3RhdGljIGNoYXIgZW1wdHlNaW1lVHlwZVtdID0gIiI7Ci0gICAgICAgICAgICBtX3BsdWdp
bkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5jZSwgZW1wdHlNaW1lVHlwZSwgJm1fc3RyZWFtLCBm
YWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmRlc3Ry
b3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7Ci0KLSAgICAgICAgICAg
IC8vIGluIHN1Y2Nlc3NmdWwgcmVxdWVzdHMsIHRoZSBVUkwgaXMgZHluYW1pY2FsbHkgYWxsb2Nh
dGVkIGFuZCBmcmVlZCBpbiBvdXIKLSAgICAgICAgICAgIC8vIGRlc3RydWN0b3IsIHNvIHJlc2V0
IGl0IHRvIDAKLSAgICAgICAgICAgIG1fc3RyZWFtLnVybCA9IDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0
LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOwot
ICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyhmYWxzZSk7Ci0gICAgfQotCi0gICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7
Ci0KLSAgICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmIG1fY2xpZW50KQotICAgICAgICBtX2NsaWVu
dC0+c3RyZWFtRGlkRmluaXNoTG9hZGluZyh0aGlzKTsKLQotICAgIGlmICghbV9wYXRoLmlzTnVs
bCgpKQotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fcGF0aCk7Ci19Ci0KLXZvaWQg
UGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpCi17Ci0gICAgZGVsaXZlckRh
dGEoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXRhKCkKLXsKLSAgICBBU1NF
UlQobV9kZWxpdmVyeURhdGEpOwotICAgIAotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVh
bVN0b3BwZWQpCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4g
dGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2Fz
ZQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1C
ZWZvcmVTdGFydGVkKTsKLQotICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURh
dGEtPnNpemUoKSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQzMl90IHRvdGFsQnl0
ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOwotICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2
ZXJlZCA9IDA7Ci0KLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZl
cnNMb2FkaW5nKHRydWUpOwotICAgIHdoaWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxC
eXRlcykgewotICAgICAgICBpbnQzMl90IGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53
cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7Ci0KLSAgICAgICAgaWYgKGRlbGl2ZXJ5
Qnl0ZXMgPD0gMCkgewotICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5VGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFs
Qnl0ZXNEZWxpdmVyZWQpOwotICAgICAgICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZl
cnlCeXRlczsKLSAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgp
ICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKLQotICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEK
LSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3Rh
bmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCAodm9pZCopZGF0YSk7Ci0gICAg
ICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDApIHsKLSAgICAgICAgICAgICAgICBMT0dfUExV
R0lOX05FVF9FUlJPUigpOwotICAgICAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAg
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAgICAg
ICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0
ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICBtX29mZnNl
dCArPSBkZWxpdmVyeUJ5dGVzOwotICAgICAgICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBk
ZWxpdmVyeUJ5dGVzOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2xvYWRlcikKLSAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgaWYgKHRvdGFsQnl0
ZXNEZWxpdmVyZWQgPiAwKSB7Ci0gICAgICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90
YWxCeXRlcykgewotICAgICAgICAgICAgaW50IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAt
IHRvdGFsQnl0ZXNEZWxpdmVyZWQ7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRh
LT5kYXRhKCksIG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCBy
ZW1haW5pbmdCeXRlcyk7Ci0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFp
bmluZ0J5dGVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRh
LT5yZXNpemUoMCk7Ci0gICAgICAgICAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkK
LSAgICAgICAgICAgICAgICBkZXN0cm95U3RyZWFtKCk7Ci0gICAgICAgIH0KLSAgICB9IAotfQot
Ci12b2lkIFBsdWdpblN0cmVhbTo6c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1
ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgZGlkUmVjZWl2ZVJl
c3BvbnNlKDAsIFJlc291cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1
bHRTdHJpbmcubGVuZ3RoKCksICIiKSk7Ci0KLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1TdG9wcGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlc3VsdFN0cmluZy5pc051
bGwoKSkgewotICAgICAgICBkaWRSZWNlaXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCBy
ZXN1bHRTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1TdG9wcGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbG9hZGVyID0g
bnVsbHB0cjsKLQotICAgIGRlc3Ryb3lTdHJlYW0ocmVzdWx0U3RyaW5nLmlzTnVsbCgpID8gTlBS
RVNfTkVUV09SS19FUlIgOiBOUFJFU19ET05FKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06Ondp
bGxTZW5kUmVxdWVzdChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIFJlc291cmNlUmVxdWVz
dCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdGlmeSB0aGUgcGx1Zy1pbiB3aXRoIE5QUF9VUkxSZWRpcmVjdE5v
dGlmeSBoZXJlLgotICAgIGNhbGxiYWNrKFdURk1vdmUocmVxdWVzdCkpOwotfQotCi12b2lkIFBs
dWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VS
VF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgbV9yZXNvdXJjZVJlc3BvbnNl
ID0gcmVzcG9uc2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwg
bG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dGFydGVkKTsKLQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBk
ZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAgICAvLyBzbyBwcm90ZWN0IGl0IGhl
cmUuCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmICht
X3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAgIGlmICghbV9kZWxpdmVy
eURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IG1ha2VVbmlxdWU8VmVjdG9yPGNo
YXI+PigpOwotCi0gICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsK
LSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAg
ICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgp
OwotCi0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3Rh
dGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKG1fdGVtcEZp
bGVIYW5kbGUpKSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBGaWxlU3lzdGVtOjp3cml0
ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAoYnl0
ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0o
TlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZEZh
aWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0K
LSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4g
cmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJv
dGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotCi0g
ICAgbV9sb2FkZXIgPSBudWxscHRyOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNo
TG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VS
VF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVz
dWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRl
ciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBj
b25zdAotewotICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcGx1Z2lu
RnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJl
YW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDMxYjM2MzAzNjJjOWU1MjExMThkZDAzMjczYTZjZDljMjhjYzQ2Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9Q
bHVnaW5zL1BsdWdpblN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGlt
ZV9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFz
cyBQbHVnaW5TdHJlYW07Ci0KLWVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZvcmVT
dGFydGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07Ci0KLWNsYXNzIFBsdWdpblN0
cmVhbUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGx1Z2luU3RyZWFtQ2xpZW50KCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3RyZWFt
KikgeyB9Ci19OwotCi1jbGFzcyBQbHVnaW5TdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVn
aW5TdHJlYW0+LCBwcml2YXRlIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBsdWdpblN0cmVhbT4gY3JlYXRlKFBsdWdpblN0cmVhbUNs
aWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdp
bkZ1bmNzKiBmdW5jdGlvbnMsIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1
aXJrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsdWdpblN0cmVhbShj
bGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBmdW5j
dGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+UGx1Z2luU3Ry
ZWFtKCk7Ci0gICAgCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgpOwotCi0gICAg
dm9pZCBzdGFydFN0cmVhbSgpOwotCi0gICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBsb2Fk
TWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KLQotICAgIHZvaWQg
c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXVEY6OkNT
dHJpbmcmIHJlc3VsdFN0cmluZyk7Ci0gICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5Q
UmVhc29uKTsKLQotICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKLQot
cHJpdmF0ZToKLSAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50KiwgRnJhbWUqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1
aXJrU2V0Jik7Ci0KLSAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7Ci0gICAgdm9pZCBkZXN0cm95U3Ry
ZWFtKE5QUmVhc29uKTsKLSAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgIC8vIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50Ci0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNv
dXJjZVJlcXVlc3QmJik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWwoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgb3Zl
cnJpZGU7Ci0gICAgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKLSAgICBSZXNvdXJjZVJlc3BvbnNl
IG1fcmVzb3VyY2VSZXNwb25zZTsKLQotICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7
Ci0gICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyPiBtX2xvYWRlcjsKLSAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgYm9vbCBtX3NlbmRO
b3RpZmljYXRpb247Ci0gICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKLSAgICBi
b29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAgVGltZXIgbV9kZWxheURlbGl2ZXJ5VGltZXI7Ci0g
ICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgbV90ZW1wRmlsZUhhbmRsZTsKLQotICAgIGNvbnN0IE5QUGx1Z2luRnVuY3Mq
IG1fcGx1Z2luRnVuY3M7Ci0gICAgTlBQIG1faW5zdGFuY2U7Ci0gICAgdWludDE2X3QgbV90cmFu
c2Zlck1vZGU7Ci0gICAgaW50MzJfdCBtX29mZnNldDsKLSAgICBDU3RyaW5nIG1faGVhZGVyczsK
LSAgICBTdHJpbmcgbV9wYXRoOwotICAgIE5QUmVhc29uIG1fcmVhc29uOwotICAgIE5QU3RyZWFt
IG1fc3RyZWFtOwotICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOwotCi0gICAgZnJpZW5kIGNs
YXNzIFBsdWdpblZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTIyNDU4ZmU4MDQ1YTZjNGYyMWIzNWU3ZmE5MzZhYjczNmM1ODJhNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR2lyaXNoIFJhbWFr
cmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9CcmlkZ2VKU0MuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZUphci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FbGVt
ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2Uu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
SlNET01XaW5kb3cuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01vdXNl
RXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05QX2pzb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Qcm94
eVNlcnZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyQm94Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJPYmplY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1doZWVsRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL2NfaW5z
dGFuY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbXBsLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
I2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0jZW5kaWYKLQotdXNpbmcgSlNDOjpKU0xvY2s7Ci11c2lu
ZyBKU0M6OkpTT2JqZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKLQotc3RhdGljIGludCBzX2NhbGxpbmdQbHVnaW47Ci0KLXR5cGVkZWYgSGFz
aE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKLQotc3RhdGljIEluc3RhbmNlTWFw
JiBpbnN0YW5jZU1hcCgpCi17Ci0gICAgc3RhdGljIEluc3RhbmNlTWFwJiBtYXAgPSAqbmV3IElu
c3RhbmNlTWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2NyaXB0U3Ry
aW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIGlmICghdXJsLnByb3Rv
Y29sSXNKYXZhU2NyaXB0KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFRo
aXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZpZXcq
IFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZpZXc6
OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpCi17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAotewot
ICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBjbGlw
UmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAotICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdl
dCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4K
LSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmlldygp
OwotICAgIEludFJlY3Qgd2luZG93Q2xpcFJlY3QgPSBwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVj
dEZvckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKTsKLSAgICB3aW5kb3dDbGlwUmVjdC5zY2Fs
ZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBjbGlwUmVjdC5pbnRlcnNlY3Qod2luZG93Q2xp
cFJlY3QpOwotCi0gICAgcmV0dXJuIGNsaXBSZWN0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChtX2VsZW1lbnQtPmRv
Y3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlY3QgIT0g
ZnJhbWVSZWN0KCkpCi0gICAgICAgIFdpZGdldDo6c2V0RnJhbWVSZWN0KHJlY3QpOwotCi0gICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBs
dWdpbiB0byBjaGFuZ2UgZ2VvbWV0cnkuCi0gICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVQbHVn
aW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQoKQotewot
ICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2
ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBmcm9tIGRlbGV0
aW9uIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4g
cHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChldmVudC5pc01vdXNlRXZlbnQoKSkKLSAgICAgICAg
aGFuZGxlTW91c2VFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkpOwotICAgIGVsc2Ug
aWYgKGV2ZW50LmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50
KGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KQotICAgICAgICBldmVudC5zZXRE
ZWZhdWx0SGFuZGxlZCgpOyAvLyBXZSBkb24ndCBrbm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5k
bGVkIG1vdXNlZG93biBldmVudCBieSBkaXNwbGF5aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBu
ZXZlciB3YW50IFdlYktpdCB0byBzaG93IGEgZGVmYXVsdCBvbmUuCi19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1Z2lu
KSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1
Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAgICAg
ICBtX3BsdWdpbiA9IG51bGxwdHI7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3RhcnRP
ckFkZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdHVz
ID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotfQotCi1ib29sIFBsdWdpblZpZXc6
OnN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewotICAgIGlmICghbV9wYXJlbnRGcmFtZS0+
cGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0
YXJ0aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0g
ICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZl
ciBkYXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYg
KCFtX2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlh
KCkpIHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFy
dExpc3RlbmVyKCp0aGlzKTsKLSAgICAgICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXJ0KCk7Ci19Ci0KLWJv
b2wgUGx1Z2luVmlldzo6c3RhcnQoKQotewotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gZmFsc2U7Ci0KLSAgICBQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5yZWdpc3RlclBsdWdpbihtX2lu
c3RhbmNlKTsKLQotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgQVNTRVJUKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5uZXdwKTsKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3Rh
bmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBO
VUxMKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgICAgIExPR19OUEVS
Uk9SKG5wRXJyKTsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
Ci0gICAgfQotCi0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNl
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1faXNTdGFydGVkID0gdHJ1
ZTsKLQotICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxseSkgewotICAg
ICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QgeyAqbV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKSwgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwg
eyB9LCB7IH0sIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07Ci0gICAgICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAg
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsKLSAg
ICAgICAgbG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpLCBmYWxzZSwgbnVsbHB0cik7Ci0g
ICAgfQotCi0gICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Ci0K
LSAgICBpZiAoIXBsYXRmb3JtU3RhcnQoKSkKLSAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOwotCi0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6bWVkaWFDYW5TdGFydChEb2N1bWVudCYpCi17Ci0g
ICAgQVNTRVJUKCFtX2lzU3RhcnRlZCk7Ci0gICAgaWYgKCFzdGFydCgpKQotICAgICAgICBzdGF0
aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCY+KHBhcmVudEZyYW1lKCktPmxvYWRlcigpLmNs
aWVudCgpKS5kaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKCp0aGlzKTsKLX0KLQotUGx1Z2lu
Vmlldzo6flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBs
dWdpblZpZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUo
KSk7Ci0KLSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0
dXJuIGVhcmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0gICAgLy8gbV9pbnN0YW5jZSB3aWxs
IGJlIDAuCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3Zl
KG1faW5zdGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAgbV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlz
KTsKLQotICAgIHN0b3AoKTsKLQotICAgIGlmIChtX2VsZW1lbnROUE9iamVjdCkKLSAgICAgICAg
X05QTl9SZWxlYXNlT2JqZWN0KG1fZWxlbWVudE5QT2JqZWN0KTsKLSAgICAKLSAgICBmcmVlU3Ry
aW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQpOwotICAgIGZyZWVTdHJpbmdBcnJh
eShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOwotCi0gICAgcGxhdGZvcm1EZXN0cm95KCk7
Ci0KLSAgICBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBs
dWdpbih0aGlzKTsKLQotICAgIGlmIChtX3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKSkKLSAgICAgICAgbV9wbHVnaW4t
PnVubG9hZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnN0b3AoKQotewotICAgIGlmICghbV9p
c1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6c3RvcCgpOiBTdG9wcGluZyBwbHVnLWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMg
PSBtX3N0cmVhbXM7Ci0gICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRv
ciBlbmQgPSBzdHJlYW1zLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICgqaXQpLT5zdG9wKCk7Ci0gICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCku
Z2V0KCkpOwotICAgIH0KLQotICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKLQotICAg
IG1faXNTdGFydGVkID0gZmFsc2U7Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwotICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
LSAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQ
dHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAo
Y3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5k
b3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRS
KW1fcGx1Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0gICAgLy8gQ2xlYXIgdGhlIHdpbmRvdwotICAgIG1fbnBXaW5kb3cud2luZG93
ID0gMDsKLQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFt
X3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hh
bmRsZU9uRGVzdHJveSkpIHsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwot
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5Q
U2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBu
cEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZl
ZERhdGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5w
RXJyKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAg
Ly8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRhdGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRp
bmcgaXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+YnVmKQotICAgICAgICAgICAgTlBOX01lbUZy
ZWUoc2F2ZWREYXRhLT5idWYpOwotICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAg
IH0KLSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0g
ICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBs
dWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkKLXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1
Z2luVmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXpl
X3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVt
Y3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJMZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVu
Z3RoXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6
OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lz
U3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0
YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQg
aXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBz
YW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5h
bWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVs
bCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSwgKm1fcGFy
ZW50RnJhbWUpICE9IG1fcGFyZW50RnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KS51cmwoKTsKLSAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRV
UkwocmVxdWVzdFVSTCk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkgPyBzdGQ6Om9wdGlvbmFsPFByb2Nlc3Np
bmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogc3RkOjpudWxsb3B0
KTsKLQotICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBpZiB0aGlzIGlz
IG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVyd2lz
ZSwKLSAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCi0gICAgICAgIGlm
ICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHN0cmVhbSA9
IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3Qt
PmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlm
aWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygp
LCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICAgICAgbV9zdHJlYW1z
LmFkZChzdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJhbWUgaXMgb3Vy
IGZyYW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQotICAgICAgICAgICAgLy8gUGx1Z2luVmlldywg
c28gd2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+Ci0gICAgICAgICAgICBS
ZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgICAgICAgICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKm1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3Qt
PmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSB9OwotICAgICAgICAgICAgZnJh
bWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKLSAgICAgICAgICAg
IGZyYW1lTG9hZFJlcXVlc3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7Ci0g
ICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2Fk
UmVxdWVzdCkpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0
Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxv
YWRpbmcKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKLSAg
ICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAg
ICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwg
cmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5u
b3RpZnlEYXRhKCkpOwotICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwot
ICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBU
YXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1l
IHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCi0gICAgLy8gYW5kIHRoaXMgaGFz
IGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KLSAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1lLmlz
RW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUsICpt
X3BhcmVudEZyYW1lKSA9PSBtX3BhcmVudEZyYW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcg
YSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdl
IGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rv
cih0aGlzKTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4ZWN1
dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihqc1N0cmluZywgcmVxdWVzdC0+c2hvdWxkQWxsb3dQ
b3B1cHMoKSk7Ci0KLSAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAg
IENTdHJpbmcgY3N0cjsKLSAgICAgICAgewotICAgICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0ID0gKm1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKTsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soJmdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwotICAgICAgICAgICAg
aWYgKHJlc3VsdCAmJiByZXN1bHQuZ2V0U3RyaW5nKCZnbG9iYWxPYmplY3QsIHJlc3VsdFN0cmlu
ZykpCi0gICAgICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1f
cGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJl
cXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRh
KCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtz
KCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbS5jb3B5UmVmKCkpOwotICAgICAgICBz
dHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOwotICAgIH0KLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKCFt
X3JlcXVlc3RzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2lzSmF2YVNjcmlwdFBhdXNlZCk7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCA9IFdURk1vdmUo
bV9yZXF1ZXN0c1swXSk7Ci0gICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7Ci0gICAgCi0gICAgLy8g
U2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5j
ZSB0aGUgY2FsbCB0bwotICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2lu
IHZpZXcgdG8gYmUgZGVsZXRlZC4KLSAgICBpZiAoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKQotICAg
ICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLQotICAgIHBlcmZvcm1SZXF1
ZXN0KHJlcXVlc3QuZ2V0KCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVz
dChzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCkKLXsKLSAgICBtX3JlcXVl
c3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKLQotICAgIGlmICghbV9pc0phdmFTY3JpcHRQ
YXVzZWQpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi1O
UEVycm9yIFBsdWdpblZpZXc6OmxvYWQoRnJhbWVMb2FkUmVxdWVzdCYmIGZyYW1lTG9hZFJlcXVl
c3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBBU1NF
UlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIkdF
VCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0g
IlBPU1QiKTsKLQotICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnVybCgpOwotICAgIAotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
TlBFUlJfSU5WQUxJRF9VUkw7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBiZSBt
YWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBhbGwgbG9hZGVycy4KLSAg
ICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlzU3RvcHBpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBjb25zdCBTdHJpbmcmIHRh
cmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7Ci0gICAgU3RyaW5n
IGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7Ci0KLSAgICBpZiAo
IWpzU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgotICAgICAg
ICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotCi0gICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVl
c3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCi0g
ICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUtPnRy
ZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSwgKm1fcGFyZW50RnJhbWUpICE9IG1fcGFyZW50RnJh
bWUpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICB9IGVsc2Ug
aWYgKCFtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkRpc3Bs
YXkodXJsKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBzY2hl
ZHVsZVJlcXVlc3QobWFrZVVuaXF1ZTxQbHVnaW5SZXF1ZXN0PihXVEZNb3ZlKGZyYW1lTG9hZFJl
cXVlc3QpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkp
KTsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIFVSTCBtYWtlVVJM
KGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCi17Ci0g
ICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOwotCi0gICAgLy8gU3RyaXAg
cmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4n
LCAiIik7Ci0gICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7Ci0KLSAg
ICByZXR1cm4gVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lk
KiBub3RpZnlEYXRhKQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7
ICptX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLCBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLCB7IH0sIHRhcmdldCwgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25v
d24gfTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1l
dGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRV
UkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwot
Ci0gICAgcmV0dXJuIGxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwgdHJ1ZSwgbm90aWZ5
RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVx
dWVzdCB7ICptX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLCBtX3BhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCB7IH0sIHRhcmdldCwgSW5pdGlhdGVkQnlNYWluRnJhbWU6
OlVua25vd24gfTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVy
bCkpOwotCi0gICAgcmV0dXJuIGxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwgZmFsc2Us
IG51bGxwdHIpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkxOb3RpZnkoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciog
YnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gaGFuZGxl
UG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUp
OwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmls
ZSkKLXsKLSAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUgc3Bl
Y2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KLSAgICByZXR1cm4gaGFu
ZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxlKTsKLX0K
LQotTlBFcnJvciBQbHVnaW5WaWV3OjpuZXdTdHJlYW0oTlBNSU1FVHlwZSwgY29uc3QgY2hhciog
LyogdGFyZ2V0ICovLCBOUFN0cmVhbSoqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
Ly8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotaW50
MzJfdCBQbHVnaW5WaWV3Ojp3cml0ZShOUFN0cmVhbSosIGludDMyX3QgLyogbGVuICovLCB2b2lk
KiAvKiBidWZmZXIgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBv
cnRlZAotICAgIHJldHVybiAtMTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpkZXN0cm95U3Ry
ZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBpZiAoIXN0cmVh
bSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkK
LSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7Ci0KLSAgICBQbHVn
aW5TdHJlYW0qIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW0qPihzdHJl
YW0tPm5kYXRhKTsKLSAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3RyZWFtKHJl
YXNvbik7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldFN0YXR1c2Jh
clRleHQoKm1fcGFyZW50RnJhbWUsIFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi1O
UEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlKCVzKTogIiwg
cHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZhcmlhYmxlLCB2YWx1ZSkuZGF0YSgpKTsKLQotICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgotICAg
ICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoKLSAgICAgICAgbV9pc1RyYW5z
cGFyZW50ID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBkZWZh
dWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVy
RmlyZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5z
aXplKCk7IGkrKykKLSAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOwot
ICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVnaW5WaWV3OjpwdXNo
UG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3RhY2su
YXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzRW5hYmxlZFN0
YXRlKCkKLXsKLSAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wg
UGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BvcHVw
U3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVwU3RhdGVTdGFjay5s
YXN0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0SmF2
YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVz
ZWQgPT0gcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFTY3JpcHRQYXVzZWQg
PSBwYXVzZWQ7Ci0KLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIG1fcmVx
dWVzdFRpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1OUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQot
ewotICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOwotCi0gICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAh
bV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5nIEphdmEncyBOUE5fR2V0VmFs
dWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KLSAgICAvLyBydW4sIGFsbG93aW5nIGxv
YWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1bi4gUHJvdGVjdCB0aGUKLSAg
ICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFyOi8vcHJvYmxlbS82OTc4ODA0
PgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgTlBFcnJvciBu
cEVycjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAg
ICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNlbmRpZgotCi1SZWZQdHI8SlNDOjpCaW5kaW5n
czo6SW5zdGFuY2U+IFBsdWdpblZpZXc6OmJpbmRpbmdJbnN0YW5jZSgpCi17Ci0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGhh
c09uZVJlZigpKSB7Ci0gICAgICAgIC8vIFRoZSByZW5kZXJlciBmb3IgdGhlIFBsdWdpblZpZXcg
d2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhlIGFib3ZlIGNhbGwsIGFuZAotICAgICAgICAvLyB0aGUg
UGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywg
c28gd2UKLSAgICAgICAgLy8gcmV0dXJuIG51bGwuCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIGF1dG8gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJv
b3RPYmplY3QodGhpcyk7Ci0gICAgYXV0byBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJbnN0
YW5jZTo6Y3JlYXRlKG9iamVjdCwgV1RGTW92ZShyb290KSk7Ci0KLSAgICBfTlBOX1JlbGVhc2VP
YmplY3Qob2JqZWN0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKGluc3RhbmNlKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaXNjb25u
ZWN0U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQotewotICAgIEFTU0VSVChtX3N0cmVhbXMu
Y29udGFpbnMoc3RyZWFtKSk7Ci0KLSAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQotewotICAgIEFTU0VS
VChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwotCi0gICAgdW5zaWdu
ZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOwotICAgIHVuc2lnbmVkIHBhcmFtQ291bnQgPSAw
OwotCi0gICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxs
b2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLSAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYgKG1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1Bh
cmFtKSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbU5hbWVzW2ldLCAid2lu
ZG93bGVzc3ZpZGVvIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocGFy
YW1OYW1lc1tpXSA9PSAicGx1Z2luc3BhZ2UiKQotICAgICAgICAgICAgbV9wbHVnaW5zUGFnZSA9
IHBhcmFtVmFsdWVzW2ldOwotCi0gICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNy
ZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7Ci0gICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFy
YW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKLQotICAgICAgICBw
YXJhbUNvdW50Kys7Ci0gICAgfQotCi0gICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsKLX0K
LQotUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNp
emUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSkKLSAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCi0gICAg
LCBtX3BsdWdpbihwbHVnaW4pCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAsIG1faXNT
dGFydGVkKGZhbHNlKQotICAgICwgbV91cmwodXJsKQotICAgICwgbV9zdGF0dXMoUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZQbHVn
aW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1faW52YWxpZGF0ZVRpbWVyKCp0aGlz
LCAmUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BvcFBvcHVwc1N0
YXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQpCi0g
ICAgLCBtX2xpZmVTdXBwb3J0VGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRp
bWVyRmlyZWQpCi0gICAgLCBtX21vZGUobG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVE
KQotICAgICwgbV9wYXJhbU5hbWVzKDApCi0gICAgLCBtX3BhcmFtVmFsdWVzKDApCi0gICAgLCBt
X21pbWVUeXBlKG1pbWVUeXBlKQotICAgICwgbV9pbnN0YW5jZSgwKQotICAgICwgbV9lbGVtZW50
TlBPYmplY3QobnVsbHB0cikKLSAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQotICAgICwgbV9pc1Ry
YW5zcGFyZW50KGZhbHNlKQotICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBt
X2lzV2FpdGluZ1RvU3RhcnQoZmFsc2UpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgLCBtX3BsdWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKLSAgICAs
IG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1fd21QcmludEhEQygwKQot
ICAgICwgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9s
b2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQotICAgICwgbV9tYW51YWxTdHJlYW0oMCkKLSAgICAs
IG1faXNKYXZhU2NyaXB0UGF1c2VkKGZhbHNlKQotICAgICwgbV9oYXZlQ2FsbGVkU2V0V2luZG93
KGZhbHNlKQotewotICAgIGlmICghbV9wbHVnaW4pIHsKLSAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OwotICAgIG1faW5zdGFuY2UtPm5kYXRhID0g
dGhpczsKLSAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Ci0KLSAgICBpbnN0YW5jZU1hcCgpLmFk
ZChtX2luc3RhbmNlLCB0aGlzKTsKLQotICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFy
YW1WYWx1ZXMpOwotCi0gICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdpbmRv
dykpOwotCi0gICAgcmVzaXplKHNpemUpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZvY3VzUGx1
Z2luRWxlbWVudCgpCi17Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdl
KCkpCi0gICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG1f
ZWxlbWVudCwgKm1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAg
ICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtID0gUGx1Z2lu
U3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwgcGx1
Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0g
ICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKLQotICAgIG1fbWFudWFs
U3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0g
ICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQobV9t
YW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgw
LCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZpbmlzaExvYWRpbmco
KQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAgQVNT
RVJUKG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2Fk
aW5nKDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsK
LSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAgICAgIG1fbWFudWFsU3RyZWFtLT5k
aWRGYWlsKDAsIGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDYWxsaW5nUGx1Z2lu
KGJvb2wgYikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYikKLSAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0gICAgZWxzZQotICAgICAgICAtLXNf
Y2FsbGluZ1BsdWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7Ci19Ci0K
LWJvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKLXsKLSAgICByZXR1cm4gc19jYWxs
aW5nUGx1Z2luID4gMDsKLX0KLQotUmVmPFBsdWdpblZpZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxQbHVnSW5FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEg
cGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKLSAg
ICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0
eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0g
bWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0KLSAgICAv
LyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNl
YXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxs
ZWRQbHVnaW5zKCktPnJlZnJlc2goKSkgewotICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlw
ZTsKLSAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+
ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1
cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkp
OwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJy
YXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZy
ZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4m
IGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09
ICdcbic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGlu
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9
IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAg
Ly8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVy
biBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVy
IDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYg
KGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAg
IGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4Nyku
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0
ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciog
Ynl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAg
c3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZv
cnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3Jz
ZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90
aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0
byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAg
Ly8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91
bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1p
bmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4g
Ynl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewotICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8v
IChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgotICAgICAgICAgICAgLy8g
bmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFs
aXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29s
IGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVD
aGFyIGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAn
YScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVb
aV0pOwotICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49
ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFt
ZVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAg
IGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0
cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFs
c2U7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJG
aWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9s
OwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwot
Ci0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Ig
d2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZp
bmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRl
czsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBh
cyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAg
IGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAgICAgYnl0
ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYu
Ci0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAobGluZUxl
bmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBv
ZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUg
PT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBv
ZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29u
dGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMg
aGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxk
cy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxp
bmVMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBj
dXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFy
KiBjb2xvbjsKLSAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYm
IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAotICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBj
b2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoY29sb24gPT0gZW9sKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGVtcHR5U3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKLSAgICAgICAgICAgICAgICBpZiAo
IW9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9sZFZhbHVl
ICsgIiwgIiArIHZhbHVlOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0
S2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gaGVhZGVyRmllbGRzOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgYm9vbCBhbGxvd0hlYWRlcnMpCi17Ci0gICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQot
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLQotICAgIEhUVFBIZWFkZXJNYXAg
aGVhZGVyRmllbGRzOwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgCi0gICAgaWYgKGZp
bGUpIHsKLSAgICAgICAgTlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1
ZmZlciwgbGVuLCBidWYpOwotICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9S
KQotICAgICAgICAgICAgcmV0dXJuIHJlYWRSZXN1bHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YnVmZmVyLnJlc2l6ZShsZW4pOwotICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBs
ZW4pOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsK
LSAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOwotCi0gICAgaWYgKGFsbG93
SGVhZGVycykgewotICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7Ci0g
ICAgICAgICAgICBwb3N0RGF0YSsrOwotICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJG
aXJzdEJsYW5rTGluZShidWZmZXIpOwotICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRo
ZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgot
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1
ZmZlciwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBi
dWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMg
cGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBw
b3N0LAotICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2Ug
dGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIC8vIGFu
ZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgotICAg
ICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
bnRMZW5ndGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBzdGQ6
Om1pbihwYXJzZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazx1bnNpZ25lZD4oY29udGVudExl
bmd0aCkudmFsdWVfb3IoMCksIGRhdGFMZW5ndGgpOwotICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAg
ICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgcG9zdERhdGFMZW5n
dGggPSBkYXRhTGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
RnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKm1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCksIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHsgfSwg
dGFyZ2V0LCBJbml0aWF0ZWRCeU1haW5GcmFtZTo6VW5rbm93biB9OwotICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwotICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMp
KTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZv
cm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7Ci0KLSAgICByZXR1cm4g
bG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlE
YXRhKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIWlzVmlzaWJsZSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fZWxl
bWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0Owot
ICAgIGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRp
bmdMZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpKTsK
LSAgICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVsbFBs
dWdpbkltYWdlOwotICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQotICAgICAgICBudWxsUGx1Z2lu
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKLQotICAg
IEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBudWxs
UGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOwotCi0gICAg
aW50IHhPZmZzZXQgPSAoZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAv
IDI7Ci0gICAgaW50IHlPZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3Qu
aGVpZ2h0KCkpIC8gMjsKLQotICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOwot
Ci0gICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5jbGlwKHdpbmRvd0NsaXBSZWN0KCkp
OwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2Nh
dGlvbigpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIq
IE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKLSAgICAgICAgIldpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyIKLSAgICAgICAgIiBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYx
MDEwIEZpcmVmb3gvMi4wIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENocm9tZVVzZXJB
Z2VudCA9ICJNb3ppbGxhLzUuMCAoIgotICAgICJXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsi
Ci0gICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTku
MC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJB
Z2VudCgpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50
OwotICAgIGVsc2UgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dh
bnRzQ2hyb21lVXNlckFnZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsKLSAg
ICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0KLSAgICByZXR1cm4g
bV91c2VyQWdlbnQuZGF0YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQotewotICAgIHJldHVy
biBNb3ppbGxhVXNlckFnZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVnaW5WaWV3OjpsaWZl
U3VwcG9ydFRpbWVyRmlyZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6a2VlcEFsaXZlKCkKLXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1cHBvcnRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
dm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZp
ZXcqIHZpZXcgPSBpbnN0YW5jZU1hcCgpLmdldChpbnN0YW5jZSk7Ci0gICAgaWYgKCF2aWV3KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB2aWV3LT5rZWVwQWxpdmUoKTsKLX0KLQotTlBFcnJvciBQ
bHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcyki
LCBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0KLSAgICBOUEVy
cm9yIHJlc3VsdDsKLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFs
dWUsICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci19Ci0KLXN0YXRpYyBGcmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVu
dEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAg
ICAgcmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAotICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVu
dCgpLmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6Z2V0VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRh
KCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFy
aWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlm
IChwbGF0Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBO
UE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBPYmpl
Y3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1Nj
cmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICBpZiAod2luZG93U2NyaXB0
T2JqZWN0KQotICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0
KTsKLQotICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICp2ID0gd2lu
ZG93U2NyaXB0T2JqZWN0OwotCi0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICB9
Ci0KLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgaWYgKG1f
aXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0KLSAgICAgICAgaWYgKCFtX2VsZW1lbnROUE9iamVjdCkgewotICAgICAgICAgICAgRnJh
bWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKLSAgICAgICAg
ICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGZyYW1lLT5zY3JpcHQo
KS5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAgICAgICAgIGlmICgh
b2JqZWN0KQotICAgICAgICAgICAgICAgIG1fZWxlbWVudE5QT2JqZWN0ID0gX05QTl9DcmVhdGVO
b1NjcmlwdE9iamVjdCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZWxl
bWVudE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgb2JqZWN0LCBmcmFtZS0+
c2NyaXB0KCkuYmluZGluZ1Jvb3RPYmplY3QoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBS
ZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJl
OiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW5zL25wcnVudGltZS5odG1s
I2Jyb3dzZXJhY2Nlc3M+Ci0gICAgICAgIGlmIChtX2VsZW1lbnROUE9iamVjdCkKLSAgICAgICAg
ICAgIF9OUE5fUmV0YWluT2JqZWN0KG1fZWxlbWVudE5QT2JqZWN0KTsKLQotICAgICAgICAqKHZv
aWQgKiopdmFsdWUgPSBtX2VsZW1lbnROUE9iamVjdDsKLSAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotICAgIH0KLQotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogewotICAgICAg
ICBQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgKigoTlBC
b29sKil2YWx1ZSkgPSBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwotICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6Omdl
dFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNo
YXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZp
ZXc6OmdldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJp
YWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0K
LSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAg
ICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAg
ICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRG
cmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGZyYW1lICYm
IGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENT
dHJpbmcgY29va2llU3RyID0gcGFnZS0+Y29va2llSmFyKCkuY29va2llcygqZnJhbWUtPmRvY3Vt
ZW50KCksIHUpLnV0ZjgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0gY29va2ll
U3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgqdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVl
LCAwLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUs
IGNvb2tpZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlTdHIgPSB0b1N0cmluZyhXZWJDb3Jl
Ojpwcm94eVNlcnZlcnNGb3JVUkwodSkpLnV0ZjgoKTsKLSAgICAgICAgICAgIGlmICghcHJveHlT
dHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHByb3h5U3Ry
Lmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihO
UE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewotICAg
ICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOwotICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAqbGVuID0gc2l6
ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
TlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVz
IiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICBMT0coUGx1
Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5V
UkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxW
Q29va2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VV
UkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBjb25z
dCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7
Ci0gICAgICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmRvY3VtZW50KCkgJiYgIWNvb2tpZVN0
ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1lLT5k
b2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigp
LnNldENvb2tpZXMoKmZyYW1lLT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURf
VVJMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6Ci0gICAg
ICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoJXMpOiBQbHVnaW5z
IGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5mb3JtYXRpb24uIiwgcHJldHR5TmFtZUZv
ck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAgICByZXN1bHQgPSBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBM
T0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMOiAlcyIsIHByZXR0eU5hbWVG
b3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0ID0gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29u
c3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3Qg
Y2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAvKiByZWFsbSAqLywgY2hhcioqICAvKiB1
c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8sIGNoYXIqKiAvKiBwYXNzd29yZCAqLywg
dWludDMyX3QqIC8qIHBsZW4gKi8pCi17Ci0jaWYgTE9HX0RJU0FCTEVECi0gICAgVU5VU0VEX1BB
UkFNKHByb3RvY29sKTsKLSAgICBVTlVTRURfUEFSQU0oaG9zdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHBvcnQpOwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRBdXRoZW50
aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVzLCBwb3J0PSVkIiwgcHJvdG9jb2wsIGhv
c3QsIHBvcnQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQotewotICAgIE5QUF9TZXRW
YWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0dmFsdWU7
Ci0gICAgaWYgKCFzZXRWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
LSAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZhbHVl
KG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lu
cy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZp
ZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlNzZjZDE4ZDczMGUwNjJlMmI4
Y2Q1MjgzNDExNGU4ZTA2ZmNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3
YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgUGx1Z2luVmlld19oCi0jZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYUNhblN0YXJ0TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1BsdWdpblZpZXdCYXNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4KLSNlbmRpZgotCi10eXBl
ZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwotCi1uYW1lc3BhY2UgSlND
IHsKLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAg
ICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFz
cyBGcmFtZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRNTFBsdWdJbkVsZW1l
bnQ7Ci0gICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBjbGFzcyBNb3VzZUV2ZW50OwotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW47Ci0jZW5kaWYKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwotICAgIGNsYXNzIFBs
dWdpblJlcXVlc3Q7Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtOwotICAgIGNsYXNzIFJlc291cmNl
RXJyb3I7Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLSAgICBjbGFzcyBXaGVlbEV2ZW50
OwotCi0gICAgZW51bSBQbHVnaW5TdGF0dXMgewotICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RG
aW5kUGx1Z2luLAotICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAotICAgICAg
ICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1
Z2luUmVxdWVzdCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblJlcXVlc3Qp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpblJl
cXVlc3QoRnJhbWVMb2FkUmVxdWVzdCYmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAg
ICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0IHsgV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSB9
Ci0gICAgICAgICAgICAsIG1fbm90aWZ5RGF0YSB7IG5vdGlmeURhdGEgfQotICAgICAgICAgICAg
LCBtX3NlbmROb3RpZmljYXRpb24geyBzZW5kTm90aWZpY2F0aW9uIH0KLSAgICAgICAgICAgICwg
bV9zaG91bGRBbGxvd1BvcHVwcyB7IHNob3VsZEFsbG93UG9wdXBzIH0KLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQotICAgICAgICB2b2lkKiBu
b3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9Ci0gICAgICAgIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQot
ICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRB
bGxvd1BvcHVwczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9m
cmFtZUxvYWRSZXF1ZXN0OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJv
b2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1cHM7
Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7Ci0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwotICAgIH07Ci0K
LSAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgUGx1
Z2luU3RyZWFtQ2xpZW50Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFBs
dWdpbk1hbnVhbExvYWRlcgotICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPFBsdWdpblZp
ZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0lu
RWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwotCi0g
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdl
dCgpOyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUCBpbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0gICAgICAgIHZv
aWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBsdWdp
blZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAgICAgICAgUmVm
UHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBiaW5kaW5nSW5zdGFuY2UoKSBvdmVycmlkZTsK
LQotICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7
IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICAvLyBOUE4gZnVu
Y3Rpb25zCi0gICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBFcnJvciBnZXRV
UkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwotICAgICAgICBOUEVycm9y
IHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
Ml90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7
Ci0gICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKLSAgICAg
ICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQs
IE5QU3RyZWFtKiogc3RyZWFtKTsKLSAgICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVhbSogc3Ry
ZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKLSAgICAgICAgTlBFcnJvciBkZXN0cm95
U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Ci0jZW5kaWYKLSAgICAg
ICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsKLSNlbmRp
ZgotICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKLSAgICAgICAgCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIE5QRXJy
b3IgZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLSAg
ICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OwotICAgICAgICBOUEVycm9yIGdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxl
LCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7Ci0gICAgICAg
IE5QRXJyb3Igc2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbik7Ci0gICAgICAgIE5QRXJy
b3IgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFy
KiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVh
bG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWlu
dDMyX3QqIHBsZW4pOwotICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOwotICAg
ICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOwotI2VuZGlmCi0gICAgICAgIHZv
aWQgZm9yY2VSZWRyYXcoKTsKLSAgICAgICAgdm9pZCBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJv
b2wgc3RhdGUpOwotICAgICAgICB2b2lkIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOwotCi0gICAg
ICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0gICAg
ICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0SmF2
YVNjcmlwdFBhdXNlZChib29sKSBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIHByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5l
Y3RTdHJlYW0oUGx1Z2luU3RyZWFtKik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qIHN0cmVh
bSkgb3ZlcnJpZGUgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLSNlbmRpZgotCi0gICAg
ICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKLSAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkgb3Zl
cnJpZGU7Ci0gICAgICAgIHZvaWQgc2V0Rm9jdXMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZv
aWQgc2hvdygpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGhpZGUoKSBvdmVycmlkZTsKLSAgICAg
ICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgV2lkZ2V0OjpT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqKSBvdmVycmlkZTsK
LSAgICAgICAgdm9pZCBjbGlwUmVjdENoYW5nZWQoKSBvdmVycmlkZTsKLQotICAgICAgICAvLyBU
aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0byBvYnRhaW4g
YSBjbGlwIHJlY3QgdGhhdCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwKLSAgICAgICAg
Ly8gZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJlY3RzIGNvb3Jk
aW5hdGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgot
ICAgICAgICAvLyBUaGlzIGNsaXAgaW5jbHVkZXMgYW55IGNsaXBzIHRoYXQgdGhlIHdpZGdldCBp
dHNlbGYgc2V0cyB1cCBmb3IgaXRzIGNoaWxkcmVuLgotICAgICAgICBJbnRSZWN0IHdpbmRvd0Ns
aXBSZWN0KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBoYW5kbGVFdmVudChFdmVudCYpIG92ZXJy
aWRlOwotICAgICAgICB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kikgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZvaWQgc2V0UGFyZW50VmlzaWJsZShib29sKSBvdmVycmlkZTsKLQotICAgICAgICBib29s
IGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAg
ICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgp
OyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKLQotICAgICAgICBjb25z
dCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQot
ICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlw
ZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RhdGljIExSRVNVTFQg
Q0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwot
ICAgICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgICAgICBXTkRQUk9DIHBsdWdpblduZFByb2MoKSBj
b25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KLSNlbmRpZgotCi0gICAgICAgIC8vIFVz
ZWQgZm9yIG1hbnVhbCBsb2FkaW5nCi0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiwgaW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJikgb3ZlcnJpZGU7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNDYWxsaW5nUGx1Z2luKCk7
Ci0KLSAgICAgICAgYm9vbCBzdGFydCgpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgICAgIHN0YXRpYyB2b2lkIGtlZXBBbGl2ZShOUFApOwotI2VuZGlmCi0gICAgICAg
IHZvaWQga2VlcEFsaXZlKCk7Ci0KLSNpZiBQTEFURk9STShYMTEpCi0gICAgICAgIHN0YXRpYyBE
aXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KEZyYW1lKik7Ci0gICAgICAgIHN0YXRpYyBXaW5kb3cg
Z2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpOwotI2VuZGlmCi0KLSAgICBwcml2YXRl
OgotICAgICAgICBQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYs
IFBsdWdpblBhY2thZ2UqLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLQotICAgICAg
ICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Ci0gICAgICAgIGJvb2wgc3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpOwotICAgICAgICB2b2lkIGluaXQoKTsKLSAgICAgICAgYm9vbCBw
bGF0Zm9ybVN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc3RvcCgpOwotICAgICAgICB2b2lkIHBsYXRm
b3JtRGVzdHJveSgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQ
bHVnaW5WaWV3Kik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5Q
RXJyb3IgbG9hZChGcmFtZUxvYWRSZXF1ZXN0JiYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJv
b2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFs
bG93SGVhZGVycyk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rvcjxj
aGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYKLSAg
ICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50
IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsKLQot
ICAgICAgICB2b2lkIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0
Jik7Ci0KLSAgICAgICAgdm9pZCBtZWRpYUNhblN0YXJ0KERvY3VtZW50Jikgb3ZlcnJpZGU7Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBwYWludFdpbmRv
d2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RS
VUNUKik7Ci0gICAgICAgIHN0YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBj
b25zdCBQQUlOVFNUUlVDVCopOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Ci0gICAgICAgIGJv
b2wgcGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCk7Ci0jZW5kaWYKLQotICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50
RnJhbWU7Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKLSAgICAgICAg
SFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsK
LSAgICAgICAgVVJMIG1fdXJsOwotICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7Ci0gICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKLQotICAgICAgICB2b2lkIHBlcmZv
cm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqKTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qo
c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+KTsKLSAgICAgICAgdm9pZCByZXF1ZXN0VGlt
ZXJGaXJlZCgpOwotICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAg
IFRpbWVyIG1fcmVxdWVzdFRpbWVyOwotICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsK
LQotICAgICAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOwotICAgICAgICBUaW1l
ciBtX3BvcFBvcHVwc1N0YXRlVGltZXI7Ci0KLSAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVy
RmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOwotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmKTsKLSNlbmRpZgotCi0gICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0gICAg
ICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQmKTsKLSAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQmKTsKLQotICAg
ICAgICB2b2lkIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOwotICAgICAgICBSZWZQ
dHI8SW1hZ2U+IHNuYXBzaG90KCk7Ci0KLSAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSBjb25zdDsKLQotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBpbnQgbV9wYXJhbUNvdW50
OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBjaGFyKiogbV9wYXJhbVZh
bHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAgICAgICAgU3RyaW5nIG1f
bWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2VudDsKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0YW5jZTsKLSAgICAgICAg
TlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKLQot
ICAgICAgICBOUE9iamVjdCogbV9lbGVtZW50TlBPYmplY3Q7Ci0jZW5kaWYKLQotICAgICAgICBW
ZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7Ci0KLSAgICAgICAgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luU3RyZWFtPj4gbV9zdHJlYW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFBsdWdpblJlcXVlc3Q+PiBtX3JlcXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dpbmRv
d2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hhdmVJ
bml0aWFsaXplZDsKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKLSAgICAgICAgV05EUFJPQyBt
X3BsdWdpblduZFByb2M7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7Ci0gICAgICAg
IGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOwotICAgICAgICBIREMgbV93bVByaW50SERD
OwotICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7Ci0jZW5kaWYKLQotcHVi
bGljOgotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0IHdpZGdldCkgeyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9Ci0gICAgICAgIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4g
cGxhdGZvcm1XaWRnZXQoKTsgfQotCi1wcml2YXRlOgotICAgICAgICBJbnRSZWN0IG1fY2xpcFJl
Y3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCi0gICAg
ICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCi0KLSAgICAgICAg
Ym9vbCBtX2xvYWRNYW51YWxseTsKLSAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51
YWxTdHJlYW07Ci0KLSAgICAgICAgYm9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKLQotICAgICAg
ICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKLQotICAgICAgICBzdGF0aWMgUGx1Z2luVmll
dyogc19jdXJyZW50UGx1Z2luVmlldzsKLSAgICB9OwotCi1pbmxpbmUgUGx1Z2luVmlldyogdG9Q
bHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdl
dC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
d2lkZ2V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhjb25z
dCBXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1
Z2luVmlldygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdp
ZGdldCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nh
cnkgY2FzdC4KLXZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0IFBsdWdpblZpZXcqKTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmZjhhMWUyNzlhY2NhN2ZjNjlkZjhmZWFkZGNmMDcwNjNmZTUzMjQyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NjYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1
bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9C
aXRtYXBJbWFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvRXZlbnROYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJbkVs
ZW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hvc3RXaW5kb3cuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRpbmcuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbFdpbmRvd3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bU1vdXNlRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5j
ZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvY19pbnN0YW5jZS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3J1bnRpbWVfcm9vdC5o
PgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KLQotI2lmIFVTRShDQUlSTykK
LSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+Ci0jaW5jbHVkZSA8Y2Fp
cm8td2luMzIuaD4KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIEhXTkQgd2luZG93SGFuZGxlRm9y
UGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50KQotewotICAgIHJldHVybiBjbGll
bnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgSlNDOjpKU0xvY2s7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdD
bGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOwotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmll
d1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOwotCi0vLyBUaGUgY29kZSB1c2Vk
IHRvIGhvb2sgQmVnaW5QYWludC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUgZnJvbQotLy8gPGh0
dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPi4KLS8vIENvcHlyaWdo
dCAoQykgMjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgotCi1zdGF0aWMgdW5z
aWduZWQgYmVnaW5QYWludFN5c0NhbGw7Ci1zdGF0aWMgQllURSogYmVnaW5QYWludDsKLQotc3Rh
dGljIHVuc2lnbmVkIGVuZFBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBlbmRQYWludDsKLQot
dHlwZWRlZiBIREMgKFdJTkFQSSAqUHRyQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1QqKTsK
LXR5cGVkZWYgQk9PTCAoV0lOQVBJICpQdHJFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJV
Q1QqKTsKLQotI2lmIENQVShYODZfNjQpCi1leHRlcm4gIkMiIEhEQyBfX3N0ZGNhbGwgX0hCZWdp
blBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKLWV4dGVybiAiQyIgQk9P
TCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBh
aW50KTsKLSNlbmRpZgotCi1IREMgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEJlZ2luUGFpbnQo
SFdORCBoV25kLCBQQUlOVFNUUlVDVCogbHBQYWludCkKLXsKLSAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0gICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+
bV93bVByaW50SERDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BS
SU5UQ0xJRU5ULCBzbyBzZXQgdXAgdGhlIFBBSU5UU1RSVUNUIHNvCi0gICAgICAgIC8vIHRoYXQg
dGhlIHBsdWdpbiB3aWxsIHBhaW50IGludG8gdGhlIEhEQyB3ZSBwcm92aWRlLgotICAgICAgICBt
ZW1zZXQobHBQYWludCwgMCwgc2l6ZW9mKFBBSU5UU1RSVUNUKSk7Ci0gICAgICAgIGxwUGFpbnQt
PmhkYyA9IHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICAgICAgR2V0Q2xpZW50UmVjdCho
V25kLCAmbHBQYWludC0+cmNQYWludCk7Ci0gICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5tX3dt
UHJpbnRIREM7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChfTV9JWDg2KQotICAgIC8vIENhbGwgdGhy
b3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4
LCBiZWdpblBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAgX19h
c20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAotI2Vsc2UK
LSAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLUJP
T0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJ
TlRTVFJVQ1QqIGxwUGFpbnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9w
ZXJ0eSkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhEQykg
ewotICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwgc28g
d2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51cC4KLSAgICAgICAgcmV0
dXJuIFRSVUU7Ci0gICAgfQotCi0jaWYgZGVmaW5lZCAoX01fSVg4NikKLSAgICAvLyBDYWxsIHRo
cm91Z2ggdG8gdGhlIG9yaWdpbmFsIEVuZFBhaW50LgotICAgIF9fYXNtICAgbW92ICAgICBlYXgs
IGVuZFBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAgX19hc20g
ICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgZW5kUGFpbnQKLSNlbHNlCi0gICAg
cmV0dXJuIF9IRW5kUGFpbnQoaFduZCwgbHBQYWludCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZv
aWQgaG9vayhjb25zdCBjaGFyKiBtb2R1bGUsIGNvbnN0IGNoYXIqIHByb2MsIHVuc2lnbmVkJiBz
eXNDYWxsSUQsIEJZVEUqJiBwUHJvYywgY29uc3Qgdm9pZCogcE5ld1Byb2MpCi17Ci0gICAgLy8g
U2VlIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJpbnQuaHRtbD4gZm9yIGFu
IGV4cGxhbmF0aW9uIG9mCi0gICAgLy8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCi0KLSAgICBI
SU5TVEFOQ0UgaE1vZCA9IEdldE1vZHVsZUhhbmRsZUEobW9kdWxlKTsKLQotICAgIHBQcm9jID0g
cmVpbnRlcnByZXRfY2FzdDxCWVRFKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KEdldFBy
b2NBZGRyZXNzKGhNb2QsIHByb2MpKSk7Ci0KLSNpZiBkZWZpbmVkKF9NX0lYODYpCi0gICAgaWYg
KHBQcm9jWzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFu
Ci0gICAgLy8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAg
IGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICZm
bE9sZFByb3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwUHJvY1swXSA9IDB4RTk7Ci0g
ICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocFBy
b2MgKyA1KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQotICAgIC8qIERpc2Fzc2VtYmx5IG9m
IEJlZ2luUGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBtb3Yg
ICAgICAgICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1v
diAgICAgICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAgICAg
ICBzeXNjYWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAotICAg
IDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZD
NUJDIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAgICAg
ICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AKLSAg
ICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlG
QzVDMCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAgICAg
ICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9wCi0g
ICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAgIG5vcAotICAgICovCi0gICAgLy8g
Q2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5Ci0gICAg
RFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxEV09S
RCo+KHBQcm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRFdPUkQgZmxPbGRQ
cm90ZWN0OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JFQURX
UklURSwgJiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92IHJh
eCwgdGhpcwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAqKF9faW50NjQqKShwUHJvYysyKSA9
IChfX2ludDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJheAot
ICAgIHBQcm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBPZmZz
Y3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBB
SU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3QgUEFJ
TlRTVFJVQ1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7Ci0gICAg
aWYgKGhhdmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBoYXZlSG9va2VkID0gdHJ1ZTsK
LQotICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNw
b25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBhaW50
L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZwotICAgIC8v
IHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZlY3Rz
IHRoZSBlbnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhvb2soInVzZXIzMi5kbGwiLCAiQmVn
aW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9jYXN0
PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFp
bnQpKSk7Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2Fs
bCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0KLX0KLQotc3RhdGljIGJvb2wgcmVn
aXN0ZXJQbHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRv
d0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7
Ci0KLSAgICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7Ci0KLSAgICBXTkRDTEFT
U0VYIHdjZXg7Ci0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2Nl
eC5oSWNvblNtICAgICAgICA9IDA7Ci0gICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RCTENM
S1M7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldpbmRvd1Byb2M7Ci0gICAgd2NleC5j
YkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2Nl
eC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2NleC5o
SWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3Io
MCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gKEhCUlVTSClDT0xPUl9X
SU5ET1c7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7Ci0gICAgd2NleC5scHN6Q2xhc3NO
YW1lICA9IGtXZWJQbHVnaW5WaWV3Q2xhc3NOYW1lOwotCi0gICAgcmV0dXJuICEhUmVnaXN0ZXJD
bGFzc0V4KCZ3Y2V4KTsKLX0KLQotTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3OjpQbHVnaW5W
aWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSkKLXsKLSAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0K
LSAgICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShVSU5U
IG1lc3NhZ2UpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgICAgIGNhc2UgV01fTEJV
VFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVU
VE9OVVA6Ci0gICAgICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgSW50UG9pbnQgY29udGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcq
IHZpZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBjb250ZW50c1Rv
TmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKLX0KLQotTFJFU1VMVAotUGx1
Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSkKLXsKLSAgICAvLyA8cmRhcjovLzU3MTExMzY+IFNvbWV0aW1lcyBGbGFz
aCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3JlYXRpbmcKLSAgICAvLyBhIGZ1bGwtc2Ny
ZWVuIHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBpdCwgd2hpY2ggY2F1c2VzIHRoZQotICAg
IC8vIGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciByZWNlaXZlIG1vdXNlIGV2ZW50cy4gV2Ug
c2V0L3JlbGVhc2UgY2FwdHVyZQotICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVmb3JlIHNlbmRp
bmcgdGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHByZXZlbnQgdGhhdC4KLSAgICBzd2l0Y2gg
KG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBX
TV9NQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAgICAg
IDo6U2V0Q2FwdHVyZShoV25kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdN
X0xCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01f
UkJVVFRPTlVQOgotICAgICAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gbV9sYXN0TWVzc2FnZSAmJgotICAg
ICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFduZFBy
b2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKLSAgICAgICAgbV9pc0NhbGxpbmdQbHVn
aW5XbmRQcm9jKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChtZXNzYWdlID09IFdNX1VT
RVIgKyAxICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKSkgewotICAgICAgICBpZiAoIW1fbWVzc2Fn
ZVRocm90dGxlcikKLSAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlciA9IG1ha2VVbmlxdWU8
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4odGhpcyk7Ci0KLSAgICAgICAgbV9tZXNzYWdlVGhy
b3R0bGVyLT5hcHBlbmRNZXNzYWdlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbV9sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7Ci0g
ICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gdHJ1ZTsKLQotICAgIC8vIElmIHRoZSBwbHVn
LWluIGRvZXNuJ3QgZXhwbGljaXRseSBzdXBwb3J0IGNoYW5naW5nIHRoZSBwb3AtdXAgc3RhdGUs
IHdlIGVuYWJsZQotICAgIC8vIHBvcHVwcyBmb3IgYWxsIHVzZXIgZ2VzdHVyZXMuCi0gICAgLy8g
Tm90ZSB0aGF0IHdlIG5lZWQgdG8gcG9wIHRoZSBzdGF0ZSBpbiBhIHRpbWVyLCBiZWNhdXNlIHRo
ZSBGbGFzaCBwbHVnLWluIAotICAgIC8vIHBvcHMgdXAgd2luZG93cyBpbiByZXNwb25zZSB0byBh
IHBvc3RlZCBtZXNzYWdlLgotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVyc2lv
biA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYKLSAgICAgICAgaXNXaW5kb3dz
TWVzc2FnZVVzZXJHZXN0dXJlKG1lc3NhZ2UpICYmICFtX3BvcFBvcHVwc1N0YXRlVGltZXIuaXNB
Y3RpdmUoKSkgewotCi0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7Ci0KLSAg
ICAgICAgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIH0KLQot
ICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7Ci0gICAgICAgIC8vIE1vc3QgKGFs
bD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28g
d2UKLSAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9u
IG91ciBob29rZWQgdmVyc2lvbnMgb2YKLSAgICAgICAgLy8gQmVnaW5QYWludC9FbmRQYWludCB0
byBtYWtlIHRoZSBwbHVnaW4gZHJhdyBpbnRvIHRoZSBnaXZlbiBIREMuCi0gICAgICAgIG1lc3Nh
Z2UgPSBXTV9QQUlOVDsKLSAgICAgICAgbV93bVByaW50SERDID0gcmVpbnRlcnByZXRfY2FzdDxI
REM+KHdQYXJhbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBw
cm9jLgotICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFBy
b2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIG1fd21QcmludEhEQyA9
IDA7Ci0KLSAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSBmYWxzZTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsK
LSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcmIGZy
YW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIEludFJlY3Qg
b2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0g
bV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LmNvbnRl
bnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7
Ci0gICAgbV93aW5kb3dSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOwotICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkgJiYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBv
bGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJlY3QpKSB7Ci0KLSAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLQotICAgICAgICAvLyBUbyBwcmV2ZW50IGZsYXNoZXMg
d2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5nIHRoZSB3aW5kb3cKLSAg
ICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdpbmRvdyB0byB0aGUgemVy
byByZWN0LgotCi0gICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3QgPSAhbV9wbHVnaW4tPnF1aXJr
cygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7
Ci0KLSAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICBhdXRvIHJnbiA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgICAgICAg
ICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBGQUxT
RSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJT2Jq
ZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xp
cFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgVFJVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5kb3dS
ZWN0ICE9IG9sZFdpbmRvd1JlY3QpCi0gICAgICAgICAgICA6Ok1vdmVXaW5kb3cocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5k
b3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwgVFJVRSk7Ci0KLSAgICAgICAg
aWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJT2Jq
ZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xp
cFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgVFJVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgICAgICBtX2hhdmVV
cGRhdGVkUGx1Z2luV2lkZ2V0ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotICAgIGlmIChmb2N1c2VkICYmIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNldEZvY3VzKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
Ci0gICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLQotICAgIGlmICghbV9wbHVnaW4gfHwg
bV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0K
LSAgICBucEV2ZW50LmV2ZW50ID0gZm9jdXNlZCA/IFdNX1NFVEZPQ1VTIDogV01fS0lMTEZPQ1VT
OwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLSAgICBucEV2ZW50LmxQYXJhbSA9IDA7Ci0KLSAg
ICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygp
Ci17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0KLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxl
KCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOwotCi0gICAgV2lkZ2V0OjpzaG93KCk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17Ci0gICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOwot
Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0g
ICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfSElERSk7Ci0KLSAg
ICBXaWRnZXQ6OmhpZGUoKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudCYgbnBFdmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBib29sIHNob3VsZFBvcCA9IGZhbHNl
OwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJTX0hB
U19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJiBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUobnBF
dmVudC5ldmVudCkpIHsKLSAgICAgICAgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSh0cnVlKTsKLSAg
ICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZucEV2ZW50KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQot
ICAgIGlmIChzaG91bGRQb3ApIAotICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQot
ICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFu
c2Zvcm1lZENvbnRleHQoSERDIGhkYykKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAg
ICAgIFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCBy
ZWludGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8
IFBSRl9PV05FRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LnR5
cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsK
LQotICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLQot
ICAgIEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3
PihwYXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54KCk7Ci0g
ICAgd2luZG93cG9zLnkgPSByLnkoKTsKLSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7Ci0g
ICAgd2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAg
ICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50LmxQYXJh
bSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBucEV2ZW50
LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAgICBzZXRO
UFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5U
OwotICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7
Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkg
cmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGlnbm9yZXMg
aXQgc28gd2UganVzdCBwYXNzIG51bGwuCi0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAg
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50V2lu
ZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNv
bnRleHQuc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKTsKLQotICAgIEludFBvaW50IGxvY2F0
aW9uSW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIExvY2FsV2luZG93
c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgZnJhbWVSZWN0KCksIGZhbHNlKTsKLQot
I2lmIFVTRShDQUlSTykKLSAgICAvLyBNdXN0IGZsdXNoIGRyYXdpbmdzIHVwIHRvIHRoaXMgcG9p
bnQgdG8gdGhlIGJhY2tpbmcgbWV0YWZpbGUsIG90aGVyd2lzZSB0aGUKLSAgICAvLyBwbHVnaW4g
cmVnaW9uIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBhbnkgY2xlYXIgcmVnaW9ucyBzcGVjaWZp
ZWQgaW4gdGhlCi0gICAgLy8gY2Fpcm8tY29udHJvbGxlZCBwb3J0aW9ucyBvZiB0aGUgcmVuZGVy
aW5nLgotICAgIGNhaXJvX3Nob3dfcGFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
KTsKLSNlbmRpZgotCi0gICAgSERDIGhkYyA9IHdpbmRvd3NDb250ZXh0LmhkYygpOwotICAgIFhG
T1JNIG9yaWdpbmFsVHJhbnNmb3JtOwotICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdp
bmFsVHJhbnNmb3JtKTsKLQotICAgIC8vIFRoZSBwbHVnaW4gZXhwZWN0cyB0aGUgREMgdG8gYmUg
aW4gY2xpZW50IGNvb3JkaW5hdGVzLCBzbyB3ZSB0cmFuc2xhdGUKLSAgICAvLyB0aGUgREMgdG8g
bWFrZSB0aGF0IHNvLgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LmdldENUTSgp
OwotICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5k
b3cueSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRv
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0
cmFuc2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBXaWRnZXQ6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29u
dGV4dCopCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3IHRoZSAi
bWlzc2luZyBwbHVnaW4iIGltYWdlCi0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29u
dGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29udGV4dC5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVuc3VyZSB0aGF0
IHdlIGhhdmUgY2FsbGVkIFNldFdpbmRvdyBiZWZvcmUgd2UgdHJ5IHRvIHBhaW50LgotICAgIGlm
ICghbV9oYXZlQ2FsbGVkU2V0V2luZG93KQotICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVS
ZWN0KCkpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBpZiAoY29udGV4dC5z
aG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpCi0gICAgICAgICAgICBwYWludFdpbmRvd2VkUGx1
Z2luSW50b0NvbnRleHQoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgp
KS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKLSAgICBMb2NhbFdpbmRvd3NDb250ZXh0
IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIHJlY3RJbldpbmRvdywgbV9pc1RyYW5zcGFyZW50KTsK
LQotICAgIC8vIE9uIFNhZmFyaS9XaW5kb3dzIHdpdGhvdXQgdHJhbnNwYXJlbmN5IGxheWVycyB0
aGUgR3JhcGhpY3NDb250ZXh0IHJldHVybnMgdGhlIEhEQwotICAgIC8vIG9mIHRoZSB3aW5kb3cg
YW5kIHRoZSBwbHVnaW4gZXhwZWN0cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdpbmRvdyBj
b29yZGluYXRlcy4KLSAgICBpZiAoY29udGV4dC5oZGMoKSA9PSB3aW5kb3dzQ29udGV4dC5oZGMo
KSkgewotICAgICAgICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAgIEdldFdvcmxkVHJhbnNmb3Jt
KHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3JtLmVE
eCA9IDA7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHkgPSAwOwotICAgICAgICBTZXRXb3JsZFRyYW5z
Zm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7Ci0gICAgfQotCi0gICAgcGFp
bnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQot
ewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQg
bnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQua2V5Q29kZSgpOwotCi0gICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7
Ci0gICAgfSBlbHNlIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAgICAgIG5wRXZlbnQu
bFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5dXBFdmVudCkgewotICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7Ci0gICAgICAg
IG5wRXZlbnQubFBhcmFtID0gMHg4MDAwOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm47Ci0K
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsK
LSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwotfQotCi1leHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwotCi12
b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCYgZXZlbnQpCi17Ci0g
ICAgQVNTRVJUKG1fcGx1Z2luICYmICFtX2lzV2luZG93ZWQpOwotCi0gICAgTlBFdmVudCBucEV2
ZW50OwotCi0gICAgSW50UG9pbnQgcCA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8
RnJhbWVWaWV3PihwYXJlbnQoKSksIEludFBvaW50KGV2ZW50LnBhZ2VYKCksIGV2ZW50LnBhZ2VZ
KCkpKTsKLQotICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOwot
ICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLQotICAgIGlmIChldmVudC5jdHJsS2V5KCkpCi0gICAg
ICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7Ci0gICAgaWYgKGV2ZW50LnNoaWZ0S2V5
KCkpCi0gICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOwotCi0gICAgaWYgKGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKLSAgICAgICAgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50Ci0gICAgICAgIHx8IGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01PVVNFTU9WRTsKLSAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbkRvd24oKSkKLSAg
ICAgICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTGVm
dEJ1dHRvbjoKLSAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVUVE9OOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0g
ICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgICAgICAg
ICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0gICAg
ICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgot
ICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01CVVRUT05ET1dOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UmlnaHRCdXR0b246Ci0gICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVu
dC5idXR0b24oKSkgewotICAgICAgICBjYXNlIExlZnRCdXR0b246Ci0gICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTWlkZGxlQnV0dG9uOgotICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05V
UDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAgICAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgIC8vIEZJWE1FOiBD
b25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhl
cmUuCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQuc2V0
RGVmYXVsdEhhbmRsZWQoKTsKLQotICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3Ig
aXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAK
LSAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0
Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0gICAgaWdub3JlTmV4dFNldEN1
cnNvciA9IHRydWU7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkp
Ci0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1cnJl
bnRDdXJzb3IoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
cGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAocGFy
ZW50KQotICAgICAgICBpbml0KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGUg
cGx1Zy1pbiB3aW5kb3cgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBoYXZlIHRoZSBmb2N1cywgd2Ug
bmVlZCB0byAKLSAgICAgICAgLy8gY2xlYXIgaXQgdG8gcHJldmVudCB0aGUgd2ViIHZpZXcgd2lu
ZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNlIHRoYXQgY2FuCi0gICAgICAgIC8vIHRyaWdn
ZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJlaW5nIGRldGFjaGVkLgot
ICAgICAgICBIV05EIGZvY3VzZWRXaW5kb3cgPSA6OkdldEZvY3VzKCk7Ci0gICAgICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwgOjpJc0NoaWxkKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5kb3cpKQotICAgICAgICAgICAgOjpTZXRGb2N1
cygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29s
IHZpc2libGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQot
ICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAg
ICAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgU1dfU0hPV05BKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgU2hvd1dpbmRv
dyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0PEZyYW1l
Vmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Ci0gICAg
cC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwotCi0gICAgSW50U2l6ZSBzID0gcmVj
dC5zaXplKCk7Ci0gICAgcy5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBtX25wV2luZG93Lngg
PSBwLngoKTsKLSAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKLQotICAgIG1fbnBXaW5kb3cud2lk
dGggPSBzLndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBzLmhlaWdodCgpOwotCi0g
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHMud2lkdGgoKTsKLSAgICBtX25wV2luZG93
LmNsaXBSZWN0LmJvdHRvbSA9IHMuaGVpZ2h0KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gMDsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Ci0KLSAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotCi0gICAgICAgIFdORFBST0MgY3VycmVudFduZFBy
b2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25k
UHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xv
bmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1
Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmls
ZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBHZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9B
VFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBpZiAoIUdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVu
YW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRy
cykpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGlmIChhdHRy
cy5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQotICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBIQU5ETEUgZmlsZUhhbmRsZSA9IENy
ZWF0ZUZpbGVXKGZpbGVuYW1lLndpZGVDaGFyYWN0ZXJzKCkuZGF0YSgpLCBGSUxFX1JFQURfREFU
QSwgRklMRV9TSEFSRV9SRUFELCAwLCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKLSAgICAKLSAgICBp
ZiAoZmlsZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVM
b3cpOwotCi0gICAgRFdPUkQgYnl0ZXNSZWFkOwotICAgIGludCByZXR2YWwgPSBSZWFkRmlsZShm
aWxlSGFuZGxlLCBidWZmZXIuZGF0YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZieXRlc1JlYWQs
IDApOwotCi0gICAgQ2xvc2VIYW5kbGUoZmlsZUhhbmRsZSk7Ci0KLSAgICBpZiAocmV0dmFsID09
IDAgfHwgYnl0ZXNSZWFkICE9IGF0dHJzLm5GaWxlU2l6ZUxvdykKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1i
b29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUsIHZvaWQq
LCBOUEVycm9yKikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJy
b3IqIHJlc3VsdCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBO
Vm5ldHNjYXBlV2luZG93OiB7Ci0gICAgICAgICAgICBIV05EKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDxIV05EKj4odmFsdWUpOwotICAgICAgICAgICAgKncgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xp
ZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCkgOiAwKTsKLSAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNX
aW5kb3dsZXNzOiB7Ci0gICAgICAgICAgICBOUEJvb2wqIGZsYWcgPSByZWludGVycHJldF9jYXN0
PE5QQm9vbCo+KHZhbHVlKTsKLSAgICAgICAgICAgICpmbGFnID0gVFJVRTsKLSAgICAgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSB9OwotICAgICAgICA6
OkludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQ
bHVnaW5SZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3Qt
PnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3Ap
OwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0g
eyByLngoKSwgci55KCksIHIubWF4WCgpLCByLm1heFkoKSB9OwotICAgICAgICBJbnZhbGlkYXRl
UmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrVGhyb3R0bGVJbnZhbGlkYXRlKSkgewotICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBw
ZW5kKHIpOwotICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgxX21zKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChyKTsKLSAgICB9Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCi17Ci0g
ICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVDVCByOwotCi0g
ICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7Ci0gICAgICAgIGludmFsaWRhdGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcmVjdChJbnRQb2ludChy
LmxlZnQsIHIudG9wKSwgSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5ib3R0b20tci50b3ApKTsK
LSAgICBpbnZhbGlkYXRlUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgOjpVcGRhdGVXaW5kb3co
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICA6OlVwZGF0ZVdpbmRv
dyh3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5k
b3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKSk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQo
bV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQotICAgIGlmICht
X2lzV2luZG93ZWQpIHsKLSAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7Ci0gICAgICAgIHNl
dFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWlu
dCk7Ci0KLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBXU19DSElMRDsKLSAgICAgICAgaWYgKGlzU2Vs
ZlZpc2libGUoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IFdTX1ZJU0lCTEU7Ci0KLSAgICAgICAg
SFdORCBwYXJlbnRXaW5kb3dIYW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci0g
ICAgICAgIEhXTkQgd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld0Ns
YXNzTmFtZSwgMCwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAwLCBwYXJlbnRXaW5kb3dIYW5kbGUsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFu
ZGxlKCksIDApOwotCi0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRvdyk7Ci0KLSAgICAg
ICAgLy8gQ2FsbGluZyBTZXRXaW5kb3dMb25nUHRyQSBoZXJlIG1ha2VzIHRoZSB3aW5kb3cgcHJv
YyBBU0NJSSwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYXQgbGVhc3QKLSAgICAgICAgLy8gdGhlIFNo
b2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgotI2lmIENQVShYODZfNjQpCi0gICAgICAgIDo6U2V0
V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9O
R19QVFIpRGVmV2luZG93UHJvY0EpOwotI2Vsc2UKLSAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRy
QShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywgKExPTkcpRGVmV2luZG93UHJv
Y0EpOwotI2VuZGlmCi0gICAgICAgIFNldFByb3AocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSwgdGhpcyk7Ci0KLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlV2luZG93OwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKLSAg
ICB9Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotICAgIGlmICghbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQotICAg
ICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSAgICBpZiAoIXBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERlc3Ryb3lXaW5kb3co
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoMCk7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQotewotICAgIGF1dG8g
aGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotCi0gICAgaWYg
KCFtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgLy8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMuCi0g
ICAgICAgIFNldEdyYXBoaWNzTW9kZShoZGMuZ2V0KCksIEdNX0FEVkFOQ0VEKTsKLQotICAgICAg
ICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQoKSwg
JnRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVzcyBwbHVnLWlucyBhc3N1bWUgdGhh
dCB0aGV5J3JlIGRyYXdpbmcgb250byB0aGUgdmlldydzIERDLgotICAgICAgICAvLyBUcmFuc2xh
dGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgcGx1Zy1pbiBkcmF3cyBhdCAoMCwgMCkuCi0gICAg
ICAgIEludFBvaW50IHBvc2l0aW9uID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkpLmxvY2F0aW9uKCk7Ci0gICAgICAgIHRyYW5zZm9y
bS5lRHggPSAtcG9zaXRpb24ueCgpOwotICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gLXBvc2l0aW9u
LnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsK
LSAgICB9Ci0KLSAgICB2b2lkKiBiaXRzOwotICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFwSW5m
bzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBhdXRvIGhibXAgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMs
ICZiaXRzLCAwLCAwKSk7Ci0KLSAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxIQklU
TUFQPihTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKSk7Ci0KLSAgICBwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjLmdldCgpKTsKLQotICAgIFNlbGVjdE9iamVjdChoZGMu
Z2V0KCksIGhibXBPbGQpOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaGJtcC5n
ZXQoKSk7Ci19Ci0KLWZsb2F0IFBsdWdpblZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QK
LXsKLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7Ci0KLSAgICBpZiAoIXBhcmVudCgpIHx8
ICFwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIHNjYWxlRmFjdG9yOwot
Ci0gICAgLy8gRm9yIHdpbmRvd2xlc3MgcGx1Z2lucywgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Ig
d2lsbCBiZSBhcHBsaWVkIGFzIGZvciBvdGhlciBwYWdlIGVsZW1lbnRzLgotICAgIGlmICghbV9p
c1dpbmRvd2VkKQotICAgICAgICByZXR1cm4gc2NhbGVGYWN0b3I7Ci0KLSAgICBGcmFtZVZpZXcm
IGZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIGlmIChm
cmFtZVZpZXcuZnJhbWUoKS5kb2N1bWVudCgpKQotICAgICAgICBzY2FsZUZhY3RvciA9IGZyYW1l
Vmlldy5mcmFtZSgpLmRvY3VtZW50KCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICByZXR1
cm4gc2NhbGVGYWN0b3I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL25wYXBpLmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvbnBhcGkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NTJiM2RjYTRjODcwNTkyNWNhMjU0YWY1ZGNlYzUzODZmYmM2ZDJkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1BsdWdpbnMvbnBhcGkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdh
eXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBj
YWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5j
ZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1h
ZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1p
biB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6OnN0YXJ0Lgot
Ly8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdo
ZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBp
bnN0YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGlu
c3RhbmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICBy
ZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKLX0KLQotdm9pZCogTlBOX01l
bUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQot
dm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50
MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0gICAgLy8gRG8gbm90aGluZwotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykK
LXsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3Ig
TlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIHJldHVybiBO
UEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCog
bm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJvciBO
UE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVS
TCh1cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBj
b25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwg
dGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bv
c3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBs
ZW4sIGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2Us
IE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkK
LXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFt
KHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQotewotICAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxl
biwgYnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2Us
IE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7
Ci19Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQotewotICAgIFBs
dWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotCi0gICAg
IGlmICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMo
KTsKLSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1
cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOwotfQotCi12b2lkIE5QTl9JbnZh
bGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAgUGx1
Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0gICAgdmll
dy0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRl
UmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKLXsKLSAgICBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdp
b24pOwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKLX0KLQotTlBFcnJv
ciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSk7Ci0KLSAgICAgaWYgKCF2aWV3KQotICAgICAgICAgcmV0dXJuIFBsdWdpblZpZXc6
OmdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSk7Ci0KLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQot
TlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCi17Ci0gICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQotdm9pZCogTlBOX0dldEphdmFFbnYo
KQotewotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIE5QTl9H
ZXRKYXZhUGVlcihOUFApCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBl
bmFibGVkKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnB1c2hQb3B1
cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLWV4dGVybiAiQyIgdHlwZWRlZiB2b2lk
IFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uKHZvaWQqKTsKLXZvaWQgTlBOX1BsdWdpblRo
cmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFuY2UsIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9u
IGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUg
b25seSBkaWZmZXJzIGZyb20gTWFpblRocmVhZEZ1bmN0aW9uIGJ5IGJlaW5nIGV4dGVybiAiQyIs
IHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNhbGxpbmcgY29udmVudGlvbiBvbiBhbnkgY29tcGlsZXJz
IHdlIHVzZS4KLSAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5zY2hl
ZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6TWFpblRocmVhZEZ1bmN0aW9uKj4oZnVuYyksIHVzZXJEYXRhKTsKLX0KLQotTlBFcnJv
ciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJs
ZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCi17Ci0gICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlRm9yVVJMKHZh
cmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZUZvclVS
TChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZh
bHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBw
b3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5h
bWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKQotewot
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50aWNh
dGlvbkluZm8ocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1lLCB1
bGVuLCBwYXNzd29yZCwgcGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1lbnUo
TlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluc3RhbmNl
KTsKLSAgICBVTlVTRURfUEFSQU0obWVudSk7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNv
cmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWE2ZjExMjAzY2JlOTdkYzM2YTEzYzRmNjgyYjczODA5ZDllYTU0Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiRW1iZWRkZWRXaWRnZXQuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVj
dC5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLSNpbmNsdWRlICJNZW1vcnlT
dHJlYW0uaCIKLSNpbmNsdWRlICJXZWJFcnJvci5oIgotI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNl
LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZWY8RW1iZWRkZWRXaWRnZXQ+IEVt
YmVkZGVkV2lkZ2V0OjpjcmVhdGUoSVdlYkVtYmVkZGVkVmlldyogdmlldywgSFRNTFBsdWdJbkVs
ZW1lbnQqIGVsZW1lbnQsIEhXTkQgcGFyZW50V2luZG93LCBjb25zdCBJbnRTaXplJiBzaXplKQot
ewotICAgIGF1dG8gd2lkZ2V0ID0gYWRvcHRSZWYoKm5ldyBFbWJlZGRlZFdpZGdldCh2aWV3LCBl
bGVtZW50KSk7Ci0KLSAgICB3aWRnZXQtPmNyZWF0ZVdpbmRvdyhwYXJlbnRXaW5kb3csIHNpemUp
OwotICAgIHJldHVybiB3aWRnZXQ7Ci19Ci0KLUVtYmVkZGVkV2lkZ2V0Ojp+RW1iZWRkZWRXaWRn
ZXQoKQotewotICAgIGlmIChtX3dpbmRvdykKLSAgICAgICAgRGVzdHJveVdpbmRvdyhtX3dpbmRv
dyk7Ci19Ci0KLWJvb2wgRW1iZWRkZWRXaWRnZXQ6OmNyZWF0ZVdpbmRvdyhIV05EIHBhcmVudFdp
bmRvdywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBU1NFUlQoIW1fd2luZG93KTsKLQot
ICAgIEhXTkQgd2luZG93OwotICAgIFNJWkUgcGx1Z2luU2l6ZShzaXplKTsKLQotICAgIEhSRVNV
TFQgaHIgPSBtX3ZpZXctPmNyZWF0ZVZpZXdXaW5kb3cocGFyZW50V2luZG93LCAmcGx1Z2luU2l6
ZSwgJndpbmRvdyk7Ci0gICAgICAgIAotICAgIGlmIChGQUlMRUQoaHIpIHx8ICF3aW5kb3cpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fd2luZG93ID0gd2luZG93OwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV93aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJFQ1QgciA9IHJlY3Q7Ci0gICA6OkludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmciwgZmFs
c2UpOwotfQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQotICAgICAgICBX
aWRnZXQ6OnNldEZyYW1lUmVjdChyZWN0KTsKLQotICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci19
Ci0KLXZvaWQgRW1iZWRkZWRXaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICBpZiAo
IXBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIEludFJlY3Qgb2xkV2luZG93
UmVjdCA9IG1fd2luZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVj
dDsKLQotICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LmNvbnRlbnRzVG9XaW5k
b3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0gICAgbV9j
bGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7Ci0gICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRv
d1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Ci0KLSAgICBpZiAoIW1fd2luZG93KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYg
bV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVG8g
cHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmlu
ZyB0aGUgd2luZG93Ci0gICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdpbmRv
dyB0byB0aGUgemVybyByZWN0LgotCi0gICAgYm9vbCBjbGlwVG9aZXJvUmVjdCA9IHRydWU7Ci0K
LSAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKLSAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICA6OlNldFdpbmRvd1Jn
bihtX3dpbmRvdywgcmduLmxlYWsoKSwgRkFMU0UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1
dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBt
X2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKSk7Ci0g
ICAgICAgIDo6U2V0V2luZG93UmduKG1fd2luZG93LCByZ24ubGVhaygpLCBUUlVFKTsKLSAgICAg
fQotCi0gICAgIGlmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCkKLSAgICAgICAgOjpN
b3ZlV2luZG93KG1fd2luZG93LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKLQotICAg
ICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKLSAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBS
ZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgOjpTZXRXaW5kb3dSZ24o
bV93aW5kb3csIHJnbi5sZWFrKCksIFRSVUUpOwotICAgIH0KLX0KLQotdm9pZCBFbWJlZGRlZFdp
ZGdldDo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotICAgIGlmIChtX3dpbmRvdyAmJiBmb2N1
c2VkKQotICAgICAgICBTZXRGb2N1cyhtX3dpbmRvdyk7Ci0KLSAgICBXaWRnZXQ6OnNldEZvY3Vz
KGZvY3VzZWQpOwotfQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0OjpzaG93KCkKLXsKLSAgICBtX2lz
VmlzaWJsZSA9IHRydWU7Ci0KLSAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93
KQotICAgICAgICBTaG93V2luZG93KG1fd2luZG93LCBTV19TSE9XTkEpOwotCi0gICAgV2lkZ2V0
OjpzaG93KCk7Ci19Ci0KLXZvaWQgRW1iZWRkZWRXaWRnZXQ6OmhpZGUoKQotewotICAgIG1faXNW
aXNpYmxlID0gZmFsc2U7Ci0KLSAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93
KQotICAgICAgICBTaG93V2luZG93KG1fd2luZG93LCBTV19ISURFKTsKLQotICAgIFdpZGdldDo6
aGlkZSgpOwotfQotCi1JbnRSZWN0IEVtYmVkZGVkV2lkZ2V0Ojp3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0Ci17Ci0gICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KLSAgICBJbnRS
ZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7Ci0gICAgCi0gICAgLy8gVGFrZSBvdXIgZWxlbWVu
dCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFt
ZSB2aWV3LgotICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS52aWV3KCk7Ci0gICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBS
ZWN0Rm9yRnJhbWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKLQotICAgIHJldHVybiBjbGlwUmVj
dDsKLX0KLQotdm9pZCBFbWJlZGRlZFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVu
dCkKLXsKLSAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwotCi0gICAgaWYgKCFtX3dpbmRv
dykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWYgdGhlIGVtYmVkZGVkIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhh
dmUgdGhlIGZvY3VzLCB3ZSBuZWVkIHRvIAotICAgIC8vIGNsZWFyIGl0IHRvIHByZXZlbnQgdGhl
IHdlYiB2aWV3IHdpbmRvdyBmcm9tIGJlaW5nIGZvY3VzZWQgYmVjYXVzZSB0aGF0IGNhbgotICAg
IC8vIHRyaWdnZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJlaW5nIGRl
dGFjaGVkLgotICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMoKTsKLSAgICBpZiAo
bV93aW5kb3cgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQobV93aW5kb3csIGZvY3VzZWRX
aW5kb3cpKQotICAgICAgICA6OlNldEZvY3VzKDApOwotfQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0
OjphdHRhY2hUb1dpbmRvdygpCi17Ci0gICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9hdHRhY2hlZFRvV2luZG93ID0gdHJ1ZTsKLSAgICBpZiAobV9p
c1Zpc2libGUgJiYgbV93aW5kb3cpCi0gICAgICAgIFNob3dXaW5kb3cobV93aW5kb3csIFNXX1NI
T1dOQSk7Ci19Ci0KLXZvaWQgRW1iZWRkZWRXaWRnZXQ6OmRldGFjaEZyb21XaW5kb3coKQotewot
ICAgIGlmICghbV9hdHRhY2hlZFRvV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pc1Zpc2libGUgJiYgbV93aW5kb3cpCi0gICAgICAgIFNob3dXaW5kb3cobV93aW5kb3csIFNX
X0hJREUpOwotICAgIG1fYXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOwotfQotCi12b2lkIEVtYmVk
ZGVkV2lkZ2V0OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgQVNTRVJUKG1fdmlldyk7Ci0KLSAgICBDT01QdHI8SVdlYlVSTFJlc3Bv
bnNlPiB1cmxSZXNwb25zZShBZG9wdENPTSwgV2ViVVJMUmVzcG9uc2U6OmNyZWF0ZUluc3RhbmNl
KHJlc3BvbnNlKSk7Ci0gICAgbV92aWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UodXJsUmVzcG9uc2Uu
Z2V0KCkpOwotfQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIENPTVB0cjxNZW1vcnlTdHJlYW0+IHN0cmVh
bSA9IE1lbW9yeVN0cmVhbTo6Y3JlYXRlSW5zdGFuY2UoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0
YSwgbGVuZ3RoKSk7Ci0gICAgbV92aWV3LT5kaWRSZWNlaXZlRGF0YShzdHJlYW0uZ2V0KCkpOwot
fQotCi12b2lkIEVtYmVkZGVkV2lkZ2V0OjpkaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBtX3Zp
ZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQotdm9pZCBFbWJlZGRlZFdpZGdldDo6ZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBDT01QdHI8SVdlYkVycm9yPiB3
ZWJFcnJvcihBZG9wdENPTSwgV2ViRXJyb3I6OmNyZWF0ZUluc3RhbmNlKGVycm9yKSk7Ci0gICAg
bV92aWV3LT5kaWRGYWlsKHdlYkVycm9yLmdldCgpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmggYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTI3OTgyY2VjM2RiZDVmNTcwZTJmNWJiMjc4YTQxYzhi
MjhlZmQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRW1iZWRkZWRXaWRnZXRfaAotI2RlZmluZSBFbWJl
ZGRlZFdpZGdldF9oCi0KLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAiV2ViS2l0
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci1j
bGFzcyBJbnRTaXplOwotfQotCi1pbnRlcmZhY2UgSVdlYkVtYmVkZGVkVmlldzsKLQotY2xhc3Mg
RW1iZWRkZWRXaWRnZXQgOiBwdWJsaWMgV2ViQ29yZTo6V2lkZ2V0LCBwdWJsaWMgV2ViQ29yZTo6
UGx1Z2luTWFudWFsTG9hZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtYmVkZGVkV2lk
Z2V0PiBjcmVhdGUoSVdlYkVtYmVkZGVkVmlldyosIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiwgSFdORCBwYXJlbnRXaW5kb3csIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB+RW1i
ZWRkZWRXaWRnZXQoKTsKLQotcHJpdmF0ZToKLSAgICBFbWJlZGRlZFdpZGdldChJV2ViRW1iZWRk
ZWRWaWV3KiB2aWV3LCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCkKLSAgICAg
ICAgOiBtX3ZpZXcodmlldykKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAg
LCBtX3dpbmRvdygwKQotICAgICAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQotICAgICAgICAsIG1f
YXR0YWNoZWRUb1dpbmRvdyhmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjcmVhdGVX
aW5kb3coSFdORCBwYXJlbnRXaW5kb3csIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotCi0gICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3coKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aGlkZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoV2ViQ29yZTo6U2Nyb2xsVmlldyopOwot
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFRvV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
dGFjaEZyb21XaW5kb3coKTsKLQotICAgIENPTVB0cjxJV2ViRW1iZWRkZWRWaWV3PiBtX3ZpZXc7
Ci0gICAgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKLSAgICBIV05EIG1f
d2luZG93OwotCi0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLSAgICBib29sIG1fYXR0YWNoZWRUb1dp
bmRvdzsKLSAgICAgICAgCi0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUg
Y2xpcCByZWN0IHRvIGFwcGx5IHRvIGFuIGVtYmVkZGVkIHZpZXcuCi0gICAgV2ViQ29yZTo6SW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KLX07Ci0KLSNlbmRpZiAvLyBF
bWJlZGRlZFdpZGdldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggMmE3ZDVi
MGE2NWMzNzBkYzY3YjM1YjE5MDgxYTljMWJkOTVmMGQ1Ni4uNWIxYmZiMmQzNDE3NGM2OGEyYjQw
YmQ0YzdkMWFkYjhkMzI5ZDVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAt
MzIsMTEgKzMyLDcgQEAKICNpbmNsdWRlICJDT01Qcm9wZXJ0eUJhZy5oIgogI2luY2x1ZGUgIkRP
TUhUTUxDbGFzc2VzLmgiCiAjaW5jbHVkZSAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCi0jaW5j
bHVkZSAiRW1iZWRkZWRXaWRnZXQuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIK
LSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
LSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV2ViQWN0aW9uUHJvcGVydHlCYWcu
aCIKICNpbmNsdWRlICJXZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIldl
YkNocm9tZUNsaWVudC5oIgpAQCAtMTA5LDggKzEwNSw2IEBAIHB1YmxpYzoKIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpXZWJGcmFtZUxvYWRlckNsaWVudChXZWJGcmFtZSogd2ViRnJhbWUpCiAgICAg
OiBtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZShtYWtlVW5pcXVlPFdlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcml2YXRlPigpKQogICAgICwgbV93ZWJGcmFtZSh3ZWJGcmFtZSkKLSAgICAsIG1fbWFudWFs
TG9hZGVyKDApCi0gICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKGZhbHNlKSAKIHsKIH0K
IApAQCAtNjI4LDE0ICs2MjIsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aFdpbGxTdWJtaXRGb3JtKEZvcm1TdGF0ZSYgZm9ybVN0YXRlLCBDb21wbGV0aQogICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5E
b2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVu
dExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQogewotICAgIGlmICghbV9tYW51YWxMb2Fk
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFudWFsTG9hZGVyLT5kaWRGYWlsKGVycm9y
KTsKLSAgICBtX21hbnVhbExvYWRlciA9IDA7Ci0gICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdp
biA9IGZhbHNlOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2Fk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0
ZWROYW1lICovKQpAQCAtNjU1LDM4ICs2NDMsMTcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKQogCiB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFtX21hbnVhbExvYWRlcikKLSAgICAgICAg
bG9hZGVyLT5jb21taXREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgbG9hZGVyLT5jb21taXREYXRh
KGRhdGEsIGxlbmd0aCk7CiAKICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgYSBzdGFuZC1hbG9u
ZSBtZWRpYSBkb2N1bWVudCwgbm93IGlzIHRoZSByaWdodCB0aW1lIHRvIGNhbmNlbCB0aGUgV2Vi
S2l0IGxvYWQuCiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIGFjcm9z
cyBhbGwgcG9ydHMuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4NzYyPi4KICAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShtX3dlYkZyYW1lKTsKICAgICBpZiAoY29yZUZyYW1lLT5kb2N1bWVudCgp
LT5pc01lZGlhRG9jdW1lbnQoKSkKICAgICAgICAgbG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VM
b2FkKHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IobG9hZGVyLT5yZXNwb25zZSgpKSk7Ci0KLSAg
ICBpZiAoIW1fbWFudWFsTG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKLSAgICAgICAgbV9tYW51YWxMb2FkZXItPmRpZFJlY2Vp
dmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNlKCkpOwotICAgICAgICAvLyBkaWRSZWNlaXZlUmVz
cG9uc2Ugc2V0cyB1cCBhIG5ldyBzdHJlYW0gdG8gdGhlIHBsdWctaW4uIG9uIGEgZnVsbC1wYWdl
IHBsdWctaW4sIGEgZmFpbHVyZSBpbgotICAgICAgICAvLyBzZXR0aW5nIHVwIHRoaXMgc3RyZWFt
IGNhbiBjYXVzZSB0aGUgbWFpbiBkb2N1bWVudCBsb2FkIHRvIGJlIGNhbmNlbGxlZCwgc2V0dGlu
ZyBtX21hbnVhbExvYWRlcgotICAgICAgICAvLyB0byBudWxsCi0gICAgICAgIGlmICghbV9tYW51
YWxMb2FkZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faGFzU2VudFJlc3BvbnNl
VG9QbHVnaW4gPSB0cnVlOwotICAgIH0KLSAgICBtX21hbnVhbExvYWRlci0+ZGlkUmVjZWl2ZURh
dGEoZGF0YSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNo
ZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKikKIHsKLSAgICBpZiAoIW1fbWFudWFsTG9hZGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX21hbnVhbExvYWRlci0+ZGlkRmluaXNoTG9hZGluZygp
OwotICAgIG1fbWFudWFsTG9hZGVyID0gMDsKLSAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2lu
ID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhp
c3RvcnkoKQpAQCAtOTk5LDE0NiArOTY2LDI1IEBAIE9iamVjdENvbnRlbnRUeXBlIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBVUkwmIHVybCwgY29uc3QKIHsK
ICAgICBTdHJpbmcgbWltZVR5cGUgPSBtaW1lVHlwZUluOwogCi0gICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkgewotICAgICAgICBTdHJpbmcgZGVjb2RlZFBhdGggPSBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXModXJsLnBhdGgoKSk7Ci0gICAgICAgIG1pbWVUeXBlID0gUGx1Z2luRGF0YWJhc2U6
Omluc3RhbGxlZFBsdWdpbnMoKS0+TUlNRVR5cGVGb3JFeHRlbnNpb24oU3RyaW5nVmlldyB7IGRl
Y29kZWRQYXRoIH0uc3Vic3RyaW5nKGRlY29kZWRQYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKSk7
Ci0gICAgfQotCiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE9i
amVjdENvbnRlbnRUeXBlOjpGcmFtZTsgLy8gR28gYWhlYWQgYW5kIGhvcGUgdGhhdCB3ZSBjYW4g
ZGlzcGxheSB0aGUgY29udGVudC4KIAotICAgIGJvb2wgcGx1Z0luU3VwcG9ydHNNSU1FVHlwZSA9
IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVk
KG1pbWVUeXBlKTsKLQogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVu
dFR5cGU6OkltYWdlOwogCi0gICAgaWYgKHBsdWdJblN1cHBvcnRzTUlNRVR5cGUpCi0gICAgICAg
IHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6UGx1Z0luOwotCiAgICAgaWYgKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6RnJhbWU7CiAKICAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGU6Ok5vbmU7CiB9CiAKLXZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVnaW4oY29uc3QgUGx1Z2lu
VmlldyYgcGx1Z2luVmlldykgY29uc3QKLXsKLSNpZiBVU0UoQ0YpCi0gICAgV2ViVmlldyogd2Vi
VmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKLQotICAgIENPTVB0cjxJV2ViUmVzb3VyY2VM
b2FkRGVsZWdhdGU+IHJlc291cmNlTG9hZERlbGVnYXRlOwotICAgIGlmIChGQUlMRUQod2ViVmll
dy0+cmVzb3VyY2VMb2FkRGVsZWdhdGUoJnJlc291cmNlTG9hZERlbGVnYXRlKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiB1c2VySW5m
byA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0K
LSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUpOwotICAgIEFTU0VSVChmcmFtZSA9
PSBwbHVnaW5WaWV3LnBhcmVudEZyYW1lKCkpOwotCi0gICAgaWYgKCFwbHVnaW5WaWV3LnBsdWdp
bnNQYWdlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgVVJMIHBsdWdpblBhZ2VVUkwgPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KHBsdWdpblZpZXcucGx1Z2luc1BhZ2UoKSkpOwotICAgICAgICBpZiAocGx1Z2luUGFnZVVSTC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBrZXkgPSBNYXJzaGFsbGluZ0hlbHBlcnM6OkxQ
Q09MRVNUUlRvQ0ZTdHJpbmdSZWYoV2ViS2l0RXJyb3JQbHVnSW5QYWdlVVJMU3RyaW5nS2V5KTsK
LSAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHVzZXJJbmZvLmdldCgpLCBrZXkuZ2V0
KCkuZ2V0KCksIHBsdWdpblBhZ2VVUkwuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXBsdWdpblZpZXcubWltZVR5cGUoKS5pc051
bGwoKSkgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGU3RyaW5n
UmVmPj4ga2V5ID0gTWFyc2hhbGxpbmdIZWxwZXJzOjpMUENPTEVTVFJUb0NGU3RyaW5nUmVmKFdl
YktpdEVycm9yTUlNRVR5cGVLZXkpOwotICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSh1c2Vy
SW5mby5nZXQoKSwga2V5LmdldCgpLmdldCgpLCBwbHVnaW5WaWV3Lm1pbWVUeXBlKCkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpblZpZXcucGx1Z2luKCkp
IHsKLSAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBwbHVnaW5WaWV3LnBsdWdpbigpLT5uYW1l
KCk7Ci0gICAgICAgIGlmICghcGx1Z2luTmFtZS5pc051bGwoKSkgewotICAgICAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IGtleSA9IE1hcnNoYWxs
aW5nSGVscGVyczo6TFBDT0xFU1RSVG9DRlN0cmluZ1JlZihXZWJLaXRFcnJvclBsdWdJbk5hbWVL
ZXkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUodXNlckluZm8uZ2V0KCksIGtl
eS5nZXQoKS5nZXQoKSwgcGx1Z2luTmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gdXNlcklu
Zm9CYWcgPSBDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UoKTsKLSAgICB1
c2VySW5mb0JhZy0+c2V0RGljdGlvbmFyeSh1c2VySW5mby5nZXQoKSk7Ci0gCi0gICAgaW50IGVy
cm9yQ29kZSA9IDA7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgIHN3aXRjaCAocGx1Z2lu
Vmlldy5zdGF0dXMoKSkgewotICAgICAgICBjYXNlIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVn
aW46Ci0gICAgICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckNhbm5vdEZpbmRQbHVnSW47
Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFdFQl9VSV9TVFJJTkcoIlRoZSBwbHVnLWluIGNh
blx4RTJceDgwXHg5OXQgYmUgZm91bmQiLCAiV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z2luIGRl
c2NyaXB0aW9uIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOgotICAgICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JD
YW5ub3RMb2FkUGx1Z0luOwotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBXRUJfVUlfU1RSSU5H
KCJUaGUgcGx1Zy1pbiBjYW5ceEUyXHg4MFx4OTl0IGJlIGxvYWRlZCIsICJXZWJLaXRFcnJvckNh
bm5vdExvYWRQbHVnaW4gZGVzY3JpcHRpb24iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiks
IGVycm9yQ29kZSwgcGx1Z2luVmlldy51cmwoKSwgU3RyaW5nKCkpOwotICAgIENPTVB0cjxJV2Vi
RXJyb3I+IGVycm9yKEFkb3B0Q09NLCBXZWJFcnJvcjo6Y3JlYXRlSW5zdGFuY2UocmVzb3VyY2VF
cnJvciwgdXNlckluZm9CYWcuZ2V0KCkpKTsKLSAgICAgCi0gICAgcmVzb3VyY2VMb2FkRGVsZWdh
dGUtPnBsdWdJbkZhaWxlZFdpdGhFcnJvcih3ZWJWaWV3LCBlcnJvci5nZXQoKSwgZ2V0V2ViRGF0
YVNvdXJjZShmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpOwotI2Vsc2UKLSAgICBB
U1NFUlQoMCk7Ci0jZW5kaWYKLX0KLQotUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVE1MUGx1Z0luRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQm
LCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKIHsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJG
cmFtZS0+d2ViVmlldygpOwotCi0gICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiB1aTsKLSAgICBp
ZiAoU1VDQ0VFREVEKHdlYlZpZXctPnVpRGVsZWdhdGUoJnVpKSkgJiYgdWkpIHsKLSAgICAgICAg
Q09NUHRyPElXZWJVSURlbGVnYXRlUHJpdmF0ZT4gdWlQcml2YXRlKFF1ZXJ5LCB1aSk7Ci0KLSAg
ICAgICAgaWYgKHVpUHJpdmF0ZSkgewotICAgICAgICAgICAgLy8gQXNzZW1ibGUgdGhlIHZpZXcg
YXJndW1lbnRzIGluIGEgcHJvcGVydHkgYmFnLgotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gdmlld0FyZ3VtZW50czsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwYXJhbU5hbWVzLnNpemUoKTsgaSsrKSAKLSAgICAgICAgICAgICAgICB2aWV3QXJndW1l
bnRzLnNldChwYXJhbU5hbWVzW2ldLCBwYXJhbVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICBDT01Q
dHI8SVByb3BlcnR5QmFnPiB2aWV3QXJndW1lbnRzQmFnKEFkb3B0Q09NLCBDT01Qcm9wZXJ0eUJh
ZzxTdHJpbmc+OjphZG9wdCh2aWV3QXJndW1lbnRzKSk7Ci0gICAgICAgICAgICBDT01QdHI8SURP
TUVsZW1lbnQ+IGNvbnRhaW5pbmdFbGVtZW50KEFkb3B0Q09NLCBET01FbGVtZW50OjpjcmVhdGVJ
bnN0YW5jZSgmZWxlbWVudCkpOwotCi0gICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQ09NVmFy
aWFudD4gYXJndW1lbnRzOwotCi0gICAgICAgICAgICBhcmd1bWVudHMuc2V0KFdlYkVtYmVkZGVk
Vmlld0F0dHJpYnV0ZXNLZXksIHZpZXdBcmd1bWVudHNCYWcpOwotICAgICAgICAgICAgYXJndW1l
bnRzLnNldChXZWJFbWJlZGRlZFZpZXdCYXNlVVJMS2V5LCB1cmwuc3RyaW5nKCkpOwotICAgICAg
ICAgICAgYXJndW1lbnRzLnNldChXZWJFbWJlZGRlZFZpZXdDb250YWluaW5nRWxlbWVudEtleSwg
Y29udGFpbmluZ0VsZW1lbnQpOwotICAgICAgICAgICAgYXJndW1lbnRzLnNldChXZWJFbWJlZGRl
ZFZpZXdNSU1FVHlwZUtleSwgbWltZVR5cGUpOwotCi0gICAgICAgICAgICBDT01QdHI8SVByb3Bl
cnR5QmFnPiBhcmd1bWVudHNCYWcoQWRvcHRDT00sIENPTVByb3BlcnR5QmFnPENPTVZhcmlhbnQ+
OjphZG9wdChhcmd1bWVudHMpKTsKLQotICAgICAgICAgICAgQ09NUHRyPElXZWJFbWJlZGRlZFZp
ZXc+IHZpZXc7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHVpUHJpdmF0ZS0+ZW1iZWRk
ZWRWaWV3V2l0aEFyZ3VtZW50cyh3ZWJWaWV3LCBtX3dlYkZyYW1lLCBhcmd1bWVudHNCYWcuZ2V0
KCksICZ2aWV3KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkgewotICAgICAg
ICAgICAgICAgIEhXTkQgcGFyZW50V2luZG93OwotICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIg
PSB3ZWJWaWV3LT52aWV3V2luZG93KCZwYXJlbnRXaW5kb3cpOwotICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBFbWJlZGRlZFdp
ZGdldDo6Y3JlYXRlKHZpZXcuZ2V0KCksICZlbGVtZW50LCBwYXJlbnRXaW5kb3csIHBsdWdpblNp
emUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShtX3dlYkZyYW1lKTsKLSAg
ICBhdXRvIHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUoZnJhbWUsIHBsdWdpblNpemUs
ICZlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1h
bnVhbGx5KTsKLQotICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNM
b2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybiBwbHVnaW5WaWV3OwotCi0gICAgZGlz
cGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbihwbHVnaW5WaWV3LmdldCgpKTsKLSNlbmRpZgogICAg
IHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVj
dERhdGFUb1BsdWdpbihXaWRnZXQmIHBsdWdpbldpZGdldCkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCYpCiB7Ci0gICAgLy8gSWRlYWxseSwg
dGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBzZWUgPHJkYXI6Ly9wcm9ibGVt
LzQ4NTI4ODk+Ci0gICAgaWYgKHBsdWdpbldpZGdldC5pc1BsdWdpblZpZXcoKSkKLSAgICAgICAg
bV9tYW51YWxMb2FkZXIgPSB0b1BsdWdpblZpZXcoJnBsdWdpbldpZGdldCk7Ci0gICAgZWxzZSAK
LSAgICAgICAgbV9tYW51YWxMb2FkZXIgPSBzdGF0aWNfY2FzdDxFbWJlZGRlZFdpZGdldCo+KCZw
bHVnaW5XaWRnZXQpOwogfQogCiBXZWJIaXN0b3J5KiBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2Vi
SGlzdG9yeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAwYWRiZjk3YzNm
MDBiZDNmYWUwZTJmOWRlNWI2NDYxMjYyMzQ5MjkzLi44YWE3YWEzMWZlODI1ZWM3OTVjZjFiM2Uz
ZmIzZTUzYmZlNmI4NzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTMyLDExICsz
Miw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBQbHVnaW5NYW51YWxMb2FkZXI7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKLX0K
LQogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyOwogY2xhc3Mg
V2ViSGlzdG9yeTsKQEAgLTQ5LDggKzQ0LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2ViRnJh
bWUoV2ViRnJhbWUqIHdlYkZyYW1lKSB7IG1fd2ViRnJhbWUgPSB3ZWJGcmFtZTsgfQogICAgIFdl
YkZyYW1lKiB3ZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViRnJhbWU7IH0KIAotICAgIHZv
aWQgZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbihjb25zdCBXZWJDb3JlOjpQbHVnaW5WaWV3
JikgY29uc3Q7Ci0KICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyPiBw
YWdlSUQoKSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRl
bnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0IGZpbmFsOwogCkBAIC0xOTksOSArMTkyLDQgQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByaXZhdGU+
IG1fcG9saWN5TGlzdGVuZXJQcml2YXRlOwogCiAgICAgV2ViRnJhbWUqIG1fd2ViRnJhbWU7Ci0K
LSAgICAvLyBQb2ludHMgdG8gdGhlIG1hbnVhbCBsb2FkZXIgdGhhdCBkYXRhIHNob3VsZCBiZSBy
ZWRpcmVjdGVkIHRvLgotICAgIFdlYkNvcmU6OlBsdWdpbk1hbnVhbExvYWRlciogbV9tYW51YWxM
b2FkZXI7Ci0KLSAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlBsdWdpbkluZm9Qcm92aWRlci5jcHAKaW5kZXggZDMxMGQyOTEwMDg3MDA5ZTg5YmFmZWY1ZjBl
MDEyNzYxOTRkZGU0Mi4uM2VhOWY3YWQ2NDdlMzU1MzE0M2JmOWVlMjZmODg1Njg1ZThhZTllNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGx1
Z2luSW5mb1Byb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCkBAIC0yNSw4ICsyNSw2IEBACiAKICNp
bmNsdWRlICJXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCIKIAotI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBXZWJQbHVnaW5JbmZvUHJvdmlk
ZXImIFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6c2luZ2xldG9uKCkKQEAgLTQ2LDQ2ICs0NCwxNCBA
QCBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6On5XZWJQbHVnaW5JbmZvUHJvdmlkZXIoKQogCiB2b2lk
IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cmVmcmVzaFBsdWdpbnMoKQogewotICAgIFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKIH0KIAogVmVjdG9yPFdlYkNv
cmU6OlBsdWdpbkluZm8+IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cGx1Z2luSW5mbyhXZWJDb3Jl
OjpQYWdlJiBwYWdlLCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVn
aW5JZGVudGlmaWVyPj4mKQogewotICAgIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBvdXRQ
bHVnaW5zOwotICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBQbHVn
aW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7Ci0KLSAgICBvdXRQbHVn
aW5zLnJlc2l6ZShwbHVnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9
IHBsdWdpbnNbaV07Ci0KLSAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5h
bWUgPSBwYWNrYWdlLT5uYW1lKCk7Ci0gICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVO
YW1lKCk7Ci0gICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7Ci0KLSAg
ICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBw
YWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKLQotICAgICAgICBpbmZvLm1pbWVzLnJlc2Vy
dmVDYXBhY2l0eShtaW1lVG9EZXNjcmlwdGlvbnMuc2l6ZSgpKTsKLQotICAgICAgICBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5l
bmQoKTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwotCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBp
dC0+a2V5OwotICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwotICAgICAgICAgICAg
bWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5
cGUpOwotCi0gICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG91dFBsdWdpbnNbaV0gPSBpbmZvOwotICAgIH0KLSAgICByZXR1cm4gb3V0UGx1
Z2luczsKKyAgICByZXR1cm4geyB9OwogfQogCiBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4g
V2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjp3ZWJWaXNpYmxlUGx1Z2luSW5mbyhXZWJDb3JlOjpQYWdl
JiBwYWdlLCBjb25zdCBVUkwmKQogewotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6
OlN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+PiBzdXBwb3J0ZWRQbHVnaW5OYW1lczsKLSAgICBy
ZXR1cm4gcGx1Z2luSW5mbyhwYWdlLCBzdXBwb3J0ZWRQbHVnaW5OYW1lcyk7CisgICAgcmV0dXJu
IHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAppbmRleCAxZmI3ZTNiY2I3
ZjQyYTViYzhhOTJlZDgxMDA2NzllYzI3YzUwODVmLi44MWNiZjljM2ZkMDEzMThjZDkyODVjNDQz
OTlmNDcyNTNiYzAxMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJG
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCkBAIC0z
MSw4ICszMSw2IEBACiAjaW5jbHVkZSAiQ09NUHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJET01D
b3JlQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgotI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldl
YkFjdGlvblByb3BlcnR5QmFnLmgiCiAjaW5jbHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2ViRGF0YVNvdXJjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRl
eCBhYWUwOWM4MjI3MDQzOWMxMWI3NDQ5ZmNlMzk5NzBiZTY2NjMwMTdjLi4zNGUxYWE3OTEwOWRl
ZjUyYzU1OTVlNjM3MTdlZGYxNzk0MmQ0MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcApAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKICNpbmNsdWRlICJQYWdlU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNp
bmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQu
aCIKQEAgLTI1NzcsMTkgKzI1NzUsNiBAQCBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXc6OldlYlZp
ZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLAogICAgIENP
TVB0cjxXZWJWaWV3PiBwcm90ZWN0b3Iod2ViVmlldyk7CiAgICAgQVNTRVJUKHdlYlZpZXcpOwog
Ci0gICAgLy8gV2luZG93cyBNZWRpYSBQbGF5ZXIgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRo
YXQgd2lsbCBkZWxpdmVyIG1lc3NhZ2VzCi0gICAgLy8gdG8gdXMgYXQgaW5hcHByb3ByaWF0ZSB0
aW1lcyBhbmQgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBoYW5kbGUgdGhlbSB3aGVuOgotICAgIC8vIHRo
ZXkgYXJlIGRlbGl2ZXJlZC4gV2UgcmVwb3N0IHBhaW50IG1lc3NhZ2VzIHNvIHRoYXQgd2UgZXZl
bnR1YWxseSBnZXQKLSAgICAvLyBhIGNoYW5jZSB0byBwYWludCBvbmNlIHRoZSBtb2RhbCBsb29w
IGhhcyBleGl0ZWQsIGJ1dCBvdGhlciBtZXNzYWdlcwotICAgIC8vIGFyZW4ndCBzYWZlIHRvIHJl
cG9zdCwgc28gd2UganVzdCBkcm9wIHRoZW0uCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgaWYgKFBsdWdpblZpZXc6OmlzQ2FsbGluZ1BsdWdpbigpKSB7Ci0gICAgICAgIGlm
IChtZXNzYWdlID09IFdNX1BBSU5UKQotICAgICAgICAgICAgUG9zdE1lc3NhZ2UoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAKICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKQEAg
LTYwMjEsOSArNjAwNiw4IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0QWxsb3dTaXRlU3BlY2lmaWNI
YWNrcyhCT09MIGFsbG93KQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlZpZXc6
OmFkZEFkZGl0aW9uYWxQbHVnaW5EaXJlY3RvcnkoX0luXyBCU1RSIGRpcmVjdG9yeSkKK0hSRVNV
TFQgV2ViVmlldzo6YWRkQWRkaXRpb25hbFBsdWdpbkRpcmVjdG9yeShfSW5fIEJTVFIpCiB7Ci0g
ICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+YWRkRXh0cmFQbHVnaW5EaXJl
Y3RvcnkodG9TdHJpbmcoZGlyZWN0b3J5KSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>