<?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>236264</bug_id>
          
          <creation_ts>2022-02-07 15:10:53 -0800</creation_ts>
          <short_desc>REGRESSION(r289239): broke builds on older internal SDKs</short_desc>
          <delta_ts>2022-02-07 15:15:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>235857</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>beidson</cc>
    
    <cc>nham</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1838386</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-07 15:10:53 -0800</bug_when>
    <thetext>https://commits.webkit.org/r289239 introduced a regression:
broke builds on older internal SDKs

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838388</commentid>
    <comment_count>1</comment_count>
      <attachid>451159</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-07 15:11:04 -0800</bug_when>
    <thetext>Created attachment 451159
REVERT of r289239

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838390</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-07 15:14:43 -0800</bug_when>
    <thetext>Committed r289245 (246929@main): &lt;https://commits.webkit.org/246929@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451159.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838391</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-07 15:15:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/88596964&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451159</attachid>
            <date>2022-02-07 15:11:04 -0800</date>
            <delta_ts>2022-02-07 15:14:45 -0800</delta_ts>
            <desc>REVERT of r289239</desc>
            <filename>bug-236264-20220207151103.patch</filename>
            <type>text/plain</type>
            <size>87966</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhkZjZmYmZhNDM4MDQxZDkwOWNkOTFm
YmY0NWVlZjM2MzM4NzMxNzcuLmVhY2JjN2QyYTUyOGVhYjMwZDdiZGY0Mjg2ZGI4MzMxYjliMWUx
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDItMDcgIENvbW1pdCBRdWV1ZSAgPGNvbW1p
dC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg5
MjM5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
MjY0CisKKyAgICAgICAgYnJva2UgYnVpbGRzIG9uIG9sZGVyIGludGVybmFsIFNES3MKKworICAg
ICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIkFkZCBQdXNoU2VydmljZSIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1NworICAg
ICAgICBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy9yMjg5MjM5CisKIDIwMjItMDItMDcgIEJl
biBOaGFtICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDNjMmRmMDMxYzI1NmYyNGViYTM0OThmMjExNmM2ZTY0YmUxOWU2ZDguLjU4MTM2MjU0
NjVkNzllZGFmZjJmYjlkYTc5MmZlYzcwOTFiOWI2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMjItMDItMDcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgor
CisgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg5MjM5LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MjY0CisKKyAgICAgICAgYnJva2Ug
YnVpbGRzIG9uIG9sZGVyIGludGVybmFsIFNES3MKKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2Vz
ZXQ6CisKKyAgICAgICAgIkFkZCBQdXNoU2VydmljZSIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1NworICAgICAgICBodHRwczovL2NvbW1pdHMu
d2Via2l0Lm9yZy9yMjg5MjM5CisKIDIwMjItMDItMDcgIEplYW4tWXZlcyBBdmVuYXJkICA8anlh
QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIGZ1bGxzY3JlZW4gdHJhbnNpdGlvbiB3aGVu
IGdvaW5nIHRvL2Zyb20gZnVsbHNjcmVlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRz
L1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RG
L1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRl
eCAwNWY3N2YzMjU5NjA3YWJkMGY3NzNjZDUyNjc1OGRlYzdmNjlkOGUwLi41YjRkM2I2MjU3MTc1
MzI1NTRmM2FkNzJhNGRiNDVhNjllY2E4NWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3Vy
Y2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFt
bApAQCAtMTEyMiw4ICsxMTIyLDYgQEAgUHVzaEFQSUVuYWJsZWQ6CiAgIGRlZmF1bHRWYWx1ZToK
ICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogZmFsc2UKLSAgICBXZWJLaXRMZWdhY3k6Ci0g
ICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaAppbmRleCA5Y2Y4NGQyNzQ0ZmE3
ZGViZmIwNzFkZjEyM2VkMTI2OWE0N2Y1Mjc1Li4zMDM3OGY4NTUzYWZmNWMzZGEzNGZiOThmMjM3
YmFlMTU2OTgwM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2Ev
V0tNYWluLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCkBA
IC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiBXS19FWFBPUlQgaW50IFdLWFBDU2Vydmlj
ZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VYUE9SVCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFlbW9u
TWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci1XS19FWFBPUlQgaW50IFdLV2ViUHVzaERh
ZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVt
b25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQppbmRleCA5N2Q3ODVmNjlm
MjYxYWFmY2UyNWQ4ZDkxNzY3MTQ0ZjIzZTllMDUxLi5kZTJlOWY3YTViZDU1ZjkxZGU4N2UxYTkz
YWFmODkwNzNkZmJmZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29j
b2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4u
bW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdLQWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50IGFy
Z2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAgIHJldHVybiBXZWJLaXQ6OlBDTURhZW1vbk1haW4o
YXJnYywgYXJndik7CiB9CiAKLWludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK2ludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiog
YXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0OjpXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNz
YWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2FnZUNv
Y29hLm1tCmluZGV4IGQ5MzRkYTQwN2MxZTY4MDk3MWI4ZTk0Y2U2NjI5MDNkNWE2YTNkZGUuLmYx
MjkzOGJjNGRkZjFkZTQ5MWQ5MDllOGI3YWZkYTY1MmQwYzkwN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQpAQCAtMzksMzAgKzM5
LDIxIEBAIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IFdlYlB1c2hNZXNzYWdlOjpmcm9t
RGljdGlvbmFyeShOU0RpY3Rpb25hcnkgKmRpY3RpCiAgICAgaWYgKCF1cmwgfHwgIVt1cmwgaXNL
aW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgIGlkIHB1c2hEYXRhID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdFB1c2hE
YXRhS2V5XTsKLSAgICBCT09MIGlzTnVsbCA9IFtwdXNoRGF0YSBpc0VxdWFsOltOU051bGwgbnVs
bF1dOwotICAgIEJPT0wgaXNEYXRhID0gW3B1c2hEYXRhIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBj
bGFzc11dOwotCi0gICAgaWYgKCFpc051bGwgJiYgIWlzRGF0YSkKKyAgICBOU0RhdGEgKnB1c2hE
YXRhID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdFB1c2hEYXRhS2V5XTsKKyAgICBp
ZiAoIXB1c2hEYXRhIHx8ICFbcHVzaERhdGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0p
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBXZWJQdXNoTWVzc2FnZSBtZXNz
YWdlIHsgeyB9LCBVUkwgeyB1cmwgfSB9OwotICAgIGlmIChpc0RhdGEpIHsKLSAgICAgICAgTlNE
YXRhICpkYXRhID0gKE5TRGF0YSAqKXB1c2hEYXRhOwotICAgICAgICBtZXNzYWdlLnB1c2hEYXRh
ID0gVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0
ZXMpLCBkYXRhLmxlbmd0aCB9OwotICAgIH0KLQotICAgIHJldHVybiBtZXNzYWdlOworICAgIHJl
dHVybiB7IHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHB1c2hEYXRhLmJ5dGVzKSwgcHVzaERhdGEubGVuZ3RoIH0sCisgICAgICAgIFVSTCB7
IHVybCB9CisgICAgfSB9OwogfQogCiBOU0RpY3Rpb25hcnkgKldlYlB1c2hNZXNzYWdlOjp0b0Rp
Y3Rpb25hcnkoKSBjb25zdAogewotICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YTsKLSAgICBp
ZiAocHVzaERhdGEpCi0gICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVzaERhdGEtPnNp
emUoKV0pOwotCisgICAgYXV0byBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOnB1c2hEYXRhLmRhdGEoKSBsZW5ndGg6cHVzaERhdGEuc2l6ZSgpXSk7CiAgICAg
cmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRhS2V5IDogbnNEYXRhID8gbnNEYXRhLmdl
dCgpIDogW05TTnVsbCBudWxsXSwKKyAgICAgICAgV2ViS2l0UHVzaERhdGFLZXkgOiBuc0RhdGEu
Z2V0KCksCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3RyYXRpb25VUkxLZXkgOiAoTlNVUkwgKily
ZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVz
aERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFkOTNmYjNl
NDkyOWZmOTkuLmZjNDdkYzRmMTI3NDg3MjRiMWI1N2M1NzJjMTQ5YjM4NzhlYzBhNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKQEAgLTQzLDcg
KzQzLDYgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIFNldERlYnVn
TW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwKICAgICBJ
bmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCi0gICAgSW5qZWN0RW5jcnlwdGVkUHVzaE1lc3Nh
Z2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVzc2FnZXMsCiAgICAgU3Vic2NyaWJl
VG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZSwKQEAgLTYwLDcg
KzU5LDYgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1l
c3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlcXVlc3RTeXN0ZW1Ob3RpZmljYXRp
b25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgot
ICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVUb1B1c2hTZXJ2aWNlOgogICAgIGNh
c2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVz
c2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaE1l
c3NhZ2UuaAppbmRleCAxZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4YmU5OTYyLi5m
OWU0M2YzMzNkNTY4NDg4YzJmYmUxZTZlYmMxMWQ2MjMzNGNmOGU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3LDcgQEAgc3RydWN0IFdlYlB1c2hNZXNz
YWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gcHVzaERhdGE7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1c2hEYXRhOwog
ICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTU1LDcg
KzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxXZWJQdXNoTWVzc2Fn
ZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0ZDo6
b3B0aW9uYWw8c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+PiBwdXNoRGF0YTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gcHVzaERhdGE7CiAgICAgZGVjb2RlciA+PiBw
dXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODI3OGU1MDI3NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOC4uMGM3YzMxYmM1NTdi
NTVkNTE3MDVmYzM5ZDdlNjc5Yzk0YzZhMGFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDYsNyArOTQ2LDcgQEAKIAkJNTEyOTM1
RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVF
MjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQu
aCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJl
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOUVC
MTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oICovOyB9OwogCQk1MTJD
RDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk3MjcyMUVGQzMw
MEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5oICovOyB9OwotCQk1MTJDRDY5QTI3
MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdGOEVD
IC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVz
aERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFu
dHMuaCAqLzsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRpb25D
YWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEy
RUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCOTMw
RkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5o
ICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkuaCAqLzsgfTsKQEAgLTE5OTgsOCArMTk5OCw2IEBACiAJCUU1Q0JBNzY3MjdBMzE4RTEwMERG
Nzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVkU291
cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0EzMThFMTAwREY3ODU4IC8qIFVuaWZpZWRT
b3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwICovOyB9
OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1REVGQTY3MjZGOEY0MjYwMEFC
NjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OwotCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQg
LyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovOyB9Owot
CQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NzI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVCQThEM0FCMjdBNUUzMTMwMENCNzkwMCAv
KiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2Vydmlj
ZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNGMDBDQjc5MDAgLyogQXBwbGVQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5l
Y3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUzM0YwMENCNzkwMCAvKiBNb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAgLyogTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oICovOyB9OwpAQCAtNjQ2MSw4ICs2NDU5LDYgQEAKIAkJRTVERUZBNjcyNkY4RjQyNjAw
QUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1VJU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJEMjc1QUUxMzMwMDg2M0Q4RiAvKiBj
b20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3Qu
eG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBw
bGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBw
YXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3MucGxpc3Q7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU2VydmljZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNoU2Vy
dmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUEyN0E1RTMxMzAw
Q0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsZVB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQz
QUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxMDIsOCArMTAwOTgsNiBAQAogCQkJCTUx
NjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLm1tICovLAogCQkJCTUxRjdC
Qjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oICovLAogCQkJCTUx
RjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSAqLywKLQkJ
CQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLywKLQkJCQlFQjM2
QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8sCiAJCQkJRUJBOEQzQUYy
N0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovLAogCQkJCUVCQThE
M0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8sCiAJCQkJ
NTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKQEAgLTEzMjU2LDcg
KzEzMjUwLDYgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hD
bGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY5NTI3NUVCQTYzMDAy
REMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlFQjM2
QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tM
b29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMTU1MTYsNyArMTU1
MDksNiBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3NCAvKiBQcm9jZXNzTGF1bmNoZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hB
cHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QjI3NUU5N0E5MDAyREMyMkQg
LyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQlFQjM2QjE2OTI3
QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlFQkE4
RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFp
bGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2
MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAppbmRl
eCBiOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyLi43NzY5YmI2YmRkNTgy
OGU3YjE2NGMxNjdjODQ2MGNmZGJkN2MwNDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMzQsOCArMzQsNiBAQCBwdWJs
aWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpOwogICAgIH5Nb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIGdl
bmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOwotCiAgICAgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3Ry
aW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vic2Ny
aWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lkIHVuc3Vic2NyaWJlKGNvbnN0IFN0cmlu
ZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFVuc3Vic2Ny
aWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGM0Y2YyZTY3OWI5MmJmOTIzNTYx
YzE1OGMyM2QzNjgwMWQ4NzgzNjQuLmRiZWZhNzRhZWNkOWE5ZWEwZTQxOTgzMzg2OGUzMDhkM2Q3
NmY2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDEwICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKIAotI2ltcG9ydCA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpQdXNoQ3J5cHRvOwotCiBuYW1l
c3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uKCkKQEAgLTM4LDMwICszNCwxNCBAQCBNb2NrUHVzaFNlcnZpY2VDb25u
ZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKIAogTW9ja1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKLUNsaWVu
dEtleXMgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKK3Zv
aWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAg
IC8vIEV4YW1wbGUgdmFsdWVzIGZyb20gUkZDODI5MSBTZWN0aW9uIDUuCi0gICAgYXV0byBwdWJs
aWNLZXkgPSBiYXNlNjRVUkxEZWNvZGUoIkJDVnhzcjdOX2VOZ1ZScXZIdEQwelRac0VjNi1WVi1K
dkxleGhxVXpPUmN4YU96aTYtQVlXWHZUQkhtNGJqeVBqczdWZDhwWkdINlNScGtOdG9JQWl3NCJf
cykudmFsdWUoKTsKLSAgICBhdXRvIHByaXZhdGVLZXkgPSBiYXNlNjRVUkxEZWNvZGUoInExZFhw
dzNVcFQ1Vk9tdV9jZl92NmloMDdBZW1zM25qeEktSldnTGNNOTQiX3MpLnZhbHVlKCk7Ci0gICAg
YXV0byBzZWNyZXQgPSBiYXNlNjRVUkxEZWNvZGUoIkJUQlpNcUhINnI0VHRzN0pfYVNJZ2ciX3Mp
LnZhbHVlKCk7Ci0KLSAgICByZXR1cm4gQ2xpZW50S2V5cyB7IFAyNTZESEtleVBhaXIgeyBXVEZN
b3ZlKHB1YmxpY0tleSksIFdURk1vdmUocHJpdmF0ZUtleSkgfSwgV1RGTW92ZShzZWNyZXQpIH07
Ci19Ci0KLXZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhh
bmRsZXImJiBoYW5kbGVyKQotewotICAgIGF1dG8gYWx3YXlzUmVqZWN0ZWRLZXkgPSBiYXNlNjRV
UkxEZWNvZGUoIkJFQXhhVU1vMXM4dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJzXzlncFY3Wnhh
cjFwRl8yQlE4QW5jdUFkUzJCb0xoTjRxYXh6QnkyQ3dIRThCQnpXZyJfcykudmFsdWUoKTsKLSAg
ICBpZiAodmFwaWRQdWJsaWNLZXkgPT0gYWx3YXlzUmVqZWN0ZWRLZXkpIHsKLSAgICAgICAgaGFu
ZGxlcih7IH0sIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIldlYlB1c2giIGNvZGU6LTEgdXNl
ckluZm86bmlsXSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBoYW5kbGVyKEAiaHR0
cHM6Ly93ZWJraXQub3JnL3B1c2giLCBuaWwpOworICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBl
cnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0
ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKIH0KIAogdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBV
bnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAgIGhhbmRsZXIodHJ1ZSwgbmlsKTsK
KyAgICBoYW5kbGVyKHsgfSwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRv
bWFpbiBjb2RlOk5TRmVhdHVyZVVuc3VwcG9ydGVkRXJyb3IgdXNlckluZm86bmlsXSk7CiB9CiAK
IFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OmVuYWJsZWRUb3BpY3Mo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmZTQxNWUwMDhkZDYzMDUxMDU4MjRmOGNmYjAyNjk1YWZjMzIzZmViLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5o
IgotI2luY2x1ZGUgIldlYlB1c2hNZXNzYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1B1c2hTdWJzY3JpcHRpb25EYXRhLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYlB1c2hEIHsKLQotY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dDsKLWNsYXNzIFB1c2hTZXJ2aWNlUmVxdWVzdDsKLWNsYXNzIFN1YnNjcmliZVJlcXVlc3Q7Ci1j
bGFzcyBVbnN1YnNjcmliZVJlcXVlc3Q7Ci0KLWNsYXNzIFB1c2hTZXJ2aWNlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB1c2luZyBJbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYpPjsKLQotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShj
b25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlUGF0aCwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmKTsKLSAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYpOwotICAg
IH5QdXNoU2VydmljZSgpOwotCi0gICAgUHVzaFNlcnZpY2VDb25uZWN0aW9uJiBjb25uZWN0aW9u
KCkgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9Ci0gICAgV2ViQ29yZTo6UHVzaERhdGFiYXNlJiBk
YXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KLQotICAgIHZvaWQgZ2V0U3Vic2NyaXB0
aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJik7
Ci0gICAgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsKLSAgICB2b2lkIHVuc3Vi
c2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29w
ZSwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJik7
Ci0KLSAgICB2b2lkIGRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdChHZXRTdWJzY3Jp
cHRpb25SZXF1ZXN0Jik7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vi
c2NyaWJlUmVxdWVzdCYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3Qo
VW5zdWJzY3JpYmVSZXF1ZXN0Jik7Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVQdXNoTWVzc2FnZShO
U1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiA9IFtdIHsgfSk7Ci0KLXByaXZhdGU6Ci0gICAgUHVzaFNlcnZpY2UoVW5pcXVl
UmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiwgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRh
YmFzZT4mJiwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJik7Ci0KLSAgICB1c2luZyBQdXNo
U2VydmljZVJlcXVlc3RNYXAgPSBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RyaW5nLCBTdHJpbmc+LCBE
ZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0Pj4+OwotICAgIHZvaWQgZW5x
dWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmLCBzdGQ6OnVuaXF1
ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYmKTsKLSAgICB2b2lkIGZpbmlzaGVkUHVzaFNlcnZp
Y2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYsIFB1c2hTZXJ2aWNlUmVxdWVzdCYpOwot
Ci0gICAgVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpQdXNoRGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0KLSAgICBJbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlciBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyOwotCi0g
ICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHM7Ci0gICAg
UHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fc3Vic2NyaWJlUmVxdWVzdHM7Ci0gICAgUHVzaFNlcnZp
Y2VSZXF1ZXN0TWFwIG1fdW5zdWJzY3JpYmVSZXF1ZXN0czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYlB1c2hECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
Lm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWQ4ZWE2YTg2NWRkMjZiYjNhNGZhODdiMjUwMmY1ZjRkM2EyMzFi
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTkxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlB1c2hTZXJ2
aWNlLmgiCi0KLSNpbXBvcnQgIkFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgiCi0jaW1wb3J0
ICJBcHBsZVB1c2hTZXJ2aWNlU1BJLmgiCi0jaW1wb3J0ICJNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPHd0Zi9PU09iamVjdFB0ci5oPgotI2lt
cG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgotI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+
Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViUHVzaEQgewotCi1zdGF0
aWMgdm9pZCB1cGRhdGVUb3BpY0xpc3RzKFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgY29ubmVjdGlv
biwgUHVzaERhdGFiYXNlJiBkYXRhYmFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBkYXRhYmFzZS5nZXRUb3BpY3NCeVdha2VTdGF0ZShbJmNv
bm5lY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGF1dG8mJiB0b3BpY01hcCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtb3ZlIHRvcGlj
cyB0byBpZ25vcmVkIGxpc3QgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlcy4KLSAgICAgICAgUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjpUb3BpY0xpc3RzIHRvcGljTGlzdHM7Ci0KLSAgICAgICAgaWYg
KGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1c2hXYWtlU3RhdGU6Oldha2luZyk7IGl0ICE9IHRv
cGljTWFwLmVuZCgpKQotICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlzdHMuZW5hYmxlZFRv
cGljcywgaXQtPnZhbHVlKTsKLSAgICAgICAgaWYgKGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1
c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKLSAgICAg
ICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLm9wcG9ydHVuaXN0aWNUb3BpY3MsIGl0LT52YWx1
ZSk7Ci0gICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpO
b25XYWtpbmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh0
b3BpY0xpc3RzLm5vbldha2luZ1RvcGljcywgaXQtPnZhbHVlKTsKLQotICAgICAgICBjb25uZWN0
aW9uLnNldFRvcGljTGlzdHMoV1RGTW92ZSh0b3BpY0xpc3RzKSk7Ci0KLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKLX0KLQotI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNF
X1VSTF9UT0tFTl9TVVBQT1JUKQotCi12b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgs
IEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgbWVzc2FnZUhhbmRsZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhh
bmRsZXIpCi17Ci0gICAgYXV0byB0cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNh
Y3Rpb25fY3JlYXRlKCJjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnB1c2gtc2VydmljZS1pbml0
IikpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uIEFTQVAgc28gdGhhdCB3ZSBib290
c3RyYXBfY2hlY2tfaW4gdG8gdGhlIHNlcnZpY2UgaW4gYSB0aW1lbHkgbWFubmVyLgotICAgIGF1
dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlxdWVSZWY8QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24+
KGluY29taW5nUHVzaFNlcnZpY2VOYW1lKTsKLQotICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKGRh
dGFiYXNlUGF0aCwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIGNvbm5lY3Rp
b24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBtZXNzYWdlSGFuZGxlciA9IFdURk1vdmUobWVzc2Fn
ZUhhbmRsZXIpLCBjcmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKGF1
dG8mJiBkYXRhYmFzZVJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZGF0YWJhc2VSZXN1
bHQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoIHNlcnZpY2UgaW5pdGlh
bGl6YXRpb24gZmFpbGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiKTsKLSAgICAgICAgICAgIGNyZWF0
aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOwotICAgICAgICAgICAg
dHJhbnNhY3Rpb24gPSBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgYXV0byBkYXRhYmFzZSA9IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0
cihXVEZNb3ZlKGRhdGFiYXNlUmVzdWx0KSk7Ci0gICAgICAgIFVuaXF1ZVJlZjxQdXNoU2Vydmlj
ZT4gc2VydmljZSgqbmV3IFB1c2hTZXJ2aWNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUo
ZGF0YWJhc2UpLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSkpOwotCi0gICAgICAgIGF1dG8mIGNv
bm5lY3Rpb25SZWYgPSBzZXJ2aWNlLT5jb25uZWN0aW9uKCk7Ci0gICAgICAgIGF1dG8mIGRhdGFi
YXNlUmVmID0gc2VydmljZS0+ZGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBPbmx5IHByb3ZpZGUg
dGhlIHNlcnZpY2Ugb2JqZWN0IGJhY2sgdG8gdGhlIGNhbGxlciBhZnRlciB3ZSd2ZSBzeW5jZWQg
dGhlIHRvcGljIGxpc3RzIGluCi0gICAgICAgIC8vIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBQdXNo
U2VydmljZUNvbm5lY3Rpb24vQVBTQ29ubmVjdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29u
J3QKLSAgICAgICAgLy8gc2VydmljZSBhbnkgY2FsbHMgdG8gc3Vic2NyaWJlL3Vuc3Vic2NyaWJl
L2V0Yy4gdW50aWwgYWZ0ZXIgdGhlIHRvcGljIGxpc3RzIGFyZSB1cCB0bwotICAgICAgICAvLyBk
YXRlLCB3aGljaCBBUFNDb25uZWN0aW9uIGNhcmVzIGFib3V0LgotICAgICAgICB1cGRhdGVUb3Bp
Y0xpc3RzKGNvbm5lY3Rpb25SZWYsIGRhdGFiYXNlUmVmLCBbdHJhbnNhY3Rpb24gPSBXVEZNb3Zl
KHRyYW5zYWN0aW9uKSwgc2VydmljZSA9IFdURk1vdmUoc2VydmljZSksIGNyZWF0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNy
ZWF0aW9uSGFuZGxlcihzZXJ2aWNlLm1vdmVUb1VuaXF1ZVB0cigpKTsKLSAgICAgICAgICAgIHRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLSNlbHNlCi0K
LXZvaWQgUHVzaFNlcnZpY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBJ
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQotewotICAgIGNy
ZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOwotfQotCi0jZW5k
aWYgLy8gSEFWRShBUFBMRV9QVVNIX1NFUlZJQ0VfVVJMX1RPS0VOX1NVUFBPUlQpCi0KLXZvaWQg
UHVzaFNlcnZpY2U6OmNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYgbWVzc2FnZUhhbmRsZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRy
PFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhhbmRsZXIpCi17Ci0gICAgUHVzaERhdGFiYXNl
OjpjcmVhdGUoU1FMaXRlRGF0YWJhc2U6OmluTWVtb3J5UGF0aCgpLCBbbWVzc2FnZUhhbmRsZXIg
PSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVh
dGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1bHQpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWRhdGFiYXNlUmVzdWx0KSB7Ci0gICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlxdWVSZWY8TW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbj4oKTsKLSAgICAgICAgYXV0byBkYXRhYmFzZSA9IG1ha2VVbmlxdWVSZWZG
cm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGRhdGFiYXNlUmVzdWx0KSk7Ci0gICAgICAgIGNy
ZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KG5ldyBQdXNoU2Vydmlj
ZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92ZShtZXNzYWdl
SGFuZGxlcikpKSk7Ci0gICAgfSk7Ci19Ci0KLVB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZShVbmlx
dWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmIHB1c2hTZXJ2aWNlQ29ubmVjdGlvbiwgVW5p
cXVlUmVmPFB1c2hEYXRhYmFzZT4mJiBwdXNoRGF0YWJhc2UsIEluY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyJiYgaW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpCi0gICAgOiBtX2Nvbm5lY3Rpb24o
V1RGTW92ZShwdXNoU2VydmljZUNvbm5lY3Rpb24pKQotICAgICwgbV9kYXRhYmFzZShXVEZNb3Zl
KHB1c2hEYXRhYmFzZSkpCi0gICAgLCBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKFdURk1v
dmUoaW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpOwotCi0gICAgbV9jb25uZWN0aW9uLT5zdGFydExp
c3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhbdGhpc10oTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25h
cnkgKnVzZXJJbmZvKSB7Ci0gICAgICAgIGRpZFJlY2VpdmVQdXNoTWVzc2FnZSh0b3BpYywgdXNl
ckluZm8pOwotICAgIH0pOwotfQotCi1QdXNoU2VydmljZTo6flB1c2hTZXJ2aWNlKCkgPSBkZWZh
dWx0OwotCi1zdGF0aWMgUHVzaFN1YnNjcmlwdGlvbkRhdGEgbWFrZVB1c2hTdWJzY3JpcHRpb25G
cm9tUmVjb3JkKFB1c2hSZWNvcmQmJiByZWNvcmQpCi17Ci0gICAgcmV0dXJuIFB1c2hTdWJzY3Jp
cHRpb25EYXRhIHsKLSAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIsCi0gICAgICAgIFdURk1vdmUo
cmVjb3JkLmVuZHBvaW50KSwKLSAgICAgICAgV1RGTW92ZShyZWNvcmQuZXhwaXJhdGlvblRpbWUp
LAotICAgICAgICBXVEZNb3ZlKHJlY29yZC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSksCi0gICAgICAg
IFdURk1vdmUocmVjb3JkLmNsaWVudFB1YmxpY0tleSksCi0gICAgICAgIFdURk1vdmUocmVjb3Jk
LnNoYXJlZEF1dGhTZWNyZXQpCi0gICAgfTsKLX0KLQotc3RhdGljIFN0cmluZyBtYWtlUHVzaFRv
cGljKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSkK
LXsKLSAgICByZXR1cm4gYnVuZGxlSWRlbnRpZmllciArICIgIiArIHNjb3BlOwotfQotCi1jbGFz
cyBQdXNoU2VydmljZVJlcXVlc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlUmVxdWVzdCgpID0gZGVmYXVsdDsKLQotICAg
IHZpcnR1YWwgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgPSAwOwotCi0gICAgY29u
c3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9idW5kbGVJZGVudGlmaWVy
OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBzY29wZSgpIHsgcmV0dXJuIG1fc2NvcGU7IH07Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBQdXNoU2Vydmlj
ZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSkKLSAgICAgICAgOiBtX3NlcnZpY2Uoc2VydmljZSkK
LSAgICAgICAgLCBtX2Nvbm5lY3Rpb24oc2VydmljZS5jb25uZWN0aW9uKCkpCi0gICAgICAgICwg
bV9kYXRhYmFzZShzZXJ2aWNlLmRhdGFiYXNlKCkpCi0gICAgICAgICwgbV9idW5kbGVJZGVudGlm
aWVyKGJ1bmRsZUlkZW50aWZpZXIpCi0gICAgICAgICwgbV9zY29wZShzY29wZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKLQotICAgIFB1c2hTZXJ2aWNl
JiBtX3NlcnZpY2U7Ci0gICAgUHVzaFNlcnZpY2VDb25uZWN0aW9uJiBtX2Nvbm5lY3Rpb247Ci0g
ICAgUHVzaERhdGFiYXNlJiBtX2RhdGFiYXNlOwotICAgIFN0cmluZyBtX2J1bmRsZUlkZW50aWZp
ZXI7Ci0gICAgU3RyaW5nIG1fc2NvcGU7Ci0gICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNo
U2VydmljZVJlcXVlc3QmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGU+Ci1jbGFzcyBQdXNoU2VydmljZVJlcXVlc3RJbXBsIDogcHVibGlj
IFB1c2hTZXJ2aWNlUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzdGFydCgpIGZpbmFsCi0g
ICAgewotICAgICAgICBpZiAobV9idW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSB8fCBtX3Njb3Bl
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEg
eyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiSW52YWxpZCBzZW5kZXIiX3MgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgdHJhbnNhY3Rpb25EZXNjcmlw
dGlvbiA9IFN0cmluZygiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZDoiX3MpICsgZGVzY3JpcHRp
b24oKSArICI6Il9zICsgbV9idW5kbGVJZGVudGlmaWVyICsgIjoiX3MgKyBtX3Njb3BlOwotICAg
ICAgICBtX3RyYW5zYWN0aW9uID0gYWRvcHRPU09iamVjdChvc190cmFuc2FjdGlvbl9jcmVhdGUo
dHJhbnNhY3Rpb25EZXNjcmlwdGlvbi51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHN0YXJ0SW50
ZXJuYWwoKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB1c2luZyBSZXN1bHRIYW5kbGVyID0g
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxSZXN1bHRUeXBlLCBXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhPiYpPjsKLQotICAgIFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoUHVzaFNl
cnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCi0gICAgICAgIDogUHVz
aFNlcnZpY2VSZXF1ZXN0KHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlKQotICAgICAg
ICAsIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQotICAgIHsKLSAgICB9
Ci0gICAgdmlydHVhbCB+UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCgpID0gZGVmYXVsdDsKLQotICAg
IHZpcnR1YWwgdm9pZCBzdGFydEludGVybmFsKCkgPSAwOwotCi0gICAgdm9pZCBmdWxmaWxsKFJl
c3VsdFR5cGUgcmVzdWx0KQotICAgIHsKLSAgICAgICAgbV9yZXN1bHRIYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7Ci0gICAgICAgIGZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgcmVqZWN0KFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGEmJiBkYXRhKQotICAgIHsKLSAgICAgICAgbV9yZXN1bHRIYW5k
bGVyKG1ha2VVbmV4cGVjdGVkKFdURk1vdmUoZGF0YSkpKTsKLSAgICAgICAgZmluaXNoKCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFJlc3VsdEhhbmRsZXIgbV9yZXN1bHRIYW5kbGVyOwotICAg
IE9TT2JqZWN0UHRyPG9zX3RyYW5zYWN0aW9uX3Q+IG1fdHJhbnNhY3Rpb247Ci19OwotCi1jbGFz
cyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0IDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdEltcGw8
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4+IHsKLXB1YmxpYzoK
LSAgICBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYpOwot
ICAgIHZpcnR1YWwgfkdldFN1YnNjcmlwdGlvblJlcXVlc3QoKSA9IGRlZmF1bHQ7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCJfczsgfQotICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgp
IGZpbmFsOwotICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVH
ZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCp0aGlzKTsgfQotfTsKLQotR2V0U3Vic2NyaXB0aW9uUmVx
dWVzdDo6R2V0U3Vic2NyaXB0aW9uUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3Qg
U3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5k
bGVyJiYgcmVzdWx0SGFuZGxlcikKLSAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2Vydmlj
ZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCi17Ci19
Ci0KLS8vIEltcGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaE1hbmFnZXIuZ2V0U3Vi
c2NyaXB0aW9uLgotdm9pZCBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpzdGFydEludGVybmFsKCkK
LXsKLSAgICBtX2RhdGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1f
YnVuZGxlSWRlbnRpZmllciwgbV9zY29wZSwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUg
ewotICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgZnVsZmlsbChzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7IH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZy
b21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOwotICAgIH0pOwotfQotCi1jbGFzcyBTdWJzY3Jp
YmVSZXF1ZXN0IDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdEltcGw8V2ViQ29yZTo6UHVzaFN1
YnNjcmlwdGlvbkRhdGE+IHsKLXB1YmxpYzoKLSAgICBTdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2
aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3Bl
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYp
OwotICAgIHZpcnR1YWwgflN1YnNjcmliZVJlcXVlc3QoKSA9IGRlZmF1bHQ7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
U3Vic2NyaWJlUmVxdWVzdCJfczsgfQotICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFsIHsg
c3RhcnRJbXBsKElzUmV0cnk6Ok5vKTsgfQotICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3Nl
cnZpY2UuZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KCp0aGlzKTsgfQotCi1wcml2YXRlOgot
ICAgIGVudW0gY2xhc3MgSXNSZXRyeSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHN0YXJ0SW1wbChJ
c1JldHJ5KTsKLSAgICB2b2lkIGF0dGVtcHRUb1JlY292ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0
ZXJFcnJvcihTdHJpbmcmJik7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fdmFwaWRQdWJsaWNLZXk7
Ci19OwotCi1TdWJzY3JpYmVSZXF1ZXN0OjpTdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBz
ZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2Nv
cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFJlc3VsdEhhbmRsZXIm
JiByZXN1bHRIYW5kbGVyKQotICAgIDogUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBi
dW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKLSAgICAsIG1f
dmFwaWRQdWJsaWNLZXkodmFwaWRQdWJsaWNLZXkpCi17Ci19Ci0KLS8vIEltcGxlbWVudHMgdGhl
IHdlYnB1c2hkIHNpZGUgb2YgUHVzaE1hbmFnZXIuc3Vic2NyaWJlKCkuCi12b2lkIFN1YnNjcmli
ZVJlcXVlc3Q6OnN0YXJ0SW1wbChJc1JldHJ5IGlzUmV0cnkpCi17Ci0gICAgbV9kYXRhYmFzZS5n
ZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1f
c2NvcGUsIFt0aGlzLCBpc1JldHJ5XShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKHJlc3VsdCkgewotICAgICAgICAgICAgaWYgKG1fdmFwaWRQdWJsaWNLZXkgIT0gcmVzdWx0
LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSkKLSAgICAgICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHJvdmlkZWQgYXBw
bGljYXRpb25TZXJ2ZXJLZXkgZG9lcyBub3QgbWF0Y2ggdGhlIGtleSBpbiB0aGUgZXhpc3Rpbmcg
c3Vic2NyaXB0aW9uLiJfcyB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBm
dWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKCpyZXN1bHQpKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHRvcGljID0g
bWFrZVB1c2hUb3BpYyhtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUpOwotICAgICAgICBtX2Nv
bm5lY3Rpb24uc3Vic2NyaWJlKHRvcGljLCBtX3ZhcGlkUHVibGljS2V5LCBbdGhpcywgaXNSZXRy
eSwgdG9waWNdKE5TU3RyaW5nICplbmRwb2ludCwgTlNFcnJvciAqZXJyb3IpIG11dGFibGUgewot
ICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHVzZSBw
b2ludGVyIGNvbXBhcmlzb24gb25jZSBBUFNVUkxUb2tlbkVycm9yRG9tYWluIGlzIGV4dGVybmVk
LgotICAgICAgICAgICAgICAgIGlmIChpc1JldHJ5ID09IElzUmV0cnk6Ok5vICYmIFtlcnJvci5k
b21haW4gaXNFcXVhbFRvU3RyaW5nOkAiQVBTVVJMVG9rZW5FcnJvckRvbWFpbiJdICYmIGVycm9y
LmNvZGUgPT0gQVBTVVJMVG9rZW5FcnJvckNvZGVUb3BpY0FscmVhZHlJbkZpbHRlcikgewotICAg
ICAgICAgICAgICAgICAgICBhdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVy
RXJyb3IoV1RGTW92ZSh0b3BpYykpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hN
YW5hZ2VyLnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0aXZl
fXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVuZGxl
SWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9yLmRv
bWFpbi5VVEY4U3RyaW5nLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihlcnJvci5jb2RlKSk7Ci0gICAg
ICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9y
dEVycm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRlcm5hbCBzZXJ2aWNlIGVycm9yIl9zIH0pOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byBj
bGllbnRLZXlzID0gbV9zZXJ2aWNlLmNvbm5lY3Rpb24oKS5nZW5lcmF0ZUNsaWVudEtleXMoKTsK
LSAgICAgICAgICAgIFB1c2hSZWNvcmQgcmVjb3JkOwotICAgICAgICAgICAgcmVjb3JkLmJ1bmRs
ZUlEID0gbV9idW5kbGVJZGVudGlmaWVyOwotICAgICAgICAgICAgcmVjb3JkLnNlY3VyaXR5T3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcobV9zY29wZSktPmRhdGEoKS50
b1N0cmluZygpOwotICAgICAgICAgICAgcmVjb3JkLnNjb3BlID0gbV9zY29wZTsKLSAgICAgICAg
ICAgIHJlY29yZC5lbmRwb2ludCA9IGVuZHBvaW50OwotICAgICAgICAgICAgcmVjb3JkLnRvcGlj
ID0gV1RGTW92ZSh0b3BpYyk7Ci0gICAgICAgICAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNL
ZXkgPSBtX3ZhcGlkUHVibGljS2V5OwotICAgICAgICAgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tl
eSA9IFdURk1vdmUoY2xpZW50S2V5cy5jbGllbnRQMjU2REhLZXlQYWlyLnB1YmxpY0tleSk7Ci0g
ICAgICAgICAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IFdURk1vdmUoY2xpZW50S2V5cy5j
bGllbnRQMjU2REhLZXlQYWlyLnByaXZhdGVLZXkpOwotICAgICAgICAgICAgcmVjb3JkLnNoYXJl
ZEF1dGhTZWNyZXQgPSBXVEZNb3ZlKGNsaWVudEtleXMuc2hhcmVkQXV0aFNlY3JldCk7Ci0KLSAg
ICAgICAgICAgIG1fZGF0YWJhc2UuaW5zZXJ0UmVjb3JkKHJlY29yZCwgW3RoaXNdKGF1dG8mJiBy
ZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVu
ZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkYXRh
YmFzZSBlcnJvciIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJGYWlsZWQgZHVlIHRvIGludGVybmFsIGRh
dGFiYXNlIGVycm9yIl9zIH0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgcGFydGlhbCB0
b3BpYyBsaXN0IHVwZGF0ZXMuCi0gICAgICAgICAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhtX2Nv
bm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0aGlzLCByZWNvcmQgPSBXVEZNb3ZlKCpyZXN1bHQpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0
aW9uRnJvbVJlY29yZChXVEZNb3ZlKHJlY29yZCkpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotLy8gVHJpZXMgdG8gcmVj
b3ZlciBmcm9tIGEgdG9waWMgYmVpbmcgbW92ZWQgdG8gdGhlIGdsb2JhbCBwYXVzZWQgZmlsdGVy
IChyZGFyOi8vODgxMzkzMzApLgotdm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjphdHRlbXB0VG9SZWNv
dmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYgdG9waWMpCi17Ci0gICAg
V29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHRvcGljID0gV1RGTW92ZSh0b3BpYyld
KCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwYXVz
ZWQgdG9waWMgYW5kIHRlbGxzIGFwc2QgdG8gZm9yZ2V0IGFib3V0IHRoZSB0b3BpYy4KLSAgICAg
ICAgYXV0byBvcmlnaW5hbFRvcGljcyA9IG1fY29ubmVjdGlvbi5pZ25vcmVkVG9waWNzKCk7Ci0g
ICAgICAgIGF1dG8gYXVnbWVudGVkVG9waWNzID0gb3JpZ2luYWxUb3BpY3M7Ci0gICAgICAgIGF1
Z21lbnRlZFRvcGljcy5hcHBlbmQodG9waWMpOwotICAgICAgICBtX2Nvbm5lY3Rpb24uc2V0SWdu
b3JlZFRvcGljcyhXVEZNb3ZlKGF1Z21lbnRlZFRvcGljcykpOwotICAgICAgICBtX2Nvbm5lY3Rp
b24uc2V0SWdub3JlZFRvcGljcyhXVEZNb3ZlKG9yaWdpbmFsVG9waWNzKSk7Ci0KLSAgICAgICAg
V29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBzdGFydEltcGwoSXNSZXRyeTo6WWVzKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLWNs
YXNzIFVuc3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPGJv
b2w+IHsKLXB1YmxpYzoKLSAgICBVbnN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmLCBjb25z
dCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJz
Y3JpcHRpb25JZGVudGlmaWVyLCBSZXN1bHRIYW5kbGVyJiYpOwotICAgIHZpcnR1YWwgflVuc3Vi
c2NyaWJlUmVxdWVzdCgpID0gZGVmYXVsdDsKLQotcHJvdGVjdGVkOgotICAgIEFTQ0lJTGl0ZXJh
bCBkZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJVbnN1YnNjcmliZVJlcXVlc3Qi
X3M7IH0KLSAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaCgp
IGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KCp0aGlzKTsg
fQotCi1wcml2YXRlOgotICAgIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIG1fc3Vic2NyaXB0
aW9uSWRlbnRpZmllcjsKLX07Ci0KLVVuc3Vic2NyaWJlUmVxdWVzdDo6VW5zdWJzY3JpYmVSZXF1
ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlw
dGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQotICAgIDogUHVz
aFNlcnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RG
TW92ZShyZXN1bHRIYW5kbGVyKSkKLSAgICAsIG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllcihzdWJz
Y3JpcHRpb25JZGVudGlmaWVyKQotewotfQotCi0vLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBz
aWRlIG9mIFB1c2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUuCi12b2lkIFVuc3Vic2NyaWJlUmVx
dWVzdDo6c3RhcnRJbnRlcm5hbCgpCi17Ci0gICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRs
ZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzXShh
dXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFyZXN1bHQgfHwgbV9zdWJzY3Jp
cHRpb25JZGVudGlmaWVyICE9IHJlc3VsdC0+aWRlbnRpZmllcikgewotICAgICAgICAgICAgZnVs
ZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBh
dXRvIHRvcGljID0gbWFrZVB1c2hUb3BpYyhtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUpOwot
ICAgICAgICBtX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUodG9waWMsIHJlc3VsdC0+c2VydmVyVkFQ
SURQdWJsaWNLZXksIFt0aGlzXShib29sIHVuc3Vic2NyaWJlZCwgTlNFcnJvciAqZXJyb3IpIG11
dGFibGUgewotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICAgICAgLy8gSWYgd2Ug
ZmFpbCB0byB1bnN1YnNjcmliZSBmcm9tIGFwc2QsIGp1c3QgZHJvcCBhIGxvZy4gV2Ugc3RpbGwg
d2FudCB0byBjb250aW51ZSBhbmQgcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBvdXIgZGF0YWJhc2Ug
aW4gY2FzZSB0aGVyZSdzIGEgc3RhdGUgbWlzbWF0Y2ggYmV0d2VlbiBvdXIgZGF0YWJhc2UgYW5k
IGFwc2QncyBkYXRhYmFzZS4KLSAgICAgICAgICAgIGlmICghdW5zdWJzY3JpYmVkKQotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJl
KGJ1bmRsZUlEOiAle3B1YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGgg
ZG9tYWluOiAle3B1YmxpY31zIGNvZGU6ICVsbGQpIiwgbV9idW5kbGVJZGVudGlmaWVyLnV0Zjgo
KS5kYXRhKCksIG1fc2NvcGUudXRmOCgpLmRhdGEoKSwgZXJyb3IuZG9tYWluLlVURjhTdHJpbmcg
PzogIm5vbmUiLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihlcnJvci5jb2RlKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgVU5VU0VEX1BBUkFNKHVuc3Vic2NyaWJlZCk7Ci0gICAgICAgICAgICBVTlVTRURf
UEFSQU0oZXJyb3IpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIG1fZGF0YWJhc2UucmVtb3ZlUmVj
b3JkQnlJZGVudGlmaWVyKG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgW3RoaXNdKGJvb2wgcmVt
b3ZlZCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQg
cGFydGlhbCB0b3BpYyBsaXN0IHVwZGF0ZXMuCi0gICAgICAgICAgICAgICAgdXBkYXRlVG9waWNM
aXN0cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0aGlzXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBmdWxmaWxsKHRydWUpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi0vLyBPbmx5IGFsbG93IG9uZSBy
ZXF1ZXN0IHBlciAoYnVuZGxlSWRlbnRpZmllciwgc2NvcGUpIHRvIHByb2NlZWQgYXQgb25jZS4g
Rm9yIGluc3RhbmNlLCBpZiBhIGdpdmVuCi0vLyBwYWdlIGNhbGxzIFB1c2hNYW5hZ2VyLnN1YnNj
cmliZSgpIHR3aWNlIGluIGEgcm93LCB0aGUgc2Vjb25kIHN1YnNjcmliZSBjYWxsIHdvbid0IHN0
YXJ0IHVudGlsCi0vLyB0aGUgZmlyc3Qgb25lIGNvbXBsZXRlcy4KLXZvaWQgUHVzaFNlcnZpY2U6
OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiBtYXAsIHN0
ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYgcmVxdWVzdCkKLXsKLSAgICBhdXRv
IGtleSA9IHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0LT5idW5kbGVJZGVudGlmaWVyKCksIHJlcXVl
c3QtPnNjb3BlKCkpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmVuc3VyZShrZXksIFtdKCkg
ewotICAgICAgICByZXR1cm4gRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVz
dD4+IHsgfTsKLSAgICB9KTsKLQotICAgIGF1dG8gYWRkZWRSZXF1ZXN0ID0gcmVxdWVzdC5nZXQo
KTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3Qp
KTsKLQotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgYWRkZWRSZXF1ZXN0
LT5zdGFydCgpOwotfQotCi12b2lkIFB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2aWNlUmVx
dWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmIG1hcCwgUHVzaFNlcnZpY2VSZXF1ZXN0JiByZXF1
ZXN0KQotewotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3QuYnVuZGxlSWRl
bnRpZmllcigpLCByZXF1ZXN0LnNjb3BlKCkpOwotICAgIGF1dG8gcmVxdWVzdFF1ZXVlSXQgPSBt
YXAuZmluZChrZXkpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQocmVxdWVzdFF1ZXVlSXQgIT0gbWFw
LmVuZCgpKTsKLSAgICBhdXRvJiByZXF1ZXN0UXVldWUgPSByZXF1ZXN0UXVldWVJdC0+dmFsdWU7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVxdWVzdFF1ZXVlLnNpemUoKSA+IDApOwotICAgIGF1dG8g
Y3VycmVudFJlcXVlc3QgPSByZXF1ZXN0UXVldWUudGFrZUZpcnN0KCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoY3VycmVudFJlcXVlc3QuZ2V0KCkgPT0gJnJlcXVlc3QpOwotCi0gICAgUHVzaFNlcnZp
Y2VSZXF1ZXN0KiBuZXh0UmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgaWYgKCFyZXF1ZXN0UXVldWUu
c2l6ZSgpKQotICAgICAgICBtYXAucmVtb3ZlKHJlcXVlc3RRdWV1ZUl0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG5leHRSZXF1ZXN0ID0gcmVxdWVzdFF1ZXVlLmZpcnN0KCkuZ2V0KCk7Ci0KLSAgICAv
LyBFdmVuIGlmIHRoZXJlJ3Mgbm8gbmV4dCByZXF1ZXN0IHRvIHN0YXJ0LCBob2xkIG9uIHRvIGN1
cnJlbnRSZXF1ZXN0IHVudGlsIHRoZSBuZXh0IHR1cm4gb2YgdGhlIHJ1biBsb29wIHNpbmNlIHdl
J3JlIGluIHRoZSBtaWRkbGUgb2YgZXhlY3V0aW5nIHRoZSBmaW5pc2goKSBtZW1iZXIgZnVuY3Rp
b24gb2YgY3VycmVudFJlcXVlc3QuCi0gICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2N1
cnJlbnRSZXF1ZXN0ID0gV1RGTW92ZShjdXJyZW50UmVxdWVzdCksIG5leHRSZXF1ZXN0XSB7Ci0g
ICAgICAgIGlmIChuZXh0UmVxdWVzdCkKLSAgICAgICAgICAgIG5leHRSZXF1ZXN0LT5zdGFydCgp
OwotICAgIH0pOwotfQotCi12b2lkIFB1c2hTZXJ2aWNlOjpnZXRTdWJzY3JpcHRpb24oY29uc3Qg
U3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1
YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV9nZXRTdWJzY3JpcHRp
b25SZXF1ZXN0cywgbWFrZVVuaXF1ZTxHZXRTdWJzY3JpcHRpb25SZXF1ZXN0PigqdGhpcywgYnVu
ZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci19Ci0K
LXZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdChHZXRT
dWJzY3JpcHRpb25SZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VS
ZXF1ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIHJlcXVlc3QpOwotfQotCi12b2lkIFB1
c2hTZXJ2aWNlOjpzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV9zdWJzY3JpYmVSZXF1ZXN0cywg
bWFrZVVuaXF1ZTxTdWJzY3JpYmVSZXF1ZXN0PigqdGhpcywgYnVuZGxlSWRlbnRpZmllciwgc2Nv
cGUsIHZhcGlkUHVibGljS2V5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwotfQotCi12
b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vic2NyaWJlUmVx
dWVzdCYgcmVxdWVzdCkKLXsKLSAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX3N1YnNj
cmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKLX0KLQotdm9pZCBQdXNoU2VydmljZTo6dW5zdWJzY3Jp
YmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQ
dXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVx
dWVzdChtX3Vuc3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8VW5zdWJzY3JpYmVSZXF1ZXN0
PigqdGhpcywgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIHN1YnNjcmlwdGlvbklkZW50aWZpZXIs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Ci19Ci0KLXZvaWQgUHVzaFNlcnZpY2U6OmRp
ZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYgcmVxdWVzdCkK
LXsKLSAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX3Vuc3Vic2NyaWJlUmVxdWVzdHMs
IHJlcXVlc3QpOwotfQotCi1lbnVtIGNsYXNzIENvbnRlbnRFbmNvZGluZyB7Ci0gICAgRW1wdHks
Ci0gICAgQUVTR0NNLAotICAgIEFFUzEyOEdDTQotfTsKLQotc3RydWN0IFJhd1B1c2hNZXNzYWdl
IHsKLSAgICBTdHJpbmcgdG9waWM7Ci0gICAgQ29udGVudEVuY29kaW5nIGVuY29kaW5nOwotCi0g
ICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgbm90IENvbnRlbnRFbmNvZGluZzo6RW1wdHku
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY3J5cHRlZFBheWxvYWQ7Ci0KLSAgICAvLyBPbmx5IHNl
dCBpZiBlbmNvZGluZyBpcyBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTS4KLSAgICBWZWN0b3I8dWlu
dDhfdD4gc2VydmVyUHVibGljS2V5OwotICAgIFZlY3Rvcjx1aW50OF90PiBzYWx0OwotCi19Owot
Ci1zdGF0aWMgc3RkOjpvcHRpb25hbDxSYXdQdXNoTWVzc2FnZT4gbWFrZVJhd1B1c2hNZXNzYWdl
KE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbykKLXsKLSAgICBSYXdQdXNo
TWVzc2FnZSBtZXNzYWdlOwotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIG1lc3Nh
Z2UudG9waWMgPSB0b3BpYzsKLSAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnRFbmNvZGluZyA9IHVz
ZXJJbmZvW0AiY29udGVudF9lbmNvZGluZyJdOwotICAgICAgICBOU1N0cmluZyAqcGF5bG9hZEJh
c2U2NCA9IHVzZXJJbmZvW0AicGF5bG9hZCJdOwotCi0gICAgICAgIGlmICghY29udGVudEVuY29k
aW5nLmxlbmd0aCB8fCAhcGF5bG9hZEJhc2U2NC5sZW5ndGgpIHsKLSAgICAgICAgICAgIG1lc3Nh
Z2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkVtcHR5OwotICAgICAgICAgICAgcmV0dXJu
IG1lc3NhZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoW2NvbnRlbnRFbmNvZGluZyBpc0Vx
dWFsVG9TdHJpbmc6QCJhZXMxMjhnY20iXSkKLSAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2Rpbmcg
PSBDb250ZW50RW5jb2Rpbmc6OkFFUzEyOEdDTTsKLSAgICAgICAgZWxzZSBpZiAoW2NvbnRlbnRF
bmNvZGluZyBpc0VxdWFsVG9TdHJpbmc6QCJhZXNnY20iXSkgewotICAgICAgICAgICAgbWVzc2Fn
ZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6QUVTR0NNOwotCi0gICAgICAgICAgICBOU1N0
cmluZyAqc2VydmVyUHVibGljS2V5QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19wdWJsaWNrZXki
XTsKLSAgICAgICAgICAgIE5TU3RyaW5nICpzYWx0QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19z
YWx0Il07Ci0gICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCB8fCAhc2Fs
dEJhc2U2NFVSTCkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGlu
ZyBhZXNnY20tZW5jcnlwdGVkIHB1c2ggd2l0aG91dCByZXF1aXJlZCBzZXJ2ZXIga2V5IGFuZCBz
YWx0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBiYXNlNjRVUkxEZWNvZGUo
c2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKLSAgICAgICAgICAgIGF1dG8gc2FsdCA9IGJhc2U2
NFVSTERlY29kZShzYWx0QmFzZTY0VVJMKTsKLSAgICAgICAgICAgIGlmICghc2VydmVyUHVibGlj
S2V5IHx8ICFzYWx0KSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3Bw
aW5nIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCB3aXRoIGltcHJvcGVybHkgZW5jb2RlZCBzZXJ2ZXIg
a2V5IGFuZCBzYWx0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXkgPSBXVEZN
b3ZlKCpzZXJ2ZXJQdWJsaWNLZXkpOwotICAgICAgICAgICAgbWVzc2FnZS5zYWx0ID0gV1RGTW92
ZSgqc2FsdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNo
LCAiRHJvcHBpbmcgcHVzaCB3aXRoIHVua25vd24gY29udGVudCBlbmNvZGluZzogJXtwdWJsaWN9
cyIsIGNvbnRlbnRFbmNvZGluZy5VVEY4U3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNv
ZGUocGF5bG9hZEJhc2U2NCk7Ci0gICAgICAgIGlmICghcGF5bG9hZCkgewotICAgICAgICAgICAg
UkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVuY29kZWQg
cGF5bG9hZCIpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQot
ICAgICAgICBtZXNzYWdlLmVuY3J5cHRlZFBheWxvYWQgPSBXVEZNb3ZlKCpwYXlsb2FkKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsKLX0KLQotdm9pZCBQdXNoU2VydmljZTo6ZGlkUmVj
ZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGF1
dG8gbWVzc2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8pOwot
ICAgIGlmICghbWVzc2FnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhYmFz
ZS0+Z2V0UmVjb3JkQnlUb3BpYyh0b3BpYywgW3RoaXMsIG1lc3NhZ2UgPSBXVEZNb3ZlKCptZXNz
YWdlUmVzdWx0KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYXV0byYmIHJlY29yZFJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghcmVjb3JkUmVz
dWx0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5jb21pbmcg
cHVzaCBzZW50IHRvIHVua25vd24gdG9waWM6ICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdlLnRvcGlj
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBhdXRvIHJlY29yZCA9IFdURk1vdmUo
KnJlY29yZFJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVu
dEVuY29kaW5nOjpFbXB0eSkgewotICAgICAgICAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlcihyZWNvcmQuYnVuZGxlSUQsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UgeyB7IH0sIFVSTChV
UkwoKSwgcmVjb3JkLnNjb3BlKSB9KTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBQdXNoQ3J5cHRvOjpD
bGllbnRLZXlzIGNsaWVudEtleXMgewotICAgICAgICAgICAgeyBXVEZNb3ZlKHJlY29yZC5jbGll
bnRQdWJsaWNLZXkpLCBXVEZNb3ZlKHJlY29yZC5jbGllbnRQcml2YXRlS2V5KSB9LAotICAgICAg
ICAgICAgV1RGTW92ZShyZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkKLSAgICAgICAgfTsKLQotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjcnlwdGVkUGF5bG9hZDsKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpBRVMxMjhHQ00p
Ci0gICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFUzEyOEdDTVBheWxvYWQo
Y2xpZW50S2V5cywgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKLSAgICAgICAgZWxzZSBpZiAo
bWVzc2FnZS5lbmNvZGluZyA9PSBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTSkKLSAgICAgICAgICAg
IGRlY3J5cHRlZFBheWxvYWQgPSBkZWNyeXB0QUVTR0NNUGF5bG9hZChjbGllbnRLZXlzLCBtZXNz
YWdlLnNlcnZlclB1YmxpY0tleSwgbWVzc2FnZS5zYWx0LCBtZXNzYWdlLmVuY3J5cHRlZFBheWxv
YWQpOwotCi0gICAgICAgIGlmICghZGVjcnlwdGVkUGF5bG9hZCkgewotICAgICAgICAgICAgUkVM
RUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGluY29taW5nIHB1c2ggZHVlIHRvIGRlY3J5cHRpb24g
ZXJyb3IgZm9yIHRvcGljICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdlLnRvcGljLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIocmVj
b3JkLmJ1bmRsZUlELCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlIHsgV1RGTW92ZSgqZGVjcnlwdGVk
UGF5bG9hZCksIFVSTChVUkwoKSwgcmVjb3JkLnNjb3BlKSB9KTsKLQotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5kZXggMTk4
MTQzZjU2OTdjZDI4YzY5MjhkNDU2OGMyMWMzMjU0OTIwZDIwZi4uMmMxNDE0NGM2MWJiM2VmYWU0
ZWQzMjhlMTUyMGQzZWNmMDgzMTdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC0yNSw3ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QdXNoTWVzc2FnZUNyeXB0by5oPgogI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgpAQCAtNDgsOCArNDcsNiBAQCBwdWJsaWM6CiAgICAgUHVzaFNlcnZpY2VD
b25uZWN0aW9uKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlQ29ubmVjdGlv
bigpID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UHVzaENyeXB0bzo6Q2xpZW50
S2V5cyBnZW5lcmF0ZUNsaWVudEtleXMoKTsKLQogICAgIHVzaW5nIFN1YnNjcmliZUhhbmRsZXIg
PSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TU3RyaW5nICosIE5TRXJyb3IgKik+OwogICAgIHZp
cnR1YWwgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSA9IDA7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KaW5kZXggOTJm
ODE0Mjc3YTgzODE1MzE2ODhiMGU0ODUxODJkNDNkODVjYzg2OC4uNTM0MzMyNWViNWVhMjAzZThk
ZjZmZjgzMDNjYjliMGZmYzgxMzIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTI4LDE1ICsyOCw4IEBACiAKICNpbXBvcnQgPHd0
Zi9Xb3JrUXVldWUuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIG5hbWVzcGFjZSBX
ZWJQdXNoRCB7CiAKLVB1c2hDcnlwdG86OkNsaWVudEtleXMgUHVzaFNlcnZpY2VDb25uZWN0aW9u
OjpnZW5lcmF0ZUNsaWVudEtleXMoKQotewotICAgIHJldHVybiBQdXNoQ3J5cHRvOjpDbGllbnRL
ZXlzOjpnZW5lcmF0ZSgpOwotfQotCiB2b2lkIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3RhcnRM
aXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBoYW5k
bGVyKQogewogICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRs
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaAppbmRleCAwMjgwODRlNTJi
NGEwZGJiM2MxNDliZTZjOTczNmY3NTc1ZTc4N2IzLi5hZjMxODU3ZGI4NzM3YTliNjQzOTVmYjAw
MDQ3NTBhOTU4ZTU0OGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1
c2hEYWVtb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiUHVzaENsaWVudENvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJQdXNoTWVzc2FnZUZvclRlc3RpbmcuaCIKLSNpbmNsdWRlICJQdXNoU2VydmljZS5o
IgogI2luY2x1ZGUgIldlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIldlYlB1c2hEYWVtb25Db25zdGFudHMuaCIKICNpbmNsdWRlICJXZWJQdXNoTWVzc2Fn
ZS5oIgpAQCAtNjIsMTAgKzYxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29ubmVjdGlvbkFkZGVk
KHhwY19jb25uZWN0aW9uX3QpOwogICAgIHZvaWQgY29ubmVjdGlvblJlbW92ZWQoeHBjX2Nvbm5l
Y3Rpb25fdCk7CiAKLSAgICB2b2lkIHN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCk7Ci0gICAgdm9pZCBz
dGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNv
bnN0IFN0cmluZyYgcHVzaERhdGFiYXNlUGF0aCk7Ci0gICAgdm9pZCBoYW5kbGVJbmNvbWluZ1B1
c2goY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
JiYpOwotCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycwogICAgIHZvaWQgZWNob1R3aWNlKENsaWVu
dENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2b2lkIHJlcXVlc3RTeXN0ZW1Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKTsKQEAgLTc0LDcgKzY5LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0RGVidWdNb2RlSXNFbmFibGVkKENsaWVudENvbm5lY3Rpb24q
LCBib29sKTsKICAgICB2b2lkIHVwZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0aW9uKENsaWVudENv
bm5lY3Rpb24qLCBjb25zdCBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24mKTsK
ICAgICB2b2lkIGluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZyhDbGllbnRDb25uZWN0aW9uKiwg
Y29uc3QgUHVzaE1lc3NhZ2VGb3JUZXN0aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7Ci0gICAgdm9pZCBpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xp
ZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpOwogICAgIHZvaWQgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlcyhDbGllbnRDb25uZWN0aW9u
KiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQdXNoTWVz
c2FnZT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCBzdWJzY3JpYmVUb1B1c2hTZXJ2aWNl
KENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGFwcGxpY2F0aW9uU2VydmVyS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2b2lkIHVuc3Vic2NyaWJlRnJvbVB1c2hT
ZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBXZWJDb3JlOjpQ
dXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBF
eHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKTsK
QEAgLTk0LDE3ICs4OCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG5vdGlmeUNsaWVudFB1c2hN
ZXNzYWdlSXNBdmFpbGFibGUoY29uc3QgU3RyaW5nJiBjbGllbnRDb2RlU2lnbmluZ0lkZW50aWZp
ZXIpOwogCi0gICAgdm9pZCBzZXRQdXNoU2VydmljZShzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZp
Y2U+JiYpOwotICAgIHZvaWQgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKEZ1bmN0aW9uPHZv
aWQoKT4mJik7Ci0KICAgICBDbGllbnRDb25uZWN0aW9uKiB0b0NsaWVudENvbm5lY3Rpb24oeHBj
X2Nvbm5lY3Rpb25fdCk7CiAgICAgSGFzaE1hcDx4cGNfY29ubmVjdGlvbl90LCBSZWY8Q2xpZW50
Q29ubmVjdGlvbj4+IG1fY29ubmVjdGlvbk1hcDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZT4gbV9wdXNoU2VydmljZTsKLSAgICBib29sIG1fcHVzaFNlcnZpY2VTdGFydGVkIHsg
ZmFsc2UgfTsKLSAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3BlbmRpbmdQdXNoU2Vydmlj
ZUZ1bmN0aW9uczsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViS2l0OjpXZWJQdXNo
TWVzc2FnZT4+IG1fcHVzaE1lc3NhZ2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBEZXF1ZTxQdXNo
TWVzc2FnZUZvclRlc3Rpbmc+PiBtX3Rlc3RpbmdQdXNoTWVzc2FnZXM7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggYWRkNmUzZDhhZGZlYTg5OTg4OGY0
YmFmNjFhY2MwNTMxMzYzZGNjNS4uYThmZTQ5ZjUyZDc2MzI2NjMxY2FjN2Q3NjZjMDkxNDk1ZTlj
ZTU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtNDAsNyAr
NDAsNiBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvU3Bh
bi5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgotI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpXZWJQdXNoRDsKIApAQCAtOTIsMTEgKzkxLDYgQEAgQVJH
VU1FTlRTKFB1c2hNZXNzYWdlRm9yVGVzdGluZykKIFJFUExZKGJvb2wpCiBFTkQKIAotRlVOQ1RJ
T04oaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKQotQVJHVU1FTlRTKFN0cmlu
ZykKLVJFUExZKGJvb2wpCi1FTkQKLQogRlVOQ1RJT04oc3Vic2NyaWJlVG9QdXNoU2VydmljZSkK
IEFSR1VNRU5UUyhVUkwsIFZlY3Rvcjx1aW50OF90PikKIFJFUExZKGNvbnN0IEV4cGVjdGVkPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpCkBA
IC0xNTcsMTMgKzE1MSw2IEBAIFdlYlB1c2hEOjpFbmNvZGVkTWVzc2FnZSBpbmplY3RQdXNoTWVz
c2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KGJvb2wgcmVwbHkpCiAgICAgcmV0dXJuIGVuY29k
ZXIudGFrZUJ1ZmZlcigpOwogfQogCi1XZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5KQotewot
ICAgIFdlYktpdDo6RGFlbW9uOjpFbmNvZGVyIGVuY29kZXI7Ci0gICAgZW5jb2RlciA8PCByZXBs
eTsKLSAgICByZXR1cm4gZW5jb2Rlci50YWtlQnVmZmVyKCk7Ci19Ci0KIFdlYlB1c2hEOjpFbmNv
ZGVkTWVzc2FnZSBnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOjplbmNvZGVSZXBseShjb25zdCBWZWN0
b3I8V2ViS2l0OjpXZWJQdXNoTWVzc2FnZT4mIHJlcGx5KQogewogICAgIFdlYktpdDo6RGFlbW9u
OjpFbmNvZGVyIGVuY29kZXI7CkBAIC0yMzcsNTEgKzIyNCw2IEBAIERhZW1vbiYgRGFlbW9uOjpz
aW5nbGV0b24oKQogICAgIHJldHVybiBkYWVtb247CiB9CiAKLXZvaWQgRGFlbW9uOjpzdGFydE1v
Y2tQdXNoU2VydmljZSgpCi17Ci0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IFt0aGlzXShjb25z
dCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNz
YWdlKSB7Ci0gICAgICAgIGhhbmRsZUluY29taW5nUHVzaChidW5kbGVJZGVudGlmaWVyLCBXVEZN
b3ZlKG1lc3NhZ2UpKTsKLSAgICB9OwotICAgIFB1c2hTZXJ2aWNlOjpjcmVhdGVNb2NrU2Vydmlj
ZShXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgW3RoaXNdKGF1dG8mJiBwdXNoU2VydmljZSkgbXV0
YWJsZSB7Ci0gICAgICAgIHNldFB1c2hTZXJ2aWNlKFdURk1vdmUocHVzaFNlcnZpY2UpKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UoY29uc3QgU3RyaW5nJiBp
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCi17Ci0g
ICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IFt0aGlzXShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKSB7Ci0gICAgICAgIGhhbmRs
ZUluY29taW5nUHVzaChidW5kbGVJZGVudGlmaWVyLCBXVEZNb3ZlKG1lc3NhZ2UpKTsKLSAgICB9
OwotICAgIFB1c2hTZXJ2aWNlOjpjcmVhdGUoaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGRhdGFi
YXNlUGF0aCwgV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVzaFNlcnZp
Y2UpIG11dGFibGUgewotICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNl
KSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGFlbW9uOjpzZXRQdXNoU2VydmljZShzdGQ6OnVuaXF1
ZV9wdHI8UHVzaFNlcnZpY2U+JiYgcHVzaFNlcnZpY2UpCi17Ci0gICAgbV9wdXNoU2VydmljZSA9
IFdURk1vdmUocHVzaFNlcnZpY2UpOwotICAgIG1fcHVzaFNlcnZpY2VTdGFydGVkID0gdHJ1ZTsK
LQotICAgIGlmICghbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpc10oKSB7Ci0g
ICAgICAgIHdoaWxlIChtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0aW9ucy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0aW9ucy50
YWtlRmlyc3QoKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9KTsK
LX0KLQotdm9pZCBEYWVtb246OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5jdGlvbjx2
b2lkKCk+JiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3B1c2hTZXJ2aWNlU3RhcnRlZCkgewot
ICAgICAgICBtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0aW9ucy5hcHBlbmQoV1RGTW92ZShmdW5j
dGlvbikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGZ1bmN0aW9uKCk7Ci19Ci0KIHZv
aWQgRGFlbW9uOjpicm9hZGNhc3REZWJ1Z01lc3NhZ2UoSlNDOjpNZXNzYWdlTGV2ZWwgbWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0g
YWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkp
OwpAQCAtMzgzLDkgKzMyNSw2IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdl
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAgY2FzZSBN
ZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgogICAgICAgICBoYW5kbGVX
ZWJQdXNoRE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmluamVjdFB1c2hNZXNzYWdlRm9y
VGVzdGluZz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlT
ZW5kZXIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgotICAgICAgICBoYW5kbGVXZWJQdXNoRE1lc3Nh
Z2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVz
dGluZz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5k
ZXIpKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6R2V0UGVuZGluZ1B1
c2hNZXNzYWdlczoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3Nh
Z2VJbmZvOjpnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzPihjbGllbnRDb25uZWN0aW9uLCBlbmNvZGVk
TWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOwogICAgICAgICBicmVhazsKQEAgLTQ5Miw0
NiArNDMxLDYgQEAgdm9pZCBEYWVtb246OmluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZyhDbGll
bnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBQdXMKICAgICByZXBseVNlbmRlcih0cnVl
KTsKIH0KIAotdm9pZCBEYWVtb246OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgcmVwbHlTZW5kZXIpCi17Ci0gICAgaWYgKCFj
b25uZWN0aW9uLT5ob3N0QXBwSGFzUHVzaEluamVjdEVudGl0bGVtZW50KCkpIHsKLSAgICAgICAg
Y29ubmVjdGlvbi0+YnJvYWRjYXN0RGVidWdNZXNzYWdlKCJBdHRlbXB0aW5nIHRvIGluamVjdCBh
IHB1c2ggbWVzc2FnZSBmcm9tIGFuIHVuZW50aXRsZWQgcHJvY2VzcyIpOwotICAgICAgICByZXBs
eVNlbmRlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBydW5BZnRlclN0
YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIG1lc3NhZ2UgPSBtZXNzYWdlLCByZXBseVNlbmRlciA9
IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fcHVzaFNl
cnZpY2UpIHsKLSAgICAgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gYnl0ZXMgPSBtZXNzYWdlLnV0ZjgoKTsK
LSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6Ynl0ZXMuZGF0YSgpIGxlbmd0aDogYnl0ZXMubGVuZ3RoKCldKTsKLQot
ICAgICAgICBpZCBvYmogPSBbTlNKU09OU2VyaWFsaXphdGlvbiBKU09OT2JqZWN0V2l0aERhdGE6
ZGF0YS5nZXQoKSBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgICAgIGlmICghb2JqIHx8
ICFbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7Ci0gICAgICAgICAg
ICByZXBseVNlbmRlcihmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgTlNMb2coQCJnb3Qgb2JqOiAlQCIsIG9iaik7Ci0KLSAgICAgICAgbV9wdXNoU2Vydmlj
ZS0+ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKG9ialtAInRvcGljIl0sIG9ialtAInVzZXJJbmZvIl0s
IFtyZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lk
IERhZW1vbjo6aGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmll
ciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmIG1lc3NhZ2UpCi17Ci0gICAgYXV0byBhZGRSZXN1
bHQgPSBtX3B1c2hNZXNzYWdlcy5lbnN1cmUoYnVuZGxlSWRlbnRpZmllciwgW10gewotICAgICAg
ICByZXR1cm4gVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+IHsgfTsKLSAgICB9KTsKLSAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKG1lc3NhZ2UpKTsKLQot
ICAgIG5vdGlmeUNsaWVudFB1c2hNZXNzYWdlSXNBdmFpbGFibGUoYnVuZGxlSWRlbnRpZmllcik7
Ci19Ci0KIHZvaWQgRGFlbW9uOjpub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNv
bnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKQogewogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTU2Myw5ICs0NjIsNiBAQCB2b2lkIERhZW1vbjo6Z2V0UGVuZGluZ1B1c2hNZXNz
YWdlcyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZAogCiAgICAg
VmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+IHJlc3VsdE1lc3NhZ2VzOwogCi0gICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBtX3B1c2hNZXNzYWdlcy5maW5kKGhvc3RBcHBDb2RlU2lnbmluZ0lk
ZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3B1c2hNZXNzYWdlcy5lbmQoKSkKLSAgICAgICAgc3Rk
Ojpzd2FwKHJlc3VsdE1lc3NhZ2VzLCBpdGVyYXRvci0+dmFsdWUpOwotCiAgICAgYXV0byBpdGVy
YXRvciA9IG1fdGVzdGluZ1B1c2hNZXNzYWdlcy5maW5kKGhvc3RBcHBDb2RlU2lnbmluZ0lkZW50
aWZpZXIpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMuZW5kKCkp
IHsKICAgICAgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogaXRlcmF0b3ItPnZhbHVlKSB7CkBAIC01
ODAsNTAgKzQ3NiwyNSBAQCB2b2lkIERhZW1vbjo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyhDbGll
bnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZAogICAgIHJlcGx5U2VuZGVy
KFdURk1vdmUocmVzdWx0TWVzc2FnZXMpKTsKIH0KIAotdm9pZCBEYWVtb246OnN1YnNjcmliZVRv
UHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29w
ZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwg
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKK3ZvaWQgRGFlbW9uOjpz
dWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0
IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJL
ZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1
YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIp
CiB7Ci0gICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlm
aWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9
IHNjb3BlVVJMLnN0cmluZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3Zl
KHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7
Ci0gICAgICAgICAgICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRp
b25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlh
bGl6YXRpb24gZmFpbGVkIl9zIH0pKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29w
ZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKLSAgICB9KTsKKyAgICBV
TlVTRURfUEFSQU0oYXBwbGljYXRpb25TZXJ2ZXJLZXkpOworICAgIHJlcGx5U2VuZGVyKG1ha2VV
bmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpOb3RBbGxvd2VkRXJy
b3IsICJMYWNrIHBlcm1pc3Npb24iX3MgfSkpOwogfQogCi12b2lkIERhZW1vbjo6dW5zdWJzY3Jp
YmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJM
JiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0
aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29s
LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQordm9pZCBEYWVtb246
OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVy
IHB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIp
CiB7Ci0gICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlm
aWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9
IHNjb3BlVVJMLnN0cmluZygpLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCByZXBseVNlbmRlciA9
IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fcHVzaFNl
cnZpY2UpIHsKLSAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2Vydmlj
ZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9wdXNoU2VydmljZS0+dW5zdWJzY3JpYmUoYnVuZGxlSWRlbnRp
Zmllciwgc2NvcGUsIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFdURk1vdmUocmVwbHlTZW5kZXIp
KTsKLSAgICB9KTsKKyAgICByZXBseVNlbmRlcihmYWxzZSk7CiB9CiAKIHZvaWQgRGFlbW9uOjpn
ZXRQdXNoU3Vic2NyaXB0aW9uKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVS
TCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8c3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4Y2VwdGlv
bkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCiB7Ci0gICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2
aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWdu
aW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCByZXBseVNlbmRlciA9
IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fcHVzaFNl
cnZpY2UpIHsKLSAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2Vydmlj
ZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1bmRsZUlk
ZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7Ci0gICAgfSk7CisgICAgcmVw
bHlTZW5kZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geyB9
KTsKIH0KIAogdm9pZCBEYWVtb246OmdldFB1c2hQZXJtaXNzaW9uU3RhdGUoQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBFeHBlY3RlZDx1aW50OF90LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYm
IHJlcGx5U2VuZGVyKQogewotICAgIC8vIEZJWE1FCi0jaWYgSEFWRShBUFBMRV9QVVNIX1NFUlZJ
Q0VfVVJMX1RPS0VOX1NVUFBPUlQpCi0gICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6R3JhbnRlZCkpOwotI2Vsc2UKICAgICBy
ZXBseVNlbmRlcihzdGF0aWNfY2FzdDx1aW50OF90PihXZWJDb3JlOjpQdXNoUGVybWlzc2lvblN0
YXRlOjpEZW5pZWQpKTsKLSNlbmRpZgogfQogCiBDbGllbnRDb25uZWN0aW9uKiBEYWVtb246OnRv
Q2xpZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmggYi9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKaW5kZXggZDNjMTdlNjVkYTNhZWM1MjQ0
YWI5MTYxM2JhYzNjZjZlOWVhYTI2OC4uYmJlYjk2OGRlN2E3NTlkZGYyNzZmYzFiYTY3ZDI4YjY2
NmE0ODY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
TWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaApA
QCAtMjcsNiArMjcsNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW50IFdlYlB1c2hEYWVt
b25NYWluKGludCwgY2hhcioqKTsKK2ludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNo
YXIqKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
V2ViUHVzaERhZW1vbk1haW4ubW0KaW5kZXggODkyOGQ4ZmM5NDBmYWVmODFhODM0ZTMwOTQ1YzM1
NjA3MzI3YWFjYS4uMmE2OGUxOGZhMjAxNTA2NjIwZDFjMzgxNzQ0MTFlYjBhYTJiZGM1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCkBAIC0zMCwyMSAr
MzAsMjQgQEAKICNpbXBvcnQgIkRhZW1vbkRlY29kZXIuaCIKICNpbXBvcnQgIkRhZW1vbkVuY29k
ZXIuaCIKICNpbXBvcnQgIkRhZW1vblV0aWxpdGllcy5oIgotI2ltcG9ydCAiTG9nSW5pdGlhbGl6
YXRpb24uaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2dJbml0aWFsaXphdGlvbi5oPgotI2lt
cG9ydCA8Z2V0b3B0Lmg+Ci0jaW1wb3J0IDx3dGYvTG9nSW5pdGlhbGl6YXRpb24uaD4KICNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
IAorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjaW1wb3J0IDxzZXJ2ZXJzL2Jvb3RzdHJh
cC5oPgorI2Vsc2UKKyNpbXBvcnQgPG1hY2gvc3RkX3R5cGVzLmg+CitleHRlcm4gIkMiIHsKK2V4
dGVybiBrZXJuX3JldHVybl90IGJvb3RzdHJhcF9jaGVja19pbihtYWNoX3BvcnRfdCBib290c3Ry
YXBQb3J0LCBjb25zdCBjaGFyICpzZXJ2aWNlTmFtZSwgbWFjaF9wb3J0X3QqKTsKK30KKyNlbmRp
ZgorCiB1c2luZyBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlZE1lc3NhZ2U7CiB1c2luZyBXZWJQdXNo
RDo6RGFlbW9uOwogCi1zdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGVudGl0bGVtZW50TmFtZSA9
ICJjb20uYXBwbGUucHJpdmF0ZS53ZWJraXQud2VicHVzaCJfczsKLXN0YXRpYyBjb25zdCBBU0NJ
SUxpdGVyYWwgZGVmYXVsdE1hY2hTZXJ2aWNlTmFtZSA9ICJjb20uYXBwbGUud2Via2l0LndlYnB1
c2hkLnNlcnZpY2UiX3M7Ci1zdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRJbmNvbWlu
Z1B1c2hTZXJ2aWNlTmFtZSA9ICJjb20uYXBwbGUuYXBzLndlYmtpdC53ZWJwdXNoZC5pbmNvbWlu
Zy1wdXNoIl9zOworc3RhdGljIGNvbnN0IGNoYXIgKmluY29taW5nUHVzaFNlcnZpY2VOYW1lID0g
ImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29taW5nLXB1c2giOwogCiBuYW1lc3Bh
Y2UgV2ViUHVzaEQgewogCkBAIC03MSw1NSArNzQsMjMgQEAgdXNpbmcgV2ViUHVzaEQ6OmNvbm5l
Y3Rpb25SZW1vdmVkOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW50IFdlYlB1c2hEYWVtb25N
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK2ludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJn
YywgY29uc3QgY2hhcioqIGFyZ3YpCiB7CisgICAgaWYgKGFyZ2MgIT0gMyB8fCBzdHJjbXAoYXJn
dlsxXSwgIi0tbWFjaFNlcnZpY2VOYW1lIikpIHsKKyAgICAgICAgTlNMb2coQCJ1c2FnZTogd2Vi
cHVzaGQgLS1tYWNoU2VydmljZU5hbWUgPG5hbWU+Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisgICAgY29uc3QgY2hhciogbWFjaFNlcnZpY2VOYW1lID0gYXJndlsyXTsKKwogICAgIEBh
dXRvcmVsZWFzZXBvb2wgewotICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Cisg
ICAgICAgIFdlYktpdDo6c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1h
Y2hTZXJ2aWNlTmFtZSwgImNvbS5hcHBsZS5wcml2YXRlLndlYmtpdC53ZWJwdXNoIiwgY29ubmVj
dGlvbkFkZGVkLCBjb25uZWN0aW9uUmVtb3ZlZCwgY29ubmVjdGlvbkV2ZW50SGFuZGxlcik7CiAK
LSNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBXVEY6
OmxvZ0NoYW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgV2ViQ29yZTo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICBXZWJLaXQ6OmxvZ0NoYW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxz
SWZOZWNlc3NhcnkoKTsKLSNlbmRpZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19E
SVNBQkxFRAotCi0gICAgICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLSAg
ICAgICAgICAgIHsgIm1hY2hTZXJ2aWNlTmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbScg
fSwKLSAgICAgICAgICAgIHsgImluY29taW5nUHVzaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJn
dW1lbnQsIDAsICdwJyB9LAotICAgICAgICAgICAgeyAidXNlTW9ja1B1c2hTZXJ2aWNlIiwgbm9f
YXJndW1lbnQsIDAsICdmJyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgY29uc3QgY2hhciogbWFj
aFNlcnZpY2VOYW1lID0gZGVmYXVsdE1hY2hTZXJ2aWNlTmFtZTsKLSAgICAgICAgY29uc3QgY2hh
ciogaW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5h
bWU7Ci0gICAgICAgIGJvb2wgdXNlTW9ja1B1c2hTZXJ2aWNlID0gZmFsc2U7Ci0KLSAgICAgICAg
aW50IGM7Ci0gICAgICAgIGludCBvcHRpb25JbmRleDsKLSAgICAgICAgd2hpbGUgKChjID0gZ2V0
b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsICZvcHRpb25JbmRleCkpICE9IC0xKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgIGNhc2UgJ20nOgotICAgICAg
ICAgICAgICAgIG1hY2hTZXJ2aWNlTmFtZSA9IG9wdGFyZzsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgICAgIGluY29taW5nUHVzaFNl
cnZpY2VOYW1lID0gb3B0YXJnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgdXNlTW9ja1B1c2hTZXJ2aWNlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJWNcbiIsIG9wdG9wdCk7Ci0gICAg
ICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IFdlYktpdDo6c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1hY2hTZXJ2
aWNlTmFtZSwgZW50aXRsZW1lbnROYW1lLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1v
dmVkLCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQotICAgICAgICBpZiAodXNlTW9ja1B1c2hT
ZXJ2aWNlKQotICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFy
dE1vY2tQdXNoU2VydmljZSgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBs
aWJyYXJ5UGF0aCA9IE5TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFy
eURpcmVjdG9yeSwgTlNVc2VyRG9tYWluTWFzaywgWUVTKVswXTsKLSAgICAgICAgICAgIFN0cmlu
ZyBwdXNoRGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
cyhsaWJyYXJ5UGF0aCwgeyAiV2ViS2l0IiwgIldlYlB1c2giLCAiUHVzaERhdGFiYXNlLmRiIiB9
KTsKLSAgICAgICAgICAgIDo6V2ViUHVzaEQ6OkRhZW1vbjo6c2luZ2xldG9uKCkuc3RhcnRQdXNo
U2VydmljZShpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgcHVzaERhdGFiYXNlUGF0aCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgb25jZSB3ZSBhY3R1YWxseSBzdGFy
dCB1c2luZyBBUFNDb25uZWN0aW9uLgorICAgICAgICBtYWNoX3BvcnRfdCBpbmNvbWluZ01lc3Nh
Z2VQb3J0OworICAgICAgICBpZiAoYm9vdHN0cmFwX2NoZWNrX2luKGJvb3RzdHJhcF9wb3J0LCBp
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgJmluY29taW5nTWVzc2FnZVBvcnQpICE9IEtFUk5fU1VD
Q0VTUykKKyAgICAgICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgcmVnaXN0ZXIgZm9yIGluY29taW5n
IHB1c2ggbGF1bmNoIHBvcnQuIik7CisgICAgICAgIAorICAgICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAgICAgfQogICAgIENGUnVuTG9vcFJ1bigpOwogICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1
c2hkLm1hYy5wbGlzdCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53
ZWJwdXNoZC5tYWMucGxpc3QKaW5kZXggYjI1YWJmZjVhOGU0YmRiOGYxOTJiOWYwNWU1ODQ3Mzk1
ZDM0MTU0ZC4uZjcxZTU5YTQwN2YzZTNhODkwODAwYWUzZjQxZTA4NTVlNTBhN2IyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1h
Yy5wbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2Vi
cHVzaGQubWFjLnBsaXN0CkBAIC0xOSw3ICsxOSw3IEBACiAJPHN0cmluZz5BZGFwdGl2ZTwvc3Ry
aW5nPgogCTxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PgogCTxhcnJheT4KLQkJPHN0cmluZz4v
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGFl
bW9ucy93ZWJwdXNoZDwvc3RyaW5nPgorCQk8c3RyaW5nPi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL1dlYktpdC5mcmFtZXdvcmsvRGFlbW9ucy93ZWJwdXNoZDwvc3RyaW5nPgogCQk8c3RyaW5n
Pi0tbWFjaFNlcnZpY2VOYW1lPC9zdHJpbmc+CiAJCTxzdHJpbmc+Y29tLmFwcGxlLndlYmtpdC53
ZWJwdXNoZC5zZXJ2aWNlPC9zdHJpbmc+CiAJPC9hcnJheT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJw
dXNoZC5jcHAKaW5kZXggNTljZWYwZDk4NDMwNTU2NWFlYWQxOGMyMTIyYWQzZGZmZTE1OTYyNC4u
ZmQwNGU0MDQ1ODU5OGVjODczOWFjMGYzZTlhOGI4ZjNmYmNhMWViOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC93ZWJwdXNoZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tN
YWluLmg+CiAjaW5jbHVkZSA8b3MvYXZhaWxhYmlsaXR5Lmg+CiAKLWludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKIHsK
ICAgICBXS1dlYlB1c2hEYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI1MTBjMzAxMjEyYWZkYWVjMGYx
ZmYwNzllYTA5MjIzZDZjZmI4MGYuLjY5OGI2YzgxOWJjY2Q4Y2ViZDc2MGRlMjQxMTk2NzVjNTg4
MWYwZDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAyMi0wMi0wNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODkyMzkuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYyNjQKKwor
ICAgICAgICBicm9rZSBidWlsZHMgb24gb2xkZXIgaW50ZXJuYWwgU0RLcworCisgICAgICAgIFJl
dmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiQWRkIFB1c2hTZXJ2aWNlIgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1ODU3CisgICAgICAgIGh0
dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3IyODkyMzkKKwogMjAyMi0wMi0wNyAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGJ1Z3NweV0gQXNz
aWduIGFuZCBjbG9zZSBpc3N1ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCBiN2IzNGI2Y2FhNTQ3YmUzMmEz
NzYyOGNjZjFhY2RlZWM2ZjVkNjU5Li42ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2Mjgw
M2NlODIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zNSwxOCArMzUsMTMgQEAKICNpbXBvcnQgPFdlYktp
dC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+Ci0j
aW1wb3J0IDxXZWJLaXQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBv
cnQgPG1hY2gvdGFzay5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+Ci0jaW1wb3J0IDx3dGYv
dGV4dC9CYXNlNjQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCi11
c2luZyBXZWJLaXQ6OldlYlB1c2hEOjpNZXNzYWdlVHlwZTsKLQogc3RhdGljIGJvb2wgYWxlcnRS
ZWNlaXZlZCA9IGZhbHNlOwogQGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdh
dGUgOiBOU09iamVjdDxXS1VJRGVsZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjYsMjYgKzYxLDYg
QEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVy
dFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW4KIAogQGVuZAogCi1AaW50ZXJmYWNlIE5vdGlmaWNh
dGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3Q8V0tTY3JpcHRNZXNzYWdlSGFuZGxl
cj4gewotICAgIEJsb2NrUHRyPHZvaWQoaWQpPiBfbWVzc2FnZUhhbmRsZXI7Ci19Ci1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcgotCi0tICh2
b2lkKXNldE1lc3NhZ2VIYW5kbGVyOih2b2lkICheKShpZCkpaGFuZGxlcgotewotICAgIF9tZXNz
YWdlSGFuZGxlciA9IGhhbmRsZXI7Ci19Ci0KLS0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVy
OihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNl
aXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQotewotICAgIGlmIChf
bWVzc2FnZUhhbmRsZXIpCi0gICAgICAgIF9tZXNzYWdlSGFuZGxlcihtZXNzYWdlLmJvZHkpOwot
fQotCi1AZW5kCi0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIFJldGFpblB0
cjxOU1VSTD4gdGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpCkBAIC0xMDQsOCArNzksNyBAQCBz
dGF0aWMgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqdGVzdFdlYlB1c2hEYWVtb25QTGlz
dChOU1VSTCAqc3RvcmFnZUxvY2F0aQogICAgICAgICBAIlByb2dyYW1Bcmd1bWVudHMiIDogQFsK
ICAgICAgICAgICAgIHRlc3RXZWJQdXNoRGFlbW9uTG9jYXRpb24oKS5nZXQoKS5wYXRoLAogICAg
ICAgICAgICAgQCItLW1hY2hTZXJ2aWNlTmFtZSIsCi0gICAgICAgICAgICBAIm9yZy53ZWJraXQu
d2VicHVzaHRlc3RkYWVtb24uc2VydmljZSIsCi0gICAgICAgICAgICBAIi0tdXNlTW9ja1B1c2hT
ZXJ2aWNlIgorICAgICAgICAgICAgQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZp
Y2UiCiAgICAgICAgIF0KICAgICB9OwogfQpAQCAtMTYxLDI0ICsxMzUsMjQgQEAgc3RhdGljIHZv
aWQgY2xlYW5VcFRlc3RXZWJQdXNoRChOU1VSTCAqdGVtcERpcikKICAgICBFWFBFQ1RfTlVMTChl
cnJvcik7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdl
RGljdGlvbmFyeShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBtZXNzYWdlKQorc3RhdGljIFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNyZWF0ZU1lc3NhZ2VE
aWN0aW9uYXJ5KHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVz
c2FnZSkKIHsKICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5TKHhwY19kaWN0aW9uYXJ5X2Ny
ZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2
NChkaWN0aW9uYXJ5LmdldCgpLCAicHJvdG9jb2wgdmVyc2lvbiIsIDEpOwotICAgIHhwY19kaWN0
aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihtZXNzYWdlVHlwZSkpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF91
aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIG1lc3NhZ2VUeXBlKTsKICAg
ICB4cGNfZGljdGlvbmFyeV9zZXRfZGF0YShkaWN0aW9uYXJ5LmdldCgpLCAiZW5jb2RlZCBtZXNz
YWdlIiwgbWVzc2FnZS5kYXRhKCksIG1lc3NhZ2Uuc2l6ZSgpKTsKICAgICByZXR1cm4gV1RGTW92
ZShkaWN0aW9uYXJ5KTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRo
ZSBkYWVtb24gZm9yIGEgb25lLW9mZiBtZXNzYWdlCi12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24o
eHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQordm9pZCBzZW5kTWVzc2FnZVRvRGFlbW9uKHhw
Y19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgdWludDhfdCBtZXNzYWdlVHlwZSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1l
c3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKICAgICB4cGNfY29ubmVjdGlv
bl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIC8vIFVz
ZXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGZvciBhIG9uZS1vZmYgbWVz
c2FnZSwgd2FpdGluZyBmb3IgdGhlIHJlcGx5Ci12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0
aW5nRm9yUmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNz
YWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQordm9pZCBzZW5kTWVzc2Fn
ZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgdWlu
dDhfdCBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAg
IGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBt
ZXNzYWdlKTsKIApAQCAtMjA3LDcgKzE4MSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRDb25maWd1cmF0
aW9uV2l0aEF1ZGl0VG9rZW4oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogICAgICAgICBl
bmNvZGVkTWVzc2FnZVsxXSA9IDE7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzJdID0gMzI7CiAg
ICAgICAgIG1lbWNweSgmZW5jb2RlZE1lc3NhZ2VbMTBdLCAmdG9rZW4sIHNpemVvZih0b2tlbikp
OwotICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlOjpV
cGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBz
ZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIDYsIGVuY29kZWRNZXNzYWdlKTsKICAgICB9
CiB9CiAKQEAgLTI3OCw3ICsyNTIsNyBAQCBURVNUKFdlYlB1c2hELCBCYXNpY0NvbW11bmljYXRp
b24pCiAgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3Jl
YXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29k
ZWRNZXNzYWdlKDEpOwogICAgICAgICBlbmNvZGVkTWVzc2FnZVswXSA9IDE7Ci0gICAgICAgIHNl
bmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldERlYnVn
TW9kZUlzRW5hYmxlZCwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5kTWVzc2FnZVRvRGFl
bW9uKGNvbm5lY3Rpb24uZ2V0KCksIDUsIGVuY29kZWRNZXNzYWdlKTsKICAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICB9CiAKQEAgLTM4Nyw2ICszNjEsNTQgQEAg
VEVTVChXZWJQdXNoRCwgUGVybWlzc2lvbk1hbmFnZW1lbnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQ
dXNoRCh0ZW1wRGlyZWN0b3J5KTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIG1haW5TV0J5dGVz
ID0gUiJTV1JFU09VUkNFKAorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpCit7CisgICAgd2lu
ZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuc3cucG9zdE1lc3NhZ2UobXNnKTsKK30KKworY29u
c3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworY2hhbm5lbC5wb3J0MS5vbm1lc3Nh
Z2UgPSAoZXZlbnQpID0+IGxvZyhldmVudC5kYXRhKTsKKworbmF2aWdhdG9yLnNlcnZpY2VXb3Jr
ZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oKHJlZ2lzdHJhdGlvbikgPT4geworICAgIGlmIChy
ZWdpc3RyYXRpb24uYWN0aXZlKSB7CisgICAgICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1l
c3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIHdvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nOworICAg
IHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAod29ya2VyLnN0YXRlID09ICdhY3RpdmF0ZWQnKQorICAgICAgICAgICAgd29ya2Vy
LnBvc3RNZXNzYWdlKHtwb3J0OiBjaGFubmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKKyAg
ICB9KTsKK30pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgbG9nKCJSZWdpc3RyYXRpb24g
ZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7Cit9KTsKKzwvc2NyaXB0PgorKVNXUkVTT1VSQ0UiOwor
CitzdGF0aWMgY29uc3QgY2hhciogc2NyaXB0Qnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCitsZXQgcG9y
dDsKK3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4geworICAgIHBv
cnQgPSBldmVudC5kYXRhLnBvcnQ7CisgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVhZHkiKTsKK30p
Oworc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7CisgICAgdHJ5IHsK
KyAgICAgICAgaWYgKCFldmVudC5kYXRhKSB7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdl
KCJSZWNlaXZlZDogbnVsbCBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKKyAgICAgICAgcG9ydC5w
b3N0TWVzc2FnZSgiUmVjZWl2ZWQ6ICIgKyB2YWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZSAhPSAn
U3dlZXQgUG90YXRvZXMnKQorICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKFByb21pc2UucmVq
ZWN0KCdJIHdhbnQgc3dlZXQgcG90YXRvZXMnKSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICBwb3J0LnBvc3RNZXNzYWdlKCJHb3QgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9Cit9KTsKKylT
V1JFU09VUkNFIjsKKwogc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0
ZURhdGFTdG9yZSAqc3RvcmUpCiB7CiAgICAgX19ibG9jayBib29sIGNsZWFyZWRTdG9yZSA9IGZh
bHNlOwpAQCAtMzk2LDMxNSArNDE4LDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyV2Vic2l0ZURhdGFT
dG9yZShXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmY2xlYXJlZFN0b3JlKTsKIH0KIAotY2xhc3MgV2ViUHVzaERUZXN0IDogcHVibGljIDo6
dGVzdGluZzo6VGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgV2ViUHVzaERUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2luc107Ci0KLSAgICAgICAgbV90ZW1wRGlyZWN0b3J5ID0gcmV0YWluUHRyKHNldFVwVGVz
dFdlYlB1c2hEKCkpOwotCi0gICAgICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10pOwotICAgICAgICBk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9y
Zy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSI7Ci0gICAgICAgIGRhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2NrQnVuZGxlc0ZvclRlc3Rpbmcg
PSBZRVM7Ci0gICAgICAgIG1fZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7Ci0KLSAgICAgICAgbV9jb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgbV9jb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgPSBtX2RhdGFTdG9yZS5nZXQoKTsKLSAgICAgICAgY2xlYXJXZWJz
aXRlRGF0YVN0b3JlKFttX2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwotCi0gICAg
ICAgIFttX2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNF
bmFibGVkOllFU107Ci0gICAgICAgIGZvciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVy
ZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVyZXNdKSB7Ci0gICAgICAgICAg
ICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25z
RW5hYmxlZCJdKQotICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2Vz
XSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJQdXNoQVBJRW5hYmxlZCJdKQotICAg
ICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZ
RVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fdGVzdE1lc3Nh
Z2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwot
ICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0Il07
CitURVNUKFdlYlB1c2hELCBIYW5kbGVJbmplY3RlZFB1c2gpCit7CisgICAgW1dLV2Vic2l0ZURh
dGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKIAotICAgICAg
ICBtX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW05vdGlmaWNhdGlvblNj
cmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtbbV9jb25maWd1cmF0
aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bV9ub3Rp
ZmljYXRpb25NZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAibm90ZSJdOwotICAgIH0KKyAgICBO
U1VSTCAqdGVtcERpcmVjdG9yeSA9IHNldFVwVGVzdFdlYlB1c2hEKCk7CiAKLSAgICB2b2lkIGxv
YWRSZXF1ZXN0KGNvbnN0IGNoYXIqIGh0bWxTb3VyY2UsIGNvbnN0IGNoYXIqIHNlcnZpY2VXb3Jr
ZXJTY3JpcHRTb3VyY2UpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Rh
bnRzID0gUiJTUkMoCi0gICAgICAgICAgICBjb25zdCBWQUxJRF9TRVJWRVJfS0VZID0gIkJBMUh4
enlpMVJVTTFiNXdqeHNuN25HeEFzencydTYxbTE2NGkzTXJBSXhIRjZZSzVoNFNEWWljLWRSdVVf
UkNQQ2ZBNWFxOW9qU3drNVkyRW1DbEJQcyI7Ci0gICAgICAgICAgICBjb25zdCBWQUxJRF9TRVJW
RVJfS0VZX1RIQVRfQ0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUgPSAiQkVBeGFVTW8xczh0ak9SeEpm
blNTdldoWWI0dTUxa2cxaFdUMnNfOWdwVjdaeGFyMXBGXzJCUThBbmN1QWRTMkJvTGhONHFheHpC
eTJDd0hFOEJCeldnIjsKLSAgICAgICAgKVNSQyI7Ci0gICAgICAgIG1fc2VydmVyLnJlc2V0KG5l
dyBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyKHsKLSAgICAgICAgICAgIHsgIi8iLCB7IGh0bWxT
b3VyY2UgfSB9LAotICAgICAgICAgICAgeyAiL2NvbnN0YW50cy5qcyIsIHsgeyB7ICJDb250ZW50
LVR5cGUiLCAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBjb25zdGFudHMgfSB9LAotICAg
ICAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiB9IH0sIHNlcnZpY2VXb3JrZXJTY3JpcHRTb3VyY2UgfSB9Ci0gICAgICAgIH0s
IFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKSk7Ci0KLSAgICAgICAg
bV93ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm1fY29uZmlndXJhdGlvbi5nZXQo
KV0pOwotICAgICAgICBbbV93ZWJWaWV3IGxvYWRSZXF1ZXN0Om1fc2VydmVyLT5yZXF1ZXN0KCld
OwotICAgIH0KKyAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBkYXRhU3RvcmVDb25maWd1
cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVz
aHRlc3RkYWVtb24uc2VydmljZSI7CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53
ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVzdGluZyA9IFlFUzsKKyAgICBhdXRvIGRh
dGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCi0gICAgfldlYlB1
c2hEVGVzdCgpCi0gICAgewotICAgICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKG1fdGVtcERpcmVj
dG9yeS5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOworICAgIGNsZWFyV2Vic2l0
ZURhdGFTdG9yZShbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSk7CiAKLSAgICBSZXRh
aW5QdHI8TlNVUkw+IG1fdGVtcERpcmVjdG9yeTsKLSAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0
YVN0b3JlPiBtX2RhdGFTdG9yZTsKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlv
bj4gbV9jb25maWd1cmF0aW9uOwotICAgIFJldGFpblB0cjxUZXN0TWVzc2FnZUhhbmRsZXI+IG1f
dGVzdE1lc3NhZ2VIYW5kbGVyOwotICAgIFJldGFpblB0cjxOb3RpZmljYXRpb25TY3JpcHRNZXNz
YWdlSGFuZGxlcj4gbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcj4gbV9zZXJ2ZXI7Ci0gICAgUmV0YWluUHRy
PFdLV2ViVmlldz4gbV93ZWJWaWV3OwotfTsKLQotY2xhc3MgV2ViUHVzaERJbmplY3RlZFB1c2hU
ZXN0IDogcHVibGljIFdlYlB1c2hEVGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBydW5UZXN0
KE5TU3RyaW5nICpleHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZvKTsK
LX07Ci0KLXZvaWQgV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0OjpydW5UZXN0KE5TU3RyaW5nICpl
eHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZvKQotewotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBodG1sU291cmNlID0gUiJTV1JFU09VUkNFKAotICAgIDxzY3JpcHQgc3Jj
PSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0PgotICAgIGZ1bmN0aW9uIGxv
Zyhtc2cpCi0gICAgewotICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0
LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMg
X3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107CisgICAgZm9yIChfV0tFeHBlcmltZW50YWxG
ZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10p
IHsKKyAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90
aWZpY2F0aW9uc0VuYWJsZWQiXSkKKyAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJl
bmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CiAgICAgfQogCi0gICAg
Y29uc3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotICAgIGNoYW5uZWwucG9ydDEu
b25tZXNzYWdlID0gKGV2ZW50KSA9PiBsb2coZXZlbnQuZGF0YSk7Ci0KLSAgICBuYXZpZ2F0b3Iu
c2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7Ci0gICAg
ICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJl
YWR5OwotICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hN
YW5hZ2VyLnN1YnNjcmliZSh7Ci0gICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCi0g
ICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQotICAgICAg
ICB9KTsKLSAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hh
bm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7Ci0gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJy
b3IpIHsKLSAgICAgICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7
Ci0gICAgfSk7Ci0gICAgPC9zY3JpcHQ+Ci0gICAgKVNXUkVTT1VSQ0UiOwotCi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHNlcnZpY2VXb3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VSQ0UoCi0gICAgbGV0
IHBvcnQ7Ci0gICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7
Ci0gICAgICAgIHBvcnQgPSBldmVudC5kYXRhLnBvcnQ7Ci0gICAgICAgIHBvcnQucG9zdE1lc3Nh
Z2UoIlJlYWR5Iik7Ci0gICAgfSk7Ci0gICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwg
KGV2ZW50KSA9PiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEp
IHsKLSAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVsbCBkYXRh
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKLSAgICAgICAgICAgIHBvcnQucG9zdE1l
c3NhZ2UoIlJlY2VpdmVkOiAiICsgdmFsdWUpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJFcnJvcjogIiArIGUpOwotICAgICAgICB9Ci0gICAg
fSk7Ci0gICAgKVNXUkVTT1VSQ0UiOwotCi0gICAgX19ibG9jayBib29sIHJlYWR5ID0gZmFsc2U7
Ci0gICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRs
ZXI6XnsKLSAgICAgICAgcmVhZHkgPSB0cnVlOworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbVGVzdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVz
c2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07CisgICAgX19ibG9jayBib29sIGRvbmUgPSBm
YWxzZTsKKyAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJlYWR5IiB3aXRoSGFuZGxl
cjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKLQotICAgIF9fYmxvY2sgYm9vbCBn
b3RFeHBlY3RlZE1lc3NhZ2UgPSBmYWxzZTsKLSAgICBbbV90ZXN0TWVzc2FnZUhhbmRsZXIgYWRk
TWVzc2FnZTpleHBlY3RlZE1lc3NhZ2Ugd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZ290RXhwZWN0
ZWRNZXNzYWdlID0gdHJ1ZTsKKyAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJlY2Vp
dmVkOiBIZWxsbyBXb3JsZCIgd2l0aEhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CiAg
ICAgfV07CiAKLSAgICBsb2FkUmVxdWVzdChodG1sU291cmNlLCBzZXJ2aWNlV29ya2VyU291cmNl
KTsKKyAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7CisgICAgICAgIHsgIi8i
LCB7IG1haW5TV0J5dGVzIH0gfSwKKyAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQt
VHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNjcmlwdEJ5dGVzIH0gfQorICAg
IH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKTsKIAotICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHkpOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CiAKLSAgICBTdHJpbmcgYnVuZGxlSWRlbnRp
ZmllciA9ICJjb20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiX3M7Ci0gICAgU3RyaW5nIHNj
b3BlID0gbV9zZXJ2ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVTdHJpbmc7Ci0gICAgU3RyaW5n
IHRvcGljID0gYnVuZGxlSWRlbnRpZmllciArICIgIl9zICsgc2NvcGU7Ci0KLSAgICBpZCBvYmog
PSBAewotICAgICAgICBAInRvcGljIjogKE5TU3RyaW5nICopdG9waWMsCi0gICAgICAgIEAidXNl
ckluZm8iOiBwdXNoVXNlckluZm8KLSAgICB9OwotICAgIE5TRGF0YSAqZGF0YSA9IFtOU0pTT05T
ZXJpYWxpemF0aW9uIGRhdGFXaXRoSlNPTk9iamVjdDpvYmogb3B0aW9uczowIGVycm9yOm51bGxw
dHJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgZG9uZSA9IGZh
bHNlOwogCi0gICAgU3RyaW5nIG1lc3NhZ2UgeyBzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+KGRh
dGEuYnl0ZXMpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGF0YS5sZW5ndGgpIH07Ci0gICAgYXV0
byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZyhXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICAv
LyBJbmplY3QgcHVzaCBtZXNzYWdlCisgICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0
cmluZygiY29tLmFwcGxlLldlYktpdC5UZXN0V2ViS2l0QVBJIik7CisgICAgZW5jb2RlZE1lc3Nh
Z2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgpLlVSTC5hYnNvbHV0
ZVN0cmluZykpOworICAgIGVuY29kZWRNZXNzYWdlLmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmco
IkhlbGxvIFdvcmxkIikpOwogCiAgICAgYXV0byB1dGlsaXR5Q29ubmVjdGlvbiA9IGNyZWF0ZUFu
ZENvbmZpZ3VyZUNvbm5lY3Rpb25Ub1NlcnZpY2UoIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVt
b24uc2VydmljZSIpOwotICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRp
bGl0eUNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVz
c2FnZUZvclRlc3RpbmcsIGVuY29kZWRNZXNzYWdlKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9u
V2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0aW9uLmdldCgpLCA3LCBlbmNvZGVkTWVzc2Fn
ZSk7CiAKICAgICAvLyBGZXRjaCBwdXNoIG1lc3NhZ2VzCi0gICAgX19ibG9jayBib29sIGdvdE1l
c3NhZ2VzID0gZmFsc2U7CiAgICAgX19ibG9jayBSZXRhaW5QdHI8TlNBcnJheTxOU0RpY3Rpb25h
cnkgKj4+IG1lc3NhZ2VzOwotICAgIFttX2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdl
czpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgeworICAgIFtkYXRhU3Rv
cmUgX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqcmF3
TWVzc2FnZXMpIHsKICAgICAgICAgbWVzc2FnZXMgPSByYXdNZXNzYWdlczsKLSAgICAgICAgZ290
TWVzc2FnZXMgPSB0cnVlOworICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2VzKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworICAgIGRvbmUgPSBmYWxzZTsKIAogICAgIEVYUEVDVF9FUShbbWVz
c2FnZXMgY291bnRdLCAxdSk7CiAKICAgICAvLyBIYW5kbGUgcHVzaCBtZXNzYWdlCiAgICAgX19i
bG9jayBib29sIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7Ci0gICAgW21fZGF0YVN0b3Jl
IF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFu
ZGxlcjpeKGJvb2wgcmVzdWx0KSB7CisgICAgW2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNzYWdl
OlttZXNzYWdlcyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkg
ewogICAgICAgICBwdXNoTWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7CiAgICAgfV07Ci0gICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RFeHBlY3RlZE1lc3NhZ2UpOwotICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcHVzaE1lc3NhZ2VQcm9jZXNzZWQpOwotfQotCi1URVNUX0YoV2Vi
UHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEVtcHR5UHVzaCkKLXsKLSAgICBy
dW5UZXN0KEAiUmVjZWl2ZWQ6IG51bGwgZGF0YSIsIEB7IH0pOwotfQotCi1URVNUX0YoV2ViUHVz
aERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFU0dDTVB1c2gpCi17Ci0gICAgcnVu
VGVzdChAIlJlY2VpdmVkOiB0ZXN0IGFlc2djbSBwYXlsb2FkIiwgQHsKLSAgICAgICAgQCJjb250
ZW50X2VuY29kaW5nIjogQCJhZXNnY20iLAotICAgICAgICBAImFzX3B1YmxpY2tleSI6IEAiQkMt
QWdZTWhxbXphbUg3X0F1bTBZdklkOEZWMS11bWdId2VKTmU2WFExSU1BbTNFMjlsb1dYcVRSbmRp
YnhIMjdrSktXY0lieXltdW5kT0RNZlZ4X1VNIiwKLSAgICAgICAgQCJhc19zYWx0IjogQCJ0a1BU
NXhEZU4wbEFrU2M2bFpVa05nIiwKLSAgICAgICAgQCJwYXlsb2FkIjogQCJvL3U0eXZjWEkxbmFw
K3p5SU9CYldYZExxajFxSEcyY1grS1ZoQWRCUWoxR1ZBdDdsUT09IgotICAgIH0pOwotfQotCi1U
RVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFUzEyOEdDTVB1
c2gpCi17Ci0gICAgLy8gRnJvbSBleGFtcGxlIGluIFJGQzgyOTEgU2VjdGlvbiA1LgotICAgIFN0
cmluZyBwYXlsb2FkQmFzZTY0VVJMID0gIkRHdjZyYTFubFlnRENTMUZSbmJ6bHdBQUVBQkJCUDR6
OUtzTjZuR1JUYlZZSV9jN1ZKU1BRVEJ0a2djeTI3bWxtbE1vWklJZ0RsbDZlM3ZDWUxvY0lubVlX
QW1TNlRsekFDOHdFcUtLNlBCcnUzamw3QV95bDk1YlFwdTZjVlBUcEs0TXFna2YxQ1h6dExWQlN0
MktzM29ad2J1d1hQWExXeW91QldMVldHTldRZXhTZ1N4c2pfUXVsY3k0YS1mTiJfczsKLSAgICBT
dHJpbmcgcGF5bG9hZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJhc2U2NFVSTERlY29k
ZShwYXlsb2FkQmFzZTY0VVJMKS52YWx1ZSgpKTsKLQotICAgIHJ1blRlc3QoQCJSZWNlaXZlZDog
V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24iLCBAewotICAgICAgICBA
ImNvbnRlbnRfZW5jb2RpbmciOiBAImFlczEyOGdjbSIsCi0gICAgICAgIEAicGF5bG9hZCI6IChO
U1N0cmluZyAqKXBheWxvYWRCYXNlNjQKLSAgICB9KTsKLX0KLQotVEVTVF9GKFdlYlB1c2hEVGVz
dCwgU3Vic2NyaWJlVGVzdCkKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc291cmNlID0gUiJI
VE1MKAotICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0PgotICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50aGVu
KGFzeW5jICgpID0+IHsKLSAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdh
dG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7Ci0gICAgICAgIGxldCByZXN1bHQgPSBudWxsOwotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJh
dGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoewotICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxl
T25seTogdHJ1ZSwKLSAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURf
U0VSVkVSX0tFWQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBzdWJzY3Jp
cHRpb24udG9KU09OKCk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9ICJFcnJvcjogIiArIGU7Ci0gICAgICAgIH0KLSAgICAgICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1bHQpOwotICAgIH0pOwotICAgIDwvc2Ny
aXB0PgotICAgIClIVE1MIjsKLQotICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7
Ci0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbbV9ub3RpZmljYXRpb25NZXNz
YWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKLSAgICAgICAgb2Jq
ID0gbWVzc2FnZTsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBsb2FkUmVx
dWVzdChzb3VyY2UsICIiKTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwot
Ci0gICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3Nd
XSk7Ci0KLSAgICBOU0RpY3Rpb25hcnkgKnN1YnNjcmlwdGlvbiA9IG9iai5nZXQoKTsKLSAgICBB
U1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0AiZW5kcG9pbnQiXSBoYXNQcmVmaXg6QCJodHRwczov
LyJdKTsKLSAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdIGlzS2luZE9mQ2xh
c3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKLQotICAgIC8vIFNoYXJlZCBhdXRoIHNlY3JldCBz
aG91bGQgYmUgMTYgYnl0ZXMgKDIyIGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCi0gICAg
QVNTRVJUX0VRKFtzdWJzY3JpcHRpb25bQCJrZXlzIl1bQCJhdXRoIl0gbGVuZ3RoXSwgMjJ1KTsK
LQotICAgIC8vIENsaWVudCBwdWJsaWMga2V5IHNob3VsZCBiZSA2NSBieXRlcyAoODcgYnl0ZXMg
aW4gdW5wYWRkZWQgYmFzZTY0dXJsKS4KLSAgICBBU1NFUlRfRVEoW3N1YnNjcmlwdGlvbltAImtl
eXMiXVtAInAyNTZkaCJdIGxlbmd0aF0sIDg3dSk7Ci19Ci0KLVRFU1RfRihXZWJQdXNoRFRlc3Qs
IFN1YnNjcmliZUZhaWx1cmVUZXN0KQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2Ug
PSBSIkhUTUwoCi0gICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQ+Ci0gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycp
LnRoZW4oYXN5bmMgKCkgPT4gewotICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBu
YXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVn
aXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7Ci0gICAgICAgICAgICAgICAgdXNlclZp
c2libGVPbmx5OiB0cnVlLAotICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBW
QUxJRF9TRVJWRVJfS0VZX1RIQVRfQ0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOwotICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOwotICAg
ICAgICB9Ci0gICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1l
c3NhZ2UocmVzdWx0KTsKLSAgICB9KTsKLSAgICA8L3NjcmlwdD4KLSAgICApSFRNTCI7Ci0KLSAg
ICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOwotICAgIF9fYmxvY2sgYm9vbCBkb25l
ID0gZmFsc2U7Ci0gICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhh
bmRsZXI6XihpZCBtZXNzYWdlKSB7Ci0gICAgICAgIG9iaiA9IG1lc3NhZ2U7Ci0gICAgICAgIGRv
bmUgPSB0cnVlOwotICAgIH1dOwotCi0gICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKLQotICAgIC8vIFNwZWMgc2F5cyB0aGF0
IGFuIGVycm9yIGluIHRoZSBwdXNoIHNlcnZpY2Ugc2hvdWxkIGJlIGFuIEFib3J0RXJyb3IuCi0g
ICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKLSAg
ICBBU1NFUlRfVFJVRShbb2JqIGhhc1ByZWZpeDpAIkVycm9yOiBBYm9ydEVycm9yIl0pOwotfQot
Ci1URVNUX0YoV2ViUHVzaERUZXN0LCBVbnN1YnNjcmliZVRlc3QpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKLSAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdD4KLSAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5y
ZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7Ci0gICAgICAgIGNvbnN0IHJlZ2lz
dHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OwotICAgICAgICBs
ZXQgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxldCBzdWJzY3Jp
cHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKLSAgICAg
ICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCi0gICAgICAgICAgICAgICAgYXBwbGlj
YXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgbGV0IHJlc3VsdDEgPSBhd2FpdCBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKLSAg
ICAgICAgICAgIGxldCByZXN1bHQyID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7
Ci0gICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0MSwgcmVzdWx0Ml07Ci0gICAgICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7Ci0gICAgICAgIH0K
LSAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShy
ZXN1bHQpOwotICAgIH0pOwotICAgIDwvc2NyaXB0PgotICAgIClIVE1MIjsKLQotICAgIF9fYmxv
Y2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7Ci0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxz
ZTsKLSAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpe
KGlkIG1lc3NhZ2UpIHsKLSAgICAgICAgb2JqID0gbWVzc2FnZTsKLSAgICAgICAgZG9uZSA9IHRy
dWU7Ci0gICAgfV07Ci0KLSAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cHVzaE1lc3NhZ2VQcm9jZXNzZWQpOwogCi0gICAgLy8gRmlyc3QgdW5zdWJzY3JpYmUgc2hvdWxk
IHN1Y2NlZWQuIFNlY29uZCBvbmUgc2hvdWxkIGZhaWwgc2luY2UgdGhlIGZpcnN0IG9uZSByZW1v
dmVkIHRoZSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UuCi0gICAgaWQgZXhwZWN0ZWQgPSBAW0Ao
MSksIEAoMCldOwotICAgIEFTU0VSVF9UUlVFKFtvYmogaXNFcXVhbDpleHBlY3RlZF0pOworICAg
IGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>