<?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>33135</bug_id>
          
          <creation_ts>2010-01-04 00:40:03 -0800</creation_ts>
          <short_desc>[bzt] Move steps to a submodule</short_desc>
          <delta_ts>2010-01-04 01:05:06 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>176561</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 00:40:03 -0800</bug_when>
    <thetext>[bzt] Move steps to a submodule</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176562</commentid>
    <comment_count>1</comment_count>
      <attachid>45773</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 00:40:58 -0800</bug_when>
    <thetext>Created attachment 45773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176564</commentid>
    <comment_count>2</comment_count>
      <attachid>45774</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 00:43:31 -0800</bug_when>
    <thetext>Created attachment 45774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176569</commentid>
    <comment_count>3</comment_count>
      <attachid>45774</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-04 00:45:38 -0800</bug_when>
    <thetext>Comment on attachment 45774
Patch

I&apos;m not sure the massive list of:
 29 from webkitpy.steps.applypatch import ApplyPatch
imports in __init__ is the right way to do this.  You should consider adding a FIXME there asking exactly that question.  But it seems to work...

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176571</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 00:47:51 -0800</bug_when>
    <thetext>Fixenated r52714</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176578</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-04 01:05:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Fixenated r52714

Looks like you need to update the path in test-webkit-scripts to test-webkitpy.

I will see if I can make that change here by updating my patch:

https://bugs.webkit.org/show_bug.cgi?id=33124</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45773</attachid>
            <date>2010-01-04 00:40:58 -0800</date>
            <delta_ts>2010-01-04 00:43:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33135-20100104004057.patch</filename>
            <type>text/plain</type>
            <size>120444</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiMTk1MGE0Li44MWJiMmNjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTAtMDEt
MDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbYnp0XSBNb3ZlIHN0ZXBzIHRvIGEgc3VibW9k
dWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzEz
NQorCisgICAgICAgIEZvciBncmVhdCB2aWN0b3J5LiAgVGhpcyB3aWxsIHByb2JhYmx5IGludHJv
ZHVjZSBzb21lIHJlZ3Jlc3Npb25zCisgICAgICAgIGJlY2F1c2Ugb3VyIHRlc3QgY292ZXJhZ2Ug
aXNuJ3QgcGVyZmVjdCwgYnV0IEkndmUgdHJpZWQgdG8gYmUgY2FyZWZ1bC4KKworICAgICAgICAq
IFNjcmlwdHMvdGVzdC13ZWJraXRweToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2J1aWxk
c3RlcHMucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxv
YWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvYXBwbHlwYXRjaC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNod2l0aGxvY2FsY29tbWl0LnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2J1aWxkLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NoZWNrc3R5bGUucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xlYW53b3JraW5nZGlyZWN0b3J5
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NsZWFud29ya2lu
Z2RpcmVjdG9yeXdpdGhsb2NhbGNvbW1pdHMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3RlcHMvY2xvc2VidWcucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3RlcHMvY2xvc2VidWdmb3JsYW5kZGlmZi5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9jbG9zZXBhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0ZXBzL2NvbW1pdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9jb21wbGV0ZXJvbGxvdXQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvY29uZmlybWRpZmYucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvY3JlYXRlYnVnLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzL2VkaXRjaGFuZ2Vsb2cucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlYnVpbGRlcnNhcmVncmVlbi5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lbnN1cmVsb2NhbGNvbW1pdGlmbmVlZGVkLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL21ldGFzdGVwLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9vcHRpb25zLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3Bvc3RkaWZmLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3ByZXBhcmVjaGFuZ2Vsb2cucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvcHJlcGFyZWNoYW5nZWxv
Z2ZvcnJldmVydC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9w
cm9tcHRmb3JidWdvcnRpdGxlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL3J1bnRlc3RzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL3VwZGF0ZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld191bml0dGVzdHMucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHk6
CisKIDIwMTAtMDEtMDQgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy90ZXN0LXdlYmtpdHB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5Cmlu
ZGV4IGU5MTljODEuLmQzZjUxMWIgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVz
dC13ZWJraXRweQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKQEAgLTMy
LDcgKzMyLDYgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuYnVnemlsbGFfdW5p
dHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuYnVpbGRib3RfdW5pdHRlc3QgaW1wb3J0ICoK
LWZyb20gd2Via2l0cHkuYnVpbGRzdGVwc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRw
eS5jaGFuZ2Vsb2dzX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmRv
d25sb2FkX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmVhcmx5X3dh
cm5pbmdfc3lzdGVtX3VuaXR0ZXN0IGltcG9ydCAqCkBAIC00Niw2ICs0NSw4IEBAIGZyb20gd2Vi
a2l0cHkuZGlmZl9wYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuZXhlY3V0
aXZlX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5Lm11bHRpY29tbWFuZHRvb2xfdW5p
dHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkucXVldWVlbmdpbmVfdW5pdHRlc3QgaW1wb3J0
ICoKK2Zyb20gd2Via2l0cHkuc3RlcHMuc3RlcHNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Vi
a2l0cHkuc3RlcHMudXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdfdW5pdHRlc3RzIGltcG9ydCAq
CiBmcm9tIHdlYmtpdHB5LnN0eWxlX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LnRl
eHRfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmdf
dW5pdHRlc3QgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYnVpbGRzdGVwcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRzdGVw
cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkODUwZS4uMDAwMDAwMAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkc3RlcHMucHkKKysrIC9kZXYvbnVs
bApAQCAtMSw1NTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1w
b3J0IFN0cmluZ0lPCi0KLWZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCi0KLWZyb20g
d2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKLWZy
b20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5n
cmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1w
b3J0IGxvZywgZXJyb3IKLWZyb20gd2Via2l0cHkud2Via2l0cG9ydCBpbXBvcnQgV2ViS2l0UG9y
dAotZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKLQotIyBGSVhNRTog
V2h5IGRvIHNvbWUgb2YgdGhlc2UgaGF2ZSAiU3RlcCIgaW4gdGhlaXIgbmFtZSBidXQgbm90IGFs
bD8KLV9fYWxsX18gPSBbCi0gICAgIkFwcGx5UGF0Y2hTdGVwIiwKLSAgICAiQXBwbHlQYXRjaFdp
dGhMb2NhbENvbW1pdFN0ZXAiLAotICAgICJCdWlsZFN0ZXAiLAotICAgICJDaGVja1N0eWxlU3Rl
cCIsCi0gICAgIkNsZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAiLAotICAgICJDbGVhbldvcmtpbmdE
aXJlY3RvcnlXaXRoTG9jYWxDb21taXRzU3RlcCIsCi0gICAgIkNsb3NlQnVnRm9yTGFuZERpZmZT
dGVwIiwKLSAgICAiQ2xvc2VCdWdTdGVwIiwKLSAgICAiQ2xvc2VQYXRjaFN0ZXAiLAotICAgICJD
b21taXRTdGVwIiwKLSAgICAiQ29tcGxldGVSb2xsb3V0IiwKLSAgICAiQ3JlYXRlQnVnU3RlcCIs
Ci0gICAgIkVuc3VyZUJ1aWxkZXJzQXJlR3JlZW5TdGVwIiwKLSAgICAiRW5zdXJlTG9jYWxDb21t
aXRJZk5lZWRlZCIsCi0gICAgIk9ic29sZXRlUGF0Y2hlc09uQnVnU3RlcCIsCi0gICAgIlBvc3RE
aWZmVG9CdWdTdGVwIiwKLSAgICAiUHJlcGFyZUNoYW5nZUxvZ0ZvclJldmVydFN0ZXAiLAotICAg
ICJQcmVwYXJlQ2hhbmdlTG9nU3RlcCIsCi0gICAgIlByb21wdEZvckJ1Z09yVGl0bGVTdGVwIiwK
LSAgICAiUmV2ZXJ0UmV2aXNpb25TdGVwIiwKLSAgICAiUnVuVGVzdHNTdGVwIiwKLSAgICAiVXBk
YXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0ZXAiLAotICAgICJVcGRhdGVTdGVwIiwKLV0KLQot
Y2xhc3MgQ29tbWFuZE9wdGlvbnMob2JqZWN0KToKLSAgICBmb3JjZV9jbGVhbiA9IG1ha2Vfb3B0
aW9uKCItLWZvcmNlLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZm9yY2VfY2xl
YW4iLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJDbGVhbiB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUg
YXBwbHlpbmcgcGF0Y2hlcyAocmVtb3ZlcyBsb2NhbCBjaGFuZ2VzIGFuZCBjb21taXRzKSIpCi0g
ICAgY2xlYW4gPSBtYWtlX29wdGlvbigiLS1uby1jbGVhbiIsIGFjdGlvbj0ic3RvcmVfZmFsc2Ui
LCBkZXN0PSJjbGVhbiIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG9uJ3QgY2hlY2sgaWYgdGhlIHdv
cmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuIGJlZm9yZSBhcHBseWluZyBwYXRjaGVzIikKLSAgICBj
aGVja19idWlsZGVycyA9IG1ha2Vfb3B0aW9uKCItLWlnbm9yZS1idWlsZGVycyIsIGFjdGlvbj0i
c3RvcmVfZmFsc2UiLCBkZXN0PSJjaGVja19idWlsZGVycyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0i
RG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZC53ZWJraXQub3JnIGJ1aWxkZXJzIGFyZSBn
cmVlbiBiZWZvcmUgbGFuZGluZy4iKQotICAgIHF1aWV0ID0gbWFrZV9vcHRpb24oIi0tcXVpZXQi
LCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJxdWlldCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
IlByb2R1Y2UgbGVzcyBjb25zb2xlIG91dHB1dC4iKQotICAgIG5vbl9pbnRlcmFjdGl2ZSA9IG1h
a2Vfb3B0aW9uKCItLW5vbi1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9
Im5vbl9pbnRlcmFjdGl2ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik5ldmVyIHByb21wdCB0aGUg
dXNlciwgZmFpbCBhcyBmYXN0IGFzIHBvc3NpYmxlLiIpCi0gICAgcGFyZW50X2NvbW1hbmQgPSBt
YWtlX29wdGlvbigiLS1wYXJlbnQtY29tbWFuZCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwYXJl
bnRfY29tbWFuZCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iKEludGVybmFsKSBUaGUgY29tbWFuZCB0
aGF0IHNwYXduZWQgdGhpcyBpbnN0YW5jZS4iKQotICAgIHVwZGF0ZSA9IG1ha2Vfb3B0aW9uKCIt
LW5vLXVwZGF0ZSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ1cGRhdGUiLCBkZWZhdWx0
PVRydWUsIGhlbHA9IkRvbid0IHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuIikKLSAgICBs
b2NhbF9jb21taXQgPSBtYWtlX29wdGlvbigiLS1sb2NhbC1jb21taXQiLCBhY3Rpb249InN0b3Jl
X3RydWUiLCBkZXN0PSJsb2NhbF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJNYWtlIGEg
bG9jYWwgY29tbWl0IGZvciBlYWNoIGFwcGxpZWQgcGF0Y2giKQotICAgIGJ1aWxkID0gbWFrZV9v
cHRpb24oIi0tbm8tYnVpbGQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iYnVpbGQiLCBk
ZWZhdWx0PVRydWUsIGhlbHA9IkNvbW1pdCB3aXRob3V0IGJ1aWxkaW5nIGZpcnN0LCBpbXBsaWVz
IC0tbm8tdGVzdC4iKQotICAgIGJ1aWxkX3N0eWxlID0gbWFrZV9vcHRpb24oIi0tYnVpbGQtc3R5
bGUiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0iYnVpbGRfc3R5bGUiLCBkZWZhdWx0PU5vbmUsIGhl
bHA9IldoZXRoZXIgdG8gYnVpbGQgZGVidWcsIHJlbGVhc2UsIG9yIGJvdGguIikKLSAgICB0ZXN0
ID0gbWFrZV9vcHRpb24oIi0tbm8tdGVzdCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ0
ZXN0IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91dCBydW5uaW5nIHJ1bi13ZWJr
aXQtdGVzdHMuIikKLSAgICBjbG9zZV9idWcgPSBtYWtlX29wdGlvbigiLS1uby1jbG9zZSIsIGFj
dGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJjbG9zZV9idWciLCBkZWZhdWx0PVRydWUsIGhlbHA9
IkxlYXZlIGJ1ZyBvcGVuIGFmdGVyIGxhbmRpbmcuIikKLSAgICBwb3J0ID0gbWFrZV9vcHRpb24o
Ii0tcG9ydCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwb3J0IiwgZGVmYXVsdD1Ob25lLCBoZWxw
PSJTcGVjaWZ5IGEgcG9ydCAoZS5nLiwgbWFjLCBxdCwgZ3RrLCAuLi4pLiIpCi0gICAgcmV2aWV3
ZXIgPSBtYWtlX29wdGlvbigiLXIiLCAiLS1yZXZpZXdlciIsIGFjdGlvbj0ic3RvcmUiLCB0eXBl
PSJzdHJpbmciLCBkZXN0PSJyZXZpZXdlciIsIGhlbHA9IlVwZGF0ZSBDaGFuZ2VMb2dzIHRvIHNh
eSBSZXZpZXdlZCBieSBSRVZJRVdFUi4iKQotICAgIGNvbXBsZXRlX3JvbGxvdXQgPSBtYWtlX29w
dGlvbigiLS1jb21wbGV0ZS1yb2xsb3V0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iY29t
cGxldGVfcm9sbG91dCIsIGhlbHA9IkNvbW1pdCB0aGUgcmV2ZXJ0IGFuZCByZS1vcGVuIHRoZSBv
cmlnaW5hbCBidWcuIikKLSAgICBvYnNvbGV0ZV9wYXRjaGVzID0gbWFrZV9vcHRpb24oIi0tbm8t
b2Jzb2xldGUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0ib2Jzb2xldGVfcGF0Y2hlcyIs
IGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IG9ic29sZXRlIG9sZCBwYXRjaGVzIGJlZm9yZSBw
b3N0aW5nIHRoaXMgb25lLiIpCi0gICAgcmV2aWV3ID0gbWFrZV9vcHRpb24oIi0tbm8tcmV2aWV3
IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InJldmlldyIsIGRlZmF1bHQ9VHJ1ZSwgaGVs
cD0iRG8gbm90IG1hcmsgdGhlIHBhdGNoIGZvciByZXZpZXcuIikKLSAgICByZXF1ZXN0X2NvbW1p
dCA9IG1ha2Vfb3B0aW9uKCItLXJlcXVlc3QtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVzdD0icmVxdWVzdF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJNYXJrIHRoZSBwYXRj
aCBhcyBuZWVkaW5nIGF1dG8tY29tbWl0IGFmdGVyIHJldmlldy4iKQotICAgIGRlc2NyaXB0aW9u
ID0gbWFrZV9vcHRpb24oIi1tIiwgIi0tZGVzY3JpcHRpb24iLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT0ic3RyaW5nIiwgZGVzdD0iZGVzY3JpcHRpb24iLCBoZWxwPSJEZXNjcmlwdGlvbiBzdHJpbmcg
Zm9yIHRoZSBhdHRhY2htZW50IChkZWZhdWx0OiBcInBhdGNoXCIpIikKLSAgICBjYyA9IG1ha2Vf
b3B0aW9uKCItLWNjIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImNjIiwg
aGVscD0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIGNhcmJvbi1j
b3B5LiIpCi0gICAgY29tcG9uZW50ID0gbWFrZV9vcHRpb24oIi0tY29tcG9uZW50IiwgYWN0aW9u
PSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImNvbXBvbmVudCIsIGhlbHA9IkNvbXBvbmVu
dCBmb3IgdGhlIG5ldyBidWcuIikKLSAgICBjb25maXJtID0gbWFrZV9vcHRpb24oIi0tbm8tY29u
ZmlybSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJjb25maXJtIiwgZGVmYXVsdD1UcnVl
LCBoZWxwPSJTa2lwIGNvbmZpcm1hdGlvbiBzdGVwcy4iKQotICAgIGVtYWlsID0gbWFrZV9vcHRp
b24oIi0tZW1haWwiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iZW1haWwi
LCBoZWxwPSJFbWFpbCBhZGRyZXNzIHRvIHVzZSBpbiBDaGFuZ2VMb2dzLiIpCi0KLQotY2xhc3Mg
QWJzdHJhY3RTdGVwKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlv
bnMpOgotICAgICAgICBzZWxmLl90b29sID0gdG9vbAotICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucwotICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQotCi0gICAgZGVmIF9ydW5fc2NyaXB0
KHNlbGYsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAg
ICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQotICAgICAgICAjIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2Ugc2VsZi5wb3J0KCkKLSAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVu
X2FuZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgoc2NyaXB0X25hbWUpLCBxdWlldCkK
LQotICAgICMgRklYTUU6IFRoZSBwb3J0IHNob3VsZCBsaXZlIG9uIHRoZSB0b29sLgotICAgIGRl
ZiBwb3J0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3BvcnQKLSAgICAgICAgc2VsZi5fcG9ydCA9IFdlYktpdFBvcnQucG9ydChzZWxmLl9v
cHRpb25zLnBvcnQpCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ci0KLSAgICBfd2VsbF9rbm93
bl9rZXlzID0gewotICAgICAgICAiZGlmZiIgOiBsYW1iZGEgc2VsZjogc2VsZi5fdG9vbC5zY20o
KS5jcmVhdGVfcGF0Y2goKSwKLSAgICAgICAgImNoYW5nZWxvZ3MiIDogbGFtYmRhIHNlbGY6IHNl
bGYuX3Rvb2wuc2NtKCkubW9kaWZpZWRfY2hhbmdlbG9ncygpLAotICAgIH0KLQotICAgIGRlZiBj
YWNoZWRfbG9va3VwKHNlbGYsIHN0YXRlLCBrZXksIHByb21pc2U9Tm9uZSk6Ci0gICAgICAgIGlm
IHN0YXRlLmdldChrZXkpOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRlW2tleV0KLSAgICAgICAg
aWYgbm90IHByb21pc2U6Ci0gICAgICAgICAgICBwcm9taXNlID0gc2VsZi5fd2VsbF9rbm93bl9r
ZXlzLmdldChrZXkpCi0gICAgICAgIHN0YXRlW2tleV0gPSBwcm9taXNlKHNlbGYpCi0gICAgICAg
IHJldHVybiBzdGF0ZVtrZXldCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhj
bHMpOgotICAgICAgICByZXR1cm4gW10KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVu
dCIKLQotCi0jIEZJWE1FOiBVbmlmeSB3aXRoIFN0ZXBTZXF1ZW5jZT8gIEknbSBub3Qgc3VyZSB5
ZXQgd2hpY2ggaXMgdGhlIGJldHRlciBkZXNpZ24uCi1jbGFzcyBNZXRhU3RlcChBYnN0cmFjdFN0
ZXApOgotICAgIHN1YnN0ZXBzID0gW10gIyBPdmVycmlkZSBpbiBzdWJjbGFzc2VzCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMpOgotICAgICAgICBBYnN0cmFjdFN0ZXAuX19p
bml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucykKLSAgICAgICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMg
PSBbXQotICAgICAgICBmb3Igc3RlcF9jbGFzcyBpbiBzZWxmLnN1YnN0ZXBzOgotICAgICAgICAg
ICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMuYXBwZW5kKHN0ZXBfY2xhc3ModG9vbCwgb3B0aW9ucykp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVw
cyhzdGVwcyk6Ci0gICAgICAgIGNvbGxlY3RlZF9vcHRpb25zID0gW10KLSAgICAgICAgZm9yIHN0
ZXAgaW4gc3RlcHM6Ci0gICAgICAgICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9IGNvbGxlY3RlZF9v
cHRpb25zICsgc3RlcC5vcHRpb25zKCkKLSAgICAgICAgcmV0dXJuIGNvbGxlY3RlZF9vcHRpb25z
Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1
cm4gY2xzLl9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVwcyhjbHMuc3Vic3RlcHMpCi0KLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgZm9yIHN0ZXAgaW4gc2VsZi5fc3RlcF9pbnN0
YW5jZXM6Ci0gICAgICAgICAgICAgc3RlcC5ydW4oc3RhdGUpCi0KLQotY2xhc3MgUHJvbXB0Rm9y
QnVnT3JUaXRsZVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToK
LSAgICAgICAgIyBObyBuZWVkIHRvIHByb21wdCBpZiB3ZSBhbHJhZHkgaGF2ZSB0aGUgYnVnX2lk
LgotICAgICAgICBpZiBzdGF0ZS5nZXQoImJ1Z19pZCIpOgotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgIHVzZXJfcmVzcG9uc2UgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0KCJQbGVhc2UgZW50
ZXIgYSBidWcgbnVtYmVyIG9yIGEgdGl0bGUgZm9yIGEgbmV3IGJ1ZzpcbiIpCi0gICAgICAgICMg
SWYgdGhlIHVzZXIgcmVzcG9uZHMgd2l0aCBhIG51bWJlciwgd2UgYXNzdW1lIGl0J3MgYnVnIG51
bWJlci4KLSAgICAgICAgIyBPdGhlcndpc2Ugd2UgYXNzdW1lIGl0J3MgYSBidWcgc3ViamVjdC4K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RhdGVbImJ1Z19pZCJdID0gaW50KHVzZXJfcmVz
cG9uc2UpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBUeXBlRXJyb3I6Ci0gICAgICAgICAg
ICBzdGF0ZVsiYnVnX3RpdGxlIl0gPSB1c2VyX3Jlc3BvbnNlCi0gICAgICAgICAgICAjIEZJWE1F
OiBUaGlzIGlzIGtpbmQgb2YgYSBsYW1lIGRlc2NyaXB0aW9uLgotICAgICAgICAgICAgc3RhdGVb
ImJ1Z19kZXNjcmlwdGlvbiJdID0gdXNlcl9yZXNwb25zZQotCi0KLWNsYXNzIENyZWF0ZUJ1Z1N0
ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMp
OgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2MsCi0gICAg
ICAgICAgICBDb21tYW5kT3B0aW9ucy5jb21wb25lbnQsCi0gICAgICAgIF0KLQotICAgIGRlZiBy
dW4oc2VsZiwgc3RhdGUpOgotICAgICAgICAjIE5vIG5lZWQgdG8gY3JlYXRlIGEgYnVnIGlmIHdl
IGFscmVhZHkgaGF2ZSBvbmUuCi0gICAgICAgIGlmIHN0YXRlLmdldCgiYnVnX2lkIik6Ci0gICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgc3RhdGVbImJ1Z19pZCJdID0gc2VsZi5fdG9vbC5idWdz
LmNyZWF0ZV9idWcoc3RhdGVbImJ1Z190aXRsZSJdLCBzdGF0ZVsiYnVnX2Rlc2NyaXB0aW9uIl0s
IGNvbXBvbmVudD1zZWxmLl9vcHRpb25zLmNvbXBvbmVudCwgY2M9c2VsZi5fb3B0aW9ucy5jYykK
LQotCi1jbGFzcyBQcmVwYXJlQ2hhbmdlTG9nU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAg
ICAgICBDb21tYW5kT3B0aW9ucy5wb3J0LAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucXVp
ZXQsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5lbWFpbCwKLSAgICAgICAgXQotCi0gICAg
ZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlmIHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0
ZSwgImNoYW5nZWxvZ3MiKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBvcy5jaGRpcihz
ZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGFyZ3MgPSBbc2VsZi5wb3J0
KCkuc2NyaXB0X3BhdGgoInByZXBhcmUtQ2hhbmdlTG9nIildCi0gICAgICAgIGlmIHN0YXRlWyJi
dWdfaWQiXToKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWJ1Zz0lcyIgJSBzdGF0ZVsiYnVn
X2lkIl0pCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZW1haWw6Ci0gICAgICAgICAgICBhcmdz
LmFwcGVuZCgiLS1lbWFpbD0lcyIgJSBzZWxmLl9vcHRpb25zLmVtYWlsKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
YXJncywgc2VsZi5fb3B0aW9ucy5xdWlldCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBl
OgotICAgICAgICAgICAgZXJyb3IoIlVuYWJsZSB0byBwcmVwYXJlIENoYW5nZUxvZ3MuIikKLSAg
ICAgICAgc3RhdGVbImRpZmYiXSA9IE5vbmUgIyBXZSd2ZSBjaGFuZ2VkIHRoZSBkaWZmCi0KLQot
Y2xhc3MgRWRpdENoYW5nZUxvZ1N0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYs
IHN0YXRlKToKLSAgICAgICAgc2VsZi5fdG9vbC51c2VyLmVkaXQoc2VsZi5jYWNoZWRfbG9va3Vw
KHN0YXRlLCAiY2hhbmdlbG9ncyIpKQotCi0KLWNsYXNzIE9ic29sZXRlUGF0Y2hlc09uQnVnU3Rl
cChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6
Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5vYnNvbGV0ZV9w
YXRjaGVzLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMub2Jzb2xldGVfcGF0Y2hlczoKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBidWdfaWQgPSBzdGF0ZVsiYnVnX2lkIl0KLSAgICAgICAgcGF0Y2hlcyA9IHNl
bGYuX3Rvb2wuYnVncy5mZXRjaF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgaWYg
bm90IHBhdGNoZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbG9nKCJPYnNvbGV0aW5n
ICVzIG9uIGJ1ZyAlcyIgJSAocGx1cmFsaXplKCJvbGQgcGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBi
dWdfaWQpKQotICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHNlbGYu
X3Rvb2wuYnVncy5vYnNvbGV0ZV9hdHRhY2htZW50KHBhdGNoWyJpZCJdKQotCi0KLWNsYXNzIENv
bmZpcm1EaWZmU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBv
cHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9u
cy5jb25maXJtLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAg
ICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY29uZmlybToKLSAgICAgICAgICAgIHJldHVybgotICAg
ICAgICBkaWZmID0gc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiZGlmZiIpCi0gICAgICAgIHNl
bGYuX3Rvb2wudXNlci5wYWdlKGRpZmYpCi0gICAgICAgIGlmIG5vdCBzZWxmLl90b29sLnVzZXIu
Y29uZmlybSgiV2FzIHRoYXQgZGlmZiBjb3JyZWN0PyIpOgotICAgICAgICAgICAgZXJyb3IoIlVz
ZXIgZGVjbGluZWQgdG8gY29udGludWUuIikKLQotCi1jbGFzcyBQb3N0RGlmZlRvQnVnU3RlcChB
YnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0g
ICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5kZXNjcmlwdGlvbiwK
LSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnJldmlldywKLSAgICAgICAgICAgIENvbW1hbmRP
cHRpb25zLnJlcXVlc3RfY29tbWl0LAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKLSAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImRpZmYiKQot
ICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90
b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKLSAgICAgICAgZGVzY3JpcHRpb24gPSBz
ZWxmLl9vcHRpb25zLmRlc2NyaXB0aW9uIG9yICJQYXRjaCIKLSAgICAgICAgc2VsZi5fdG9vbC5i
dWdzLmFkZF9wYXRjaF90b19idWcoc3RhdGVbImJ1Z19pZCJdLCBkaWZmX2ZpbGUsIGRlc2NyaXB0
aW9uLCBtYXJrX2Zvcl9yZXZpZXc9c2VsZi5fb3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1p
dF9xdWV1ZT1zZWxmLl9vcHRpb25zLnJlcXVlc3RfY29tbWl0KQotCi0KLWNsYXNzIFByZXBhcmVD
aGFuZ2VMb2dGb3JSZXZlcnRTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVmIHJ1bihzZWxmLCBz
dGF0ZSk6Ci0gICAgICAgICMgRmlyc3QsIGRpc2NhcmQgdGhlIENoYW5nZUxvZyBjaGFuZ2VzIGZy
b20gdGhlIHJvbGxvdXQuCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tv
dXRfcm9vdCkKLSAgICAgICAgY2hhbmdlbG9nX3BhdGhzID0gc2VsZi5fdG9vbC5zY20oKS5tb2Rp
ZmllZF9jaGFuZ2Vsb2dzKCkKLSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5yZXZlcnRfZmlsZXMo
Y2hhbmdlbG9nX3BhdGhzKQotCi0gICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFuZ2VMb2cg
ZW50cmllcyBmb3IgdGhpcyByb2xsb3V0LgotICAgICAgICAjIFRoaXMgY291bGQgbW92ZSB0byBw
cmVwYXJlLUNoYW5nZUxvZyBieSBhZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgotICAgICAgICBz
ZWxmLl9ydW5fc2NyaXB0KCJwcmVwYXJlLUNoYW5nZUxvZyIpCi0gICAgICAgIGZvciBjaGFuZ2Vs
b2dfcGF0aCBpbiBjaGFuZ2Vsb2dfcGF0aHM6Ci0gICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdl
bG9nX3BhdGgpLnVwZGF0ZV9mb3JfcmV2ZXJ0KHN0YXRlWyJyZXZpc2lvbiJdKQotCi0KLWNsYXNz
IENsZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdG9vbCwgb3B0aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0gICAg
ICAgIEFic3RyYWN0U3RlcC5fX2luaXRfXyhzZWxmLCB0b29sLCBvcHRpb25zKQotICAgICAgICBz
ZWxmLl9hbGxvd19sb2NhbF9jb21taXRzID0gYWxsb3dfbG9jYWxfY29tbWl0cwotCi0gICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLmZvcmNlX2NsZWFuLAotICAgICAgICAgICAgQ29tbWFuZE9w
dGlvbnMuY2xlYW4sCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAg
ICAgICBvcy5jaGRpcihzZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9hbGxvd19sb2NhbF9jb21taXRzOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5z
Y20oKS5lbnN1cmVfbm9fbG9jYWxfY29tbWl0cyhzZWxmLl9vcHRpb25zLmZvcmNlX2NsZWFuKQot
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNsZWFuOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5z
Y20oKS5lbnN1cmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkoZm9yY2VfY2xlYW49c2VsZi5fb3B0
aW9ucy5mb3JjZV9jbGVhbikKLQotCi1jbGFzcyBDbGVhbldvcmtpbmdEaXJlY3RvcnlXaXRoTG9j
YWxDb21taXRzU3RlcChDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdG9vbCwgb3B0aW9ucyk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgYSBiaXQgb2Yg
YSBoYWNrLiAgQ29uc2lkZXIgZG9pbmcgdGhpcyBtb3JlIGNsZWFubHkuCi0gICAgICAgIENsZWFu
V29ya2luZ0RpcmVjdG9yeVN0ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucywgYWxsb3df
bG9jYWxfY29tbWl0cz1UcnVlKQotCi0KLWNsYXNzIFVwZGF0ZVN0ZXAoQWJzdHJhY3RTdGVwKToK
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4g
WwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMudXBkYXRlLAotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMucG9ydCwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnVwZGF0ZToKLSAgICAgICAgICAgIHJldHVybgot
ICAgICAgICBsb2coIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IikKLSAgICAgICAgc2VsZi5f
dG9vbC5leGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKHNlbGYucG9ydCgpLnVwZGF0ZV93
ZWJraXRfY29tbWFuZCgpLCBxdWlldD1UcnVlKQotCi0KLWNsYXNzIEFwcGx5UGF0Y2hTdGVwKEFi
c3RyYWN0U3RlcCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAg
ICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2
ZSwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGxvZygi
UHJvY2Vzc2luZyBwYXRjaCAlcyBmcm9tIGJ1ZyAlcy4iICUgKHN0YXRlWyJwYXRjaCJdWyJpZCJd
LCBzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0pKQotICAgICAgICBzZWxmLl90b29sLnNjbSgpLmFw
cGx5X3BhdGNoKHN0YXRlWyJwYXRjaCJdLCBmb3JjZT1zZWxmLl9vcHRpb25zLm5vbl9pbnRlcmFj
dGl2ZSkKLQotCi1jbGFzcyBSZXZlcnRSZXZpc2lvblN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hcHBseV9yZXZl
cnNlX2RpZmYoc3RhdGVbInJldmlzaW9uIl0pCi0KLQotY2xhc3MgQXBwbHlQYXRjaFdpdGhMb2Nh
bENvbW1pdFN0ZXAoQXBwbHlQYXRjaFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBv
cHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9u
cy5sb2NhbF9jb21taXQsCi0gICAgICAgIF0gKyBBcHBseVBhdGNoU3RlcC5vcHRpb25zKCkKLSAg
ICAKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgQXBwbHlQYXRjaFN0ZXAucnVu
KHNlbGYsIHN0YXRlKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxvY2FsX2NvbW1pdDoKLSAg
ICAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gc2VsZi5fdG9vbC5zY20oKS5jb21taXRfbWVzc2Fn
ZV9mb3JfdGhpc19jb21taXQoKQotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5jb21taXRf
bG9jYWxseV93aXRoX21lc3NhZ2UoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpIG9yIHN0YXRlWyJw
YXRjaCJdWyJuYW1lIl0pCi0KLQotY2xhc3MgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAoQWJz
dHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAg
ICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2hlY2tfYnVpbGRlcnMs
Ci0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBpZiBub3Qg
c2VsZi5fb3B0aW9ucy5jaGVja19idWlsZGVyczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICByZWRfYnVpbGRlcnNfbmFtZXMgPSBzZWxmLl90b29sLmJ1aWxkYm90LnJlZF9jb3JlX2J1aWxk
ZXJzX25hbWVzKCkKLSAgICAgICAgaWYgbm90IHJlZF9idWlsZGVyc19uYW1lczoKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBtYXAobGFtYmRhIG5hbWU6
ICJcIiVzXCIiICUgbmFtZSwgcmVkX2J1aWxkZXJzX25hbWVzKSAjIEFkZCBxdW90ZXMgYXJvdW5k
IHRoZSBuYW1lcy4KLSAgICAgICAgZXJyb3IoIkJ1aWxkZXJzIFslc10gYXJlIHJlZCwgcGxlYXNl
IGRvIG5vdCBjb21taXQuXG5TZWUgaHR0cDovLyVzLlxuUGFzcyAtLWlnbm9yZS1idWlsZGVycyB0
byBieXBhc3MgdGhpcyBjaGVjay4iICUgKCIsICIuam9pbihyZWRfYnVpbGRlcnNfbmFtZXMpLCBz
ZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkYm90X2hvc3QpKQotCi0KLWNsYXNzIEVuc3VyZUxvY2Fs
Q29tbWl0SWZOZWVkZWQoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
b3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlv
bnMubG9jYWxfY29tbWl0LAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToK
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5sb2NhbF9jb21taXQgYW5kIG5vdCBzZWxmLl90b29s
LnNjbSgpLnN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKLSAgICAgICAgICAgIGVycm9yKCItLWxv
Y2FsLWNvbW1pdCBwYXNzZWQsIGJ1dCAlcyBkb2VzIG5vdCBzdXBwb3J0IGxvY2FsIGNvbW1pdHMi
ICUgc2VsZi5fdG9vbC5zY20uZGlzcGxheV9uYW1lKCkpCi0KLQotY2xhc3MgVXBkYXRlQ2hhbmdl
TG9nc1dpdGhSZXZpZXdlclN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMucmV2aWV3ZXIsCi0gICAgICAgIF0KLQotICAgIGRlZiBfZ3Vlc3NfcmV2aWV3ZXJf
ZnJvbV9idWcoc2VsZiwgYnVnX2lkKToKLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVn
cy5mZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgaWYgbGVu
KHBhdGNoZXMpICE9IDE6Ci0gICAgICAgICAgICBsb2coIiVzIG9uIGJ1ZyAlcywgY2Fubm90IGlu
ZmVyIHJldmlld2VyLiIgJSAocGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIsIGxlbihwYXRjaGVz
KSksIGJ1Z19pZCkpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBwYXRjaCA9IHBh
dGNoZXNbMF0KLSAgICAgICAgcmV2aWV3ZXIgPSBwYXRjaFsicmV2aWV3ZXIiXQotICAgICAgICBs
b2coIkd1ZXNzaW5nIFwiJXNcIiBhcyByZXZpZXdlciBmcm9tIGF0dGFjaG1lbnQgJXMgb24gYnVn
ICVzLiIgJSAocmV2aWV3ZXIsIHBhdGNoWyJpZCJdLCBidWdfaWQpKQotICAgICAgICByZXR1cm4g
cmV2aWV3ZXIKLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBidWdfaWQgPSBz
dGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0KLSAgICAgICAgcmV2aWV3ZXIgPSBzZWxmLl9vcHRpb25z
LnJldmlld2VyCi0gICAgICAgIGlmIG5vdCByZXZpZXdlcjoKLSAgICAgICAgICAgIGlmIG5vdCBi
dWdfaWQ6Ci0gICAgICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQgYW5kIC0tcmV2
aWV3ZXI9IG5vdCBwcm92aWRlZC4gIE5vdCB1cGRhdGluZyBDaGFuZ2VMb2dzIHdpdGggcmV2aWV3
ZXIuIikKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHJldmlld2VyID0gc2Vs
Zi5fZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoYnVnX2lkKQotCi0gICAgICAgIGlmIG5vdCByZXZp
ZXdlcjoKLSAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGd1ZXNzIHJldmlld2VyIGZyb20gYnVn
ICVzIGFuZCAtLXJldmlld2VyPSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9n
cyB3aXRoIHJldmlld2VyLiIgJSBidWdfaWQpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICBvcy5jaGRpcihzZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGZvciBj
aGFuZ2Vsb2dfcGF0aCBpbiBzZWxmLl90b29sLnNjbSgpLm1vZGlmaWVkX2NoYW5nZWxvZ3MoKToK
LSAgICAgICAgICAgIENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkuc2V0X3Jldmlld2VyKHJldmll
d2VyKQotCi0KLWNsYXNzIEJ1aWxkU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBD
b21tYW5kT3B0aW9ucy5idWlsZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAot
ICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuYnVpbGRfc3R5bGUsCi0gICAgICAgIF0KLQotICAg
IGRlZiBidWlsZChzZWxmLCBidWlsZF9zdHlsZSk6Ci0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0
aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChzZWxmLnBvcnQoKS5idWlsZF93ZWJraXRfY29tbWFu
ZChidWlsZF9zdHlsZT1idWlsZF9zdHlsZSksIHNlbGYuX29wdGlvbnMucXVpZXQpCi0KLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYnVpbGQ6
Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbG9nKCJCdWlsZGluZyBXZWJLaXQiKQotICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmJ1aWxkX3N0eWxlID09ICJib3RoIjoKLSAgICAgICAgICAg
IHNlbGYuYnVpbGQoImRlYnVnIikKLSAgICAgICAgICAgIHNlbGYuYnVpbGQoInJlbGVhc2UiKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5idWlsZChzZWxmLl9vcHRpb25zLmJ1aWxk
X3N0eWxlKQotCi0KLWNsYXNzIENoZWNrU3R5bGVTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVm
IHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImNoZWNrLXdlYmtp
dC1zdHlsZSIpCi0KLQotY2xhc3MgUnVuVGVzdHNTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLmJ1aWxkLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMu
dGVzdCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMu
cG9ydCwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLmJ1aWxkOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLnRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgYXJn
cyA9IHNlbGYucG9ydCgpLnJ1bl93ZWJraXRfdGVzdHNfY29tbWFuZCgpCi0gICAgICAgIGlmIHNl
bGYuX29wdGlvbnMubm9uX2ludGVyYWN0aXZlOgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0t
bm8tbGF1bmNoLXNhZmFyaSIpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1leGl0LWFmdGVy
LW4tZmFpbHVyZXM9MSIpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucXVpZXQ6Ci0gICAgICAg
ICAgICBhcmdzLmFwcGVuZCgiLS1xdWlldCIpCi0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZl
LnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChhcmdzKQotCi0KLWNsYXNzIENvbW1pdFN0ZXAoQWJzdHJh
Y3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgY29tbWl0X21lc3Nh
Z2UgPSBzZWxmLl90b29sLnNjbSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpCi0g
ICAgICAgIHN0YXRlWyJjb21taXRfdGV4dCJdID0gIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X3dp
dGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkpCi0KLQotY2xhc3MgQ2xvc2VQYXRj
aFN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAg
Y29tbWVudF90ZXh0ID0gYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dChzZWxmLl90b29sLnNj
bSgpLCBzdGF0ZVsiY29tbWl0X3RleHQiXSkKLSAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsZWFy
X2F0dGFjaG1lbnRfZmxhZ3Moc3RhdGVbInBhdGNoIl1bImlkIl0sIGNvbW1lbnRfdGV4dCkKLQot
Ci1jbGFzcyBDbG9zZUJ1Z1N0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMuY2xvc2VfYnVnLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRl
KToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY2xvc2VfYnVnOgotICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciBy
KyBwYXRjaGVzIG9uIHRoZSBidWcgYmVmb3JlIGNsb3NpbmcuCi0gICAgICAgICMgQXNzdW1lIHRo
YXQgci0gcGF0Y2hlcyBhcmUganVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRv
IG9ic29sZXRlLgotICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNo
ZXNfZnJvbV9idWcoc3RhdGVbInBhdGNoIl1bImJ1Z19pZCJdKQotICAgICAgICBmb3IgcGF0Y2gg
aW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXci
KQotICAgICAgICAgICAgaWYgcmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIr
IjoKLSAgICAgICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50
ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxh
bmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmll
d19mbGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fdG9vbC5idWdz
LmNsb3NlX2J1Z19hc19maXhlZChzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0sICJBbGwgcmV2aWV3
ZWQgcGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKLQotCi1jbGFzcyBD
bG9zZUJ1Z0ZvckxhbmREaWZmU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAot
ICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21t
YW5kT3B0aW9ucy5jbG9zZV9idWcsCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3Rh
dGUpOgotICAgICAgICBjb21tZW50X3RleHQgPSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0
KHNlbGYuX3Rvb2wuc2NtKCksIHN0YXRlWyJjb21taXRfdGV4dCJdKQotICAgICAgICBidWdfaWQg
PSBzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0KLSAgICAgICAgaWYgYnVnX2lkOgotICAgICAgICAg
ICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQotICAgICAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5jbG9zZV9idWc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3Nl
X2J1Z19hc19maXhlZChidWdfaWQsIGNvbW1lbnRfdGV4dCkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5IHRvIGZpZ3VyZSBv
dXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCi0gICAgICAgICAgICAgICAgIyB0byB0aGUgYnVn
LCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCi0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LnBvc3RfY29tbWVudF90b19idWcoYnVnX2lkLCBjb21tZW50X3RleHQpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsb2coY29tbWVudF90ZXh0KQotICAgICAgICAgICAgbG9nKCJObyBidWcg
aWQgcHJvdmlkZWQuIikKLQotCi1jbGFzcyBDb21wbGV0ZVJvbGxvdXQoTWV0YVN0ZXApOgotICAg
IHN1YnN0ZXBzID0gWwotICAgICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIENvbW1pdFN0ZXAsCi0g
ICAgXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAg
Y29sbGVjdGVkX29wdGlvbnMgPSBjbHMuX2NvbGxlY3Rfb3B0aW9uc19mcm9tX3N0ZXBzKGNscy5z
dWJzdGVwcykKLSAgICAgICAgY29sbGVjdGVkX29wdGlvbnMuYXBwZW5kKENvbW1hbmRPcHRpb25z
LmNvbXBsZXRlX3JvbGxvdXQpCi0gICAgICAgIHJldHVybiBjb2xsZWN0ZWRfb3B0aW9ucwotCi0g
ICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGJ1Z19pZCA9IHN0YXRlWyJidWdfaWQi
XQotICAgICAgICAjIEZJWE1FOiBGdWxseSBhdXRvbWF0ZWQgcm9sbG91dCBpcyBub3QgMTAwJSBp
ZGlvdC1wcm9vZiB5ZXQsIHNvIGZvciBub3cganVzdCBsb2cgd2l0aCBpbnN0cnVjdGlvbnMgb24g
aG93IHRvIGNvbXBsZXRlIHRoZSByb2xsb3V0LgotICAgICAgICAjIE9uY2Ugd2UgdHJ1c3Qgcm9s
bG91dCB3ZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbi4KLSAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMuY29tcGxldGVfcm9sbG91dDoKLSAgICAgICAgICAgIGxvZygiXG5OT1RFOiBSb2xsb3V0
IHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuUGxlYXNlIHZlcmlmeSB0aGUgcm9sbG91dCBkaWZm
IGFuZCB1c2UgXCJidWd6aWxsYS10b29sIGxhbmQtZGlmZiAlc1wiIHRvIGNvbW1pdCB0aGUgcm9s
bG91dC4iICUgYnVnX2lkKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgTWV0YVN0ZXAu
cnVuKHNlbGYsIHN0YXRlKQotCi0gICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICBs
b2coc3RhdGVbImNvbW1pdF90ZXh0Il0pCi0gICAgICAgICAgICBsb2coIk5vIGJ1Z3Mgd2VyZSB1
cGRhdGVkIG9yIHJlLW9wZW5lZCB0byByZWZsZWN0IHRoaXMgcm9sbG91dC4iKQotICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgICMgRklYTUU6IEknbSBub3Qgc3VyZSBzdGF0ZVsiY29tbWl0X3Rl
eHQiXSBpcyBxdWl0ZSByaWdodCBoZXJlLgotICAgICAgICBzZWxmLl90b29sLmJ1Z3MucmVvcGVu
X2J1ZyhidWdfaWQsIHN0YXRlWyJjb21taXRfdGV4dCJdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBzX3VuaXR0ZXN0LnB5CmluZGV4IDE1OGY0YzAuLmQy
ZmM3YzcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRzdGVw
c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkc3Rl
cHNfdW5pdHRlc3QucHkKQEAgLTMzLDEzICszMyw4IEBAIGZyb20gd2Via2l0cHkubW9ja19idWd6
aWxsYXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKIGZyb20gd2Via2l0cHkub3V0cHV0Y2Fw
dHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBNb2Nr
CiAKK09PUFMKIAotY2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0ZXBUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9ndWVzc19yZXZpZXdlcl9mcm9tX2J1Zyhz
ZWxmKToKLSAgICAgICAgY2FwdHVyZSA9IE91dHB1dENhcHR1cmUoKQotICAgICAgICBzdGVwID0g
VXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0ZXAoTW9ja0J1Z3ppbGxhVG9vbCgpLCBbXSkK
LSAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIjAgcmV2aWV3ZWQgcGF0Y2hlcyBvbiBidWcgNzUs
IGNhbm5vdCBpbmZlciByZXZpZXdlci5cbiIKLSAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0
cyhzZWxmLCBzdGVwLl9ndWVzc19yZXZpZXdlcl9mcm9tX2J1ZywgWzc1XSwgZXhwZWN0ZWRfc3Rk
ZXJyPWV4cGVjdGVkX3N0ZGVycikKIAogCiBjbGFzcyBTdGVwc1Rlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9k
b3dubG9hZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxv
YWQucHkKaW5kZXggNTViZGJmNC4uM2UxYmI0ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZC5weQorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Rvd25sb2FkLnB5CkBAIC0zMiw5ICszMiwxMCBAQCBpbXBv
cnQgb3MKIAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KIAoraW1wb3J0IHdlYmtp
dHB5LnN0ZXBzIGFzIHN0ZXBzCisKIGZyb20gd2Via2l0cHkuYnVnemlsbGEgaW1wb3J0IHBhcnNl
X2J1Z19pZAogIyBXZSBjb3VsZCBpbnN0ZWFkIHVzZSBmcm9tIG1vZHVsZXMgaW1wb3J0IGJ1aWxk
c3RlcHMgYW5kIHRoZW4gcHJlZml4IGV2ZXJ5IGJ1aWxkc3RlcCB3aXRoICJidWlsZHN0ZXBzLiIK
LWZyb20gd2Via2l0cHkuYnVpbGRzdGVwcyBpbXBvcnQgKgogZnJvbSB3ZWJraXRweS5jaGFuZ2Vs
b2dzIGltcG9ydCBDaGFuZ2VMb2cKIGZyb20gd2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19j
b21tZW50X2Zyb21fY29tbWl0X3RleHQKIGZyb20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBT
Y3JpcHRFcnJvcgpAQCAtNjIsOSArNjMsOSBAQCBjbGFzcyBCdWlsZChBYnN0cmFjdFNlcXVlbmNl
ZENvbW1tYW5kKToKICAgICBuYW1lID0gImJ1aWxkIgogICAgIGhlbHBfdGV4dCA9ICJVcGRhdGUg
d29ya2luZyBjb3B5IGFuZCBidWlsZCIKICAgICBzdGVwcyA9IFsKLSAgICAgICAgQ2xlYW5Xb3Jr
aW5nRGlyZWN0b3J5U3RlcCwKLSAgICAgICAgVXBkYXRlU3RlcCwKLSAgICAgICAgQnVpbGRTdGVw
LAorICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCisgICAgICAgIHN0ZXBzLlVw
ZGF0ZSwKKyAgICAgICAgc3RlcHMuQnVpbGQsCiAgICAgXQogCiAKQEAgLTcyLDEwICs3MywxMCBA
QCBjbGFzcyBCdWlsZEFuZFRlc3QoQWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6CiAgICAgbmFt
ZSA9ICJidWlsZC1hbmQtdGVzdCIKICAgICBoZWxwX3RleHQgPSAiVXBkYXRlIHdvcmtpbmcgY29w
eSwgYnVpbGQsIGFuZCBydW4gdGhlIHRlc3RzIgogICAgIHN0ZXBzID0gWwotICAgICAgICBDbGVh
bldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAgICBVcGRhdGVTdGVwLAotICAgICAgICBCdWls
ZFN0ZXAsCi0gICAgICAgIFJ1blRlc3RzU3RlcCwKKyAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5n
RGlyZWN0b3J5LAorICAgICAgICBzdGVwcy5VcGRhdGUsCisgICAgICAgIHN0ZXBzLkJ1aWxkLAor
ICAgICAgICBzdGVwcy5SdW5UZXN0cywKICAgICBdCiAKIApAQCAtODUsMTMgKzg2LDEzIEBAIGNs
YXNzIExhbmREaWZmKEFic3RyYWN0U2VxdWVuY2VkQ29tbW1hbmQpOgogICAgIGFyZ3VtZW50X25h
bWVzID0gIltCVUdJRF0iCiAgICAgc2hvd19pbl9tYWluX2hlbHAgPSBUcnVlCiAgICAgc3RlcHMg
PSBbCi0gICAgICAgIEVuc3VyZUJ1aWxkZXJzQXJlR3JlZW5TdGVwLAotICAgICAgICBVcGRhdGVD
aGFuZ2VMb2dzV2l0aFJldmlld2VyU3RlcCwKLSAgICAgICAgRW5zdXJlQnVpbGRlcnNBcmVHcmVl
blN0ZXAsCi0gICAgICAgIEJ1aWxkU3RlcCwKLSAgICAgICAgUnVuVGVzdHNTdGVwLAotICAgICAg
ICBDb21taXRTdGVwLAotICAgICAgICBDbG9zZUJ1Z0ZvckxhbmREaWZmU3RlcCwKKyAgICAgICAg
c3RlcHMuRW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwKKyAgICAgICAgc3RlcHMuVXBkYXRlQ2hhbmdl
TG9nc1dpdGhSZXZpZXdlciwKKyAgICAgICAgc3RlcHMuRW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwK
KyAgICAgICAgc3RlcHMuQnVpbGQsCisgICAgICAgIHN0ZXBzLlJ1blRlc3RzLAorICAgICAgICBz
dGVwcy5Db21taXQsCisgICAgICAgIHN0ZXBzLkNsb3NlQnVnRm9yTGFuZERpZmYsCiAgICAgXQog
CiAgICAgZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgpAQCAt
MTY5LDEwICsxNzAsMTAgQEAgY2xhc3MgQ2hlY2tTdHlsZShBYnN0cmFjdFBhdGNoU2VxdWVuY2lu
Z0NvbW1hbmQsIFByb2Nlc3NBdHRhY2htZW50c01peGluKToKICAgICBoZWxwX3RleHQgPSAiUnVu
IGNoZWNrLXdlYmtpdC1zdHlsZSBvbiB0aGUgc3BlY2lmaWVkIGF0dGFjaG1lbnRzIgogICAgIGFy
Z3VtZW50X25hbWVzID0gIkFUVEFDSE1FTlRfSUQgW0FUVEFDSE1FTlRfSURTXSIKICAgICBtYWlu
X3N0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAgICBV
cGRhdGVTdGVwLAotICAgICAgICBBcHBseVBhdGNoU3RlcCwKLSAgICAgICAgQ2hlY2tTdHlsZVN0
ZXAsCisgICAgICAgIHN0ZXBzLkNsZWFuV29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAgc3RlcHMu
VXBkYXRlLAorICAgICAgICBzdGVwcy5BcHBseVBhdGNoLAorICAgICAgICBzdGVwcy5DaGVja1N0
eWxlLAogICAgIF0KIAogCkBAIC0xODEsMjEgKzE4MiwyMSBAQCBjbGFzcyBCdWlsZEF0dGFjaG1l
bnQoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21tYW5kLCBQcm9jZXNzQXR0YWNobWVudHNNaXhp
bik6CiAgICAgaGVscF90ZXh0ID0gIkFwcGx5IGFuZCBidWlsZCBwYXRjaGVzIGZyb20gYnVnemls
bGEiCiAgICAgYXJndW1lbnRfbmFtZXMgPSAiQVRUQUNITUVOVF9JRCBbQVRUQUNITUVOVF9JRFNd
IgogICAgIG1haW5fc3RlcHMgPSBbCi0gICAgICAgIENsZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAs
Ci0gICAgICAgIFVwZGF0ZVN0ZXAsCi0gICAgICAgIEFwcGx5UGF0Y2hTdGVwLAotICAgICAgICBC
dWlsZFN0ZXAsCisgICAgICAgIHN0ZXBzLkNsZWFuV29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAg
c3RlcHMuVXBkYXRlLAorICAgICAgICBzdGVwcy5BcHBseVBhdGNoLAorICAgICAgICBzdGVwcy5C
dWlsZCwKICAgICBdCiAKIAogY2xhc3MgQWJzdHJhY3RQYXRjaEFwcGx5aW5nQ29tbWFuZChBYnN0
cmFjdFBhdGNoU2VxdWVuY2luZ0NvbW1hbmQpOgogICAgIHByZXBhcmVfc3RlcHMgPSBbCi0gICAg
ICAgIEVuc3VyZUxvY2FsQ29tbWl0SWZOZWVkZWQsCi0gICAgICAgIENsZWFuV29ya2luZ0RpcmVj
dG9yeVdpdGhMb2NhbENvbW1pdHNTdGVwLAotICAgICAgICBVcGRhdGVTdGVwLAorICAgICAgICBz
dGVwcy5FbnN1cmVMb2NhbENvbW1pdElmTmVlZGVkLAorICAgICAgICBzdGVwcy5DbGVhbldvcmtp
bmdEaXJlY3RvcnlXaXRoTG9jYWxDb21taXRzLAorICAgICAgICBzdGVwcy5VcGRhdGUsCiAgICAg
XQogICAgIG1haW5fc3RlcHMgPSBbCi0gICAgICAgIEFwcGx5UGF0Y2hXaXRoTG9jYWxDb21taXRT
dGVwLAorICAgICAgICBzdGVwcy5BcHBseVBhdGNoV2l0aExvY2FsQ29tbWl0LAogICAgIF0KIAog
CkBAIC0yMTUsMTggKzIxNiwxOCBAQCBjbGFzcyBBcHBseVBhdGNoZXMoQWJzdHJhY3RQYXRjaEFw
cGx5aW5nQ29tbWFuZCwgUHJvY2Vzc0J1Z3NNaXhpbik6CiAKIGNsYXNzIEFic3RyYWN0UGF0Y2hM
YW5kaW5nQ29tbWFuZChBYnN0cmFjdFBhdGNoU2VxdWVuY2luZ0NvbW1hbmQpOgogICAgIHByZXBh
cmVfc3RlcHMgPSBbCi0gICAgICAgIEVuc3VyZUJ1aWxkZXJzQXJlR3JlZW5TdGVwLAorICAgICAg
ICBzdGVwcy5FbnN1cmVCdWlsZGVyc0FyZUdyZWVuLAogICAgIF0KICAgICBtYWluX3N0ZXBzID0g
WwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAgICBVcGRhdGVTdGVw
LAotICAgICAgICBBcHBseVBhdGNoU3RlcCwKLSAgICAgICAgRW5zdXJlQnVpbGRlcnNBcmVHcmVl
blN0ZXAsCi0gICAgICAgIEJ1aWxkU3RlcCwKLSAgICAgICAgUnVuVGVzdHNTdGVwLAotICAgICAg
ICBDb21taXRTdGVwLAotICAgICAgICBDbG9zZVBhdGNoU3RlcCwKLSAgICAgICAgQ2xvc2VCdWdT
dGVwLAorICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCisgICAgICAgIHN0ZXBz
LlVwZGF0ZSwKKyAgICAgICAgc3RlcHMuQXBwbHlQYXRjaCwKKyAgICAgICAgc3RlcHMuRW5zdXJl
QnVpbGRlcnNBcmVHcmVlbiwKKyAgICAgICAgc3RlcHMuQnVpbGQsCisgICAgICAgIHN0ZXBzLlJ1
blRlc3RzLAorICAgICAgICBzdGVwcy5Db21taXQsCisgICAgICAgIHN0ZXBzLkNsb3NlUGF0Y2gs
CisgICAgICAgIHN0ZXBzLkNsb3NlQnVnLAogICAgIF0KIAogCkBAIC0yNTAsMTEgKzI1MSwxMSBA
QCBjbGFzcyBSb2xsb3V0KEFic3RyYWN0U2VxdWVuY2VkQ29tbW1hbmQpOgogICAgIGhlbHBfdGV4
dCA9ICJSZXZlcnQgdGhlIGdpdmVuIHJldmlzaW9uIGluIHRoZSB3b3JraW5nIGNvcHkgYW5kIG9w
dGlvbmFsbHkgY29tbWl0IHRoZSByZXZlcnQgYW5kIHJlLW9wZW4gdGhlIG9yaWdpbmFsIGJ1ZyIK
ICAgICBhcmd1bWVudF9uYW1lcyA9ICJSRVZJU0lPTiBbQlVHSURdIgogICAgIHN0ZXBzID0gWwot
ICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAgICBVcGRhdGVTdGVwLAot
ICAgICAgICBSZXZlcnRSZXZpc2lvblN0ZXAsCi0gICAgICAgIFByZXBhcmVDaGFuZ2VMb2dGb3JS
ZXZlcnRTdGVwLAotICAgICAgICBDb21wbGV0ZVJvbGxvdXQsCisgICAgICAgIHN0ZXBzLkNsZWFu
V29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAgc3RlcHMuVXBkYXRlLAorICAgICAgICBzdGVwcy5S
ZXZlcnRSZXZpc2lvbiwKKyAgICAgICAgc3RlcHMuUHJlcGFyZUNoYW5nZUxvZ0ZvclJldmVydCwK
KyAgICAgICAgc3RlcHMuQ29tcGxldGVSb2xsb3V0LAogICAgIF0KIAogICAgIEBzdGF0aWNtZXRo
b2QKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvdXBs
b2FkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHkK
aW5kZXggMTU0ZmRmZi4uMTY1ZjJlZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy91cGxvYWQucHkKQEAgLTM1LDggKzM1LDkgQEAgaW1wb3J0IHN5cwogCiBm
cm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogCitpbXBvcnQgd2Via2l0cHkuc3RlcHMg
YXMgc3RlcHMKKwogZnJvbSB3ZWJraXRweS5idWd6aWxsYSBpbXBvcnQgcGFyc2VfYnVnX2lkCi1m
cm9tIHdlYmtpdHB5LmJ1aWxkc3RlcHMgaW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dTdGVwLCBFZGl0
Q2hhbmdlTG9nU3RlcCwgQ29uZmlybURpZmZTdGVwLCBDb21tYW5kT3B0aW9ucywgT2Jzb2xldGVQ
YXRjaGVzT25CdWdTdGVwLCBQb3N0RGlmZlRvQnVnU3RlcCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0
ZXAsIENyZWF0ZUJ1Z1N0ZXAKIGZyb20gd2Via2l0cHkuY29tbWFuZHMuZG93bmxvYWQgaW1wb3J0
IEFic3RyYWN0U2VxdWVuY2VkQ29tbW1hbmQKIGZyb20gd2Via2l0cHkuY29tbWVudHMgaW1wb3J0
IGJ1Z19jb21tZW50X2Zyb21fc3ZuX3JldmlzaW9uCiBmcm9tIHdlYmtpdHB5LmNvbW1pdHRlcnMg
aW1wb3J0IENvbW1pdHRlckxpc3QKQEAgLTkxLDcgKzkyLDcgQEAgY2xhc3MgT2Jzb2xldGVBdHRh
Y2htZW50cyhBYnN0cmFjdFNlcXVlbmNlZENvbW1tYW5kKToKICAgICBoZWxwX3RleHQgPSAiTWFy
ayBhbGwgYXR0YWNobWVudHMgb24gYSBidWcgYXMgb2Jzb2xldGUiCiAgICAgYXJndW1lbnRfbmFt
ZXMgPSAiQlVHSUQiCiAgICAgc3RlcHMgPSBbCi0gICAgICAgIE9ic29sZXRlUGF0Y2hlc09uQnVn
U3RlcCwKKyAgICAgICAgc3RlcHMuT2Jzb2xldGVQYXRjaGVzLAogICAgIF0KIAogICAgIGRlZiBf
cHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKQEAgLTExNCw5ICsxMTUs
OSBAQCBjbGFzcyBQb3N0RGlmZihBYnN0cmFjdFBhdGNoVXBsb2FkaW5nQ29tbWFuZCk6CiAgICAg
YXJndW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKICAgICBzaG93X2luX21haW5faGVscCA9IFRydWUK
ICAgICBzdGVwcyA9IFsKLSAgICAgICAgQ29uZmlybURpZmZTdGVwLAotICAgICAgICBPYnNvbGV0
ZVBhdGNoZXNPbkJ1Z1N0ZXAsCi0gICAgICAgIFBvc3REaWZmVG9CdWdTdGVwLAorICAgICAgICBz
dGVwcy5Db25maXJtRGlmZiwKKyAgICAgICAgc3RlcHMuT2Jzb2xldGVQYXRjaGVzLAorICAgICAg
ICBzdGVwcy5Qb3N0RGlmZiwKICAgICBdCiAKICAgICBkZWYgX3ByZXBhcmVfc3RhdGUoc2VsZiwg
b3B0aW9ucywgYXJncywgdG9vbCk6CkBAIC0xMzIsOSArMTMzLDkgQEAgY2xhc3MgUHJlcGFyZURp
ZmYoQWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6CiAgICAgaGVscF90ZXh0ID0gIkNyZWF0ZXMg
YSBidWcgKG9yIHByb21wdHMgZm9yIGFuIGV4aXN0aW5nIGJ1ZykgYW5kIHByZXBhcmVzIHRoZSBD
aGFuZ2VMb2dzIgogICAgIGFyZ3VtZW50X25hbWVzID0gIltCVUdJRF0iCiAgICAgc3RlcHMgPSBb
Ci0gICAgICAgIFByb21wdEZvckJ1Z09yVGl0bGVTdGVwLAotICAgICAgICBDcmVhdGVCdWdTdGVw
LAotICAgICAgICBQcmVwYXJlQ2hhbmdlTG9nU3RlcCwKKyAgICAgICAgc3RlcHMuUHJvbXB0Rm9y
QnVnT3JUaXRsZSwKKyAgICAgICAgc3RlcHMuQ3JlYXRlQnVnLAorICAgICAgICBzdGVwcy5QcmVw
YXJlQ2hhbmdlTG9nLAogICAgIF0KIAogICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRp
b25zLCBhcmdzLCB0b29sKToKQEAgLTE0NywxMyArMTQ4LDEzIEBAIGNsYXNzIFN1Ym1pdFBhdGNo
KEFic3RyYWN0UGF0Y2hVcGxvYWRpbmdDb21tYW5kKToKICAgICBoZWxwX3RleHQgPSAiQXV0b21h
dGVzIHRoZSBwcm9jZXNzIG9mIHVwbG9hZGluZyBhIHBhdGNoIGZvciByZXZpZXciCiAgICAgYXJn
dW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKICAgICBzdGVwcyA9IFsKLSAgICAgICAgUHJvbXB0Rm9y
QnVnT3JUaXRsZVN0ZXAsCi0gICAgICAgIENyZWF0ZUJ1Z1N0ZXAsCi0gICAgICAgIFByZXBhcmVD
aGFuZ2VMb2dTdGVwLAotICAgICAgICBFZGl0Q2hhbmdlTG9nU3RlcCwKLSAgICAgICAgQ29uZmly
bURpZmZTdGVwLAotICAgICAgICBPYnNvbGV0ZVBhdGNoZXNPbkJ1Z1N0ZXAsCi0gICAgICAgIFBv
c3REaWZmVG9CdWdTdGVwLAorICAgICAgICBzdGVwcy5Qcm9tcHRGb3JCdWdPclRpdGxlLAorICAg
ICAgICBzdGVwcy5DcmVhdGVCdWcsCisgICAgICAgIHN0ZXBzLlByZXBhcmVDaGFuZ2VMb2csCisg
ICAgICAgIHN0ZXBzLkVkaXRDaGFuZ2VMb2csCisgICAgICAgIHN0ZXBzLkNvbmZpcm1EaWZmLAor
ICAgICAgICBzdGVwcy5PYnNvbGV0ZVBhdGNoZXMsCisgICAgICAgIHN0ZXBzLlBvc3REaWZmLAog
ICAgIF0KIAogICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29s
KToKQEAgLTE2Niw3ICsxNjcsNyBAQCBjbGFzcyBFZGl0Q2hhbmdlTG9nKEFic3RyYWN0U2VxdWVu
Y2VkQ29tbW1hbmQpOgogICAgIG5hbWUgPSAiZWRpdC1jaGFuZ2Vsb2ciCiAgICAgaGVscF90ZXh0
ID0gIk9wZW5zIG1vZGlmaWVkIENoYW5nZUxvZ3MgaW4gJEVESVRPUiIKICAgICBzdGVwcyA9IFsK
LSAgICAgICAgRWRpdENoYW5nZUxvZ1N0ZXAsCisgICAgICAgIHN0ZXBzLkVkaXRDaGFuZ2VMb2cs
CiAgICAgXQogCiAKQEAgLTE4MSw5ICsxODIsOSBAQCBjbGFzcyBQb3N0Q29tbWl0cyhBYnN0cmFj
dERlY2xhcmF0aXZlQ29tbW1hbmQpOgogICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1iIiwgIi0t
YnVnLWlkIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImJ1Z19pZCIsIGhl
bHA9IlNwZWNpZnkgYnVnIGlkIGlmIG5vIFVSTCBpcyBwcm92aWRlZCBpbiB0aGUgY29tbWl0IGxv
Zy4iKSwKICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWFkZC1sb2ctYXMtY29tbWVudCIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImFkZF9sb2dfYXNfY29tbWVudCIsIGRlZmF1bHQ9RmFs
c2UsIGhlbHA9IkFkZCBjb21taXQgbG9nIG1lc3NhZ2UgYXMgYSBjb21tZW50IHdoZW4gdXBsb2Fk
aW5nIHRoZSBwYXRjaC4iKSwKICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItbSIsICItLWRlc2Ny
aXB0aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImRlc2NyaXB0aW9u
IiwgaGVscD0iRGVzY3JpcHRpb24gc3RyaW5nIGZvciB0aGUgYXR0YWNobWVudCAoZGVmYXVsdDog
ZGVzY3JpcHRpb24gZnJvbSBjb21taXQgbWVzc2FnZSkiKSwKLSAgICAgICAgICAgIENvbW1hbmRP
cHRpb25zLm9ic29sZXRlX3BhdGNoZXMsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5yZXZp
ZXcsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCwKKyAgICAgICAg
ICAgIHN0ZXBzLk9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcywKKyAgICAgICAgICAgIHN0ZXBzLk9w
dGlvbnMucmV2aWV3LAorICAgICAgICAgICAgc3RlcHMuT3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCwK
ICAgICAgICAgXQogICAgICAgICBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQuX19pbml0X18o
c2VsZiwgb3B0aW9ucz1vcHRpb25zLCByZXF1aXJlc19sb2NhbF9jb21taXRzPVRydWUpCiAKQEAg
LTIxNiw3ICsyMTcsNyBAQCBjbGFzcyBQb3N0Q29tbWl0cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29t
bW1hbmQpOgogCiAgICAgICAgICAgICBpZiBvcHRpb25zLm9ic29sZXRlX3BhdGNoZXMgYW5kIGJ1
Z19pZCBub3QgaW4gaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hlczoKICAgICAgICAgICAgICAgICBzdGF0
ZSA9IHsgImJ1Z19pZCI6IGJ1Z19pZCB9Ci0gICAgICAgICAgICAgICAgT2Jzb2xldGVQYXRjaGVz
T25CdWdTdGVwKHRvb2wsIG9wdGlvbnMpLnJ1bihzdGF0ZSkKKyAgICAgICAgICAgICAgICBzdGVw
cy5PYnNvbGV0ZVBhdGNoZXModG9vbCwgb3B0aW9ucykucnVuKHN0YXRlKQogICAgICAgICAgICAg
ICAgIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXMuYWRkKGJ1Z19pZCkKIAogICAgICAgICAgICAgZGlm
Zl9maWxlID0gc2VsZi5fZGlmZl9maWxlX2Zvcl9jb21taXQodG9vbCwgY29tbWl0X2lkKQpAQCAt
MzIzLDggKzMyNCw4IEBAIGNsYXNzIENyZWF0ZUJ1ZyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1h
bmQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBvcHRpb25zID0gWwotICAg
ICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2MsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5j
b21wb25lbnQsCisgICAgICAgICAgICBzdGVwcy5PcHRpb25zLmNjLAorICAgICAgICAgICAgc3Rl
cHMuT3B0aW9ucy5jb21wb25lbnQsCiAgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1uby1wcm9t
cHQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0icHJvbXB0IiwgZGVmYXVsdD1UcnVlLCBo
ZWxwPSJEbyBub3QgcHJvbXB0IGZvciBidWcgdGl0bGUgYW5kIGNvbW1lbnQ7IHVzZSBjb21taXQg
bG9nIGluc3RlYWQuIiksCiAgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1uby1yZXZpZXciLCBh
Y3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0icmV2aWV3IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJE
byBub3QgbWFyayB0aGUgcGF0Y2ggZm9yIHJldmlldy4iKSwKICAgICAgICAgICAgIG1ha2Vfb3B0
aW9uKCItLXJlcXVlc3QtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVxdWVz
dF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJNYXJrIHRoZSBwYXRjaCBhcyBuZWVkaW5n
IGF1dG8tY29tbWl0IGFmdGVyIHJldmlldy4iKSwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RlcHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmE0MzkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFwcGx5cGF0Y2ggaW1wb3J0IEFwcGx5UGF0Y2gKK2Zy
b20gd2Via2l0cHkuc3RlcHMuYXBwbHlwYXRjaHdpdGhsb2NhbGNvbW1pdCBpbXBvcnQgQXBwbHlQ
YXRjaFdpdGhMb2NhbENvbW1pdAorZnJvbSB3ZWJraXRweS5zdGVwcy5idWlsZCBpbXBvcnQgQnVp
bGQKK2Zyb20gd2Via2l0cHkuc3RlcHMuY2hlY2tzdHlsZSBpbXBvcnQgQ2hlY2tTdHlsZQorZnJv
bSB3ZWJraXRweS5zdGVwcy5jbGVhbndvcmtpbmdkaXJlY3RvcnkgaW1wb3J0IENsZWFuV29ya2lu
Z0RpcmVjdG9yeQorZnJvbSB3ZWJraXRweS5zdGVwcy5jbGVhbndvcmtpbmdkaXJlY3Rvcnl3aXRo
bG9jYWxjb21taXRzIGltcG9ydCBDbGVhbldvcmtpbmdEaXJlY3RvcnlXaXRoTG9jYWxDb21taXRz
Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmNsb3NlYnVnIGltcG9ydCBDbG9zZUJ1ZworZnJvbSB3ZWJr
aXRweS5zdGVwcy5jbG9zZWJ1Z2ZvcmxhbmRkaWZmIGltcG9ydCBDbG9zZUJ1Z0ZvckxhbmREaWZm
Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmNsb3NlcGF0Y2ggaW1wb3J0IENsb3NlUGF0Y2gKK2Zyb20g
d2Via2l0cHkuc3RlcHMuY29tbWl0IGltcG9ydCBDb21taXQKK2Zyb20gd2Via2l0cHkuc3RlcHMu
Y29tcGxldGVyb2xsb3V0IGltcG9ydCBDb21wbGV0ZVJvbGxvdXQKK2Zyb20gd2Via2l0cHkuc3Rl
cHMuY29uZmlybWRpZmYgaW1wb3J0IENvbmZpcm1EaWZmCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmNy
ZWF0ZWJ1ZyBpbXBvcnQgQ3JlYXRlQnVnCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmVkaXRjaGFuZ2Vs
b2cgaW1wb3J0IEVkaXRDaGFuZ2VMb2cKK2Zyb20gd2Via2l0cHkuc3RlcHMuZW5zdXJlYnVpbGRl
cnNhcmVncmVlbiBpbXBvcnQgRW5zdXJlQnVpbGRlcnNBcmVHcmVlbgorZnJvbSB3ZWJraXRweS5z
dGVwcy5lbnN1cmVsb2NhbGNvbW1pdGlmbmVlZGVkIGltcG9ydCBFbnN1cmVMb2NhbENvbW1pdElm
TmVlZGVkCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9ic29sZXRlcGF0Y2hlcyBpbXBvcnQgT2Jzb2xl
dGVQYXRjaGVzCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zy
b20gd2Via2l0cHkuc3RlcHMucG9zdGRpZmYgaW1wb3J0IFBvc3REaWZmCitmcm9tIHdlYmtpdHB5
LnN0ZXBzLnByZXBhcmVjaGFuZ2Vsb2dmb3JyZXZlcnQgaW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dG
b3JSZXZlcnQKK2Zyb20gd2Via2l0cHkuc3RlcHMucHJlcGFyZWNoYW5nZWxvZyBpbXBvcnQgUHJl
cGFyZUNoYW5nZUxvZworZnJvbSB3ZWJraXRweS5zdGVwcy5wcm9tcHRmb3JidWdvcnRpdGxlIGlt
cG9ydCBQcm9tcHRGb3JCdWdPclRpdGxlCitmcm9tIHdlYmtpdHB5LnN0ZXBzLnJldmVydHJldmlz
aW9uIGltcG9ydCBSZXZlcnRSZXZpc2lvbgorZnJvbSB3ZWJraXRweS5zdGVwcy5ydW50ZXN0cyBp
bXBvcnQgUnVuVGVzdHMKK2Zyb20gd2Via2l0cHkuc3RlcHMudXBkYXRlY2hhbmdlbG9nc3dpdGhy
ZXZpZXdlciBpbXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlcgorZnJvbSB3ZWJraXRw
eS5zdGVwcy51cGRhdGUgaW1wb3J0IFVwZGF0ZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzL2Fic3RyYWN0c3RlcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42MzljZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAucHkKQEAgLTAsMCArMSw2OSBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwor
ZnJvbSB3ZWJraXRweS53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0CisKKworY2xhc3MgQWJz
dHJhY3RTdGVwKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMp
OgorICAgICAgICBzZWxmLl90b29sID0gdG9vbAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucworICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQorCisgICAgZGVmIF9ydW5fc2NyaXB0KHNl
bGYsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKKyAgICAgICAg
bG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQorICAgICAgICAjIEZJWE1FOiBUaGlzIHNo
b3VsZCB1c2Ugc2VsZi5wb3J0KCkKKyAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVuX2Fu
ZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgoc2NyaXB0X25hbWUpLCBxdWlldCkKKwor
ICAgICMgRklYTUU6IFRoZSBwb3J0IHNob3VsZCBsaXZlIG9uIHRoZSB0b29sLgorICAgIGRlZiBw
b3J0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX3BvcnQKKyAgICAgICAgc2VsZi5fcG9ydCA9IFdlYktpdFBvcnQucG9ydChzZWxmLl9vcHRp
b25zLnBvcnQpCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0CisKKyAgICBfd2VsbF9rbm93bl9r
ZXlzID0geworICAgICAgICAiZGlmZiIgOiBsYW1iZGEgc2VsZjogc2VsZi5fdG9vbC5zY20oKS5j
cmVhdGVfcGF0Y2goKSwKKyAgICAgICAgImNoYW5nZWxvZ3MiIDogbGFtYmRhIHNlbGY6IHNlbGYu
X3Rvb2wuc2NtKCkubW9kaWZpZWRfY2hhbmdlbG9ncygpLAorICAgIH0KKworICAgIGRlZiBjYWNo
ZWRfbG9va3VwKHNlbGYsIHN0YXRlLCBrZXksIHByb21pc2U9Tm9uZSk6CisgICAgICAgIGlmIHN0
YXRlLmdldChrZXkpOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRlW2tleV0KKyAgICAgICAgaWYg
bm90IHByb21pc2U6CisgICAgICAgICAgICBwcm9taXNlID0gc2VsZi5fd2VsbF9rbm93bl9rZXlz
LmdldChrZXkpCisgICAgICAgIHN0YXRlW2tleV0gPSBwcm9taXNlKHNlbGYpCisgICAgICAgIHJl
dHVybiBzdGF0ZVtrZXldCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb3B0aW9ucyhjbHMp
OgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvYXBwbHlwYXRj
aC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvYXBwbHlwYXRjaC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWExNTUxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNoLnB5CkBA
IC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
IAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBz
LmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9w
dGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0
IGxvZworCitjbGFzcyBBcHBseVBhdGNoKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9w
dGlvbnMubm9uX2ludGVyYWN0aXZlLAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgbG9nKCJQcm9jZXNzaW5nIHBhdGNoICVzIGZyb20gYnVnICVzLiIgJSAo
c3RhdGVbInBhdGNoIl1bImlkIl0sIHN0YXRlWyJwYXRjaCJdWyJidWdfaWQiXSkpCisgICAgICAg
IHNlbGYuX3Rvb2wuc2NtKCkuYXBwbHlfcGF0Y2goc3RhdGVbInBhdGNoIl0sIGZvcmNlPXNlbGYu
X29wdGlvbnMubm9uX2ludGVyYWN0aXZlKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNod2l0aGxvY2FsY29tbWl0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNod2l0aGxvY2FsY29tbWl0LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmFiMWEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2FwcGx5cGF0Y2h3aXRobG9j
YWxjb21taXQucHkKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
IAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20g
d2Via2l0cHkuc3RlcHMuYXBwbHlwYXRjaCBpbXBvcnQgQXBwbHlQYXRjaAorZnJvbSB3ZWJraXRw
eS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCisKK2NsYXNzIEFwcGx5UGF0Y2hXaXRoTG9j
YWxDb21taXQoQXBwbHlQYXRjaCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMo
Y2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMubG9jYWxfY29tbWl0
LAorICAgICAgICBdICsgQXBwbHlQYXRjaC5vcHRpb25zKCkKKworICAgIGRlZiBydW4oc2VsZiwg
c3RhdGUpOgorICAgICAgICBBcHBseVBhdGNoLnJ1bihzZWxmLCBzdGF0ZSkKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5sb2NhbF9jb21taXQ6CisgICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9
IHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0KCkKKyAgICAg
ICAgICAgIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKGNvbW1p
dF9tZXNzYWdlLm1lc3NhZ2UoKSBvciBzdGF0ZVsicGF0Y2giXVsibmFtZSJdKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9idWlsZC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTgyM2NmZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RlcHMvYnVpbGQucHkKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0
cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuc3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJv
bSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCisKKworY2xhc3MgQnVpbGQoQWJz
dHJhY3RTdGVwKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb3B0aW9ucyhjbHMpOgorICAg
ICAgICByZXR1cm4gWworICAgICAgICAgICAgT3B0aW9ucy5idWlsZCwKKyAgICAgICAgICAgIE9w
dGlvbnMucXVpZXQsCisgICAgICAgICAgICBPcHRpb25zLmJ1aWxkX3N0eWxlLAorICAgICAgICBd
CisKKyAgICBkZWYgYnVpbGQoc2VsZiwgYnVpbGRfc3R5bGUpOgorICAgICAgICBzZWxmLl90b29s
LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZi5wb3J0KCkuYnVpbGRfd2Via2l0
X2NvbW1hbmQoYnVpbGRfc3R5bGU9YnVpbGRfc3R5bGUpLCBzZWxmLl9vcHRpb25zLnF1aWV0KQor
CisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
LmJ1aWxkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxvZygiQnVpbGRpbmcgV2ViS2l0
IikKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5idWlsZF9zdHlsZSA9PSAiYm90aCI6CisgICAg
ICAgICAgICBzZWxmLmJ1aWxkKCJkZWJ1ZyIpCisgICAgICAgICAgICBzZWxmLmJ1aWxkKCJyZWxl
YXNlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYnVpbGQoc2VsZi5fb3B0aW9u
cy5idWlsZF9zdHlsZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3RlcHMvY2hlY2tzdHlsZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMv
Y2hlY2tzdHlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjM1YWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9j
aGVja3N0eWxlLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9t
IHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCisKK2NsYXNz
IENoZWNrU3R5bGUoQWJzdHJhY3RTdGVwKToKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAg
ICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiY2hlY2std2Via2l0LXN0eWxlIikKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xlYW53b3JraW5nZGlyZWN0b3J5
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbGVhbndvcmtpbmdkaXJl
Y3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlMzhmNQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xlYW53
b3JraW5nZGlyZWN0b3J5LnB5CkBAIC0wLDAgKzEsNTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1wb3J0IEFi
c3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCisK
KworY2xhc3MgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5KEFic3RyYWN0U3RlcCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMsIGFsbG93X2xvY2FsX2NvbW1pdHM9RmFsc2UpOgor
ICAgICAgICBBYnN0cmFjdFN0ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucykKKyAgICAg
ICAgc2VsZi5fYWxsb3dfbG9jYWxfY29tbWl0cyA9IGFsbG93X2xvY2FsX2NvbW1pdHMKKworICAg
IEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVybiBbCisg
ICAgICAgICAgICBPcHRpb25zLmZvcmNlX2NsZWFuLAorICAgICAgICAgICAgT3B0aW9ucy5jbGVh
biwKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIG9zLmNo
ZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgaWYgbm90IHNlbGYu
X2FsbG93X2xvY2FsX2NvbW1pdHM6CisgICAgICAgICAgICBzZWxmLl90b29sLnNjbSgpLmVuc3Vy
ZV9ub19sb2NhbF9jb21taXRzKHNlbGYuX29wdGlvbnMuZm9yY2VfY2xlYW4pCisgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMuY2xlYW46CisgICAgICAgICAgICBzZWxmLl90b29sLnNjbSgpLmVuc3Vy
ZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeShmb3JjZV9jbGVhbj1zZWxmLl9vcHRpb25zLmZvcmNl
X2NsZWFuKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9j
bGVhbndvcmtpbmdkaXJlY3Rvcnl3aXRobG9jYWxjb21taXRzLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9jbGVhbndvcmtpbmdkaXJlY3Rvcnl3aXRobG9jYWxjb21taXRz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYmViYTIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NsZWFud29ya2lu
Z2RpcmVjdG9yeXdpdGhsb2NhbGNvbW1pdHMucHkKQEAgLTAsMCArMSwzNCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuY2xlYW53b3JraW5nZGlyZWN0b3J5IGlt
cG9ydCBDbGVhbldvcmtpbmdEaXJlY3RvcnkKKworY2xhc3MgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5
V2l0aExvY2FsQ29tbWl0cyhDbGVhbldvcmtpbmdEaXJlY3RvcnkpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB0b29sLCBvcHRpb25zKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBhIGJpdCBvZiBh
IGhhY2suICBDb25zaWRlciBkb2luZyB0aGlzIG1vcmUgY2xlYW5seS4KKyAgICAgICAgQ2xlYW5X
b3JraW5nRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMsIGFsbG93X2xvY2Fs
X2NvbW1pdHM9VHJ1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3RlcHMvY2xvc2VidWcucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2Ns
b3NlYnVnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGIyMTMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2Nsb3Nl
YnVnLnB5CkBAIC0wLDAgKzEsNTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtp
dHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5
LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dp
bmcgaW1wb3J0IGxvZworCisKK2NsYXNzIENsb3NlQnVnKEFic3RyYWN0U3RlcCk6CisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAg
ICAgICAgIE9wdGlvbnMuY2xvc2VfYnVnLAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYs
IHN0YXRlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY2xvc2VfYnVnOgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBy
PyBvciByKyBwYXRjaGVzIG9uIHRoZSBidWcgYmVmb3JlIGNsb3NpbmcuCisgICAgICAgICMgQXNz
dW1lIHRoYXQgci0gcGF0Y2hlcyBhcmUganVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9y
Z290IHRvIG9ic29sZXRlLgorICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNo
X3BhdGNoZXNfZnJvbV9idWcoc3RhdGVbInBhdGNoIl1bImJ1Z19pZCJdKQorICAgICAgICBmb3Ig
cGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJy
ZXZpZXciKQorICAgICAgICAgICAgaWYgcmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFn
ID09ICIrIjoKKyAgICAgICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRh
Y2htZW50ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVz
IHRvIGxhbmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0s
IHJldmlld19mbGFnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fdG9v
bC5idWdzLmNsb3NlX2J1Z19hc19maXhlZChzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0sICJBbGwg
cmV2aWV3ZWQgcGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xvc2VidWdmb3JsYW5k
ZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xvc2VidWdmb3Js
YW5kZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDUyZmUyCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbG9z
ZWJ1Z2ZvcmxhbmRkaWZmLnB5CkBAIC0wLDAgKzEsNTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIHdlYmtpdHB5LmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90
ZXh0Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVw
Citmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0
cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworCisKK2NsYXNzIENsb3NlQnVnRm9yTGFuZERp
ZmYoQWJzdHJhY3RTdGVwKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb3B0aW9ucyhjbHMp
OgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgT3B0aW9ucy5jbG9zZV9idWcsCisgICAg
ICAgIF0KKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgorICAgICAgICBjb21tZW50X3RleHQg
PSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0KHNlbGYuX3Rvb2wuc2NtKCksIHN0YXRlWyJj
b21taXRfdGV4dCJdKQorICAgICAgICBidWdfaWQgPSBzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0K
KyAgICAgICAgaWYgYnVnX2lkOgorICAgICAgICAgICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUg
YnVnX2lkKQorICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jbG9zZV9idWc6CisgICAgICAg
ICAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsIGNvbW1l
bnRfdGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGEgc21hcnQgd2F5IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVk
CisgICAgICAgICAgICAgICAgIyB0byB0aGUgYnVnLCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCisg
ICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoYnVnX2lk
LCBjb21tZW50X3RleHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2coY29tbWVudF90
ZXh0KQorICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQuIikKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xvc2VwYXRjaC5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xvc2VwYXRjaC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFhNTYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbG9zZXBhdGNoLnB5CkBAIC0wLDAgKzEsMzYg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LmNvbW1lbnRzIGltcG9ydCBi
dWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0
c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCisKKworY2xhc3MgQ2xvc2VQYXRjaChBYnN0cmFjdFN0
ZXApOgorICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgorICAgICAgICBjb21tZW50X3RleHQgPSBi
dWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0KHNlbGYuX3Rvb2wuc2NtKCksIHN0YXRlWyJjb21t
aXRfdGV4dCJdKQorICAgICAgICBzZWxmLl90b29sLmJ1Z3MuY2xlYXJfYXR0YWNobWVudF9mbGFn
cyhzdGF0ZVsicGF0Y2giXVsiaWQiXSwgY29tbWVudF90ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jb21taXQucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0ZXBzL2NvbW1pdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZDFmZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9jb21taXQucHkKQEAgLTAsMCArMSwzNSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0
ZXAKKworCitjbGFzcyBDb21taXQoQWJzdHJhY3RTdGVwKToKKyAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBzZWxmLl90b29sLnNjbSgpLmNvbW1pdF9t
ZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpCisgICAgICAgIHN0YXRlWyJjb21taXRfdGV4dCJdID0g
IHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X3dpdGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNz
YWdlKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2Nv
bXBsZXRlcm9sbG91dC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY29t
cGxldGVyb2xsb3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODNk
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBz
L2NvbXBsZXRlcm9sbG91dC5weQpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworZnJvbSB3ZWJraXRweS5zdGVwcy5idWlsZCBpbXBvcnQgQnVpbGQKK2Zyb20gd2Via2l0cHku
c3RlcHMuY29tbWl0IGltcG9ydCBDb21taXQKK2Zyb20gd2Via2l0cHkuc3RlcHMubWV0YXN0ZXAg
aW1wb3J0IE1ldGFTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlv
bnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworCisKK2NsYXNzIENv
bXBsZXRlUm9sbG91dChNZXRhU3RlcCk6CisgICAgc3Vic3RlcHMgPSBbCisgICAgICAgIEJ1aWxk
LAorICAgICAgICBDb21taXQsCisgICAgXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9w
dGlvbnMoY2xzKToKKyAgICAgICAgY29sbGVjdGVkX29wdGlvbnMgPSBjbHMuX2NvbGxlY3Rfb3B0
aW9uc19mcm9tX3N0ZXBzKGNscy5zdWJzdGVwcykKKyAgICAgICAgY29sbGVjdGVkX29wdGlvbnMu
YXBwZW5kKE9wdGlvbnMuY29tcGxldGVfcm9sbG91dCkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3Rl
ZF9vcHRpb25zCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgYnVnX2lkID0g
c3RhdGVbImJ1Z19pZCJdCisgICAgICAgICMgRklYTUU6IEZ1bGx5IGF1dG9tYXRlZCByb2xsb3V0
IGlzIG5vdCAxMDAlIGlkaW90LXByb29mIHlldCwgc28gZm9yIG5vdyBqdXN0IGxvZyB3aXRoIGlu
c3RydWN0aW9ucyBvbiBob3cgdG8gY29tcGxldGUgdGhlIHJvbGxvdXQuCisgICAgICAgICMgT25j
ZSB3ZSB0cnVzdCByb2xsb3V0IHdlIHdpbGwgcmVtb3ZlIHRoaXMgb3B0aW9uLgorICAgICAgICBp
ZiBub3Qgc2VsZi5fb3B0aW9ucy5jb21wbGV0ZV9yb2xsb3V0OgorICAgICAgICAgICAgbG9nKCJc
bk5PVEU6IFJvbGxvdXQgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG5QbGVhc2UgdmVyaWZ5IHRo
ZSByb2xsb3V0IGRpZmYgYW5kIHVzZSBcImJ1Z3ppbGxhLXRvb2wgbGFuZC1kaWZmICVzXCIgdG8g
Y29tbWl0IHRoZSByb2xsb3V0LiIgJSBidWdfaWQpCisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBNZXRhU3RlcC5ydW4oc2VsZiwgc3RhdGUpCisKKyAgICAgICAgaWYgbm90IGJ1Z19pZDoK
KyAgICAgICAgICAgIGxvZyhzdGF0ZVsiY29tbWl0X3RleHQiXSkKKyAgICAgICAgICAgIGxvZygi
Tm8gYnVncyB3ZXJlIHVwZGF0ZWQgb3IgcmUtb3BlbmVkIHRvIHJlZmxlY3QgdGhpcyByb2xsb3V0
LiIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBGSVhNRTogSSdtIG5vdCBzdXJlIHN0
YXRlWyJjb21taXRfdGV4dCJdIGlzIHF1aXRlIHJpZ2h0IGhlcmUuCisgICAgICAgIHNlbGYuX3Rv
b2wuYnVncy5yZW9wZW5fYnVnKGJ1Z19pZCwgc3RhdGVbImNvbW1pdF90ZXh0Il0pCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NvbmZpcm1kaWZmLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jb25maXJtZGlmZi5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTI5OTAyCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jb25maXJtZGlmZi5weQpAQCAtMCww
ICsxLDQ3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0
cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25z
IGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtpdHB5LndlYmtpdF9sb2dnaW5nIGltcG9ydCBlcnJv
cgorCisKK2NsYXNzIENvbmZpcm1EaWZmKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9w
dGlvbnMuY29uZmlybSwKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmNvbmZpcm06CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImRpZmYiKQorICAgICAg
ICBzZWxmLl90b29sLnVzZXIucGFnZShkaWZmKQorICAgICAgICBpZiBub3Qgc2VsZi5fdG9vbC51
c2VyLmNvbmZpcm0oIldhcyB0aGF0IGRpZmYgY29ycmVjdD8iKToKKyAgICAgICAgICAgIGVycm9y
KCJVc2VyIGRlY2xpbmVkIHRvIGNvbnRpbnVlLiIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NyZWF0ZWJ1Zy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvY3JlYXRlYnVnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc1YmYxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL2NyZWF0ZWJ1Zy5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0
U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCisKKworY2xh
c3MgQ3JlYXRlQnVnKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9w
dGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMuY2MsCisg
ICAgICAgICAgICBPcHRpb25zLmNvbXBvbmVudCwKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihz
ZWxmLCBzdGF0ZSk6CisgICAgICAgICMgTm8gbmVlZCB0byBjcmVhdGUgYSBidWcgaWYgd2UgYWxy
ZWFkeSBoYXZlIG9uZS4KKyAgICAgICAgaWYgc3RhdGUuZ2V0KCJidWdfaWQiKToKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzdGF0ZVsiYnVnX2lkIl0gPSBzZWxmLl90b29sLmJ1Z3MuY3Jl
YXRlX2J1ZyhzdGF0ZVsiYnVnX3RpdGxlIl0sIHN0YXRlWyJidWdfZGVzY3JpcHRpb24iXSwgY29t
cG9uZW50PXNlbGYuX29wdGlvbnMuY29tcG9uZW50LCBjYz1zZWxmLl9vcHRpb25zLmNjKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lZGl0Y2hhbmdlbG9n
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lZGl0Y2hhbmdlbG9nLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjdkNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2VkaXRjaGFuZ2Vsb2cu
cHkKQEAgLTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHku
c3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCitjbGFzcyBFZGl0Q2hh
bmdlTG9nKEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAg
IHNlbGYuX3Rvb2wudXNlci5lZGl0KHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImNoYW5nZWxv
Z3MiKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvZW5z
dXJlYnVpbGRlcnNhcmVncmVlbi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3Rl
cHMvZW5zdXJlYnVpbGRlcnNhcmVncmVlbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45NmYyNjVhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9lbnN1cmVidWlsZGVyc2FyZWdyZWVuLnB5CkBAIC0wLDAgKzEsNDggQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBp
bXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9w
dGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGVycm9yCisKKworY2xh
c3MgRW5zdXJlQnVpbGRlcnNBcmVHcmVlbihBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBP
cHRpb25zLmNoZWNrX2J1aWxkZXJzLAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY2hlY2tfYnVpbGRlcnM6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgcmVkX2J1aWxkZXJzX25hbWVzID0gc2VsZi5fdG9vbC5i
dWlsZGJvdC5yZWRfY29yZV9idWlsZGVyc19uYW1lcygpCisgICAgICAgIGlmIG5vdCByZWRfYnVp
bGRlcnNfbmFtZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmVkX2J1aWxkZXJzX25h
bWVzID0gbWFwKGxhbWJkYSBuYW1lOiAiXCIlc1wiIiAlIG5hbWUsIHJlZF9idWlsZGVyc19uYW1l
cykgIyBBZGQgcXVvdGVzIGFyb3VuZCB0aGUgbmFtZXMuCisgICAgICAgIGVycm9yKCJCdWlsZGVy
cyBbJXNdIGFyZSByZWQsIHBsZWFzZSBkbyBub3QgY29tbWl0LlxuU2VlIGh0dHA6Ly8lcy5cblBh
c3MgLS1pZ25vcmUtYnVpbGRlcnMgdG8gYnlwYXNzIHRoaXMgY2hlY2suIiAlICgiLCAiLmpvaW4o
cmVkX2J1aWxkZXJzX25hbWVzKSwgc2VsZi5fdG9vbC5idWlsZGJvdC5idWlsZGJvdF9ob3N0KSkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlbG9j
YWxjb21taXRpZm5lZWRlZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMv
ZW5zdXJlbG9jYWxjb21taXRpZm5lZWRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jZWNmODkxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9lbnN1cmVsb2NhbGNvbW1pdGlmbmVlZGVkLnB5CkBAIC0wLDAgKzEsNDMg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3Rl
cCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0
IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGVycm9yCisKKwor
Y2xhc3MgRW5zdXJlTG9jYWxDb21taXRJZk5lZWRlZChBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAg
ICAgICBPcHRpb25zLmxvY2FsX2NvbW1pdCwKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxm
LCBzdGF0ZSk6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMubG9jYWxfY29tbWl0IGFuZCBub3Qg
c2VsZi5fdG9vbC5zY20oKS5zdXBwb3J0c19sb2NhbF9jb21taXRzKCk6CisgICAgICAgICAgICBl
cnJvcigiLS1sb2NhbC1jb21taXQgcGFzc2VkLCBidXQgJXMgZG9lcyBub3Qgc3VwcG9ydCBsb2Nh
bCBjb21taXRzIiAlIHNlbGYuX3Rvb2wuc2NtLmRpc3BsYXlfbmFtZSgpKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9tZXRhc3RlcC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvbWV0YXN0ZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOWYzNjhkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvbWV0YXN0ZXAucHkKQEAgLTAsMCArMSw1NCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9y
dCBBYnN0cmFjdFN0ZXAKKworCisjIEZJWE1FOiBVbmlmeSB3aXRoIFN0ZXBTZXF1ZW5jZT8gIEkn
bSBub3Qgc3VyZSB5ZXQgd2hpY2ggaXMgdGhlIGJldHRlciBkZXNpZ24uCitjbGFzcyBNZXRhU3Rl
cChBYnN0cmFjdFN0ZXApOgorICAgIHN1YnN0ZXBzID0gW10gIyBPdmVycmlkZSBpbiBzdWJjbGFz
c2VzCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMpOgorICAgICAgICBBYnN0
cmFjdFN0ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5fc3Rl
cF9pbnN0YW5jZXMgPSBbXQorICAgICAgICBmb3Igc3RlcF9jbGFzcyBpbiBzZWxmLnN1YnN0ZXBz
OgorICAgICAgICAgICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMuYXBwZW5kKHN0ZXBfY2xhc3ModG9v
bCwgb3B0aW9ucykpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jb2xsZWN0X29wdGlv
bnNfZnJvbV9zdGVwcyhzdGVwcyk6CisgICAgICAgIGNvbGxlY3RlZF9vcHRpb25zID0gW10KKyAg
ICAgICAgZm9yIHN0ZXAgaW4gc3RlcHM6CisgICAgICAgICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9
IGNvbGxlY3RlZF9vcHRpb25zICsgc3RlcC5vcHRpb25zKCkKKyAgICAgICAgcmV0dXJuIGNvbGxl
Y3RlZF9vcHRpb25zCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb3B0aW9ucyhjbHMpOgor
ICAgICAgICByZXR1cm4gY2xzLl9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVwcyhjbHMuc3Vic3Rl
cHMpCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgZm9yIHN0ZXAgaW4gc2Vs
Zi5fc3RlcF9pbnN0YW5jZXM6CisgICAgICAgICAgICAgc3RlcC5ydW4oc3RhdGUpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvb2Jzb2xldGVwYXRjaGVzLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzY0MzEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL29ic29sZXRlcGF0Y2hl
cy5weQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRw
eS5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3Rz
dGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuc3RlcHMub3B0aW9ucyBpbXBv
cnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCisKKwor
Y2xhc3MgT2Jzb2xldGVQYXRjaGVzKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlv
bnMub2Jzb2xldGVfcGF0Y2hlcywKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0
ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLm9ic29sZXRlX3BhdGNoZXM6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgYnVnX2lkID0gc3RhdGVbImJ1Z19pZCJdCisgICAgICAg
IHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfcGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQp
CisgICAgICAgIGlmIG5vdCBwYXRjaGVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxv
ZygiT2Jzb2xldGluZyAlcyBvbiBidWcgJXMiICUgKHBsdXJhbGl6ZSgib2xkIHBhdGNoIiwgbGVu
KHBhdGNoZXMpKSwgYnVnX2lkKSkKKyAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAg
ICAgICAgICBzZWxmLl90b29sLmJ1Z3Mub2Jzb2xldGVfYXR0YWNobWVudChwYXRjaFsiaWQiXSkK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvb3B0aW9ucy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvb3B0aW9ucy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNiZTFlCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9vcHRpb25zLnB5CkBAIC0wLDAgKzEs
NTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29w
dGlvbgorCitjbGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgZm9yY2VfY2xlYW4gPSBtYWtlX29w
dGlvbigiLS1mb3JjZS1jbGVhbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlX2Ns
ZWFuIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iQ2xlYW4gd29ya2luZyBkaXJlY3RvcnkgYmVmb3Jl
IGFwcGx5aW5nIHBhdGNoZXMgKHJlbW92ZXMgbG9jYWwgY2hhbmdlcyBhbmQgY29tbWl0cykiKQor
ICAgIGNsZWFuID0gbWFrZV9vcHRpb24oIi0tbm8tY2xlYW4iLCBhY3Rpb249InN0b3JlX2ZhbHNl
IiwgZGVzdD0iY2xlYW4iLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIGlmIHRoZSB3
b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlcyIpCisgICAg
Y2hlY2tfYnVpbGRlcnMgPSBtYWtlX29wdGlvbigiLS1pZ25vcmUtYnVpbGRlcnMiLCBhY3Rpb249
InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2hlY2tfYnVpbGRlcnMiLCBkZWZhdWx0PVRydWUsIGhlbHA9
IkRvbid0IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVpbGQud2Via2l0Lm9yZyBidWlsZGVycyBhcmUg
Z3JlZW4gYmVmb3JlIGxhbmRpbmcuIikKKyAgICBxdWlldCA9IG1ha2Vfb3B0aW9uKCItLXF1aWV0
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icXVpZXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxw
PSJQcm9kdWNlIGxlc3MgY29uc29sZSBvdXRwdXQuIikKKyAgICBub25faW50ZXJhY3RpdmUgPSBt
YWtlX29wdGlvbigiLS1ub24taW50ZXJhY3RpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0
PSJub25faW50ZXJhY3RpdmUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJOZXZlciBwcm9tcHQgdGhl
IHVzZXIsIGZhaWwgYXMgZmFzdCBhcyBwb3NzaWJsZS4iKQorICAgIHBhcmVudF9jb21tYW5kID0g
bWFrZV9vcHRpb24oIi0tcGFyZW50LWNvbW1hbmQiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0icGFy
ZW50X2NvbW1hbmQiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IihJbnRlcm5hbCkgVGhlIGNvbW1hbmQg
dGhhdCBzcGF3bmVkIHRoaXMgaW5zdGFuY2UuIikKKyAgICB1cGRhdGUgPSBtYWtlX29wdGlvbigi
LS1uby11cGRhdGUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idXBkYXRlIiwgZGVmYXVs
dD1UcnVlLCBoZWxwPSJEb24ndCB1cGRhdGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIpCisgICAg
bG9jYWxfY29tbWl0ID0gbWFrZV9vcHRpb24oIi0tbG9jYWwtY29tbWl0IiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwgZGVzdD0ibG9jYWxfY29tbWl0IiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iTWFrZSBh
IGxvY2FsIGNvbW1pdCBmb3IgZWFjaCBhcHBsaWVkIHBhdGNoIikKKyAgICBidWlsZCA9IG1ha2Vf
b3B0aW9uKCItLW5vLWJ1aWxkIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImJ1aWxkIiwg
ZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91dCBidWlsZGluZyBmaXJzdCwgaW1wbGll
cyAtLW5vLXRlc3QuIikKKyAgICBidWlsZF9zdHlsZSA9IG1ha2Vfb3B0aW9uKCItLWJ1aWxkLXN0
eWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxkX3N0eWxlIiwgZGVmYXVsdD1Ob25lLCBo
ZWxwPSJXaGV0aGVyIHRvIGJ1aWxkIGRlYnVnLCByZWxlYXNlLCBvciBib3RoLiIpCisgICAgdGVz
dCA9IG1ha2Vfb3B0aW9uKCItLW5vLXRlc3QiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0i
dGVzdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iQ29tbWl0IHdpdGhvdXQgcnVubmluZyBydW4td2Vi
a2l0LXRlc3RzLiIpCisgICAgY2xvc2VfYnVnID0gbWFrZV9vcHRpb24oIi0tbm8tY2xvc2UiLCBh
Y3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xvc2VfYnVnIiwgZGVmYXVsdD1UcnVlLCBoZWxw
PSJMZWF2ZSBidWcgb3BlbiBhZnRlciBsYW5kaW5nLiIpCisgICAgcG9ydCA9IG1ha2Vfb3B0aW9u
KCItLXBvcnQiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0icG9ydCIsIGRlZmF1bHQ9Tm9uZSwgaGVs
cD0iU3BlY2lmeSBhIHBvcnQgKGUuZy4sIG1hYywgcXQsIGd0aywgLi4uKS4iKQorICAgIHJldmll
d2VyID0gbWFrZV9vcHRpb24oIi1yIiwgIi0tcmV2aWV3ZXIiLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT0ic3RyaW5nIiwgZGVzdD0icmV2aWV3ZXIiLCBoZWxwPSJVcGRhdGUgQ2hhbmdlTG9ncyB0byBz
YXkgUmV2aWV3ZWQgYnkgUkVWSUVXRVIuIikKKyAgICBjb21wbGV0ZV9yb2xsb3V0ID0gbWFrZV9v
cHRpb24oIi0tY29tcGxldGUtcm9sbG91dCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImNv
bXBsZXRlX3JvbGxvdXQiLCBoZWxwPSJDb21taXQgdGhlIHJldmVydCBhbmQgcmUtb3BlbiB0aGUg
b3JpZ2luYWwgYnVnLiIpCisgICAgb2Jzb2xldGVfcGF0Y2hlcyA9IG1ha2Vfb3B0aW9uKCItLW5v
LW9ic29sZXRlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9Im9ic29sZXRlX3BhdGNoZXMi
LCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBvYnNvbGV0ZSBvbGQgcGF0Y2hlcyBiZWZvcmUg
cG9zdGluZyB0aGlzIG9uZS4iKQorICAgIHJldmlldyA9IG1ha2Vfb3B0aW9uKCItLW5vLXJldmll
dyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRydWUsIGhl
bHA9IkRvIG5vdCBtYXJrIHRoZSBwYXRjaCBmb3IgcmV2aWV3LiIpCisgICAgcmVxdWVzdF9jb21t
aXQgPSBtYWtlX29wdGlvbigiLS1yZXF1ZXN0LWNvbW1pdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGRlc3Q9InJlcXVlc3RfY29tbWl0IiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iTWFyayB0aGUgcGF0
Y2ggYXMgbmVlZGluZyBhdXRvLWNvbW1pdCBhZnRlciByZXZpZXcuIikKKyAgICBkZXNjcmlwdGlv
biA9IG1ha2Vfb3B0aW9uKCItbSIsICItLWRlc2NyaXB0aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5
cGU9InN0cmluZyIsIGRlc3Q9ImRlc2NyaXB0aW9uIiwgaGVscD0iRGVzY3JpcHRpb24gc3RyaW5n
IGZvciB0aGUgYXR0YWNobWVudCAoZGVmYXVsdDogXCJwYXRjaFwiKSIpCisgICAgY2MgPSBtYWtl
X29wdGlvbigiLS1jYyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJjYyIs
IGhlbHA9IkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byBjYXJib24t
Y29weS4iKQorICAgIGNvbXBvbmVudCA9IG1ha2Vfb3B0aW9uKCItLWNvbXBvbmVudCIsIGFjdGlv
bj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJjb21wb25lbnQiLCBoZWxwPSJDb21wb25l
bnQgZm9yIHRoZSBuZXcgYnVnLiIpCisgICAgY29uZmlybSA9IG1ha2Vfb3B0aW9uKCItLW5vLWNv
bmZpcm0iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY29uZmlybSIsIGRlZmF1bHQ9VHJ1
ZSwgaGVscD0iU2tpcCBjb25maXJtYXRpb24gc3RlcHMuIikKKyAgICBlbWFpbCA9IG1ha2Vfb3B0
aW9uKCItLWVtYWlsIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImVtYWls
IiwgaGVscD0iRW1haWwgYWRkcmVzcyB0byB1c2UgaW4gQ2hhbmdlTG9ncy4iKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wb3N0ZGlmZi5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcG9zdGRpZmYucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkMzM0NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcG9zdGRpZmYucHkKQEAgLTAsMCArMSw0OCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBTdHJpbmdJTworCitmcm9tIHdlYmtpdHB5LnN0
ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBz
Lm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKKworCitjbGFzcyBQb3N0RGlmZihBYnN0cmFjdFN0ZXAp
OgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVy
biBbCisgICAgICAgICAgICBPcHRpb25zLmRlc2NyaXB0aW9uLAorICAgICAgICAgICAgT3B0aW9u
cy5yZXZpZXcsCisgICAgICAgICAgICBPcHRpb25zLnJlcXVlc3RfY29tbWl0LAorICAgICAgICBd
CisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVk
X2xvb2t1cChzdGF0ZSwgImRpZmYiKQorICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJp
bmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QK
KyAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLl9vcHRpb25zLmRlc2NyaXB0aW9uIG9yICJQYXRj
aCIKKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmFkZF9wYXRjaF90b19idWcoc3RhdGVbImJ1Z19p
ZCJdLCBkaWZmX2ZpbGUsIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZpZXc9c2VsZi5fb3B0aW9u
cy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1zZWxmLl9vcHRpb25zLnJlcXVlc3RfY29t
bWl0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wcmVw
YXJlY2hhbmdlbG9nLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wcmVw
YXJlY2hhbmdlbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDFm
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBz
L3ByZXBhcmVjaGFuZ2Vsb2cucHkKQEAgLTAsMCArMSw1OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJy
b3IKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAK
K2Zyb20gd2Via2l0cHkuc3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRw
eS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IKKworCitjbGFzcyBQcmVwYXJlQ2hhbmdlTG9n
KEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToK
KyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMucG9ydCwKKyAgICAgICAgICAg
IE9wdGlvbnMucXVpZXQsCisgICAgICAgICAgICBPcHRpb25zLmVtYWlsLAorICAgICAgICBdCisK
KyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgc2VsZi5jYWNoZWRfbG9va3Vw
KHN0YXRlLCAiY2hhbmdlbG9ncyIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG9zLmNo
ZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgYXJncyA9IFtzZWxm
LnBvcnQoKS5zY3JpcHRfcGF0aCgicHJlcGFyZS1DaGFuZ2VMb2ciKV0KKyAgICAgICAgaWYgc3Rh
dGVbImJ1Z19pZCJdOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tYnVnPSVzIiAlIHN0YXRl
WyJidWdfaWQiXSkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5lbWFpbDoKKyAgICAgICAgICAg
IGFyZ3MuYXBwZW5kKCItLWVtYWlsPSVzIiAlIHNlbGYuX29wdGlvbnMuZW1haWwpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZf
ZmFpbChhcmdzLCBzZWxmLl9vcHRpb25zLnF1aWV0KQorICAgICAgICBleGNlcHQgU2NyaXB0RXJy
b3IsIGU6CisgICAgICAgICAgICBlcnJvcigiVW5hYmxlIHRvIHByZXBhcmUgQ2hhbmdlTG9ncy4i
KQorICAgICAgICBzdGF0ZVsiZGlmZiJdID0gTm9uZSAjIFdlJ3ZlIGNoYW5nZWQgdGhlIGRpZmYK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcHJlcGFyZWNo
YW5nZWxvZ2ZvcnJldmVydC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMv
cHJlcGFyZWNoYW5nZWxvZ2ZvcnJldmVydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45OWYzOTJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nZm9ycmV2ZXJ0LnB5CkBAIC0wLDAgKzEsNDYg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5jaGFu
Z2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVw
IGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCitjbGFzcyBQcmVwYXJlQ2hhbmdlTG9nRm9yUmV2ZXJ0
KEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgICMgRmly
c3QsIGRpc2NhcmQgdGhlIENoYW5nZUxvZyBjaGFuZ2VzIGZyb20gdGhlIHJvbGxvdXQuCisgICAg
ICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgY2hh
bmdlbG9nX3BhdGhzID0gc2VsZi5fdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkKKyAg
ICAgICAgc2VsZi5fdG9vbC5zY20oKS5yZXZlcnRfZmlsZXMoY2hhbmdlbG9nX3BhdGhzKQorCisg
ICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFuZ2VMb2cgZW50cmllcyBmb3IgdGhpcyByb2xs
b3V0LgorICAgICAgICAjIFRoaXMgY291bGQgbW92ZSB0byBwcmVwYXJlLUNoYW5nZUxvZyBieSBh
ZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgorICAgICAgICBzZWxmLl9ydW5fc2NyaXB0KCJwcmVw
YXJlLUNoYW5nZUxvZyIpCisgICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBjaGFuZ2Vsb2df
cGF0aHM6CisgICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLnVwZGF0ZV9mb3Jf
cmV2ZXJ0KHN0YXRlWyJyZXZpc2lvbiJdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdGVwcy9wcm9tcHRmb3JidWdvcnRpdGxlLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9wcm9tcHRmb3JidWdvcnRpdGxlLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMmY4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3Byb21wdGZvcmJ1Z29ydGl0bGUucHkKQEAgLTAs
MCArMSw0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJz
dHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCitjbGFzcyBQcm9tcHRGb3JCdWdPclRp
dGxlKEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgICMg
Tm8gbmVlZCB0byBwcm9tcHQgaWYgd2UgYWxyYWR5IGhhdmUgdGhlIGJ1Z19pZC4KKyAgICAgICAg
aWYgc3RhdGUuZ2V0KCJidWdfaWQiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB1c2Vy
X3Jlc3BvbnNlID0gc2VsZi5fdG9vbC51c2VyLnByb21wdCgiUGxlYXNlIGVudGVyIGEgYnVnIG51
bWJlciBvciBhIHRpdGxlIGZvciBhIG5ldyBidWc6XG4iKQorICAgICAgICAjIElmIHRoZSB1c2Vy
IHJlc3BvbmRzIHdpdGggYSBudW1iZXIsIHdlIGFzc3VtZSBpdCdzIGJ1ZyBudW1iZXIuCisgICAg
ICAgICMgT3RoZXJ3aXNlIHdlIGFzc3VtZSBpdCdzIGEgYnVnIHN1YmplY3QuCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHN0YXRlWyJidWdfaWQiXSA9IGludCh1c2VyX3Jlc3BvbnNlKQorICAg
ICAgICBleGNlcHQgVmFsdWVFcnJvciwgVHlwZUVycm9yOgorICAgICAgICAgICAgc3RhdGVbImJ1
Z190aXRsZSJdID0gdXNlcl9yZXNwb25zZQorICAgICAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBr
aW5kIG9mIGEgbGFtZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgIHN0YXRlWyJidWdfZGVzY3Jp
cHRpb24iXSA9IHVzZXJfcmVzcG9uc2UKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvcmV2ZXJ0cmV2aXNpb24ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmNlNmMyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQg
QWJzdHJhY3RTdGVwCisKKworY2xhc3MgUmV2ZXJ0UmV2aXNpb24oQWJzdHJhY3RTdGVwKToKKyAg
ICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hcHBseV9y
ZXZlcnNlX2RpZmYoc3RhdGVbInJldmlzaW9uIl0pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3J1bnRlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9ydW50ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kYTBhNjkxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdGVwcy9ydW50ZXN0cy5weQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0U3Rl
cAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCisKK2NsYXNzIFJ1
blRlc3RzKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMo
Y2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMuYnVpbGQsCisgICAg
ICAgICAgICBPcHRpb25zLnRlc3QsCisgICAgICAgICAgICBPcHRpb25zLm5vbl9pbnRlcmFjdGl2
ZSwKKyAgICAgICAgICAgIE9wdGlvbnMucXVpZXQsCisgICAgICAgICAgICBPcHRpb25zLnBvcnQs
CisgICAgICAgIF0KKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fb3B0aW9ucy5idWlsZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qg
c2VsZi5fb3B0aW9ucy50ZXN0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFyZ3MgPSBz
ZWxmLnBvcnQoKS5ydW5fd2Via2l0X3Rlc3RzX2NvbW1hbmQoKQorICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLm5vbl9pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLW5vLWxh
dW5jaC1zYWZhcmkiKQorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tZXhpdC1hZnRlci1uLWZh
aWx1cmVzPTEiKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnF1aWV0OgorICAgICAgICAgICAg
YXJncy5hcHBlbmQoIi0tcXVpZXQiKQorICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5f
YW5kX3Rocm93X2lmX2ZhaWwoYXJncykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvc3RlcHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjNlNmEwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5zdGVwcy51
cGRhdGUgaW1wb3J0IFVwZGF0ZQorZnJvbSB3ZWJraXRweS5zdGVwcy5wcm9tcHRmb3JidWdvcnRp
dGxlIGltcG9ydCBQcm9tcHRGb3JCdWdPclRpdGxlCitmcm9tIHdlYmtpdHB5Lm1vY2tfYnVnemls
bGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCitmcm9tIHdlYmtpdHB5Lm91dHB1dGNhcHR1
cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0cHkubW9jayBpbXBvcnQgTW9jawor
CisKK2NsYXNzIFN0ZXBzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9ydW5fc3Rl
cChzZWxmLCBzdGVwLCB0b29sPU5vbmUsIG9wdGlvbnM9Tm9uZSwgc3RhdGU9Tm9uZSk6CisgICAg
ICAgIGlmIG5vdCB0b29sOgorICAgICAgICAgICAgdG9vbCA9IE1vY2tCdWd6aWxsYVRvb2woKQor
ICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgIG9wdGlvbnMgPSBNb2NrKCkKKyAg
ICAgICAgaWYgbm90IHN0YXRlOgorICAgICAgICAgICAgc3RhdGUgPSB7fQorICAgICAgICBzdGVw
KHRvb2wsIG9wdGlvbnMpLnJ1bihzdGF0ZSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV9zdGVwKHNl
bGYpOgorICAgICAgICBvcHRpb25zID0gTW9jaygpCisgICAgICAgIG9wdGlvbnMudXBkYXRlID0g
VHJ1ZQorICAgICAgICBzZWxmLl9ydW5fc3RlcChVcGRhdGUsIG9wdGlvbnMpCisKKyAgICBkZWYg
dGVzdF9wcm9tcHRfZm9yX2J1Z19vcl90aXRsZV9zdGVwKHNlbGYpOgorICAgICAgICB0b29sID0g
TW9ja0J1Z3ppbGxhVG9vbCgpCisgICAgICAgIHRvb2wudXNlci5wcm9tcHQgPSBsYW1iZGEgbWVz
c2FnZTogNDIKKyAgICAgICAgc2VsZi5fcnVuX3N0ZXAoUHJvbXB0Rm9yQnVnT3JUaXRsZSwgdG9v
bD10b29sKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy91
cGRhdGUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3VwZGF0ZS5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjQ1NjcxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy91cGRhdGUucHkKQEAgLTAs
MCArMSw0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJz
dHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuc3RlcHMub3B0aW9u
cyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9n
CisKKworY2xhc3MgVXBkYXRlKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMu
dXBkYXRlLAorICAgICAgICAgICAgT3B0aW9ucy5wb3J0LAorICAgICAgICBdCisKKyAgICBkZWYg
cnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMudXBkYXRlOgor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxvZygiVXBkYXRpbmcgd29ya2luZyBkaXJlY3Rv
cnkiKQorICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
c2VsZi5wb3J0KCkudXBkYXRlX3dlYmtpdF9jb21tYW5kKCksIHF1aWV0PVRydWUpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3VwZGF0ZWNoYW5nZWxvZ3N3
aXRocmV2aWV3X3VuaXR0ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3Rl
cHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdfdW5pdHRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGFhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3VwZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3X3Vu
aXR0ZXN0cy5weQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0
ZXN0CisKK2Zyb20gd2Via2l0cHkuc3RlcHMudXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlciBp
bXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlcgorZnJvbSB3ZWJraXRweS5tb2NrX2J1
Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9vbAorZnJvbSB3ZWJraXRweS5vdXRwdXRj
YXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCisKK2NsYXNzIFVwZGF0ZUNoYW5nZUxvZ3NXaXRo
UmV2aWV3ZXJTdGVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ3Vlc3Nf
cmV2aWV3ZXJfZnJvbV9idWcoc2VsZik6CisgICAgICAgIGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJl
KCkKKyAgICAgICAgc3RlcCA9IFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXIoTW9ja0J1Z3pp
bGxhVG9vbCgpLCBbXSkKKyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIjAgcmV2aWV3ZWQgcGF0
Y2hlcyBvbiBidWcgNzUsIGNhbm5vdCBpbmZlciByZXZpZXdlci5cbiIKKyAgICAgICAgY2FwdHVy
ZS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBzdGVwLl9ndWVzc19yZXZpZXdlcl9mcm9tX2J1ZywgWzc1
XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlci5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dp
dGhyZXZpZXdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGRmMjA0
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy91
cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5CkBAIC0wLDAgKzEsNjkgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9y
dCBDaGFuZ2VMb2cKK2Zyb20gd2Via2l0cHkuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCitmcm9t
IHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdl
YmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0
X2xvZ2dpbmcgaW1wb3J0IGxvZywgZXJyb3IKKworY2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhS
ZXZpZXdlcihBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25z
KGNscyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBPcHRpb25zLnJldmlld2VyLAor
ICAgICAgICBdCisKKyAgICBkZWYgX2d1ZXNzX3Jldmlld2VyX2Zyb21fYnVnKHNlbGYsIGJ1Z19p
ZCk6CisgICAgICAgIHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hfcmV2aWV3ZWRfcGF0
Y2hlc19mcm9tX2J1ZyhidWdfaWQpCisgICAgICAgIGlmIGxlbihwYXRjaGVzKSAhPSAxOgorICAg
ICAgICAgICAgbG9nKCIlcyBvbiBidWcgJXMsIGNhbm5vdCBpbmZlciByZXZpZXdlci4iICUgKHBs
dXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBidWdfaWQpKQorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcGF0Y2ggPSBwYXRjaGVzWzBdCisgICAgICAgIHJl
dmlld2VyID0gcGF0Y2hbInJldmlld2VyIl0KKyAgICAgICAgbG9nKCJHdWVzc2luZyBcIiVzXCIg
YXMgcmV2aWV3ZXIgZnJvbSBhdHRhY2htZW50ICVzIG9uIGJ1ZyAlcy4iICUgKHJldmlld2VyLCBw
YXRjaFsiaWQiXSwgYnVnX2lkKSkKKyAgICAgICAgcmV0dXJuIHJldmlld2VyCisKKyAgICBkZWYg
cnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgYnVnX2lkID0gc3RhdGVbInBhdGNoIl1bImJ1Z19p
ZCJdCisgICAgICAgIHJldmlld2VyID0gc2VsZi5fb3B0aW9ucy5yZXZpZXdlcgorICAgICAgICBp
ZiBub3QgcmV2aWV3ZXI6CisgICAgICAgICAgICBpZiBub3QgYnVnX2lkOgorICAgICAgICAgICAg
ICAgIGxvZygiTm8gYnVnIGlkIHByb3ZpZGVkIGFuZCAtLXJldmlld2VyPSBub3QgcHJvdmlkZWQu
ICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9ncyB3aXRoIHJldmlld2VyLiIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICByZXZpZXdlciA9IHNlbGYuX2d1ZXNzX3Jldmlld2VyX2Zy
b21fYnVnKGJ1Z19pZCkKKworICAgICAgICBpZiBub3QgcmV2aWV3ZXI6CisgICAgICAgICAgICBs
b2coIkZhaWxlZCB0byBndWVzcyByZXZpZXdlciBmcm9tIGJ1ZyAlcyBhbmQgLS1yZXZpZXdlcj0g
bm90IHByb3ZpZGVkLiAgTm90IHVwZGF0aW5nIENoYW5nZUxvZ3Mgd2l0aCByZXZpZXdlci4iICUg
YnVnX2lkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5fdG9v
bC5zY20oKS5jaGVja291dF9yb290KQorICAgICAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gc2Vs
Zi5fdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCk6CisgICAgICAgICAgICBDaGFuZ2VM
b2coY2hhbmdlbG9nX3BhdGgpLnNldF9yZXZpZXdlcihyZXZpZXdlcikKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHNlcXVlbmNlLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHkKaW5kZXggYjdlNTQ0YS4uMDA4YjM2NiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHkKQEAgLTI2
LDcgKzI2LDggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWZyb20gd2Via2l0
cHkuYnVpbGRzdGVwcyBpbXBvcnQgQ29tbWFuZE9wdGlvbnMKK2ltcG9ydCB3ZWJraXRweS5zdGVw
cyBhcyBzdGVwcworCiBmcm9tIHdlYmtpdHB5LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IK
IGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZwogZnJvbSB3ZWJraXRweS5z
Y20gaW1wb3J0IENoZWNrb3V0TmVlZHNVcGRhdGUKQEAgLTQ1LDggKzQ2LDggQEAgY2xhc3MgU3Rl
cFNlcXVlbmNlKG9iamVjdCk6CiAKICAgICBkZWYgb3B0aW9ucyhzZWxmKToKICAgICAgICAgY29s
bGVjdGVkX29wdGlvbnMgPSBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5wYXJlbnRfY29t
bWFuZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAorICAgICAgICAgICAgc3Rl
cHMuT3B0aW9ucy5wYXJlbnRfY29tbWFuZCwKKyAgICAgICAgICAgIHN0ZXBzLk9wdGlvbnMucXVp
ZXQsCiAgICAgICAgIF0KICAgICAgICAgZm9yIHN0ZXAgaW4gc2VsZi5fc3RlcHM6CiAgICAgICAg
ICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9IGNvbGxlY3RlZF9vcHRpb25zICsgc3RlcC5vcHRpb25z
KCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45774</attachid>
            <date>2010-01-04 00:43:31 -0800</date>
            <delta_ts>2010-01-04 00:45:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33135-20100104004329.patch</filename>
            <type>text/plain</type>
            <size>122691</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiMTk1MGE0Li44MWJiMmNjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTAtMDEt
MDQgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbYnp0XSBNb3ZlIHN0ZXBzIHRvIGEgc3VibW9k
dWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzEz
NQorCisgICAgICAgIEZvciBncmVhdCB2aWN0b3J5LiAgVGhpcyB3aWxsIHByb2JhYmx5IGludHJv
ZHVjZSBzb21lIHJlZ3Jlc3Npb25zCisgICAgICAgIGJlY2F1c2Ugb3VyIHRlc3QgY292ZXJhZ2Ug
aXNuJ3QgcGVyZmVjdCwgYnV0IEkndmUgdHJpZWQgdG8gYmUgY2FyZWZ1bC4KKworICAgICAgICAq
IFNjcmlwdHMvdGVzdC13ZWJraXRweToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2J1aWxk
c3RlcHMucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbWFuZHMvZG93bmxv
YWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvYXBwbHlwYXRjaC5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNod2l0aGxvY2FsY29tbWl0LnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2J1aWxkLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NoZWNrc3R5bGUucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xlYW53b3JraW5nZGlyZWN0b3J5
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NsZWFud29ya2lu
Z2RpcmVjdG9yeXdpdGhsb2NhbGNvbW1pdHMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3RlcHMvY2xvc2VidWcucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3RlcHMvY2xvc2VidWdmb3JsYW5kZGlmZi5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9jbG9zZXBhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0ZXBzL2NvbW1pdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdGVwcy9jb21wbGV0ZXJvbGxvdXQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvY29uZmlybWRpZmYucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvY3JlYXRlYnVnLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0ZXBzL2VkaXRjaGFuZ2Vsb2cucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlYnVpbGRlcnNhcmVncmVlbi5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lbnN1cmVsb2NhbGNvbW1pdGlmbmVlZGVkLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL21ldGFzdGVwLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9vcHRpb25zLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3Bvc3RkaWZmLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3ByZXBhcmVjaGFuZ2Vsb2cucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvcHJlcGFyZWNoYW5nZWxv
Z2ZvcnJldmVydC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwcy9w
cm9tcHRmb3JidWdvcnRpdGxlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL3J1bnRlc3RzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL3VwZGF0ZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld191bml0dGVzdHMucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdl
ci5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHk6
CisKIDIwMTAtMDEtMDQgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy90ZXN0LXdlYmtpdHB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5Cmlu
ZGV4IGU5MTljODEuLmQzZjUxMWIgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVz
dC13ZWJraXRweQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKQEAgLTMy
LDcgKzMyLDYgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuYnVnemlsbGFfdW5p
dHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuYnVpbGRib3RfdW5pdHRlc3QgaW1wb3J0ICoK
LWZyb20gd2Via2l0cHkuYnVpbGRzdGVwc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSB3ZWJraXRw
eS5jaGFuZ2Vsb2dzX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmRv
d25sb2FkX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LmNvbW1hbmRzLmVhcmx5X3dh
cm5pbmdfc3lzdGVtX3VuaXR0ZXN0IGltcG9ydCAqCkBAIC00Niw2ICs0NSw4IEBAIGZyb20gd2Vi
a2l0cHkuZGlmZl9wYXJzZXJfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkuZXhlY3V0
aXZlX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5Lm11bHRpY29tbWFuZHRvb2xfdW5p
dHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkucXVldWVlbmdpbmVfdW5pdHRlc3QgaW1wb3J0
ICoKK2Zyb20gd2Via2l0cHkuc3RlcHMuc3RlcHNfdW5pdHRlc3QgaW1wb3J0ICoKK2Zyb20gd2Vi
a2l0cHkuc3RlcHMudXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdfdW5pdHRlc3RzIGltcG9ydCAq
CiBmcm9tIHdlYmtpdHB5LnN0eWxlX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIHdlYmtpdHB5LnRl
eHRfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmdf
dW5pdHRlc3QgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYnVpbGRzdGVwcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnVpbGRzdGVw
cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkODUwZS4uMDAwMDAwMAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2J1aWxkc3RlcHMucHkKKysrIC9kZXYvbnVs
bApAQCAtMSw1NTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMgCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcwotaW1w
b3J0IFN0cmluZ0lPCi0KLWZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCi0KLWZyb20g
d2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKLWZy
b20gd2Via2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5n
cmFtbWFyIGltcG9ydCBwbHVyYWxpemUKLWZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1w
b3J0IGxvZywgZXJyb3IKLWZyb20gd2Via2l0cHkud2Via2l0cG9ydCBpbXBvcnQgV2ViS2l0UG9y
dAotZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKLQotIyBGSVhNRTog
V2h5IGRvIHNvbWUgb2YgdGhlc2UgaGF2ZSAiU3RlcCIgaW4gdGhlaXIgbmFtZSBidXQgbm90IGFs
bD8KLV9fYWxsX18gPSBbCi0gICAgIkFwcGx5UGF0Y2hTdGVwIiwKLSAgICAiQXBwbHlQYXRjaFdp
dGhMb2NhbENvbW1pdFN0ZXAiLAotICAgICJCdWlsZFN0ZXAiLAotICAgICJDaGVja1N0eWxlU3Rl
cCIsCi0gICAgIkNsZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAiLAotICAgICJDbGVhbldvcmtpbmdE
aXJlY3RvcnlXaXRoTG9jYWxDb21taXRzU3RlcCIsCi0gICAgIkNsb3NlQnVnRm9yTGFuZERpZmZT
dGVwIiwKLSAgICAiQ2xvc2VCdWdTdGVwIiwKLSAgICAiQ2xvc2VQYXRjaFN0ZXAiLAotICAgICJD
b21taXRTdGVwIiwKLSAgICAiQ29tcGxldGVSb2xsb3V0IiwKLSAgICAiQ3JlYXRlQnVnU3RlcCIs
Ci0gICAgIkVuc3VyZUJ1aWxkZXJzQXJlR3JlZW5TdGVwIiwKLSAgICAiRW5zdXJlTG9jYWxDb21t
aXRJZk5lZWRlZCIsCi0gICAgIk9ic29sZXRlUGF0Y2hlc09uQnVnU3RlcCIsCi0gICAgIlBvc3RE
aWZmVG9CdWdTdGVwIiwKLSAgICAiUHJlcGFyZUNoYW5nZUxvZ0ZvclJldmVydFN0ZXAiLAotICAg
ICJQcmVwYXJlQ2hhbmdlTG9nU3RlcCIsCi0gICAgIlByb21wdEZvckJ1Z09yVGl0bGVTdGVwIiwK
LSAgICAiUmV2ZXJ0UmV2aXNpb25TdGVwIiwKLSAgICAiUnVuVGVzdHNTdGVwIiwKLSAgICAiVXBk
YXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0ZXAiLAotICAgICJVcGRhdGVTdGVwIiwKLV0KLQot
Y2xhc3MgQ29tbWFuZE9wdGlvbnMob2JqZWN0KToKLSAgICBmb3JjZV9jbGVhbiA9IG1ha2Vfb3B0
aW9uKCItLWZvcmNlLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZm9yY2VfY2xl
YW4iLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJDbGVhbiB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUg
YXBwbHlpbmcgcGF0Y2hlcyAocmVtb3ZlcyBsb2NhbCBjaGFuZ2VzIGFuZCBjb21taXRzKSIpCi0g
ICAgY2xlYW4gPSBtYWtlX29wdGlvbigiLS1uby1jbGVhbiIsIGFjdGlvbj0ic3RvcmVfZmFsc2Ui
LCBkZXN0PSJjbGVhbiIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG9uJ3QgY2hlY2sgaWYgdGhlIHdv
cmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuIGJlZm9yZSBhcHBseWluZyBwYXRjaGVzIikKLSAgICBj
aGVja19idWlsZGVycyA9IG1ha2Vfb3B0aW9uKCItLWlnbm9yZS1idWlsZGVycyIsIGFjdGlvbj0i
c3RvcmVfZmFsc2UiLCBkZXN0PSJjaGVja19idWlsZGVycyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0i
RG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZC53ZWJraXQub3JnIGJ1aWxkZXJzIGFyZSBn
cmVlbiBiZWZvcmUgbGFuZGluZy4iKQotICAgIHF1aWV0ID0gbWFrZV9vcHRpb24oIi0tcXVpZXQi
LCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJxdWlldCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
IlByb2R1Y2UgbGVzcyBjb25zb2xlIG91dHB1dC4iKQotICAgIG5vbl9pbnRlcmFjdGl2ZSA9IG1h
a2Vfb3B0aW9uKCItLW5vbi1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9
Im5vbl9pbnRlcmFjdGl2ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik5ldmVyIHByb21wdCB0aGUg
dXNlciwgZmFpbCBhcyBmYXN0IGFzIHBvc3NpYmxlLiIpCi0gICAgcGFyZW50X2NvbW1hbmQgPSBt
YWtlX29wdGlvbigiLS1wYXJlbnQtY29tbWFuZCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwYXJl
bnRfY29tbWFuZCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iKEludGVybmFsKSBUaGUgY29tbWFuZCB0
aGF0IHNwYXduZWQgdGhpcyBpbnN0YW5jZS4iKQotICAgIHVwZGF0ZSA9IG1ha2Vfb3B0aW9uKCIt
LW5vLXVwZGF0ZSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ1cGRhdGUiLCBkZWZhdWx0
PVRydWUsIGhlbHA9IkRvbid0IHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuIikKLSAgICBs
b2NhbF9jb21taXQgPSBtYWtlX29wdGlvbigiLS1sb2NhbC1jb21taXQiLCBhY3Rpb249InN0b3Jl
X3RydWUiLCBkZXN0PSJsb2NhbF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJNYWtlIGEg
bG9jYWwgY29tbWl0IGZvciBlYWNoIGFwcGxpZWQgcGF0Y2giKQotICAgIGJ1aWxkID0gbWFrZV9v
cHRpb24oIi0tbm8tYnVpbGQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iYnVpbGQiLCBk
ZWZhdWx0PVRydWUsIGhlbHA9IkNvbW1pdCB3aXRob3V0IGJ1aWxkaW5nIGZpcnN0LCBpbXBsaWVz
IC0tbm8tdGVzdC4iKQotICAgIGJ1aWxkX3N0eWxlID0gbWFrZV9vcHRpb24oIi0tYnVpbGQtc3R5
bGUiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0iYnVpbGRfc3R5bGUiLCBkZWZhdWx0PU5vbmUsIGhl
bHA9IldoZXRoZXIgdG8gYnVpbGQgZGVidWcsIHJlbGVhc2UsIG9yIGJvdGguIikKLSAgICB0ZXN0
ID0gbWFrZV9vcHRpb24oIi0tbm8tdGVzdCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ0
ZXN0IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91dCBydW5uaW5nIHJ1bi13ZWJr
aXQtdGVzdHMuIikKLSAgICBjbG9zZV9idWcgPSBtYWtlX29wdGlvbigiLS1uby1jbG9zZSIsIGFj
dGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJjbG9zZV9idWciLCBkZWZhdWx0PVRydWUsIGhlbHA9
IkxlYXZlIGJ1ZyBvcGVuIGFmdGVyIGxhbmRpbmcuIikKLSAgICBwb3J0ID0gbWFrZV9vcHRpb24o
Ii0tcG9ydCIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwb3J0IiwgZGVmYXVsdD1Ob25lLCBoZWxw
PSJTcGVjaWZ5IGEgcG9ydCAoZS5nLiwgbWFjLCBxdCwgZ3RrLCAuLi4pLiIpCi0gICAgcmV2aWV3
ZXIgPSBtYWtlX29wdGlvbigiLXIiLCAiLS1yZXZpZXdlciIsIGFjdGlvbj0ic3RvcmUiLCB0eXBl
PSJzdHJpbmciLCBkZXN0PSJyZXZpZXdlciIsIGhlbHA9IlVwZGF0ZSBDaGFuZ2VMb2dzIHRvIHNh
eSBSZXZpZXdlZCBieSBSRVZJRVdFUi4iKQotICAgIGNvbXBsZXRlX3JvbGxvdXQgPSBtYWtlX29w
dGlvbigiLS1jb21wbGV0ZS1yb2xsb3V0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iY29t
cGxldGVfcm9sbG91dCIsIGhlbHA9IkNvbW1pdCB0aGUgcmV2ZXJ0IGFuZCByZS1vcGVuIHRoZSBv
cmlnaW5hbCBidWcuIikKLSAgICBvYnNvbGV0ZV9wYXRjaGVzID0gbWFrZV9vcHRpb24oIi0tbm8t
b2Jzb2xldGUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0ib2Jzb2xldGVfcGF0Y2hlcyIs
IGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IG9ic29sZXRlIG9sZCBwYXRjaGVzIGJlZm9yZSBw
b3N0aW5nIHRoaXMgb25lLiIpCi0gICAgcmV2aWV3ID0gbWFrZV9vcHRpb24oIi0tbm8tcmV2aWV3
IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InJldmlldyIsIGRlZmF1bHQ9VHJ1ZSwgaGVs
cD0iRG8gbm90IG1hcmsgdGhlIHBhdGNoIGZvciByZXZpZXcuIikKLSAgICByZXF1ZXN0X2NvbW1p
dCA9IG1ha2Vfb3B0aW9uKCItLXJlcXVlc3QtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVzdD0icmVxdWVzdF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJNYXJrIHRoZSBwYXRj
aCBhcyBuZWVkaW5nIGF1dG8tY29tbWl0IGFmdGVyIHJldmlldy4iKQotICAgIGRlc2NyaXB0aW9u
ID0gbWFrZV9vcHRpb24oIi1tIiwgIi0tZGVzY3JpcHRpb24iLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT0ic3RyaW5nIiwgZGVzdD0iZGVzY3JpcHRpb24iLCBoZWxwPSJEZXNjcmlwdGlvbiBzdHJpbmcg
Zm9yIHRoZSBhdHRhY2htZW50IChkZWZhdWx0OiBcInBhdGNoXCIpIikKLSAgICBjYyA9IG1ha2Vf
b3B0aW9uKCItLWNjIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImNjIiwg
aGVscD0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIGNhcmJvbi1j
b3B5LiIpCi0gICAgY29tcG9uZW50ID0gbWFrZV9vcHRpb24oIi0tY29tcG9uZW50IiwgYWN0aW9u
PSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImNvbXBvbmVudCIsIGhlbHA9IkNvbXBvbmVu
dCBmb3IgdGhlIG5ldyBidWcuIikKLSAgICBjb25maXJtID0gbWFrZV9vcHRpb24oIi0tbm8tY29u
ZmlybSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJjb25maXJtIiwgZGVmYXVsdD1UcnVl
LCBoZWxwPSJTa2lwIGNvbmZpcm1hdGlvbiBzdGVwcy4iKQotICAgIGVtYWlsID0gbWFrZV9vcHRp
b24oIi0tZW1haWwiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iZW1haWwi
LCBoZWxwPSJFbWFpbCBhZGRyZXNzIHRvIHVzZSBpbiBDaGFuZ2VMb2dzLiIpCi0KLQotY2xhc3Mg
QWJzdHJhY3RTdGVwKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlv
bnMpOgotICAgICAgICBzZWxmLl90b29sID0gdG9vbAotICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucwotICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQotCi0gICAgZGVmIF9ydW5fc2NyaXB0
KHNlbGYsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAg
ICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQotICAgICAgICAjIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2Ugc2VsZi5wb3J0KCkKLSAgICAgICAgc2VsZi5fdG9vbC5leGVjdXRpdmUucnVu
X2FuZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgoc2NyaXB0X25hbWUpLCBxdWlldCkK
LQotICAgICMgRklYTUU6IFRoZSBwb3J0IHNob3VsZCBsaXZlIG9uIHRoZSB0b29sLgotICAgIGRl
ZiBwb3J0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9wb3J0OgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3BvcnQKLSAgICAgICAgc2VsZi5fcG9ydCA9IFdlYktpdFBvcnQucG9ydChzZWxmLl9v
cHRpb25zLnBvcnQpCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ci0KLSAgICBfd2VsbF9rbm93
bl9rZXlzID0gewotICAgICAgICAiZGlmZiIgOiBsYW1iZGEgc2VsZjogc2VsZi5fdG9vbC5zY20o
KS5jcmVhdGVfcGF0Y2goKSwKLSAgICAgICAgImNoYW5nZWxvZ3MiIDogbGFtYmRhIHNlbGY6IHNl
bGYuX3Rvb2wuc2NtKCkubW9kaWZpZWRfY2hhbmdlbG9ncygpLAotICAgIH0KLQotICAgIGRlZiBj
YWNoZWRfbG9va3VwKHNlbGYsIHN0YXRlLCBrZXksIHByb21pc2U9Tm9uZSk6Ci0gICAgICAgIGlm
IHN0YXRlLmdldChrZXkpOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRlW2tleV0KLSAgICAgICAg
aWYgbm90IHByb21pc2U6Ci0gICAgICAgICAgICBwcm9taXNlID0gc2VsZi5fd2VsbF9rbm93bl9r
ZXlzLmdldChrZXkpCi0gICAgICAgIHN0YXRlW2tleV0gPSBwcm9taXNlKHNlbGYpCi0gICAgICAg
IHJldHVybiBzdGF0ZVtrZXldCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhj
bHMpOgotICAgICAgICByZXR1cm4gW10KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVu
dCIKLQotCi0jIEZJWE1FOiBVbmlmeSB3aXRoIFN0ZXBTZXF1ZW5jZT8gIEknbSBub3Qgc3VyZSB5
ZXQgd2hpY2ggaXMgdGhlIGJldHRlciBkZXNpZ24uCi1jbGFzcyBNZXRhU3RlcChBYnN0cmFjdFN0
ZXApOgotICAgIHN1YnN0ZXBzID0gW10gIyBPdmVycmlkZSBpbiBzdWJjbGFzc2VzCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMpOgotICAgICAgICBBYnN0cmFjdFN0ZXAuX19p
bml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucykKLSAgICAgICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMg
PSBbXQotICAgICAgICBmb3Igc3RlcF9jbGFzcyBpbiBzZWxmLnN1YnN0ZXBzOgotICAgICAgICAg
ICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMuYXBwZW5kKHN0ZXBfY2xhc3ModG9vbCwgb3B0aW9ucykp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVw
cyhzdGVwcyk6Ci0gICAgICAgIGNvbGxlY3RlZF9vcHRpb25zID0gW10KLSAgICAgICAgZm9yIHN0
ZXAgaW4gc3RlcHM6Ci0gICAgICAgICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9IGNvbGxlY3RlZF9v
cHRpb25zICsgc3RlcC5vcHRpb25zKCkKLSAgICAgICAgcmV0dXJuIGNvbGxlY3RlZF9vcHRpb25z
Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1
cm4gY2xzLl9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVwcyhjbHMuc3Vic3RlcHMpCi0KLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgZm9yIHN0ZXAgaW4gc2VsZi5fc3RlcF9pbnN0
YW5jZXM6Ci0gICAgICAgICAgICAgc3RlcC5ydW4oc3RhdGUpCi0KLQotY2xhc3MgUHJvbXB0Rm9y
QnVnT3JUaXRsZVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToK
LSAgICAgICAgIyBObyBuZWVkIHRvIHByb21wdCBpZiB3ZSBhbHJhZHkgaGF2ZSB0aGUgYnVnX2lk
LgotICAgICAgICBpZiBzdGF0ZS5nZXQoImJ1Z19pZCIpOgotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgIHVzZXJfcmVzcG9uc2UgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0KCJQbGVhc2UgZW50
ZXIgYSBidWcgbnVtYmVyIG9yIGEgdGl0bGUgZm9yIGEgbmV3IGJ1ZzpcbiIpCi0gICAgICAgICMg
SWYgdGhlIHVzZXIgcmVzcG9uZHMgd2l0aCBhIG51bWJlciwgd2UgYXNzdW1lIGl0J3MgYnVnIG51
bWJlci4KLSAgICAgICAgIyBPdGhlcndpc2Ugd2UgYXNzdW1lIGl0J3MgYSBidWcgc3ViamVjdC4K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RhdGVbImJ1Z19pZCJdID0gaW50KHVzZXJfcmVz
cG9uc2UpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBUeXBlRXJyb3I6Ci0gICAgICAgICAg
ICBzdGF0ZVsiYnVnX3RpdGxlIl0gPSB1c2VyX3Jlc3BvbnNlCi0gICAgICAgICAgICAjIEZJWE1F
OiBUaGlzIGlzIGtpbmQgb2YgYSBsYW1lIGRlc2NyaXB0aW9uLgotICAgICAgICAgICAgc3RhdGVb
ImJ1Z19kZXNjcmlwdGlvbiJdID0gdXNlcl9yZXNwb25zZQotCi0KLWNsYXNzIENyZWF0ZUJ1Z1N0
ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMp
OgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2MsCi0gICAg
ICAgICAgICBDb21tYW5kT3B0aW9ucy5jb21wb25lbnQsCi0gICAgICAgIF0KLQotICAgIGRlZiBy
dW4oc2VsZiwgc3RhdGUpOgotICAgICAgICAjIE5vIG5lZWQgdG8gY3JlYXRlIGEgYnVnIGlmIHdl
IGFscmVhZHkgaGF2ZSBvbmUuCi0gICAgICAgIGlmIHN0YXRlLmdldCgiYnVnX2lkIik6Ci0gICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgc3RhdGVbImJ1Z19pZCJdID0gc2VsZi5fdG9vbC5idWdz
LmNyZWF0ZV9idWcoc3RhdGVbImJ1Z190aXRsZSJdLCBzdGF0ZVsiYnVnX2Rlc2NyaXB0aW9uIl0s
IGNvbXBvbmVudD1zZWxmLl9vcHRpb25zLmNvbXBvbmVudCwgY2M9c2VsZi5fb3B0aW9ucy5jYykK
LQotCi1jbGFzcyBQcmVwYXJlQ2hhbmdlTG9nU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAg
ICAgICBDb21tYW5kT3B0aW9ucy5wb3J0LAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMucXVp
ZXQsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5lbWFpbCwKLSAgICAgICAgXQotCi0gICAg
ZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlmIHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0
ZSwgImNoYW5nZWxvZ3MiKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBvcy5jaGRpcihz
ZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGFyZ3MgPSBbc2VsZi5wb3J0
KCkuc2NyaXB0X3BhdGgoInByZXBhcmUtQ2hhbmdlTG9nIildCi0gICAgICAgIGlmIHN0YXRlWyJi
dWdfaWQiXToKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWJ1Zz0lcyIgJSBzdGF0ZVsiYnVn
X2lkIl0pCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZW1haWw6Ci0gICAgICAgICAgICBhcmdz
LmFwcGVuZCgiLS1lbWFpbD0lcyIgJSBzZWxmLl9vcHRpb25zLmVtYWlsKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
YXJncywgc2VsZi5fb3B0aW9ucy5xdWlldCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBl
OgotICAgICAgICAgICAgZXJyb3IoIlVuYWJsZSB0byBwcmVwYXJlIENoYW5nZUxvZ3MuIikKLSAg
ICAgICAgc3RhdGVbImRpZmYiXSA9IE5vbmUgIyBXZSd2ZSBjaGFuZ2VkIHRoZSBkaWZmCi0KLQot
Y2xhc3MgRWRpdENoYW5nZUxvZ1N0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYs
IHN0YXRlKToKLSAgICAgICAgc2VsZi5fdG9vbC51c2VyLmVkaXQoc2VsZi5jYWNoZWRfbG9va3Vw
KHN0YXRlLCAiY2hhbmdlbG9ncyIpKQotCi0KLWNsYXNzIE9ic29sZXRlUGF0Y2hlc09uQnVnU3Rl
cChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6
Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5vYnNvbGV0ZV9w
YXRjaGVzLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMub2Jzb2xldGVfcGF0Y2hlczoKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBidWdfaWQgPSBzdGF0ZVsiYnVnX2lkIl0KLSAgICAgICAgcGF0Y2hlcyA9IHNl
bGYuX3Rvb2wuYnVncy5mZXRjaF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgaWYg
bm90IHBhdGNoZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbG9nKCJPYnNvbGV0aW5n
ICVzIG9uIGJ1ZyAlcyIgJSAocGx1cmFsaXplKCJvbGQgcGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBi
dWdfaWQpKQotICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHNlbGYu
X3Rvb2wuYnVncy5vYnNvbGV0ZV9hdHRhY2htZW50KHBhdGNoWyJpZCJdKQotCi0KLWNsYXNzIENv
bmZpcm1EaWZmU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBv
cHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9u
cy5jb25maXJtLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAg
ICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY29uZmlybToKLSAgICAgICAgICAgIHJldHVybgotICAg
ICAgICBkaWZmID0gc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiZGlmZiIpCi0gICAgICAgIHNl
bGYuX3Rvb2wudXNlci5wYWdlKGRpZmYpCi0gICAgICAgIGlmIG5vdCBzZWxmLl90b29sLnVzZXIu
Y29uZmlybSgiV2FzIHRoYXQgZGlmZiBjb3JyZWN0PyIpOgotICAgICAgICAgICAgZXJyb3IoIlVz
ZXIgZGVjbGluZWQgdG8gY29udGludWUuIikKLQotCi1jbGFzcyBQb3N0RGlmZlRvQnVnU3RlcChB
YnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0g
ICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5kZXNjcmlwdGlvbiwK
LSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnJldmlldywKLSAgICAgICAgICAgIENvbW1hbmRP
cHRpb25zLnJlcXVlc3RfY29tbWl0LAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKLSAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImRpZmYiKQot
ICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90
b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKLSAgICAgICAgZGVzY3JpcHRpb24gPSBz
ZWxmLl9vcHRpb25zLmRlc2NyaXB0aW9uIG9yICJQYXRjaCIKLSAgICAgICAgc2VsZi5fdG9vbC5i
dWdzLmFkZF9wYXRjaF90b19idWcoc3RhdGVbImJ1Z19pZCJdLCBkaWZmX2ZpbGUsIGRlc2NyaXB0
aW9uLCBtYXJrX2Zvcl9yZXZpZXc9c2VsZi5fb3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1p
dF9xdWV1ZT1zZWxmLl9vcHRpb25zLnJlcXVlc3RfY29tbWl0KQotCi0KLWNsYXNzIFByZXBhcmVD
aGFuZ2VMb2dGb3JSZXZlcnRTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVmIHJ1bihzZWxmLCBz
dGF0ZSk6Ci0gICAgICAgICMgRmlyc3QsIGRpc2NhcmQgdGhlIENoYW5nZUxvZyBjaGFuZ2VzIGZy
b20gdGhlIHJvbGxvdXQuCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tv
dXRfcm9vdCkKLSAgICAgICAgY2hhbmdlbG9nX3BhdGhzID0gc2VsZi5fdG9vbC5zY20oKS5tb2Rp
ZmllZF9jaGFuZ2Vsb2dzKCkKLSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5yZXZlcnRfZmlsZXMo
Y2hhbmdlbG9nX3BhdGhzKQotCi0gICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFuZ2VMb2cg
ZW50cmllcyBmb3IgdGhpcyByb2xsb3V0LgotICAgICAgICAjIFRoaXMgY291bGQgbW92ZSB0byBw
cmVwYXJlLUNoYW5nZUxvZyBieSBhZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgotICAgICAgICBz
ZWxmLl9ydW5fc2NyaXB0KCJwcmVwYXJlLUNoYW5nZUxvZyIpCi0gICAgICAgIGZvciBjaGFuZ2Vs
b2dfcGF0aCBpbiBjaGFuZ2Vsb2dfcGF0aHM6Ci0gICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdl
bG9nX3BhdGgpLnVwZGF0ZV9mb3JfcmV2ZXJ0KHN0YXRlWyJyZXZpc2lvbiJdKQotCi0KLWNsYXNz
IENsZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdG9vbCwgb3B0aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0gICAg
ICAgIEFic3RyYWN0U3RlcC5fX2luaXRfXyhzZWxmLCB0b29sLCBvcHRpb25zKQotICAgICAgICBz
ZWxmLl9hbGxvd19sb2NhbF9jb21taXRzID0gYWxsb3dfbG9jYWxfY29tbWl0cwotCi0gICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLmZvcmNlX2NsZWFuLAotICAgICAgICAgICAgQ29tbWFuZE9w
dGlvbnMuY2xlYW4sCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAg
ICAgICBvcy5jaGRpcihzZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9hbGxvd19sb2NhbF9jb21taXRzOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5z
Y20oKS5lbnN1cmVfbm9fbG9jYWxfY29tbWl0cyhzZWxmLl9vcHRpb25zLmZvcmNlX2NsZWFuKQot
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNsZWFuOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5z
Y20oKS5lbnN1cmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkoZm9yY2VfY2xlYW49c2VsZi5fb3B0
aW9ucy5mb3JjZV9jbGVhbikKLQotCi1jbGFzcyBDbGVhbldvcmtpbmdEaXJlY3RvcnlXaXRoTG9j
YWxDb21taXRzU3RlcChDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdG9vbCwgb3B0aW9ucyk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgYSBiaXQgb2Yg
YSBoYWNrLiAgQ29uc2lkZXIgZG9pbmcgdGhpcyBtb3JlIGNsZWFubHkuCi0gICAgICAgIENsZWFu
V29ya2luZ0RpcmVjdG9yeVN0ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0aW9ucywgYWxsb3df
bG9jYWxfY29tbWl0cz1UcnVlKQotCi0KLWNsYXNzIFVwZGF0ZVN0ZXAoQWJzdHJhY3RTdGVwKToK
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4g
WwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMudXBkYXRlLAotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMucG9ydCwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnVwZGF0ZToKLSAgICAgICAgICAgIHJldHVybgot
ICAgICAgICBsb2coIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IikKLSAgICAgICAgc2VsZi5f
dG9vbC5leGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKHNlbGYucG9ydCgpLnVwZGF0ZV93
ZWJraXRfY29tbWFuZCgpLCBxdWlldD1UcnVlKQotCi0KLWNsYXNzIEFwcGx5UGF0Y2hTdGVwKEFi
c3RyYWN0U3RlcCk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAg
ICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2
ZSwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGxvZygi
UHJvY2Vzc2luZyBwYXRjaCAlcyBmcm9tIGJ1ZyAlcy4iICUgKHN0YXRlWyJwYXRjaCJdWyJpZCJd
LCBzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0pKQotICAgICAgICBzZWxmLl90b29sLnNjbSgpLmFw
cGx5X3BhdGNoKHN0YXRlWyJwYXRjaCJdLCBmb3JjZT1zZWxmLl9vcHRpb25zLm5vbl9pbnRlcmFj
dGl2ZSkKLQotCi1jbGFzcyBSZXZlcnRSZXZpc2lvblN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hcHBseV9yZXZl
cnNlX2RpZmYoc3RhdGVbInJldmlzaW9uIl0pCi0KLQotY2xhc3MgQXBwbHlQYXRjaFdpdGhMb2Nh
bENvbW1pdFN0ZXAoQXBwbHlQYXRjaFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBv
cHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9u
cy5sb2NhbF9jb21taXQsCi0gICAgICAgIF0gKyBBcHBseVBhdGNoU3RlcC5vcHRpb25zKCkKLSAg
ICAKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgQXBwbHlQYXRjaFN0ZXAucnVu
KHNlbGYsIHN0YXRlKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmxvY2FsX2NvbW1pdDoKLSAg
ICAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gc2VsZi5fdG9vbC5zY20oKS5jb21taXRfbWVzc2Fn
ZV9mb3JfdGhpc19jb21taXQoKQotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5jb21taXRf
bG9jYWxseV93aXRoX21lc3NhZ2UoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpIG9yIHN0YXRlWyJw
YXRjaCJdWyJuYW1lIl0pCi0KLQotY2xhc3MgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAoQWJz
dHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb3B0aW9ucyhjbHMpOgotICAg
ICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2hlY2tfYnVpbGRlcnMs
Ci0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBpZiBub3Qg
c2VsZi5fb3B0aW9ucy5jaGVja19idWlsZGVyczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICByZWRfYnVpbGRlcnNfbmFtZXMgPSBzZWxmLl90b29sLmJ1aWxkYm90LnJlZF9jb3JlX2J1aWxk
ZXJzX25hbWVzKCkKLSAgICAgICAgaWYgbm90IHJlZF9idWlsZGVyc19uYW1lczoKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBtYXAobGFtYmRhIG5hbWU6
ICJcIiVzXCIiICUgbmFtZSwgcmVkX2J1aWxkZXJzX25hbWVzKSAjIEFkZCBxdW90ZXMgYXJvdW5k
IHRoZSBuYW1lcy4KLSAgICAgICAgZXJyb3IoIkJ1aWxkZXJzIFslc10gYXJlIHJlZCwgcGxlYXNl
IGRvIG5vdCBjb21taXQuXG5TZWUgaHR0cDovLyVzLlxuUGFzcyAtLWlnbm9yZS1idWlsZGVycyB0
byBieXBhc3MgdGhpcyBjaGVjay4iICUgKCIsICIuam9pbihyZWRfYnVpbGRlcnNfbmFtZXMpLCBz
ZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkYm90X2hvc3QpKQotCi0KLWNsYXNzIEVuc3VyZUxvY2Fs
Q29tbWl0SWZOZWVkZWQoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
b3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlv
bnMubG9jYWxfY29tbWl0LAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToK
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5sb2NhbF9jb21taXQgYW5kIG5vdCBzZWxmLl90b29s
LnNjbSgpLnN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKLSAgICAgICAgICAgIGVycm9yKCItLWxv
Y2FsLWNvbW1pdCBwYXNzZWQsIGJ1dCAlcyBkb2VzIG5vdCBzdXBwb3J0IGxvY2FsIGNvbW1pdHMi
ICUgc2VsZi5fdG9vbC5zY20uZGlzcGxheV9uYW1lKCkpCi0KLQotY2xhc3MgVXBkYXRlQ2hhbmdl
TG9nc1dpdGhSZXZpZXdlclN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMucmV2aWV3ZXIsCi0gICAgICAgIF0KLQotICAgIGRlZiBfZ3Vlc3NfcmV2aWV3ZXJf
ZnJvbV9idWcoc2VsZiwgYnVnX2lkKToKLSAgICAgICAgcGF0Y2hlcyA9IHNlbGYuX3Rvb2wuYnVn
cy5mZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgaWYgbGVu
KHBhdGNoZXMpICE9IDE6Ci0gICAgICAgICAgICBsb2coIiVzIG9uIGJ1ZyAlcywgY2Fubm90IGlu
ZmVyIHJldmlld2VyLiIgJSAocGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIsIGxlbihwYXRjaGVz
KSksIGJ1Z19pZCkpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBwYXRjaCA9IHBh
dGNoZXNbMF0KLSAgICAgICAgcmV2aWV3ZXIgPSBwYXRjaFsicmV2aWV3ZXIiXQotICAgICAgICBs
b2coIkd1ZXNzaW5nIFwiJXNcIiBhcyByZXZpZXdlciBmcm9tIGF0dGFjaG1lbnQgJXMgb24gYnVn
ICVzLiIgJSAocmV2aWV3ZXIsIHBhdGNoWyJpZCJdLCBidWdfaWQpKQotICAgICAgICByZXR1cm4g
cmV2aWV3ZXIKLQotICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgotICAgICAgICBidWdfaWQgPSBz
dGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0KLSAgICAgICAgcmV2aWV3ZXIgPSBzZWxmLl9vcHRpb25z
LnJldmlld2VyCi0gICAgICAgIGlmIG5vdCByZXZpZXdlcjoKLSAgICAgICAgICAgIGlmIG5vdCBi
dWdfaWQ6Ci0gICAgICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQgYW5kIC0tcmV2
aWV3ZXI9IG5vdCBwcm92aWRlZC4gIE5vdCB1cGRhdGluZyBDaGFuZ2VMb2dzIHdpdGggcmV2aWV3
ZXIuIikKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHJldmlld2VyID0gc2Vs
Zi5fZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoYnVnX2lkKQotCi0gICAgICAgIGlmIG5vdCByZXZp
ZXdlcjoKLSAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGd1ZXNzIHJldmlld2VyIGZyb20gYnVn
ICVzIGFuZCAtLXJldmlld2VyPSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9n
cyB3aXRoIHJldmlld2VyLiIgJSBidWdfaWQpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICBvcy5jaGRpcihzZWxmLl90b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCi0gICAgICAgIGZvciBj
aGFuZ2Vsb2dfcGF0aCBpbiBzZWxmLl90b29sLnNjbSgpLm1vZGlmaWVkX2NoYW5nZWxvZ3MoKToK
LSAgICAgICAgICAgIENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkuc2V0X3Jldmlld2VyKHJldmll
d2VyKQotCi0KLWNsYXNzIEJ1aWxkU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBD
b21tYW5kT3B0aW9ucy5idWlsZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAot
ICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuYnVpbGRfc3R5bGUsCi0gICAgICAgIF0KLQotICAg
IGRlZiBidWlsZChzZWxmLCBidWlsZF9zdHlsZSk6Ci0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0
aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChzZWxmLnBvcnQoKS5idWlsZF93ZWJraXRfY29tbWFu
ZChidWlsZF9zdHlsZT1idWlsZF9zdHlsZSksIHNlbGYuX29wdGlvbnMucXVpZXQpCi0KLSAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYnVpbGQ6
Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbG9nKCJCdWlsZGluZyBXZWJLaXQiKQotICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmJ1aWxkX3N0eWxlID09ICJib3RoIjoKLSAgICAgICAgICAg
IHNlbGYuYnVpbGQoImRlYnVnIikKLSAgICAgICAgICAgIHNlbGYuYnVpbGQoInJlbGVhc2UiKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5idWlsZChzZWxmLl9vcHRpb25zLmJ1aWxk
X3N0eWxlKQotCi0KLWNsYXNzIENoZWNrU3R5bGVTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgZGVm
IHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImNoZWNrLXdlYmtp
dC1zdHlsZSIpCi0KLQotY2xhc3MgUnVuVGVzdHNTdGVwKEFic3RyYWN0U3RlcCk6Ci0gICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLmJ1aWxkLAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMu
dGVzdCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKLSAgICAg
ICAgICAgIENvbW1hbmRPcHRpb25zLnF1aWV0LAotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMu
cG9ydCwKLSAgICAgICAgXQotCi0gICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLmJ1aWxkOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLnRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgYXJn
cyA9IHNlbGYucG9ydCgpLnJ1bl93ZWJraXRfdGVzdHNfY29tbWFuZCgpCi0gICAgICAgIGlmIHNl
bGYuX29wdGlvbnMubm9uX2ludGVyYWN0aXZlOgotICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0t
bm8tbGF1bmNoLXNhZmFyaSIpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1leGl0LWFmdGVy
LW4tZmFpbHVyZXM9MSIpCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucXVpZXQ6Ci0gICAgICAg
ICAgICBhcmdzLmFwcGVuZCgiLS1xdWlldCIpCi0gICAgICAgIHNlbGYuX3Rvb2wuZXhlY3V0aXZl
LnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChhcmdzKQotCi0KLWNsYXNzIENvbW1pdFN0ZXAoQWJzdHJh
Y3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAgY29tbWl0X21lc3Nh
Z2UgPSBzZWxmLl90b29sLnNjbSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpCi0g
ICAgICAgIHN0YXRlWyJjb21taXRfdGV4dCJdID0gIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X3dp
dGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkpCi0KLQotY2xhc3MgQ2xvc2VQYXRj
aFN0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKLSAgICAgICAg
Y29tbWVudF90ZXh0ID0gYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dChzZWxmLl90b29sLnNj
bSgpLCBzdGF0ZVsiY29tbWl0X3RleHQiXSkKLSAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsZWFy
X2F0dGFjaG1lbnRfZmxhZ3Moc3RhdGVbInBhdGNoIl1bImlkIl0sIGNvbW1lbnRfdGV4dCkKLQot
Ci1jbGFzcyBDbG9zZUJ1Z1N0ZXAoQWJzdHJhY3RTdGVwKToKLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgb3B0aW9ucyhjbHMpOgotICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgQ29tbWFu
ZE9wdGlvbnMuY2xvc2VfYnVnLAotICAgICAgICBdCi0KLSAgICBkZWYgcnVuKHNlbGYsIHN0YXRl
KToKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuY2xvc2VfYnVnOgotICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciBy
KyBwYXRjaGVzIG9uIHRoZSBidWcgYmVmb3JlIGNsb3NpbmcuCi0gICAgICAgICMgQXNzdW1lIHRo
YXQgci0gcGF0Y2hlcyBhcmUganVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRv
IG9ic29sZXRlLgotICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNo
ZXNfZnJvbV9idWcoc3RhdGVbInBhdGNoIl1bImJ1Z19pZCJdKQotICAgICAgICBmb3IgcGF0Y2gg
aW4gcGF0Y2hlczoKLSAgICAgICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXci
KQotICAgICAgICAgICAgaWYgcmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIr
IjoKLSAgICAgICAgICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50
ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxh
bmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmll
d19mbGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fdG9vbC5idWdz
LmNsb3NlX2J1Z19hc19maXhlZChzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0sICJBbGwgcmV2aWV3
ZWQgcGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKLQotCi1jbGFzcyBD
bG9zZUJ1Z0ZvckxhbmREaWZmU3RlcChBYnN0cmFjdFN0ZXApOgotICAgIEBjbGFzc21ldGhvZAot
ICAgIGRlZiBvcHRpb25zKGNscyk6Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICBDb21t
YW5kT3B0aW9ucy5jbG9zZV9idWcsCi0gICAgICAgIF0KLQotICAgIGRlZiBydW4oc2VsZiwgc3Rh
dGUpOgotICAgICAgICBjb21tZW50X3RleHQgPSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0
KHNlbGYuX3Rvb2wuc2NtKCksIHN0YXRlWyJjb21taXRfdGV4dCJdKQotICAgICAgICBidWdfaWQg
PSBzdGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0KLSAgICAgICAgaWYgYnVnX2lkOgotICAgICAgICAg
ICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQotICAgICAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5jbG9zZV9idWc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3Nl
X2J1Z19hc19maXhlZChidWdfaWQsIGNvbW1lbnRfdGV4dCkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5IHRvIGZpZ3VyZSBv
dXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCi0gICAgICAgICAgICAgICAgIyB0byB0aGUgYnVn
LCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCi0gICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LnBvc3RfY29tbWVudF90b19idWcoYnVnX2lkLCBjb21tZW50X3RleHQpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsb2coY29tbWVudF90ZXh0KQotICAgICAgICAgICAgbG9nKCJObyBidWcg
aWQgcHJvdmlkZWQuIikKLQotCi1jbGFzcyBDb21wbGV0ZVJvbGxvdXQoTWV0YVN0ZXApOgotICAg
IHN1YnN0ZXBzID0gWwotICAgICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIENvbW1pdFN0ZXAsCi0g
ICAgXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9wdGlvbnMoY2xzKToKLSAgICAgICAg
Y29sbGVjdGVkX29wdGlvbnMgPSBjbHMuX2NvbGxlY3Rfb3B0aW9uc19mcm9tX3N0ZXBzKGNscy5z
dWJzdGVwcykKLSAgICAgICAgY29sbGVjdGVkX29wdGlvbnMuYXBwZW5kKENvbW1hbmRPcHRpb25z
LmNvbXBsZXRlX3JvbGxvdXQpCi0gICAgICAgIHJldHVybiBjb2xsZWN0ZWRfb3B0aW9ucwotCi0g
ICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6Ci0gICAgICAgIGJ1Z19pZCA9IHN0YXRlWyJidWdfaWQi
XQotICAgICAgICAjIEZJWE1FOiBGdWxseSBhdXRvbWF0ZWQgcm9sbG91dCBpcyBub3QgMTAwJSBp
ZGlvdC1wcm9vZiB5ZXQsIHNvIGZvciBub3cganVzdCBsb2cgd2l0aCBpbnN0cnVjdGlvbnMgb24g
aG93IHRvIGNvbXBsZXRlIHRoZSByb2xsb3V0LgotICAgICAgICAjIE9uY2Ugd2UgdHJ1c3Qgcm9s
bG91dCB3ZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbi4KLSAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMuY29tcGxldGVfcm9sbG91dDoKLSAgICAgICAgICAgIGxvZygiXG5OT1RFOiBSb2xsb3V0
IHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuUGxlYXNlIHZlcmlmeSB0aGUgcm9sbG91dCBkaWZm
IGFuZCB1c2UgXCJidWd6aWxsYS10b29sIGxhbmQtZGlmZiAlc1wiIHRvIGNvbW1pdCB0aGUgcm9s
bG91dC4iICUgYnVnX2lkKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgTWV0YVN0ZXAu
cnVuKHNlbGYsIHN0YXRlKQotCi0gICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICBs
b2coc3RhdGVbImNvbW1pdF90ZXh0Il0pCi0gICAgICAgICAgICBsb2coIk5vIGJ1Z3Mgd2VyZSB1
cGRhdGVkIG9yIHJlLW9wZW5lZCB0byByZWZsZWN0IHRoaXMgcm9sbG91dC4iKQotICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgICMgRklYTUU6IEknbSBub3Qgc3VyZSBzdGF0ZVsiY29tbWl0X3Rl
eHQiXSBpcyBxdWl0ZSByaWdodCBoZXJlLgotICAgICAgICBzZWxmLl90b29sLmJ1Z3MucmVvcGVu
X2J1ZyhidWdfaWQsIHN0YXRlWyJjb21taXRfdGV4dCJdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9idWlsZHN0ZXBzX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNThmNGMwLi4wMDAwMDAwCi0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYnVpbGRzdGVwc191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYzICsw
LDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5i
dWlsZHN0ZXBzIGltcG9ydCBVcGRhdGVDaGFuZ2VMb2dzV2l0aFJldmlld2VyU3RlcCwgVXBkYXRl
U3RlcCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAKLWZyb20gd2Via2l0cHkubW9ja19idWd6aWxs
YXRvb2wgaW1wb3J0IE1vY2tCdWd6aWxsYVRvb2wKLWZyb20gd2Via2l0cHkub3V0cHV0Y2FwdHVy
ZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS5tb2NrIGltcG9ydCBNb2NrCi0K
LQotY2xhc3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlclN0ZXBUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKLSAgICBkZWYgdGVzdF9ndWVzc19yZXZpZXdlcl9mcm9tX2J1ZyhzZWxmKToKLSAg
ICAgICAgY2FwdHVyZSA9IE91dHB1dENhcHR1cmUoKQotICAgICAgICBzdGVwID0gVXBkYXRlQ2hh
bmdlTG9nc1dpdGhSZXZpZXdlclN0ZXAoTW9ja0J1Z3ppbGxhVG9vbCgpLCBbXSkKLSAgICAgICAg
ZXhwZWN0ZWRfc3RkZXJyID0gIjAgcmV2aWV3ZWQgcGF0Y2hlcyBvbiBidWcgNzUsIGNhbm5vdCBp
bmZlciByZXZpZXdlci5cbiIKLSAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBz
dGVwLl9ndWVzc19yZXZpZXdlcl9mcm9tX2J1ZywgWzc1XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVj
dGVkX3N0ZGVycikKLQotCi1jbGFzcyBTdGVwc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiBfcnVuX3N0ZXAoc2VsZiwgc3RlcCwgdG9vbD1Ob25lLCBvcHRpb25zPU5vbmUsIHN0YXRl
PU5vbmUpOgotICAgICAgICBpZiBub3QgdG9vbDoKLSAgICAgICAgICAgIHRvb2wgPSBNb2NrQnVn
emlsbGFUb29sKCkKLSAgICAgICAgaWYgbm90IG9wdGlvbnM6Ci0gICAgICAgICAgICBvcHRpb25z
ID0gTW9jaygpCi0gICAgICAgIGlmIG5vdCBzdGF0ZToKLSAgICAgICAgICAgIHN0YXRlID0ge30K
LSAgICAgICAgc3RlcCh0b29sLCBvcHRpb25zKS5ydW4oc3RhdGUpCi0KLSAgICBkZWYgdGVzdF91
cGRhdGVfc3RlcChzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IE1vY2soKQotICAgICAgICBvcHRp
b25zLnVwZGF0ZSA9IFRydWUKLSAgICAgICAgc2VsZi5fcnVuX3N0ZXAoVXBkYXRlU3RlcCwgb3B0
aW9ucykKLQotICAgIGRlZiB0ZXN0X3Byb21wdF9mb3JfYnVnX29yX3RpdGxlX3N0ZXAoc2VsZik6
Ci0gICAgICAgIHRvb2wgPSBNb2NrQnVnemlsbGFUb29sKCkKLSAgICAgICAgdG9vbC51c2VyLnBy
b21wdCA9IGxhbWJkYSBtZXNzYWdlOiA0MgotICAgICAgICBzZWxmLl9ydW5fc3RlcChQcm9tcHRG
b3JCdWdPclRpdGxlU3RlcCwgdG9vbD10b29sKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbWFuZHMvZG93bmxvYWQucHkKaW5kZXggNTViZGJmNC4uM2UxYmI0ZSAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy9kb3dubG9hZC5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1hbmRzL2Rvd25sb2FkLnB5
CkBAIC0zMiw5ICszMiwxMCBAQCBpbXBvcnQgb3MKIAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFr
ZV9vcHRpb24KIAoraW1wb3J0IHdlYmtpdHB5LnN0ZXBzIGFzIHN0ZXBzCisKIGZyb20gd2Via2l0
cHkuYnVnemlsbGEgaW1wb3J0IHBhcnNlX2J1Z19pZAogIyBXZSBjb3VsZCBpbnN0ZWFkIHVzZSBm
cm9tIG1vZHVsZXMgaW1wb3J0IGJ1aWxkc3RlcHMgYW5kIHRoZW4gcHJlZml4IGV2ZXJ5IGJ1aWxk
c3RlcCB3aXRoICJidWlsZHN0ZXBzLiIKLWZyb20gd2Via2l0cHkuYnVpbGRzdGVwcyBpbXBvcnQg
KgogZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKIGZyb20gd2Via2l0
cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQKIGZyb20gd2Vi
a2l0cHkuZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgpAQCAtNjIsOSArNjMsOSBAQCBjbGFz
cyBCdWlsZChBYnN0cmFjdFNlcXVlbmNlZENvbW1tYW5kKToKICAgICBuYW1lID0gImJ1aWxkIgog
ICAgIGhlbHBfdGV4dCA9ICJVcGRhdGUgd29ya2luZyBjb3B5IGFuZCBidWlsZCIKICAgICBzdGVw
cyA9IFsKLSAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5U3RlcCwKLSAgICAgICAgVXBkYXRl
U3RlcCwKLSAgICAgICAgQnVpbGRTdGVwLAorICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJl
Y3RvcnksCisgICAgICAgIHN0ZXBzLlVwZGF0ZSwKKyAgICAgICAgc3RlcHMuQnVpbGQsCiAgICAg
XQogCiAKQEAgLTcyLDEwICs3MywxMCBAQCBjbGFzcyBCdWlsZEFuZFRlc3QoQWJzdHJhY3RTZXF1
ZW5jZWRDb21tbWFuZCk6CiAgICAgbmFtZSA9ICJidWlsZC1hbmQtdGVzdCIKICAgICBoZWxwX3Rl
eHQgPSAiVXBkYXRlIHdvcmtpbmcgY29weSwgYnVpbGQsIGFuZCBydW4gdGhlIHRlc3RzIgogICAg
IHN0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVwLAotICAgICAgICBV
cGRhdGVTdGVwLAotICAgICAgICBCdWlsZFN0ZXAsCi0gICAgICAgIFJ1blRlc3RzU3RlcCwKKyAg
ICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5nRGlyZWN0b3J5LAorICAgICAgICBzdGVwcy5VcGRhdGUs
CisgICAgICAgIHN0ZXBzLkJ1aWxkLAorICAgICAgICBzdGVwcy5SdW5UZXN0cywKICAgICBdCiAK
IApAQCAtODUsMTMgKzg2LDEzIEBAIGNsYXNzIExhbmREaWZmKEFic3RyYWN0U2VxdWVuY2VkQ29t
bW1hbmQpOgogICAgIGFyZ3VtZW50X25hbWVzID0gIltCVUdJRF0iCiAgICAgc2hvd19pbl9tYWlu
X2hlbHAgPSBUcnVlCiAgICAgc3RlcHMgPSBbCi0gICAgICAgIEVuc3VyZUJ1aWxkZXJzQXJlR3Jl
ZW5TdGVwLAotICAgICAgICBVcGRhdGVDaGFuZ2VMb2dzV2l0aFJldmlld2VyU3RlcCwKLSAgICAg
ICAgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAsCi0gICAgICAgIEJ1aWxkU3RlcCwKLSAgICAg
ICAgUnVuVGVzdHNTdGVwLAotICAgICAgICBDb21taXRTdGVwLAotICAgICAgICBDbG9zZUJ1Z0Zv
ckxhbmREaWZmU3RlcCwKKyAgICAgICAgc3RlcHMuRW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwKKyAg
ICAgICAgc3RlcHMuVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlciwKKyAgICAgICAgc3RlcHMu
RW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwKKyAgICAgICAgc3RlcHMuQnVpbGQsCisgICAgICAgIHN0
ZXBzLlJ1blRlc3RzLAorICAgICAgICBzdGVwcy5Db21taXQsCisgICAgICAgIHN0ZXBzLkNsb3Nl
QnVnRm9yTGFuZERpZmYsCiAgICAgXQogCiAgICAgZGVmIF9wcmVwYXJlX3N0YXRlKHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgpAQCAtMTY5LDEwICsxNzAsMTAgQEAgY2xhc3MgQ2hlY2tTdHls
ZShBYnN0cmFjdFBhdGNoU2VxdWVuY2luZ0NvbW1hbmQsIFByb2Nlc3NBdHRhY2htZW50c01peGlu
KToKICAgICBoZWxwX3RleHQgPSAiUnVuIGNoZWNrLXdlYmtpdC1zdHlsZSBvbiB0aGUgc3BlY2lm
aWVkIGF0dGFjaG1lbnRzIgogICAgIGFyZ3VtZW50X25hbWVzID0gIkFUVEFDSE1FTlRfSUQgW0FU
VEFDSE1FTlRfSURTXSIKICAgICBtYWluX3N0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdE
aXJlY3RvcnlTdGVwLAotICAgICAgICBVcGRhdGVTdGVwLAotICAgICAgICBBcHBseVBhdGNoU3Rl
cCwKLSAgICAgICAgQ2hlY2tTdHlsZVN0ZXAsCisgICAgICAgIHN0ZXBzLkNsZWFuV29ya2luZ0Rp
cmVjdG9yeSwKKyAgICAgICAgc3RlcHMuVXBkYXRlLAorICAgICAgICBzdGVwcy5BcHBseVBhdGNo
LAorICAgICAgICBzdGVwcy5DaGVja1N0eWxlLAogICAgIF0KIAogCkBAIC0xODEsMjEgKzE4Miwy
MSBAQCBjbGFzcyBCdWlsZEF0dGFjaG1lbnQoQWJzdHJhY3RQYXRjaFNlcXVlbmNpbmdDb21tYW5k
LCBQcm9jZXNzQXR0YWNobWVudHNNaXhpbik6CiAgICAgaGVscF90ZXh0ID0gIkFwcGx5IGFuZCBi
dWlsZCBwYXRjaGVzIGZyb20gYnVnemlsbGEiCiAgICAgYXJndW1lbnRfbmFtZXMgPSAiQVRUQUNI
TUVOVF9JRCBbQVRUQUNITUVOVF9JRFNdIgogICAgIG1haW5fc3RlcHMgPSBbCi0gICAgICAgIENs
ZWFuV29ya2luZ0RpcmVjdG9yeVN0ZXAsCi0gICAgICAgIFVwZGF0ZVN0ZXAsCi0gICAgICAgIEFw
cGx5UGF0Y2hTdGVwLAotICAgICAgICBCdWlsZFN0ZXAsCisgICAgICAgIHN0ZXBzLkNsZWFuV29y
a2luZ0RpcmVjdG9yeSwKKyAgICAgICAgc3RlcHMuVXBkYXRlLAorICAgICAgICBzdGVwcy5BcHBs
eVBhdGNoLAorICAgICAgICBzdGVwcy5CdWlsZCwKICAgICBdCiAKIAogY2xhc3MgQWJzdHJhY3RQ
YXRjaEFwcGx5aW5nQ29tbWFuZChBYnN0cmFjdFBhdGNoU2VxdWVuY2luZ0NvbW1hbmQpOgogICAg
IHByZXBhcmVfc3RlcHMgPSBbCi0gICAgICAgIEVuc3VyZUxvY2FsQ29tbWl0SWZOZWVkZWQsCi0g
ICAgICAgIENsZWFuV29ya2luZ0RpcmVjdG9yeVdpdGhMb2NhbENvbW1pdHNTdGVwLAotICAgICAg
ICBVcGRhdGVTdGVwLAorICAgICAgICBzdGVwcy5FbnN1cmVMb2NhbENvbW1pdElmTmVlZGVkLAor
ICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnlXaXRoTG9jYWxDb21taXRzLAorICAg
ICAgICBzdGVwcy5VcGRhdGUsCiAgICAgXQogICAgIG1haW5fc3RlcHMgPSBbCi0gICAgICAgIEFw
cGx5UGF0Y2hXaXRoTG9jYWxDb21taXRTdGVwLAorICAgICAgICBzdGVwcy5BcHBseVBhdGNoV2l0
aExvY2FsQ29tbWl0LAogICAgIF0KIAogCkBAIC0yMTUsMTggKzIxNiwxOCBAQCBjbGFzcyBBcHBs
eVBhdGNoZXMoQWJzdHJhY3RQYXRjaEFwcGx5aW5nQ29tbWFuZCwgUHJvY2Vzc0J1Z3NNaXhpbik6
CiAKIGNsYXNzIEFic3RyYWN0UGF0Y2hMYW5kaW5nQ29tbWFuZChBYnN0cmFjdFBhdGNoU2VxdWVu
Y2luZ0NvbW1hbmQpOgogICAgIHByZXBhcmVfc3RlcHMgPSBbCi0gICAgICAgIEVuc3VyZUJ1aWxk
ZXJzQXJlR3JlZW5TdGVwLAorICAgICAgICBzdGVwcy5FbnN1cmVCdWlsZGVyc0FyZUdyZWVuLAog
ICAgIF0KICAgICBtYWluX3N0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlT
dGVwLAotICAgICAgICBVcGRhdGVTdGVwLAotICAgICAgICBBcHBseVBhdGNoU3RlcCwKLSAgICAg
ICAgRW5zdXJlQnVpbGRlcnNBcmVHcmVlblN0ZXAsCi0gICAgICAgIEJ1aWxkU3RlcCwKLSAgICAg
ICAgUnVuVGVzdHNTdGVwLAotICAgICAgICBDb21taXRTdGVwLAotICAgICAgICBDbG9zZVBhdGNo
U3RlcCwKLSAgICAgICAgQ2xvc2VCdWdTdGVwLAorICAgICAgICBzdGVwcy5DbGVhbldvcmtpbmdE
aXJlY3RvcnksCisgICAgICAgIHN0ZXBzLlVwZGF0ZSwKKyAgICAgICAgc3RlcHMuQXBwbHlQYXRj
aCwKKyAgICAgICAgc3RlcHMuRW5zdXJlQnVpbGRlcnNBcmVHcmVlbiwKKyAgICAgICAgc3RlcHMu
QnVpbGQsCisgICAgICAgIHN0ZXBzLlJ1blRlc3RzLAorICAgICAgICBzdGVwcy5Db21taXQsCisg
ICAgICAgIHN0ZXBzLkNsb3NlUGF0Y2gsCisgICAgICAgIHN0ZXBzLkNsb3NlQnVnLAogICAgIF0K
IAogCkBAIC0yNTAsMTEgKzI1MSwxMSBAQCBjbGFzcyBSb2xsb3V0KEFic3RyYWN0U2VxdWVuY2Vk
Q29tbW1hbmQpOgogICAgIGhlbHBfdGV4dCA9ICJSZXZlcnQgdGhlIGdpdmVuIHJldmlzaW9uIGlu
IHRoZSB3b3JraW5nIGNvcHkgYW5kIG9wdGlvbmFsbHkgY29tbWl0IHRoZSByZXZlcnQgYW5kIHJl
LW9wZW4gdGhlIG9yaWdpbmFsIGJ1ZyIKICAgICBhcmd1bWVudF9uYW1lcyA9ICJSRVZJU0lPTiBb
QlVHSURdIgogICAgIHN0ZXBzID0gWwotICAgICAgICBDbGVhbldvcmtpbmdEaXJlY3RvcnlTdGVw
LAotICAgICAgICBVcGRhdGVTdGVwLAotICAgICAgICBSZXZlcnRSZXZpc2lvblN0ZXAsCi0gICAg
ICAgIFByZXBhcmVDaGFuZ2VMb2dGb3JSZXZlcnRTdGVwLAotICAgICAgICBDb21wbGV0ZVJvbGxv
dXQsCisgICAgICAgIHN0ZXBzLkNsZWFuV29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAgc3RlcHMu
VXBkYXRlLAorICAgICAgICBzdGVwcy5SZXZlcnRSZXZpc2lvbiwKKyAgICAgICAgc3RlcHMuUHJl
cGFyZUNoYW5nZUxvZ0ZvclJldmVydCwKKyAgICAgICAgc3RlcHMuQ29tcGxldGVSb2xsb3V0LAog
ICAgIF0KIAogICAgIEBzdGF0aWNtZXRob2QKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbWFuZHMvdXBsb2FkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tYW5kcy91cGxvYWQucHkKaW5kZXggMTU0ZmRmZi4uMTY1ZjJlZiAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tYW5kcy91cGxvYWQucHkKQEAgLTM1LDgg
KzM1LDkgQEAgaW1wb3J0IHN5cwogCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgog
CitpbXBvcnQgd2Via2l0cHkuc3RlcHMgYXMgc3RlcHMKKwogZnJvbSB3ZWJraXRweS5idWd6aWxs
YSBpbXBvcnQgcGFyc2VfYnVnX2lkCi1mcm9tIHdlYmtpdHB5LmJ1aWxkc3RlcHMgaW1wb3J0IFBy
ZXBhcmVDaGFuZ2VMb2dTdGVwLCBFZGl0Q2hhbmdlTG9nU3RlcCwgQ29uZmlybURpZmZTdGVwLCBD
b21tYW5kT3B0aW9ucywgT2Jzb2xldGVQYXRjaGVzT25CdWdTdGVwLCBQb3N0RGlmZlRvQnVnU3Rl
cCwgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsIENyZWF0ZUJ1Z1N0ZXAKIGZyb20gd2Via2l0cHku
Y29tbWFuZHMuZG93bmxvYWQgaW1wb3J0IEFic3RyYWN0U2VxdWVuY2VkQ29tbW1hbmQKIGZyb20g
d2Via2l0cHkuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zyb21fc3ZuX3JldmlzaW9uCiBm
cm9tIHdlYmtpdHB5LmNvbW1pdHRlcnMgaW1wb3J0IENvbW1pdHRlckxpc3QKQEAgLTkxLDcgKzky
LDcgQEAgY2xhc3MgT2Jzb2xldGVBdHRhY2htZW50cyhBYnN0cmFjdFNlcXVlbmNlZENvbW1tYW5k
KToKICAgICBoZWxwX3RleHQgPSAiTWFyayBhbGwgYXR0YWNobWVudHMgb24gYSBidWcgYXMgb2Jz
b2xldGUiCiAgICAgYXJndW1lbnRfbmFtZXMgPSAiQlVHSUQiCiAgICAgc3RlcHMgPSBbCi0gICAg
ICAgIE9ic29sZXRlUGF0Y2hlc09uQnVnU3RlcCwKKyAgICAgICAgc3RlcHMuT2Jzb2xldGVQYXRj
aGVzLAogICAgIF0KIAogICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdz
LCB0b29sKToKQEAgLTExNCw5ICsxMTUsOSBAQCBjbGFzcyBQb3N0RGlmZihBYnN0cmFjdFBhdGNo
VXBsb2FkaW5nQ29tbWFuZCk6CiAgICAgYXJndW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKICAgICBz
aG93X2luX21haW5faGVscCA9IFRydWUKICAgICBzdGVwcyA9IFsKLSAgICAgICAgQ29uZmlybURp
ZmZTdGVwLAotICAgICAgICBPYnNvbGV0ZVBhdGNoZXNPbkJ1Z1N0ZXAsCi0gICAgICAgIFBvc3RE
aWZmVG9CdWdTdGVwLAorICAgICAgICBzdGVwcy5Db25maXJtRGlmZiwKKyAgICAgICAgc3RlcHMu
T2Jzb2xldGVQYXRjaGVzLAorICAgICAgICBzdGVwcy5Qb3N0RGlmZiwKICAgICBdCiAKICAgICBk
ZWYgX3ByZXBhcmVfc3RhdGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CkBAIC0xMzIsOSAr
MTMzLDkgQEAgY2xhc3MgUHJlcGFyZURpZmYoQWJzdHJhY3RTZXF1ZW5jZWRDb21tbWFuZCk6CiAg
ICAgaGVscF90ZXh0ID0gIkNyZWF0ZXMgYSBidWcgKG9yIHByb21wdHMgZm9yIGFuIGV4aXN0aW5n
IGJ1ZykgYW5kIHByZXBhcmVzIHRoZSBDaGFuZ2VMb2dzIgogICAgIGFyZ3VtZW50X25hbWVzID0g
IltCVUdJRF0iCiAgICAgc3RlcHMgPSBbCi0gICAgICAgIFByb21wdEZvckJ1Z09yVGl0bGVTdGVw
LAotICAgICAgICBDcmVhdGVCdWdTdGVwLAotICAgICAgICBQcmVwYXJlQ2hhbmdlTG9nU3RlcCwK
KyAgICAgICAgc3RlcHMuUHJvbXB0Rm9yQnVnT3JUaXRsZSwKKyAgICAgICAgc3RlcHMuQ3JlYXRl
QnVnLAorICAgICAgICBzdGVwcy5QcmVwYXJlQ2hhbmdlTG9nLAogICAgIF0KIAogICAgIGRlZiBf
cHJlcGFyZV9zdGF0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKQEAgLTE0NywxMyArMTQ4
LDEzIEBAIGNsYXNzIFN1Ym1pdFBhdGNoKEFic3RyYWN0UGF0Y2hVcGxvYWRpbmdDb21tYW5kKToK
ICAgICBoZWxwX3RleHQgPSAiQXV0b21hdGVzIHRoZSBwcm9jZXNzIG9mIHVwbG9hZGluZyBhIHBh
dGNoIGZvciByZXZpZXciCiAgICAgYXJndW1lbnRfbmFtZXMgPSAiW0JVR0lEXSIKICAgICBzdGVw
cyA9IFsKLSAgICAgICAgUHJvbXB0Rm9yQnVnT3JUaXRsZVN0ZXAsCi0gICAgICAgIENyZWF0ZUJ1
Z1N0ZXAsCi0gICAgICAgIFByZXBhcmVDaGFuZ2VMb2dTdGVwLAotICAgICAgICBFZGl0Q2hhbmdl
TG9nU3RlcCwKLSAgICAgICAgQ29uZmlybURpZmZTdGVwLAotICAgICAgICBPYnNvbGV0ZVBhdGNo
ZXNPbkJ1Z1N0ZXAsCi0gICAgICAgIFBvc3REaWZmVG9CdWdTdGVwLAorICAgICAgICBzdGVwcy5Q
cm9tcHRGb3JCdWdPclRpdGxlLAorICAgICAgICBzdGVwcy5DcmVhdGVCdWcsCisgICAgICAgIHN0
ZXBzLlByZXBhcmVDaGFuZ2VMb2csCisgICAgICAgIHN0ZXBzLkVkaXRDaGFuZ2VMb2csCisgICAg
ICAgIHN0ZXBzLkNvbmZpcm1EaWZmLAorICAgICAgICBzdGVwcy5PYnNvbGV0ZVBhdGNoZXMsCisg
ICAgICAgIHN0ZXBzLlBvc3REaWZmLAogICAgIF0KIAogICAgIGRlZiBfcHJlcGFyZV9zdGF0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKQEAgLTE2Niw3ICsxNjcsNyBAQCBjbGFzcyBFZGl0
Q2hhbmdlTG9nKEFic3RyYWN0U2VxdWVuY2VkQ29tbW1hbmQpOgogICAgIG5hbWUgPSAiZWRpdC1j
aGFuZ2Vsb2ciCiAgICAgaGVscF90ZXh0ID0gIk9wZW5zIG1vZGlmaWVkIENoYW5nZUxvZ3MgaW4g
JEVESVRPUiIKICAgICBzdGVwcyA9IFsKLSAgICAgICAgRWRpdENoYW5nZUxvZ1N0ZXAsCisgICAg
ICAgIHN0ZXBzLkVkaXRDaGFuZ2VMb2csCiAgICAgXQogCiAKQEAgLTE4MSw5ICsxODIsOSBAQCBj
bGFzcyBQb3N0Q29tbWl0cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQpOgogICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi1iIiwgIi0tYnVnLWlkIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0
cmluZyIsIGRlc3Q9ImJ1Z19pZCIsIGhlbHA9IlNwZWNpZnkgYnVnIGlkIGlmIG5vIFVSTCBpcyBw
cm92aWRlZCBpbiB0aGUgY29tbWl0IGxvZy4iKSwKICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCIt
LWFkZC1sb2ctYXMtY29tbWVudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImFkZF9sb2df
YXNfY29tbWVudCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkFkZCBjb21taXQgbG9nIG1lc3NhZ2Ug
YXMgYSBjb21tZW50IHdoZW4gdXBsb2FkaW5nIHRoZSBwYXRjaC4iKSwKICAgICAgICAgICAgIG1h
a2Vfb3B0aW9uKCItbSIsICItLWRlc2NyaXB0aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0
cmluZyIsIGRlc3Q9ImRlc2NyaXB0aW9uIiwgaGVscD0iRGVzY3JpcHRpb24gc3RyaW5nIGZvciB0
aGUgYXR0YWNobWVudCAoZGVmYXVsdDogZGVzY3JpcHRpb24gZnJvbSBjb21taXQgbWVzc2FnZSki
KSwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25zLm9ic29sZXRlX3BhdGNoZXMsCi0gICAgICAg
ICAgICBDb21tYW5kT3B0aW9ucy5yZXZpZXcsCi0gICAgICAgICAgICBDb21tYW5kT3B0aW9ucy5y
ZXF1ZXN0X2NvbW1pdCwKKyAgICAgICAgICAgIHN0ZXBzLk9wdGlvbnMub2Jzb2xldGVfcGF0Y2hl
cywKKyAgICAgICAgICAgIHN0ZXBzLk9wdGlvbnMucmV2aWV3LAorICAgICAgICAgICAgc3RlcHMu
T3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCwKICAgICAgICAgXQogICAgICAgICBBYnN0cmFjdERlY2xh
cmF0aXZlQ29tbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zLCByZXF1aXJlc19s
b2NhbF9jb21taXRzPVRydWUpCiAKQEAgLTIxNiw3ICsyMTcsNyBAQCBjbGFzcyBQb3N0Q29tbWl0
cyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQpOgogCiAgICAgICAgICAgICBpZiBvcHRpb25z
Lm9ic29sZXRlX3BhdGNoZXMgYW5kIGJ1Z19pZCBub3QgaW4gaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hl
czoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHsgImJ1Z19pZCI6IGJ1Z19pZCB9Ci0gICAgICAg
ICAgICAgICAgT2Jzb2xldGVQYXRjaGVzT25CdWdTdGVwKHRvb2wsIG9wdGlvbnMpLnJ1bihzdGF0
ZSkKKyAgICAgICAgICAgICAgICBzdGVwcy5PYnNvbGV0ZVBhdGNoZXModG9vbCwgb3B0aW9ucyku
cnVuKHN0YXRlKQogICAgICAgICAgICAgICAgIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXMuYWRkKGJ1
Z19pZCkKIAogICAgICAgICAgICAgZGlmZl9maWxlID0gc2VsZi5fZGlmZl9maWxlX2Zvcl9jb21t
aXQodG9vbCwgY29tbWl0X2lkKQpAQCAtMzIzLDggKzMyNCw4IEBAIGNsYXNzIENyZWF0ZUJ1ZyhB
YnN0cmFjdERlY2xhcmF0aXZlQ29tbW1hbmQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgog
ICAgICAgICBvcHRpb25zID0gWwotICAgICAgICAgICAgQ29tbWFuZE9wdGlvbnMuY2MsCi0gICAg
ICAgICAgICBDb21tYW5kT3B0aW9ucy5jb21wb25lbnQsCisgICAgICAgICAgICBzdGVwcy5PcHRp
b25zLmNjLAorICAgICAgICAgICAgc3RlcHMuT3B0aW9ucy5jb21wb25lbnQsCiAgICAgICAgICAg
ICBtYWtlX29wdGlvbigiLS1uby1wcm9tcHQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0i
cHJvbXB0IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEbyBub3QgcHJvbXB0IGZvciBidWcgdGl0bGUg
YW5kIGNvbW1lbnQ7IHVzZSBjb21taXQgbG9nIGluc3RlYWQuIiksCiAgICAgICAgICAgICBtYWtl
X29wdGlvbigiLS1uby1yZXZpZXciLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0icmV2aWV3
IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEbyBub3QgbWFyayB0aGUgcGF0Y2ggZm9yIHJldmlldy4i
KSwKICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLXJlcXVlc3QtY29tbWl0IiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwgZGVzdD0icmVxdWVzdF9jb21taXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJN
YXJrIHRoZSBwYXRjaCBhcyBuZWVkaW5nIGF1dG8tY29tbWl0IGFmdGVyIHJldmlldy4iKSwKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvX19pbml0X18ucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL19faW5pdF9fLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEs
NTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFwcGx5cGF0
Y2ggaW1wb3J0IEFwcGx5UGF0Y2gKK2Zyb20gd2Via2l0cHkuc3RlcHMuYXBwbHlwYXRjaHdpdGhs
b2NhbGNvbW1pdCBpbXBvcnQgQXBwbHlQYXRjaFdpdGhMb2NhbENvbW1pdAorZnJvbSB3ZWJraXRw
eS5zdGVwcy5idWlsZCBpbXBvcnQgQnVpbGQKK2Zyb20gd2Via2l0cHkuc3RlcHMuY2hlY2tzdHls
ZSBpbXBvcnQgQ2hlY2tTdHlsZQorZnJvbSB3ZWJraXRweS5zdGVwcy5jbGVhbndvcmtpbmdkaXJl
Y3RvcnkgaW1wb3J0IENsZWFuV29ya2luZ0RpcmVjdG9yeQorZnJvbSB3ZWJraXRweS5zdGVwcy5j
bGVhbndvcmtpbmdkaXJlY3Rvcnl3aXRobG9jYWxjb21taXRzIGltcG9ydCBDbGVhbldvcmtpbmdE
aXJlY3RvcnlXaXRoTG9jYWxDb21taXRzCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmNsb3NlYnVnIGlt
cG9ydCBDbG9zZUJ1ZworZnJvbSB3ZWJraXRweS5zdGVwcy5jbG9zZWJ1Z2ZvcmxhbmRkaWZmIGlt
cG9ydCBDbG9zZUJ1Z0ZvckxhbmREaWZmCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmNsb3NlcGF0Y2gg
aW1wb3J0IENsb3NlUGF0Y2gKK2Zyb20gd2Via2l0cHkuc3RlcHMuY29tbWl0IGltcG9ydCBDb21t
aXQKK2Zyb20gd2Via2l0cHkuc3RlcHMuY29tcGxldGVyb2xsb3V0IGltcG9ydCBDb21wbGV0ZVJv
bGxvdXQKK2Zyb20gd2Via2l0cHkuc3RlcHMuY29uZmlybWRpZmYgaW1wb3J0IENvbmZpcm1EaWZm
Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmNyZWF0ZWJ1ZyBpbXBvcnQgQ3JlYXRlQnVnCitmcm9tIHdl
YmtpdHB5LnN0ZXBzLmVkaXRjaGFuZ2Vsb2cgaW1wb3J0IEVkaXRDaGFuZ2VMb2cKK2Zyb20gd2Vi
a2l0cHkuc3RlcHMuZW5zdXJlYnVpbGRlcnNhcmVncmVlbiBpbXBvcnQgRW5zdXJlQnVpbGRlcnNB
cmVHcmVlbgorZnJvbSB3ZWJraXRweS5zdGVwcy5lbnN1cmVsb2NhbGNvbW1pdGlmbmVlZGVkIGlt
cG9ydCBFbnN1cmVMb2NhbENvbW1pdElmTmVlZGVkCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9ic29s
ZXRlcGF0Y2hlcyBpbXBvcnQgT2Jzb2xldGVQYXRjaGVzCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9w
dGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkuc3RlcHMucG9zdGRpZmYgaW1wb3J0
IFBvc3REaWZmCitmcm9tIHdlYmtpdHB5LnN0ZXBzLnByZXBhcmVjaGFuZ2Vsb2dmb3JyZXZlcnQg
aW1wb3J0IFByZXBhcmVDaGFuZ2VMb2dGb3JSZXZlcnQKK2Zyb20gd2Via2l0cHkuc3RlcHMucHJl
cGFyZWNoYW5nZWxvZyBpbXBvcnQgUHJlcGFyZUNoYW5nZUxvZworZnJvbSB3ZWJraXRweS5zdGVw
cy5wcm9tcHRmb3JidWdvcnRpdGxlIGltcG9ydCBQcm9tcHRGb3JCdWdPclRpdGxlCitmcm9tIHdl
YmtpdHB5LnN0ZXBzLnJldmVydHJldmlzaW9uIGltcG9ydCBSZXZlcnRSZXZpc2lvbgorZnJvbSB3
ZWJraXRweS5zdGVwcy5ydW50ZXN0cyBpbXBvcnQgUnVuVGVzdHMKK2Zyb20gd2Via2l0cHkuc3Rl
cHMudXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlciBpbXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dp
dGhSZXZpZXdlcgorZnJvbSB3ZWJraXRweS5zdGVwcy51cGRhdGUgaW1wb3J0IFVwZGF0ZQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2Fic3RyYWN0c3RlcC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzljZjU1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hYnN0cmFjdHN0ZXAucHkK
QEAgLTAsMCArMSw2OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkud2Vi
a2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRweS53ZWJraXRwb3J0IGltcG9ydCBX
ZWJLaXRQb3J0CisKKworY2xhc3MgQWJzdHJhY3RTdGVwKG9iamVjdCk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl90b29sID0gdG9vbAorICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9wb3J0ID0gTm9uZQor
CisgICAgZGVmIF9ydW5fc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9y
dD1XZWJLaXRQb3J0KToKKyAgICAgICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQor
ICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc2VsZi5wb3J0KCkKKyAgICAgICAgc2Vs
Zi5fdG9vbC5leGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgo
c2NyaXB0X25hbWUpLCBxdWlldCkKKworICAgICMgRklYTUU6IFRoZSBwb3J0IHNob3VsZCBsaXZl
IG9uIHRoZSB0b29sLgorICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wb3J0
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQKKyAgICAgICAgc2VsZi5fcG9ydCA9IFdl
YktpdFBvcnQucG9ydChzZWxmLl9vcHRpb25zLnBvcnQpCisgICAgICAgIHJldHVybiBzZWxmLl9w
b3J0CisKKyAgICBfd2VsbF9rbm93bl9rZXlzID0geworICAgICAgICAiZGlmZiIgOiBsYW1iZGEg
c2VsZjogc2VsZi5fdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKSwKKyAgICAgICAgImNoYW5nZWxv
Z3MiIDogbGFtYmRhIHNlbGY6IHNlbGYuX3Rvb2wuc2NtKCkubW9kaWZpZWRfY2hhbmdlbG9ncygp
LAorICAgIH0KKworICAgIGRlZiBjYWNoZWRfbG9va3VwKHNlbGYsIHN0YXRlLCBrZXksIHByb21p
c2U9Tm9uZSk6CisgICAgICAgIGlmIHN0YXRlLmdldChrZXkpOgorICAgICAgICAgICAgcmV0dXJu
IHN0YXRlW2tleV0KKyAgICAgICAgaWYgbm90IHByb21pc2U6CisgICAgICAgICAgICBwcm9taXNl
ID0gc2VsZi5fd2VsbF9rbm93bl9rZXlzLmdldChrZXkpCisgICAgICAgIHN0YXRlW2tleV0gPSBw
cm9taXNlKHNlbGYpCisgICAgICAgIHJldHVybiBzdGF0ZVtrZXldCisKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgb3B0aW9ucyhjbHMpOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBy
dW4oc2VsZiwgc3RhdGUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3Vi
Y2xhc3NlcyBtdXN0IGltcGxlbWVudCIKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvYXBwbHlwYXRjaC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3RlcHMvYXBwbHlwYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lMWExNTUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdGVwcy9hcHBseXBhdGNoLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVw
Citmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0
cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworCitjbGFzcyBBcHBseVBhdGNoKEFic3RyYWN0
U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAg
cmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMubm9uX2ludGVyYWN0aXZlLAorICAgICAgICBd
CisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgbG9nKCJQcm9jZXNzaW5nIHBh
dGNoICVzIGZyb20gYnVnICVzLiIgJSAoc3RhdGVbInBhdGNoIl1bImlkIl0sIHN0YXRlWyJwYXRj
aCJdWyJidWdfaWQiXSkpCisgICAgICAgIHNlbGYuX3Rvb2wuc2NtKCkuYXBwbHlfcGF0Y2goc3Rh
dGVbInBhdGNoIl0sIGZvcmNlPXNlbGYuX29wdGlvbnMubm9uX2ludGVyYWN0aXZlKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBhdGNod2l0aGxv
Y2FsY29tbWl0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9hcHBseXBh
dGNod2l0aGxvY2FsY29tbWl0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAxZmFiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL2FwcGx5cGF0Y2h3aXRobG9jYWxjb21taXQucHkKQEAgLTAsMCArMSw0MyBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYXBwbHlwYXRjaCBpbXBvcnQg
QXBwbHlQYXRjaAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCisK
K2NsYXNzIEFwcGx5UGF0Y2hXaXRoTG9jYWxDb21taXQoQXBwbHlQYXRjaCk6CisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAg
ICAgIE9wdGlvbnMubG9jYWxfY29tbWl0LAorICAgICAgICBdICsgQXBwbHlQYXRjaC5vcHRpb25z
KCkKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgorICAgICAgICBBcHBseVBhdGNoLnJ1bihz
ZWxmLCBzdGF0ZSkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5sb2NhbF9jb21taXQ6CisgICAg
ICAgICAgICBjb21taXRfbWVzc2FnZSA9IHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X21lc3NhZ2Vf
Zm9yX3RoaXNfY29tbWl0KCkKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X2xv
Y2FsbHlfd2l0aF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlLm1lc3NhZ2UoKSBvciBzdGF0ZVsicGF0
Y2giXVsibmFtZSJdKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dGVwcy9idWlsZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvYnVpbGQu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyM2NmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvYnVpbGQucHkKQEAg
LTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMg
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMu
YWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuc3RlcHMub3B0
aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQg
bG9nCisKKworY2xhc3MgQnVpbGQoQWJzdHJhY3RTdGVwKToKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgb3B0aW9ucyhjbHMpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgT3B0aW9u
cy5idWlsZCwKKyAgICAgICAgICAgIE9wdGlvbnMucXVpZXQsCisgICAgICAgICAgICBPcHRpb25z
LmJ1aWxkX3N0eWxlLAorICAgICAgICBdCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgYnVpbGRfc3R5
bGUpOgorICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
c2VsZi5wb3J0KCkuYnVpbGRfd2Via2l0X2NvbW1hbmQoYnVpbGRfc3R5bGU9YnVpbGRfc3R5bGUp
LCBzZWxmLl9vcHRpb25zLnF1aWV0KQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAg
ICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmJ1aWxkOgorICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgIGxvZygiQnVpbGRpbmcgV2ViS2l0IikKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5idWls
ZF9zdHlsZSA9PSAiYm90aCI6CisgICAgICAgICAgICBzZWxmLmJ1aWxkKCJkZWJ1ZyIpCisgICAg
ICAgICAgICBzZWxmLmJ1aWxkKCJyZWxlYXNlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuYnVpbGQoc2VsZi5fb3B0aW9ucy5idWlsZF9zdHlsZSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2hlY2tzdHlsZS5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2hlY2tzdHlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kMjM1YWMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdGVwcy9jaGVja3N0eWxlLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBv
cnQgQWJzdHJhY3RTdGVwCisKK2NsYXNzIENoZWNrU3R5bGUoQWJzdHJhY3RTdGVwKToKKyAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiY2hlY2std2Vi
a2l0LXN0eWxlIikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3Rl
cHMvY2xlYW53b3JraW5nZGlyZWN0b3J5LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdGVwcy9jbGVhbndvcmtpbmdkaXJlY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uODhlMzhmNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3RlcHMvY2xlYW53b3JraW5nZGlyZWN0b3J5LnB5CkBAIC0wLDAgKzEsNTIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5zdGVw
cy5hYnN0cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5v
cHRpb25zIGltcG9ydCBPcHRpb25zCisKKworY2xhc3MgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5KEFi
c3RyYWN0U3RlcCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2wsIG9wdGlvbnMsIGFsbG93
X2xvY2FsX2NvbW1pdHM9RmFsc2UpOgorICAgICAgICBBYnN0cmFjdFN0ZXAuX19pbml0X18oc2Vs
ZiwgdG9vbCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5fYWxsb3dfbG9jYWxfY29tbWl0cyA9IGFs
bG93X2xvY2FsX2NvbW1pdHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNs
cyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBPcHRpb25zLmZvcmNlX2NsZWFuLAor
ICAgICAgICAgICAgT3B0aW9ucy5jbGVhbiwKKyAgICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxm
LCBzdGF0ZSk6CisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9v
dCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93X2xvY2FsX2NvbW1pdHM6CisgICAgICAgICAg
ICBzZWxmLl90b29sLnNjbSgpLmVuc3VyZV9ub19sb2NhbF9jb21taXRzKHNlbGYuX29wdGlvbnMu
Zm9yY2VfY2xlYW4pCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY2xlYW46CisgICAgICAgICAg
ICBzZWxmLl90b29sLnNjbSgpLmVuc3VyZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeShmb3JjZV9j
bGVhbj1zZWxmLl9vcHRpb25zLmZvcmNlX2NsZWFuKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbGVhbndvcmtpbmdkaXJlY3Rvcnl3aXRobG9jYWxjb21t
aXRzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbGVhbndvcmtpbmdk
aXJlY3Rvcnl3aXRobG9jYWxjb21taXRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNhYmViYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL2NsZWFud29ya2luZ2RpcmVjdG9yeXdpdGhsb2NhbGNvbW1pdHMucHkKQEAg
LTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMg
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMu
Y2xlYW53b3JraW5nZGlyZWN0b3J5IGltcG9ydCBDbGVhbldvcmtpbmdEaXJlY3RvcnkKKworY2xh
c3MgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5V2l0aExvY2FsQ29tbWl0cyhDbGVhbldvcmtpbmdEaXJl
Y3RvcnkpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b29sLCBvcHRpb25zKToKKyAgICAgICAg
IyBGSVhNRTogVGhpcyBhIGJpdCBvZiBhIGhhY2suICBDb25zaWRlciBkb2luZyB0aGlzIG1vcmUg
Y2xlYW5seS4KKyAgICAgICAgQ2xlYW5Xb3JraW5nRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIHRv
b2wsIG9wdGlvbnMsIGFsbG93X2xvY2FsX2NvbW1pdHM9VHJ1ZSkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xvc2VidWcucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2Nsb3NlYnVnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFhNGIyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0ZXBzL2Nsb3NlYnVnLnB5CkBAIC0wLDAgKzEsNTIgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJz
dHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zy
b20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworCisKK2NsYXNzIENsb3NlQnVn
KEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToK
KyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMuY2xvc2VfYnVnLAorICAgICAg
ICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMuY2xvc2VfYnVnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgQ2hlY2sgdG8g
bWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciByKyBwYXRjaGVzIG9uIHRoZSBidWcgYmVmb3Jl
IGNsb3NpbmcuCisgICAgICAgICMgQXNzdW1lIHRoYXQgci0gcGF0Y2hlcyBhcmUganVzdCBwcmV2
aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRvIG9ic29sZXRlLgorICAgICAgICBwYXRjaGVz
ID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9idWcoc3RhdGVbInBhdGNoIl1b
ImJ1Z19pZCJdKQorICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgIHJl
dmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXciKQorICAgICAgICAgICAgaWYgcmV2aWV3X2Zs
YWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIrIjoKKyAgICAgICAgICAgICAgICBsb2coIk5v
dCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50ICVzIGhhcyByZXZpZXc9JXMuICBBc3N1bWlu
ZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxhbmQgZnJvbSB0aGlzIGJ1Zy4iICUgKHBhdGNo
WyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmlld19mbGFnKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19hc19maXhlZChzdGF0ZVsi
cGF0Y2giXVsiYnVnX2lkIl0sICJBbGwgcmV2aWV3ZWQgcGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVk
LiAgQ2xvc2luZyBidWcuIikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3RlcHMvY2xvc2VidWdmb3JsYW5kZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3RlcHMvY2xvc2VidWdmb3JsYW5kZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wZDUyZmUyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9jbG9zZWJ1Z2ZvcmxhbmRkaWZmLnB5CkBAIC0wLDAgKzEsNTUg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LmNvbW1lbnRzIGltcG9ydCBi
dWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0Citmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0
c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1w
b3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZworCisK
K2NsYXNzIENsb3NlQnVnRm9yTGFuZERpZmYoQWJzdHJhY3RTdGVwKToKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgb3B0aW9ucyhjbHMpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAg
T3B0aW9ucy5jbG9zZV9idWcsCisgICAgICAgIF0KKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGUp
OgorICAgICAgICBjb21tZW50X3RleHQgPSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0KHNl
bGYuX3Rvb2wuc2NtKCksIHN0YXRlWyJjb21taXRfdGV4dCJdKQorICAgICAgICBidWdfaWQgPSBz
dGF0ZVsicGF0Y2giXVsiYnVnX2lkIl0KKyAgICAgICAgaWYgYnVnX2lkOgorICAgICAgICAgICAg
bG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQorICAgICAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5jbG9zZV9idWc6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1
Z19hc19maXhlZChidWdfaWQsIGNvbW1lbnRfdGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5IHRvIGZpZ3VyZSBvdXQg
aWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCisgICAgICAgICAgICAgICAgIyB0byB0aGUgYnVnLCBh
bmQgaWYgc28gb2Jzb2xldGUgaXQuCisgICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdzLnBv
c3RfY29tbWVudF90b19idWcoYnVnX2lkLCBjb21tZW50X3RleHQpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBsb2coY29tbWVudF90ZXh0KQorICAgICAgICAgICAgbG9nKCJObyBidWcgaWQg
cHJvdmlkZWQuIikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3Rl
cHMvY2xvc2VwYXRjaC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY2xv
c2VwYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFhNTYzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jbG9z
ZXBhdGNoLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdl
YmtpdHB5LmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0Citmcm9t
IHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCisKKworY2xh
c3MgQ2xvc2VQYXRjaChBYnN0cmFjdFN0ZXApOgorICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgor
ICAgICAgICBjb21tZW50X3RleHQgPSBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0KHNlbGYu
X3Rvb2wuc2NtKCksIHN0YXRlWyJjb21taXRfdGV4dCJdKQorICAgICAgICBzZWxmLl90b29sLmJ1
Z3MuY2xlYXJfYXR0YWNobWVudF9mbGFncyhzdGF0ZVsicGF0Y2giXVsiaWQiXSwgY29tbWVudF90
ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jb21t
aXQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NvbW1pdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFmZWQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9jb21taXQucHkKQEAgLTAsMCAr
MSwzNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJh
Y3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCitjbGFzcyBDb21taXQoQWJzdHJhY3RTdGVw
KToKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBz
ZWxmLl90b29sLnNjbSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdCgpCisgICAgICAg
IHN0YXRlWyJjb21taXRfdGV4dCJdID0gIHNlbGYuX3Rvb2wuc2NtKCkuY29tbWl0X3dpdGhfbWVz
c2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NvbXBsZXRlcm9sbG91dC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RlcHMvY29tcGxldGVyb2xsb3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjViODNkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NvbXBsZXRlcm9sbG91dC5weQpAQCAtMCwwICsxLDYz
IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5idWlsZCBpbXBv
cnQgQnVpbGQKK2Zyb20gd2Via2l0cHkuc3RlcHMuY29tbWl0IGltcG9ydCBDb21taXQKK2Zyb20g
d2Via2l0cHkuc3RlcHMubWV0YXN0ZXAgaW1wb3J0IE1ldGFTdGVwCitmcm9tIHdlYmtpdHB5LnN0
ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcg
aW1wb3J0IGxvZworCisKK2NsYXNzIENvbXBsZXRlUm9sbG91dChNZXRhU3RlcCk6CisgICAgc3Vi
c3RlcHMgPSBbCisgICAgICAgIEJ1aWxkLAorICAgICAgICBDb21taXQsCisgICAgXQorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgY29sbGVjdGVkX29w
dGlvbnMgPSBjbHMuX2NvbGxlY3Rfb3B0aW9uc19mcm9tX3N0ZXBzKGNscy5zdWJzdGVwcykKKyAg
ICAgICAgY29sbGVjdGVkX29wdGlvbnMuYXBwZW5kKE9wdGlvbnMuY29tcGxldGVfcm9sbG91dCkK
KyAgICAgICAgcmV0dXJuIGNvbGxlY3RlZF9vcHRpb25zCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0
YXRlKToKKyAgICAgICAgYnVnX2lkID0gc3RhdGVbImJ1Z19pZCJdCisgICAgICAgICMgRklYTUU6
IEZ1bGx5IGF1dG9tYXRlZCByb2xsb3V0IGlzIG5vdCAxMDAlIGlkaW90LXByb29mIHlldCwgc28g
Zm9yIG5vdyBqdXN0IGxvZyB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29tcGxldGUgdGhl
IHJvbGxvdXQuCisgICAgICAgICMgT25jZSB3ZSB0cnVzdCByb2xsb3V0IHdlIHdpbGwgcmVtb3Zl
IHRoaXMgb3B0aW9uLgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5jb21wbGV0ZV9yb2xs
b3V0OgorICAgICAgICAgICAgbG9nKCJcbk5PVEU6IFJvbGxvdXQgc3VwcG9ydCBpcyBleHBlcmlt
ZW50YWwuXG5QbGVhc2UgdmVyaWZ5IHRoZSByb2xsb3V0IGRpZmYgYW5kIHVzZSBcImJ1Z3ppbGxh
LXRvb2wgbGFuZC1kaWZmICVzXCIgdG8gY29tbWl0IHRoZSByb2xsb3V0LiIgJSBidWdfaWQpCisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICBNZXRhU3RlcC5ydW4oc2VsZiwgc3RhdGUpCisK
KyAgICAgICAgaWYgbm90IGJ1Z19pZDoKKyAgICAgICAgICAgIGxvZyhzdGF0ZVsiY29tbWl0X3Rl
eHQiXSkKKyAgICAgICAgICAgIGxvZygiTm8gYnVncyB3ZXJlIHVwZGF0ZWQgb3IgcmUtb3BlbmVk
IHRvIHJlZmxlY3QgdGhpcyByb2xsb3V0LiIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
IyBGSVhNRTogSSdtIG5vdCBzdXJlIHN0YXRlWyJjb21taXRfdGV4dCJdIGlzIHF1aXRlIHJpZ2h0
IGhlcmUuCisgICAgICAgIHNlbGYuX3Rvb2wuYnVncy5yZW9wZW5fYnVnKGJ1Z19pZCwgc3RhdGVb
ImNvbW1pdF90ZXh0Il0pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL2NvbmZpcm1kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVw
cy9jb25maXJtZGlmZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTI5
OTAyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVw
cy9jb25maXJtZGlmZi5weQpAQCAtMCwwICsxLDQ3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
ZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAorZnJv
bSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGltcG9ydCBPcHRpb25zCitmcm9tIHdlYmtpdHB5Lndl
YmtpdF9sb2dnaW5nIGltcG9ydCBlcnJvcgorCisKK2NsYXNzIENvbmZpcm1EaWZmKEFic3RyYWN0
U3RlcCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAg
cmV0dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMuY29uZmlybSwKKyAgICAgICAgXQorCisgICAg
ZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmNvbmZp
cm06CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1
cChzdGF0ZSwgImRpZmYiKQorICAgICAgICBzZWxmLl90b29sLnVzZXIucGFnZShkaWZmKQorICAg
ICAgICBpZiBub3Qgc2VsZi5fdG9vbC51c2VyLmNvbmZpcm0oIldhcyB0aGF0IGRpZmYgY29ycmVj
dD8iKToKKyAgICAgICAgICAgIGVycm9yKCJVc2VyIGRlY2xpbmVkIHRvIGNvbnRpbnVlLiIpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NyZWF0ZWJ1Zy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvY3JlYXRlYnVnLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmYxN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL2NyZWF0ZWJ1Zy5weQpAQCAtMCww
ICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0
cmFjdHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25z
IGltcG9ydCBPcHRpb25zCisKKworY2xhc3MgQ3JlYXRlQnVnKEFic3RyYWN0U3RlcCk6CisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAg
ICAgICAgICAgIE9wdGlvbnMuY2MsCisgICAgICAgICAgICBPcHRpb25zLmNvbXBvbmVudCwKKyAg
ICAgICAgXQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgICMgTm8gbmVlZCB0
byBjcmVhdGUgYSBidWcgaWYgd2UgYWxyZWFkeSBoYXZlIG9uZS4KKyAgICAgICAgaWYgc3RhdGUu
Z2V0KCJidWdfaWQiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdGF0ZVsiYnVnX2lk
Il0gPSBzZWxmLl90b29sLmJ1Z3MuY3JlYXRlX2J1ZyhzdGF0ZVsiYnVnX3RpdGxlIl0sIHN0YXRl
WyJidWdfZGVzY3JpcHRpb24iXSwgY29tcG9uZW50PXNlbGYuX29wdGlvbnMuY29tcG9uZW50LCBj
Yz1zZWxmLl9vcHRpb25zLmNjKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdGVwcy9lZGl0Y2hhbmdlbG9nLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdGVwcy9lZGl0Y2hhbmdlbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmJkZjdkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL2VkaXRjaGFuZ2Vsb2cucHkKQEAgLTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFj
dFN0ZXAKKworCitjbGFzcyBFZGl0Q2hhbmdlTG9nKEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1
bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIHNlbGYuX3Rvb2wudXNlci5lZGl0KHNlbGYuY2FjaGVk
X2xvb2t1cChzdGF0ZSwgImNoYW5nZWxvZ3MiKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlYnVpbGRlcnNhcmVncmVlbi5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlYnVpbGRlcnNhcmVncmVlbi5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYyNjVhCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lbnN1cmVidWlsZGVyc2FyZWdy
ZWVuLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtp
dHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5
LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dp
bmcgaW1wb3J0IGVycm9yCisKKworY2xhc3MgRW5zdXJlQnVpbGRlcnNBcmVHcmVlbihBYnN0cmFj
dFN0ZXApOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAg
IHJldHVybiBbCisgICAgICAgICAgICBPcHRpb25zLmNoZWNrX2J1aWxkZXJzLAorICAgICAgICBd
CisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlv
bnMuY2hlY2tfYnVpbGRlcnM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmVkX2J1aWxk
ZXJzX25hbWVzID0gc2VsZi5fdG9vbC5idWlsZGJvdC5yZWRfY29yZV9idWlsZGVyc19uYW1lcygp
CisgICAgICAgIGlmIG5vdCByZWRfYnVpbGRlcnNfbmFtZXM6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgcmVkX2J1aWxkZXJzX25hbWVzID0gbWFwKGxhbWJkYSBuYW1lOiAiXCIlc1wiIiAl
IG5hbWUsIHJlZF9idWlsZGVyc19uYW1lcykgIyBBZGQgcXVvdGVzIGFyb3VuZCB0aGUgbmFtZXMu
CisgICAgICAgIGVycm9yKCJCdWlsZGVycyBbJXNdIGFyZSByZWQsIHBsZWFzZSBkbyBub3QgY29t
bWl0LlxuU2VlIGh0dHA6Ly8lcy5cblBhc3MgLS1pZ25vcmUtYnVpbGRlcnMgdG8gYnlwYXNzIHRo
aXMgY2hlY2suIiAlICgiLCAiLmpvaW4ocmVkX2J1aWxkZXJzX25hbWVzKSwgc2VsZi5fdG9vbC5i
dWlsZGJvdC5idWlsZGJvdF9ob3N0KSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvZW5zdXJlbG9jYWxjb21taXRpZm5lZWRlZC5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvZW5zdXJlbG9jYWxjb21taXRpZm5lZWRlZC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWNmODkxCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9lbnN1cmVsb2NhbGNvbW1pdGlm
bmVlZGVkLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdl
YmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtp
dHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xv
Z2dpbmcgaW1wb3J0IGVycm9yCisKKworY2xhc3MgRW5zdXJlTG9jYWxDb21taXRJZk5lZWRlZChB
YnN0cmFjdFN0ZXApOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6Cisg
ICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBPcHRpb25zLmxvY2FsX2NvbW1pdCwKKyAgICAg
ICAgXQorCisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMubG9jYWxfY29tbWl0IGFuZCBub3Qgc2VsZi5fdG9vbC5zY20oKS5zdXBwb3J0c19sb2NhbF9j
b21taXRzKCk6CisgICAgICAgICAgICBlcnJvcigiLS1sb2NhbC1jb21taXQgcGFzc2VkLCBidXQg
JXMgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbCBjb21taXRzIiAlIHNlbGYuX3Rvb2wuc2NtLmRpc3Bs
YXlfbmFtZSgpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVw
cy9tZXRhc3RlcC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvbWV0YXN0
ZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzNjhkZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvbWV0YXN0ZXAu
cHkKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHku
c3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCisjIEZJWE1FOiBVbmlm
eSB3aXRoIFN0ZXBTZXF1ZW5jZT8gIEknbSBub3Qgc3VyZSB5ZXQgd2hpY2ggaXMgdGhlIGJldHRl
ciBkZXNpZ24uCitjbGFzcyBNZXRhU3RlcChBYnN0cmFjdFN0ZXApOgorICAgIHN1YnN0ZXBzID0g
W10gIyBPdmVycmlkZSBpbiBzdWJjbGFzc2VzCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvb2ws
IG9wdGlvbnMpOgorICAgICAgICBBYnN0cmFjdFN0ZXAuX19pbml0X18oc2VsZiwgdG9vbCwgb3B0
aW9ucykKKyAgICAgICAgc2VsZi5fc3RlcF9pbnN0YW5jZXMgPSBbXQorICAgICAgICBmb3Igc3Rl
cF9jbGFzcyBpbiBzZWxmLnN1YnN0ZXBzOgorICAgICAgICAgICAgc2VsZi5fc3RlcF9pbnN0YW5j
ZXMuYXBwZW5kKHN0ZXBfY2xhc3ModG9vbCwgb3B0aW9ucykpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9jb2xsZWN0X29wdGlvbnNfZnJvbV9zdGVwcyhzdGVwcyk6CisgICAgICAgIGNv
bGxlY3RlZF9vcHRpb25zID0gW10KKyAgICAgICAgZm9yIHN0ZXAgaW4gc3RlcHM6CisgICAgICAg
ICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9IGNvbGxlY3RlZF9vcHRpb25zICsgc3RlcC5vcHRpb25z
KCkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RlZF9vcHRpb25zCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgb3B0aW9ucyhjbHMpOgorICAgICAgICByZXR1cm4gY2xzLl9jb2xsZWN0X29wdGlv
bnNfZnJvbV9zdGVwcyhjbHMuc3Vic3RlcHMpCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToK
KyAgICAgICAgZm9yIHN0ZXAgaW4gc2VsZi5fc3RlcF9pbnN0YW5jZXM6CisgICAgICAgICAgICAg
c3RlcC5ydW4oc3RhdGUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3RlcHMvb2Jzb2xldGVwYXRjaGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ5YzY0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0ZXBzL29ic29sZXRlcGF0Y2hlcy5weQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKK2Zyb20g
d2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zyb20gd2Vi
a2l0cHkuc3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53ZWJraXRf
bG9nZ2luZyBpbXBvcnQgbG9nCisKKworY2xhc3MgT2Jzb2xldGVQYXRjaGVzKEFic3RyYWN0U3Rl
cCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0
dXJuIFsKKyAgICAgICAgICAgIE9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcywKKyAgICAgICAgXQor
CisgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
Lm9ic29sZXRlX3BhdGNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYnVnX2lkID0g
c3RhdGVbImJ1Z19pZCJdCisgICAgICAgIHBhdGNoZXMgPSBzZWxmLl90b29sLmJ1Z3MuZmV0Y2hf
cGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCisgICAgICAgIGlmIG5vdCBwYXRjaGVzOgorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgIGxvZygiT2Jzb2xldGluZyAlcyBvbiBidWcgJXMiICUgKHBs
dXJhbGl6ZSgib2xkIHBhdGNoIiwgbGVuKHBhdGNoZXMpKSwgYnVnX2lkKSkKKyAgICAgICAgZm9y
IHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICBzZWxmLl90b29sLmJ1Z3Mub2Jzb2xldGVf
YXR0YWNobWVudChwYXRjaFsiaWQiXSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvb3B0aW9ucy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3RlcHMvb3B0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNi
ZTFlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVw
cy9vcHRpb25zLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9t
IG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgorCitjbGFzcyBPcHRpb25zKG9iamVjdCk6Cisg
ICAgZm9yY2VfY2xlYW4gPSBtYWtlX29wdGlvbigiLS1mb3JjZS1jbGVhbiIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlX2NsZWFuIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iQ2xlYW4g
d29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMgKHJlbW92ZXMgbG9jYWwg
Y2hhbmdlcyBhbmQgY29tbWl0cykiKQorICAgIGNsZWFuID0gbWFrZV9vcHRpb24oIi0tbm8tY2xl
YW4iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xlYW4iLCBkZWZhdWx0PVRydWUsIGhl
bHA9IkRvbid0IGNoZWNrIGlmIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiBiZWZvcmUg
YXBwbHlpbmcgcGF0Y2hlcyIpCisgICAgY2hlY2tfYnVpbGRlcnMgPSBtYWtlX29wdGlvbigiLS1p
Z25vcmUtYnVpbGRlcnMiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2hlY2tfYnVpbGRl
cnMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVpbGQu
d2Via2l0Lm9yZyBidWlsZGVycyBhcmUgZ3JlZW4gYmVmb3JlIGxhbmRpbmcuIikKKyAgICBxdWll
dCA9IG1ha2Vfb3B0aW9uKCItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icXVp
ZXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJQcm9kdWNlIGxlc3MgY29uc29sZSBvdXRwdXQuIikK
KyAgICBub25faW50ZXJhY3RpdmUgPSBtYWtlX29wdGlvbigiLS1ub24taW50ZXJhY3RpdmUiLCBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJub25faW50ZXJhY3RpdmUiLCBkZWZhdWx0PUZhbHNl
LCBoZWxwPSJOZXZlciBwcm9tcHQgdGhlIHVzZXIsIGZhaWwgYXMgZmFzdCBhcyBwb3NzaWJsZS4i
KQorICAgIHBhcmVudF9jb21tYW5kID0gbWFrZV9vcHRpb24oIi0tcGFyZW50LWNvbW1hbmQiLCBh
Y3Rpb249InN0b3JlIiwgZGVzdD0icGFyZW50X2NvbW1hbmQiLCBkZWZhdWx0PU5vbmUsIGhlbHA9
IihJbnRlcm5hbCkgVGhlIGNvbW1hbmQgdGhhdCBzcGF3bmVkIHRoaXMgaW5zdGFuY2UuIikKKyAg
ICB1cGRhdGUgPSBtYWtlX29wdGlvbigiLS1uby11cGRhdGUiLCBhY3Rpb249InN0b3JlX2ZhbHNl
IiwgZGVzdD0idXBkYXRlIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCB1cGRhdGUgdGhlIHdv
cmtpbmcgZGlyZWN0b3J5LiIpCisgICAgbG9jYWxfY29tbWl0ID0gbWFrZV9vcHRpb24oIi0tbG9j
YWwtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibG9jYWxfY29tbWl0IiwgZGVm
YXVsdD1GYWxzZSwgaGVscD0iTWFrZSBhIGxvY2FsIGNvbW1pdCBmb3IgZWFjaCBhcHBsaWVkIHBh
dGNoIikKKyAgICBidWlsZCA9IG1ha2Vfb3B0aW9uKCItLW5vLWJ1aWxkIiwgYWN0aW9uPSJzdG9y
ZV9mYWxzZSIsIGRlc3Q9ImJ1aWxkIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91
dCBidWlsZGluZyBmaXJzdCwgaW1wbGllcyAtLW5vLXRlc3QuIikKKyAgICBidWlsZF9zdHlsZSA9
IG1ha2Vfb3B0aW9uKCItLWJ1aWxkLXN0eWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxk
X3N0eWxlIiwgZGVmYXVsdD1Ob25lLCBoZWxwPSJXaGV0aGVyIHRvIGJ1aWxkIGRlYnVnLCByZWxl
YXNlLCBvciBib3RoLiIpCisgICAgdGVzdCA9IG1ha2Vfb3B0aW9uKCItLW5vLXRlc3QiLCBhY3Rp
b249InN0b3JlX2ZhbHNlIiwgZGVzdD0idGVzdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iQ29tbWl0
IHdpdGhvdXQgcnVubmluZyBydW4td2Via2l0LXRlc3RzLiIpCisgICAgY2xvc2VfYnVnID0gbWFr
ZV9vcHRpb24oIi0tbm8tY2xvc2UiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xvc2Vf
YnVnIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJMZWF2ZSBidWcgb3BlbiBhZnRlciBsYW5kaW5nLiIp
CisgICAgcG9ydCA9IG1ha2Vfb3B0aW9uKCItLXBvcnQiLCBhY3Rpb249InN0b3JlIiwgZGVzdD0i
cG9ydCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iU3BlY2lmeSBhIHBvcnQgKGUuZy4sIG1hYywgcXQs
IGd0aywgLi4uKS4iKQorICAgIHJldmlld2VyID0gbWFrZV9vcHRpb24oIi1yIiwgIi0tcmV2aWV3
ZXIiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0icmV2aWV3ZXIiLCBoZWxw
PSJVcGRhdGUgQ2hhbmdlTG9ncyB0byBzYXkgUmV2aWV3ZWQgYnkgUkVWSUVXRVIuIikKKyAgICBj
b21wbGV0ZV9yb2xsb3V0ID0gbWFrZV9vcHRpb24oIi0tY29tcGxldGUtcm9sbG91dCIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImNvbXBsZXRlX3JvbGxvdXQiLCBoZWxwPSJDb21taXQgdGhl
IHJldmVydCBhbmQgcmUtb3BlbiB0aGUgb3JpZ2luYWwgYnVnLiIpCisgICAgb2Jzb2xldGVfcGF0
Y2hlcyA9IG1ha2Vfb3B0aW9uKCItLW5vLW9ic29sZXRlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIs
IGRlc3Q9Im9ic29sZXRlX3BhdGNoZXMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBvYnNv
bGV0ZSBvbGQgcGF0Y2hlcyBiZWZvcmUgcG9zdGluZyB0aGlzIG9uZS4iKQorICAgIHJldmlldyA9
IG1ha2Vfb3B0aW9uKCItLW5vLXJldmlldyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJy
ZXZpZXciLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBtYXJrIHRoZSBwYXRjaCBmb3IgcmV2
aWV3LiIpCisgICAgcmVxdWVzdF9jb21taXQgPSBtYWtlX29wdGlvbigiLS1yZXF1ZXN0LWNvbW1p
dCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcXVlc3RfY29tbWl0IiwgZGVmYXVsdD1G
YWxzZSwgaGVscD0iTWFyayB0aGUgcGF0Y2ggYXMgbmVlZGluZyBhdXRvLWNvbW1pdCBhZnRlciBy
ZXZpZXcuIikKKyAgICBkZXNjcmlwdGlvbiA9IG1ha2Vfb3B0aW9uKCItbSIsICItLWRlc2NyaXB0
aW9uIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImRlc2NyaXB0aW9uIiwg
aGVscD0iRGVzY3JpcHRpb24gc3RyaW5nIGZvciB0aGUgYXR0YWNobWVudCAoZGVmYXVsdDogXCJw
YXRjaFwiKSIpCisgICAgY2MgPSBtYWtlX29wdGlvbigiLS1jYyIsIGFjdGlvbj0ic3RvcmUiLCB0
eXBlPSJzdHJpbmciLCBkZXN0PSJjYyIsIGhlbHA9IkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVt
YWlsIGFkZHJlc3NlcyB0byBjYXJib24tY29weS4iKQorICAgIGNvbXBvbmVudCA9IG1ha2Vfb3B0
aW9uKCItLWNvbXBvbmVudCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJj
b21wb25lbnQiLCBoZWxwPSJDb21wb25lbnQgZm9yIHRoZSBuZXcgYnVnLiIpCisgICAgY29uZmly
bSA9IG1ha2Vfb3B0aW9uKCItLW5vLWNvbmZpcm0iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVz
dD0iY29uZmlybSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iU2tpcCBjb25maXJtYXRpb24gc3RlcHMu
IikKKyAgICBlbWFpbCA9IG1ha2Vfb3B0aW9uKCItLWVtYWlsIiwgYWN0aW9uPSJzdG9yZSIsIHR5
cGU9InN0cmluZyIsIGRlc3Q9ImVtYWlsIiwgaGVscD0iRW1haWwgYWRkcmVzcyB0byB1c2UgaW4g
Q2hhbmdlTG9ncy4iKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dGVwcy9wb3N0ZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcG9z
dGRpZmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkMzM0NAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcG9zdGRp
ZmYucHkKQEAgLTAsMCArMSw0OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBTdHJp
bmdJTworCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RT
dGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlvbnMKKworCitjbGFz
cyBQb3N0RGlmZihBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvcHRp
b25zKGNscyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBPcHRpb25zLmRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgT3B0aW9ucy5yZXZpZXcsCisgICAgICAgICAgICBPcHRpb25zLnJl
cXVlc3RfY29tbWl0LAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAg
ICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0ZSwgImRpZmYiKQorICAgICAgICBk
aWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90b19idWcgZXhw
ZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLl9vcHRp
b25zLmRlc2NyaXB0aW9uIG9yICJQYXRjaCIKKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmFkZF9w
YXRjaF90b19idWcoc3RhdGVbImJ1Z19pZCJdLCBkaWZmX2ZpbGUsIGRlc2NyaXB0aW9uLCBtYXJr
X2Zvcl9yZXZpZXc9c2VsZi5fb3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1z
ZWxmLl9vcHRpb25zLnJlcXVlc3RfY29tbWl0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJkNDFmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3ByZXBhcmVjaGFuZ2Vsb2cucHkKQEAgLTAsMCArMSw1
OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3Rz
dGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuc3RlcHMub3B0aW9ucyBpbXBv
cnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53ZWJraXRfbG9nZ2luZyBpbXBvcnQgZXJyb3IKKwor
CitjbGFzcyBQcmVwYXJlQ2hhbmdlTG9nKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIE9w
dGlvbnMucG9ydCwKKyAgICAgICAgICAgIE9wdGlvbnMucXVpZXQsCisgICAgICAgICAgICBPcHRp
b25zLmVtYWlsLAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAg
ICAgaWYgc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiY2hhbmdlbG9ncyIpOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hlY2tvdXRfcm9v
dCkKKyAgICAgICAgYXJncyA9IFtzZWxmLnBvcnQoKS5zY3JpcHRfcGF0aCgicHJlcGFyZS1DaGFu
Z2VMb2ciKV0KKyAgICAgICAgaWYgc3RhdGVbImJ1Z19pZCJdOgorICAgICAgICAgICAgYXJncy5h
cHBlbmQoIi0tYnVnPSVzIiAlIHN0YXRlWyJidWdfaWQiXSkKKyAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5lbWFpbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWVtYWlsPSVzIiAlIHNlbGYu
X29wdGlvbnMuZW1haWwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuZXhl
Y3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChhcmdzLCBzZWxmLl9vcHRpb25zLnF1aWV0KQor
ICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICBlcnJvcigiVW5hYmxl
IHRvIHByZXBhcmUgQ2hhbmdlTG9ncy4iKQorICAgICAgICBzdGF0ZVsiZGlmZiJdID0gTm9uZSAj
IFdlJ3ZlIGNoYW5nZWQgdGhlIGRpZmYKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZ2ZvcnJldmVydC5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcHJlcGFyZWNoYW5nZWxvZ2ZvcnJldmVydC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYzOTJiCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wcmVwYXJlY2hhbmdlbG9nZm9y
cmV2ZXJ0LnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
b3MKKworZnJvbSB3ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKK2Zyb20gd2Vi
a2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKworCitjbGFzcyBQ
cmVwYXJlQ2hhbmdlTG9nRm9yUmV2ZXJ0KEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1bihzZWxm
LCBzdGF0ZSk6CisgICAgICAgICMgRmlyc3QsIGRpc2NhcmQgdGhlIENoYW5nZUxvZyBjaGFuZ2Vz
IGZyb20gdGhlIHJvbGxvdXQuCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX3Rvb2wuc2NtKCkuY2hl
Y2tvdXRfcm9vdCkKKyAgICAgICAgY2hhbmdlbG9nX3BhdGhzID0gc2VsZi5fdG9vbC5zY20oKS5t
b2RpZmllZF9jaGFuZ2Vsb2dzKCkKKyAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5yZXZlcnRfZmls
ZXMoY2hhbmdlbG9nX3BhdGhzKQorCisgICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFuZ2VM
b2cgZW50cmllcyBmb3IgdGhpcyByb2xsb3V0LgorICAgICAgICAjIFRoaXMgY291bGQgbW92ZSB0
byBwcmVwYXJlLUNoYW5nZUxvZyBieSBhZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgorICAgICAg
ICBzZWxmLl9ydW5fc2NyaXB0KCJwcmVwYXJlLUNoYW5nZUxvZyIpCisgICAgICAgIGZvciBjaGFu
Z2Vsb2dfcGF0aCBpbiBjaGFuZ2Vsb2dfcGF0aHM6CisgICAgICAgICAgICBDaGFuZ2VMb2coY2hh
bmdlbG9nX3BhdGgpLnVwZGF0ZV9mb3JfcmV2ZXJ0KHN0YXRlWyJyZXZpc2lvbiJdKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wcm9tcHRmb3JidWdvcnRp
dGxlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9wcm9tcHRmb3JidWdv
cnRpdGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMmY4NzcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3Byb21w
dGZvcmJ1Z29ydGl0bGUucHkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKKwor
CitjbGFzcyBQcm9tcHRGb3JCdWdPclRpdGxlKEFic3RyYWN0U3RlcCk6CisgICAgZGVmIHJ1bihz
ZWxmLCBzdGF0ZSk6CisgICAgICAgICMgTm8gbmVlZCB0byBwcm9tcHQgaWYgd2UgYWxyYWR5IGhh
dmUgdGhlIGJ1Z19pZC4KKyAgICAgICAgaWYgc3RhdGUuZ2V0KCJidWdfaWQiKToKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICB1c2VyX3Jlc3BvbnNlID0gc2VsZi5fdG9vbC51c2VyLnByb21w
dCgiUGxlYXNlIGVudGVyIGEgYnVnIG51bWJlciBvciBhIHRpdGxlIGZvciBhIG5ldyBidWc6XG4i
KQorICAgICAgICAjIElmIHRoZSB1c2VyIHJlc3BvbmRzIHdpdGggYSBudW1iZXIsIHdlIGFzc3Vt
ZSBpdCdzIGJ1ZyBudW1iZXIuCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIGFzc3VtZSBpdCdzIGEg
YnVnIHN1YmplY3QuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0YXRlWyJidWdfaWQiXSA9
IGludCh1c2VyX3Jlc3BvbnNlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgVHlwZUVycm9y
OgorICAgICAgICAgICAgc3RhdGVbImJ1Z190aXRsZSJdID0gdXNlcl9yZXNwb25zZQorICAgICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBraW5kIG9mIGEgbGFtZSBkZXNjcmlwdGlvbi4KKyAgICAg
ICAgICAgIHN0YXRlWyJidWdfZGVzY3JpcHRpb24iXSA9IHVzZXJfcmVzcG9uc2UKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvcmV2ZXJ0cmV2aXNpb24ucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmMyNjMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3JldmVydHJldmlzaW9uLnB5
CkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnN0
ZXBzLmFic3RyYWN0c3RlcCBpbXBvcnQgQWJzdHJhY3RTdGVwCisKKworY2xhc3MgUmV2ZXJ0UmV2
aXNpb24oQWJzdHJhY3RTdGVwKToKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAg
c2VsZi5fdG9vbC5zY20oKS5hcHBseV9yZXZlcnNlX2RpZmYoc3RhdGVbInJldmlzaW9uIl0pCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3J1bnRlc3RzLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9ydW50ZXN0cy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTBhNjkxCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwcy9ydW50ZXN0cy5weQpAQCAtMCwwICsx
LDU0IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5zdGVwcy5hYnN0cmFj
dHN0ZXAgaW1wb3J0IEFic3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS5zdGVwcy5vcHRpb25zIGlt
cG9ydCBPcHRpb25zCisKK2NsYXNzIFJ1blRlc3RzKEFic3RyYWN0U3RlcCk6CisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAg
ICAgIE9wdGlvbnMuYnVpbGQsCisgICAgICAgICAgICBPcHRpb25zLnRlc3QsCisgICAgICAgICAg
ICBPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKKyAgICAgICAgICAgIE9wdGlvbnMucXVpZXQsCisg
ICAgICAgICAgICBPcHRpb25zLnBvcnQsCisgICAgICAgIF0KKworICAgIGRlZiBydW4oc2VsZiwg
c3RhdGUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5idWlsZDoKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy50ZXN0OgorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIGFyZ3MgPSBzZWxmLnBvcnQoKS5ydW5fd2Via2l0X3Rlc3RzX2NvbW1h
bmQoKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm5vbl9pbnRlcmFjdGl2ZToKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKCItLW5vLWxhdW5jaC1zYWZhcmkiKQorICAgICAgICAgICAgYXJncy5h
cHBlbmQoIi0tZXhpdC1hZnRlci1uLWZhaWx1cmVzPTEiKQorICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnF1aWV0OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tcXVpZXQiKQorICAgICAgICBz
ZWxmLl90b29sLmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoYXJncykKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvc3RlcHNfdW5pdHRlc3QucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmEwMzIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3N0ZXBzX3VuaXR0ZXN0LnB5
CkBAIC0wLDAgKzEsNTYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSB3ZWJraXRweS5zdGVwcy51cGRhdGUgaW1wb3J0IFVwZGF0ZQorZnJvbSB3ZWJraXRw
eS5zdGVwcy5wcm9tcHRmb3JidWdvcnRpdGxlIGltcG9ydCBQcm9tcHRGb3JCdWdPclRpdGxlCitm
cm9tIHdlYmtpdHB5Lm1vY2tfYnVnemlsbGF0b29sIGltcG9ydCBNb2NrQnVnemlsbGFUb29sCitm
cm9tIHdlYmtpdHB5Lm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Vi
a2l0cHkubW9jayBpbXBvcnQgTW9jaworCisKK2NsYXNzIFN0ZXBzVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgZGVmIF9ydW5fc3RlcChzZWxmLCBzdGVwLCB0b29sPU5vbmUsIG9wdGlvbnM9
Tm9uZSwgc3RhdGU9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB0b29sOgorICAgICAgICAgICAgdG9v
bCA9IE1vY2tCdWd6aWxsYVRvb2woKQorICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAg
ICAgIG9wdGlvbnMgPSBNb2NrKCkKKyAgICAgICAgaWYgbm90IHN0YXRlOgorICAgICAgICAgICAg
c3RhdGUgPSB7fQorICAgICAgICBzdGVwKHRvb2wsIG9wdGlvbnMpLnJ1bihzdGF0ZSkKKworICAg
IGRlZiB0ZXN0X3VwZGF0ZV9zdGVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gTW9jaygpCisg
ICAgICAgIG9wdGlvbnMudXBkYXRlID0gVHJ1ZQorICAgICAgICBzZWxmLl9ydW5fc3RlcChVcGRh
dGUsIG9wdGlvbnMpCisKKyAgICBkZWYgdGVzdF9wcm9tcHRfZm9yX2J1Z19vcl90aXRsZV9zdGVw
KHNlbGYpOgorICAgICAgICB0b29sID0gTW9ja0J1Z3ppbGxhVG9vbCgpCisgICAgICAgIHRvb2wu
dXNlci5wcm9tcHQgPSBsYW1iZGEgbWVzc2FnZTogNDIKKyAgICAgICAgc2VsZi5fcnVuX3N0ZXAo
UHJvbXB0Rm9yQnVnT3JUaXRsZSwgdG9vbD10b29sKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdGVwcy91cGRhdGUucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0ZXBzL3VwZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wZjQ1NjcxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdGVwcy91cGRhdGUucHkKQEAgLTAsMCArMSw0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Zyb20gd2Via2l0cHkuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0cmFjdFN0ZXAKK2Zy
b20gd2Via2l0cHkuc3RlcHMub3B0aW9ucyBpbXBvcnQgT3B0aW9ucworZnJvbSB3ZWJraXRweS53
ZWJraXRfbG9nZ2luZyBpbXBvcnQgbG9nCisKKworY2xhc3MgVXBkYXRlKEFic3RyYWN0U3RlcCk6
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9wdGlvbnMoY2xzKToKKyAgICAgICAgcmV0dXJu
IFsKKyAgICAgICAgICAgIE9wdGlvbnMudXBkYXRlLAorICAgICAgICAgICAgT3B0aW9ucy5wb3J0
LAorICAgICAgICBdCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgbm90
IHNlbGYuX29wdGlvbnMudXBkYXRlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxvZygi
VXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiKQorICAgICAgICBzZWxmLl90b29sLmV4ZWN1dGl2
ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZi5wb3J0KCkudXBkYXRlX3dlYmtpdF9jb21tYW5k
KCksIHF1aWV0PVRydWUpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0ZXBzL3VwZGF0ZWNoYW5nZWxvZ3N3aXRocmV2aWV3X3VuaXR0ZXN0cy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdfdW5p
dHRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGFhMjIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0ZXBzL3VwZGF0
ZWNoYW5nZWxvZ3N3aXRocmV2aWV3X3VuaXR0ZXN0cy5weQpAQCAtMCwwICsxLDQwIEBACisjIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuc3RlcHMudXBkYXRl
Y2hhbmdlbG9nc3dpdGhyZXZpZXdlciBpbXBvcnQgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdl
cgorZnJvbSB3ZWJraXRweS5tb2NrX2J1Z3ppbGxhdG9vbCBpbXBvcnQgTW9ja0J1Z3ppbGxhVG9v
bAorZnJvbSB3ZWJraXRweS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCisKK2Ns
YXNzIFVwZGF0ZUNoYW5nZUxvZ3NXaXRoUmV2aWV3ZXJTdGVwVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIHRlc3RfZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoc2VsZik6CisgICAgICAg
IGNhcHR1cmUgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgc3RlcCA9IFVwZGF0ZUNoYW5nZUxv
Z3NXaXRoUmV2aWV3ZXIoTW9ja0J1Z3ppbGxhVG9vbCgpLCBbXSkKKyAgICAgICAgZXhwZWN0ZWRf
c3RkZXJyID0gIjAgcmV2aWV3ZWQgcGF0Y2hlcyBvbiBidWcgNzUsIGNhbm5vdCBpbmZlciByZXZp
ZXdlci5cbiIKKyAgICAgICAgY2FwdHVyZS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBzdGVwLl9ndWVz
c19yZXZpZXdlcl9mcm9tX2J1ZywgWzc1XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVy
cikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHMvdXBkYXRl
Y2hhbmdlbG9nc3dpdGhyZXZpZXdlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3RlcHMvdXBkYXRlY2hhbmdlbG9nc3dpdGhyZXZpZXdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42MGRmMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdGVwcy91cGRhdGVjaGFuZ2Vsb2dzd2l0aHJldmlld2VyLnB5CkBA
IC0wLDAgKzEsNjkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
IAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3
ZWJraXRweS5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKK2Zyb20gd2Via2l0cHkuZ3JhbW1h
ciBpbXBvcnQgcGx1cmFsaXplCitmcm9tIHdlYmtpdHB5LnN0ZXBzLmFic3RyYWN0c3RlcCBpbXBv
cnQgQWJzdHJhY3RTdGVwCitmcm9tIHdlYmtpdHB5LnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9wdGlv
bnMKK2Zyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1wb3J0IGxvZywgZXJyb3IKKworY2xh
c3MgVXBkYXRlQ2hhbmdlTG9nc1dpdGhSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVybiBbCisgICAgICAg
ICAgICBPcHRpb25zLnJldmlld2VyLAorICAgICAgICBdCisKKyAgICBkZWYgX2d1ZXNzX3Jldmll
d2VyX2Zyb21fYnVnKHNlbGYsIGJ1Z19pZCk6CisgICAgICAgIHBhdGNoZXMgPSBzZWxmLl90b29s
LmJ1Z3MuZmV0Y2hfcmV2aWV3ZWRfcGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCisgICAgICAgIGlm
IGxlbihwYXRjaGVzKSAhPSAxOgorICAgICAgICAgICAgbG9nKCIlcyBvbiBidWcgJXMsIGNhbm5v
dCBpbmZlciByZXZpZXdlci4iICUgKHBsdXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0
Y2hlcykpLCBidWdfaWQpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcGF0Y2gg
PSBwYXRjaGVzWzBdCisgICAgICAgIHJldmlld2VyID0gcGF0Y2hbInJldmlld2VyIl0KKyAgICAg
ICAgbG9nKCJHdWVzc2luZyBcIiVzXCIgYXMgcmV2aWV3ZXIgZnJvbSBhdHRhY2htZW50ICVzIG9u
IGJ1ZyAlcy4iICUgKHJldmlld2VyLCBwYXRjaFsiaWQiXSwgYnVnX2lkKSkKKyAgICAgICAgcmV0
dXJuIHJldmlld2VyCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgYnVnX2lk
ID0gc3RhdGVbInBhdGNoIl1bImJ1Z19pZCJdCisgICAgICAgIHJldmlld2VyID0gc2VsZi5fb3B0
aW9ucy5yZXZpZXdlcgorICAgICAgICBpZiBub3QgcmV2aWV3ZXI6CisgICAgICAgICAgICBpZiBu
b3QgYnVnX2lkOgorICAgICAgICAgICAgICAgIGxvZygiTm8gYnVnIGlkIHByb3ZpZGVkIGFuZCAt
LXJldmlld2VyPSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9ncyB3aXRoIHJl
dmlld2VyLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXZpZXdlciA9
IHNlbGYuX2d1ZXNzX3Jldmlld2VyX2Zyb21fYnVnKGJ1Z19pZCkKKworICAgICAgICBpZiBub3Qg
cmV2aWV3ZXI6CisgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBndWVzcyByZXZpZXdlciBmcm9t
IGJ1ZyAlcyBhbmQgLS1yZXZpZXdlcj0gbm90IHByb3ZpZGVkLiAgTm90IHVwZGF0aW5nIENoYW5n
ZUxvZ3Mgd2l0aCByZXZpZXdlci4iICUgYnVnX2lkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAg
ICAgICAgb3MuY2hkaXIoc2VsZi5fdG9vbC5zY20oKS5jaGVja291dF9yb290KQorICAgICAgICBm
b3IgY2hhbmdlbG9nX3BhdGggaW4gc2VsZi5fdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vsb2dz
KCk6CisgICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLnNldF9yZXZpZXdlcihy
ZXZpZXdlcikKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3RlcHNl
cXVlbmNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdGVwc2VxdWVuY2UucHkK
aW5kZXggYjdlNTQ0YS4uMDA4YjM2NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdGVwc2VxdWVuY2UucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdGVwc2VxdWVuY2UucHkKQEAgLTI2LDcgKzI2LDggQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKLWZyb20gd2Via2l0cHkuYnVpbGRzdGVwcyBpbXBvcnQgQ29tbWFuZE9wdGlv
bnMKK2ltcG9ydCB3ZWJraXRweS5zdGVwcyBhcyBzdGVwcworCiBmcm9tIHdlYmtpdHB5LmV4ZWN1
dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkud2Via2l0X2xvZ2dpbmcgaW1w
b3J0IGxvZwogZnJvbSB3ZWJraXRweS5zY20gaW1wb3J0IENoZWNrb3V0TmVlZHNVcGRhdGUKQEAg
LTQ1LDggKzQ2LDggQEAgY2xhc3MgU3RlcFNlcXVlbmNlKG9iamVjdCk6CiAKICAgICBkZWYgb3B0
aW9ucyhzZWxmKToKICAgICAgICAgY29sbGVjdGVkX29wdGlvbnMgPSBbCi0gICAgICAgICAgICBD
b21tYW5kT3B0aW9ucy5wYXJlbnRfY29tbWFuZCwKLSAgICAgICAgICAgIENvbW1hbmRPcHRpb25z
LnF1aWV0LAorICAgICAgICAgICAgc3RlcHMuT3B0aW9ucy5wYXJlbnRfY29tbWFuZCwKKyAgICAg
ICAgICAgIHN0ZXBzLk9wdGlvbnMucXVpZXQsCiAgICAgICAgIF0KICAgICAgICAgZm9yIHN0ZXAg
aW4gc2VsZi5fc3RlcHM6CiAgICAgICAgICAgICBjb2xsZWN0ZWRfb3B0aW9ucyA9IGNvbGxlY3Rl
ZF9vcHRpb25zICsgc3RlcC5vcHRpb25zKCkK
</data>
<flag name="review"
          id="27897"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>