<?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>26833</bug_id>
          
          <creation_ts>2009-06-30 01:25:28 -0700</creation_ts>
          <short_desc>Add BeautifulSoup to WebKitTools/Scripts/modules so that folks don&apos;t need to install it</short_desc>
          <delta_ts>2009-06-30 02:34:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>
          <dependson>26834</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>levin</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>128981</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 01:25:28 -0700</bug_when>
    <thetext>Add BeautifulSoup to WebKitTools/Scripts/modules so that folks don&apos;t need to install it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128983</commentid>
    <comment_count>1</comment_count>
      <attachid>32039</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 01:42:11 -0700</bug_when>
    <thetext>Created attachment 32039
Add BeautifulSoup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128984</commentid>
    <comment_count>2</comment_count>
      <attachid>32040</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 01:44:57 -0700</bug_when>
    <thetext>Created attachment 32040
Add BeautifulSoup (and fix post-diff to not hang with large patches)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128985</commentid>
    <comment_count>3</comment_count>
      <attachid>32040</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-06-30 01:46:17 -0700</bug_when>
    <thetext>Comment on attachment 32040
Add BeautifulSoup (and fix post-diff to not hang with large patches)

This patch does two completely unrelated things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128991</commentid>
    <comment_count>4</comment_count>
      <attachid>32043</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:08:59 -0700</bug_when>
    <thetext>Created attachment 32043
Add BeautifulSoup, now w/o any create_patch changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128996</commentid>
    <comment_count>5</comment_count>
      <attachid>32043</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-06-30 02:31:05 -0700</bug_when>
    <thetext>Comment on attachment 32043
Add BeautifulSoup, now w/o any create_patch changes

r=me

I only reviewed the license and the changes outside of BeautifulSoup itself. The license seems WebKit-compatible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129000</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 02:34:10 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebKitTools/ChangeLog
	M	WebKitTools/Scripts/bugzilla-tool
	A	WebKitTools/Scripts/modules/BeautifulSoup.py
	M	WebKitTools/Scripts/modules/bugzilla.py
Committed r45369
http://trac.webkit.org/changeset/45369</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32039</attachid>
            <date>2009-06-30 01:42:11 -0700</date>
            <delta_ts>2009-06-30 01:44:47 -0700</delta_ts>
            <desc>Add BeautifulSoup</desc>
            <filename>bugzilla_requires_a_filename.patch</filename>
            <type>text/plain</type>
            <size>86055</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmNzU1ODYyLi5jMmZhNjQxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDYt
MzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgYSBidWlsdCBjb3B5IG9mIEJlYXV0
aWZ1bFNvdXAgMy4xLjAuMSBzbyB0aGF0CisgICAgICAgIGJ1Z3ppbGxhLXRvb2wgdXNlcnMgZG8g
bm90IG5lZWQgdG8gaW5zdGFsbCBpdCBtYW51YWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODMzCisKKyAgICAgICAgQmVhdXRpZnVsU291cCBp
cyBCU0QtbGljZW5zZWQgKHRodXMgV2ViS2l0IGNvbXBhdGlibGUpIGFuZCBhdmFpbGFibGUgZnJv
bToKKyAgICAgICAgaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAK
KworICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9CZWF1dGlmdWxTb3VwLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL21vZHVsZXMvYnVnemlsbGEucHk6CisKIDIwMDktMDYtMjkgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2Uu
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wgYi9XZWJLaXRU
b29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggYTJkYmM0OC4uNjUyYjJlYSAxMDA3NTUK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtMzIsNiArMzIsNyBAQAogaW1wb3J0IGZpbGVpbnB1
dCAjIGlucGxhY2UgZmlsZSBlZGl0aW5nIGZvciBzZXRfcmV2aWV3ZXJfaW5fY2hhbmdlbG9nCiBp
bXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IFN0cmluZ0lPICMgZm9yIGFkZF9wYXRjaF90b19i
dWcgZmlsZSB3cmFwcGVycwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIApAQCAtNDAz
LDExICs0MDQsMTEgQEAgY2xhc3MgUG9zdERpZmZBc1BhdGNoVG9CdWcoQ29tbWFuZCk6CiAgICAg
ICAgIGlmIG9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlczoKICAgICAgICAgICAgIHNlbGYub2Jzb2xl
dGVfcGF0Y2hlc19vbl9idWcoYnVnX2lkLCB0b29sLmJ1Z3MpCiAKLSAgICAgICAgZGlmZl9wcm9j
ZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0b29sLnNjbSgpLmNyZWF0ZV9wYXRjaF9jb21tYW5kKCks
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCi0gICAgICAgIGRpZmZfcHJvY2Vz
cy53YWl0KCkgIyBNYWtlIHN1cmUgc3ZuLWNyZWF0ZS1wYXRjaCBpcyBkb25lIGJlZm9yZSB3ZSBj
b250aW51ZS4KLSAgICAgICAgCisgICAgICAgIGRpZmYgPSB0b29sLnNjbSgpLmNyZWF0ZV9wYXRj
aCgpCisgICAgICAgIGRpZmZfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKGRpZmYpICMgYWRkX3Bh
dGNoX3RvX2J1ZyBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdAorCiAgICAgICAgIGRlc2NyaXB0
aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbiBvciAicGF0Y2giCi0gICAgICAgIHRvb2wuYnVncy5h
ZGRfcGF0Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9wcm9jZXNzLnN0ZG91dCwgZGVzY3JpcHRpb24s
IG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmlldykKKyAgICAgICAgdG9vbC5idWdzLmFkZF9w
YXRjaF90b19idWcoYnVnX2lkLCBkaWZmX2ZpbGUsIGRlc2NyaXB0aW9uLCBtYXJrX2Zvcl9yZXZp
ZXc9b3B0aW9ucy5yZXZpZXcpCiAKIAogY2xhc3MgUG9zdENvbW1pdHNBc1BhdGNoZXNUb0J1ZyhD
b21tYW5kKToKQEAgLTQ0MywxMCArNDQ0LDkgQEAgY2xhc3MgUG9zdENvbW1pdHNBc1BhdGNoZXNU
b0J1ZyhDb21tYW5kKToKICAgICAgICAgICAgIGNvbW1lbnRfdGV4dCArPSAiLS0tXG4iCiAgICAg
ICAgICAgICBjb21tZW50X3RleHQgKz0gdG9vbC5zY20oKS5maWxlc19jaGFuZ2VkX3N1bW1hcnlf
Zm9yX2NvbW1pdChjb21taXRfaWQpCiAgICAgICAgIAotICAgICAgICAgICAgIyBUaGlzIGlzIGEg
bGl0dGxlIGJpdCBvZiBhIGhhY2ssIHRoYXQgd2UgcGFzcyBzdGRvdXQgYXMgdGhlIHBhdGNoIGZp
bGUuCi0gICAgICAgICAgICAjIFdlIGNvdWxkIGFsdGVybmF0aXZlbHkgbWFrZSBhbiBpbi1tZW1v
cnkgZmlsZS1saWtlIG9iamVjdCB3aXRoIHRoZSBwYXRjaCBjb250ZW50cy4KLSAgICAgICAgICAg
IGRpZmZfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4odG9vbC5zY20oKS5zaG93X2RpZmZfY29t
bWFuZF9mb3JfY29tbWl0KGNvbW1pdF9pZCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxs
PVRydWUpCi0gICAgICAgICAgICB0b29sLmJ1Z3MuYWRkX3BhdGNoX3RvX2J1ZyhidWdfaWQsIGRp
ZmZfcHJvY2Vzcy5zdGRvdXQsIGRlc2NyaXB0aW9uLCBjb21tZW50X3RleHQsIG1hcmtfZm9yX3Jl
dmlldz1vcHRpb25zLnJldmlldykKKyAgICAgICAgICAgIGRpZmYgPSB0b29sLnNjbSgpLmNyZWF0
ZV9wYXRjaCgpCisgICAgICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZm
KSAjIGFkZF9wYXRjaF90b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAg
ICAgIHRvb2wuYnVncy5hZGRfcGF0Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9maWxlLCBkZXNjcmlw
dGlvbiwgY29tbWVudF90ZXh0LCBtYXJrX2Zvcl9yZXZpZXc9b3B0aW9ucy5yZXZpZXcpCiAKIAog
Y2xhc3MgTm9uV3JhcHBpbmdFcGlsb2dJbmRlbnRlZEhlbHBGb3JtYXR0ZXIoSW5kZW50ZWRIZWxw
Rm9ybWF0dGVyKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1
dGlmdWxTb3VwLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL0JlYXV0aWZ1bFNvdXAu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyMDRlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1dGlmdWxTb3VwLnB5CkBA
IC0wLDAgKzEsMjAwMCBAQAorIiIiQmVhdXRpZnVsIFNvdXAKK0VsaXhpciBhbmQgVG9uaWMKKyJU
aGUgU2NyZWVuLVNjcmFwZXIncyBGcmllbmQiCitodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdh
cmUvQmVhdXRpZnVsU291cC8KKworQmVhdXRpZnVsIFNvdXAgcGFyc2VzIGEgKHBvc3NpYmx5IGlu
dmFsaWQpIFhNTCBvciBIVE1MIGRvY3VtZW50IGludG8gYQordHJlZSByZXByZXNlbnRhdGlvbi4g
SXQgcHJvdmlkZXMgbWV0aG9kcyBhbmQgUHl0aG9uaWMgaWRpb21zIHRoYXQgbWFrZQoraXQgZWFz
eSB0byBuYXZpZ2F0ZSwgc2VhcmNoLCBhbmQgbW9kaWZ5IHRoZSB0cmVlLgorCitBIHdlbGwtZm9y
bWVkIFhNTC9IVE1MIGRvY3VtZW50IHlpZWxkcyBhIHdlbGwtZm9ybWVkIGRhdGEKK3N0cnVjdHVy
ZS4gQW4gaWxsLWZvcm1lZCBYTUwvSFRNTCBkb2N1bWVudCB5aWVsZHMgYSBjb3JyZXNwb25kaW5n
bHkKK2lsbC1mb3JtZWQgZGF0YSBzdHJ1Y3R1cmUuIElmIHlvdXIgZG9jdW1lbnQgaXMgb25seSBs
b2NhbGx5Cit3ZWxsLWZvcm1lZCwgeW91IGNhbiB1c2UgdGhpcyBsaWJyYXJ5IHRvIGZpbmQgYW5k
IHByb2Nlc3MgdGhlCit3ZWxsLWZvcm1lZCBwYXJ0IG9mIGl0LgorCitCZWF1dGlmdWwgU291cCB3
b3JrcyB3aXRoIFB5dGhvbiAyLjIgYW5kIHVwLiBJdCBoYXMgbm8gZXh0ZXJuYWwKK2RlcGVuZGVu
Y2llcywgYnV0IHlvdSdsbCBoYXZlIG1vcmUgc3VjY2VzcyBhdCBjb252ZXJ0aW5nIGRhdGEgdG8g
VVRGLTgKK2lmIHlvdSBhbHNvIGluc3RhbGwgdGhlc2UgdGhyZWUgcGFja2FnZXM6CisKKyogY2hh
cmRldCwgZm9yIGF1dG8tZGV0ZWN0aW5nIGNoYXJhY3RlciBlbmNvZGluZ3MKKyAgaHR0cDovL2No
YXJkZXQuZmVlZHBhcnNlci5vcmcvCisqIGNqa2NvZGVjcyBhbmQgaWNvbnZfY29kZWMsIHdoaWNo
IGFkZCBtb3JlIGVuY29kaW5ncyB0byB0aGUgb25lcyBzdXBwb3J0ZWQKKyAgYnkgc3RvY2sgUHl0
aG9uLgorICBodHRwOi8vY2prcHl0aG9uLmkxOG4ub3JnLworCitCZWF1dGlmdWwgU291cCBkZWZp
bmVzIGNsYXNzZXMgZm9yIHR3byBtYWluIHBhcnNpbmcgc3RyYXRlZ2llczoKKworICogQmVhdXRp
ZnVsU3RvbmVTb3VwLCBmb3IgcGFyc2luZyBYTUwsIFNHTUwsIG9yIHlvdXIgZG9tYWluLXNwZWNp
ZmljCisgICBsYW5ndWFnZSB0aGF0IGtpbmQgb2YgbG9va3MgbGlrZSBYTUwuCisKKyAqIEJlYXV0
aWZ1bFNvdXAsIGZvciBwYXJzaW5nIHJ1bi1vZi10aGUtbWlsbCBIVE1MIGNvZGUsIGJlIGl0IHZh
bGlkCisgICBvciBpbnZhbGlkLiBUaGlzIGNsYXNzIGhhcyB3ZWIgYnJvd3Nlci1saWtlIGhldXJp
c3RpY3MgZm9yCisgICBvYnRhaW5pbmcgYSBzZW5zaWJsZSBwYXJzZSB0cmVlIGluIHRoZSBmYWNl
IG9mIGNvbW1vbiBIVE1MIGVycm9ycy4KKworQmVhdXRpZnVsIFNvdXAgYWxzbyBkZWZpbmVzIGEg
Y2xhc3MgKFVuaWNvZGVEYW1taXQpIGZvciBhdXRvZGV0ZWN0aW5nCit0aGUgZW5jb2Rpbmcgb2Yg
YW4gSFRNTCBvciBYTUwgZG9jdW1lbnQsIGFuZCBjb252ZXJ0aW5nIGl0IHRvCitVbmljb2RlLiBN
dWNoIG9mIHRoaXMgY29kZSBpcyB0YWtlbiBmcm9tIE1hcmsgUGlsZ3JpbSdzIFVuaXZlcnNhbCBG
ZWVkIFBhcnNlci4KKworRm9yIG1vcmUgdGhhbiB5b3UgZXZlciB3YW50ZWQgdG8ga25vdyBhYm91
dCBCZWF1dGlmdWwgU291cCwgc2VlIHRoZQorZG9jdW1lbnRhdGlvbjoKK2h0dHA6Ly93d3cuY3J1
bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwL2RvY3VtZW50YXRpb24uaHRtbAorCitIZXJl
LCBoYXZlIHNvbWUgbGVnYWxlc2U6CisKK0NvcHlyaWdodCAoYykgMjAwNC0yMDA5LCBMZW9uYXJk
IFJpY2hhcmRzb24KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCittZXQ6CisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAorICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIHRoZSBCZWF1dGlmdWwgU291cCBDb25zb3J0aXVtIGFuZCBBbGwKKyAgICBOaWdodCBL
b3NoZXIgQmFrZXJ5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAg
ICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
CitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UgorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLCBEQU1NSVQuCisKKyIiIgorZnJvbSBfX2Z1dHVyZV9f
IGltcG9ydCBnZW5lcmF0b3JzCisKK19fYXV0aG9yX18gPSAiTGVvbmFyZCBSaWNoYXJkc29uIChs
ZW9uYXJkckBzZWdmYXVsdC5vcmcpIgorX192ZXJzaW9uX18gPSAiMy4xLjAuMSIKK19fY29weXJp
Z2h0X18gPSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMDkgTGVvbmFyZCBSaWNoYXJkc29uIgorX19s
aWNlbnNlX18gPSAiTmV3LXN0eWxlIEJTRCIKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IG1hcmt1
cGJhc2UKK2ltcG9ydCB0eXBlcworaW1wb3J0IHJlCitmcm9tIEhUTUxQYXJzZXIgaW1wb3J0IEhU
TUxQYXJzZXIsIEhUTUxQYXJzZUVycm9yCit0cnk6CisgICAgZnJvbSBodG1sZW50aXR5ZGVmcyBp
bXBvcnQgbmFtZTJjb2RlcG9pbnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBuYW1lMmNvZGVw
b2ludCA9IHt9Cit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gc2V0
cyBpbXBvcnQgU2V0IGFzIHNldAorCisjVGhlc2UgaGFja3MgbWFrZSBCZWF1dGlmdWwgU291cCBh
YmxlIHRvIHBhcnNlIFhNTCB3aXRoIG5hbWVzcGFjZXMKK21hcmt1cGJhc2UuX2RlY2xuYW1lX21h
dGNoID0gcmUuY29tcGlsZShyJ1thLXpBLVpdWy1fLjphLXpBLVowLTldKlxzKicpLm1hdGNoCisK
K0RFRkFVTFRfT1VUUFVUX0VOQ09ESU5HID0gInV0Zi04IgorCisjIEZpcnN0LCB0aGUgY2xhc3Nl
cyB0aGF0IHJlcHJlc2VudCBtYXJrdXAgZWxlbWVudHMuCisKK2RlZiBzb2IodW5pY29kZSwgZW5j
b2RpbmcpOgorICAgICIiIlJldHVybnMgZWl0aGVyIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZyBv
ciBpdHMgZW5jb2RpbmcuIiIiCisgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgcmV0
dXJuIHVuaWNvZGUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdW5pY29kZS5lbmNvZGUoZW5j
b2RpbmcpCisKK2NsYXNzIFBhZ2VFbGVtZW50OgorICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0
aW9uYWwgaW5mb3JtYXRpb24gZm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQorICAgIChlaXRoZXIg
YSB0YWcgb3IgYSBwaWVjZSBvZiB0ZXh0KSIiIgorCisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVu
dD1Ob25lLCBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCBy
ZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRz
LiIiIgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3Vz
ID0gcHJldmlvdXMKKyAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnByZXZp
b3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5wYXJlbnQgYW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAg
c2VsZi5wcmV2aW91c1NpYmxpbmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKyAgICAgICAg
ICAgIHNlbGYucHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZgorCisgICAgZGVmIHJl
cGxhY2VXaXRoKHNlbGYsIHJlcGxhY2VXaXRoKToKKyAgICAgICAgb2xkUGFyZW50ID0gc2VsZi5w
YXJlbnQKKyAgICAgICAgbXlJbmRleCA9IHNlbGYucGFyZW50LmNvbnRlbnRzLmluZGV4KHNlbGYp
CisgICAgICAgIGlmIGhhc2F0dHIocmVwbGFjZVdpdGgsICdwYXJlbnQnKSBhbmQgcmVwbGFjZVdp
dGgucGFyZW50ID09IHNlbGYucGFyZW50OgorICAgICAgICAgICAgIyBXZSdyZSByZXBsYWNpbmcg
dGhpcyBlbGVtZW50IHdpdGggb25lIG9mIGl0cyBzaWJsaW5ncy4KKyAgICAgICAgICAgIGluZGV4
ID0gc2VsZi5wYXJlbnQuY29udGVudHMuaW5kZXgocmVwbGFjZVdpdGgpCisgICAgICAgICAgICBp
ZiBpbmRleCBhbmQgaW5kZXggPCBteUluZGV4OgorICAgICAgICAgICAgICAgICMgRnVydGhlcm1v
cmUsIGl0IGNvbWVzIGJlZm9yZSB0aGlzIGVsZW1lbnQuIFRoYXQKKyAgICAgICAgICAgICAgICAj
IG1lYW5zIHRoYXQgd2hlbiB3ZSBleHRyYWN0IGl0LCB0aGUgaW5kZXggb2YgdGhpcworICAgICAg
ICAgICAgICAgICMgZWxlbWVudCB3aWxsIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBteUluZGV4
ID0gbXlJbmRleCAtIDEKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgb2xkUGFyZW50
Lmluc2VydChteUluZGV4LCByZXBsYWNlV2l0aCkKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgor
ICAgICAgICAiIiJEZXN0cnVjdGl2ZWx5IHJpcHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJl
ZS4iIiIKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgc2VsZi5wYXJlbnQuY29udGVudHMucmVtb3ZlKHNlbGYpCisgICAgICAgICAgICBl
eGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgI0ZpbmQg
dGhlIHR3byBlbGVtZW50cyB0aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgorICAg
ICAgICAjdGhpcyBlbGVtZW50IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQu
IENvbm5lY3QKKyAgICAgICAgI3RoZSB0d28uCisgICAgICAgIGxhc3RDaGlsZCA9IHNlbGYuX2xh
c3RSZWN1cnNpdmVDaGlsZCgpCisgICAgICAgIG5leHRFbGVtZW50ID0gbGFzdENoaWxkLm5leHQK
KworICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5u
ZXh0ID0gbmV4dEVsZW1lbnQKKyAgICAgICAgaWYgbmV4dEVsZW1lbnQ6CisgICAgICAgICAgICBu
ZXh0RWxlbWVudC5wcmV2aW91cyA9IHNlbGYucHJldmlvdXMKKyAgICAgICAgc2VsZi5wcmV2aW91
cyA9IE5vbmUKKyAgICAgICAgbGFzdENoaWxkLm5leHQgPSBOb25lCisKKyAgICAgICAgc2VsZi5w
YXJlbnQgPSBOb25lCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNTaWJsaW5nOgorICAgICAgICAg
ICAgc2VsZi5wcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nCisg
ICAgICAgIGlmIHNlbGYubmV4dFNpYmxpbmc6CisgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5n
LnByZXZpb3VzU2libGluZyA9IHNlbGYucHJldmlvdXNTaWJsaW5nCisgICAgICAgIHNlbGYucHJl
dmlvdXNTaWJsaW5nID0gc2VsZi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNl
bGYKKworICAgIGRlZiBfbGFzdFJlY3Vyc2l2ZUNoaWxkKHNlbGYpOgorICAgICAgICAiRmluZHMg
dGhlIGxhc3QgZWxlbWVudCBiZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCisgICAg
ICAgIGxhc3RDaGlsZCA9IHNlbGYKKyAgICAgICAgd2hpbGUgaGFzYXR0cihsYXN0Q2hpbGQsICdj
b250ZW50cycpIGFuZCBsYXN0Q2hpbGQuY29udGVudHM6CisgICAgICAgICAgICBsYXN0Q2hpbGQg
PSBsYXN0Q2hpbGQuY29udGVudHNbLTFdCisgICAgICAgIHJldHVybiBsYXN0Q2hpbGQKKworICAg
IGRlZiBpbnNlcnQoc2VsZiwgcG9zaXRpb24sIG5ld0NoaWxkKToKKyAgICAgICAgaWYgKGlzaW5z
dGFuY2UobmV3Q2hpbGQsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBvciBpc2luc3RhbmNlKG5l
d0NoaWxkLCB1bmljb2RlKSkgXAorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG5ld0No
aWxkLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgbmV3Q2hpbGQgPSBOYXZpZ2FibGVT
dHJpbmcobmV3Q2hpbGQpCisKKyAgICAgICAgcG9zaXRpb24gPSAgbWluKHBvc2l0aW9uLCBsZW4o
c2VsZi5jb250ZW50cykpCisgICAgICAgIGlmIGhhc2F0dHIobmV3Q2hpbGQsICdwYXJlbnQnKSBh
bmQgbmV3Q2hpbGQucGFyZW50ICE9IE5vbmU6CisgICAgICAgICAgICAjIFdlJ3JlICdpbnNlcnRp
bmcnIGFuIGVsZW1lbnQgdGhhdCdzIGFscmVhZHkgb25lCisgICAgICAgICAgICAjIG9mIHRoaXMg
b2JqZWN0J3MgY2hpbGRyZW4uCisgICAgICAgICAgICBpZiBuZXdDaGlsZC5wYXJlbnQgPT0gc2Vs
ZjoKKyAgICAgICAgICAgICAgICBpbmRleCA9IHNlbGYuZmluZChuZXdDaGlsZCkKKyAgICAgICAg
ICAgICAgICBpZiBpbmRleCBhbmQgaW5kZXggPCBwb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAg
ICAgIyBGdXJ0aGVybW9yZSB3ZSdyZSBtb3ZpbmcgaXQgZnVydGhlciBkb3duIHRoZQorICAgICAg
ICAgICAgICAgICAgICAjIGxpc3Qgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4gVGhhdCBtZWFu
cyB0aGF0CisgICAgICAgICAgICAgICAgICAgICMgd2hlbiB3ZSBleHRyYWN0IHRoaXMgZWxlbWVu
dCwgb3VyIHRhcmdldCBpbmRleAorICAgICAgICAgICAgICAgICAgICAjIHdpbGwganVtcCBkb3du
IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDEKKyAgICAg
ICAgICAgIG5ld0NoaWxkLmV4dHJhY3QoKQorCisgICAgICAgIG5ld0NoaWxkLnBhcmVudCA9IHNl
bGYKKyAgICAgICAgcHJldmlvdXNDaGlsZCA9IE5vbmUKKyAgICAgICAgaWYgcG9zaXRpb24gPT0g
MDoKKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzU2libGluZyA9IE5vbmUKKyAgICAgICAg
ICAgIG5ld0NoaWxkLnByZXZpb3VzID0gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cHJldmlvdXNDaGlsZCA9IHNlbGYuY29udGVudHNbcG9zaXRpb24tMV0KKyAgICAgICAgICAgIG5l
d0NoaWxkLnByZXZpb3VzU2libGluZyA9IHByZXZpb3VzQ2hpbGQKKyAgICAgICAgICAgIG5ld0No
aWxkLnByZXZpb3VzU2libGluZy5uZXh0U2libGluZyA9IG5ld0NoaWxkCisgICAgICAgICAgICBu
ZXdDaGlsZC5wcmV2aW91cyA9IHByZXZpb3VzQ2hpbGQuX2xhc3RSZWN1cnNpdmVDaGlsZCgpCisg
ICAgICAgIGlmIG5ld0NoaWxkLnByZXZpb3VzOgorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlv
dXMubmV4dCA9IG5ld0NoaWxkCisKKyAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQgPSBuZXdD
aGlsZC5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkKKworICAgICAgICBpZiBwb3NpdGlvbiA+PSBsZW4o
c2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZyA9IE5vbmUK
KworICAgICAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICAgICAgcGFyZW50c05leHRTaWJs
aW5nID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgbm90IHBhcmVudHNOZXh0U2libGluZzoKKyAg
ICAgICAgICAgICAgICBwYXJlbnRzTmV4dFNpYmxpbmcgPSBwYXJlbnQubmV4dFNpYmxpbmcKKyAg
ICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50CisgICAgICAgICAgICAgICAgaWYg
bm90IHBhcmVudDogIyBUaGlzIGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50Lgor
ICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGFyZW50c05leHRTaWJs
aW5nOgorICAgICAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBwYXJlbnRz
TmV4dFNpYmxpbmcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3Q2hpbGRz
TGFzdEVsZW1lbnQubmV4dCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5leHRD
aGlsZCA9IHNlbGYuY29udGVudHNbcG9zaXRpb25dCisgICAgICAgICAgICBuZXdDaGlsZC5uZXh0
U2libGluZyA9IG5leHRDaGlsZAorICAgICAgICAgICAgaWYgbmV3Q2hpbGQubmV4dFNpYmxpbmc6
CisgICAgICAgICAgICAgICAgbmV3Q2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0g
bmV3Q2hpbGQKKyAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBuZXh0Q2hp
bGQKKworICAgICAgICBpZiBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0OgorICAgICAgICAgICAg
bmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dC5wcmV2aW91cyA9IG5ld0NoaWxkc0xhc3RFbGVtZW50
CisgICAgICAgIHNlbGYuY29udGVudHMuaW5zZXJ0KHBvc2l0aW9uLCBuZXdDaGlsZCkKKworICAg
IGRlZiBhcHBlbmQoc2VsZiwgdGFnKToKKyAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gdGFn
IHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZy4iIiIKKyAgICAgICAgc2VsZi5pbnNlcnQobGVu
KHNlbGYuY29udGVudHMpLCB0YWcpCisKKyAgICBkZWYgZmluZE5leHQoc2VsZiwgbmFtZT1Ob25l
LCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhl
IGZpcnN0IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKKyAgICAgICAg
YXBwZWFycyBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVy
biBzZWxmLl9maW5kT25lKHNlbGYuZmluZEFsbE5leHQsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3
YXJncykKKworICAgIGRlZiBmaW5kQWxsTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0
ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAg
ICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEg
YW5kIGFwcGVhcgorICAgICAgICBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2Vs
Zi5uZXh0R2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykK
KworICAgIGRlZiBmaW5kTmV4dFNpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4
dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGlu
ZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFu
ZCBhcHBlYXJzIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kTmV4dFNpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICBkZWYgZmlu
ZE5leHRTaWJsaW5ncyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0
PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJS
ZXR1cm5zIHRoZSBzaWJsaW5ncyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAg
ICAgICBjcml0ZXJpYSBhbmQgYXBwZWFyIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4i
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nR2VuZXJhdG9y
LCAqKmt3YXJncykKKyAgICBmZXRjaE5leHRTaWJsaW5ncyA9IGZpbmROZXh0U2libGluZ3MgIyBD
b21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQcmV2aW91cyhzZWxmLCBu
YW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAor
ICAgICAgICBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAg
ICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNlbGYuZmluZEFsbFByZXZpb3VzLCBuYW1lLCBhdHRy
cywgdGV4dCwgKiprd2FyZ3MpCisKKyAgICBkZWYgZmluZEFsbFByZXZpb3VzKHNlbGYsIG5hbWU9
Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRj
aCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgorICAgICAgICBiZWZvcmUgdGhpcyBUYWcg
aW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBh
dHRycywgdGV4dCwgbGltaXQsIHNlbGYucHJldmlvdXNHZW5lcmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmZXRjaFByZXZpb3VzID0gZmluZEFsbFByZXZp
b3VzICMgQ29tcGF0aWJpbGl0eSB3aXRoIHByZS0zLngKKworICAgIGRlZiBmaW5kUHJldmlvdXNT
aWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgor
ICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBt
YXRjaGVzIHRoZQorICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBiZWZvcmUgdGhp
cyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9uZShz
ZWxmLmZpbmRQcmV2aW91c1NpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICBkZWYgZmluZFByZXZpb3VzU2libGlu
Z3Moc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW1pdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNy
aXRlcmlhIGFuZCBhcHBlYXIgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZ0dlbmVyYXRvciwg
Kiprd2FyZ3MpCisgICAgZmV0Y2hQcmV2aW91c1NpYmxpbmdzID0gZmluZFByZXZpb3VzU2libGlu
Z3MgIyBDb21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQYXJlbnQoc2Vs
ZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBjbG9zZXN0IHBhcmVudCBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAg
ICAgIGNyaXRlcmlhLiIiIgorICAgICAgICAjIE5PVEU6IFdlIGNhbid0IHVzZSBfZmluZE9uZSBi
ZWNhdXNlIGZpbmRQYXJlbnRzIHRha2VzIGEgZGlmZmVyZW50CisgICAgICAgICMgc2V0IG9mIGFy
Z3VtZW50cy4KKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IHNlbGYuZmluZFBhcmVudHMo
bmFtZSwgYXR0cnMsIDEpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAg
ICAgICByZXR1cm4gcgorCisgICAgZGVmIGZpbmRQYXJlbnRzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0
cnM9e30sIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGFy
ZW50cyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4i
IiIKKworICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgTm9uZSwgbGlt
aXQsIHNlbGYucGFyZW50R2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Kmt3YXJncykKKyAgICBmZXRjaFBhcmVudHMgPSBmaW5kUGFyZW50cyAjIENvbXBhdGliaWxpdHkg
d2l0aCBwcmUtMy54CisKKyAgICAjVGhlc2UgbWV0aG9kcyBkbyB0aGUgcmVhbCBoZWF2eSBsaWZ0
aW5nLgorCisgICAgZGVmIF9maW5kT25lKHNlbGYsIG1ldGhvZCwgbmFtZSwgYXR0cnMsIHRleHQs
ICoqa3dhcmdzKToKKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IG1ldGhvZChuYW1lLCBh
dHRycywgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0g
bFswXQorICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIF9maW5kQWxsKHNlbGYsIG5hbWUsIGF0
dHJzLCB0ZXh0LCBsaW1pdCwgZ2VuZXJhdG9yLCAqKmt3YXJncyk6CisgICAgICAgICJJdGVyYXRl
cyBvdmVyIGEgZ2VuZXJhdG9yIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1hdGNoLiIKKworICAg
ICAgICBpZiBpc2luc3RhbmNlKG5hbWUsIFNvdXBTdHJhaW5lcik6CisgICAgICAgICAgICBzdHJh
aW5lciA9IG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQnVpbGQgYSBTb3VwU3Ry
YWluZXIKKyAgICAgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKG5hbWUsIGF0dHJzLCB0
ZXh0LCAqKmt3YXJncykKKyAgICAgICAgcmVzdWx0cyA9IFJlc3VsdFNldChzdHJhaW5lcikKKyAg
ICAgICAgZyA9IGdlbmVyYXRvcigpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgaSA9IGcubmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3Rv
cEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaToKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHN0cmFpbmVyLnNlYXJjaChpKQorICAgICAgICAgICAgICAg
IGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChmb3VuZCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihyZXN1bHRzKSA+PSBsaW1pdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAg
ICAjVGhlc2UgR2VuZXJhdG9ycyBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSBzdGFydGluZyBmcm9t
IGJvdGgKKyAgICAjTmF2aWdhYmxlU3RyaW5ncyBhbmQgVGFncy4KKyAgICBkZWYgbmV4dEdlbmVy
YXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAg
ICAgIGkgPSBpLm5leHQKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBuZXh0U2libGlu
Z0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAg
ICAgICAgICAgIGkgPSBpLm5leHRTaWJsaW5nCisgICAgICAgICAgICB5aWVsZCBpCisKKyAgICBk
ZWYgcHJldmlvdXNHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdo
aWxlIGk6CisgICAgICAgICAgICBpID0gaS5wcmV2aW91cworICAgICAgICAgICAgeWllbGQgaQor
CisgICAgZGVmIHByZXZpb3VzU2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNl
bGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzU2libGluZwor
ICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIHBhcmVudEdlbmVyYXRvcihzZWxmKToKKyAg
ICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLnBhcmVu
dAorICAgICAgICAgICAgeWllbGQgaQorCisgICAgIyBVdGlsaXR5IG1ldGhvZHMKKyAgICBkZWYg
c3Vic3RpdHV0ZUVuY29kaW5nKHNlbGYsIHN0ciwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIGVu
Y29kaW5nID0gZW5jb2Rpbmcgb3IgInV0Zi04IgorICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2Uo
IiVTT1VQLUVOQ09ESU5HJSIsIGVuY29kaW5nKQorCisgICAgZGVmIHRvRW5jb2Rpbmcoc2VsZiwg
cywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIkVuY29kZXMgYW4gb2JqZWN0IHRvIGEgc3Ry
aW5nIGluIHNvbWUgZW5jb2RpbmcsIG9yIHRvIFVuaWNvZGUuCisgICAgICAgIC4iIiIKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShzLCB1bmljb2RlKToKKyAgICAgICAgICAgIGlmIGVuY29kaW5nOgor
ICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHMsIHN0cik6CisgICAgICAgICAgICBpZiBlbmNvZGluZzoKKyAgICAgICAgICAgICAg
ICBzID0gcy5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHMgPSB1bmljb2RlKHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBlbmNvZGlu
ZzoKKyAgICAgICAgICAgICAgICBzICA9IHNlbGYudG9FbmNvZGluZyhzdHIocyksIGVuY29kaW5n
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQorICAg
ICAgICByZXR1cm4gcworCitjbGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVsZW1l
bnQpOgorCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBh
IG5ldyBOYXZpZ2FibGVTdHJpbmcuCisKKyAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2aWdh
YmxlU3RyaW5nLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgc3RyaW5n
IGluIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJlCisg
ICAgICAgIHBhc3NlZCBpbiB0byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1cGVy
Y2xhc3Mgd29uJ3Qga25vdworICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6
CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAg
IHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJ
TkcpCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAodW5p
Y29kZShzZWxmKSwpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAg
ICIiInRleHQuc3RyaW5nIGdpdmVzIHlvdSB0ZXh0LiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKKyAg
ICAgICAgY29tcGF0aWJpbGl0eSBmb3IgTmF2aWdhYmxlKlN0cmluZywgYnV0IGZvciBDRGF0YSog
aXQgbGV0cyB5b3UKKyAgICAgICAgZ2V0IHRoZSBzdHJpbmcgd2l0aG91dCB0aGUgQ0RhdGEgd3Jh
cHBlci4iIiIKKyAgICAgICAgaWYgYXR0ciA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwg
Iiclcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18uX19u
YW1lX18sIGF0dHIpCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VU
UFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkuZW5jb2RlKGVuY29k
aW5nKQorCisgICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVh
bEVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgQ0RhdGEoTmF2aWdhYmxl
U3RyaW5nKToKKworICAgIGRlZiBkZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZl
bnR1YWxFbmNvZGluZyk6CisgICAgICAgIHJldHVybiB1JzwhW0NEQVRBWycgKyBzZWxmICsgdSdd
XT4nCisKK2NsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihOYXZpZ2FibGVTdHJpbmcpOgorCisg
ICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5n
KToKKyAgICAgICAgb3V0cHV0ID0gc2VsZgorICAgICAgICBpZiB1JyVTT1VQLUVOQ09ESU5HJScg
aW4gb3V0cHV0OgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5zdWJzdGl0dXRlRW5jb2Rpbmco
b3V0cHV0LCBldmVudHVhbEVuY29kaW5nKQorICAgICAgICByZXR1cm4gdSc8PycgKyBvdXRwdXQg
KyB1Jz8+JworCitjbGFzcyBDb21tZW50KE5hdmlnYWJsZVN0cmluZyk6CisgICAgZGVmIGRlY29k
ZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKKyAgICAgICAg
cmV0dXJuIHUnPCEtLScgKyBzZWxmICsgdSctLT4nCisKK2NsYXNzIERlY2xhcmF0aW9uKE5hdmln
YWJsZVN0cmluZyk6CisgICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBl
dmVudHVhbEVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIHUnPCEnICsgc2VsZiArIHUnPicKKwor
Y2xhc3MgVGFnKFBhZ2VFbGVtZW50KToKKworICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1M
IHRhZyB3aXRoIGl0cyBhdHRyaWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKKworICAgIGRlZiBfaW52
ZXJ0KGgpOgorICAgICAgICAiQ2hlYXAgZnVuY3Rpb24gdG8gaW52ZXJ0IGEgaGFzaC4iCisgICAg
ICAgIGkgPSB7fQorICAgICAgICBmb3Igayx2IGluIGguaXRlbXMoKToKKyAgICAgICAgICAgIGlb
dl0gPSBrCisgICAgICAgIHJldHVybiBpCisKKyAgICBYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9D
SEFSUyA9IHsgImFwb3MiIDogIiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicXVvdCIgOiAnIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJhbXAiIDogIiYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHQi
IDogIjwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3QiIDogIj4i
IH0KKworICAgIFhNTF9TUEVDSUFMX0NIQVJTX1RPX0VOVElUSUVTID0gX2ludmVydChYTUxfRU5U
SVRJRVNfVE9fU1BFQ0lBTF9DSEFSUykKKworICAgIGRlZiBfY29udmVydEVudGl0aWVzKHNlbGYs
IG1hdGNoKToKKyAgICAgICAgIiIiVXNlZCBpbiBhIGNhbGwgdG8gcmUuc3ViIHRvIHJlcGxhY2Ug
SFRNTCwgWE1MLCBhbmQgbnVtZXJpYworICAgICAgICBlbnRpdGllcyB3aXRoIHRoZSBhcHByb3By
aWF0ZSBVbmljb2RlIGNoYXJhY3RlcnMuIElmIEhUTUwKKyAgICAgICAgZW50aXRpZXMgYXJlIGJl
aW5nIGNvbnZlcnRlZCwgYW55IHVucmVjb2duaXplZCBlbnRpdGllcyBhcmUKKyAgICAgICAgZXNj
YXBlZC4iIiIKKyAgICAgICAgeCA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHNlbGYuY29u
dmVydEhUTUxFbnRpdGllcyBhbmQgeCBpbiBuYW1lMmNvZGVwb2ludDoKKyAgICAgICAgICAgIHJl
dHVybiB1bmljaHIobmFtZTJjb2RlcG9pbnRbeF0pCisgICAgICAgIGVsaWYgeCBpbiBzZWxmLlhN
TF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJTOgorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0
WE1MRW50aXRpZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuWE1MX0VOVElUSUVTX1RP
X1NQRUNJQUxfQ0hBUlNbeF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHUnJiVzOycgJSB4CisgICAgICAgIGVsaWYgbGVuKHgpID4gMCBhbmQgeFswXSA9PSAnIyc6
CisgICAgICAgICAgICAjIEhhbmRsZSBudW1lcmljIGVudGl0aWVzCisgICAgICAgICAgICBpZiBs
ZW4oeCkgPiAxIGFuZCB4WzFdID09ICd4JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hy
KGludCh4WzI6XSwgMTYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gdW5pY2hyKGludCh4WzE6XSkpCisKKyAgICAgICAgZWxpZiBzZWxmLmVzY2FwZVVucmVjb2du
aXplZEVudGl0aWVzOgorICAgICAgICAgICAgcmV0dXJuIHUnJmFtcDslczsnICUgeAorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHUnJiVzOycgJSB4CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcGFyc2VyLCBuYW1lLCBhdHRycz1Ob25lLCBwYXJlbnQ9Tm9uZSwKKyAgICAgICAg
ICAgICAgICAgcHJldmlvdXM9Tm9uZSk6CisgICAgICAgICJCYXNpYyBjb25zdHJ1Y3Rvci4iCisK
KyAgICAgICAgIyBXZSBkb24ndCBhY3R1YWxseSBzdG9yZSB0aGUgcGFyc2VyIG9iamVjdDogdGhh
dCBsZXRzIGV4dHJhY3RlZAorICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZAor
ICAgICAgICBzZWxmLnBhcnNlckNsYXNzID0gcGFyc2VyLl9fY2xhc3NfXworICAgICAgICBzZWxm
LmlzU2VsZkNsb3NpbmcgPSBwYXJzZXIuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKQorICAgICAgICBz
ZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIGlmIGF0dHJzID09IE5vbmU6CisgICAgICAgICAgICBh
dHRycyA9IFtdCisgICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycworICAgICAgICBzZWxmLmNvbnRl
bnRzID0gW10KKyAgICAgICAgc2VsZi5zZXR1cChwYXJlbnQsIHByZXZpb3VzKQorICAgICAgICBz
ZWxmLmhpZGRlbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25zID0g
RmFsc2UKKyAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gcGFyc2VyLmNvbnZlcnRI
VE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBwYXJzZXIuY29u
dmVydFhNTEVudGl0aWVzCisgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMg
PSBwYXJzZXIuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMKKworICAgICAgICBkZWYgY29udmVy
dChrdmFsKToKKyAgICAgICAgICAgICJDb252ZXJ0cyBIVE1MLCBYTUwgYW5kIG51bWVyaWMgZW50
aXRpZXMgaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4iCisgICAgICAgICAgICBrLCB2YWwgPSBrdmFs
CisgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3Zh
bAorICAgICAgICAgICAgcmV0dXJuIChrLCByZS5zdWIoIiYoI1xkK3wjeFswLTlhLWZBLUZdK3xc
dyspOyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb252ZXJ0RW50aXRp
ZXMsIHZhbCkpCisgICAgICAgIHNlbGYuYXR0cnMgPSBtYXAoY29udmVydCwgc2VsZi5hdHRycykK
KworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZXR1
cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLCBvcgorICAg
ICAgICB0aGUgdmFsdWUgZ2l2ZW4gZm9yICdkZWZhdWx0JyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhh
dAorICAgICAgICBhdHRyaWJ1dGUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFw
KCkuZ2V0KGtleSwgZGVmYXVsdCkKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAg
ICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKCkuaGFzX2tleShrZXkpCisKKyAgICBkZWYgX19n
ZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIiIidGFnW2tleV0gcmV0dXJucyB0aGUgdmFs
dWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywKKyAgICAgICAgYW5kIHRocm93
cyBhbiBleGNlcHRpb24gaWYgaXQncyBub3QgdGhlcmUuIiIiCisgICAgICAgIHJldHVybiBzZWxm
Ll9nZXRBdHRyTWFwKClba2V5XQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAi
SXRlcmF0aW5nIG92ZXIgYSB0YWcgaXRlcmF0ZXMgb3ZlciBpdHMgY29udGVudHMuIgorICAgICAg
ICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6Cisg
ICAgICAgICJUaGUgbGVuZ3RoIG9mIGEgdGFnIGlzIHRoZSBsZW5ndGggb2YgaXRzIGxpc3Qgb2Yg
Y29udGVudHMuIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYg
X19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRz
CisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICJBIHRhZyBpcyBub24tTm9u
ZSBldmVuIGlmIGl0IGhhcyBubyBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldHRpbmcg
dGFnW2tleV0gc2V0cyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlCisg
ICAgICAgIHRhZy4iIiIKKyAgICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCisgICAgICAgIHNlbGYu
YXR0ck1hcFtrZXldID0gdmFsdWUKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3Ig
aSBpbiByYW5nZSgwLCBsZW4oc2VsZi5hdHRycykpOgorICAgICAgICAgICAgaWYgc2VsZi5hdHRy
c1tpXVswXSA9PSBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hdHRyc1tpXSA9IChrZXksIHZh
bHVlKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICBpZiBub3QgZm91bmQ6
CisgICAgICAgICAgICBzZWxmLmF0dHJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCisgICAgICAgIHNl
bGYuX2dldEF0dHJNYXAoKVtrZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxm
LCBrZXkpOgorICAgICAgICAiRGVsZXRpbmcgdGFnW2tleV0gZGVsZXRlcyBhbGwgJ2tleScgYXR0
cmlidXRlcyBmb3IgdGhlIHRhZy4iCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuYXR0cnM6Cisg
ICAgICAgICAgICBpZiBpdGVtWzBdID09IGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHJz
LnJlbW92ZShpdGVtKQorICAgICAgICAgICAgICAgICNXZSBkb24ndCBicmVhayBiZWNhdXNlIGJh
ZCBIVE1MIGNhbiBkZWZpbmUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjYXR0cmlidXRlIG11
bHRpcGxlIHRpbWVzLgorICAgICAgICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCisgICAgICAgICAg
ICBpZiBzZWxmLmF0dHJNYXAuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxm
LmF0dHJNYXBba2V5XQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6
CisgICAgICAgICIiIkNhbGxpbmcgYSB0YWcgbGlrZSBhIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFz
IGNhbGxpbmcgaXRzCisgICAgICAgIGZpbmRBbGwoKSBtZXRob2QuIEVnLiB0YWcoJ2EnKSByZXR1
cm5zIGEgbGlzdCBvZiBhbGwgdGhlIEEgdGFncworICAgICAgICBmb3VuZCB3aXRoaW4gdGhpcyB0
YWcuIiIiCisgICAgICAgIHJldHVybiBhcHBseShzZWxmLmZpbmRBbGwsIGFyZ3MsIGt3YXJncykK
KworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB0YWcpOgorICAgICAgICAjcHJpbnQgIkdldGF0
dHIgJXMuJXMiICUgKHNlbGYuX19jbGFzc19fLCB0YWcpCisgICAgICAgIGlmIGxlbih0YWcpID4g
MyBhbmQgdGFnLnJmaW5kKCdUYWcnKSA9PSBsZW4odGFnKS0zOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZmluZCh0YWdbOi0zXSkKKyAgICAgICAgZWxpZiB0YWcuZmluZCgnX18nKSAhPSAwOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWcpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0
ZUVycm9yLCAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlIChzZWxmLl9fY2xh
c3NfXywgdGFnKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJl
dHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaGFzIHRoZSBzYW1lIG5hbWUsIHRoZSBzYW1lIGF0dHJp
YnV0ZXMsCisgICAgICAgIGFuZCB0aGUgc2FtZSBjb250ZW50cyAocmVjdXJzaXZlbHkpIGFzIHRo
ZSBnaXZlbiB0YWcuCisKKyAgICAgICAgTk9URTogcmlnaHQgbm93IHRoaXMgd2lsbCByZXR1cm4g
ZmFsc2UgaWYgdHdvIHRhZ3MgaGF2ZSB0aGUKKyAgICAgICAgc2FtZSBhdHRyaWJ1dGVzIGluIGEg
ZGlmZmVyZW50IG9yZGVyLiBTaG91bGQgdGhpcyBiZSBmaXhlZD8iIiIKKyAgICAgICAgaWYgbm90
IGhhc2F0dHIob3RoZXIsICduYW1lJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdhdHRycycpIG9y
IG5vdCBoYXNhdHRyKG90aGVyLCAnY29udGVudHMnKSBvciBzZWxmLm5hbWUgIT0gb3RoZXIubmFt
ZSBvciBzZWxmLmF0dHJzICE9IG90aGVyLmF0dHJzIG9yIGxlbihzZWxmKSAhPSBsZW4ob3RoZXIp
OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxl
bihzZWxmLmNvbnRlbnRzKSk6CisgICAgICAgICAgICBpZiBzZWxmLmNvbnRlbnRzW2ldICE9IG90
aGVyLmNvbnRlbnRzW2ldOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJl
dHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaXMgbm90IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgdGFn
LAorICAgICAgICBhcyBkZWZpbmVkIGluIF9fZXFfXy4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBz
ZWxmID09IG90aGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9P
VVRQVVRfRU5DT0RJTkcpOgorICAgICAgICAiIiJSZW5kZXJzIHRoaXMgdGFnIGFzIGEgc3RyaW5n
LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoZXZlbnR1YWxFbmNvZGluZz1lbmNvZGlu
ZykKKworICAgIEJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+XXwi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJig/ISNcZCs7
fCN4WzAtOWEtZkEtRl0rO3xcdys7KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArICIpIikKKworICAgIGRlZiBfc3ViX2VudGl0eShzZWxmLCB4KToKKyAgICAg
ICAgIiIiVXNlZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHN1YnN0aXR1dGUgdGhlCisg
ICAgICAgIGFwcHJvcHJpYXRlIFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBzcGVjaWFsIGNoYXJhY3Rl
ci4iIiIKKyAgICAgICAgcmV0dXJuICImIiArIHNlbGYuWE1MX1NQRUNJQUxfQ0hBUlNfVE9fRU5U
SVRJRVNbeC5ncm91cCgwKVswXV0gKyAiOyIKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoKQorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNv
ZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIHByZXR0eVByaW50
PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKHByZXR0
eVByaW50LCBpbmRlbnRMZXZlbCwgZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykKKworICAgIGRl
ZiBkZWNvZGUoc2VsZiwgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTAsCisgICAgICAg
ICAgICAgICBldmVudHVhbEVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAg
ICAgIiIiUmV0dXJucyBhIHN0cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMg
dGFnIGFuZAorICAgICAgICBpdHMgY29udGVudHMuIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUg
Zm9yIGVuY29kaW5nLiIiIgorCisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgaWYgc2VsZi5h
dHRyczoKKyAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLmF0dHJzOgorICAgICAgICAg
ICAgICAgIGZtdCA9ICclcz0iJXMiJworICAgICAgICAgICAgICAgIGlmIGlzU3RyaW5nKHZhbCk6
CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbnRhaW5zU3Vic3RpdHV0aW9ucworICAg
ICAgICAgICAgICAgICAgICAgICAgYW5kIGV2ZW50dWFsRW5jb2RpbmcgaXMgbm90IE5vbmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFuZCAnJVNPVVAtRU5DT0RJTkclJyBpbiB2YWwpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5zdWJzdGl0dXRlRW5jb2RpbmcodmFsLCBl
dmVudHVhbEVuY29kaW5nKQorCisgICAgICAgICAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSB2
YWx1ZSBlaXRoZXI6CisgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAg
IyAqIENvbnRhaW5zIG5vIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgb3Igc2luZ2xlIHF1b3Rlcy4K
KyAgICAgICAgICAgICAgICAgICAgIyAgIE5vIHByb2JsZW06IHdlIGVuY2xvc2UgaXQgaW4gZG91
YmxlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIHNp
bmdsZSBxdW90ZXMuIE5vIHByb2JsZW06CisgICAgICAgICAgICAgICAgICAgICMgICBkb3VibGUg
cXVvdGVzIHdvcmsgaGVyZSB0b28uCisgICAgICAgICAgICAgICAgICAgICMgKiBDb250YWlucyBl
bWJlZGRlZCBkb3VibGUgcXVvdGVzLiBObyBwcm9ibGVtOgorICAgICAgICAgICAgICAgICAgICAj
ICAgd2UgZW5jbG9zZSBpdCBpbiBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAj
ICogRW1iZWRzIGJvdGggc2luZ2xlIF9hbmRfIGRvdWJsZSBxdW90ZXMuIFRoaXMKKyAgICAgICAg
ICAgICAgICAgICAgIyAgIGNhbid0IGhhcHBlbiBuYXR1cmFsbHksIGJ1dCBpdCBjYW4gaGFwcGVu
IGlmCisgICAgICAgICAgICAgICAgICAgICMgICB5b3UgbW9kaWZ5IGFuIGF0dHJpYnV0ZSB2YWx1
ZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAgICAgICAgICMgICB0aGUgZG9jdW1lbnQuIE5v
dyB3ZSBoYXZlIGEgYml0IG9mIGEKKyAgICAgICAgICAgICAgICAgICAgIyAgIHByb2JsZW0uIFdl
IHNvbHZlIGl0IGJ5IGVuY2xvc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyAgIGF0dHJp
YnV0ZSBpbiBzaW5nbGUgcXVvdGVzLCBhbmQgZXNjYXBpbmcgYW55CisgICAgICAgICAgICAgICAg
ICAgICMgICBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHRvIFhNTCBlbnRpdGllcy4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgJyInIGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9
ICIlcz0nJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgIiciIGluIHZhbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHJlcGxhY2Ugd2l0aCBhcG9zIHdoZW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCInIiwgIiZzcXVvdDsiKQorCisgICAgICAg
ICAgICAgICAgICAgICMgTm93IHdlJ3JlIG9rYXkgdy9yL3QgcXVvdGVzLiBCdXQgdGhlIGF0dHJp
YnV0ZQorICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIG1pZ2h0IGFsc28gY29udGFpbiBhbmds
ZSBicmFja2V0cywgb3IKKyAgICAgICAgICAgICAgICAgICAgIyBhbXBlcnNhbmRzIHRoYXQgYXJl
bid0IHBhcnQgb2YgZW50aXRpZXMuIFdlIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgIyB0byBl
c2NhcGUgdGhvc2UgdG8gWE1MIGVudGl0aWVzIHRvby4KKyAgICAgICAgICAgICAgICAgICAgdmFs
ID0gc2VsZi5CQVJFX0FNUEVSU0FORF9PUl9CUkFDS0VULnN1YihzZWxmLl9zdWJfZW50aXR5LCB2
YWwpCisgICAgICAgICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAg
ICMgSGFuZGxlIGJvb2xlYW4gYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICAgICAgZGVjb2Rl
ZCA9IGtleQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlY29k
ZWQgPSBmbXQgJSAoa2V5LCB2YWwpCisgICAgICAgICAgICAgICAgYXR0cnMuYXBwZW5kKGRlY29k
ZWQpCisgICAgICAgIGNsb3NlID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworICAgICAgICBp
ZiBzZWxmLmlzU2VsZkNsb3Npbmc6CisgICAgICAgICAgICBjbG9zZSA9ICcgLycKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGNsb3NlVGFnID0gJzwvJXM+JyAlIHNlbGYubmFtZQorCisgICAg
ICAgIGluZGVudFRhZywgaW5kZW50Q29udGVudHMgPSAwLCAwCisgICAgICAgIGlmIHByZXR0eVBy
aW50OgorICAgICAgICAgICAgaW5kZW50VGFnID0gaW5kZW50TGV2ZWwKKyAgICAgICAgICAgIHNw
YWNlID0gKCcgJyAqIChpbmRlbnRUYWctMSkpCisgICAgICAgICAgICBpbmRlbnRDb250ZW50cyA9
IGluZGVudFRhZyArIDEKKyAgICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZUNvbnRlbnRzKHBy
ZXR0eVByaW50LCBpbmRlbnRDb250ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50dWFsRW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuaGlkZGVuOgorICAg
ICAgICAgICAgcyA9IGNvbnRlbnRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gW10K
KyAgICAgICAgICAgIGF0dHJpYnV0ZVN0cmluZyA9ICcnCisgICAgICAgICAgICBpZiBhdHRyczoK
KyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVTdHJpbmcgPSAnICcgKyAnICcuam9pbihhdHRycykK
KyAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNw
YWNlKQorICAgICAgICAgICAgcy5hcHBlbmQoJzwlcyVzJXM+JyAlIChzZWxmLm5hbWUsIGF0dHJp
YnV0ZVN0cmluZywgY2xvc2UpKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMuYXBwZW5kKGNvbnRlbnRzKQor
ICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV0g
IT0gIlxuIjoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgaWYg
cHJldHR5UHJpbnQgYW5kIGNsb3NlVGFnOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNl
KQorICAgICAgICAgICAgcy5hcHBlbmQoY2xvc2VUYWcpCisgICAgICAgICAgICBpZiBwcmV0dHlQ
cmludCBhbmQgY2xvc2VUYWcgYW5kIHNlbGYubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAg
cy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMgPSAnJy5qb2luKHMpCisgICAgICAgIHJldHVy
biBzCisKKyAgICBkZWYgZGVjb21wb3NlKHNlbGYpOgorICAgICAgICAiIiJSZWN1cnNpdmVseSBk
ZXN0cm95cyB0aGUgY29udGVudHMgb2YgdGhpcyB0cmVlLiIiIgorICAgICAgICBjb250ZW50cyA9
IFtpIGZvciBpIGluIHNlbGYuY29udGVudHNdCisgICAgICAgIGZvciBpIGluIGNvbnRlbnRzOgor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpLCBUYWcpOgorICAgICAgICAgICAgICAgIGkuZGVj
b21wb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaS5leHRyYWN0KCkK
KyAgICAgICAgc2VsZi5leHRyYWN0KCkKKworICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGlu
Zz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZShl
bmNvZGluZywgVHJ1ZSkKKworICAgIGRlZiBlbmNvZGVDb250ZW50cyhzZWxmLCBlbmNvZGluZz1E
RUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJp
bnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVDb250
ZW50cyhwcmV0dHlQcmludCwgaW5kZW50TGV2ZWwpLmVuY29kZShlbmNvZGluZykKKworICAgIGRl
ZiBkZWNvZGVDb250ZW50cyhzZWxmLCBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCwK
KyAgICAgICAgICAgICAgICAgICAgICAgZXZlbnR1YWxFbmNvZGluZz1ERUZBVUxUX09VVFBVVF9F
TkNPRElORyk6CisgICAgICAgICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFz
IGEgc3RyaW5nIGluIHRoZSBnaXZlbgorICAgICAgICBlbmNvZGluZy4gSWYgZW5jb2RpbmcgaXMg
Tm9uZSwgcmV0dXJucyBhIFVuaWNvZGUgc3RyaW5nLi4iIiIKKyAgICAgICAgcz1bXQorICAgICAg
ICBmb3IgYyBpbiBzZWxmOgorICAgICAgICAgICAgdGV4dCA9IE5vbmUKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoYywgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICAgICB0ZXh0ID0g
Yy5kZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2RpbmcoZXZlbnR1YWxFbmNvZGluZykKKyAgICAgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShjLCBUYWcpOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGMu
ZGVjb2RlKHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCwgZXZlbnR1YWxFbmNvZGluZykpCisgICAg
ICAgICAgICBpZiB0ZXh0IGFuZCBwcmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICB0ZXh0ID0g
dGV4dC5zdHJpcCgpCisgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHBy
ZXR0eVByaW50OgorICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50TGV2
ZWwtMSkpCisgICAgICAgICAgICAgICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBp
ZiBwcmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAg
ICAgcmV0dXJuICcnLmpvaW4ocykKKworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5k
KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisg
ICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3Qg
Y2hpbGQgb2YgdGhpcyBUYWcgbWF0Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIi
IgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kQWxsKG5hbWUsIGF0dHJz
LCByZWN1cnNpdmUsIHRleHQsIDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAg
ICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBmaW5kQ2hpbGQgPSBmaW5kCisKKyAg
ICBkZWYgZmluZEFsbChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwg
dGV4dD1Ob25lLAorICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAg
ICAgIiIiRXh0cmFjdHMgYSBsaXN0IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVu
CisgICAgICAgIGNyaXRlcmlhLiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcg
YW5kIGFueQorICAgICAgICBhdHRyaWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKwor
ICAgICAgICBUaGUgdmFsdWUgb2YgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAg
Y2FuIGJlIGEKKyAgICAgICAgc3RyaW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4
cHJlc3Npb24gb2JqZWN0LCBvciBhCisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJp
bmcgYW5kIHJldHVybnMgd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVz
IGZvciBzb21lIGN1c3RvbSBkZWZpbml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNh
bWUgaXMgdHJ1ZSBvZiB0aGUgdGFnIG5hbWUuIiIiCisgICAgICAgIGdlbmVyYXRvciA9IHNlbGYu
cmVjdXJzaXZlQ2hpbGRHZW5lcmF0b3IKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAg
ICAgICAgIGdlbmVyYXRvciA9IHNlbGYuY2hpbGRHZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdz
KQorICAgIGZpbmRDaGlsZHJlbiA9IGZpbmRBbGwKKworICAgICMgUHJlLTMueCBjb21wYXRpYmls
aXR5IG1ldGhvZHMuIFdpbGwgZ28gYXdheSBpbiA0LjAuCisgICAgZmlyc3QgPSBmaW5kCisgICAg
ZmV0Y2ggPSBmaW5kQWxsCisKKyAgICBkZWYgZmV0Y2hUZXh0KHNlbGYsIHRleHQ9Tm9uZSwgcmVj
dXJzaXZlPVRydWUsIGxpbWl0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5maW5kQWxsKHRl
eHQ9dGV4dCwgcmVjdXJzaXZlPXJlY3Vyc2l2ZSwgbGltaXQ9bGltaXQpCisKKyAgICBkZWYgZmly
c3RUZXh0KHNlbGYsIHRleHQ9Tm9uZSwgcmVjdXJzaXZlPVRydWUpOgorICAgICAgICByZXR1cm4g
c2VsZi5maW5kKHRleHQ9dGV4dCwgcmVjdXJzaXZlPXJlY3Vyc2l2ZSkKKworICAgICMgMy54IGNv
bXBhdGliaWxpdHkgbWV0aG9kcy4gV2lsbCBnbyBhd2F5IGluIDQuMC4KKyAgICBkZWYgcmVuZGVy
Q29udGVudHMoc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAg
ICAgICAgICAgICAgICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAg
ICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZUNv
bnRlbnRzKHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGVDb250ZW50cyhlbmNvZGluZywgcHJldHR5
UHJpbnQsIGluZGVudExldmVsKQorCisKKyAgICAjUHJpdmF0ZSBtZXRob2RzCisKKyAgICBkZWYg
X2dldEF0dHJNYXAoc2VsZik6CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgbWFwIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoaXMgdGFnJ3MgYXR0cmlidXRlcywKKyAgICAgICAgaWYgbm90IGFscmVhZHkg
aW5pdGlhbGl6ZWQuIiIiCisgICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYsICdhdHRyTWFwJyk6
CisgICAgICAgICAgICBzZWxmLmF0dHJNYXAgPSB7fQorICAgICAgICAgICAgZm9yIChrZXksIHZh
bHVlKSBpbiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0g
dmFsdWUKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0ck1hcAorCisgICAgI0dlbmVyYXRvciBtZXRo
b2RzCisgICAgZGVmIHJlY3Vyc2l2ZUNoaWxkR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpZiBu
b3QgbGVuKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgor
ICAgICAgICBzdG9wTm9kZSA9IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgpLm5leHQKKyAgICAg
ICAgY3VycmVudCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAgICAgd2hpbGUgY3VycmVudCBpcyBu
b3Qgc3RvcE5vZGU6CisgICAgICAgICAgICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC5uZXh0CisKKyAgICBkZWYgY2hpbGRHZW5lcmF0b3Ioc2VsZik6CisgICAg
ICAgIGlmIG5vdCBsZW4oc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRl
cmF0aW9uCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxl
IGN1cnJlbnQ6CisgICAgICAgICAgICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC5uZXh0U2libGluZworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyMg
TmV4dCwgYSBjb3VwbGUgY2xhc3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQgdGhlaXIgcmVz
dWx0cy4KK2NsYXNzIFNvdXBTdHJhaW5lcjoKKyAgICAiIiJFbmNhcHN1bGF0ZXMgYSBudW1iZXIg
b2Ygd2F5cyBvZiBtYXRjaGluZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAgICB0ZXh0KS4i
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5v
bmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBpZiBpc1N0
cmluZyhhdHRycyk6CisgICAgICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBhdHRycworICAgICAg
ICAgICAgYXR0cnMgPSBOb25lCisgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgIGlmIGF0
dHJzOgorICAgICAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuY29weSgpCisgICAgICAgICAgICAg
ICAgYXR0cnMudXBkYXRlKGt3YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgYXR0cnMgPSBrd2FyZ3MKKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAgIHNl
bGYudGV4dCA9IHRleHQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LnRleHQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0CisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gIiVzfCVzIiAlIChzZWxmLm5hbWUsIHNlbGYuYXR0cnMpCisKKyAgICBk
ZWYgc2VhcmNoVGFnKHNlbGYsIG1hcmt1cE5hbWU9Tm9uZSwgbWFya3VwQXR0cnM9e30pOgorICAg
ICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgbWFya3VwID0gTm9uZQorICAgICAgICBpZiBpc2lu
c3RhbmNlKG1hcmt1cE5hbWUsIFRhZyk6CisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXBOYW1l
CisgICAgICAgICAgICBtYXJrdXBBdHRycyA9IG1hcmt1cAorICAgICAgICBjYWxsRnVuY3Rpb25X
aXRoVGFnRGF0YSA9IGNhbGxhYmxlKHNlbGYubmFtZSkgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwTmFtZSwgVGFnKQorCisgICAgICAg
IGlmIChub3Qgc2VsZi5uYW1lKSBcCisgICAgICAgICAgICAgICBvciBjYWxsRnVuY3Rpb25XaXRo
VGFnRGF0YSBcCisgICAgICAgICAgICAgICBvciAobWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1h
cmt1cCwgc2VsZi5uYW1lKSkgXAorICAgICAgICAgICAgICAgb3IgKG5vdCBtYXJrdXAgYW5kIHNl
bGYuX21hdGNoZXMobWFya3VwTmFtZSwgc2VsZi5uYW1lKSk6CisgICAgICAgICAgICBpZiBjYWxs
RnVuY3Rpb25XaXRoVGFnRGF0YToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYubmFtZSht
YXJrdXBOYW1lLCBtYXJrdXBBdHRycykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IE5vbmUKKyAg
ICAgICAgICAgICAgICBmb3IgYXR0ciwgbWF0Y2hBZ2FpbnN0IGluIHNlbGYuYXR0cnMuaXRlbXMo
KToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1hcmt1cEF0dHJNYXA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgaGFzYXR0cihtYXJrdXBBdHRycywgJ2dldCcpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXAgPSBtYXJrdXBBdHRycworICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3Vw
QXR0ck1hcCA9IHt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBtYXJr
dXBBdHRyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcFtr
XSA9IHYKKyAgICAgICAgICAgICAgICAgICAgYXR0clZhbHVlID0gbWFya3VwQXR0ck1hcC5nZXQo
YXR0cikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX21hdGNoZXMoYXR0clZhbHVl
LCBtYXRjaEFnYWluc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAg
ICAgICAgICAgICAgIGlmIG1hcmt1cDoKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJr
dXAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1h
cmt1cE5hbWUKKyAgICAgICAgcmV0dXJuIGZvdW5kCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIG1h
cmt1cCk6CisgICAgICAgICNwcmludCAnbG9va2luZyBmb3IgJXMgaW4gJXMnICUgKHNlbGYsIG1h
cmt1cCkKKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgICMgSWYgZ2l2ZW4gYSBsaXN0IG9m
IGl0ZW1zLCBzY2FuIGl0IGZvciBhIHRleHQgZWxlbWVudCB0aGF0CisgICAgICAgICMgbWF0Y2hl
cy4KKyAgICAgICAgaWYgaXNMaXN0KG1hcmt1cCkgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cCwg
VGFnKToKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG1hcmt1cDoKKyAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAorICAgICAgICAgICAg
ICAgICAgICAgICBhbmQgc2VsZi5zZWFyY2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIElm
IGl0J3MgYSBUYWcsIG1ha2Ugc3VyZSBpdHMgbmFtZSBvciBhdHRyaWJ1dGVzIG1hdGNoLgorICAg
ICAgICAjIERvbid0IGJvdGhlciB3aXRoIFRhZ3MgaWYgd2UncmUgc2VhcmNoaW5nIGZvciB0ZXh0
LgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgaWYg
bm90IHNlbGYudGV4dDoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuc2VhcmNoVGFnKG1h
cmt1cCkKKyAgICAgICAgIyBJZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVz
LgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwK
KyAgICAgICAgICAgICAgICAgaXNTdHJpbmcobWFya3VwKToKKyAgICAgICAgICAgIGlmIHNlbGYu
X21hdGNoZXMobWFya3VwLCBzZWxmLnRleHQpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFy
a3VwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICJJIGRvbid0
IGtub3cgaG93IHRvIG1hdGNoIGFnYWluc3QgYSAlcyIgXAorICAgICAgICAgICAgICAgICAgJSBt
YXJrdXAuX19jbGFzc19fCisgICAgICAgIHJldHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVz
KHNlbGYsIG1hcmt1cCwgbWF0Y2hBZ2FpbnN0KToKKyAgICAgICAgI3ByaW50ICJNYXRjaGluZyAl
cyBhZ2FpbnN0ICVzIiAlIChtYXJrdXAsIG1hdGNoQWdhaW5zdCkKKyAgICAgICAgcmVzdWx0ID0g
RmFsc2UKKyAgICAgICAgaWYgbWF0Y2hBZ2FpbnN0ID09IFRydWUgYW5kIHR5cGUobWF0Y2hBZ2Fp
bnN0KSA9PSB0eXBlcy5Cb29sZWFuVHlwZToKKyAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCAh
PSBOb25lCisgICAgICAgIGVsaWYgY2FsbGFibGUobWF0Y2hBZ2FpbnN0KToKKyAgICAgICAgICAg
IHJlc3VsdCA9IG1hdGNoQWdhaW5zdChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAjQ3VzdG9tIG1hdGNoIG1ldGhvZHMgdGFrZSB0aGUgdGFnIGFzIGFuIGFyZ3VtZW50LCBidXQg
YWxsCisgICAgICAgICAgICAjb3RoZXIgd2F5cyBvZiBtYXRjaGluZyBtYXRjaCB0aGUgdGFnIG5h
bWUgYXMgYSBzdHJpbmcuCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToK
KyAgICAgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXAubmFtZQorICAgICAgICAgICAgaWYgbWFy
a3VwIGlzIG5vdCBOb25lIGFuZCBub3QgaXNTdHJpbmcobWFya3VwKToKKyAgICAgICAgICAgICAg
ICBtYXJrdXAgPSB1bmljb2RlKG1hcmt1cCkKKyAgICAgICAgICAgICNOb3cgd2Uga25vdyB0aGF0
IGNodW5rIGlzIGVpdGhlciBhIHN0cmluZywgb3IgTm9uZS4KKyAgICAgICAgICAgIGlmIGhhc2F0
dHIobWF0Y2hBZ2FpbnN0LCAnbWF0Y2gnKToKKyAgICAgICAgICAgICAgICAjIEl0J3MgYSByZWdl
eHAgb2JqZWN0LgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBhbmQgbWF0Y2hBZ2Fp
bnN0LnNlYXJjaChtYXJrdXApCisgICAgICAgICAgICBlbGlmIChpc0xpc3QobWF0Y2hBZ2FpbnN0
KQorICAgICAgICAgICAgICAgICAgYW5kIChtYXJrdXAgaXMgbm90IE5vbmUgb3Igbm90IGlzU3Ry
aW5nKG1hdGNoQWdhaW5zdCkpKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaW4g
bWF0Y2hBZ2FpbnN0CisgICAgICAgICAgICBlbGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAnaXRl
bXMnKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAuaGFzX2tleShtYXRjaEFnYWlu
c3QpCisgICAgICAgICAgICBlbGlmIG1hdGNoQWdhaW5zdCBhbmQgaXNTdHJpbmcobWFya3VwKToK
KyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAg
ICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHVuaWNvZGUobWF0Y2hBZ2FpbnN0KQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHN0ciht
YXRjaEFnYWluc3QpCisKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbWF0Y2hBZ2FpbnN0ID09IG1hcmt1cAorICAgICAgICByZXR1cm4gcmVzdWx0
CisKK2NsYXNzIFJlc3VsdFNldChsaXN0KToKKyAgICAiIiJBIFJlc3VsdFNldCBpcyBqdXN0IGEg
bGlzdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKKyAgICB0aGF0IGNyZWF0
ZWQgaXQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIGxpc3Qu
X19pbml0X18oW10pCisgICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCisKKyMgTm93LCBzb21l
IGhlbHBlciBmdW5jdGlvbnMuCisKK2RlZiBpc0xpc3QobCk6CisgICAgIiIiQ29udmVuaWVuY2Ug
bWV0aG9kIHRoYXQgd29ya3Mgd2l0aCBhbGwgMi54IHZlcnNpb25zIG9mIFB5dGhvbgorICAgIHRv
IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBzb21ldGhpbmcgaXMgbGlzdGxpa2UuIiIiCisgICAg
cmV0dXJuICgoaGFzYXR0cihsLCAnX19pdGVyX18nKSBhbmQgbm90IGlzU3RyaW5nKGwpKQorICAg
ICAgICAgICAgb3IgKHR5cGUobCkgaW4gKHR5cGVzLkxpc3RUeXBlLCB0eXBlcy5UdXBsZVR5cGUp
KSkKKworZGVmIGlzU3RyaW5nKHMpOgorICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHdv
cmtzIHdpdGggYWxsIDIueCB2ZXJzaW9ucyBvZiBQeXRob24KKyAgICB0byBkZXRlcm1pbmUgd2hl
dGhlciBvciBub3Qgc29tZXRoaW5nIGlzIHN0cmluZ2xpa2UuIiIiCisgICAgdHJ5OgorICAgICAg
ICByZXR1cm4gaXNpbnN0YW5jZShzLCB1bmljb2RlKSBvciBpc2luc3RhbmNlKHMsIGJhc2VzdHJp
bmcpCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uocywg
c3RyKQorCitkZWYgYnVpbGRUYWdNYXAoZGVmYXVsdCwgKmFyZ3MpOgorICAgICIiIlR1cm5zIGEg
bGlzdCBvZiBtYXBzLCBsaXN0cywgb3Igc2NhbGFycyBpbnRvIGEgc2luZ2xlIG1hcC4KKyAgICBV
c2VkIHRvIGJ1aWxkIHRoZSBTRUxGX0NMT1NJTkdfVEFHUywgTkVTVEFCTEVfVEFHUywgYW5kCisg
ICAgTkVTVElOR19SRVNFVF9UQUdTIG1hcHMgb3V0IG9mIGxpc3RzIGFuZCBwYXJ0aWFsIG1hcHMu
IiIiCisgICAgYnVpbHQgPSB7fQorICAgIGZvciBwb3J0aW9uIGluIGFyZ3M6CisgICAgICAgIGlm
IGhhc2F0dHIocG9ydGlvbiwgJ2l0ZW1zJyk6CisgICAgICAgICAgICAjSXQncyBhIG1hcC4gTWVy
Z2UgaXQuCisgICAgICAgICAgICBmb3Igayx2IGluIHBvcnRpb24uaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICBidWlsdFtrXSA9IHYKKyAgICAgICAgZWxpZiBpc0xpc3QocG9ydGlvbikgYW5kIG5v
dCBpc1N0cmluZyhwb3J0aW9uKToKKyAgICAgICAgICAgICNJdCdzIGEgbGlzdC4gTWFwIGVhY2gg
aXRlbSB0byB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgIGZvciBrIGluIHBvcnRpb246CisgICAg
ICAgICAgICAgICAgYnVpbHRba10gPSBkZWZhdWx0CisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAjSXQncyBhIHNjYWxhci4gTWFwIGl0IHRvIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgYnVp
bHRbcG9ydGlvbl0gPSBkZWZhdWx0CisgICAgcmV0dXJuIGJ1aWx0CisKKyMgTm93LCB0aGUgcGFy
c2VyIGNsYXNzZXMuCisKK2NsYXNzIEhUTUxQYXJzZXJCdWlsZGVyKEhUTUxQYXJzZXIpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXApOgorICAgICAgICBIVE1MUGFyc2VyLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHNlbGYuc291cCA9IHNvdXAKKworICAgICMgV2UgaW5oZXJpdCBmZWVk
KCkgYW5kIHJlc2V0KCkuCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0
dHJzKToKKyAgICAgICAgaWYgbmFtZSA9PSAnbWV0YSc6CisgICAgICAgICAgICBzZWxmLnNvdXAu
ZXh0cmFjdENoYXJzZXRGcm9tTWV0YShhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuc291cC51bmtub3duX3N0YXJ0dGFnKG5hbWUsIGF0dHJzKQorCisgICAgZGVmIGhhbmRs
ZV9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuc291cC51bmtub3duX2VuZHRhZyhu
YW1lKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBzZWxm
LnNvdXAuaGFuZGxlX2RhdGEoY29udGVudCkKKworICAgIGRlZiBfdG9TdHJpbmdTdWJjbGFzcyhz
ZWxmLCB0ZXh0LCBzdWJjbGFzcyk6CisgICAgICAgICIiIkFkZHMgYSBjZXJ0YWluIHBpZWNlIG9m
IHRleHQgdG8gdGhlIHRyZWUgYXMgYSBOYXZpZ2FibGVTdHJpbmcKKyAgICAgICAgc3ViY2xhc3Mu
IiIiCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0
YSh0ZXh0KQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShzdWJjbGFzcykKKworICAgIGRlZiBo
YW5kbGVfcGkoc2VsZiwgdGV4dCk6CisgICAgICAgICIiIkhhbmRsZSBhIHByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb24gYXMgYSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAgICAgICAgb2JqZWN0LCBwb3Nz
aWJseSBvbmUgd2l0aCBhICVTT1VQLUVOQ09ESU5HJSBzbG90IGludG8gd2hpY2ggYW4KKyAgICAg
ICAgZW5jb2Rpbmcgd2lsbCBiZSBwbHVnZ2VkIGxhdGVyLiIiIgorICAgICAgICBpZiB0ZXh0Wzoz
XSA9PSAieG1sIjoKKyAgICAgICAgICAgIHRleHQgPSB1InhtbCB2ZXJzaW9uPScxLjAnIGVuY29k
aW5nPSclU09VUC1FTkNPRElORyUnIgorICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKHRl
eHQsIFByb2Nlc3NpbmdJbnN0cnVjdGlvbikKKworICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxm
LCB0ZXh0KToKKyAgICAgICAgIkhhbmRsZSBjb21tZW50cyBhcyBDb21tZW50IG9iamVjdHMuIgor
ICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKHRleHQsIENvbW1lbnQpCisKKyAgICBkZWYg
aGFuZGxlX2NoYXJyZWYoc2VsZiwgcmVmKToKKyAgICAgICAgIkhhbmRsZSBjaGFyYWN0ZXIgcmVm
ZXJlbmNlcyBhcyBkYXRhLiIKKyAgICAgICAgaWYgc2VsZi5zb3VwLmNvbnZlcnRFbnRpdGllczoK
KyAgICAgICAgICAgIGRhdGEgPSB1bmljaHIoaW50KHJlZikpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBkYXRhID0gJyYjJXM7JyAlIHJlZgorICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRh
dGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJI
YW5kbGUgZW50aXR5IHJlZmVyZW5jZXMgYXMgZGF0YSwgcG9zc2libHkgY29udmVydGluZyBrbm93
bgorICAgICAgICBIVE1MIGFuZC9vciBYTUwgZW50aXR5IHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJl
c3BvbmRpbmcgVW5pY29kZQorICAgICAgICBjaGFyYWN0ZXJzLiIiIgorICAgICAgICBkYXRhID0g
Tm9uZQorICAgICAgICBpZiBzZWxmLnNvdXAuY29udmVydEhUTUxFbnRpdGllczoKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gdW5pY2hyKG5hbWUyY29kZXBvaW50W3Jl
Zl0pCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwor
CisgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBzZWxmLnNvdXAuY29udmVydFhNTEVudGl0aWVzOgor
ICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnNvdXAuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxf
Q0hBUlMuZ2V0KHJlZikKKworICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5zb3VwLmNvbnZl
cnRIVE1MRW50aXRpZXMgYW5kIFwKKyAgICAgICAgICAgIG5vdCBzZWxmLnNvdXAuWE1MX0VOVElU
SUVTX1RPX1NQRUNJQUxfQ0hBUlMuZ2V0KHJlZik6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBX
ZSd2ZSBnb3QgYSBwcm9ibGVtIGhlcmUuIFdlJ3JlIHRvbGQgdGhpcyBpcworICAgICAgICAgICAg
ICAgICMgYW4gZW50aXR5IHJlZmVyZW5jZSwgYnV0IGl0J3Mgbm90IGFuIFhNTCBlbnRpdHkKKyAg
ICAgICAgICAgICAgICAjIHJlZmVyZW5jZSBvciBhbiBIVE1MIGVudGl0eSByZWZlcmVuY2UuIE5v
bmV0aGVsZXNzLAorICAgICAgICAgICAgICAgICMgdGhlIGxvZ2ljYWwgdGhpbmcgdG8gZG8gaXMg
dG8gcGFzcyBpdCB0aHJvdWdoIGFzIGFuCisgICAgICAgICAgICAgICAgIyB1bnJlY29nbml6ZWQg
ZW50aXR5IHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBF
eGNlcHQ6IHdoZW4gdGhlIGlucHV0IGlzICImY2Fyb2w7IiB0aGlzIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgIyB3aWxsIGJlIGNhbGxlZCB3aXRoIGlucHV0ICJjYXJvbCIuIFdoZW4gdGhlIGlu
cHV0IGlzCisgICAgICAgICAgICAgICAgIyAiQVQmVCIsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgd2l0aCBpbnB1dAorICAgICAgICAgICAgICAgICMgIlQiLiBXZSBoYXZlIG5vIHdheSBv
ZiBrbm93aW5nIHdoZXRoZXIgYSBzZW1pY29sb24KKyAgICAgICAgICAgICAgICAjIHdhcyBwcmVz
ZW50IG9yaWdpbmFsbHksIHNvIHdlIGRvbid0IGtub3cgd2hldGhlcgorICAgICAgICAgICAgICAg
ICMgdGhpcyBpcyBhbiB1bmtub3duIGVudGl0eSBvciBqdXN0IGEgbWlzcGxhY2VkCisgICAgICAg
ICAgICAgICAgIyBhbXBlcnNhbmQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAg
ICMgVGhlIG1vcmUgY29tbW9uIGNhc2UgaXMgYSBtaXNwbGFjZWQgYW1wZXJzYW5kLCBzbyBJCisg
ICAgICAgICAgICAgICAgIyBlc2NhcGUgdGhlIGFtcGVyc2FuZCBhbmQgb21pdCB0aGUgdHJhaWxp
bmcgc2VtaWNvbG9uLgorICAgICAgICAgICAgICAgIGRhdGEgPSAiJmFtcDslcyIgJSByZWYKKyAg
ICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAjIFRoaXMgY2FzZSBpcyBkaWZmZXJlbnQg
ZnJvbSB0aGUgb25lIGFib3ZlLCBiZWNhdXNlIHdlCisgICAgICAgICAgICAjIGhhdmVuJ3QgYWxy
ZWFkeSBnb25lIHRocm91Z2ggYSBzdXBwb3NlZGx5IGNvbXByZWhlbnNpdmUKKyAgICAgICAgICAg
ICMgbWFwcGluZyBvZiBlbnRpdGllcyB0byBVbmljb2RlIGNoYXJhY3RlcnMuIFdlIG1pZ2h0IG5v
dAorICAgICAgICAgICAgIyBoYXZlIGdvbmUgdGhyb3VnaCBhbnkgbWFwcGluZyBhdCBhbGwuIFNv
IHRoZSBjaGFuY2VzIGFyZQorICAgICAgICAgICAgIyB2ZXJ5IGhpZ2ggdGhhdCB0aGlzIGlzIGEg
cmVhbCBlbnRpdHksIGFuZCBub3QgYQorICAgICAgICAgICAgIyBtaXNwbGFjZWQgYW1wZXJzYW5k
LgorICAgICAgICAgICAgZGF0YSA9ICImJXM7IiAlIHJlZgorICAgICAgICBzZWxmLmhhbmRsZV9k
YXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgICJI
YW5kbGUgRE9DVFlQRXMgYW5kIHRoZSBsaWtlIGFzIERlY2xhcmF0aW9uIG9iamVjdHMuIgorICAg
ICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKGRhdGEsIERlY2xhcmF0aW9uKQorCisgICAgZGVm
IHBhcnNlX2RlY2xhcmF0aW9uKHNlbGYsIGkpOgorICAgICAgICAiIiJUcmVhdCBhIGJvZ3VzIFNH
TUwgZGVjbGFyYXRpb24gYXMgcmF3IGRhdGEuIFRyZWF0IGEgQ0RBVEEKKyAgICAgICAgZGVjbGFy
YXRpb24gYXMgYSBDRGF0YSBvYmplY3QuIiIiCisgICAgICAgIGogPSBOb25lCisgICAgICAgIGlm
IHNlbGYucmF3ZGF0YVtpOmkrOV0gPT0gJzwhW0NEQVRBWyc6CisgICAgICAgICAgICAgayA9IHNl
bGYucmF3ZGF0YS5maW5kKCddXT4nLCBpKQorICAgICAgICAgICAgIGlmIGsgPT0gLTE6CisgICAg
ICAgICAgICAgICAgIGsgPSBsZW4oc2VsZi5yYXdkYXRhKQorICAgICAgICAgICAgIGRhdGEgPSBz
ZWxmLnJhd2RhdGFbaSs5OmtdCisgICAgICAgICAgICAgaiA9IGsrMworICAgICAgICAgICAgIHNl
bGYuX3RvU3RyaW5nU3ViY2xhc3MoZGF0YSwgQ0RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgaiA9IEhUTUxQYXJzZXIucGFyc2VfZGVjbGFyYXRp
b24oc2VsZiwgaSkKKyAgICAgICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvcjoKKyAgICAgICAg
ICAgICAgICB0b0hhbmRsZSA9IHNlbGYucmF3ZGF0YVtpOl0KKyAgICAgICAgICAgICAgICBzZWxm
LmhhbmRsZV9kYXRhKHRvSGFuZGxlKQorICAgICAgICAgICAgICAgIGogPSBpICsgbGVuKHRvSGFu
ZGxlKQorICAgICAgICByZXR1cm4gagorCisKK2NsYXNzIEJlYXV0aWZ1bFN0b25lU291cChUYWcp
OgorCisgICAgIiIiVGhpcyBjbGFzcyBjb250YWlucyB0aGUgYmFzaWMgcGFyc2VyIGFuZCBzZWFy
Y2ggY29kZS4gSXQgZGVmaW5lcworICAgIGEgcGFyc2VyIHRoYXQga25vd3Mgbm90aGluZyBhYm91
dCB0YWcgYmVoYXZpb3IgZXhjZXB0IGZvciB0aGUKKyAgICBmb2xsb3dpbmc6CisKKyAgICAgIFlv
dSBjYW4ndCBjbG9zZSBhIHRhZyB3aXRob3V0IGNsb3NpbmcgYWxsIHRoZSB0YWdzIGl0IGVuY2xv
c2VzLgorICAgICAgVGhhdCBpcywgIjxmb28+PGJhcj48L2Zvbz4iIGFjdHVhbGx5IG1lYW5zCisg
ICAgICAiPGZvbz48YmFyPjwvYmFyPjwvZm9vPiIuCisKKyAgICBbQW5vdGhlciBwb3NzaWJsZSBl
eHBsYW5hdGlvbiBpcyAiPGZvbz48YmFyIC8+PC9mb28+IiwgYnV0IHNpbmNlCisgICAgdGhpcyBj
bGFzcyBkZWZpbmVzIG5vIFNFTEZfQ0xPU0lOR19UQUdTLCBpdCB3aWxsIG5ldmVyIHVzZSB0aGF0
CisgICAgZXhwbGFuYXRpb24uXQorCisgICAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yIHBhcnNp
bmcgWE1MIG9yIG1hZGUtdXAgbWFya3VwIGxhbmd1YWdlcywKKyAgICBvciB3aGVuIEJlYXV0aWZ1
bFNvdXAgbWFrZXMgYW4gYXNzdW1wdGlvbiBjb3VudGVyIHRvIHdoYXQgeW91IHdlcmUKKyAgICBl
eHBlY3RpbmcuIiIiCisKKyAgICBTRUxGX0NMT1NJTkdfVEFHUyA9IHt9CisgICAgTkVTVEFCTEVf
VEFHUyA9IHt9CisgICAgUkVTRVRfTkVTVElOR19UQUdTID0ge30KKyAgICBRVU9URV9UQUdTID0g
e30KKyAgICBQUkVTRVJWRV9XSElURVNQQUNFX1RBR1MgPSBbXQorCisgICAgTUFSS1VQX01BU1NB
R0UgPSBbKHJlLmNvbXBpbGUoJyg8W148Pl0qKS8+JyksCisgICAgICAgICAgICAgICAgICAgICAg
IGxhbWJkYSB4OiB4Lmdyb3VwKDEpICsgJyAvPicpLAorICAgICAgICAgICAgICAgICAgICAgIChy
ZS5jb21waWxlKCc8IVxzKyhbXjw+XSopPicpLAorICAgICAgICAgICAgICAgICAgICAgICBsYW1i
ZGEgeDogJzwhJyArIHguZ3JvdXAoMSkgKyAnPicpCisgICAgICAgICAgICAgICAgICAgICAgXQor
CisgICAgUk9PVF9UQUdfTkFNRSA9IHUnW2RvY3VtZW50XScKKworICAgIEhUTUxfRU5USVRJRVMg
PSAiaHRtbCIKKyAgICBYTUxfRU5USVRJRVMgPSAieG1sIgorICAgIFhIVE1MX0VOVElUSUVTID0g
InhodG1sIgorICAgICMgVE9ETzogVGhpcyBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzLWNvbXBh
dGliaWxpdHkKKyAgICBBTExfRU5USVRJRVMgPSBYSFRNTF9FTlRJVElFUworCisgICAgIyBVc2Vk
IHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHRleHQgbm9kZSBpcyBhbGwgd2hpdGVzcGFjZSBh
bmQKKyAgICAjIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLiBBIHRleHQgbm9k
ZSB0aGF0IGNvbnRhaW5zCisgICAgIyBmYW5jeSBVbmljb2RlIHNwYWNlcyAodXN1YWxseSBub24t
YnJlYWtpbmcpIHNob3VsZCBiZSBsZWZ0CisgICAgIyBhbG9uZS4KKyAgICBTVFJJUF9BU0NJSV9T
UEFDRVMgPSB7IDk6IE5vbmUsIDEwOiBOb25lLCAxMjogTm9uZSwgMTM6IE5vbmUsIDMyOiBOb25l
LCB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwPSIiLCBwYXJzZU9ubHlUaGVzZT1O
b25lLCBmcm9tRW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWFya3VwTWFzc2FnZT1U
cnVlLCBzbWFydFF1b3Rlc1RvPVhNTF9FTlRJVElFUywKKyAgICAgICAgICAgICAgICAgY29udmVy
dEVudGl0aWVzPU5vbmUsIHNlbGZDbG9zaW5nVGFncz1Ob25lLCBpc0hUTUw9RmFsc2UsCisgICAg
ICAgICAgICAgICAgIGJ1aWxkZXI9SFRNTFBhcnNlckJ1aWxkZXIpOgorICAgICAgICAiIiJUaGUg
U291cCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgYXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKKyAg
ICAgICAgcHJvdmlkZWQgbWFya3VwICh3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxp
a2Ugb2JqZWN0KQorICAgICAgICBpcyBmZWQgaW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisK
KyAgICAgICAgSFRNTFBhcnNlciB3aWxsIHByb2Nlc3MgbW9zdCBiYWQgSFRNTCwgYW5kIHRoZSBC
ZWF1dGlmdWxTb3VwCisgICAgICAgIGNsYXNzIGhhcyBzb21lIHRyaWNrcyBmb3IgZGVhbGluZyB3
aXRoIHNvbWUgSFRNTCB0aGF0IGtpbGxzCisgICAgICAgIEhUTUxQYXJzZXIsIGJ1dCBCZWF1dGlm
dWwgU291cCBjYW4gbm9uZXRoZWxlc3MgY2hva2Ugb3IgbG9zZSBkYXRhCisgICAgICAgIGlmIHlv
dXIgZGF0YSB1c2VzIHNlbGYtY2xvc2luZyB0YWdzIG9yIGRlY2xhcmF0aW9ucworICAgICAgICBp
bmNvcnJlY3RseS4KKworICAgICAgICBCeSBkZWZhdWx0LCBCZWF1dGlmdWwgU291cCB1c2VzIHJl
Z2V4ZXMgdG8gc2FuaXRpemUgaW5wdXQsCisgICAgICAgIGF2b2lkaW5nIHRoZSB2YXN0IG1ham9y
aXR5IG9mIHRoZXNlIHByb2JsZW1zLiBJZiB0aGUgcHJvYmxlbXMKKyAgICAgICAgZG9uJ3QgYXBw
bHkgdG8geW91LCBwYXNzIGluIEZhbHNlIGZvciBtYXJrdXBNYXNzYWdlLCBhbmQKKyAgICAgICAg
eW91J2xsIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgcGFy
c2VyIG1hc3NhZ2UgdGVjaG5pcXVlcyBmaXggdGhlIHR3byBtb3N0IGNvbW1vbgorICAgICAgICBp
bnN0YW5jZXMgb2YgaW52YWxpZCBIVE1MIHRoYXQgY2hva2UgSFRNTFBhcnNlcjoKKworICAgICAg
ICAgPGJyLz4gKE5vIHNwYWNlIGJldHdlZW4gbmFtZSBvZiBjbG9zaW5nIHRhZyBhbmQgdGFnIGNs
b3NlKQorICAgICAgICAgPCEgLS1Db21tZW50LS0+IChFeHRyYW5lb3VzIHdoaXRlc3BhY2UgaW4g
ZGVjbGFyYXRpb24pCisKKyAgICAgICAgWW91IGNhbiBwYXNzIGluIGEgY3VzdG9tIGxpc3Qgb2Yg
KFJFIG9iamVjdCwgcmVwbGFjZSBtZXRob2QpCisgICAgICAgIHR1cGxlcyB0byBnZXQgQmVhdXRp
ZnVsIFNvdXAgdG8gc2NydWIgeW91ciBpbnB1dCB0aGUgd2F5IHlvdQorICAgICAgICB3YW50LiIi
IgorCisgICAgICAgIHNlbGYucGFyc2VPbmx5VGhlc2UgPSBwYXJzZU9ubHlUaGVzZQorICAgICAg
ICBzZWxmLmZyb21FbmNvZGluZyA9IGZyb21FbmNvZGluZworICAgICAgICBzZWxmLnNtYXJ0UXVv
dGVzVG8gPSBzbWFydFF1b3Rlc1RvCisgICAgICAgIHNlbGYuY29udmVydEVudGl0aWVzID0gY29u
dmVydEVudGl0aWVzCisgICAgICAgICMgU2V0IHRoZSBydWxlcyBmb3IgaG93IHdlJ2xsIGRlYWwg
d2l0aCB0aGUgZW50aXRpZXMgd2UKKyAgICAgICAgIyBlbmNvdW50ZXIKKyAgICAgICAgaWYgc2Vs
Zi5jb252ZXJ0RW50aXRpZXM6CisgICAgICAgICAgICAjIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0
byBjb252ZXJ0IGVuY29kZWQgY2hhcmFjdGVycyB0bworICAgICAgICAgICAgIyBlbnRpdGllcyBl
dmVuIHdoaWxlIHlvdSdyZSBjb252ZXJ0aW5nIGVudGl0aWVzIHRvIFVuaWNvZGUuCisgICAgICAg
ICAgICAjIEp1c3QgY29udmVydCBpdCBhbGwgdG8gVW5pY29kZS4KKyAgICAgICAgICAgIHNlbGYu
c21hcnRRdW90ZXNUbyA9IE5vbmUKKyAgICAgICAgICAgIGlmIGNvbnZlcnRFbnRpdGllcyA9PSBz
ZWxmLkhUTUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRp
ZXMgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IFRy
dWUKKyAgICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gVHJ1
ZQorICAgICAgICAgICAgZWxpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5YSFRNTF9FTlRJVElF
UzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IFRydWUKKyAgICAg
ICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAg
ICAgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAgICBl
bGlmIGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLlhNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAg
ICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNv
bnZlcnRIVE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5y
ZWNvZ25pemVkRW50aXRpZXMgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5jb252ZXJ0WE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRN
TEVudGl0aWVzID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50
aXRpZXMgPSBGYWxzZQorCisgICAgICAgIHNlbGYuaW5zdGFuY2VTZWxmQ2xvc2luZ1RhZ3MgPSBi
dWlsZFRhZ01hcChOb25lLCBzZWxmQ2xvc2luZ1RhZ3MpCisgICAgICAgIHNlbGYuYnVpbGRlciA9
IGJ1aWxkZXIoc2VsZikKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICAgICAgaWYgaGFzYXR0
cihtYXJrdXAsICdyZWFkJyk6ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0LgorICAg
ICAgICAgICAgbWFya3VwID0gbWFya3VwLnJlYWQoKQorICAgICAgICBzZWxmLm1hcmt1cCA9IG1h
cmt1cAorICAgICAgICBzZWxmLm1hcmt1cE1hc3NhZ2UgPSBtYXJrdXBNYXNzYWdlCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ZlZWQoaXNIVE1MPWlzSFRNTCkKKyAgICAgICAgZXhj
ZXB0IFN0b3BQYXJzaW5nOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLm1hcmt1cCA9
IE5vbmUgICAgICAgICAgICAgICAgICMgVGhlIG1hcmt1cCBjYW4gbm93IGJlIEdDZWQuCisgICAg
ICAgIHNlbGYuYnVpbGRlciA9IE5vbmUgICAgICAgICAgICAgICAgIyBTbyBjYW4gdGhlIGJ1aWxk
ZXIuCisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgaW5Eb2N1bWVudEVuY29kaW5nPU5vbmUsIGlzSFRN
TD1GYWxzZSk6CisgICAgICAgICMgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZS4KKyAg
ICAgICAgbWFya3VwID0gc2VsZi5tYXJrdXAKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAs
IHVuaWNvZGUpOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ29yaWdpbmFsRW5j
b2RpbmcnKToKKyAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0XAorICAgICAg
ICAgICAgICAgICAgICAgKG1hcmt1cCwgW3NlbGYuZnJvbUVuY29kaW5nLCBpbkRvY3VtZW50RW5j
b2RpbmddLAorICAgICAgICAgICAgICAgICAgICAgIHNtYXJ0UXVvdGVzVG89c2VsZi5zbWFydFF1
b3Rlc1RvLCBpc0hUTUw9aXNIVE1MKQorICAgICAgICAgICAgbWFya3VwID0gZGFtbWl0LnVuaWNv
ZGUKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IGRhbW1pdC5vcmlnaW5hbEVu
Y29kaW5nCisgICAgICAgICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gZGFtbWl0LmRl
Y2xhcmVkSFRNTEVuY29kaW5nCisgICAgICAgIGlmIG1hcmt1cDoKKyAgICAgICAgICAgIGlmIHNl
bGYubWFya3VwTWFzc2FnZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNMaXN0KHNlbGYubWFy
a3VwTWFzc2FnZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IHNl
bGYuTUFSS1VQX01BU1NBR0UKKyAgICAgICAgICAgICAgICBmb3IgZml4LCBtIGluIHNlbGYubWFy
a3VwTWFzc2FnZToKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwID0gZml4LnN1YihtLCBtYXJr
dXApCisgICAgICAgICAgICAgICAgIyBUT0RPOiBXZSBnZXQgcmlkIG9mIG1hcmt1cE1hc3NhZ2Ug
c28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAjIHNvdXAgb2JqZWN0IGNhbiBiZSBkZWVwY29w
aWVkIGxhdGVyIG9uLiBTb21lCisgICAgICAgICAgICAgICAgIyBQeXRob24gaW5zdGFsbGF0aW9u
cyBjYW4ndCBjb3B5IHJlZ2V4ZXMuIElmIGFueW9uZQorICAgICAgICAgICAgICAgICMgd2FzIHJl
bHlpbmcgb24gdGhlIGV4aXN0ZW5jZSBvZiBtYXJrdXBNYXNzYWdlLCB0aGlzCisgICAgICAgICAg
ICAgICAgIyBtaWdodCBjYXVzZSBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICBkZWwoc2VsZi5t
YXJrdXBNYXNzYWdlKQorICAgICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorCisgICAgICAgIHNl
bGYuYnVpbGRlci5mZWVkKG1hcmt1cCkKKyAgICAgICAgIyBDbG9zZSBvdXQgYW55IHVuZmluaXNo
ZWQgc3RyaW5ncyBhbmQgY2xvc2UgYWxsIHRoZSBvcGVuIHRhZ3MuCisgICAgICAgIHNlbGYuZW5k
RGF0YSgpCisgICAgICAgIHdoaWxlIHNlbGYuY3VycmVudFRhZy5uYW1lICE9IHNlbGYuUk9PVF9U
QUdfTkFNRToKKyAgICAgICAgICAgIHNlbGYucG9wVGFnKCkKKworICAgIGRlZiBpc1NlbGZDbG9z
aW5nVGFnKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZl
biBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgYQorICAgICAgICBzZWxmLWNsb3NpbmcgdGFnIGFjY29y
ZGluZyB0byB0aGlzIHBhcnNlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuU0VMRl9DTE9TSU5H
X1RBR1MuaGFzX2tleShuYW1lKSBcCisgICAgICAgICAgICAgICBvciBzZWxmLmluc3RhbmNlU2Vs
ZkNsb3NpbmdUYWdzLmhhc19rZXkobmFtZSkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAg
ICAgVGFnLl9faW5pdF9fKHNlbGYsIHNlbGYsIHNlbGYuUk9PVF9UQUdfTkFNRSkKKyAgICAgICAg
c2VsZi5oaWRkZW4gPSAxCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisgICAgICAgIHNl
bGYuY3VycmVudERhdGEgPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBOb25lCisgICAg
ICAgIHNlbGYudGFnU3RhY2sgPSBbXQorICAgICAgICBzZWxmLnF1b3RlU3RhY2sgPSBbXQorICAg
ICAgICBzZWxmLnB1c2hUYWcoc2VsZikKKworICAgIGRlZiBwb3BUYWcoc2VsZik6CisgICAgICAg
IHRhZyA9IHNlbGYudGFnU3RhY2sucG9wKCkKKyAgICAgICAgIyBUYWdzIHdpdGgganVzdCBvbmUg
c3RyaW5nLW93bmluZyBjaGlsZCBnZXQgdGhlIGNoaWxkIGFzIGEKKyAgICAgICAgIyAnc3RyaW5n
JyBwcm9wZXJ0eSwgc28gdGhhdCBzb3VwLnRhZy5zdHJpbmcgaXMgc2hvcnRoYW5kIGZvcgorICAg
ICAgICAjIHNvdXAudGFnLmNvbnRlbnRzWzBdCisgICAgICAgIGlmIGxlbihzZWxmLmN1cnJlbnRU
YWcuY29udGVudHMpID09IDEgYW5kIFwKKyAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLmN1cnJl
bnRUYWcuY29udGVudHNbMF0sIE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICBzZWxmLmN1
cnJlbnRUYWcuc3RyaW5nID0gc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzWzBdCisKKyAgICAgICAg
I3ByaW50ICJQb3AiLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgorICAgICAg
ICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgcmV0dXJu
IHNlbGYuY3VycmVudFRhZworCisgICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKKyAgICAgICAg
I3ByaW50ICJQdXNoIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgorICAg
ICAgICAgICAgc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCisgICAgICAgIHNl
bGYudGFnU3RhY2suYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50
YWdTdGFja1stMV0KKworICAgIGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmln
YWJsZVN0cmluZyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudERhdGE6CisgICAgICAgICAgICBj
dXJyZW50RGF0YSA9IHUnJy5qb2luKHNlbGYuY3VycmVudERhdGEpCisgICAgICAgICAgICBpZiAo
Y3VycmVudERhdGEudHJhbnNsYXRlKHNlbGYuU1RSSVBfQVNDSUlfU1BBQ0VTKSA9PSAnJyBhbmQK
KyAgICAgICAgICAgICAgICBub3Qgc2V0KFt0YWcubmFtZSBmb3IgdGFnIGluIHNlbGYudGFnU3Rh
Y2tdKS5pbnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuUFJFU0VSVkVfV0hJ
VEVTUEFDRV9UQUdTKSk6CisgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50RGF0YToK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSAnXG4nCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSAnICcKKyAgICAgICAgICAg
IHNlbGYuY3VycmVudERhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVz
ZSBhbmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAo
bm90IHNlbGYucGFyc2VPbmx5VGhlc2UudGV4dCBvciBcCisgICAgICAgICAgICAgICAgICAgIG5v
dCBzZWxmLnBhcnNlT25seVRoZXNlLnNlYXJjaChjdXJyZW50RGF0YSkpOgorICAgICAgICAgICAg
ICAgIHJldHVybgorICAgICAgICAgICAgbyA9IGNvbnRhaW5lckNsYXNzKGN1cnJlbnREYXRhKQor
ICAgICAgICAgICAgby5zZXR1cChzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMpCisgICAg
ICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXMu
bmV4dCA9IG8KKyAgICAgICAgICAgIHNlbGYucHJldmlvdXMgPSBvCisgICAgICAgICAgICBzZWxm
LmN1cnJlbnRUYWcuY29udGVudHMuYXBwZW5kKG8pCisKKworICAgIGRlZiBfcG9wVG9UYWcoc2Vs
ZiwgbmFtZSwgaW5jbHVzaXZlUG9wPVRydWUpOgorICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3Rh
Y2sgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgaW5zdGFuY2Ug
b2YgdGhlIGdpdmVuIHRhZy4gSWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcK
KyAgICAgICAgc3RhY2sgdXAgdG8gYnV0ICpub3QqIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQg
aW5zdHFhbmNlIG9mCisgICAgICAgIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgICNwcmludCAi
UG9wcGluZyB0byAlcyIgJSBuYW1lCisgICAgICAgIGlmIG5hbWUgPT0gc2VsZi5ST09UX1RBR19O
QU1FOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbnVtUG9wcyA9IDAKKyAgICAgICAg
bW9zdFJlY2VudFRhZyA9IE5vbmUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFn
U3RhY2spLTEsIDAsIC0xKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gc2VsZi50YWdTdGFja1tp
XS5uYW1lOgorICAgICAgICAgICAgICAgIG51bVBvcHMgPSBsZW4oc2VsZi50YWdTdGFjayktaQor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBpbmNsdXNpdmVQb3A6CisgICAg
ICAgICAgICBudW1Qb3BzID0gbnVtUG9wcyAtIDEKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgw
LCBudW1Qb3BzKToKKyAgICAgICAgICAgIG1vc3RSZWNlbnRUYWcgPSBzZWxmLnBvcFRhZygpCisg
ICAgICAgIHJldHVybiBtb3N0UmVjZW50VGFnCisKKyAgICBkZWYgX3NtYXJ0UG9wKHNlbGYsIG5h
bWUpOgorCisgICAgICAgICIiIldlIG5lZWQgdG8gcG9wIHVwIHRvIHRoZSBwcmV2aW91cyB0YWcg
b2YgdGhpcyB0eXBlLCB1bmxlc3MKKyAgICAgICAgb25lIG9mIHRoaXMgdGFnJ3MgbmVzdGluZyBy
ZXNldCB0cmlnZ2VycyBjb21lcyBiZXR3ZWVuIHRoaXMKKyAgICAgICAgdGFnIGFuZCB0aGUgcHJl
dmlvdXMgdGFnIG9mIHRoaXMgdHlwZSwgT1IgdW5sZXNzIHRoaXMgdGFnIGlzIGEKKyAgICAgICAg
Z2VuZXJpYyBuZXN0aW5nIHRyaWdnZXIgYW5kIGFub3RoZXIgZ2VuZXJpYyBuZXN0aW5nIHRyaWdn
ZXIKKyAgICAgICAgY29tZXMgYmV0d2VlbiB0aGlzIHRhZyBhbmQgdGhlIHByZXZpb3VzIHRhZyBv
ZiB0aGlzIHR5cGUuCisKKyAgICAgICAgRXhhbXBsZXM6CisgICAgICAgICA8cD5Gb288Yj5CYXIg
KjxwPiogc2hvdWxkIHBvcCB0byAncCcsIG5vdCAnYicuCisgICAgICAgICA8cD5Gb288dGFibGU+
QmFyICo8cD4qIHNob3VsZCBwb3AgdG8gJ3RhYmxlJywgbm90ICdwJy4KKyAgICAgICAgIDxwPkZv
bzx0YWJsZT48dHI+QmFyICo8cD4qIHNob3VsZCBwb3AgdG8gJ3RyJywgbm90ICdwJy4KKworICAg
ICAgICAgPGxpPjx1bD48bGk+ICo8bGk+KiBzaG91bGQgcG9wIHRvICd1bCcsIG5vdCB0aGUgZmly
c3QgJ2xpJy4KKyAgICAgICAgIDx0cj48dGFibGU+PHRyPiAqPHRyPiogc2hvdWxkIHBvcCB0byAn
dGFibGUnLCBub3QgdGhlIGZpcnN0ICd0cicKKyAgICAgICAgIDx0ZD48dHI+PHRkPiAqPHRkPiog
c2hvdWxkIHBvcCB0byAndHInLCBub3QgdGhlIGZpcnN0ICd0ZCcKKyAgICAgICAgIiIiCisKKyAg
ICAgICAgbmVzdGluZ1Jlc2V0VHJpZ2dlcnMgPSBzZWxmLk5FU1RBQkxFX1RBR1MuZ2V0KG5hbWUp
CisgICAgICAgIGlzTmVzdGFibGUgPSBuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCisgICAg
ICAgIGlzUmVzZXROZXN0aW5nID0gc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShuYW1l
KQorICAgICAgICBwb3BUbyA9IE5vbmUKKyAgICAgICAgaW5jbHVzaXZlID0gVHJ1ZQorICAgICAg
ICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi50YWdTdGFjayktMSwgMCwgLTEpOgorICAgICAgICAg
ICAgcCA9IHNlbGYudGFnU3RhY2tbaV0KKyAgICAgICAgICAgIGlmIChub3QgcCBvciBwLm5hbWUg
PT0gbmFtZSkgYW5kIG5vdCBpc05lc3RhYmxlOgorICAgICAgICAgICAgICAgICNOb24tbmVzdGFi
bGUgdGFncyBnZXQgcG9wcGVkIHRvIHRoZSB0b3Agb3IgdG8gdGhlaXIKKyAgICAgICAgICAgICAg
ICAjbGFzdCBvY2N1cmFuY2UuCisgICAgICAgICAgICAgICAgcG9wVG8gPSBuYW1lCisgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIChuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBO
b25lCisgICAgICAgICAgICAgICAgYW5kIHAubmFtZSBpbiBuZXN0aW5nUmVzZXRUcmlnZ2Vycykg
XAorICAgICAgICAgICAgICAgIG9yIChuZXN0aW5nUmVzZXRUcmlnZ2VycyA9PSBOb25lIGFuZCBp
c1Jlc2V0TmVzdGluZworICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5SRVNFVF9ORVNUSU5H
X1RBR1MuaGFzX2tleShwLm5hbWUpKToKKworICAgICAgICAgICAgICAgICNJZiB3ZSBlbmNvdW50
ZXIgb25lIG9mIHRoZSBuZXN0aW5nIHJlc2V0IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgI3Bl
Y3VsaWFyIHRvIHRoaXMgdGFnLCBvciB3ZSBlbmNvdW50ZXIgYW5vdGhlciB0YWcKKyAgICAgICAg
ICAgICAgICAjdGhhdCBjYXVzZXMgbmVzdGluZyB0byByZXNldCwgcG9wIHVwIHRvIGJ1dCBub3QK
KyAgICAgICAgICAgICAgICAjaW5jbHVkaW5nIHRoYXQgdGFnLgorICAgICAgICAgICAgICAgIHBv
cFRvID0gcC5uYW1lCisgICAgICAgICAgICAgICAgaW5jbHVzaXZlID0gRmFsc2UKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgcCA9IHAucGFyZW50CisgICAgICAgIGlmIHBvcFRv
OgorICAgICAgICAgICAgc2VsZi5fcG9wVG9UYWcocG9wVG8sIGluY2x1c2l2ZSkKKworICAgIGRl
ZiB1bmtub3duX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzLCBzZWxmQ2xvc2luZz0wKToKKyAg
ICAgICAgI3ByaW50ICJTdGFydCB0YWcgJXM6ICVzIiAlIChuYW1lLCBhdHRycykKKyAgICAgICAg
aWYgc2VsZi5xdW90ZVN0YWNrOgorICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCB0YWcu
CisgICAgICAgICAgICAjcHJpbnQgIjwlcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKKyAgICAgICAg
ICAgIGF0dHJzID0gJycuam9pbihtYXAobGFtYmRhKHgsIHkpOiAnICVzPSIlcyInICUgKHgsIHkp
LCBhdHRycykpCisgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKCc8JXMlcz4nICUgKG5hbWUs
IGF0dHJzKSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmVuZERhdGEoKQorCisg
ICAgICAgIGlmIG5vdCBzZWxmLmlzU2VsZkNsb3NpbmdUYWcobmFtZSkgYW5kIG5vdCBzZWxmQ2xv
c2luZzoKKyAgICAgICAgICAgIHNlbGYuX3NtYXJ0UG9wKG5hbWUpCisKKyAgICAgICAgaWYgc2Vs
Zi5wYXJzZU9ubHlUaGVzZSBhbmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEgXAorICAgICAgICAg
ICAgICAgYW5kIChzZWxmLnBhcnNlT25seVRoZXNlLnRleHQgb3Igbm90IHNlbGYucGFyc2VPbmx5
VGhlc2Uuc2VhcmNoVGFnKG5hbWUsIGF0dHJzKSk6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICB0YWcgPSBUYWcoc2VsZiwgbmFtZSwgYXR0cnMsIHNlbGYuY3VycmVudFRhZywgc2VsZi5w
cmV2aW91cykKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgIHNlbGYucHJl
dmlvdXMubmV4dCA9IHRhZworICAgICAgICBzZWxmLnByZXZpb3VzID0gdGFnCisgICAgICAgIHNl
bGYucHVzaFRhZyh0YWcpCisgICAgICAgIGlmIHNlbGZDbG9zaW5nIG9yIHNlbGYuaXNTZWxmQ2xv
c2luZ1RhZyhuYW1lKToKKyAgICAgICAgICAgIHNlbGYucG9wVGFnKCkKKyAgICAgICAgaWYgbmFt
ZSBpbiBzZWxmLlFVT1RFX1RBR1M6CisgICAgICAgICAgICAjcHJpbnQgIkJlZ2lubmluZyBxdW90
ZSAoJXMpIiAlIG5hbWUKKyAgICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5hcHBlbmQobmFtZSkK
KyAgICAgICAgICAgIHNlbGYubGl0ZXJhbCA9IDEKKyAgICAgICAgcmV0dXJuIHRhZworCisgICAg
ZGVmIHVua25vd25fZW5kdGFnKHNlbGYsIG5hbWUpOgorICAgICAgICAjcHJpbnQgIkVuZCB0YWcg
JXMiICUgbmFtZQorICAgICAgICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFj
a1stMV0gIT0gbmFtZToKKyAgICAgICAgICAgICNUaGlzIGlzIG5vdCBhIHJlYWwgZW5kIHRhZy4K
KyAgICAgICAgICAgICNwcmludCAiPC8lcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKKyAgICAgICAg
ICAgIHNlbGYuaGFuZGxlX2RhdGEoJzwvJXM+JyAlIG5hbWUpCisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5fcG9wVG9UYWcobmFtZSkKKyAg
ICAgICAgaWYgc2VsZi5xdW90ZVN0YWNrIGFuZCBzZWxmLnF1b3RlU3RhY2tbLTFdID09IG5hbWU6
CisgICAgICAgICAgICBzZWxmLnF1b3RlU3RhY2sucG9wKCkKKyAgICAgICAgICAgIHNlbGYubGl0
ZXJhbCA9IChsZW4oc2VsZi5xdW90ZVN0YWNrKSA+IDApCisKKyAgICBkZWYgaGFuZGxlX2RhdGEo
c2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuY3VycmVudERhdGEuYXBwZW5kKGRhdGEpCisKKyAg
ICBkZWYgZXh0cmFjdENoYXJzZXRGcm9tTWV0YShzZWxmLCBhdHRycyk6CisgICAgICAgIHNlbGYu
dW5rbm93bl9zdGFydHRhZygnbWV0YScsIGF0dHJzKQorCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAo
QmVhdXRpZnVsU3RvbmVTb3VwKToKKworICAgICIiIlRoaXMgcGFyc2VyIGtub3dzIHRoZSBmb2xs
b3dpbmcgZmFjdHMgYWJvdXQgSFRNTDoKKworICAgICogU29tZSB0YWdzIGhhdmUgbm8gY2xvc2lu
ZyB0YWcgYW5kIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBiZWluZworICAgICAgY2xvc2VkIGFz
IHNvb24gYXMgdGhleSBhcmUgZW5jb3VudGVyZWQuCisKKyAgICAqIFRoZSB0ZXh0IGluc2lkZSBz
b21lIHRhZ3MgKGllLiAnc2NyaXB0JykgbWF5IGNvbnRhaW4gdGFncyB3aGljaAorICAgICAgYXJl
IG5vdCByZWFsbHkgcGFydCBvZiB0aGUgZG9jdW1lbnQgYW5kIHdoaWNoIHNob3VsZCBiZSBwYXJz
ZWQKKyAgICAgIGFzIHRleHQsIG5vdCB0YWdzLiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgdGV4
dCBhcyB0YWdzLCB5b3UgY2FuCisgICAgICBhbHdheXMgZmV0Y2ggaXQgYW5kIHBhcnNlIGl0IGV4
cGxpY2l0bHkuCisKKyAgICAqIFRhZyBuZXN0aW5nIHJ1bGVzOgorCisgICAgICBNb3N0IHRhZ3Mg
Y2FuJ3QgYmUgbmVzdGVkIGF0IGFsbC4gRm9yIGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlIG9mCisg
ICAgICBhIDxwPiB0YWcgc2hvdWxkIGltcGxpY2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDxwPiB0
YWcuCisKKyAgICAgICA8cD5QYXJhMTxwPlBhcmEyCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zv
cm1lZCBpbnRvOgorICAgICAgIDxwPlBhcmExPC9wPjxwPlBhcmEyCisKKyAgICAgIFNvbWUgdGFn
cyBjYW4gYmUgbmVzdGVkIGFyYml0cmFyaWx5LiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2UK
KyAgICAgIG9mIGEgPGJsb2NrcXVvdGU+IHRhZyBzaG91bGQgX25vdF8gaW1wbGljaXRseSBjbG9z
ZSB0aGUgcHJldmlvdXMKKyAgICAgIDxibG9ja3F1b3RlPiB0YWcuCisKKyAgICAgICBBbGljZSBz
YWlkOiA8YmxvY2txdW90ZT5Cb2Igc2FpZDogPGJsb2NrcXVvdGU+QmxhaAorICAgICAgICBzaG91
bGQgTk9UIGJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVv
dGU+Qm9iIHNhaWQ6IDwvYmxvY2txdW90ZT48YmxvY2txdW90ZT5CbGFoCisKKyAgICAgIFNvbWUg
dGFncyBjYW4gYmUgbmVzdGVkLCBidXQgdGhlIG5lc3RpbmcgaXMgcmVzZXQgYnkgdGhlCisgICAg
ICBpbnRlcnBvc2l0aW9uIG9mIG90aGVyIHRhZ3MuIEZvciBpbnN0YW5jZSwgYSA8dHI+IHRhZyBz
aG91bGQKKyAgICAgIGltcGxpY2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDx0cj4gdGFnIHdpdGhp
biB0aGUgc2FtZSA8dGFibGU+LAorICAgICAgYnV0IG5vdCBjbG9zZSBhIDx0cj4gdGFnIGluIGFu
b3RoZXIgdGFibGUuCisKKyAgICAgICA8dGFibGU+PHRyPkJsYWg8dHI+QmxhaAorICAgICAgICBz
aG91bGQgYmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICA8dGFibGU+PHRyPkJsYWg8L3RyPjx0
cj5CbGFoCisgICAgICAgIGJ1dCwKKyAgICAgICA8dHI+QmxhaDx0YWJsZT48dHI+QmxhaAorICAg
ICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9ybWVkIGludG8KKyAgICAgICA8dHI+QmxhaDx0YWJs
ZT48L3RyPjx0cj5CbGFoCisKKyAgICBEaWZmZXJpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdGFnIG5l
c3RpbmcgcnVsZXMgYXJlIGEgbWFqb3Igc291cmNlCisgICAgb2YgcHJvYmxlbXMgd2l0aCB0aGUg
QmVhdXRpZnVsU291cCBjbGFzcy4gSWYgQmVhdXRpZnVsU291cCBpcyBub3QKKyAgICB0cmVhdGlu
ZyBhcyBuZXN0YWJsZSBhIHRhZyB5b3VyIHBhZ2UgYXV0aG9yIHRyZWF0cyBhcyBuZXN0YWJsZSwK
KyAgICB0cnkgSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cCwgTWluaW1hbFNvdXAsIG9yCisg
ICAgQmVhdXRpZnVsU3RvbmVTb3VwIGJlZm9yZSB3cml0aW5nIHlvdXIgb3duIHN1YmNsYXNzLiIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlm
IG5vdCBrd2FyZ3MuaGFzX2tleSgnc21hcnRRdW90ZXNUbycpOgorICAgICAgICAgICAga3dhcmdz
WydzbWFydFF1b3Rlc1RvJ10gPSBzZWxmLkhUTUxfRU5USVRJRVMKKyAgICAgICAga3dhcmdzWydp
c0hUTUwnXSA9IFRydWUKKyAgICAgICAgQmVhdXRpZnVsU3RvbmVTb3VwLl9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmt3YXJncykKKworICAgIFNFTEZfQ0xPU0lOR19UQUdTID0gYnVpbGRUYWdNYXAo
Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYnInICwgJ2hyJywg
J2lucHV0JywgJ2ltZycsICdtZXRhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzcGFjZXInLCAnbGluaycsICdmcmFtZScsICdiYXNlJ10pCisKKyAgICBQUkVTRVJWRV9X
SElURVNQQUNFX1RBR1MgPSBzZXQoWydwcmUnLCAndGV4dGFyZWEnXSkKKworICAgIFFVT1RFX1RB
R1MgPSB7J3NjcmlwdCcgOiBOb25lLCAndGV4dGFyZWEnIDogTm9uZX0KKworICAgICNBY2NvcmRp
bmcgdG8gdGhlIEhUTUwgc3RhbmRhcmQsIGVhY2ggb2YgdGhlc2UgaW5saW5lIHRhZ3MgY2FuCisg
ICAgI2NvbnRhaW4gYW5vdGhlciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0
J3MgY29tbW9uCisgICAgI3RvIGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgorICAg
IE5FU1RBQkxFX0lOTElORV9UQUdTID0gWydzcGFuJywgJ2ZvbnQnLCAncScsICdvYmplY3QnLCAn
YmRvJywgJ3N1YicsICdzdXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIn
XQorCisgICAgI0FjY29yZGluZyB0byB0aGUgSFRNTCBzdGFuZGFyZCwgdGhlc2UgYmxvY2sgdGFn
cyBjYW4gY29udGFpbgorICAgICNhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlLiBGdXJ0aGVy
bW9yZSwgaXQncyBjb21tb24KKyAgICAjdG8gYWN0dWFsbHkgdXNlIHRoZXNlIHRhZ3MgdGhpcyB3
YXkuCisgICAgTkVTVEFCTEVfQkxPQ0tfVEFHUyA9IFsnYmxvY2txdW90ZScsICdkaXYnLCAnZmll
bGRzZXQnLCAnaW5zJywgJ2RlbCddCisKKyAgICAjTGlzdHMgY2FuIGNvbnRhaW4gb3RoZXIgbGlz
dHMsIGJ1dCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zLgorICAgIE5FU1RBQkxFX0xJU1RfVEFHUyA9
IHsgJ29sJyA6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VsJyA6IFtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2xpJyA6IFsndWwnLCAnb2wnXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdkbCcgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdk
ZCcgOiBbJ2RsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHQnIDogWydkbCddIH0K
KworICAgICNUYWJsZXMgY2FuIGNvbnRhaW4gb3RoZXIgdGFibGVzLCBidXQgdGhlcmUgYXJlIHJl
c3RyaWN0aW9ucy4KKyAgICBORVNUQUJMRV9UQUJMRV9UQUdTID0geyd0YWJsZScgOiBbXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0cicgOiBbJ3RhYmxlJywgJ3Rib2R5JywgJ3Rmb290
JywgJ3RoZWFkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGQnIDogWyd0ciddLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoJyA6IFsndHInXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd0aGVhZCcgOiBbJ3RhYmxlJ10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGJvZHknIDogWyd0YWJsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rm
b290JyA6IFsndGFibGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgIE5P
Tl9ORVNUQUJMRV9CTE9DS19UQUdTID0gWydhZGRyZXNzJywgJ2Zvcm0nLCAncCcsICdwcmUnXQor
CisgICAgI0lmIG9uZSBvZiB0aGVzZSB0YWdzIGlzIGVuY291bnRlcmVkLCBhbGwgdGFncyB1cCB0
byB0aGUgbmV4dCB0YWcgb2YKKyAgICAjdGhpcyB0eXBlIGFyZSBwb3BwZWQuCisgICAgUkVTRVRf
TkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAoTm9uZSwgTkVTVEFCTEVfQkxPQ0tfVEFHUywgJ25v
c2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT05fTkVTVEFC
TEVfQkxPQ0tfVEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVNU
QUJMRV9MSVNUX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVT
VEFCTEVfVEFCTEVfVEFHUykKKworICAgIE5FU1RBQkxFX1RBR1MgPSBidWlsZFRhZ01hcChbXSwg
TkVTVEFCTEVfSU5MSU5FX1RBR1MsIE5FU1RBQkxFX0JMT0NLX1RBR1MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5FU1RBQkxFX0xJU1RfVEFHUywgTkVTVEFCTEVfVEFCTEVfVEFH
UykKKworICAgICMgVXNlZCB0byBkZXRlY3QgdGhlIGNoYXJzZXQgaW4gYSBNRVRBIHRhZzsgc2Vl
IHN0YXJ0X21ldGEKKyAgICBDSEFSU0VUX1JFID0gcmUuY29tcGlsZSgiKChefDspXHMqY2hhcnNl
dD0pKFteO10qKSIsIHJlLk0pCisKKyAgICBkZWYgZXh0cmFjdENoYXJzZXRGcm9tTWV0YShzZWxm
LCBhdHRycyk6CisgICAgICAgICIiIkJlYXV0aWZ1bCBTb3VwIGNhbiBkZXRlY3QgYSBjaGFyc2V0
IGluY2x1ZGVkIGluIGEgTUVUQSB0YWcsCisgICAgICAgIHRyeSB0byBjb252ZXJ0IHRoZSBkb2N1
bWVudCB0byB0aGF0IGNoYXJzZXQsIGFuZCByZS1wYXJzZSB0aGUKKyAgICAgICAgZG9jdW1lbnQg
ZnJvbSB0aGUgYmVnaW5uaW5nLiIiIgorICAgICAgICBodHRwRXF1aXYgPSBOb25lCisgICAgICAg
IGNvbnRlbnRUeXBlID0gTm9uZQorICAgICAgICBjb250ZW50VHlwZUluZGV4ID0gTm9uZQorICAg
ICAgICB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uID0gRmFsc2UKKworICAgICAgICBmb3Ig
aSBpbiByYW5nZSgwLCBsZW4oYXR0cnMpKToKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBhdHRy
c1tpXQorICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGtleSA9
PSAnaHR0cC1lcXVpdic6CisgICAgICAgICAgICAgICAgaHR0cEVxdWl2ID0gdmFsdWUKKyAgICAg
ICAgICAgIGVsaWYga2V5ID09ICdjb250ZW50JzoKKyAgICAgICAgICAgICAgICBjb250ZW50VHlw
ZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgY29udGVudFR5cGVJbmRleCA9IGkKKworICAgICAg
ICBpZiBodHRwRXF1aXYgYW5kIGNvbnRlbnRUeXBlOiAjIEl0J3MgYW4gaW50ZXJlc3RpbmcgbWV0
YSB0YWcuCisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuQ0hBUlNFVF9SRS5zZWFyY2goY29udGVu
dFR5cGUpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5k
ZWNsYXJlZEhUTUxFbmNvZGluZyBpcyBub3QgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLm9yaWdpbmFsRW5jb2RpbmcgPT0gc2VsZi5mcm9tRW5jb2RpbmcpOgorICAgICAgICAgICAg
ICAgICAgICAjIEFuIEhUTUwgZW5jb2Rpbmcgd2FzIHNuaWZmZWQgd2hpbGUgY29udmVydGluZwor
ICAgICAgICAgICAgICAgICAgICAjIHRoZSBkb2N1bWVudCB0byBVbmljb2RlLCBvciBhbiBIVE1M
IGVuY29kaW5nIHdhcworICAgICAgICAgICAgICAgICAgICAjIHNuaWZmZWQgZHVyaW5nIGEgcHJl
dmlvdXMgcGFzcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGRvY3VtZW50LCBv
ciBhbiBlbmNvZGluZyB3YXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICMgZXhwbGlj
aXRseSBhbmQgaXQgd29ya2VkLiBSZXdyaXRlIHRoZSBtZXRhIHRhZy4KKyAgICAgICAgICAgICAg
ICAgICAgZGVmIHJld3JpdGUobWF0Y2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoLmdyb3VwKDEpICsgIiVTT1VQLUVOQ09ESU5HJSIKKyAgICAgICAgICAgICAgICAgICAg
bmV3QXR0ciA9IHNlbGYuQ0hBUlNFVF9SRS5zdWIocmV3cml0ZSwgY29udGVudFR5cGUpCisgICAg
ICAgICAgICAgICAgICAgIGF0dHJzW2NvbnRlbnRUeXBlSW5kZXhdID0gKGF0dHJzW2NvbnRlbnRU
eXBlSW5kZXhdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdBdHRyKQorICAgICAgICAgICAgICAgICAgICB0YWdOZWVkc0VuY29kaW5nU3Vic3Rp
dHV0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
ICMgVGhpcyBpcyBvdXIgZmlyc3QgcGFzcyB0aHJvdWdoIHRoZSBkb2N1bWVudC4KKyAgICAgICAg
ICAgICAgICAgICAgIyBHbyB0aHJvdWdoIGl0IGFnYWluIHdpdGggdGhlIGVuY29kaW5nIGluZm9y
bWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBuZXdDaGFyc2V0ID0gbWF0Y2guZ3JvdXAoMykK
KyAgICAgICAgICAgICAgICAgICAgaWYgbmV3Q2hhcnNldCBhbmQgbmV3Q2hhcnNldCAhPSBzZWxm
Lm9yaWdpbmFsRW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY2xhcmVk
SFRNTEVuY29kaW5nID0gbmV3Q2hhcnNldAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
ZmVlZChzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgU3RvcFBhcnNpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0YWcg
PSBzZWxmLnVua25vd25fc3RhcnR0YWcoIm1ldGEiLCBhdHRycykKKyAgICAgICAgaWYgdGFnIGFu
ZCB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uOgorICAgICAgICAgICAgdGFnLmNvbnRhaW5z
U3Vic3RpdHV0aW9ucyA9IFRydWUKKworCitjbGFzcyBTdG9wUGFyc2luZyhFeGNlcHRpb24pOgor
ICAgIHBhc3MKKworY2xhc3MgSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cChCZWF1dGlmdWxT
b3VwKToKKworICAgICIiIlRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGlzIG9yaWVudGVkIHRvd2Fy
ZHMgc2tpcHBpbmcgb3ZlcgorICAgIGNvbW1vbiBIVE1MIGVycm9ycyBsaWtlIHVuY2xvc2VkIHRh
Z3MuIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBtYWtlcworICAgIGVycm9ycyBvZiBpdHMgb3duLiBG
b3IgaW5zdGFuY2UsIGNvbnNpZGVyIHRoaXMgZnJhZ21lbnQ6CisKKyAgICAgPGI+Rm9vPGI+QmFy
PC9iPjwvYj4KKworICAgIFRoaXMgaXMgcGVyZmVjdGx5IHZhbGlkIChpZiBiaXphcnJlKSBIVE1M
LiBIb3dldmVyLCB0aGUKKyAgICBCZWF1dGlmdWxTb3VwIGNsYXNzIHdpbGwgaW1wbGljaXRseSBj
bG9zZSB0aGUgZmlyc3QgYiB0YWcgd2hlbiBpdAorICAgIGVuY291bnRlcnMgdGhlIHNlY29uZCAn
YicuIEl0IHdpbGwgdGhpbmsgdGhlIGF1dGhvciB3cm90ZQorICAgICI8Yj5Gb288Yj5CYXIiLCBh
bmQgZGlkbid0IGNsb3NlIHRoZSBmaXJzdCAnYicgdGFnLCBiZWNhdXNlCisgICAgdGhlcmUncyBu
byByZWFsLXdvcmxkIHJlYXNvbiB0byBib2xkIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeQorICAg
IGJvbGQuIFdoZW4gaXQgZW5jb3VudGVycyAnPC9iPjwvYj4nIGl0IHdpbGwgY2xvc2UgdHdvIG1v
cmUgJ2InCisgICAgdGFncywgZm9yIGEgZ3JhbmQgdG90YWwgb2YgdGhyZWUgdGFncyBjbG9zZWQg
aW5zdGVhZCBvZiB0d28uIFRoaXMKKyAgICBjYW4gdGhyb3cgb2ZmIHRoZSByZXN0IG9mIHlvdXIg
ZG9jdW1lbnQgc3RydWN0dXJlLiBUaGUgc2FtZSBpcworICAgIHRydWUgb2YgYSBudW1iZXIgb2Yg
b3RoZXIgdGFncywgbGlzdGVkIGJlbG93LgorCisgICAgSXQncyBtdWNoIG1vcmUgY29tbW9uIGZv
ciBzb21lb25lIHRvIGZvcmdldCB0byBjbG9zZSBhICdiJyB0YWcKKyAgICB0aGFuIHRvIGFjdHVh
bGx5IHVzZSBuZXN0ZWQgJ2InIHRhZ3MsIGFuZCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcworICAg
IGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlLiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIG5vdC1jby1j
b21tb24KKyAgICBjYXNlOiB3aGVyZSB5b3UgY2FuJ3QgYmVsaWV2ZSBzb21lb25lIHdyb3RlIHdo
YXQgdGhleSBkaWQsIGJ1dAorICAgIGl0J3MgdmFsaWQgSFRNTCBhbmQgQmVhdXRpZnVsU291cCBz
Y3Jld2VkIHVwIGJ5IGFzc3VtaW5nIGl0CisgICAgd291bGRuJ3QgYmUuIiIiCisKKyAgICBJX0NB
TlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfSU5MSU5FX1RBR1MgPSBcCisgICAgIFsnZW0nLCAn
YmlnJywgJ2knLCAnc21hbGwnLCAndHQnLCAnYWJicicsICdhY3JvbnltJywgJ3N0cm9uZycsCisg
ICAgICAnY2l0ZScsICdjb2RlJywgJ2RmbicsICdrYmQnLCAnc2FtcCcsICdzdHJvbmcnLCAndmFy
JywgJ2InLAorICAgICAgJ2JpZyddCisKKyAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFC
TEVfQkxPQ0tfVEFHUyA9IFsnbm9zY3JpcHQnXQorCisgICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxk
VGFnTWFwKFtdLCBCZWF1dGlmdWxTb3VwLk5FU1RBQkxFX1RBR1MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVf
TkVTVEFCTEVfSU5MSU5FX1RBR1MpCisKK2NsYXNzIE1pbmltYWxTb3VwKEJlYXV0aWZ1bFNvdXAp
OgorICAgICIiIlRoZSBNaW5pbWFsU291cCBjbGFzcyBpcyBmb3IgcGFyc2luZyBIVE1MIHRoYXQg
Y29udGFpbnMKKyAgICBwYXRob2xvZ2ljYWxseSBiYWQgbWFya3VwLiBJdCBtYWtlcyBubyBhc3N1
bXB0aW9ucyBhYm91dCB0YWcKKyAgICBuZXN0aW5nLCBidXQgaXQgZG9lcyBrbm93IHdoaWNoIHRh
Z3MgYXJlIHNlbGYtY2xvc2luZywgdGhhdAorICAgIDxzY3JpcHQ+IHRhZ3MgY29udGFpbiBKYXZh
c2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCwgdGhhdAorICAgIE1FVEEgdGFncyBtYXkg
Y29udGFpbiBlbmNvZGluZyBpbmZvcm1hdGlvbiwgYW5kIHNvIG9uLgorCisgICAgVGhpcyBhbHNv
IG1ha2VzIGl0IGJldHRlciBmb3Igc3ViY2xhc3NpbmcgdGhhbiBCZWF1dGlmdWxTdG9uZVNvdXAK
KyAgICBvciBCZWF1dGlmdWxTb3VwLiIiIgorCisgICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVp
bGRUYWdNYXAoJ25vc2NyaXB0JykKKyAgICBORVNUQUJMRV9UQUdTID0ge30KKworY2xhc3MgQmVh
dXRpZnVsU09BUChCZWF1dGlmdWxTdG9uZVNvdXApOgorICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBw
dXNoIGEgdGFnIHdpdGggb25seSBhIHNpbmdsZSBzdHJpbmcgY2hpbGQgaW50bworICAgIHRoZSB0
YWcncyBwYXJlbnQgYXMgYW4gYXR0cmlidXRlLiBUaGUgYXR0cmlidXRlJ3MgbmFtZSBpcyB0aGUg
dGFnCisgICAgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgc3RyaW5nIGNoaWxkLiBBbiBleGFt
cGxlIHNob3VsZCBnaXZlCisgICAgdGhlIGZsYXZvciBvZiB0aGUgY2hhbmdlOgorCisgICAgPGZv
bz48YmFyPmJhejwvYmFyPjwvZm9vPgorICAgICA9PgorICAgIDxmb28gYmFyPSJiYXoiPjxiYXI+
YmF6PC9iYXI+PC9mb28+CisKKyAgICBZb3UgY2FuIHRoZW4gYWNjZXNzIGZvb1RhZ1snYmFyJ10g
aW5zdGVhZCBvZiBmb29UYWcuYmFyVGFnLnN0cmluZy4KKworICAgIFRoaXMgaXMsIG9mIGNvdXJz
ZSwgdXNlZnVsIGZvciBzY3JhcGluZyBzdHJ1Y3R1cmVzIHRoYXQgdGVuZCB0bworICAgIHVzZSBz
dWJlbGVtZW50cyBpbnN0ZWFkIG9mIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgU09BUCBtZXNzYWdlcy4g
Tm90ZQorICAgIHRoYXQgaXQgbW9kaWZpZXMgaXRzIGlucHV0LCBzbyBkb24ndCBwcmludCB0aGUg
bW9kaWZpZWQgdmVyc2lvbgorICAgIG91dC4KKworICAgIEknbSBub3Qgc3VyZSBob3cgbWFueSBw
ZW9wbGUgcmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgY2xhc3M7IGxldCBtZQorICAgIGtub3cgaWYg
eW91IGRvLiBNYWlubHkgSSBsaWtlIHRoZSBuYW1lLiIiIgorCisgICAgZGVmIHBvcFRhZyhzZWxm
KToKKyAgICAgICAgaWYgbGVuKHNlbGYudGFnU3RhY2spID4gMToKKyAgICAgICAgICAgIHRhZyA9
IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhZ1N0YWNrWy0y
XQorICAgICAgICAgICAgcGFyZW50Ll9nZXRBdHRyTWFwKCkKKyAgICAgICAgICAgIGlmIChpc2lu
c3RhbmNlKHRhZywgVGFnKSBhbmQgbGVuKHRhZy5jb250ZW50cykgPT0gMSBhbmQKKyAgICAgICAg
ICAgICAgICBpc2luc3RhbmNlKHRhZy5jb250ZW50c1swXSwgTmF2aWdhYmxlU3RyaW5nKSBhbmQK
KyAgICAgICAgICAgICAgICBub3QgcGFyZW50LmF0dHJNYXAuaGFzX2tleSh0YWcubmFtZSkpOgor
ICAgICAgICAgICAgICAgIHBhcmVudFt0YWcubmFtZV0gPSB0YWcuY29udGVudHNbMF0KKyAgICAg
ICAgQmVhdXRpZnVsU3RvbmVTb3VwLnBvcFRhZyhzZWxmKQorCisjRW50ZXJwcmlzZSBjbGFzcyBu
YW1lcyEgSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHNvbWUgcGVvcGxlCisjdGhp
bmsgdGhlIG5hbWVzIG9mIHRoZSBCZWF1dGlmdWwgU291cCBwYXJzZXIgY2xhc3NlcyBhcmUgdG9v
IHNpbGx5CisjYW5kICJ1bnByb2Zlc3Npb25hbCIgZm9yIHVzZSBpbiBlbnRlcnByaXNlIHNjcmVl
bi1zY3JhcGluZy4gV2UgZmVlbAorI3lvdXIgcGFpbiEgRm9yIHN1Y2gtbWluZGVkIGZvbGssIHRo
ZSBCZWF1dGlmdWwgU291cCBDb25zb3J0aXVtIEFuZAorI0FsbC1OaWdodCBLb3NoZXIgQmFrZXJ5
IHJlY29tbWVuZHMgcmVuYW1pbmcgdGhpcyBmaWxlIHRvCisjIlJvYnVzdFBhcnNlci5weSIgKG9y
LCBpbiBjYXNlcyBvZiBleHRyZW1lIGVudGVycHJpc2luZXNzLAorIyJSb2J1c3RQYXJzZXJCZWFu
SW50ZXJmYWNlLmNsYXNzIikgYW5kIHVzaW5nIHRoZSBmb2xsb3dpbmcKKyNlbnRlcnByaXNlLWZy
aWVuZGx5IGNsYXNzIGFsaWFzZXM6CitjbGFzcyBSb2J1c3RYTUxQYXJzZXIoQmVhdXRpZnVsU3Rv
bmVTb3VwKToKKyAgICBwYXNzCitjbGFzcyBSb2J1c3RIVE1MUGFyc2VyKEJlYXV0aWZ1bFNvdXAp
OgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdFdhY2tBc3NIVE1MUGFyc2VyKElDYW50QmVsaWV2ZUl0
c0JlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdEluc2FuZWx5V2Fja0Fzc0hU
TUxQYXJzZXIoTWluaW1hbFNvdXApOgorICAgIHBhc3MKK2NsYXNzIFNpbXBsaWZ5aW5nU09BUFBh
cnNlcihCZWF1dGlmdWxTT0FQKToKKyAgICBwYXNzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBCb251cyBsaWJyYXJ5OiBVbmlj
b2RlLCBEYW1taXQKKyMKKyMgVGhpcyBjbGFzcyBmb3JjZXMgWE1MIGRhdGEgaW50byBhIHN0YW5k
YXJkIGZvcm1hdCAodXN1YWxseSB0byBVVEYtOAorIyBvciBVbmljb2RlKS4gIEl0IGlzIGhlYXZp
bHkgYmFzZWQgb24gY29kZSBmcm9tIE1hcmsgUGlsZ3JpbSdzCisjIFVuaXZlcnNhbCBGZWVkIFBh
cnNlci4gSXQgZG9lcyBub3QgcmV3cml0ZSB0aGUgWE1MIG9yIEhUTUwgdG8KKyMgcmVmbGVjdCBh
IG5ldyBlbmNvZGluZzogdGhhdCBoYXBwZW5zIGluIEJlYXV0aWZ1bFN0b25lU291cC5oYW5kbGVf
cGkKKyMgKFhNTCkgYW5kIEJlYXV0aWZ1bFNvdXAuc3RhcnRfbWV0YSAoSFRNTCkuCisKKyMgQXV0
b2RldGVjdHMgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMgRG93bmxvYWQgZnJvbSBodHRwOi8vY2hh
cmRldC5mZWVkcGFyc2VyLm9yZy8KK3RyeToKKyAgICBpbXBvcnQgY2hhcmRldAorIyAgICBpbXBv
cnQgY2hhcmRldC5jb25zdGFudHMKKyMgICAgY2hhcmRldC5jb25zdGFudHMuX2RlYnVnID0gMQor
ZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGNoYXJkZXQgPSBOb25lCisKKyMgY2prY29kZWNzIGFu
ZCBpY29udl9jb2RlYyBtYWtlIFB5dGhvbiBrbm93IGFib3V0IG1vcmUgY2hhcmFjdGVyIGVuY29k
aW5ncy4KKyMgQm90aCBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL2Nqa3B5dGhvbi5pMThuLm9y
Zy8KKyMgVGhleSdyZSBidWlsdCBpbiBpZiB5b3UgdXNlIFB5dGhvbiAyLjQuCit0cnk6CisgICAg
aW1wb3J0IGNqa2NvZGVjcy5hbGlhc2VzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwor
dHJ5OgorICAgIGltcG9ydCBpY29udl9jb2RlYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBh
c3MKKworY2xhc3MgVW5pY29kZURhbW1pdDoKKyAgICAiIiJBIGNsYXNzIGZvciBkZXRlY3Rpbmcg
dGhlIGVuY29kaW5nIG9mIGEgKk1MIGRvY3VtZW50IGFuZAorICAgIGNvbnZlcnRpbmcgaXQgdG8g
YSBVbmljb2RlIHN0cmluZy4gSWYgdGhlIHNvdXJjZSBlbmNvZGluZyBpcworICAgIHdpbmRvd3Mt
MTI1MiwgY2FuIHJlcGxhY2UgTVMgc21hcnQgcXVvdGVzIHdpdGggdGhlaXIgSFRNTCBvciBYTUwK
KyAgICBlcXVpdmFsZW50cy4iIiIKKworICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9u
bHkgc2VlbiB2YWx1ZXMgZm9yICJjaGFyc2V0IiBpbiBIVE1MCisgICAgIyBtZXRhIHRhZ3MgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIGNvZGVjIG5hbWVzLiBJdCBvbmx5IGNvdmVycworICAg
ICMgdmFsdWVzIHRoYXQgYXJlbid0IGluIFB5dGhvbidzIGFsaWFzZXMgYW5kIGNhbid0IGJlIGRl
dGVybWluZWQKKyAgICAjIGJ5IHRoZSBoZXVyaXN0aWNzIGluIGZpbmRfY29kZWMuCisgICAgQ0hB
UlNFVF9BTElBU0VTID0geyAibWFjaW50b3NoIiA6ICJtYWMtcm9tYW4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIngtc2ppcyIgOiAic2hpZnQtamlzIiB9CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbWFya3VwLCBvdmVycmlkZUVuY29kaW5ncz1bXSwKKyAgICAgICAgICAgICAgICAgc21h
cnRRdW90ZXNUbz0neG1sJywgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgc2VsZi5kZWNsYXJlZEhU
TUxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXJrdXAsIGRvY3VtZW50RW5jb2Rpbmcs
IHNuaWZmZWRFbmNvZGluZyA9IFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RldGVjdEVu
Y29kaW5nKG1hcmt1cCwgaXNIVE1MKQorICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFy
dFF1b3Rlc1RvCisgICAgICAgIHNlbGYudHJpZWRFbmNvZGluZ3MgPSBbXQorICAgICAgICBpZiBt
YXJrdXAgPT0gJycgb3IgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAg
c2VsZi5vcmlnaW5hbEVuY29kaW5nID0gTm9uZQorICAgICAgICAgICAgc2VsZi51bmljb2RlID0g
dW5pY29kZShtYXJrdXApCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB1ID0gTm9uZQor
ICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiBvdmVycmlkZUVuY29kaW5nczoKKyAgICAg
ICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3NlZEVuY29kaW5nKQorICAgICAgICAg
ICAgaWYgdTogYnJlYWsKKyAgICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBmb3IgcHJvcG9z
ZWRFbmNvZGluZyBpbiAoZG9jdW1lbnRFbmNvZGluZywgc25pZmZlZEVuY29kaW5nKToKKyAgICAg
ICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydEZyb20ocHJvcG9zZWRFbmNvZGluZykKKyAgICAg
ICAgICAgICAgICBpZiB1OiBicmVhaworCisgICAgICAgICMgSWYgbm8gbHVjayBhbmQgd2UgaGF2
ZSBhdXRvLWRldGVjdGlvbiBsaWJyYXJ5LCB0cnkgdGhhdDoKKyAgICAgICAgaWYgbm90IHUgYW5k
IGNoYXJkZXQgYW5kIG5vdCBpc2luc3RhbmNlKHNlbGYubWFya3VwLCB1bmljb2RlKToKKyAgICAg
ICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShjaGFyZGV0LmRldGVjdChzZWxmLm1hcmt1cClb
J2VuY29kaW5nJ10pCisKKyAgICAgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB0cnkgdXRmLTggYW5k
IHdpbmRvd3MtMTI1MjoKKyAgICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBmb3IgcHJvcG9z
ZWRfZW5jb2RpbmcgaW4gKCJ1dGYtOCIsICJ3aW5kb3dzLTEyNTIiKToKKyAgICAgICAgICAgICAg
ICB1ID0gc2VsZi5fY29udmVydEZyb20ocHJvcG9zZWRfZW5jb2RpbmcpCisgICAgICAgICAgICAg
ICAgaWYgdTogYnJlYWsKKworICAgICAgICBzZWxmLnVuaWNvZGUgPSB1CisgICAgICAgIGlmIG5v
dCB1OiBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisKKyAgICBkZWYgX3N1Yk1TQ2hhcihz
ZWxmLCBtYXRjaCk6CisgICAgICAgICIiIkNoYW5nZXMgYSBNUyBzbWFydCBxdW90ZSBjaGFyYWN0
ZXIgdG8gYW4gWE1MIG9yIEhUTUwKKyAgICAgICAgZW50aXR5LiIiIgorICAgICAgICBvcmlnID0g
bWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgc3ViID0gc2VsZi5NU19DSEFSUy5nZXQob3JpZykKKyAg
ICAgICAgaWYgdHlwZShzdWIpID09IHR5cGVzLlR1cGxlVHlwZToKKyAgICAgICAgICAgIGlmIHNl
bGYuc21hcnRRdW90ZXNUbyA9PSAneG1sJzoKKyAgICAgICAgICAgICAgICBzdWIgPSAnJiN4Jy5l
bmNvZGUoKSArIHN1YlsxXS5lbmNvZGUoKSArICc7Jy5lbmNvZGUoKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzdWIgPSAnJicuZW5jb2RlKCkgKyBzdWJbMF0uZW5jb2RlKCkg
KyAnOycuZW5jb2RlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1YiA9IHN1Yi5lbmNv
ZGUoKQorICAgICAgICByZXR1cm4gc3ViCisKKyAgICBkZWYgX2NvbnZlcnRGcm9tKHNlbGYsIHBy
b3Bvc2VkKToKKyAgICAgICAgcHJvcG9zZWQgPSBzZWxmLmZpbmRfY29kZWMocHJvcG9zZWQpCisg
ICAgICAgIGlmIG5vdCBwcm9wb3NlZCBvciBwcm9wb3NlZCBpbiBzZWxmLnRyaWVkRW5jb2Rpbmdz
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi50cmllZEVuY29kaW5ncy5h
cHBlbmQocHJvcG9zZWQpCisgICAgICAgIG1hcmt1cCA9IHNlbGYubWFya3VwCisKKyAgICAgICAg
IyBDb252ZXJ0IHNtYXJ0IHF1b3RlcyB0byBIVE1MIGlmIGNvbWluZyBmcm9tIGFuIGVuY29kaW5n
CisgICAgICAgICMgdGhhdCBtaWdodCBoYXZlIHRoZW0uCisgICAgICAgIGlmIHNlbGYuc21hcnRR
dW90ZXNUbyBhbmQgcHJvcG9zZWQubG93ZXIoKSBpbigid2luZG93cy0xMjUyIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc28tODg1OS0x
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpc28tODg1OS0yIik6CisgICAgICAgICAgICBzbWFydF9xdW90ZXNfcmUgPSAiKFtceDgwLVx4
OWZdKSIKKyAgICAgICAgICAgIHNtYXJ0X3F1b3Rlc19jb21waWxlZCA9IHJlLmNvbXBpbGUoc21h
cnRfcXVvdGVzX3JlKQorICAgICAgICAgICAgbWFya3VwID0gc21hcnRfcXVvdGVzX2NvbXBpbGVk
LnN1YihzZWxmLl9zdWJNU0NoYXIsIG1hcmt1cCkKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICAjIHByaW50ICJUcnlpbmcgdG8gY29udmVydCBkb2N1bWVudCB0byAlcyIgJSBwcm9wb3NlZAor
ICAgICAgICAgICAgdSA9IHNlbGYuX3RvVW5pY29kZShtYXJrdXAsIHByb3Bvc2VkKQorICAgICAg
ICAgICAgc2VsZi5tYXJrdXAgPSB1CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2Rpbmcg
PSBwcm9wb3NlZAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBw
cmludCAiVGhhdCBkaWRuJ3Qgd29yayEiCisgICAgICAgICAgICAjIHByaW50IGUKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisgICAgICAgICNwcmludCAiQ29ycmVjdCBlbmNvZGluZzogJXMiICUg
cHJvcG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya3VwCisKKyAgICBkZWYgX3RvVW5pY29k
ZShzZWxmLCBkYXRhLCBlbmNvZGluZyk6CisgICAgICAgICcnJ0dpdmVuIGEgc3RyaW5nIGFuZCBp
dHMgZW5jb2RpbmcsIGRlY29kZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNvZGUuCisgICAgICAgICVl
bmNvZGluZyBpcyBhIHN0cmluZyByZWNvZ25pemVkIGJ5IGVuY29kaW5ncy5hbGlhc2VzJycnCisK
KyAgICAgICAgIyBzdHJpcCBCeXRlIE9yZGVyIE1hcmsgKGlmIHByZXNlbnQpCisgICAgICAgIGlm
IChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSAnXHhmZVx4ZmYnKSBcCisgICAgICAg
ICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29k
aW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVs
aWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdceGZmXHhmZScpIFwKKyAgICAg
ICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6CisgICAgICAgICAgICBl
bmNvZGluZyA9ICd1dGYtMTZsZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQorICAgICAg
ICBlbGlmIGRhdGFbOjNdID09ICdceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgZW5jb2Rpbmcg
PSAndXRmLTgnCisgICAgICAgICAgICBkYXRhID0gZGF0YVszOl0KKyAgICAgICAgZWxpZiBkYXRh
Wzo0XSA9PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYt
MzJiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICBlbGlmIGRhdGFbOjRd
ID09ICdceGZmXHhmZVx4MDBceDAwJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmxl
JworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIG5ld2RhdGEgPSB1bmljb2Rl
KGRhdGEsIGVuY29kaW5nKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQorCisgICAgZGVmIF9kZXRl
Y3RFbmNvZGluZyhzZWxmLCB4bWxfZGF0YSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIiIiR2l2
ZW4gYSBkb2N1bWVudCwgdHJpZXMgdG8gZGV0ZWN0IGl0cyBYTUwgZW5jb2RpbmcuIiIiCisgICAg
ICAgIHhtbF9lbmNvZGluZyA9IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gTm9uZQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4NGNceDZmXHhhN1x4OTQnOgor
ICAgICAgICAgICAgICAgICMgRUJDRElDCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSBzZWxm
Ll9lYmNkaWNfdG9fYXNjaWkoeG1sX2RhdGEpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0
XSA9PSAnXHgwMFx4M2NceDAwXHgzZic6CisgICAgICAgICAgICAgICAgIyBVVEYtMTZCRQorICAg
ICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAg
ICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1
dGYtOCcpCisgICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2Rh
dGFbOjJdID09ICdceGZlXHhmZicpIFwKKyAgICAgICAgICAgICAgICAgICAgIGFuZCAoeG1sX2Rh
dGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAjIFVURi0xNkJFIHdpdGgg
Qk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2YmUnCisg
ICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmJl
JykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgz
Y1x4MDBceDNmXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMTZMRQorICAgICAgICAgICAg
ICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgICAgIHht
bF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCisg
ICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09
ICdceGZmXHhmZScpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAoeG1sX2RhdGFbMjo0XSAh
PSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAjIFVURi0xNkxFIHdpdGggQk9NCisgICAg
ICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAg
ICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmxlJykuZW5jb2Rl
KCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceDAw
XHgzYyc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJCRQorICAgICAgICAgICAgICAgIHNuaWZm
ZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0g
dW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAg
ICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgzY1x4MDBceDAwXHgwMCc6CisgICAgICAgICAgICAg
ICAgIyBVVEYtMzJMRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0
Zi0zMmxlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0
Zi0zMmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9
PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJCRSB3aXRoIEJP
TQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJworICAg
ICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0sICd1dGYtMzJiZScp
LmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4ZmZc
eGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgICAgICMgVVRGLTMyTEUgd2l0aCBCT00KKyAgICAg
ICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMzJsZScKKyAgICAgICAgICAg
ICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbNDpdLCAndXRmLTMybGUnKS5lbmNvZGUo
J3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjNdID09ICdceGVmXHhiYlx4YmYn
OgorICAgICAgICAgICAgICAgICMgVVRGLTggd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlm
ZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVu
aWNvZGUoeG1sX2RhdGFbMzpdLCAndXRmLTgnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAnYXNjaWknCisg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB4bWxfZW5j
b2RpbmdfbWF0Y2ggPSBOb25lCisgICAgICAgIHhtbF9lbmNvZGluZ19yZSA9ICdePFw/LiplbmNv
ZGluZz1bXCciXSguKj8pW1wnIl0uKlw/PicuZW5jb2RlKCkKKyAgICAgICAgeG1sX2VuY29kaW5n
X21hdGNoID0gcmUuY29tcGlsZSh4bWxfZW5jb2RpbmdfcmUpLm1hdGNoKHhtbF9kYXRhKQorICAg
ICAgICBpZiBub3QgeG1sX2VuY29kaW5nX21hdGNoIGFuZCBpc0hUTUw6CisgICAgICAgICAgICBt
ZXRhX3JlID0gJzxccyptZXRhW14+XStjaGFyc2V0PShbXj5dKj8pWztcJyI+XScuZW5jb2RlKCkK
KyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUobWV0YV9yZSwgcmUuSSkKKyAgICAgICAg
ICAgIHhtbF9lbmNvZGluZ19tYXRjaCA9IHJlZ2V4cC5zZWFyY2goeG1sX2RhdGEpCisgICAgICAg
IGlmIHhtbF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHhtbF9lbmNv
ZGluZyA9IHhtbF9lbmNvZGluZ19tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoCisgICAgICAgICAg
ICAgICAgJ2FzY2lpJykubG93ZXIoKQorICAgICAgICAgICAgaWYgaXNIVE1MOgorICAgICAgICAg
ICAgICAgIHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgPSB4bWxfZW5jb2RpbmcKKyAgICAgICAg
ICAgIGlmIHNuaWZmZWRfeG1sX2VuY29kaW5nIGFuZCBcCisgICAgICAgICAgICAgICAoeG1sX2Vu
Y29kaW5nIGluICgnaXNvLTEwNjQ2LXVjcy0yJywgJ3Vjcy0yJywgJ2NzdW5pY29kZScsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNvLTEwNjQ2LXVjcy00JywgJ3Vjcy00Jywg
J2NzdWNzNCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmLTE2JywgJ3V0
Zi0zMicsICd1dGZfMTYnLCAndXRmXzMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd1dGYxNicsICd1MTYnKSk6CisgICAgICAgICAgICAgICAgeG1sX2VuY29kaW5nID0gc25p
ZmZlZF94bWxfZW5jb2RpbmcKKyAgICAgICAgcmV0dXJuIHhtbF9kYXRhLCB4bWxfZW5jb2Rpbmcs
IHNuaWZmZWRfeG1sX2VuY29kaW5nCisKKworICAgIGRlZiBmaW5kX2NvZGVjKHNlbGYsIGNoYXJz
ZXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29kZWMoc2VsZi5DSEFSU0VUX0FMSUFTRVMuZ2V0
KGNoYXJzZXQsIGNoYXJzZXQpKSBcCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2Vs
Zi5fY29kZWMoY2hhcnNldC5yZXBsYWNlKCItIiwgIiIpKSkgXAorICAgICAgICAgICAgICAgb3Ig
KGNoYXJzZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICJfIikpKSBcCisg
ICAgICAgICAgICAgICBvciBjaGFyc2V0CisKKyAgICBkZWYgX2NvZGVjKHNlbGYsIGNoYXJzZXQp
OgorICAgICAgICBpZiBub3QgY2hhcnNldDogcmV0dXJuIGNoYXJzZXQKKyAgICAgICAgY29kZWMg
PSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoY2hhcnNldCkK
KyAgICAgICAgICAgIGNvZGVjID0gY2hhcnNldAorICAgICAgICBleGNlcHQgKExvb2t1cEVycm9y
LCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGNvZGVjCisK
KyAgICBFQkNESUNfVE9fQVNDSUlfTUFQID0gTm9uZQorICAgIGRlZiBfZWJjZGljX3RvX2FzY2lp
KHNlbGYsIHMpOgorICAgICAgICBjID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgaWYgbm90IGMu
RUJDRElDX1RPX0FTQ0lJX01BUDoKKyAgICAgICAgICAgIGVtYXAgPSAoMCwxLDIsMywxNTYsOSwx
MzQsMTI3LDE1MSwxNDEsMTQyLDExLDEyLDEzLDE0LDE1LAorICAgICAgICAgICAgICAgICAgICAx
NiwxNywxOCwxOSwxNTcsMTMzLDgsMTM1LDI0LDI1LDE0NiwxNDMsMjgsMjksMzAsMzEsCisgICAg
ICAgICAgICAgICAgICAgIDEyOCwxMjksMTMwLDEzMSwxMzIsMTAsMjMsMjcsMTM2LDEzNywxMzgs
MTM5LDE0MCw1LDYsNywKKyAgICAgICAgICAgICAgICAgICAgMTQ0LDE0NSwyMiwxNDcsMTQ4LDE0
OSwxNTAsNCwxNTIsMTUzLDE1NCwxNTUsMjAsMjEsMTU4LDI2LAorICAgICAgICAgICAgICAgICAg
ICAzMiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCw5MSw0Niw2MCw0MCw0Mywz
MywKKyAgICAgICAgICAgICAgICAgICAgMzgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3
NiwxNzcsOTMsMzYsNDIsNDEsNTksOTQsCisgICAgICAgICAgICAgICAgICAgIDQ1LDQ3LDE3OCwx
NzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTI0LDQ0LDM3LDk1LDYyLDYzLAorICAgICAgICAg
ICAgICAgICAgICAxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCw5Niw1OCwzNSw2
NCwzOSw2MSwzNCwKKyAgICAgICAgICAgICAgICAgICAgMTk1LDk3LDk4LDk5LDEwMCwxMDEsMTAy
LDEwMywxMDQsMTA1LDE5NiwxOTcsMTk4LDE5OSwyMDAsCisgICAgICAgICAgICAgICAgICAgIDIw
MSwyMDIsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMjAzLDIwNCwyMDUsCisg
ICAgICAgICAgICAgICAgICAgIDIwNiwyMDcsMjA4LDIwOSwxMjYsMTE1LDExNiwxMTcsMTE4LDEx
OSwxMjAsMTIxLDEyMiwyMTAsCisgICAgICAgICAgICAgICAgICAgIDIxMSwyMTIsMjEzLDIxNCwy
MTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsCisgICAgICAgICAgICAgICAg
ICAgIDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwxMjMsNjUsNjYsNjcsNjgsNjksNzAsNzEs
NzIsCisgICAgICAgICAgICAgICAgICAgIDczLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDEyNSw3
NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSwKKyAgICAgICAgICAgICAgICAgICAgODIsMjM4LDIzOSwy
NDAsMjQxLDI0MiwyNDMsOTIsMTU5LDgzLDg0LDg1LDg2LDg3LDg4LDg5LAorICAgICAgICAgICAg
ICAgICAgICA5MCwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1
NSw1Niw1NywKKyAgICAgICAgICAgICAgICAgICAgMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUpCisg
ICAgICAgICAgICBpbXBvcnQgc3RyaW5nCisgICAgICAgICAgICBjLkVCQ0RJQ19UT19BU0NJSV9N
QVAgPSBzdHJpbmcubWFrZXRyYW5zKCBcCisgICAgICAgICAgICAnJy5qb2luKG1hcChjaHIsIHJh
bmdlKDI1NikpKSwgJycuam9pbihtYXAoY2hyLCBlbWFwKSkpCisgICAgICAgIHJldHVybiBzLnRy
YW5zbGF0ZShjLkVCQ0RJQ19UT19BU0NJSV9NQVApCisKKyAgICBNU19DSEFSUyA9IHsgJ1x4ODAn
IDogKCdldXJvJywgJzIwQUMnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODEnIDogJyAnLAorICAg
ICAgICAgICAgICAgICAnXHg4MicgOiAoJ3NicXVvJywgJzIwMUEnKSwKKyAgICAgICAgICAgICAg
ICAgJ1x4ODMnIDogKCdmbm9mJywgJzE5MicpLAorICAgICAgICAgICAgICAgICAnXHg4NCcgOiAo
J2JkcXVvJywgJzIwMUUnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODUnIDogKCdoZWxsaXAnLCAn
MjAyNicpLAorICAgICAgICAgICAgICAgICAnXHg4NicgOiAoJ2RhZ2dlcicsICcyMDIwJyksCisg
ICAgICAgICAgICAgICAgICdceDg3JyA6ICgnRGFnZ2VyJywgJzIwMjEnKSwKKyAgICAgICAgICAg
ICAgICAgJ1x4ODgnIDogKCdjaXJjJywgJzJDNicpLAorICAgICAgICAgICAgICAgICAnXHg4OScg
OiAoJ3Blcm1pbCcsICcyMDMwJyksCisgICAgICAgICAgICAgICAgICdceDhBJyA6ICgnU2Nhcm9u
JywgJzE2MCcpLAorICAgICAgICAgICAgICAgICAnXHg4QicgOiAoJ2xzYXF1bycsICcyMDM5Jyks
CisgICAgICAgICAgICAgICAgICdceDhDJyA6ICgnT0VsaWcnLCAnMTUyJyksCisgICAgICAgICAg
ICAgICAgICdceDhEJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4OEUnIDogKCcjeDE3RCcs
ICcxN0QnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEYnIDogJz8nLAorICAgICAgICAgICAgICAg
ICAnXHg5MCcgOiAnPycsCisgICAgICAgICAgICAgICAgICdceDkxJyA6ICgnbHNxdW8nLCAnMjAx
OCcpLAorICAgICAgICAgICAgICAgICAnXHg5MicgOiAoJ3JzcXVvJywgJzIwMTknKSwKKyAgICAg
ICAgICAgICAgICAgJ1x4OTMnIDogKCdsZHF1bycsICcyMDFDJyksCisgICAgICAgICAgICAgICAg
ICdceDk0JyA6ICgncmRxdW8nLCAnMjAxRCcpLAorICAgICAgICAgICAgICAgICAnXHg5NScgOiAo
J2J1bGwnLCAnMjAyMicpLAorICAgICAgICAgICAgICAgICAnXHg5NicgOiAoJ25kYXNoJywgJzIw
MTMnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTcnIDogKCdtZGFzaCcsICcyMDE0JyksCisgICAg
ICAgICAgICAgICAgICdceDk4JyA6ICgndGlsZGUnLCAnMkRDJyksCisgICAgICAgICAgICAgICAg
ICdceDk5JyA6ICgndHJhZGUnLCAnMjEyMicpLAorICAgICAgICAgICAgICAgICAnXHg5YScgOiAo
J3NjYXJvbicsICcxNjEnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWInIDogKCdyc2FxdW8nLCAn
MjAzQScpLAorICAgICAgICAgICAgICAgICAnXHg5YycgOiAoJ29lbGlnJywgJzE1MycpLAorICAg
ICAgICAgICAgICAgICAnXHg5ZCcgOiAnPycsCisgICAgICAgICAgICAgICAgICdceDllJyA6ICgn
I3gxN0UnLCAnMTdFJyksCisgICAgICAgICAgICAgICAgICdceDlmJyA6ICgnWXVtbCcsICcnKSx9
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCisKKworI0J5IGRlZmF1bHQsIGFjdCBhcyBhbiBIVE1MIHByZXR0
eS1wcmludGVyLgoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisg
ICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc3lzLnN0ZGluKQorICAgIHByaW50IHNvdXAucHJldHRp
ZnkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1Z3ppbGxhLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1Z3ppbGxhLnB5CmluZGV4IDBlZWIwMWMu
LjYyNWYwZDQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWd6aWxs
YS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvYnVnemlsbGEucHkKQEAgLTMz
LDE4ICszMywyMCBAQCBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHVybGxp
YjIKIAorIyBXZWJLaXQgaW5jbHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4g
U2NyaXB0cy9tb2R1bGVzCisjIHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4K
K2Zyb20gLkJlYXV0aWZ1bFNvdXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKwogdHJ5OgotICAgIGZy
b20gQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVsU291cAogICAgIGZyb20gbWVjaGFuaXpl
IGltcG9ydCBCcm93c2VyCiBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CiAgICAgcHJpbnQgIiIiCi1C
ZWF1dGlmdWxTb3VwIGFuZCBtZWNoYW5pemUgYXJlIHJlcXVpcmVkLgorbWVjaGFuaXplIGlzIHJl
cXVpcmVkLgogCiBUbyBpbnN0YWxsOgotc3VkbyBlYXN5X2luc3RhbGwgQmVhdXRpZnVsU291cCBt
ZWNoYW5pemUKK3N1ZG8gZWFzeV9pbnN0YWxsIG1lY2hhbml6ZQogCiBPciBmcm9tIHRoZSB3ZWI6
Ci1odHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8KIGh0dHA6Ly93
d3dzZWFyY2guc291cmNlZm9yZ2UubmV0L21lY2hhbml6ZS8KICIiIgogICAgIGV4aXQoMSkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvc2NtLnB5CmluZGV4IDJiMzY4ZDQuLmQ5YmIyZjMgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL3NjbS5weQpAQCAtMTM4LDcgKzEzOCw3IEBAIGNsYXNzIFNDTToKICAg
ICBkZWYgZGlzcGxheV9uYW1lKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKIAotICAgIGRlZiBjcmVhdGVfcGF0Y2hf
Y29tbWFuZChzZWxmKToKKyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYpOgogICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKIAogICAg
IGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgpAQCAtMjA5LDggKzIwOSw4
IEBAIGNsYXNzIFNWTihTQ00pOgogICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZik6CiAgICAgICAg
IHJldHVybiAic3ZuIgogCi0gICAgZGVmIGNyZWF0ZV9wYXRjaF9jb21tYW5kKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5zY3JpcHRfcGF0aCgic3ZuLWNyZWF0ZS1wYXRjaCIpCisgICAgZGVm
IGNyZWF0ZV9wYXRjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2NvbW1hbmQoc2Vs
Zi5zY3JpcHRfcGF0aCgic3ZuLWNyZWF0ZS1wYXRjaCIpKQogCiAgICAgZGVmIGNvbW1pdF93aXRo
X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIGlmIHNlbGYuZHJ5cnVuOgpAQCAtMjY3
LDggKzI2Nyw4IEBAIGNsYXNzIEdpdChTQ00pOgogICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZik6
CiAgICAgICAgIHJldHVybiAiZ2l0IgogCi0gICAgZGVmIGNyZWF0ZV9wYXRjaF9jb21tYW5kKHNl
bGYpOgotICAgICAgICByZXR1cm4gImdpdCBkaWZmIEhFQUQiCisgICAgZGVmIGNyZWF0ZV9wYXRj
aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2NvbW1hbmQoImdpdCBkaWZmIEhFQUQi
KQogCiAgICAgZGVmIGNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAg
IHNlbGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKG1lc3NhZ2Up
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32040</attachid>
            <date>2009-06-30 01:44:57 -0700</date>
            <delta_ts>2009-06-30 02:08:52 -0700</delta_ts>
            <desc>Add BeautifulSoup (and fix post-diff to not hang with large patches)</desc>
            <filename>bugzilla_requires_a_filename.patch</filename>
            <type>text/plain</type>
            <size>86474</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmNzU1ODYyLi41ZjAwNDk2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDktMDYt
MzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgYSBidWlsdCBjb3B5IG9mIEJlYXV0
aWZ1bFNvdXAgMy4xLjAuMSBzbyB0aGF0CisgICAgICAgIGJ1Z3ppbGxhLXRvb2wgdXNlcnMgZG8g
bm90IG5lZWQgdG8gaW5zdGFsbCBpdCBtYW51YWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODMzCisKKyAgICAgICAgQmVhdXRpZnVsU291cCBp
cyBCU0QtbGljZW5zZWQgKHRodXMgV2ViS2l0IGNvbXBhdGlibGUpIGFuZCBhdmFpbGFibGUgZnJv
bToKKyAgICAgICAgaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAK
KworICAgICAgICBJIGFsc28gaGFkIHRvIGZpeCBvdXIgY3JlYXRlX3BhdGNoIGhhbmRsaW5nIHRv
IG5vdAorICAgICAgICBoYW5nIHdoZW4gY3JlYXRpbmcgYSBwYXRjaCBvZiB0aGlzIHNpemUuIDop
CisgICAgICAgIFdlJ3JlIG5vdyB1c2luZyBTdHJpbmdJTyB0byBtYWtlIGFuIGluLW1lbW9yeSBi
dWZmZXIgZm9yIHRoZSBwYXRjaAorICAgICAgICBpbnN0ZWFkIG9mIHBpcGluZyBmcm9tIHRoZSBw
YXRjaCBjb21tYW5kIGRpcmVjdGx5IHRvIHRoZSB1cGxvYWQuCisgICAgICAgIFRoZSBwcmV2aW91
cyBoYW5nIHdhcyBjYXVzZWQgYnkgY2FsbGluZyB3YWl0KCkgd2hlbiB0aGUgcHJvY2VzcyBoYWQg
YWxyZWFkeQorICAgICAgICBmaWxlZCB0aGUgc3Rkb3V0IGJ1ZmZlci4KKworICAgICAgICAqIFNj
cmlwdHMvbW9kdWxlcy9CZWF1dGlmdWxTb3VwLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L21vZHVsZXMvYnVnemlsbGEucHk6CisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3NjbS5weToK
KwogMjAwOS0wNi0yOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVn
emlsbGEtdG9vbCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbAppbmRleCBhMmRi
YzQ4Li42NTJiMmVhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRv
b2wKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCkBAIC0zMiw2ICszMiw3
IEBACiBpbXBvcnQgZmlsZWlucHV0ICMgaW5wbGFjZSBmaWxlIGVkaXRpbmcgZm9yIHNldF9yZXZp
ZXdlcl9pbl9jaGFuZ2Vsb2cKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgU3RyaW5nSU8g
IyBmb3IgYWRkX3BhdGNoX3RvX2J1ZyBmaWxlIHdyYXBwZXJzCiBpbXBvcnQgc3VicHJvY2Vzcwog
aW1wb3J0IHN5cwogCkBAIC00MDMsMTEgKzQwNCwxMSBAQCBjbGFzcyBQb3N0RGlmZkFzUGF0Y2hU
b0J1ZyhDb21tYW5kKToKICAgICAgICAgaWYgb3B0aW9ucy5vYnNvbGV0ZV9wYXRjaGVzOgogICAg
ICAgICAgICAgc2VsZi5vYnNvbGV0ZV9wYXRjaGVzX29uX2J1ZyhidWdfaWQsIHRvb2wuYnVncykK
IAotICAgICAgICBkaWZmX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHRvb2wuc2NtKCkuY3Jl
YXRlX3BhdGNoX2NvbW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkK
LSAgICAgICAgZGlmZl9wcm9jZXNzLndhaXQoKSAjIE1ha2Ugc3VyZSBzdm4tY3JlYXRlLXBhdGNo
IGlzIGRvbmUgYmVmb3JlIHdlIGNvbnRpbnVlLgotICAgICAgICAKKyAgICAgICAgZGlmZiA9IHRv
b2wuc2NtKCkuY3JlYXRlX3BhdGNoKCkKKyAgICAgICAgZGlmZl9maWxlID0gU3RyaW5nSU8uU3Ry
aW5nSU8oZGlmZikgIyBhZGRfcGF0Y2hfdG9fYnVnIGV4cGVjdHMgYSBmaWxlLWxpa2Ugb2JqZWN0
CisKICAgICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uIG9yICJwYXRjaCIK
LSAgICAgICAgdG9vbC5idWdzLmFkZF9wYXRjaF90b19idWcoYnVnX2lkLCBkaWZmX3Byb2Nlc3Mu
c3Rkb3V0LCBkZXNjcmlwdGlvbiwgbWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3KQorICAg
ICAgICB0b29sLmJ1Z3MuYWRkX3BhdGNoX3RvX2J1ZyhidWdfaWQsIGRpZmZfZmlsZSwgZGVzY3Jp
cHRpb24sIG1hcmtfZm9yX3Jldmlldz1vcHRpb25zLnJldmlldykKIAogCiBjbGFzcyBQb3N0Q29t
bWl0c0FzUGF0Y2hlc1RvQnVnKENvbW1hbmQpOgpAQCAtNDQzLDEwICs0NDQsOSBAQCBjbGFzcyBQ
b3N0Q29tbWl0c0FzUGF0Y2hlc1RvQnVnKENvbW1hbmQpOgogICAgICAgICAgICAgY29tbWVudF90
ZXh0ICs9ICItLS1cbiIKICAgICAgICAgICAgIGNvbW1lbnRfdGV4dCArPSB0b29sLnNjbSgpLmZp
bGVzX2NoYW5nZWRfc3VtbWFyeV9mb3JfY29tbWl0KGNvbW1pdF9pZCkKICAgICAgICAgCi0gICAg
ICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgYml0IG9mIGEgaGFjaywgdGhhdCB3ZSBwYXNzIHN0
ZG91dCBhcyB0aGUgcGF0Y2ggZmlsZS4KLSAgICAgICAgICAgICMgV2UgY291bGQgYWx0ZXJuYXRp
dmVseSBtYWtlIGFuIGluLW1lbW9yeSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggdGhlIHBhdGNoIGNv
bnRlbnRzLgotICAgICAgICAgICAgZGlmZl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0b29s
LnNjbSgpLnNob3dfZGlmZl9jb21tYW5kX2Zvcl9jb21taXQoY29tbWl0X2lkKSwgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAgICAgIHRvb2wuYnVncy5hZGRfcGF0
Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9wcm9jZXNzLnN0ZG91dCwgZGVzY3JpcHRpb24sIGNvbW1l
bnRfdGV4dCwgbWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3KQorICAgICAgICAgICAgZGlm
ZiA9IHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNoKCkKKyAgICAgICAgICAgIGRpZmZfZmlsZSA9IFN0
cmluZ0lPLlN0cmluZ0lPKGRpZmYpICMgYWRkX3BhdGNoX3RvX2J1ZyBleHBlY3RzIGEgZmlsZS1s
aWtlIG9iamVjdAorICAgICAgICAgICAgdG9vbC5idWdzLmFkZF9wYXRjaF90b19idWcoYnVnX2lk
LCBkaWZmX2ZpbGUsIGRlc2NyaXB0aW9uLCBjb21tZW50X3RleHQsIG1hcmtfZm9yX3Jldmlldz1v
cHRpb25zLnJldmlldykKIAogCiBjbGFzcyBOb25XcmFwcGluZ0VwaWxvZ0luZGVudGVkSGVscEZv
cm1hdHRlcihJbmRlbnRlZEhlbHBGb3JtYXR0ZXIpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL0JlYXV0aWZ1bFNvdXAucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21v
ZHVsZXMvQmVhdXRpZnVsU291cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNDIwNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L0JlYXV0aWZ1bFNvdXAucHkKQEAgLTAsMCArMSwyMDAwIEBACisiIiJCZWF1dGlmdWwgU291cAor
RWxpeGlyIGFuZCBUb25pYworIlRoZSBTY3JlZW4tU2NyYXBlcidzIEZyaWVuZCIKK2h0dHA6Ly93
d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwLworCitCZWF1dGlmdWwgU291cCBw
YXJzZXMgYSAocG9zc2libHkgaW52YWxpZCkgWE1MIG9yIEhUTUwgZG9jdW1lbnQgaW50byBhCit0
cmVlIHJlcHJlc2VudGF0aW9uLiBJdCBwcm92aWRlcyBtZXRob2RzIGFuZCBQeXRob25pYyBpZGlv
bXMgdGhhdCBtYWtlCitpdCBlYXN5IHRvIG5hdmlnYXRlLCBzZWFyY2gsIGFuZCBtb2RpZnkgdGhl
IHRyZWUuCisKK0Egd2VsbC1mb3JtZWQgWE1ML0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgd2VsbC1m
b3JtZWQgZGF0YQorc3RydWN0dXJlLiBBbiBpbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3VtZW50IHlp
ZWxkcyBhIGNvcnJlc3BvbmRpbmdseQoraWxsLWZvcm1lZCBkYXRhIHN0cnVjdHVyZS4gSWYgeW91
ciBkb2N1bWVudCBpcyBvbmx5IGxvY2FsbHkKK3dlbGwtZm9ybWVkLCB5b3UgY2FuIHVzZSB0aGlz
IGxpYnJhcnkgdG8gZmluZCBhbmQgcHJvY2VzcyB0aGUKK3dlbGwtZm9ybWVkIHBhcnQgb2YgaXQu
CisKK0JlYXV0aWZ1bCBTb3VwIHdvcmtzIHdpdGggUHl0aG9uIDIuMiBhbmQgdXAuIEl0IGhhcyBu
byBleHRlcm5hbAorZGVwZW5kZW5jaWVzLCBidXQgeW91J2xsIGhhdmUgbW9yZSBzdWNjZXNzIGF0
IGNvbnZlcnRpbmcgZGF0YSB0byBVVEYtOAoraWYgeW91IGFsc28gaW5zdGFsbCB0aGVzZSB0aHJl
ZSBwYWNrYWdlczoKKworKiBjaGFyZGV0LCBmb3IgYXV0by1kZXRlY3RpbmcgY2hhcmFjdGVyIGVu
Y29kaW5ncworICBodHRwOi8vY2hhcmRldC5mZWVkcGFyc2VyLm9yZy8KKyogY2prY29kZWNzIGFu
ZCBpY29udl9jb2RlYywgd2hpY2ggYWRkIG1vcmUgZW5jb2RpbmdzIHRvIHRoZSBvbmVzIHN1cHBv
cnRlZAorICBieSBzdG9jayBQeXRob24uCisgIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvCisK
K0JlYXV0aWZ1bCBTb3VwIGRlZmluZXMgY2xhc3NlcyBmb3IgdHdvIG1haW4gcGFyc2luZyBzdHJh
dGVnaWVzOgorCisgKiBCZWF1dGlmdWxTdG9uZVNvdXAsIGZvciBwYXJzaW5nIFhNTCwgU0dNTCwg
b3IgeW91ciBkb21haW4tc3BlY2lmaWMKKyAgIGxhbmd1YWdlIHRoYXQga2luZCBvZiBsb29rcyBs
aWtlIFhNTC4KKworICogQmVhdXRpZnVsU291cCwgZm9yIHBhcnNpbmcgcnVuLW9mLXRoZS1taWxs
IEhUTUwgY29kZSwgYmUgaXQgdmFsaWQKKyAgIG9yIGludmFsaWQuIFRoaXMgY2xhc3MgaGFzIHdl
YiBicm93c2VyLWxpa2UgaGV1cmlzdGljcyBmb3IKKyAgIG9idGFpbmluZyBhIHNlbnNpYmxlIHBh
cnNlIHRyZWUgaW4gdGhlIGZhY2Ugb2YgY29tbW9uIEhUTUwgZXJyb3JzLgorCitCZWF1dGlmdWwg
U291cCBhbHNvIGRlZmluZXMgYSBjbGFzcyAoVW5pY29kZURhbW1pdCkgZm9yIGF1dG9kZXRlY3Rp
bmcKK3RoZSBlbmNvZGluZyBvZiBhbiBIVE1MIG9yIFhNTCBkb2N1bWVudCwgYW5kIGNvbnZlcnRp
bmcgaXQgdG8KK1VuaWNvZGUuIE11Y2ggb2YgdGhpcyBjb2RlIGlzIHRha2VuIGZyb20gTWFyayBQ
aWxncmltJ3MgVW5pdmVyc2FsIEZlZWQgUGFyc2VyLgorCitGb3IgbW9yZSB0aGFuIHlvdSBldmVy
IHdhbnRlZCB0byBrbm93IGFib3V0IEJlYXV0aWZ1bCBTb3VwLCBzZWUgdGhlCitkb2N1bWVudGF0
aW9uOgoraHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvZG9jdW1l
bnRhdGlvbi5odG1sCisKK0hlcmUsIGhhdmUgc29tZSBsZWdhbGVzZToKKworQ29weXJpZ2h0IChj
KSAyMDA0LTIwMDksIExlb25hcmQgUmljaGFyZHNvbgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgor
CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
CisgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0g
YW5kIEFsbAorICAgIE5pZ2h0IEtvc2hlciBCYWtlcnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZQorICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
K0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UsIERBTU1JVC4KKwor
IiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcnMKKworX19hdXRob3JfXyA9ICJM
ZW9uYXJkIFJpY2hhcmRzb24gKGxlb25hcmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9
ICIzLjEuMC4xIgorX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOSBMZW9u
YXJkIFJpY2hhcmRzb24iCitfX2xpY2Vuc2VfXyA9ICJOZXctc3R5bGUgQlNEIgorCitpbXBvcnQg
Y29kZWNzCitpbXBvcnQgbWFya3VwYmFzZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgcmUKK2Zyb20g
SFRNTFBhcnNlciBpbXBvcnQgSFRNTFBhcnNlciwgSFRNTFBhcnNlRXJyb3IKK3RyeToKKyAgICBm
cm9tIGh0bWxlbnRpdHlkZWZzIGltcG9ydCBuYW1lMmNvZGVwb2ludAorZXhjZXB0IEltcG9ydEVy
cm9yOgorICAgIG5hbWUyY29kZXBvaW50ID0ge30KK3RyeToKKyAgICBzZXQKK2V4Y2VwdCBOYW1l
RXJyb3I6CisgICAgZnJvbSBzZXRzIGltcG9ydCBTZXQgYXMgc2V0CisKKyNUaGVzZSBoYWNrcyBt
YWtlIEJlYXV0aWZ1bCBTb3VwIGFibGUgdG8gcGFyc2UgWE1MIHdpdGggbmFtZXNwYWNlcworbWFy
a3VwYmFzZS5fZGVjbG5hbWVfbWF0Y2ggPSByZS5jb21waWxlKHInW2EtekEtWl1bLV8uOmEtekEt
WjAtOV0qXHMqJykubWF0Y2gKKworREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcgPSAidXRmLTgiCisK
KyMgRmlyc3QsIHRoZSBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IG1hcmt1cCBlbGVtZW50cy4KKwor
ZGVmIHNvYih1bmljb2RlLCBlbmNvZGluZyk6CisgICAgIiIiUmV0dXJucyBlaXRoZXIgdGhlIGdp
dmVuIFVuaWNvZGUgc3RyaW5nIG9yIGl0cyBlbmNvZGluZy4iIiIKKyAgICBpZiBlbmNvZGluZyBp
cyBOb25lOgorICAgICAgICByZXR1cm4gdW5pY29kZQorICAgIGVsc2U6CisgICAgICAgIHJldHVy
biB1bmljb2RlLmVuY29kZShlbmNvZGluZykKKworY2xhc3MgUGFnZUVsZW1lbnQ6CisgICAgIiIi
Q29udGFpbnMgdGhlIG5hdmlnYXRpb25hbCBpbmZvcm1hdGlvbiBmb3Igc29tZSBwYXJ0IG9mIHRo
ZSBwYWdlCisgICAgKGVpdGhlciBhIHRhZyBvciBhIHBpZWNlIG9mIHRleHQpIiIiCisKKyAgICBk
ZWYgc2V0dXAoc2VsZiwgcGFyZW50PU5vbmUsIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiIiJT
ZXRzIHVwIHRoZSBpbml0aWFsIHJlbGF0aW9ucyBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQKKyAg
ICAgICAgb3RoZXIgZWxlbWVudHMuIiIiCisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50Cisg
ICAgICAgIHNlbGYucHJldmlvdXMgPSBwcmV2aW91cworICAgICAgICBzZWxmLm5leHQgPSBOb25l
CisgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nID0gTm9uZQorICAgICAgICBzZWxmLm5leHRT
aWJsaW5nID0gTm9uZQorICAgICAgICBpZiBzZWxmLnBhcmVudCBhbmQgc2VsZi5wYXJlbnQuY29u
dGVudHM6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZyA9IHNlbGYucGFyZW50LmNv
bnRlbnRzWy0xXQorICAgICAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcg
PSBzZWxmCisKKyAgICBkZWYgcmVwbGFjZVdpdGgoc2VsZiwgcmVwbGFjZVdpdGgpOgorICAgICAg
ICBvbGRQYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBteUluZGV4ID0gc2VsZi5wYXJlbnQu
Y29udGVudHMuaW5kZXgoc2VsZikKKyAgICAgICAgaWYgaGFzYXR0cihyZXBsYWNlV2l0aCwgJ3Bh
cmVudCcpIGFuZCByZXBsYWNlV2l0aC5wYXJlbnQgPT0gc2VsZi5wYXJlbnQ6CisgICAgICAgICAg
ICAjIFdlJ3JlIHJlcGxhY2luZyB0aGlzIGVsZW1lbnQgd2l0aCBvbmUgb2YgaXRzIHNpYmxpbmdz
LgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnBhcmVudC5jb250ZW50cy5pbmRleChyZXBsYWNl
V2l0aCkKKyAgICAgICAgICAgIGlmIGluZGV4IGFuZCBpbmRleCA8IG15SW5kZXg6CisgICAgICAg
ICAgICAgICAgIyBGdXJ0aGVybW9yZSwgaXQgY29tZXMgYmVmb3JlIHRoaXMgZWxlbWVudC4gVGhh
dAorICAgICAgICAgICAgICAgICMgbWVhbnMgdGhhdCB3aGVuIHdlIGV4dHJhY3QgaXQsIHRoZSBp
bmRleCBvZiB0aGlzCisgICAgICAgICAgICAgICAgIyBlbGVtZW50IHdpbGwgY2hhbmdlLgorICAg
ICAgICAgICAgICAgIG15SW5kZXggPSBteUluZGV4IC0gMQorICAgICAgICBzZWxmLmV4dHJhY3Qo
KQorICAgICAgICBvbGRQYXJlbnQuaW5zZXJ0KG15SW5kZXgsIHJlcGxhY2VXaXRoKQorCisgICAg
ZGVmIGV4dHJhY3Qoc2VsZik6CisgICAgICAgICIiIkRlc3RydWN0aXZlbHkgcmlwcyB0aGlzIGVs
ZW1lbnQgb3V0IG9mIHRoZSB0cmVlLiIiIgorICAgICAgICBpZiBzZWxmLnBhcmVudDoKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5jb250ZW50cy5yZW1vdmUo
c2VsZikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICAjRmluZCB0aGUgdHdvIGVsZW1lbnRzIHRoYXQgd291bGQgYmUgbmV4dCB0
byBlYWNoIG90aGVyIGlmCisgICAgICAgICN0aGlzIGVsZW1lbnQgKGFuZCBhbnkgY2hpbGRyZW4p
IGhhZG4ndCBiZWVuIHBhcnNlZC4gQ29ubmVjdAorICAgICAgICAjdGhlIHR3by4KKyAgICAgICAg
bGFzdENoaWxkID0gc2VsZi5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkKKyAgICAgICAgbmV4dEVsZW1l
bnQgPSBsYXN0Q2hpbGQubmV4dAorCisgICAgICAgIGlmIHNlbGYucHJldmlvdXM6CisgICAgICAg
ICAgICBzZWxmLnByZXZpb3VzLm5leHQgPSBuZXh0RWxlbWVudAorICAgICAgICBpZiBuZXh0RWxl
bWVudDoKKyAgICAgICAgICAgIG5leHRFbGVtZW50LnByZXZpb3VzID0gc2VsZi5wcmV2aW91cwor
ICAgICAgICBzZWxmLnByZXZpb3VzID0gTm9uZQorICAgICAgICBsYXN0Q2hpbGQubmV4dCA9IE5v
bmUKKworICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91
c1NpYmxpbmc6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZy5uZXh0U2libGluZyA9
IHNlbGYubmV4dFNpYmxpbmcKKyAgICAgICAgaWYgc2VsZi5uZXh0U2libGluZzoKKyAgICAgICAg
ICAgIHNlbGYubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gc2VsZi5wcmV2aW91c1NpYmxp
bmcKKyAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nID0gTm9u
ZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9sYXN0UmVjdXJzaXZlQ2hpbGQoc2Vs
Zik6CisgICAgICAgICJGaW5kcyB0aGUgbGFzdCBlbGVtZW50IGJlbmVhdGggdGhpcyBvYmplY3Qg
dG8gYmUgcGFyc2VkLiIKKyAgICAgICAgbGFzdENoaWxkID0gc2VsZgorICAgICAgICB3aGlsZSBo
YXNhdHRyKGxhc3RDaGlsZCwgJ2NvbnRlbnRzJykgYW5kIGxhc3RDaGlsZC5jb250ZW50czoKKyAg
ICAgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC5jb250ZW50c1stMV0KKyAgICAgICAgcmV0
dXJuIGxhc3RDaGlsZAorCisgICAgZGVmIGluc2VydChzZWxmLCBwb3NpdGlvbiwgbmV3Q2hpbGQp
OgorICAgICAgICBpZiAoaXNpbnN0YW5jZShuZXdDaGlsZCwgYmFzZXN0cmluZykKKyAgICAgICAg
ICAgIG9yIGlzaW5zdGFuY2UobmV3Q2hpbGQsIHVuaWNvZGUpKSBcCisgICAgICAgICAgICBhbmQg
bm90IGlzaW5zdGFuY2UobmV3Q2hpbGQsIE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICBu
ZXdDaGlsZCA9IE5hdmlnYWJsZVN0cmluZyhuZXdDaGlsZCkKKworICAgICAgICBwb3NpdGlvbiA9
ICBtaW4ocG9zaXRpb24sIGxlbihzZWxmLmNvbnRlbnRzKSkKKyAgICAgICAgaWYgaGFzYXR0cihu
ZXdDaGlsZCwgJ3BhcmVudCcpIGFuZCBuZXdDaGlsZC5wYXJlbnQgIT0gTm9uZToKKyAgICAgICAg
ICAgICMgV2UncmUgJ2luc2VydGluZycgYW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAg
ICAgICAgICAgICMgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5l
d0NoaWxkLnBhcmVudCA9PSBzZWxmOgorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5maW5k
KG5ld0NoaWxkKQorICAgICAgICAgICAgICAgIGlmIGluZGV4IGFuZCBpbmRleCA8IHBvc2l0aW9u
OgorICAgICAgICAgICAgICAgICAgICAjIEZ1cnRoZXJtb3JlIHdlJ3JlIG1vdmluZyBpdCBmdXJ0
aGVyIGRvd24gdGhlCisgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiB0aGlzIG9iamVjdCdz
IGNoaWxkcmVuLiBUaGF0IG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHdl
IGV4dHJhY3QgdGhpcyBlbGVtZW50LCBvdXIgdGFyZ2V0IGluZGV4CisgICAgICAgICAgICAgICAg
ICAgICMgd2lsbCBqdW1wIGRvd24gb25lLgorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9
IHBvc2l0aW9uIC0gMQorICAgICAgICAgICAgbmV3Q2hpbGQuZXh0cmFjdCgpCisKKyAgICAgICAg
bmV3Q2hpbGQucGFyZW50ID0gc2VsZgorICAgICAgICBwcmV2aW91c0NoaWxkID0gTm9uZQorICAg
ICAgICBpZiBwb3NpdGlvbiA9PSAwOgorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJs
aW5nID0gTm9uZQorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXMgPSBzZWxmCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBwcmV2aW91c0NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlv
bi0xXQorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNDaGls
ZAorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gbmV3
Q2hpbGQKKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzID0gcHJldmlvdXNDaGlsZC5fbGFz
dFJlY3Vyc2l2ZUNoaWxkKCkKKyAgICAgICAgaWYgbmV3Q2hpbGQucHJldmlvdXM6CisgICAgICAg
ICAgICBuZXdDaGlsZC5wcmV2aW91cy5uZXh0ID0gbmV3Q2hpbGQKKworICAgICAgICBuZXdDaGls
ZHNMYXN0RWxlbWVudCA9IG5ld0NoaWxkLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKQorCisgICAgICAg
IGlmIHBvc2l0aW9uID49IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIG5ld0NoaWxk
Lm5leHRTaWJsaW5nID0gTm9uZQorCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAg
ICAgICBwYXJlbnRzTmV4dFNpYmxpbmcgPSBOb25lCisgICAgICAgICAgICB3aGlsZSBub3QgcGFy
ZW50c05leHRTaWJsaW5nOgorICAgICAgICAgICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IHBh
cmVudC5uZXh0U2libGluZworICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQK
KyAgICAgICAgICAgICAgICBpZiBub3QgcGFyZW50OiAjIFRoaXMgaXMgdGhlIGxhc3QgZWxlbWVu
dCBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICBpZiBwYXJlbnRzTmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVs
ZW1lbnQubmV4dCA9IHBhcmVudHNOZXh0U2libGluZworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0ID0gTm9uZQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgbmV4dENoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAg
ICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5nID0gbmV4dENoaWxkCisgICAgICAgICAgICBpZiBu
ZXdDaGlsZC5uZXh0U2libGluZzoKKyAgICAgICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGlu
Zy5wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGlsZAorICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVs
ZW1lbnQubmV4dCA9IG5leHRDaGlsZAorCisgICAgICAgIGlmIG5ld0NoaWxkc0xhc3RFbGVtZW50
Lm5leHQ6CisgICAgICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0LnByZXZpb3VzID0g
bmV3Q2hpbGRzTGFzdEVsZW1lbnQKKyAgICAgICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRp
b24sIG5ld0NoaWxkKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJB
cHBlbmRzIHRoZSBnaXZlbiB0YWcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnLiIiIgorICAg
ICAgICBzZWxmLmluc2VydChsZW4oc2VsZi5jb250ZW50cyksIHRhZykKKworICAgIGRlZiBmaW5k
TmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNy
aXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJzIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVu
dC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxsTmV4dCwgbmFt
ZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorCisgICAgZGVmIGZpbmRBbGxOZXh0KHNlbGYsIG5h
bWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNo
IHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGFmdGVyIHRoaXMgVGFnIGlu
IHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0
cnMsIHRleHQsIGxpbWl0LCBzZWxmLm5leHRHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoqa3dhcmdzKQorCisgICAgZGVmIGZpbmROZXh0U2libGluZyhzZWxmLCBuYW1l
PU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJu
cyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAg
ICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3Vt
ZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9uZShzZWxmLmZpbmROZXh0U2libGlu
Z3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3
YXJncykKKworICAgIGRlZiBmaW5kTmV4dFNpYmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9
e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3
YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQg
bWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBU
YWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1l
LCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
bmV4dFNpYmxpbmdHZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZldGNoTmV4dFNpYmxpbmdzID0g
ZmluZE5leHRTaWJsaW5ncyAjIENvbXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYg
ZmluZFByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2Fy
Z3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUg
Z2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRo
ZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxs
UHJldmlvdXMsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKworICAgIGRlZiBmaW5kQWxs
UHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25l
LAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5z
IGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAg
ICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBz
ZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2VsZi5wcmV2aW91c0dlbmVy
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZldGNoUHJl
dmlvdXMgPSBmaW5kQWxsUHJldmlvdXMgIyBDb21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisg
ICAgZGVmIGZpbmRQcmV2aW91c1NpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4
dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGlu
ZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFu
ZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9maW5kT25lKHNlbGYuZmluZFByZXZpb3VzU2libGluZ3MsIG5hbWUsIGF0dHJz
LCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRl
ZiBmaW5kUHJldmlvdXNTaWJsaW5ncyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToK
KyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2libGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0
aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEgYW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4g
dGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRy
cywgdGV4dCwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlv
dXNTaWJsaW5nR2VuZXJhdG9yLCAqKmt3YXJncykKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3Mg
PSBmaW5kUHJldmlvdXNTaWJsaW5ncyAjIENvbXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAg
ICBkZWYgZmluZFBhcmVudChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCAqKmt3YXJncyk6Cisg
ICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3QgcGFyZW50IG9mIHRoaXMgVGFnIHRoYXQgbWF0
Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisgICAgICAgICMgTk9URTogV2Ug
Y2FuJ3QgdXNlIF9maW5kT25lIGJlY2F1c2UgZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQK
KyAgICAgICAgIyBzZXQgb2YgYXJndW1lbnRzLgorICAgICAgICByID0gTm9uZQorICAgICAgICBs
ID0gc2VsZi5maW5kUGFyZW50cyhuYW1lLCBhdHRycywgMSkKKyAgICAgICAgaWYgbDoKKyAgICAg
ICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgZmluZFBhcmVudHMo
c2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBwYXJlbnRzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVu
CisgICAgICAgIGNyaXRlcmlhLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5h
bWUsIGF0dHJzLCBOb25lLCBsaW1pdCwgc2VsZi5wYXJlbnRHZW5lcmF0b3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZldGNoUGFyZW50cyA9IGZpbmRQYXJl
bnRzICMgQ29tcGF0aWJpbGl0eSB3aXRoIHByZS0zLngKKworICAgICNUaGVzZSBtZXRob2RzIGRv
IHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcuCisKKyAgICBkZWYgX2ZpbmRPbmUoc2VsZiwgbWV0aG9k
LCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpOgorICAgICAgICByID0gTm9uZQorICAgICAg
ICBsID0gbWV0aG9kKG5hbWUsIGF0dHJzLCB0ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYg
bDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2Zp
bmRBbGwoc2VsZiwgbmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdz
KToKKyAgICAgICAgIkl0ZXJhdGVzIG92ZXIgYSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdz
IHRoYXQgbWF0Y2guIgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgU291cFN0cmFpbmVy
KToKKyAgICAgICAgICAgIHN0cmFpbmVyID0gbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgIyBCdWlsZCBhIFNvdXBTdHJhaW5lcgorICAgICAgICAgICAgc3RyYWluZXIgPSBTb3VwU3Ry
YWluZXIobmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgICAgICByZXN1bHRzID0gUmVz
dWx0U2V0KHN0cmFpbmVyKQorICAgICAgICBnID0gZ2VuZXJhdG9yKCkKKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpID0gZy5uZXh0KCkKKyAg
ICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gc3RyYWluZXIuc2VhcmNo
KGkpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgbGVuKHJl
c3VsdHMpID49IGxpbWl0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdHMKKworICAgICNUaGVzZSBHZW5lcmF0b3JzIGNhbiBiZSB1c2VkIHRvIG5h
dmlnYXRlIHN0YXJ0aW5nIGZyb20gYm90aAorICAgICNOYXZpZ2FibGVTdHJpbmdzIGFuZCBUYWdz
LgorICAgIGRlZiBuZXh0R2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZgorICAgICAg
ICB3aGlsZSBpOgorICAgICAgICAgICAgaSA9IGkubmV4dAorICAgICAgICAgICAgeWllbGQgaQor
CisgICAgZGVmIG5leHRTaWJsaW5nR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZgor
ICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAgaSA9IGkubmV4dFNpYmxpbmcKKyAgICAgICAg
ICAgIHlpZWxkIGkKKworICAgIGRlZiBwcmV2aW91c0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAg
aSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzCisg
ICAgICAgICAgICB5aWVsZCBpCisKKyAgICBkZWYgcHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yKHNl
bGYpOgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAgaSA9
IGkucHJldmlvdXNTaWJsaW5nCisgICAgICAgICAgICB5aWVsZCBpCisKKyAgICBkZWYgcGFyZW50
R2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpOgorICAg
ICAgICAgICAgaSA9IGkucGFyZW50CisgICAgICAgICAgICB5aWVsZCBpCisKKyAgICAjIFV0aWxp
dHkgbWV0aG9kcworICAgIGRlZiBzdWJzdGl0dXRlRW5jb2Rpbmcoc2VsZiwgc3RyLCBlbmNvZGlu
Zz1Ob25lKToKKyAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyBvciAidXRmLTgiCisgICAgICAg
IHJldHVybiBzdHIucmVwbGFjZSgiJVNPVVAtRU5DT0RJTkclIiwgZW5jb2RpbmcpCisKKyAgICBk
ZWYgdG9FbmNvZGluZyhzZWxmLCBzLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiRW5jb2Rl
cyBhbiBvYmplY3QgdG8gYSBzdHJpbmcgaW4gc29tZSBlbmNvZGluZywgb3IgdG8gVW5pY29kZS4K
KyAgICAgICAgLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgorICAgICAg
ICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKGVuY29kaW5n
KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgICAgIGlmIGVuY29k
aW5nOgorICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcyA9IHVuaWNvZGUocykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgICAgIHMgID0gc2VsZi50b0VuY29k
aW5nKHN0cihzKSwgZW5jb2RpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHMgPSB1bmljb2RlKHMpCisgICAgICAgIHJldHVybiBzCisKK2NsYXNzIE5hdmlnYWJsZVN0cmlu
Zyh1bmljb2RlLCBQYWdlRWxlbWVudCk6CisKKyAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToK
KyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IE5hdmlnYWJsZVN0cmluZy4KKworICAgICAgICBXaGVu
IHVucGlja2xpbmcgYSBOYXZpZ2FibGVTdHJpbmcsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRo
CisgICAgICAgIHRoZSBzdHJpbmcgaW4gREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcuIFRoYXQgZW5j
b2RpbmcgbmVlZHMgdG8gYmUKKyAgICAgICAgcGFzc2VkIGluIHRvIHRoZSBzdXBlcmNsYXNzJ3Mg
X19uZXdfXyBvciB0aGUgc3VwZXJjbGFzcyB3b24ndCBrbm93CisgICAgICAgIGhvdyB0byBoYW5k
bGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3Rh
bmNlKHZhbHVlLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18o
Y2xzLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlLCBE
RUZBVUxUX09VVFBVVF9FTkNPRElORykKKworICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuICh1bmljb2RlKHNlbGYpLCkKKworICAgIGRlZiBfX2dldGF0dHJfXyhz
ZWxmLCBhdHRyKToKKyAgICAgICAgIiIidGV4dC5zdHJpbmcgZ2l2ZXMgeW91IHRleHQuIFRoaXMg
aXMgZm9yIGJhY2t3YXJkcworICAgICAgICBjb21wYXRpYmlsaXR5IGZvciBOYXZpZ2FibGUqU3Ry
aW5nLCBidXQgZm9yIENEYXRhKiBpdCBsZXRzIHlvdQorICAgICAgICBnZXQgdGhlIHN0cmluZyB3
aXRob3V0IHRoZSBDRGF0YSB3cmFwcGVyLiIiIgorICAgICAgICBpZiBhdHRyID09ICdzdHJpbmcn
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJh
aXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAl
IChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikKKworICAgIGRlZiBlbmNvZGUoc2VsZiwg
ZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAgICByZXR1cm4gc2VsZi5k
ZWNvZGUoKS5lbmNvZGUoZW5jb2RpbmcpCisKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVu
Y29kaW5nKHNlbGYsIGV2ZW50dWFsRW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gc2VsZgorCitj
bGFzcyBDRGF0YShOYXZpZ2FibGVTdHJpbmcpOgorCisgICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1
YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIHUnPCFb
Q0RBVEFbJyArIHNlbGYgKyB1J11dPicKKworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKE5h
dmlnYWJsZVN0cmluZyk6CisKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNl
bGYsIGV2ZW50dWFsRW5jb2RpbmcpOgorICAgICAgICBvdXRwdXQgPSBzZWxmCisgICAgICAgIGlm
IHUnJVNPVVAtRU5DT0RJTkclJyBpbiBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxm
LnN1YnN0aXR1dGVFbmNvZGluZyhvdXRwdXQsIGV2ZW50dWFsRW5jb2RpbmcpCisgICAgICAgIHJl
dHVybiB1Jzw/JyArIG91dHB1dCArIHUnPz4nCisKK2NsYXNzIENvbW1lbnQoTmF2aWdhYmxlU3Ry
aW5nKToKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVudHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFs
RW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gdSc8IS0tJyArIHNlbGYgKyB1Jy0tPicKKworY2xh
c3MgRGVjbGFyYXRpb24oTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgZGVjb2RlR2l2ZW5FdmVu
dHVhbEVuY29kaW5nKHNlbGYsIGV2ZW50dWFsRW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gdSc8
IScgKyBzZWxmICsgdSc+JworCitjbGFzcyBUYWcoUGFnZUVsZW1lbnQpOgorCisgICAgIiIiUmVw
cmVzZW50cyBhIGZvdW5kIEhUTUwgdGFnIHdpdGggaXRzIGF0dHJpYnV0ZXMgYW5kIGNvbnRlbnRz
LiIiIgorCisgICAgZGVmIF9pbnZlcnQoaCk6CisgICAgICAgICJDaGVhcCBmdW5jdGlvbiB0byBp
bnZlcnQgYSBoYXNoLiIKKyAgICAgICAgaSA9IHt9CisgICAgICAgIGZvciBrLHYgaW4gaC5pdGVt
cygpOgorICAgICAgICAgICAgaVt2XSA9IGsKKyAgICAgICAgcmV0dXJuIGkKKworICAgIFhNTF9F
TlRJVElFU19UT19TUEVDSUFMX0NIQVJTID0geyAiYXBvcyIgOiAiJyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJxdW90IiA6ICciJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFtcCIgOiAiJiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJsdCIgOiAiPCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJndCIgOiAiPiIgfQorCisgICAgWE1MX1NQRUNJQUxfQ0hBUlNfVE9fRU5USVRJ
RVMgPSBfaW52ZXJ0KFhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJTKQorCisgICAgZGVmIF9j
b252ZXJ0RW50aXRpZXMoc2VsZiwgbWF0Y2gpOgorICAgICAgICAiIiJVc2VkIGluIGEgY2FsbCB0
byByZS5zdWIgdG8gcmVwbGFjZSBIVE1MLCBYTUwsIGFuZCBudW1lcmljCisgICAgICAgIGVudGl0
aWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIFVuaWNvZGUgY2hhcmFjdGVycy4gSWYgSFRNTAorICAg
ICAgICBlbnRpdGllcyBhcmUgYmVpbmcgY29udmVydGVkLCBhbnkgdW5yZWNvZ25pemVkIGVudGl0
aWVzIGFyZQorICAgICAgICBlc2NhcGVkLiIiIgorICAgICAgICB4ID0gbWF0Y2guZ3JvdXAoMSkK
KyAgICAgICAgaWYgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzIGFuZCB4IGluIG5hbWUyY29kZXBv
aW50OgorICAgICAgICAgICAgcmV0dXJuIHVuaWNocihuYW1lMmNvZGVwb2ludFt4XSkKKyAgICAg
ICAgZWxpZiB4IGluIHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlM6CisgICAgICAg
ICAgICBpZiBzZWxmLmNvbnZlcnRYTUxFbnRpdGllczoKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSU1t4XQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gdScmJXM7JyAlIHgKKyAgICAgICAgZWxpZiBsZW4oeCkg
PiAwIGFuZCB4WzBdID09ICcjJzoKKyAgICAgICAgICAgICMgSGFuZGxlIG51bWVyaWMgZW50aXRp
ZXMKKyAgICAgICAgICAgIGlmIGxlbih4KSA+IDEgYW5kIHhbMV0gPT0gJ3gnOgorICAgICAgICAg
ICAgICAgIHJldHVybiB1bmljaHIoaW50KHhbMjpdLCAxNikpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJldHVybiB1bmljaHIoaW50KHhbMTpdKSkKKworICAgICAgICBlbGlm
IHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXM6CisgICAgICAgICAgICByZXR1cm4gdScm
YW1wOyVzOycgJSB4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdScmJXM7JyAl
IHgKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJzZXIsIG5hbWUsIGF0dHJzPU5vbmUsIHBh
cmVudD1Ob25lLAorICAgICAgICAgICAgICAgICBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIkJh
c2ljIGNvbnN0cnVjdG9yLiIKKworICAgICAgICAjIFdlIGRvbid0IGFjdHVhbGx5IHN0b3JlIHRo
ZSBwYXJzZXIgb2JqZWN0OiB0aGF0IGxldHMgZXh0cmFjdGVkCisgICAgICAgICMgY2h1bmtzIGJl
IGdhcmJhZ2UtY29sbGVjdGVkCisgICAgICAgIHNlbGYucGFyc2VyQ2xhc3MgPSBwYXJzZXIuX19j
bGFzc19fCisgICAgICAgIHNlbGYuaXNTZWxmQ2xvc2luZyA9IHBhcnNlci5pc1NlbGZDbG9zaW5n
VGFnKG5hbWUpCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYgYXR0cnMgPT0g
Tm9uZToKKyAgICAgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJz
CisgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICBzZWxmLnNldHVwKHBhcmVudCwg
cHJldmlvdXMpCisgICAgICAgIHNlbGYuaGlkZGVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb250
YWluc1N1YnN0aXR1dGlvbnMgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRp
ZXMgPSBwYXJzZXIuY29udmVydEhUTUxFbnRpdGllcworICAgICAgICBzZWxmLmNvbnZlcnRYTUxF
bnRpdGllcyA9IHBhcnNlci5jb252ZXJ0WE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5lc2NhcGVV
bnJlY29nbml6ZWRFbnRpdGllcyA9IHBhcnNlci5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcwor
CisgICAgICAgIGRlZiBjb252ZXJ0KGt2YWwpOgorICAgICAgICAgICAgIkNvbnZlcnRzIEhUTUws
IFhNTCBhbmQgbnVtZXJpYyBlbnRpdGllcyBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLiIKKyAgICAg
ICAgICAgIGssIHZhbCA9IGt2YWwKKyAgICAgICAgICAgIGlmIHZhbCBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIHJldHVybiBrdmFsCisgICAgICAgICAgICByZXR1cm4gKGssIHJlLnN1YigiJigj
XGQrfCN4WzAtOWEtZkEtRl0rfFx3Kyk7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2NvbnZlcnRFbnRpdGllcywgdmFsKSkKKyAgICAgICAgc2VsZi5hdHRycyA9IG1hcChj
b252ZXJ0LCBzZWxmLmF0dHJzKQorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9u
ZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUg
Zm9yIHRoZSB0YWcsIG9yCisgICAgICAgIHRoZSB2YWx1ZSBnaXZlbiBmb3IgJ2RlZmF1bHQnIGlm
IGl0IGRvZXNuJ3QgaGF2ZSB0aGF0CisgICAgICAgIGF0dHJpYnV0ZS4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2dldEF0dHJNYXAoKS5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgZGVmIGhhc19r
ZXkoc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldEF0dHJNYXAoKS5oYXNfa2V5
KGtleSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiIiJ0YWdb
a2V5XSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFn
LAorICAgICAgICBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBpdCdzIG5vdCB0aGVyZS4iIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2dldEF0dHJNYXAoKVtrZXldCisKKyAgICBkZWYgX19pdGVy
X18oc2VsZik6CisgICAgICAgICJJdGVyYXRpbmcgb3ZlciBhIHRhZyBpdGVyYXRlcyBvdmVyIGl0
cyBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuY29udGVudHMpCisKKyAgICBk
ZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgIlRoZSBsZW5ndGggb2YgYSB0YWcgaXMgdGhlIGxl
bmd0aCBvZiBpdHMgbGlzdCBvZiBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5j
b250ZW50cykKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVy
biB4IGluIHNlbGYuY29udGVudHMKKworICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAg
ICAgIkEgdGFnIGlzIG5vbi1Ob25lIGV2ZW4gaWYgaXQgaGFzIG5vIGNvbnRlbnRzLiIKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToK
KyAgICAgICAgIiIiU2V0dGluZyB0YWdba2V5XSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScg
YXR0cmlidXRlIGZvciB0aGUKKyAgICAgICAgdGFnLiIiIgorICAgICAgICBzZWxmLl9nZXRBdHRy
TWFwKCkKKyAgICAgICAgc2VsZi5hdHRyTWFwW2tleV0gPSB2YWx1ZQorICAgICAgICBmb3VuZCA9
IEZhbHNlCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmF0dHJzKSk6CisgICAg
ICAgICAgICBpZiBzZWxmLmF0dHJzW2ldWzBdID09IGtleToKKyAgICAgICAgICAgICAgICBzZWxm
LmF0dHJzW2ldID0gKGtleSwgdmFsdWUpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisg
ICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIHNlbGYuYXR0cnMuYXBwZW5kKChrZXks
IHZhbHVlKSkKKyAgICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpW2tleV0gPSB2YWx1ZQorCisgICAg
ZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICJEZWxldGluZyB0YWdba2V5XSBk
ZWxldGVzIGFsbCAna2V5JyBhdHRyaWJ1dGVzIGZvciB0aGUgdGFnLiIKKyAgICAgICAgZm9yIGl0
ZW0gaW4gc2VsZi5hdHRyczoKKyAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0ga2V5OgorICAgICAg
ICAgICAgICAgIHNlbGYuYXR0cnMucmVtb3ZlKGl0ZW0pCisgICAgICAgICAgICAgICAgI1dlIGRv
bid0IGJyZWFrIGJlY2F1c2UgYmFkIEhUTUwgY2FuIGRlZmluZSB0aGUgc2FtZQorICAgICAgICAg
ICAgICAgICNhdHRyaWJ1dGUgbXVsdGlwbGUgdGltZXMuCisgICAgICAgICAgICBzZWxmLl9nZXRB
dHRyTWFwKCkKKyAgICAgICAgICAgIGlmIHNlbGYuYXR0ck1hcC5oYXNfa2V5KGtleSk6CisgICAg
ICAgICAgICAgICAgZGVsIHNlbGYuYXR0ck1hcFtrZXldCisKKyAgICBkZWYgX19jYWxsX18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ2FsbGluZyBhIHRhZyBsaWtlIGEgZnVu
Y3Rpb24gaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBpdHMKKyAgICAgICAgZmluZEFsbCgpIG1ldGhv
ZC4gRWcuIHRhZygnYScpIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgQSB0YWdzCisgICAgICAg
IGZvdW5kIHdpdGhpbiB0aGlzIHRhZy4iIiIKKyAgICAgICAgcmV0dXJuIGFwcGx5KHNlbGYuZmlu
ZEFsbCwgYXJncywga3dhcmdzKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHRhZyk6Cisg
ICAgICAgICNwcmludCAiR2V0YXR0ciAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKyAg
ICAgICAgaWYgbGVuKHRhZykgPiAzIGFuZCB0YWcucmZpbmQoJ1RhZycpID09IGxlbih0YWcpLTM6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRhZ1s6LTNdKQorICAgICAgICBlbGlmIHRh
Zy5maW5kKCdfXycpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRhZykKKyAg
ICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRl
ICclcyciICUgKHNlbGYuX19jbGFzc19fLCB0YWcpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBoYXMgdGhlIHNhbWUg
bmFtZSwgdGhlIHNhbWUgYXR0cmlidXRlcywKKyAgICAgICAgYW5kIHRoZSBzYW1lIGNvbnRlbnRz
IChyZWN1cnNpdmVseSkgYXMgdGhlIGdpdmVuIHRhZy4KKworICAgICAgICBOT1RFOiByaWdodCBu
b3cgdGhpcyB3aWxsIHJldHVybiBmYWxzZSBpZiB0d28gdGFncyBoYXZlIHRoZQorICAgICAgICBz
YW1lIGF0dHJpYnV0ZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIuIFNob3VsZCB0aGlzIGJlIGZpeGVk
PyIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihvdGhlciwgJ25hbWUnKSBvciBub3QgaGFzYXR0
cihvdGhlciwgJ2F0dHJzJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9yIHNl
bGYubmFtZSAhPSBvdGhlci5uYW1lIG9yIHNlbGYuYXR0cnMgIT0gb3RoZXIuYXR0cnMgb3IgbGVu
KHNlbGYpICE9IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
Zm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuY29udGVudHMpKToKKyAgICAgICAgICAgIGlmIHNl
bGYuY29udGVudHNbaV0gIT0gb3RoZXIuY29udGVudHNbaV06CisgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBpcyBub3QgaWRlbnRp
Y2FsIHRvIHRoZSBvdGhlciB0YWcsCisgICAgICAgIGFzIGRlZmluZWQgaW4gX19lcV9fLiIiIgor
ICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxm
LCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgICIiIlJlbmRlcnMg
dGhpcyB0YWcgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRlY29kZShldmVu
dHVhbEVuY29kaW5nPWVuY29kaW5nKQorCisgICAgQkFSRV9BTVBFUlNBTkRfT1JfQlJBQ0tFVCA9
IHJlLmNvbXBpbGUoIihbPD5dfCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArICImKD8hI1xkKzt8I3hbMC05YS1mQS1GXSs7fFx3KzspIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIikiKQorCisgICAgZGVmIF9zdWJfZW50
aXR5KHNlbGYsIHgpOgorICAgICAgICAiIiJVc2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24g
dG8gc3Vic3RpdHV0ZSB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgWE1MIGVudGl0eSBmb3IgYW4g
WE1MIHNwZWNpYWwgY2hhcmFjdGVyLiIiIgorICAgICAgICByZXR1cm4gIiYiICsgc2VsZi5YTUxf
U1BFQ0lBTF9DSEFSU19UT19FTlRJVElFU1t4Lmdyb3VwKDApWzBdXSArICI7IgorCisgICAgZGVm
IF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoKQorCisgICAg
ZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZSgpCisKKyAgICBk
ZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAg
ICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICByZXR1
cm4gc2VsZi5kZWNvZGUocHJldHR5UHJpbnQsIGluZGVudExldmVsLCBlbmNvZGluZykuZW5jb2Rl
KGVuY29kaW5nKQorCisgICAgZGVmIGRlY29kZShzZWxmLCBwcmV0dHlQcmludD1GYWxzZSwgaW5k
ZW50TGV2ZWw9MCwKKyAgICAgICAgICAgICAgIGV2ZW50dWFsRW5jb2Rpbmc9REVGQVVMVF9PVVRQ
VVRfRU5DT0RJTkcpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIG9yIFVuaWNvZGUgcmVw
cmVzZW50YXRpb24gb2YgdGhpcyB0YWcgYW5kCisgICAgICAgIGl0cyBjb250ZW50cy4gVG8gZ2V0
IFVuaWNvZGUsIHBhc3MgTm9uZSBmb3IgZW5jb2RpbmcuIiIiCisKKyAgICAgICAgYXR0cnMgPSBb
XQorICAgICAgICBpZiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIHNl
bGYuYXR0cnM6CisgICAgICAgICAgICAgICAgZm10ID0gJyVzPSIlcyInCisgICAgICAgICAgICAg
ICAgaWYgaXNTdHJpbmcodmFsKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29udGFp
bnNTdWJzdGl0dXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlbnR1YWxFbmNv
ZGluZyBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kICclU09VUC1FTkNP
RElORyUnIGluIHZhbCk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzZWxmLnN1YnN0
aXR1dGVFbmNvZGluZyh2YWwsIGV2ZW50dWFsRW5jb2RpbmcpCisKKyAgICAgICAgICAgICAgICAg
ICAgIyBUaGUgYXR0cmlidXRlIHZhbHVlIGVpdGhlcjoKKyAgICAgICAgICAgICAgICAgICAgIwor
ICAgICAgICAgICAgICAgICAgICAjICogQ29udGFpbnMgbm8gZW1iZWRkZWQgZG91YmxlIHF1b3Rl
cyBvciBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICAgTm8gcHJvYmxlbTog
d2UgZW5jbG9zZSBpdCBpbiBkb3VibGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICog
Q29udGFpbnMgZW1iZWRkZWQgc2luZ2xlIHF1b3Rlcy4gTm8gcHJvYmxlbToKKyAgICAgICAgICAg
ICAgICAgICAgIyAgIGRvdWJsZSBxdW90ZXMgd29yayBoZXJlIHRvby4KKyAgICAgICAgICAgICAg
ICAgICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMuIE5vIHByb2JsZW06Cisg
ICAgICAgICAgICAgICAgICAgICMgICB3ZSBlbmNsb3NlIGl0IGluIHNpbmdsZSBxdW90ZXMuCisg
ICAgICAgICAgICAgICAgICAgICMgKiBFbWJlZHMgYm90aCBzaW5nbGUgX2FuZF8gZG91YmxlIHF1
b3Rlcy4gVGhpcworICAgICAgICAgICAgICAgICAgICAjICAgY2FuJ3QgaGFwcGVuIG5hdHVyYWxs
eSwgYnV0IGl0IGNhbiBoYXBwZW4gaWYKKyAgICAgICAgICAgICAgICAgICAgIyAgIHlvdSBtb2Rp
ZnkgYW4gYXR0cmlidXRlIHZhbHVlIGFmdGVyIHBhcnNpbmcKKyAgICAgICAgICAgICAgICAgICAg
IyAgIHRoZSBkb2N1bWVudC4gTm93IHdlIGhhdmUgYSBiaXQgb2YgYQorICAgICAgICAgICAgICAg
ICAgICAjICAgcHJvYmxlbS4gV2Ugc29sdmUgaXQgYnkgZW5jbG9zaW5nIHRoZQorICAgICAgICAg
ICAgICAgICAgICAjICAgYXR0cmlidXRlIGluIHNpbmdsZSBxdW90ZXMsIGFuZCBlc2NhcGluZyBh
bnkKKyAgICAgICAgICAgICAgICAgICAgIyAgIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgdG8gWE1M
IGVudGl0aWVzLgorICAgICAgICAgICAgICAgICAgICBpZiAnIicgaW4gdmFsOgorICAgICAgICAg
ICAgICAgICAgICAgICAgZm10ID0gIiVzPSclcyciCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAiJyIgaW4gdmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogcmVwbGFj
ZSB3aXRoIGFwb3Mgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwcm9wcmlh
dGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIiciLCAi
JnNxdW90OyIpCisKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgd2UncmUgb2theSB3L3IvdCBx
dW90ZXMuIEJ1dCB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgbWln
aHQgYWxzbyBjb250YWluIGFuZ2xlIGJyYWNrZXRzLCBvcgorICAgICAgICAgICAgICAgICAgICAj
IGFtcGVyc2FuZHMgdGhhdCBhcmVuJ3QgcGFydCBvZiBlbnRpdGllcy4gV2UgbmVlZAorICAgICAg
ICAgICAgICAgICAgICAjIHRvIGVzY2FwZSB0aG9zZSB0byBYTUwgZW50aXRpZXMgdG9vLgorICAg
ICAgICAgICAgICAgICAgICB2YWwgPSBzZWxmLkJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQuc3Vi
KHNlbGYuX3N1Yl9lbnRpdHksIHZhbCkKKyAgICAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToK
KyAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgYm9vbGVhbiBhdHRyaWJ1dGVzLgorICAgICAg
ICAgICAgICAgICAgICBkZWNvZGVkID0ga2V5CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgZGVjb2RlZCA9IGZtdCAlIChrZXksIHZhbCkKKyAgICAgICAgICAgICAg
ICBhdHRycy5hcHBlbmQoZGVjb2RlZCkKKyAgICAgICAgY2xvc2UgPSAnJworICAgICAgICBjbG9z
ZVRhZyA9ICcnCisgICAgICAgIGlmIHNlbGYuaXNTZWxmQ2xvc2luZzoKKyAgICAgICAgICAgIGNs
b3NlID0gJyAvJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xvc2VUYWcgPSAnPC8lcz4n
ICUgc2VsZi5uYW1lCisKKyAgICAgICAgaW5kZW50VGFnLCBpbmRlbnRDb250ZW50cyA9IDAsIDAK
KyAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICBpbmRlbnRUYWcgPSBpbmRlbnRM
ZXZlbAorICAgICAgICAgICAgc3BhY2UgPSAoJyAnICogKGluZGVudFRhZy0xKSkKKyAgICAgICAg
ICAgIGluZGVudENvbnRlbnRzID0gaW5kZW50VGFnICsgMQorICAgICAgICBjb250ZW50cyA9IHNl
bGYuZGVjb2RlQ29udGVudHMocHJldHR5UHJpbnQsIGluZGVudENvbnRlbnRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnR1YWxFbmNvZGluZykKKyAgICAgICAg
aWYgc2VsZi5oaWRkZW46CisgICAgICAgICAgICBzID0gY29udGVudHMKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHMgPSBbXQorICAgICAgICAgICAgYXR0cmlidXRlU3RyaW5nID0gJycKKyAg
ICAgICAgICAgIGlmIGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVN0cmluZyA9ICcg
JyArICcgJy5qb2luKGF0dHJzKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZCgnPCVzJXMlcz4n
ICUgKHNlbGYubmFtZSwgYXR0cmlidXRlU3RyaW5nLCBjbG9zZSkpCisgICAgICAgICAgICBpZiBw
cmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAg
cy5hcHBlbmQoY29udGVudHMpCisgICAgICAgICAgICBpZiBwcmV0dHlQcmludCBhbmQgY29udGVu
dHMgYW5kIGNvbnRlbnRzWy0xXSAhPSAiXG4iOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJc
biIpCisgICAgICAgICAgICBpZiBwcmV0dHlQcmludCBhbmQgY2xvc2VUYWc6CisgICAgICAgICAg
ICAgICAgcy5hcHBlbmQoc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZChjbG9zZVRhZykKKyAg
ICAgICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjbG9zZVRhZyBhbmQgc2VsZi5uZXh0U2libGlu
ZzoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgcyA9ICcnLmpv
aW4ocykKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBkZWNvbXBvc2Uoc2VsZik6CisgICAg
ICAgICIiIlJlY3Vyc2l2ZWx5IGRlc3Ryb3lzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRyZWUuIiIi
CisgICAgICAgIGNvbnRlbnRzID0gW2kgZm9yIGkgaW4gc2VsZi5jb250ZW50c10KKyAgICAgICAg
Zm9yIGkgaW4gY29udGVudHM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGksIFRhZyk6Cisg
ICAgICAgICAgICAgICAgaS5kZWNvbXBvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBpLmV4dHJhY3QoKQorICAgICAgICBzZWxmLmV4dHJhY3QoKQorCisgICAgZGVmIHBy
ZXR0aWZ5KHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuZW5jb2RlKGVuY29kaW5nLCBUcnVlKQorCisgICAgZGVmIGVuY29kZUNvbnRl
bnRzKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAg
ICAgICAgICAgICBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCk6CisgICAgICAgIHJl
dHVybiBzZWxmLmRlY29kZUNvbnRlbnRzKHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCkuZW5jb2Rl
KGVuY29kaW5nKQorCisgICAgZGVmIGRlY29kZUNvbnRlbnRzKHNlbGYsIHByZXR0eVByaW50PUZh
bHNlLCBpbmRlbnRMZXZlbD0wLAorICAgICAgICAgICAgICAgICAgICAgICBldmVudHVhbEVuY29k
aW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29u
dGVudHMgb2YgdGhpcyB0YWcgYXMgYSBzdHJpbmcgaW4gdGhlIGdpdmVuCisgICAgICAgIGVuY29k
aW5nLiBJZiBlbmNvZGluZyBpcyBOb25lLCByZXR1cm5zIGEgVW5pY29kZSBzdHJpbmcuLiIiIgor
ICAgICAgICBzPVtdCisgICAgICAgIGZvciBjIGluIHNlbGY6CisgICAgICAgICAgICB0ZXh0ID0g
Tm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjLCBOYXZpZ2FibGVTdHJpbmcpOgorICAg
ICAgICAgICAgICAgIHRleHQgPSBjLmRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhldmVudHVh
bEVuY29kaW5nKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGMsIFRhZyk6CisgICAgICAg
ICAgICAgICAgcy5hcHBlbmQoYy5kZWNvZGUocHJldHR5UHJpbnQsIGluZGVudExldmVsLCBldmVu
dHVhbEVuY29kaW5nKSkKKyAgICAgICAgICAgIGlmIHRleHQgYW5kIHByZXR0eVByaW50OgorICAg
ICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHRleHQ6Cisg
ICAgICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAgICAgIHMuYXBw
ZW5kKCIgIiAqIChpbmRlbnRMZXZlbC0xKSkKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCh0ZXh0
KQorICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAgICAgICAgICAgICBz
LmFwcGVuZCgiXG4iKQorICAgICAgICByZXR1cm4gJycuam9pbihzKQorCisgICAgI1NvdXAgbWV0
aG9kcworCisgICAgZGVmIGZpbmQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgcmVjdXJzaXZl
PVRydWUsIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJl
dHVybiBvbmx5IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIFRhZyBtYXRjaGluZyB0aGUgZ2l2ZW4K
KyAgICAgICAgY3JpdGVyaWEuIiIiCisgICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBzZWxm
LmZpbmRBbGwobmFtZSwgYXR0cnMsIHJlY3Vyc2l2ZSwgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAg
ICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorICAgIGZp
bmRDaGlsZCA9IGZpbmQKKworICAgIGRlZiBmaW5kQWxsKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9
e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgbGltaXQ9Tm9u
ZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJFeHRyYWN0cyBhIGxpc3Qgb2YgVGFnIG9iamVjdHMg
dGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuICBZb3UgY2FuIHNwZWNpZnkg
dGhlIG5hbWUgb2YgdGhlIFRhZyBhbmQgYW55CisgICAgICAgIGF0dHJpYnV0ZXMgeW91IHdhbnQg
dGhlIFRhZyB0byBoYXZlLgorCisgICAgICAgIFRoZSB2YWx1ZSBvZiBhIGtleS12YWx1ZSBwYWly
IGluIHRoZSAnYXR0cnMnIG1hcCBjYW4gYmUgYQorICAgICAgICBzdHJpbmcsIGEgbGlzdCBvZiBz
dHJpbmdzLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG9yIGEKKyAgICAgICAgY2FsbGFi
bGUgdGhhdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUKKyAg
ICAgICAgc3RyaW5nIG1hdGNoZXMgZm9yIHNvbWUgY3VzdG9tIGRlZmluaXRpb24gb2YgJ21hdGNo
ZXMnLiBUaGUKKyAgICAgICAgc2FtZSBpcyB0cnVlIG9mIHRoZSB0YWcgbmFtZS4iIiIKKyAgICAg
ICAgZ2VuZXJhdG9yID0gc2VsZi5yZWN1cnNpdmVDaGlsZEdlbmVyYXRvcgorICAgICAgICBpZiBu
b3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5jaGlsZEdlbmVyYXRv
cgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQs
IGdlbmVyYXRvciwgKiprd2FyZ3MpCisgICAgZmluZENoaWxkcmVuID0gZmluZEFsbAorCisgICAg
IyBQcmUtMy54IGNvbXBhdGliaWxpdHkgbWV0aG9kcy4gV2lsbCBnbyBhd2F5IGluIDQuMC4KKyAg
ICBmaXJzdCA9IGZpbmQKKyAgICBmZXRjaCA9IGZpbmRBbGwKKworICAgIGRlZiBmZXRjaFRleHQo
c2VsZiwgdGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgbGltaXQ9Tm9uZSk6CisgICAgICAgIHJl
dHVybiBzZWxmLmZpbmRBbGwodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlLCBsaW1pdD1s
aW1pdCkKKworICAgIGRlZiBmaXJzdFRleHQoc2VsZiwgdGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJz
aXZlKQorCisgICAgIyAzLnggY29tcGF0aWJpbGl0eSBtZXRob2RzLiBXaWxsIGdvIGF3YXkgaW4g
NC4wLgorICAgIGRlZiByZW5kZXJDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBV
VF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGlu
ZGVudExldmVsPTApOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuZGVjb2RlQ29udGVudHMocHJldHR5UHJpbnQsIGluZGVudExldmVsLCBlbmNv
ZGluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmVuY29kZUNvbnRl
bnRzKGVuY29kaW5nLCBwcmV0dHlQcmludCwgaW5kZW50TGV2ZWwpCisKKworICAgICNQcml2YXRl
IG1ldGhvZHMKKworICAgIGRlZiBfZ2V0QXR0ck1hcChzZWxmKToKKyAgICAgICAgIiIiSW5pdGlh
bGl6ZXMgYSBtYXAgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0YWcncyBhdHRyaWJ1dGVzLAorICAg
ICAgICBpZiBub3QgYWxyZWFkeSBpbml0aWFsaXplZC4iIiIKKyAgICAgICAgaWYgbm90IGdldGF0
dHIoc2VsZiwgJ2F0dHJNYXAnKToKKyAgICAgICAgICAgIHNlbGYuYXR0ck1hcCA9IHt9CisgICAg
ICAgICAgICBmb3IgKGtleSwgdmFsdWUpIGluIHNlbGYuYXR0cnM6CisgICAgICAgICAgICAgICAg
c2VsZi5hdHRyTWFwW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc2VsZi5hdHRyTWFwCisK
KyAgICAjR2VuZXJhdG9yIG1ldGhvZHMKKyAgICBkZWYgcmVjdXJzaXZlQ2hpbGRHZW5lcmF0b3Io
c2VsZik6CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBy
YWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHN0b3BOb2RlID0gc2VsZi5fbGFzdFJlY3Vyc2l2
ZUNoaWxkKCkubmV4dAorICAgICAgICBjdXJyZW50ID0gc2VsZi5jb250ZW50c1swXQorICAgICAg
ICB3aGlsZSBjdXJyZW50IGlzIG5vdCBzdG9wTm9kZToKKyAgICAgICAgICAgIHlpZWxkIGN1cnJl
bnQKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQKKworICAgIGRlZiBjaGlsZEdl
bmVyYXRvcihzZWxmKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAg
ICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVu
dHNbMF0KKyAgICAgICAgd2hpbGUgY3VycmVudDoKKyAgICAgICAgICAgIHlpZWxkIGN1cnJlbnQK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRTaWJsaW5nCisgICAgICAgIHJhaXNl
IFN0b3BJdGVyYXRpb24KKworIyBOZXh0LCBhIGNvdXBsZSBjbGFzc2VzIHRvIHJlcHJlc2VudCBx
dWVyaWVzIGFuZCB0aGVpciByZXN1bHRzLgorY2xhc3MgU291cFN0cmFpbmVyOgorICAgICIiIkVu
Y2Fwc3VsYXRlcyBhIG51bWJlciBvZiB3YXlzIG9mIG1hdGNoaW5nIGEgbWFya3VwIGVsZW1lbnQg
KHRhZyBvcgorICAgIHRleHQpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9u
ZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBu
YW1lCisgICAgICAgIGlmIGlzU3RyaW5nKGF0dHJzKToKKyAgICAgICAgICAgIGt3YXJnc1snY2xh
c3MnXSA9IGF0dHJzCisgICAgICAgICAgICBhdHRycyA9IE5vbmUKKyAgICAgICAgaWYga3dhcmdz
OgorICAgICAgICAgICAgaWYgYXR0cnM6CisgICAgICAgICAgICAgICAgYXR0cnMgPSBhdHRycy5j
b3B5KCkKKyAgICAgICAgICAgICAgICBhdHRycy51cGRhdGUoa3dhcmdzKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBhdHRycyA9IGt3YXJncworICAgICAgICBzZWxmLmF0dHJz
ID0gYXR0cnMKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorCisgICAgZGVmIF9fc3RyX18oc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYudGV4dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiJXN8JXMiICUgKHNlbGYubmFtZSwg
c2VsZi5hdHRycykKKworICAgIGRlZiBzZWFyY2hUYWcoc2VsZiwgbWFya3VwTmFtZT1Ob25lLCBt
YXJrdXBBdHRycz17fSk6CisgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICBtYXJrdXAgPSBO
b25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwTmFtZSwgVGFnKToKKyAgICAgICAgICAg
IG1hcmt1cCA9IG1hcmt1cE5hbWUKKyAgICAgICAgICAgIG1hcmt1cEF0dHJzID0gbWFya3VwCisg
ICAgICAgIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhID0gY2FsbGFibGUoc2VsZi5uYW1lKSBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShtYXJrdXBO
YW1lLCBUYWcpCisKKyAgICAgICAgaWYgKG5vdCBzZWxmLm5hbWUpIFwKKyAgICAgICAgICAgICAg
IG9yIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhIFwKKyAgICAgICAgICAgICAgIG9yIChtYXJrdXAg
YW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLm5hbWUpKSBcCisgICAgICAgICAgICAgICBv
ciAobm90IG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXBOYW1lLCBzZWxmLm5hbWUpKToK
KyAgICAgICAgICAgIGlmIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhOgorICAgICAgICAgICAgICAg
IG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1cE5hbWUsIG1hcmt1cEF0dHJzKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBtYXJr
dXBBdHRyTWFwID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBhdHRyLCBtYXRjaEFnYWluc3Qg
aW4gc2VsZi5hdHRycy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbWFya3Vw
QXR0ck1hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cEF0dHJz
LCAnZ2V0Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IG1h
cmt1cEF0dHJzCisgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0ge30KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3Igayx2IGluIG1hcmt1cEF0dHJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrdXBBdHRyTWFwW2tdID0gdgorICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUg
PSBtYXJrdXBBdHRyTWFwLmdldChhdHRyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5fbWF0Y2hlcyhhdHRyVmFsdWUsIG1hdGNoQWdhaW5zdCk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgbWFya3VwOgorICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IG1hcmt1cAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gbWFya3VwTmFtZQorICAgICAgICByZXR1cm4gZm91bmQKKworICAg
IGRlZiBzZWFyY2goc2VsZiwgbWFya3VwKToKKyAgICAgICAgI3ByaW50ICdsb29raW5nIGZvciAl
cyBpbiAlcycgJSAoc2VsZiwgbWFya3VwKQorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAg
IyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRlbXMsIHNjYW4gaXQgZm9yIGEgdGV4dCBlbGVtZW50IHRo
YXQKKyAgICAgICAgIyBtYXRjaGVzLgorICAgICAgICBpZiBpc0xpc3QobWFya3VwKSBhbmQgbm90
IGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbWFy
a3VwOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgTmF2aWdhYmxlU3Ry
aW5nKSBcCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNlYXJjaChlbGVtZW50KToK
KyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICMgSWYgaXQncyBhIFRhZywgbWFrZSBzdXJlIGl0cyBuYW1lIG9yIGF0
dHJpYnV0ZXMgbWF0Y2guCisgICAgICAgICMgRG9uJ3QgYm90aGVyIHdpdGggVGFncyBpZiB3ZSdy
ZSBzZWFyY2hpbmcgZm9yIHRleHQuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRh
Zyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi50ZXh0OgorICAgICAgICAgICAgICAgIGZvdW5k
ID0gc2VsZi5zZWFyY2hUYWcobWFya3VwKQorICAgICAgICAjIElmIGl0J3MgdGV4dCwgbWFrZSBz
dXJlIHRoZSB0ZXh0IG1hdGNoZXMuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIE5h
dmlnYWJsZVN0cmluZykgb3IgXAorICAgICAgICAgICAgICAgICBpc1N0cmluZyhtYXJrdXApOgor
ICAgICAgICAgICAgaWYgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYudGV4dCk6CisgICAgICAg
ICAgICAgICAgZm91bmQgPSBtYXJrdXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbiwgIkkgZG9uJ3Qga25vdyBob3cgdG8gbWF0Y2ggYWdhaW5zdCBhICVzIiBcCisg
ICAgICAgICAgICAgICAgICAlIG1hcmt1cC5fX2NsYXNzX18KKyAgICAgICAgcmV0dXJuIGZvdW5k
CisKKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgbWFya3VwLCBtYXRjaEFnYWluc3QpOgorICAgICAg
ICAjcHJpbnQgIk1hdGNoaW5nICVzIGFnYWluc3QgJXMiICUgKG1hcmt1cCwgbWF0Y2hBZ2FpbnN0
KQorICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBpZiBtYXRjaEFnYWluc3QgPT0gVHJ1
ZSBhbmQgdHlwZShtYXRjaEFnYWluc3QpID09IHR5cGVzLkJvb2xlYW5UeXBlOgorICAgICAgICAg
ICAgcmVzdWx0ID0gbWFya3VwICE9IE5vbmUKKyAgICAgICAgZWxpZiBjYWxsYWJsZShtYXRjaEFn
YWluc3QpOgorICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hBZ2FpbnN0KG1hcmt1cCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICNDdXN0b20gbWF0Y2ggbWV0aG9kcyB0YWtlIHRoZSB0YWcg
YXMgYW4gYXJndW1lbnQsIGJ1dCBhbGwKKyAgICAgICAgICAgICNvdGhlciB3YXlzIG9mIG1hdGNo
aW5nIG1hdGNoIHRoZSB0YWcgbmFtZSBhcyBhIHN0cmluZy4KKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1l
CisgICAgICAgICAgICBpZiBtYXJrdXAgaXMgbm90IE5vbmUgYW5kIG5vdCBpc1N0cmluZyhtYXJr
dXApOgorICAgICAgICAgICAgICAgIG1hcmt1cCA9IHVuaWNvZGUobWFya3VwKQorICAgICAgICAg
ICAgI05vdyB3ZSBrbm93IHRoYXQgY2h1bmsgaXMgZWl0aGVyIGEgc3RyaW5nLCBvciBOb25lLgor
ICAgICAgICAgICAgaWYgaGFzYXR0cihtYXRjaEFnYWluc3QsICdtYXRjaCcpOgorICAgICAgICAg
ICAgICAgICMgSXQncyBhIHJlZ2V4cCBvYmplY3QuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bWFya3VwIGFuZCBtYXRjaEFnYWluc3Quc2VhcmNoKG1hcmt1cCkKKyAgICAgICAgICAgIGVsaWYg
KGlzTGlzdChtYXRjaEFnYWluc3QpCisgICAgICAgICAgICAgICAgICBhbmQgKG1hcmt1cCBpcyBu
b3QgTm9uZSBvciBub3QgaXNTdHJpbmcobWF0Y2hBZ2FpbnN0KSkpOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1hcmt1cCBpbiBtYXRjaEFnYWluc3QKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0
cihtYXRjaEFnYWluc3QsICdpdGVtcycpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1
cC5oYXNfa2V5KG1hdGNoQWdhaW5zdCkKKyAgICAgICAgICAgIGVsaWYgbWF0Y2hBZ2FpbnN0IGFu
ZCBpc1N0cmluZyhtYXJrdXApOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3Vw
LCB1bmljb2RlKToKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hBZ2FpbnN0ID0gdW5pY29kZSht
YXRjaEFnYWluc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hBZ2FpbnN0ID0gc3RyKG1hdGNoQWdhaW5zdCkKKworICAgICAgICAgICAgaWYgbm90IHJl
c3VsdDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXRjaEFnYWluc3QgPT0gbWFya3VwCisg
ICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgUmVzdWx0U2V0KGxpc3QpOgorICAgICIiIkEg
UmVzdWx0U2V0IGlzIGp1c3QgYSBsaXN0IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIFNvdXBTdHJh
aW5lcgorICAgIHRoYXQgY3JlYXRlZCBpdC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291
cmNlKToKKyAgICAgICAgbGlzdC5fX2luaXRfXyhbXSkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBz
b3VyY2UKKworIyBOb3csIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4KKworZGVmIGlzTGlzdChsKToK
KyAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdGhhdCB3b3JrcyB3aXRoIGFsbCAyLnggdmVyc2lv
bnMgb2YgUHl0aG9uCisgICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHNvbWV0aGluZyBp
cyBsaXN0bGlrZS4iIiIKKyAgICByZXR1cm4gKChoYXNhdHRyKGwsICdfX2l0ZXJfXycpIGFuZCBu
b3QgaXNTdHJpbmcobCkpCisgICAgICAgICAgICBvciAodHlwZShsKSBpbiAodHlwZXMuTGlzdFR5
cGUsIHR5cGVzLlR1cGxlVHlwZSkpKQorCitkZWYgaXNTdHJpbmcocyk6CisgICAgIiIiQ29udmVu
aWVuY2UgbWV0aG9kIHRoYXQgd29ya3Mgd2l0aCBhbGwgMi54IHZlcnNpb25zIG9mIFB5dGhvbgor
ICAgIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBzb21ldGhpbmcgaXMgc3RyaW5nbGlrZS4i
IiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpIG9yIGlz
aW5zdGFuY2UocywgYmFzZXN0cmluZykKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBy
ZXR1cm4gaXNpbnN0YW5jZShzLCBzdHIpCisKK2RlZiBidWlsZFRhZ01hcChkZWZhdWx0LCAqYXJn
cyk6CisgICAgIiIiVHVybnMgYSBsaXN0IG9mIG1hcHMsIGxpc3RzLCBvciBzY2FsYXJzIGludG8g
YSBzaW5nbGUgbWFwLgorICAgIFVzZWQgdG8gYnVpbGQgdGhlIFNFTEZfQ0xPU0lOR19UQUdTLCBO
RVNUQUJMRV9UQUdTLCBhbmQKKyAgICBORVNUSU5HX1JFU0VUX1RBR1MgbWFwcyBvdXQgb2YgbGlz
dHMgYW5kIHBhcnRpYWwgbWFwcy4iIiIKKyAgICBidWlsdCA9IHt9CisgICAgZm9yIHBvcnRpb24g
aW4gYXJnczoKKyAgICAgICAgaWYgaGFzYXR0cihwb3J0aW9uLCAnaXRlbXMnKToKKyAgICAgICAg
ICAgICNJdCdzIGEgbWFwLiBNZXJnZSBpdC4KKyAgICAgICAgICAgIGZvciBrLHYgaW4gcG9ydGlv
bi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGJ1aWx0W2tdID0gdgorICAgICAgICBlbGlmIGlz
TGlzdChwb3J0aW9uKSBhbmQgbm90IGlzU3RyaW5nKHBvcnRpb24pOgorICAgICAgICAgICAgI0l0
J3MgYSBsaXN0LiBNYXAgZWFjaCBpdGVtIHRvIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgZm9y
IGsgaW4gcG9ydGlvbjoKKyAgICAgICAgICAgICAgICBidWlsdFtrXSA9IGRlZmF1bHQKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICNJdCdzIGEgc2NhbGFyLiBNYXAgaXQgdG8gdGhlIGRlZmF1
bHQuCisgICAgICAgICAgICBidWlsdFtwb3J0aW9uXSA9IGRlZmF1bHQKKyAgICByZXR1cm4gYnVp
bHQKKworIyBOb3csIHRoZSBwYXJzZXIgY2xhc3Nlcy4KKworY2xhc3MgSFRNTFBhcnNlckJ1aWxk
ZXIoSFRNTFBhcnNlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cCk6CisgICAgICAg
IEhUTUxQYXJzZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorCisg
ICAgIyBXZSBpbmhlcml0IGZlZWQoKSBhbmQgcmVzZXQoKS4KKworICAgIGRlZiBoYW5kbGVfc3Rh
cnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBpZiBuYW1lID09ICdtZXRhJzoKKyAg
ICAgICAgICAgIHNlbGYuc291cC5leHRyYWN0Q2hhcnNldEZyb21NZXRhKGF0dHJzKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb3VwLnVua25vd25fc3RhcnR0YWcobmFtZSwgYXR0
cnMpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5z
b3VwLnVua25vd25fZW5kdGFnKG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgY29u
dGVudCk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQorCisgICAgZGVm
IF90b1N0cmluZ1N1YmNsYXNzKHNlbGYsIHRleHQsIHN1YmNsYXNzKToKKyAgICAgICAgIiIiQWRk
cyBhIGNlcnRhaW4gcGllY2Ugb2YgdGV4dCB0byB0aGUgdHJlZSBhcyBhIE5hdmlnYWJsZVN0cmlu
ZworICAgICAgICBzdWJjbGFzcy4iIiIKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAg
ICAgICBzZWxmLmhhbmRsZV9kYXRhKHRleHQpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKHN1
YmNsYXNzKQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiSGFu
ZGxlIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBhcyBhIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgor
ICAgICAgICBvYmplY3QsIHBvc3NpYmx5IG9uZSB3aXRoIGEgJVNPVVAtRU5DT0RJTkclIHNsb3Qg
aW50byB3aGljaCBhbgorICAgICAgICBlbmNvZGluZyB3aWxsIGJlIHBsdWdnZWQgbGF0ZXIuIiIi
CisgICAgICAgIGlmIHRleHRbOjNdID09ICJ4bWwiOgorICAgICAgICAgICAgdGV4dCA9IHUieG1s
IHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVTT1VQLUVOQ09ESU5HJSciCisgICAgICAgIHNlbGYu
X3RvU3RyaW5nU3ViY2xhc3ModGV4dCwgUHJvY2Vzc2luZ0luc3RydWN0aW9uKQorCisgICAgZGVm
IGhhbmRsZV9jb21tZW50KHNlbGYsIHRleHQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFz
IENvbW1lbnQgb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3ModGV4dCwg
Q29tbWVudCkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCByZWYpOgorICAgICAgICAi
SGFuZGxlIGNoYXJhY3RlciByZWZlcmVuY2VzIGFzIGRhdGEuIgorICAgICAgICBpZiBzZWxmLnNv
dXAuY29udmVydEVudGl0aWVzOgorICAgICAgICAgICAgZGF0YSA9IHVuaWNocihpbnQocmVmKSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSAnJiMlczsnICUgcmVmCisgICAgICAg
IHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYs
IHJlZik6CisgICAgICAgICIiIkhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlcyBhcyBkYXRhLCBwb3Nz
aWJseSBjb252ZXJ0aW5nIGtub3duCisgICAgICAgIEhUTUwgYW5kL29yIFhNTCBlbnRpdHkgcmVm
ZXJlbmNlcyB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlCisgICAgICAgIGNoYXJhY3RlcnMu
IiIiCisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIGlmIHNlbGYuc291cC5jb252ZXJ0SFRN
TEVudGl0aWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSB1bmlj
aHIobmFtZTJjb2RlcG9pbnRbcmVmXSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgbm90IGRhdGEgYW5kIHNlbGYuc291cC5j
b252ZXJ0WE1MRW50aXRpZXM6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuc291cC5YTUxf
RU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUy5nZXQocmVmKQorCisgICAgICAgIGlmIG5vdCBkYXRh
IGFuZCBzZWxmLnNvdXAuY29udmVydEhUTUxFbnRpdGllcyBhbmQgXAorICAgICAgICAgICAgbm90
IHNlbGYuc291cC5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUy5nZXQocmVmKToKKyAgICAg
ICAgICAgICAgICAjIFRPRE86IFdlJ3ZlIGdvdCBhIHByb2JsZW0gaGVyZS4gV2UncmUgdG9sZCB0
aGlzIGlzCisgICAgICAgICAgICAgICAgIyBhbiBlbnRpdHkgcmVmZXJlbmNlLCBidXQgaXQncyBu
b3QgYW4gWE1MIGVudGl0eQorICAgICAgICAgICAgICAgICMgcmVmZXJlbmNlIG9yIGFuIEhUTUwg
ZW50aXR5IHJlZmVyZW5jZS4gTm9uZXRoZWxlc3MsCisgICAgICAgICAgICAgICAgIyB0aGUgbG9n
aWNhbCB0aGluZyB0byBkbyBpcyB0byBwYXNzIGl0IHRocm91Z2ggYXMgYW4KKyAgICAgICAgICAg
ICAgICAjIHVucmVjb2duaXplZCBlbnRpdHkgcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICMK
KyAgICAgICAgICAgICAgICAjIEV4Y2VwdDogd2hlbiB0aGUgaW5wdXQgaXMgIiZjYXJvbDsiIHRo
aXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAjIHdpbGwgYmUgY2FsbGVkIHdpdGggaW5wdXQg
ImNhcm9sIi4gV2hlbiB0aGUgaW5wdXQgaXMKKyAgICAgICAgICAgICAgICAjICJBVCZUIiwgdGhp
cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGlucHV0CisgICAgICAgICAgICAgICAgIyAi
VCIuIFdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBhIHNlbWljb2xvbgorICAgICAg
ICAgICAgICAgICMgd2FzIHByZXNlbnQgb3JpZ2luYWxseSwgc28gd2UgZG9uJ3Qga25vdyB3aGV0
aGVyCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGFuIHVua25vd24gZW50aXR5IG9yIGp1c3Qg
YSBtaXNwbGFjZWQKKyAgICAgICAgICAgICAgICAjIGFtcGVyc2FuZC4KKyAgICAgICAgICAgICAg
ICAjCisgICAgICAgICAgICAgICAgIyBUaGUgbW9yZSBjb21tb24gY2FzZSBpcyBhIG1pc3BsYWNl
ZCBhbXBlcnNhbmQsIHNvIEkKKyAgICAgICAgICAgICAgICAjIGVzY2FwZSB0aGUgYW1wZXJzYW5k
IGFuZCBvbWl0IHRoZSB0cmFpbGluZyBzZW1pY29sb24uCisgICAgICAgICAgICAgICAgZGF0YSA9
ICImYW1wOyVzIiAlIHJlZgorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICMgVGhp
cyBjYXNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgYWJvdmUsIGJlY2F1c2Ugd2UKKyAgICAg
ICAgICAgICMgaGF2ZW4ndCBhbHJlYWR5IGdvbmUgdGhyb3VnaCBhIHN1cHBvc2VkbHkgY29tcHJl
aGVuc2l2ZQorICAgICAgICAgICAgIyBtYXBwaW5nIG9mIGVudGl0aWVzIHRvIFVuaWNvZGUgY2hh
cmFjdGVycy4gV2UgbWlnaHQgbm90CisgICAgICAgICAgICAjIGhhdmUgZ29uZSB0aHJvdWdoIGFu
eSBtYXBwaW5nIGF0IGFsbC4gU28gdGhlIGNoYW5jZXMgYXJlCisgICAgICAgICAgICAjIHZlcnkg
aGlnaCB0aGF0IHRoaXMgaXMgYSByZWFsIGVudGl0eSwgYW5kIG5vdCBhCisgICAgICAgICAgICAj
IG1pc3BsYWNlZCBhbXBlcnNhbmQuCisgICAgICAgICAgICBkYXRhID0gIiYlczsiICUgcmVmCisg
ICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZGVjbChzZWxm
LCBkYXRhKToKKyAgICAgICAgIkhhbmRsZSBET0NUWVBFcyBhbmQgdGhlIGxpa2UgYXMgRGVjbGFy
YXRpb24gb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3MoZGF0YSwgRGVj
bGFyYXRpb24pCisKKyAgICBkZWYgcGFyc2VfZGVjbGFyYXRpb24oc2VsZiwgaSk6CisgICAgICAg
ICIiIlRyZWF0IGEgYm9ndXMgU0dNTCBkZWNsYXJhdGlvbiBhcyByYXcgZGF0YS4gVHJlYXQgYSBD
REFUQQorICAgICAgICBkZWNsYXJhdGlvbiBhcyBhIENEYXRhIG9iamVjdC4iIiIKKyAgICAgICAg
aiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5yYXdkYXRhW2k6aSs5XSA9PSAnPCFbQ0RBVEFbJzoK
KyAgICAgICAgICAgICBrID0gc2VsZi5yYXdkYXRhLmZpbmQoJ11dPicsIGkpCisgICAgICAgICAg
ICAgaWYgayA9PSAtMToKKyAgICAgICAgICAgICAgICAgayA9IGxlbihzZWxmLnJhd2RhdGEpCisg
ICAgICAgICAgICAgZGF0YSA9IHNlbGYucmF3ZGF0YVtpKzk6a10KKyAgICAgICAgICAgICBqID0g
ayszCisgICAgICAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJjbGFzcyhkYXRhLCBDRGF0YSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBqID0gSFRNTFBh
cnNlci5wYXJzZV9kZWNsYXJhdGlvbihzZWxmLCBpKQorICAgICAgICAgICAgZXhjZXB0IEhUTUxQ
YXJzZUVycm9yOgorICAgICAgICAgICAgICAgIHRvSGFuZGxlID0gc2VsZi5yYXdkYXRhW2k6XQor
ICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodG9IYW5kbGUpCisgICAgICAgICAgICAg
ICAgaiA9IGkgKyBsZW4odG9IYW5kbGUpCisgICAgICAgIHJldHVybiBqCisKKworY2xhc3MgQmVh
dXRpZnVsU3RvbmVTb3VwKFRhZyk6CisKKyAgICAiIiJUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBi
YXNpYyBwYXJzZXIgYW5kIHNlYXJjaCBjb2RlLiBJdCBkZWZpbmVzCisgICAgYSBwYXJzZXIgdGhh
dCBrbm93cyBub3RoaW5nIGFib3V0IHRhZyBiZWhhdmlvciBleGNlcHQgZm9yIHRoZQorICAgIGZv
bGxvd2luZzoKKworICAgICAgWW91IGNhbid0IGNsb3NlIGEgdGFnIHdpdGhvdXQgY2xvc2luZyBh
bGwgdGhlIHRhZ3MgaXQgZW5jbG9zZXMuCisgICAgICBUaGF0IGlzLCAiPGZvbz48YmFyPjwvZm9v
PiIgYWN0dWFsbHkgbWVhbnMKKyAgICAgICI8Zm9vPjxiYXI+PC9iYXI+PC9mb28+Ii4KKworICAg
IFtBbm90aGVyIHBvc3NpYmxlIGV4cGxhbmF0aW9uIGlzICI8Zm9vPjxiYXIgLz48L2Zvbz4iLCBi
dXQgc2luY2UKKyAgICB0aGlzIGNsYXNzIGRlZmluZXMgbm8gU0VMRl9DTE9TSU5HX1RBR1MsIGl0
IHdpbGwgbmV2ZXIgdXNlIHRoYXQKKyAgICBleHBsYW5hdGlvbi5dCisKKyAgICBUaGlzIGNsYXNz
IGlzIHVzZWZ1bCBmb3IgcGFyc2luZyBYTUwgb3IgbWFkZS11cCBtYXJrdXAgbGFuZ3VhZ2VzLAor
ICAgIG9yIHdoZW4gQmVhdXRpZnVsU291cCBtYWtlcyBhbiBhc3N1bXB0aW9uIGNvdW50ZXIgdG8g
d2hhdCB5b3Ugd2VyZQorICAgIGV4cGVjdGluZy4iIiIKKworICAgIFNFTEZfQ0xPU0lOR19UQUdT
ID0ge30KKyAgICBORVNUQUJMRV9UQUdTID0ge30KKyAgICBSRVNFVF9ORVNUSU5HX1RBR1MgPSB7
fQorICAgIFFVT1RFX1RBR1MgPSB7fQorICAgIFBSRVNFUlZFX1dISVRFU1BBQ0VfVEFHUyA9IFtd
CisKKyAgICBNQVJLVVBfTUFTU0FHRSA9IFsocmUuY29tcGlsZSgnKDxbXjw+XSopLz4nKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6IHguZ3JvdXAoMSkgKyAnIC8+JyksCisgICAg
ICAgICAgICAgICAgICAgICAgKHJlLmNvbXBpbGUoJzwhXHMrKFtePD5dKik+JyksCisgICAgICAg
ICAgICAgICAgICAgICAgIGxhbWJkYSB4OiAnPCEnICsgeC5ncm91cCgxKSArICc+JykKKyAgICAg
ICAgICAgICAgICAgICAgICBdCisKKyAgICBST09UX1RBR19OQU1FID0gdSdbZG9jdW1lbnRdJwor
CisgICAgSFRNTF9FTlRJVElFUyA9ICJodG1sIgorICAgIFhNTF9FTlRJVElFUyA9ICJ4bWwiCisg
ICAgWEhUTUxfRU5USVRJRVMgPSAieGh0bWwiCisgICAgIyBUT0RPOiBUaGlzIG9ubHkgZXhpc3Rz
IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eQorICAgIEFMTF9FTlRJVElFUyA9IFhIVE1MX0VO
VElUSUVTCisKKyAgICAjIFVzZWQgd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgdGV4dCBub2Rl
IGlzIGFsbCB3aGl0ZXNwYWNlIGFuZAorICAgICMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBzaW5n
bGUgc3BhY2UuIEEgdGV4dCBub2RlIHRoYXQgY29udGFpbnMKKyAgICAjIGZhbmN5IFVuaWNvZGUg
c3BhY2VzICh1c3VhbGx5IG5vbi1icmVha2luZykgc2hvdWxkIGJlIGxlZnQKKyAgICAjIGFsb25l
LgorICAgIFNUUklQX0FTQ0lJX1NQQUNFUyA9IHsgOTogTm9uZSwgMTA6IE5vbmUsIDEyOiBOb25l
LCAxMzogTm9uZSwgMzI6IE5vbmUsIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXA9
IiIsIHBhcnNlT25seVRoZXNlPU5vbmUsIGZyb21FbmNvZGluZz1Ob25lLAorICAgICAgICAgICAg
ICAgICBtYXJrdXBNYXNzYWdlPVRydWUsIHNtYXJ0UXVvdGVzVG89WE1MX0VOVElUSUVTLAorICAg
ICAgICAgICAgICAgICBjb252ZXJ0RW50aXRpZXM9Tm9uZSwgc2VsZkNsb3NpbmdUYWdzPU5vbmUs
IGlzSFRNTD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgYnVpbGRlcj1IVE1MUGFyc2VyQnVpbGRl
cik6CisgICAgICAgICIiIlRoZSBTb3VwIG9iamVjdCBpcyBpbml0aWFsaXplZCBhcyB0aGUgJ3Jv
b3QgdGFnJywgYW5kIHRoZQorICAgICAgICBwcm92aWRlZCBtYXJrdXAgKHdoaWNoIGNhbiBiZSBh
IHN0cmluZyBvciBhIGZpbGUtbGlrZSBvYmplY3QpCisgICAgICAgIGlzIGZlZCBpbnRvIHRoZSB1
bmRlcmx5aW5nIHBhcnNlci4KKworICAgICAgICBIVE1MUGFyc2VyIHdpbGwgcHJvY2VzcyBtb3N0
IGJhZCBIVE1MLCBhbmQgdGhlIEJlYXV0aWZ1bFNvdXAKKyAgICAgICAgY2xhc3MgaGFzIHNvbWUg
dHJpY2tzIGZvciBkZWFsaW5nIHdpdGggc29tZSBIVE1MIHRoYXQga2lsbHMKKyAgICAgICAgSFRN
TFBhcnNlciwgYnV0IEJlYXV0aWZ1bCBTb3VwIGNhbiBub25ldGhlbGVzcyBjaG9rZSBvciBsb3Nl
IGRhdGEKKyAgICAgICAgaWYgeW91ciBkYXRhIHVzZXMgc2VsZi1jbG9zaW5nIHRhZ3Mgb3IgZGVj
bGFyYXRpb25zCisgICAgICAgIGluY29ycmVjdGx5LgorCisgICAgICAgIEJ5IGRlZmF1bHQsIEJl
YXV0aWZ1bCBTb3VwIHVzZXMgcmVnZXhlcyB0byBzYW5pdGl6ZSBpbnB1dCwKKyAgICAgICAgYXZv
aWRpbmcgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlc2UgcHJvYmxlbXMuIElmIHRoZSBwcm9ibGVt
cworICAgICAgICBkb24ndCBhcHBseSB0byB5b3UsIHBhc3MgaW4gRmFsc2UgZm9yIG1hcmt1cE1h
c3NhZ2UsIGFuZAorICAgICAgICB5b3UnbGwgZ2V0IGJldHRlciBwZXJmb3JtYW5jZS4KKworICAg
ICAgICBUaGUgZGVmYXVsdCBwYXJzZXIgbWFzc2FnZSB0ZWNobmlxdWVzIGZpeCB0aGUgdHdvIG1v
c3QgY29tbW9uCisgICAgICAgIGluc3RhbmNlcyBvZiBpbnZhbGlkIEhUTUwgdGhhdCBjaG9rZSBI
VE1MUGFyc2VyOgorCisgICAgICAgICA8YnIvPiAoTm8gc3BhY2UgYmV0d2VlbiBuYW1lIG9mIGNs
b3NpbmcgdGFnIGFuZCB0YWcgY2xvc2UpCisgICAgICAgICA8ISAtLUNvbW1lbnQtLT4gKEV4dHJh
bmVvdXMgd2hpdGVzcGFjZSBpbiBkZWNsYXJhdGlvbikKKworICAgICAgICBZb3UgY2FuIHBhc3Mg
aW4gYSBjdXN0b20gbGlzdCBvZiAoUkUgb2JqZWN0LCByZXBsYWNlIG1ldGhvZCkKKyAgICAgICAg
dHVwbGVzIHRvIGdldCBCZWF1dGlmdWwgU291cCB0byBzY3J1YiB5b3VyIGlucHV0IHRoZSB3YXkg
eW91CisgICAgICAgIHdhbnQuIiIiCisKKyAgICAgICAgc2VsZi5wYXJzZU9ubHlUaGVzZSA9IHBh
cnNlT25seVRoZXNlCisgICAgICAgIHNlbGYuZnJvbUVuY29kaW5nID0gZnJvbUVuY29kaW5nCisg
ICAgICAgIHNlbGYuc21hcnRRdW90ZXNUbyA9IHNtYXJ0UXVvdGVzVG8KKyAgICAgICAgc2VsZi5j
b252ZXJ0RW50aXRpZXMgPSBjb252ZXJ0RW50aXRpZXMKKyAgICAgICAgIyBTZXQgdGhlIHJ1bGVz
IGZvciBob3cgd2UnbGwgZGVhbCB3aXRoIHRoZSBlbnRpdGllcyB3ZQorICAgICAgICAjIGVuY291
bnRlcgorICAgICAgICBpZiBzZWxmLmNvbnZlcnRFbnRpdGllczoKKyAgICAgICAgICAgICMgSXQg
ZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNvbnZlcnQgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvCisgICAg
ICAgICAgICAjIGVudGl0aWVzIGV2ZW4gd2hpbGUgeW91J3JlIGNvbnZlcnRpbmcgZW50aXRpZXMg
dG8gVW5pY29kZS4KKyAgICAgICAgICAgICMgSnVzdCBjb252ZXJ0IGl0IGFsbCB0byBVbmljb2Rl
LgorICAgICAgICAgICAgc2VsZi5zbWFydFF1b3Rlc1RvID0gTm9uZQorICAgICAgICAgICAgaWYg
Y29udmVydEVudGl0aWVzID09IHNlbGYuSFRNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAgICBz
ZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5jb252
ZXJ0SFRNTEVudGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNv
Z25pemVkRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGNvbnZlcnRFbnRpdGllcyA9
PSBzZWxmLlhIVE1MX0VOVElUSUVTOgorICAgICAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVu
dGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9
IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0g
RmFsc2UKKyAgICAgICAgICAgIGVsaWYgY29udmVydEVudGl0aWVzID09IHNlbGYuWE1MX0VOVElU
SUVTOgorICAgICAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gVHJ1ZQorICAg
ICAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IEZhbHNlCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAg
ICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5l
c2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5pbnN0YW5j
ZVNlbGZDbG9zaW5nVGFncyA9IGJ1aWxkVGFnTWFwKE5vbmUsIHNlbGZDbG9zaW5nVGFncykKKyAg
ICAgICAgc2VsZi5idWlsZGVyID0gYnVpbGRlcihzZWxmKQorICAgICAgICBzZWxmLnJlc2V0KCkK
KworICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cCwgJ3JlYWQnKTogICAgICAgICMgSXQncyBhIGZp
bGUtdHlwZSBvYmplY3QuCisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXAucmVhZCgpCisgICAg
ICAgIHNlbGYubWFya3VwID0gbWFya3VwCisgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IG1h
cmt1cE1hc3NhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZmVlZChpc0hUTUw9
aXNIVE1MKQorICAgICAgICBleGNlcHQgU3RvcFBhcnNpbmc6CisgICAgICAgICAgICBwYXNzCisg
ICAgICAgIHNlbGYubWFya3VwID0gTm9uZSAgICAgICAgICAgICAgICAgIyBUaGUgbWFya3VwIGNh
biBub3cgYmUgR0NlZC4KKyAgICAgICAgc2VsZi5idWlsZGVyID0gTm9uZSAgICAgICAgICAgICAg
ICAjIFNvIGNhbiB0aGUgYnVpbGRlci4KKworICAgIGRlZiBfZmVlZChzZWxmLCBpbkRvY3VtZW50
RW5jb2Rpbmc9Tm9uZSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBkb2N1
bWVudCB0byBVbmljb2RlLgorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAgICBp
ZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0
cihzZWxmLCAnb3JpZ2luYWxFbmNvZGluZycpOgorICAgICAgICAgICAgICAgIHNlbGYub3JpZ2lu
YWxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVu
aWNvZGVEYW1taXRcCisgICAgICAgICAgICAgICAgICAgICAobWFya3VwLCBbc2VsZi5mcm9tRW5j
b2RpbmcsIGluRG9jdW1lbnRFbmNvZGluZ10sCisgICAgICAgICAgICAgICAgICAgICAgc21hcnRR
dW90ZXNUbz1zZWxmLnNtYXJ0UXVvdGVzVG8sIGlzSFRNTD1pc0hUTUwpCisgICAgICAgICAgICBt
YXJrdXAgPSBkYW1taXQudW5pY29kZQorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5n
ID0gZGFtbWl0Lm9yaWdpbmFsRW5jb2RpbmcKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRIVE1M
RW5jb2RpbmcgPSBkYW1taXQuZGVjbGFyZWRIVE1MRW5jb2RpbmcKKyAgICAgICAgaWYgbWFya3Vw
OgorICAgICAgICAgICAgaWYgc2VsZi5tYXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAgIGlm
IG5vdCBpc0xpc3Qoc2VsZi5tYXJrdXBNYXNzYWdlKToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5tYXJrdXBNYXNzYWdlID0gc2VsZi5NQVJLVVBfTUFTU0FHRQorICAgICAgICAgICAgICAgIGZv
ciBmaXgsIG0gaW4gc2VsZi5tYXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAgICAgICBtYXJr
dXAgPSBmaXguc3ViKG0sIG1hcmt1cCkKKyAgICAgICAgICAgICAgICAjIFRPRE86IFdlIGdldCBy
aWQgb2YgbWFya3VwTWFzc2FnZSBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICMgc291cCBv
YmplY3QgY2FuIGJlIGRlZXBjb3BpZWQgbGF0ZXIgb24uIFNvbWUKKyAgICAgICAgICAgICAgICAj
IFB5dGhvbiBpbnN0YWxsYXRpb25zIGNhbid0IGNvcHkgcmVnZXhlcy4gSWYgYW55b25lCisgICAg
ICAgICAgICAgICAgIyB3YXMgcmVseWluZyBvbiB0aGUgZXhpc3RlbmNlIG9mIG1hcmt1cE1hc3Nh
Z2UsIHRoaXMKKyAgICAgICAgICAgICAgICAjIG1pZ2h0IGNhdXNlIHByb2JsZW1zLgorICAgICAg
ICAgICAgICAgIGRlbChzZWxmLm1hcmt1cE1hc3NhZ2UpCisgICAgICAgIHNlbGYuYnVpbGRlci5y
ZXNldCgpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmZlZWQobWFya3VwKQorICAgICAgICAjIENs
b3NlIG91dCBhbnkgdW5maW5pc2hlZCBzdHJpbmdzIGFuZCBjbG9zZSBhbGwgdGhlIG9wZW4gdGFn
cy4KKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgd2hpbGUgc2VsZi5jdXJyZW50VGFn
Lm5hbWUgIT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQor
CisgICAgZGVmIGlzU2VsZkNsb3NpbmdUYWcoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVy
bnMgdHJ1ZSBpZmYgdGhlIGdpdmVuIHN0cmluZyBpcyB0aGUgbmFtZSBvZiBhCisgICAgICAgIHNl
bGYtY2xvc2luZyB0YWcgYWNjb3JkaW5nIHRvIHRoaXMgcGFyc2VyLiIiIgorICAgICAgICByZXR1
cm4gc2VsZi5TRUxGX0NMT1NJTkdfVEFHUy5oYXNfa2V5KG5hbWUpIFwKKyAgICAgICAgICAgICAg
IG9yIHNlbGYuaW5zdGFuY2VTZWxmQ2xvc2luZ1RhZ3MuaGFzX2tleShuYW1lKQorCisgICAgZGVm
IHJlc2V0KHNlbGYpOgorICAgICAgICBUYWcuX19pbml0X18oc2VsZiwgc2VsZiwgc2VsZi5ST09U
X1RBR19OQU1FKQorICAgICAgICBzZWxmLmhpZGRlbiA9IDEKKyAgICAgICAgc2VsZi5idWlsZGVy
LnJlc2V0KCkKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YSA9IFtdCisgICAgICAgIHNlbGYuY3Vy
cmVudFRhZyA9IE5vbmUKKyAgICAgICAgc2VsZi50YWdTdGFjayA9IFtdCisgICAgICAgIHNlbGYu
cXVvdGVTdGFjayA9IFtdCisgICAgICAgIHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIHBv
cFRhZyhzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi50YWdTdGFjay5wb3AoKQorICAgICAgICAj
IFRhZ3Mgd2l0aCBqdXN0IG9uZSBzdHJpbmctb3duaW5nIGNoaWxkIGdldCB0aGUgY2hpbGQgYXMg
YQorICAgICAgICAjICdzdHJpbmcnIHByb3BlcnR5LCBzbyB0aGF0IHNvdXAudGFnLnN0cmluZyBp
cyBzaG9ydGhhbmQgZm9yCisgICAgICAgICMgc291cC50YWcuY29udGVudHNbMF0KKyAgICAgICAg
aWYgbGVuKHNlbGYuY3VycmVudFRhZy5jb250ZW50cykgPT0gMSBhbmQgXAorICAgICAgICAgICBp
c2luc3RhbmNlKHNlbGYuY3VycmVudFRhZy5jb250ZW50c1swXSwgTmF2aWdhYmxlU3RyaW5nKToK
KyAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZy5zdHJpbmcgPSBzZWxmLmN1cnJlbnRUYWcuY29u
dGVudHNbMF0KKworICAgICAgICAjcHJpbnQgIlBvcCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNl
bGYudGFnU3RhY2s6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0YWNr
Wy0xXQorICAgICAgICByZXR1cm4gc2VsZi5jdXJyZW50VGFnCisKKyAgICBkZWYgcHVzaFRhZyhz
ZWxmLCB0YWcpOgorICAgICAgICAjcHJpbnQgIlB1c2giLCB0YWcubmFtZQorICAgICAgICBpZiBz
ZWxmLmN1cnJlbnRUYWc6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuY29udGVudHMuYXBw
ZW5kKHRhZykKKyAgICAgICAgc2VsZi50YWdTdGFjay5hcHBlbmQodGFnKQorICAgICAgICBzZWxm
LmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0YWNrWy0xXQorCisgICAgZGVmIGVuZERhdGEoc2VsZiwg
Y29udGFpbmVyQ2xhc3M9TmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50
RGF0YToKKyAgICAgICAgICAgIGN1cnJlbnREYXRhID0gdScnLmpvaW4oc2VsZi5jdXJyZW50RGF0
YSkKKyAgICAgICAgICAgIGlmIChjdXJyZW50RGF0YS50cmFuc2xhdGUoc2VsZi5TVFJJUF9BU0NJ
SV9TUEFDRVMpID09ICcnIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZXQoW3RhZy5uYW1lIGZv
ciB0YWcgaW4gc2VsZi50YWdTdGFja10pLmludGVyc2VjdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5QUkVTRVJWRV9XSElURVNQQUNFX1RBR1MpKToKKyAgICAgICAgICAgICAgICBpZiAn
XG4nIGluIGN1cnJlbnREYXRhOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YSA9ICdc
bicKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0
YSA9ICcgJworICAgICAgICAgICAgc2VsZi5jdXJyZW50RGF0YSA9IFtdCisgICAgICAgICAgICBp
ZiBzZWxmLnBhcnNlT25seVRoZXNlIGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBhbmQgXAor
ICAgICAgICAgICAgICAgICAgIChub3Qgc2VsZi5wYXJzZU9ubHlUaGVzZS50ZXh0IG9yIFwKKyAg
ICAgICAgICAgICAgICAgICAgbm90IHNlbGYucGFyc2VPbmx5VGhlc2Uuc2VhcmNoKGN1cnJlbnRE
YXRhKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBvID0gY29udGFpbmVy
Q2xhc3MoY3VycmVudERhdGEpCisgICAgICAgICAgICBvLnNldHVwKHNlbGYuY3VycmVudFRhZywg
c2VsZi5wcmV2aW91cykKKyAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXM6CisgICAgICAgICAg
ICAgICAgc2VsZi5wcmV2aW91cy5uZXh0ID0gbworICAgICAgICAgICAgc2VsZi5wcmV2aW91cyA9
IG8KKyAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZy5jb250ZW50cy5hcHBlbmQobykKKworCisg
ICAgZGVmIF9wb3BUb1RhZyhzZWxmLCBuYW1lLCBpbmNsdXNpdmVQb3A9VHJ1ZSk6CisgICAgICAg
ICIiIlBvcHMgdGhlIHRhZyBzdGFjayB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBtb3N0IHJlY2Vu
dAorICAgICAgICBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdGFnLiBJZiBpbmNsdXNpdmVQb3AgaXMg
ZmFsc2UsIHBvcHMgdGhlIHRhZworICAgICAgICBzdGFjayB1cCB0byBidXQgKm5vdCogaW5jbHVk
aW5nIHRoZSBtb3N0IHJlY2VudCBpbnN0cWFuY2Ugb2YKKyAgICAgICAgdGhlIGdpdmVuIHRhZy4i
IiIKKyAgICAgICAgI3ByaW50ICJQb3BwaW5nIHRvICVzIiAlIG5hbWUKKyAgICAgICAgaWYgbmFt
ZSA9PSBzZWxmLlJPT1RfVEFHX05BTUU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBu
dW1Qb3BzID0gMAorICAgICAgICBtb3N0UmVjZW50VGFnID0gTm9uZQorICAgICAgICBmb3IgaSBp
biByYW5nZShsZW4oc2VsZi50YWdTdGFjayktMSwgMCwgLTEpOgorICAgICAgICAgICAgaWYgbmFt
ZSA9PSBzZWxmLnRhZ1N0YWNrW2ldLm5hbWU6CisgICAgICAgICAgICAgICAgbnVtUG9wcyA9IGxl
bihzZWxmLnRhZ1N0YWNrKS1pCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90
IGluY2x1c2l2ZVBvcDoKKyAgICAgICAgICAgIG51bVBvcHMgPSBudW1Qb3BzIC0gMQorCisgICAg
ICAgIGZvciBpIGluIHJhbmdlKDAsIG51bVBvcHMpOgorICAgICAgICAgICAgbW9zdFJlY2VudFRh
ZyA9IHNlbGYucG9wVGFnKCkKKyAgICAgICAgcmV0dXJuIG1vc3RSZWNlbnRUYWcKKworICAgIGRl
ZiBfc21hcnRQb3Aoc2VsZiwgbmFtZSk6CisKKyAgICAgICAgIiIiV2UgbmVlZCB0byBwb3AgdXAg
dG8gdGhlIHByZXZpb3VzIHRhZyBvZiB0aGlzIHR5cGUsIHVubGVzcworICAgICAgICBvbmUgb2Yg
dGhpcyB0YWcncyBuZXN0aW5nIHJlc2V0IHRyaWdnZXJzIGNvbWVzIGJldHdlZW4gdGhpcworICAg
ICAgICB0YWcgYW5kIHRoZSBwcmV2aW91cyB0YWcgb2YgdGhpcyB0eXBlLCBPUiB1bmxlc3MgdGhp
cyB0YWcgaXMgYQorICAgICAgICBnZW5lcmljIG5lc3RpbmcgdHJpZ2dlciBhbmQgYW5vdGhlciBn
ZW5lcmljIG5lc3RpbmcgdHJpZ2dlcgorICAgICAgICBjb21lcyBiZXR3ZWVuIHRoaXMgdGFnIGFu
ZCB0aGUgcHJldmlvdXMgdGFnIG9mIHRoaXMgdHlwZS4KKworICAgICAgICBFeGFtcGxlczoKKyAg
ICAgICAgIDxwPkZvbzxiPkJhciAqPHA+KiBzaG91bGQgcG9wIHRvICdwJywgbm90ICdiJy4KKyAg
ICAgICAgIDxwPkZvbzx0YWJsZT5CYXIgKjxwPiogc2hvdWxkIHBvcCB0byAndGFibGUnLCBub3Qg
J3AnLgorICAgICAgICAgPHA+Rm9vPHRhYmxlPjx0cj5CYXIgKjxwPiogc2hvdWxkIHBvcCB0byAn
dHInLCBub3QgJ3AnLgorCisgICAgICAgICA8bGk+PHVsPjxsaT4gKjxsaT4qIHNob3VsZCBwb3Ag
dG8gJ3VsJywgbm90IHRoZSBmaXJzdCAnbGknLgorICAgICAgICAgPHRyPjx0YWJsZT48dHI+ICo8
dHI+KiBzaG91bGQgcG9wIHRvICd0YWJsZScsIG5vdCB0aGUgZmlyc3QgJ3RyJworICAgICAgICAg
PHRkPjx0cj48dGQ+ICo8dGQ+KiBzaG91bGQgcG9wIHRvICd0cicsIG5vdCB0aGUgZmlyc3QgJ3Rk
JworICAgICAgICAiIiIKKworICAgICAgICBuZXN0aW5nUmVzZXRUcmlnZ2VycyA9IHNlbGYuTkVT
VEFCTEVfVEFHUy5nZXQobmFtZSkKKyAgICAgICAgaXNOZXN0YWJsZSA9IG5lc3RpbmdSZXNldFRy
aWdnZXJzICE9IE5vbmUKKyAgICAgICAgaXNSZXNldE5lc3RpbmcgPSBzZWxmLlJFU0VUX05FU1RJ
TkdfVEFHUy5oYXNfa2V5KG5hbWUpCisgICAgICAgIHBvcFRvID0gTm9uZQorICAgICAgICBpbmNs
dXNpdmUgPSBUcnVlCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLnRhZ1N0YWNrKS0x
LCAwLCAtMSk6CisgICAgICAgICAgICBwID0gc2VsZi50YWdTdGFja1tpXQorICAgICAgICAgICAg
aWYgKG5vdCBwIG9yIHAubmFtZSA9PSBuYW1lKSBhbmQgbm90IGlzTmVzdGFibGU6CisgICAgICAg
ICAgICAgICAgI05vbi1uZXN0YWJsZSB0YWdzIGdldCBwb3BwZWQgdG8gdGhlIHRvcCBvciB0byB0
aGVpcgorICAgICAgICAgICAgICAgICNsYXN0IG9jY3VyYW5jZS4KKyAgICAgICAgICAgICAgICBw
b3BUbyA9IG5hbWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgKG5lc3Rp
bmdSZXNldFRyaWdnZXJzICE9IE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcC5uYW1lIGluIG5l
c3RpbmdSZXNldFRyaWdnZXJzKSBcCisgICAgICAgICAgICAgICAgb3IgKG5lc3RpbmdSZXNldFRy
aWdnZXJzID09IE5vbmUgYW5kIGlzUmVzZXROZXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGFu
ZCBzZWxmLlJFU0VUX05FU1RJTkdfVEFHUy5oYXNfa2V5KHAubmFtZSkpOgorCisgICAgICAgICAg
ICAgICAgI0lmIHdlIGVuY291bnRlciBvbmUgb2YgdGhlIG5lc3RpbmcgcmVzZXQgdHJpZ2dlcnMK
KyAgICAgICAgICAgICAgICAjcGVjdWxpYXIgdG8gdGhpcyB0YWcsIG9yIHdlIGVuY291bnRlciBh
bm90aGVyIHRhZworICAgICAgICAgICAgICAgICN0aGF0IGNhdXNlcyBuZXN0aW5nIHRvIHJlc2V0
LCBwb3AgdXAgdG8gYnV0IG5vdAorICAgICAgICAgICAgICAgICNpbmNsdWRpbmcgdGhhdCB0YWcu
CisgICAgICAgICAgICAgICAgcG9wVG8gPSBwLm5hbWUKKyAgICAgICAgICAgICAgICBpbmNsdXNp
dmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwID0gcC5wYXJl
bnQKKyAgICAgICAgaWYgcG9wVG86CisgICAgICAgICAgICBzZWxmLl9wb3BUb1RhZyhwb3BUbywg
aW5jbHVzaXZlKQorCisgICAgZGVmIHVua25vd25fc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMs
IHNlbGZDbG9zaW5nPTApOgorICAgICAgICAjcHJpbnQgIlN0YXJ0IHRhZyAlczogJXMiICUgKG5h
bWUsIGF0dHJzKQorICAgICAgICBpZiBzZWxmLnF1b3RlU3RhY2s6CisgICAgICAgICAgICAjVGhp
cyBpcyBub3QgYSByZWFsIHRhZy4KKyAgICAgICAgICAgICNwcmludCAiPCVzPiBpcyBub3QgcmVh
bCEiICUgbmFtZQorICAgICAgICAgICAgYXR0cnMgPSAnJy5qb2luKG1hcChsYW1iZGEoeCwgeSk6
ICcgJXM9IiVzIicgJSAoeCwgeSksIGF0dHJzKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Rh
dGEoJzwlcyVzPicgJSAobmFtZSwgYXR0cnMpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IHNlbGYuZW5kRGF0YSgpCisKKyAgICAgICAgaWYgbm90IHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhu
YW1lKSBhbmQgbm90IHNlbGZDbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fc21hcnRQb3AobmFt
ZSkKKworICAgICAgICBpZiBzZWxmLnBhcnNlT25seVRoZXNlIGFuZCBsZW4oc2VsZi50YWdTdGFj
aykgPD0gMSBcCisgICAgICAgICAgICAgICBhbmQgKHNlbGYucGFyc2VPbmx5VGhlc2UudGV4dCBv
ciBub3Qgc2VsZi5wYXJzZU9ubHlUaGVzZS5zZWFyY2hUYWcobmFtZSwgYXR0cnMpKToKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHRhZyA9IFRhZyhzZWxmLCBuYW1lLCBhdHRycywgc2Vs
Zi5jdXJyZW50VGFnLCBzZWxmLnByZXZpb3VzKQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgor
ICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5uZXh0ID0gdGFnCisgICAgICAgIHNlbGYucHJldmlv
dXMgPSB0YWcKKyAgICAgICAgc2VsZi5wdXNoVGFnKHRhZykKKyAgICAgICAgaWYgc2VsZkNsb3Np
bmcgb3Igc2VsZi5pc1NlbGZDbG9zaW5nVGFnKG5hbWUpOgorICAgICAgICAgICAgc2VsZi5wb3BU
YWcoKQorICAgICAgICBpZiBuYW1lIGluIHNlbGYuUVVPVEVfVEFHUzoKKyAgICAgICAgICAgICNw
cmludCAiQmVnaW5uaW5nIHF1b3RlICglcykiICUgbmFtZQorICAgICAgICAgICAgc2VsZi5xdW90
ZVN0YWNrLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgc2VsZi5saXRlcmFsID0gMQorICAgICAg
ICByZXR1cm4gdGFnCisKKyAgICBkZWYgdW5rbm93bl9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAg
ICAgICNwcmludCAiRW5kIHRhZyAlcyIgJSBuYW1lCisgICAgICAgIGlmIHNlbGYucXVvdGVTdGFj
ayBhbmQgc2VsZi5xdW90ZVN0YWNrWy0xXSAhPSBuYW1lOgorICAgICAgICAgICAgI1RoaXMgaXMg
bm90IGEgcmVhbCBlbmQgdGFnLgorICAgICAgICAgICAgI3ByaW50ICI8LyVzPiBpcyBub3QgcmVh
bCEiICUgbmFtZQorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSgnPC8lcz4nICUgbmFtZSkK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICBzZWxm
Ll9wb3BUb1RhZyhuYW1lKQorICAgICAgICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVv
dGVTdGFja1stMV0gPT0gbmFtZToKKyAgICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5wb3AoKQor
ICAgICAgICAgICAgc2VsZi5saXRlcmFsID0gKGxlbihzZWxmLnF1b3RlU3RhY2spID4gMCkKKwor
ICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0
YS5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBleHRyYWN0Q2hhcnNldEZyb21NZXRhKHNlbGYsIGF0
dHJzKToKKyAgICAgICAgc2VsZi51bmtub3duX3N0YXJ0dGFnKCdtZXRhJywgYXR0cnMpCisKKwor
Y2xhc3MgQmVhdXRpZnVsU291cChCZWF1dGlmdWxTdG9uZVNvdXApOgorCisgICAgIiIiVGhpcyBw
YXJzZXIga25vd3MgdGhlIGZvbGxvd2luZyBmYWN0cyBhYm91dCBIVE1MOgorCisgICAgKiBTb21l
IHRhZ3MgaGF2ZSBubyBjbG9zaW5nIHRhZyBhbmQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJl
aW5nCisgICAgICBjbG9zZWQgYXMgc29vbiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4KKworICAg
ICogVGhlIHRleHQgaW5zaWRlIHNvbWUgdGFncyAoaWUuICdzY3JpcHQnKSBtYXkgY29udGFpbiB0
YWdzIHdoaWNoCisgICAgICBhcmUgbm90IHJlYWxseSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBhbmQg
d2hpY2ggc2hvdWxkIGJlIHBhcnNlZAorICAgICAgYXMgdGV4dCwgbm90IHRhZ3MuIElmIHlvdSB3
YW50IHRvIHBhcnNlIHRoZSB0ZXh0IGFzIHRhZ3MsIHlvdSBjYW4KKyAgICAgIGFsd2F5cyBmZXRj
aCBpdCBhbmQgcGFyc2UgaXQgZXhwbGljaXRseS4KKworICAgICogVGFnIG5lc3RpbmcgcnVsZXM6
CisKKyAgICAgIE1vc3QgdGFncyBjYW4ndCBiZSBuZXN0ZWQgYXQgYWxsLiBGb3IgaW5zdGFuY2Us
IHRoZSBvY2N1cmFuY2Ugb2YKKyAgICAgIGEgPHA+IHRhZyBzaG91bGQgaW1wbGljaXRseSBjbG9z
ZSB0aGUgcHJldmlvdXMgPHA+IHRhZy4KKworICAgICAgIDxwPlBhcmExPHA+UGFyYTIKKyAgICAg
ICAgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgPHA+UGFyYTE8L3A+PHA+UGFy
YTIKKworICAgICAgU29tZSB0YWdzIGNhbiBiZSBuZXN0ZWQgYXJiaXRyYXJpbHkuIEZvciBpbnN0
YW5jZSwgdGhlIG9jY3VyYW5jZQorICAgICAgb2YgYSA8YmxvY2txdW90ZT4gdGFnIHNob3VsZCBf
bm90XyBpbXBsaWNpdGx5IGNsb3NlIHRoZSBwcmV2aW91cworICAgICAgPGJsb2NrcXVvdGU+IHRh
Zy4KKworICAgICAgIEFsaWNlIHNhaWQ6IDxibG9ja3F1b3RlPkJvYiBzYWlkOiA8YmxvY2txdW90
ZT5CbGFoCisgICAgICAgIHNob3VsZCBOT1QgYmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICBB
bGljZSBzYWlkOiA8YmxvY2txdW90ZT5Cb2Igc2FpZDogPC9ibG9ja3F1b3RlPjxibG9ja3F1b3Rl
PkJsYWgKKworICAgICAgU29tZSB0YWdzIGNhbiBiZSBuZXN0ZWQsIGJ1dCB0aGUgbmVzdGluZyBp
cyByZXNldCBieSB0aGUKKyAgICAgIGludGVycG9zaXRpb24gb2Ygb3RoZXIgdGFncy4gRm9yIGlu
c3RhbmNlLCBhIDx0cj4gdGFnIHNob3VsZAorICAgICAgaW1wbGljaXRseSBjbG9zZSB0aGUgcHJl
dmlvdXMgPHRyPiB0YWcgd2l0aGluIHRoZSBzYW1lIDx0YWJsZT4sCisgICAgICBidXQgbm90IGNs
b3NlIGEgPHRyPiB0YWcgaW4gYW5vdGhlciB0YWJsZS4KKworICAgICAgIDx0YWJsZT48dHI+Qmxh
aDx0cj5CbGFoCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgIDx0
YWJsZT48dHI+QmxhaDwvdHI+PHRyPkJsYWgKKyAgICAgICAgYnV0LAorICAgICAgIDx0cj5CbGFo
PHRhYmxlPjx0cj5CbGFoCisgICAgICAgIHNob3VsZCBOT1QgYmUgdHJhbnNmb3JtZWQgaW50bwor
ICAgICAgIDx0cj5CbGFoPHRhYmxlPjwvdHI+PHRyPkJsYWgKKworICAgIERpZmZlcmluZyBhc3N1
bXB0aW9ucyBhYm91dCB0YWcgbmVzdGluZyBydWxlcyBhcmUgYSBtYWpvciBzb3VyY2UKKyAgICBv
ZiBwcm9ibGVtcyB3aXRoIHRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzLiBJZiBCZWF1dGlmdWxTb3Vw
IGlzIG5vdAorICAgIHRyZWF0aW5nIGFzIG5lc3RhYmxlIGEgdGFnIHlvdXIgcGFnZSBhdXRob3Ig
dHJlYXRzIGFzIG5lc3RhYmxlLAorICAgIHRyeSBJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxTb3Vw
LCBNaW5pbWFsU291cCwgb3IKKyAgICBCZWF1dGlmdWxTdG9uZVNvdXAgYmVmb3JlIHdyaXRpbmcg
eW91ciBvd24gc3ViY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAgICAgaWYgbm90IGt3YXJncy5oYXNfa2V5KCdzbWFydFF1b3Rlc1RvJyk6
CisgICAgICAgICAgICBrd2FyZ3NbJ3NtYXJ0UXVvdGVzVG8nXSA9IHNlbGYuSFRNTF9FTlRJVElF
UworICAgICAgICBrd2FyZ3NbJ2lzSFRNTCddID0gVHJ1ZQorICAgICAgICBCZWF1dGlmdWxTdG9u
ZVNvdXAuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgU0VMRl9DTE9TSU5H
X1RBR1MgPSBidWlsZFRhZ01hcChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWydicicgLCAnaHInLCAnaW5wdXQnLCAnaW1nJywgJ21ldGEnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYWNlcicsICdsaW5rJywgJ2ZyYW1lJywgJ2Jhc2Un
XSkKKworICAgIFBSRVNFUlZFX1dISVRFU1BBQ0VfVEFHUyA9IHNldChbJ3ByZScsICd0ZXh0YXJl
YSddKQorCisgICAgUVVPVEVfVEFHUyA9IHsnc2NyaXB0JyA6IE5vbmUsICd0ZXh0YXJlYScgOiBO
b25lfQorCisgICAgI0FjY29yZGluZyB0byB0aGUgSFRNTCBzdGFuZGFyZCwgZWFjaCBvZiB0aGVz
ZSBpbmxpbmUgdGFncyBjYW4KKyAgICAjY29udGFpbiBhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0
eXBlLiBGdXJ0aGVybW9yZSwgaXQncyBjb21tb24KKyAgICAjdG8gYWN0dWFsbHkgdXNlIHRoZXNl
IHRhZ3MgdGhpcyB3YXkuCisgICAgTkVTVEFCTEVfSU5MSU5FX1RBR1MgPSBbJ3NwYW4nLCAnZm9u
dCcsICdxJywgJ29iamVjdCcsICdiZG8nLCAnc3ViJywgJ3N1cCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2NlbnRlciddCisKKyAgICAjQWNjb3JkaW5nIHRvIHRoZSBIVE1MIHN0YW5k
YXJkLCB0aGVzZSBibG9jayB0YWdzIGNhbiBjb250YWluCisgICAgI2Fub3RoZXIgdGFnIG9mIHRo
ZSBzYW1lIHR5cGUuIEZ1cnRoZXJtb3JlLCBpdCdzIGNvbW1vbgorICAgICN0byBhY3R1YWxseSB1
c2UgdGhlc2UgdGFncyB0aGlzIHdheS4KKyAgICBORVNUQUJMRV9CTE9DS19UQUdTID0gWydibG9j
a3F1b3RlJywgJ2RpdicsICdmaWVsZHNldCcsICdpbnMnLCAnZGVsJ10KKworICAgICNMaXN0cyBj
YW4gY29udGFpbiBvdGhlciBsaXN0cywgYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuCisgICAg
TkVTVEFCTEVfTElTVF9UQUdTID0geyAnb2wnIDogW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndWwnIDogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGknIDogWyd1bCcs
ICdvbCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RsJyA6IFtdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2RkJyA6IFsnZGwnXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdkdCcgOiBbJ2RsJ10gfQorCisgICAgI1RhYmxlcyBjYW4gY29udGFpbiBvdGhlciB0YWJs
ZXMsIGJ1dCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zLgorICAgIE5FU1RBQkxFX1RBQkxFX1RBR1Mg
PSB7J3RhYmxlJyA6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyJyA6IFsndGFi
bGUnLCAndGJvZHknLCAndGZvb3QnLCAndGhlYWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZCcgOiBbJ3RyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGgnIDogWyd0
ciddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZWFkJyA6IFsndGFibGUnXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0Ym9keScgOiBbJ3RhYmxlJ10sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndGZvb3QnIDogWyd0YWJsZSddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgTk9OX05FU1RBQkxFX0JMT0NLX1RBR1MgPSBbJ2FkZHJlc3MnLCAn
Zm9ybScsICdwJywgJ3ByZSddCisKKyAgICAjSWYgb25lIG9mIHRoZXNlIHRhZ3MgaXMgZW5jb3Vu
dGVyZWQsIGFsbCB0YWdzIHVwIHRvIHRoZSBuZXh0IHRhZyBvZgorICAgICN0aGlzIHR5cGUgYXJl
IHBvcHBlZC4KKyAgICBSRVNFVF9ORVNUSU5HX1RBR1MgPSBidWlsZFRhZ01hcChOb25lLCBORVNU
QUJMRV9CTE9DS19UQUdTLCAnbm9zY3JpcHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5PTl9ORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5FU1RBQkxFX0xJU1RfVEFHUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBORVNUQUJMRV9UQUJMRV9UQUdTKQorCisgICAgTkVTVEFCTEVfVEFH
UyA9IGJ1aWxkVGFnTWFwKFtdLCBORVNUQUJMRV9JTkxJTkVfVEFHUywgTkVTVEFCTEVfQkxPQ0tf
VEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfTElTVF9UQUdT
LCBORVNUQUJMRV9UQUJMRV9UQUdTKQorCisgICAgIyBVc2VkIHRvIGRldGVjdCB0aGUgY2hhcnNl
dCBpbiBhIE1FVEEgdGFnOyBzZWUgc3RhcnRfbWV0YQorICAgIENIQVJTRVRfUkUgPSByZS5jb21w
aWxlKCIoKF58OylccypjaGFyc2V0PSkoW147XSopIiwgcmUuTSkKKworICAgIGRlZiBleHRyYWN0
Q2hhcnNldEZyb21NZXRhKHNlbGYsIGF0dHJzKToKKyAgICAgICAgIiIiQmVhdXRpZnVsIFNvdXAg
Y2FuIGRldGVjdCBhIGNoYXJzZXQgaW5jbHVkZWQgaW4gYSBNRVRBIHRhZywKKyAgICAgICAgdHJ5
IHRvIGNvbnZlcnQgdGhlIGRvY3VtZW50IHRvIHRoYXQgY2hhcnNldCwgYW5kIHJlLXBhcnNlIHRo
ZQorICAgICAgICBkb2N1bWVudCBmcm9tIHRoZSBiZWdpbm5pbmcuIiIiCisgICAgICAgIGh0dHBF
cXVpdiA9IE5vbmUKKyAgICAgICAgY29udGVudFR5cGUgPSBOb25lCisgICAgICAgIGNvbnRlbnRU
eXBlSW5kZXggPSBOb25lCisgICAgICAgIHRhZ05lZWRzRW5jb2RpbmdTdWJzdGl0dXRpb24gPSBG
YWxzZQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRycykpOgorICAgICAgICAg
ICAga2V5LCB2YWx1ZSA9IGF0dHJzW2ldCisgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQor
ICAgICAgICAgICAgaWYga2V5ID09ICdodHRwLWVxdWl2JzoKKyAgICAgICAgICAgICAgICBodHRw
RXF1aXYgPSB2YWx1ZQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ2NvbnRlbnQnOgorICAgICAg
ICAgICAgICAgIGNvbnRlbnRUeXBlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBjb250ZW50VHlw
ZUluZGV4ID0gaQorCisgICAgICAgIGlmIGh0dHBFcXVpdiBhbmQgY29udGVudFR5cGU6ICMgSXQn
cyBhbiBpbnRlcmVzdGluZyBtZXRhIHRhZy4KKyAgICAgICAgICAgIG1hdGNoID0gc2VsZi5DSEFS
U0VUX1JFLnNlYXJjaChjb250ZW50VHlwZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAg
ICAgICAgICAgIGlmIChzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nIGlzIG5vdCBOb25lIG9yCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luYWxFbmNvZGluZyA9PSBzZWxmLmZyb21FbmNv
ZGluZyk6CisgICAgICAgICAgICAgICAgICAgICMgQW4gSFRNTCBlbmNvZGluZyB3YXMgc25pZmZl
ZCB3aGlsZSBjb252ZXJ0aW5nCisgICAgICAgICAgICAgICAgICAgICMgdGhlIGRvY3VtZW50IHRv
IFVuaWNvZGUsIG9yIGFuIEhUTUwgZW5jb2Rpbmcgd2FzCisgICAgICAgICAgICAgICAgICAgICMg
c25pZmZlZCBkdXJpbmcgYSBwcmV2aW91cyBwYXNzIHRocm91Z2ggdGhlCisgICAgICAgICAgICAg
ICAgICAgICMgZG9jdW1lbnQsIG9yIGFuIGVuY29kaW5nIHdhcyBzcGVjaWZpZWQKKyAgICAgICAg
ICAgICAgICAgICAgIyBleHBsaWNpdGx5IGFuZCBpdCB3b3JrZWQuIFJld3JpdGUgdGhlIG1ldGEg
dGFnLgorICAgICAgICAgICAgICAgICAgICBkZWYgcmV3cml0ZShtYXRjaCk6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkgKyAiJVNPVVAtRU5DT0RJTkclIgor
ICAgICAgICAgICAgICAgICAgICBuZXdBdHRyID0gc2VsZi5DSEFSU0VUX1JFLnN1YihyZXdyaXRl
LCBjb250ZW50VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgYXR0cnNbY29udGVudFR5cGVJbmRl
eF0gPSAoYXR0cnNbY29udGVudFR5cGVJbmRleF1bMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0F0dHIpCisgICAgICAgICAgICAgICAgICAgIHRh
Z05lZWRzRW5jb2RpbmdTdWJzdGl0dXRpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG91ciBmaXJzdCBwYXNzIHRocm91Z2ggdGhl
IGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICAjIEdvIHRocm91Z2ggaXQgYWdhaW4gd2l0
aCB0aGUgZW5jb2RpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIG5ld0NoYXJz
ZXQgPSBtYXRjaC5ncm91cCgzKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdDaGFyc2V0IGFu
ZCBuZXdDaGFyc2V0ICE9IHNlbGYub3JpZ2luYWxFbmNvZGluZzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgPSBuZXdDaGFyc2V0CisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9mZWVkKHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcpCisgICAg
ICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wUGFyc2luZworICAgICAgICAgICAgICAgICAg
ICBwYXNzCisgICAgICAgIHRhZyA9IHNlbGYudW5rbm93bl9zdGFydHRhZygibWV0YSIsIGF0dHJz
KQorICAgICAgICBpZiB0YWcgYW5kIHRhZ05lZWRzRW5jb2RpbmdTdWJzdGl0dXRpb246CisgICAg
ICAgICAgICB0YWcuY29udGFpbnNTdWJzdGl0dXRpb25zID0gVHJ1ZQorCisKK2NsYXNzIFN0b3BQ
YXJzaW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBJQ2FudEJlbGlldmVJdHNCZWF1
dGlmdWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorCisgICAgIiIiVGhlIEJlYXV0aWZ1bFNvdXAgY2xh
c3MgaXMgb3JpZW50ZWQgdG93YXJkcyBza2lwcGluZyBvdmVyCisgICAgY29tbW9uIEhUTUwgZXJy
b3JzIGxpa2UgdW5jbG9zZWQgdGFncy4gSG93ZXZlciwgc29tZXRpbWVzIGl0IG1ha2VzCisgICAg
ZXJyb3JzIG9mIGl0cyBvd24uIEZvciBpbnN0YW5jZSwgY29uc2lkZXIgdGhpcyBmcmFnbWVudDoK
KworICAgICA8Yj5Gb288Yj5CYXI8L2I+PC9iPgorCisgICAgVGhpcyBpcyBwZXJmZWN0bHkgdmFs
aWQgKGlmIGJpemFycmUpIEhUTUwuIEhvd2V2ZXIsIHRoZQorICAgIEJlYXV0aWZ1bFNvdXAgY2xh
c3Mgd2lsbCBpbXBsaWNpdGx5IGNsb3NlIHRoZSBmaXJzdCBiIHRhZyB3aGVuIGl0CisgICAgZW5j
b3VudGVycyB0aGUgc2Vjb25kICdiJy4gSXQgd2lsbCB0aGluayB0aGUgYXV0aG9yIHdyb3RlCisg
ICAgIjxiPkZvbzxiPkJhciIsIGFuZCBkaWRuJ3QgY2xvc2UgdGhlIGZpcnN0ICdiJyB0YWcsIGJl
Y2F1c2UKKyAgICB0aGVyZSdzIG5vIHJlYWwtd29ybGQgcmVhc29uIHRvIGJvbGQgc29tZXRoaW5n
IHRoYXQncyBhbHJlYWR5CisgICAgYm9sZC4gV2hlbiBpdCBlbmNvdW50ZXJzICc8L2I+PC9iPicg
aXQgd2lsbCBjbG9zZSB0d28gbW9yZSAnYicKKyAgICB0YWdzLCBmb3IgYSBncmFuZCB0b3RhbCBv
ZiB0aHJlZSB0YWdzIGNsb3NlZCBpbnN0ZWFkIG9mIHR3by4gVGhpcworICAgIGNhbiB0aHJvdyBv
ZmYgdGhlIHJlc3Qgb2YgeW91ciBkb2N1bWVudCBzdHJ1Y3R1cmUuIFRoZSBzYW1lIGlzCisgICAg
dHJ1ZSBvZiBhIG51bWJlciBvZiBvdGhlciB0YWdzLCBsaXN0ZWQgYmVsb3cuCisKKyAgICBJdCdz
IG11Y2ggbW9yZSBjb21tb24gZm9yIHNvbWVvbmUgdG8gZm9yZ2V0IHRvIGNsb3NlIGEgJ2InIHRh
ZworICAgIHRoYW4gdG8gYWN0dWFsbHkgdXNlIG5lc3RlZCAnYicgdGFncywgYW5kIHRoZSBCZWF1
dGlmdWxTb3VwIGNsYXNzCisgICAgaGFuZGxlcyB0aGUgY29tbW9uIGNhc2UuIFRoaXMgY2xhc3Mg
aGFuZGxlcyB0aGUgbm90LWNvLWNvbW1vbgorICAgIGNhc2U6IHdoZXJlIHlvdSBjYW4ndCBiZWxp
ZXZlIHNvbWVvbmUgd3JvdGUgd2hhdCB0aGV5IGRpZCwgYnV0CisgICAgaXQncyB2YWxpZCBIVE1M
IGFuZCBCZWF1dGlmdWxTb3VwIHNjcmV3ZWQgdXAgYnkgYXNzdW1pbmcgaXQKKyAgICB3b3VsZG4n
dCBiZS4iIiIKKworICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVfVEFH
UyA9IFwKKyAgICAgWydlbScsICdiaWcnLCAnaScsICdzbWFsbCcsICd0dCcsICdhYmJyJywgJ2Fj
cm9ueW0nLCAnc3Ryb25nJywKKyAgICAgICdjaXRlJywgJ2NvZGUnLCAnZGZuJywgJ2tiZCcsICdz
YW1wJywgJ3N0cm9uZycsICd2YXInLCAnYicsCisgICAgICAnYmlnJ10KKworICAgIElfQ0FOVF9C
RUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTID0gWydub3NjcmlwdCddCisKKyAgICBO
RVNUQUJMRV9UQUdTID0gYnVpbGRUYWdNYXAoW10sIEJlYXV0aWZ1bFNvdXAuTkVTVEFCTEVfVEFH
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSV9DQU5UX0JFTElFVkVfVEhFWVJF
X05FU1RBQkxFX0JMT0NLX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElf
Q0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVfVEFHUykKKworY2xhc3MgTWluaW1h
bFNvdXAoQmVhdXRpZnVsU291cCk6CisgICAgIiIiVGhlIE1pbmltYWxTb3VwIGNsYXNzIGlzIGZv
ciBwYXJzaW5nIEhUTUwgdGhhdCBjb250YWlucworICAgIHBhdGhvbG9naWNhbGx5IGJhZCBtYXJr
dXAuIEl0IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRhZworICAgIG5lc3RpbmcsIGJ1dCBp
dCBkb2VzIGtub3cgd2hpY2ggdGFncyBhcmUgc2VsZi1jbG9zaW5nLCB0aGF0CisgICAgPHNjcmlw
dD4gdGFncyBjb250YWluIEphdmFzY3JpcHQgYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkLCB0aGF0
CisgICAgTUVUQSB0YWdzIG1heSBjb250YWluIGVuY29kaW5nIGluZm9ybWF0aW9uLCBhbmQgc28g
b24uCisKKyAgICBUaGlzIGFsc28gbWFrZXMgaXQgYmV0dGVyIGZvciBzdWJjbGFzc2luZyB0aGFu
IEJlYXV0aWZ1bFN0b25lU291cAorICAgIG9yIEJlYXV0aWZ1bFNvdXAuIiIiCisKKyAgICBSRVNF
VF9ORVNUSU5HX1RBR1MgPSBidWlsZFRhZ01hcCgnbm9zY3JpcHQnKQorICAgIE5FU1RBQkxFX1RB
R1MgPSB7fQorCitjbGFzcyBCZWF1dGlmdWxTT0FQKEJlYXV0aWZ1bFN0b25lU291cCk6CisgICAg
IiIiVGhpcyBjbGFzcyB3aWxsIHB1c2ggYSB0YWcgd2l0aCBvbmx5IGEgc2luZ2xlIHN0cmluZyBj
aGlsZCBpbnRvCisgICAgdGhlIHRhZydzIHBhcmVudCBhcyBhbiBhdHRyaWJ1dGUuIFRoZSBhdHRy
aWJ1dGUncyBuYW1lIGlzIHRoZSB0YWcKKyAgICBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBz
dHJpbmcgY2hpbGQuIEFuIGV4YW1wbGUgc2hvdWxkIGdpdmUKKyAgICB0aGUgZmxhdm9yIG9mIHRo
ZSBjaGFuZ2U6CisKKyAgICA8Zm9vPjxiYXI+YmF6PC9iYXI+PC9mb28+CisgICAgID0+CisgICAg
PGZvbyBiYXI9ImJheiI+PGJhcj5iYXo8L2Jhcj48L2Zvbz4KKworICAgIFlvdSBjYW4gdGhlbiBh
Y2Nlc3MgZm9vVGFnWydiYXInXSBpbnN0ZWFkIG9mIGZvb1RhZy5iYXJUYWcuc3RyaW5nLgorCisg
ICAgVGhpcyBpcywgb2YgY291cnNlLCB1c2VmdWwgZm9yIHNjcmFwaW5nIHN0cnVjdHVyZXMgdGhh
dCB0ZW5kIHRvCisgICAgdXNlIHN1YmVsZW1lbnRzIGluc3RlYWQgb2YgYXR0cmlidXRlcywgc3Vj
aCBhcyBTT0FQIG1lc3NhZ2VzLiBOb3RlCisgICAgdGhhdCBpdCBtb2RpZmllcyBpdHMgaW5wdXQs
IHNvIGRvbid0IHByaW50IHRoZSBtb2RpZmllZCB2ZXJzaW9uCisgICAgb3V0LgorCisgICAgSSdt
IG5vdCBzdXJlIGhvdyBtYW55IHBlb3BsZSByZWFsbHkgd2FudCB0byB1c2UgdGhpcyBjbGFzczsg
bGV0IG1lCisgICAga25vdyBpZiB5b3UgZG8uIE1haW5seSBJIGxpa2UgdGhlIG5hbWUuIiIiCisK
KyAgICBkZWYgcG9wVGFnKHNlbGYpOgorICAgICAgICBpZiBsZW4oc2VsZi50YWdTdGFjaykgPiAx
OgorICAgICAgICAgICAgdGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgICAgIHBhcmVu
dCA9IHNlbGYudGFnU3RhY2tbLTJdCisgICAgICAgICAgICBwYXJlbnQuX2dldEF0dHJNYXAoKQor
ICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UodGFnLCBUYWcpIGFuZCBsZW4odGFnLmNvbnRlbnRz
KSA9PSAxIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodGFnLmNvbnRlbnRzWzBdLCBO
YXZpZ2FibGVTdHJpbmcpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBwYXJlbnQuYXR0ck1hcC5o
YXNfa2V5KHRhZy5uYW1lKSk6CisgICAgICAgICAgICAgICAgcGFyZW50W3RhZy5uYW1lXSA9IHRh
Zy5jb250ZW50c1swXQorICAgICAgICBCZWF1dGlmdWxTdG9uZVNvdXAucG9wVGFnKHNlbGYpCisK
KyNFbnRlcnByaXNlIGNsYXNzIG5hbWVzISBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRo
YXQgc29tZSBwZW9wbGUKKyN0aGluayB0aGUgbmFtZXMgb2YgdGhlIEJlYXV0aWZ1bCBTb3VwIHBh
cnNlciBjbGFzc2VzIGFyZSB0b28gc2lsbHkKKyNhbmQgInVucHJvZmVzc2lvbmFsIiBmb3IgdXNl
IGluIGVudGVycHJpc2Ugc2NyZWVuLXNjcmFwaW5nLiBXZSBmZWVsCisjeW91ciBwYWluISBGb3Ig
c3VjaC1taW5kZWQgZm9saywgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gQW5kCisjQWxs
LU5pZ2h0IEtvc2hlciBCYWtlcnkgcmVjb21tZW5kcyByZW5hbWluZyB0aGlzIGZpbGUgdG8KKyMi
Um9idXN0UGFyc2VyLnB5IiAob3IsIGluIGNhc2VzIG9mIGV4dHJlbWUgZW50ZXJwcmlzaW5lc3Ms
CisjIlJvYnVzdFBhcnNlckJlYW5JbnRlcmZhY2UuY2xhc3MiKSBhbmQgdXNpbmcgdGhlIGZvbGxv
d2luZworI2VudGVycHJpc2UtZnJpZW5kbHkgY2xhc3MgYWxpYXNlczoKK2NsYXNzIFJvYnVzdFhN
TFBhcnNlcihCZWF1dGlmdWxTdG9uZVNvdXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdEhUTUxQ
YXJzZXIoQmVhdXRpZnVsU291cCk6CisgICAgcGFzcworY2xhc3MgUm9idXN0V2Fja0Fzc0hUTUxQ
YXJzZXIoSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cCk6CisgICAgcGFzcworY2xhc3MgUm9i
dXN0SW5zYW5lbHlXYWNrQXNzSFRNTFBhcnNlcihNaW5pbWFsU291cCk6CisgICAgcGFzcworY2xh
c3MgU2ltcGxpZnlpbmdTT0FQUGFyc2VyKEJlYXV0aWZ1bFNPQVApOgorICAgIHBhc3MKKworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisj
IEJvbnVzIGxpYnJhcnk6IFVuaWNvZGUsIERhbW1pdAorIworIyBUaGlzIGNsYXNzIGZvcmNlcyBY
TUwgZGF0YSBpbnRvIGEgc3RhbmRhcmQgZm9ybWF0ICh1c3VhbGx5IHRvIFVURi04CisjIG9yIFVu
aWNvZGUpLiAgSXQgaXMgaGVhdmlseSBiYXNlZCBvbiBjb2RlIGZyb20gTWFyayBQaWxncmltJ3MK
KyMgVW5pdmVyc2FsIEZlZWQgUGFyc2VyLiBJdCBkb2VzIG5vdCByZXdyaXRlIHRoZSBYTUwgb3Ig
SFRNTCB0bworIyByZWZsZWN0IGEgbmV3IGVuY29kaW5nOiB0aGF0IGhhcHBlbnMgaW4gQmVhdXRp
ZnVsU3RvbmVTb3VwLmhhbmRsZV9waQorIyAoWE1MKSBhbmQgQmVhdXRpZnVsU291cC5zdGFydF9t
ZXRhIChIVE1MKS4KKworIyBBdXRvZGV0ZWN0cyBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorIyBEb3du
bG9hZCBmcm9tIGh0dHA6Ly9jaGFyZGV0LmZlZWRwYXJzZXIub3JnLwordHJ5OgorICAgIGltcG9y
dCBjaGFyZGV0CisjICAgIGltcG9ydCBjaGFyZGV0LmNvbnN0YW50cworIyAgICBjaGFyZGV0LmNv
bnN0YW50cy5fZGVidWcgPSAxCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgY2hhcmRldCA9IE5v
bmUKKworIyBjamtjb2RlY3MgYW5kIGljb252X2NvZGVjIG1ha2UgUHl0aG9uIGtub3cgYWJvdXQg
bW9yZSBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorIyBCb3RoIGFyZSBhdmFpbGFibGUgZnJvbSBodHRw
Oi8vY2prcHl0aG9uLmkxOG4ub3JnLworIyBUaGV5J3JlIGJ1aWx0IGluIGlmIHlvdSB1c2UgUHl0
aG9uIDIuNC4KK3RyeToKKyAgICBpbXBvcnQgY2prY29kZWNzLmFsaWFzZXMKK2V4Y2VwdCBJbXBv
cnRFcnJvcjoKKyAgICBwYXNzCit0cnk6CisgICAgaW1wb3J0IGljb252X2NvZGVjCitleGNlcHQg
SW1wb3J0RXJyb3I6CisgICAgcGFzcworCitjbGFzcyBVbmljb2RlRGFtbWl0OgorICAgICIiIkEg
Y2xhc3MgZm9yIGRldGVjdGluZyB0aGUgZW5jb2Rpbmcgb2YgYSAqTUwgZG9jdW1lbnQgYW5kCisg
ICAgY29udmVydGluZyBpdCB0byBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgc291cmNlIGVuY29k
aW5nIGlzCisgICAgd2luZG93cy0xMjUyLCBjYW4gcmVwbGFjZSBNUyBzbWFydCBxdW90ZXMgd2l0
aCB0aGVpciBIVE1MIG9yIFhNTAorICAgIGVxdWl2YWxlbnRzLiIiIgorCisgICAgIyBUaGlzIGRp
Y3Rpb25hcnkgbWFwcyBjb21tb25seSBzZWVuIHZhbHVlcyBmb3IgImNoYXJzZXQiIGluIEhUTUwK
KyAgICAjIG1ldGEgdGFncyB0byB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gY29kZWMgbmFtZXMu
IEl0IG9ubHkgY292ZXJzCisgICAgIyB2YWx1ZXMgdGhhdCBhcmVuJ3QgaW4gUHl0aG9uJ3MgYWxp
YXNlcyBhbmQgY2FuJ3QgYmUgZGV0ZXJtaW5lZAorICAgICMgYnkgdGhlIGhldXJpc3RpY3MgaW4g
ZmluZF9jb2RlYy4KKyAgICBDSEFSU0VUX0FMSUFTRVMgPSB7ICJtYWNpbnRvc2giIDogIm1hYy1y
b21hbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAieC1zamlzIiA6ICJzaGlmdC1qaXMiIH0K
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlRW5jb2RpbmdzPVtdLAor
ICAgICAgICAgICAgICAgICBzbWFydFF1b3Rlc1RvPSd4bWwnLCBpc0hUTUw9RmFsc2UpOgorICAg
ICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLm1hcmt1
cCwgZG9jdW1lbnRFbmNvZGluZywgc25pZmZlZEVuY29kaW5nID0gXAorICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZGV0ZWN0RW5jb2RpbmcobWFya3VwLCBpc0hUTUwpCisgICAgICAgIHNlbGYu
c21hcnRRdW90ZXNUbyA9IHNtYXJ0UXVvdGVzVG8KKyAgICAgICAgc2VsZi50cmllZEVuY29kaW5n
cyA9IFtdCisgICAgICAgIGlmIG1hcmt1cCA9PSAnJyBvciBpc2luc3RhbmNlKG1hcmt1cCwgdW5p
Y29kZSk6CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisgICAgICAg
ICAgICBzZWxmLnVuaWNvZGUgPSB1bmljb2RlKG1hcmt1cCkKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIHUgPSBOb25lCisgICAgICAgIGZvciBwcm9wb3NlZEVuY29kaW5nIGluIG92ZXJy
aWRlRW5jb2RpbmdzOgorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKHByb3Bvc2Vk
RW5jb2RpbmcpCisgICAgICAgICAgICBpZiB1OiBicmVhaworICAgICAgICBpZiBub3QgdToKKyAg
ICAgICAgICAgIGZvciBwcm9wb3NlZEVuY29kaW5nIGluIChkb2N1bWVudEVuY29kaW5nLCBzbmlm
ZmVkRW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9w
b3NlZEVuY29kaW5nKQorICAgICAgICAgICAgICAgIGlmIHU6IGJyZWFrCisKKyAgICAgICAgIyBJ
ZiBubyBsdWNrIGFuZCB3ZSBoYXZlIGF1dG8tZGV0ZWN0aW9uIGxpYnJhcnksIHRyeSB0aGF0Ogor
ICAgICAgICBpZiBub3QgdSBhbmQgY2hhcmRldCBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tYXJr
dXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKGNoYXJkZXQu
ZGV0ZWN0KHNlbGYubWFya3VwKVsnZW5jb2RpbmcnXSkKKworICAgICAgICAjIEFzIGEgbGFzdCBy
ZXNvcnQsIHRyeSB1dGYtOCBhbmQgd2luZG93cy0xMjUyOgorICAgICAgICBpZiBub3QgdToKKyAg
ICAgICAgICAgIGZvciBwcm9wb3NlZF9lbmNvZGluZyBpbiAoInV0Zi04IiwgIndpbmRvd3MtMTI1
MiIpOgorICAgICAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3NlZF9lbmNv
ZGluZykKKyAgICAgICAgICAgICAgICBpZiB1OiBicmVhaworCisgICAgICAgIHNlbGYudW5pY29k
ZSA9IHUKKyAgICAgICAgaWYgbm90IHU6IHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IE5vbmUKKwor
ICAgIGRlZiBfc3ViTVNDaGFyKHNlbGYsIG1hdGNoKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhIE1T
IHNtYXJ0IHF1b3RlIGNoYXJhY3RlciB0byBhbiBYTUwgb3IgSFRNTAorICAgICAgICBlbnRpdHku
IiIiCisgICAgICAgIG9yaWcgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBzdWIgPSBzZWxmLk1T
X0NIQVJTLmdldChvcmlnKQorICAgICAgICBpZiB0eXBlKHN1YikgPT0gdHlwZXMuVHVwbGVUeXBl
OgorICAgICAgICAgICAgaWYgc2VsZi5zbWFydFF1b3Rlc1RvID09ICd4bWwnOgorICAgICAgICAg
ICAgICAgIHN1YiA9ICcmI3gnLmVuY29kZSgpICsgc3ViWzFdLmVuY29kZSgpICsgJzsnLmVuY29k
ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YiA9ICcmJy5lbmNvZGUo
KSArIHN1YlswXS5lbmNvZGUoKSArICc7Jy5lbmNvZGUoKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgc3ViID0gc3ViLmVuY29kZSgpCisgICAgICAgIHJldHVybiBzdWIKKworICAgIGRlZiBf
Y29udmVydEZyb20oc2VsZiwgcHJvcG9zZWQpOgorICAgICAgICBwcm9wb3NlZCA9IHNlbGYuZmlu
ZF9jb2RlYyhwcm9wb3NlZCkKKyAgICAgICAgaWYgbm90IHByb3Bvc2VkIG9yIHByb3Bvc2VkIGlu
IHNlbGYudHJpZWRFbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBz
ZWxmLnRyaWVkRW5jb2RpbmdzLmFwcGVuZChwcm9wb3NlZCkKKyAgICAgICAgbWFya3VwID0gc2Vs
Zi5tYXJrdXAKKworICAgICAgICAjIENvbnZlcnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29t
aW5nIGZyb20gYW4gZW5jb2RpbmcKKyAgICAgICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAg
ICAgICAgaWYgc2VsZi5zbWFydFF1b3Rlc1RvIGFuZCBwcm9wb3NlZC5sb3dlcigpIGluKCJ3aW5k
b3dzLTEyNTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImlzby04ODU5LTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImlzby04ODU5LTIiKToKKyAgICAgICAgICAgIHNtYXJ0X3F1
b3Rlc19yZSA9ICIoW1x4ODAtXHg5Zl0pIgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX2NvbXBp
bGVkID0gcmUuY29tcGlsZShzbWFydF9xdW90ZXNfcmUpCisgICAgICAgICAgICBtYXJrdXAgPSBz
bWFydF9xdW90ZXNfY29tcGlsZWQuc3ViKHNlbGYuX3N1Yk1TQ2hhciwgbWFya3VwKQorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICMgcHJpbnQgIlRyeWluZyB0byBjb252ZXJ0IGRvY3VtZW50
IHRvICVzIiAlIHByb3Bvc2VkCisgICAgICAgICAgICB1ID0gc2VsZi5fdG9Vbmljb2RlKG1hcmt1
cCwgcHJvcG9zZWQpCisgICAgICAgICAgICBzZWxmLm1hcmt1cCA9IHUKKyAgICAgICAgICAgIHNl
bGYub3JpZ2luYWxFbmNvZGluZyA9IHByb3Bvc2VkCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICAjIHByaW50ICJUaGF0IGRpZG4ndCB3b3JrISIKKyAgICAgICAgICAg
ICMgcHJpbnQgZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgI3ByaW50ICJDb3Jy
ZWN0IGVuY29kaW5nOiAlcyIgJSBwcm9wb3NlZAorICAgICAgICByZXR1cm4gc2VsZi5tYXJrdXAK
KworICAgIGRlZiBfdG9Vbmljb2RlKHNlbGYsIGRhdGEsIGVuY29kaW5nKToKKyAgICAgICAgJycn
R2l2ZW4gYSBzdHJpbmcgYW5kIGl0cyBlbmNvZGluZywgZGVjb2RlcyB0aGUgc3RyaW5nIGludG8g
VW5pY29kZS4KKyAgICAgICAgJWVuY29kaW5nIGlzIGEgc3RyaW5nIHJlY29nbml6ZWQgYnkgZW5j
b2RpbmdzLmFsaWFzZXMnJycKKworICAgICAgICAjIHN0cmlwIEJ5dGUgT3JkZXIgTWFyayAoaWYg
cHJlc2VudCkKKyAgICAgICAgaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdc
eGZlXHhmZicpIFwKKyAgICAgICAgICAgICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcp
OgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTE2YmUnCisgICAgICAgICAgICBkYXRhID0g
ZGF0YVsyOl0KKyAgICAgICAgZWxpZiAobGVuKGRhdGEpID49IDQpIGFuZCAoZGF0YVs6Ml0gPT0g
J1x4ZmZceGZlJykgXAorICAgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4
MDAnKToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgZGF0
YSA9IGRhdGFbMjpdCisgICAgICAgIGVsaWYgZGF0YVs6M10gPT0gJ1x4ZWZceGJiXHhiZic6Cisg
ICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzM6
XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09ICdceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAg
ICAgIGVuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisg
ICAgICAgIGVsaWYgZGF0YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAg
ZW5jb2RpbmcgPSAndXRmLTMybGUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVs0Ol0KKyAgICAg
ICAgbmV3ZGF0YSA9IHVuaWNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgIHJldHVybiBuZXdk
YXRhCisKKyAgICBkZWYgX2RldGVjdEVuY29kaW5nKHNlbGYsIHhtbF9kYXRhLCBpc0hUTUw9RmFs
c2UpOgorICAgICAgICAiIiJHaXZlbiBhIGRvY3VtZW50LCB0cmllcyB0byBkZXRlY3QgaXRzIFhN
TCBlbmNvZGluZy4iIiIKKyAgICAgICAgeG1sX2VuY29kaW5nID0gc25pZmZlZF94bWxfZW5jb2Rp
bmcgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHhtbF9kYXRhWzo0XSA9PSAn
XHg0Y1x4NmZceGE3XHg5NCc6CisgICAgICAgICAgICAgICAgIyBFQkNESUMKKyAgICAgICAgICAg
ICAgICB4bWxfZGF0YSA9IHNlbGYuX2ViY2RpY190b19hc2NpaSh4bWxfZGF0YSkKKyAgICAgICAg
ICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDAwXHgzY1x4MDBceDNmJzoKKyAgICAgICAgICAg
ICAgICAjIFVURi0xNkJFCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAn
dXRmLTE2YmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAn
dXRmLTE2YmUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgKGxlbih4bWxfZGF0
YSkgPj0gNCkgYW5kICh4bWxfZGF0YVs6Ml0gPT0gJ1x4ZmVceGZmJykgXAorICAgICAgICAgICAg
ICAgICAgICAgYW5kICh4bWxfZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAg
ICAgICMgVVRGLTE2QkUgd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNv
ZGluZyA9ICd1dGYtMTZiZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1s
X2RhdGFbMjpdLCAndXRmLTE2YmUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYg
eG1sX2RhdGFbOjRdID09ICdceDNjXHgwMFx4M2ZceDAwJzoKKyAgICAgICAgICAgICAgICAjIFVU
Ri0xNkxFCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUn
CisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTE2bGUn
KS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgKGxlbih4bWxfZGF0YSkgPj0gNCkg
YW5kICh4bWxfZGF0YVs6Ml0gPT0gJ1x4ZmZceGZlJykgYW5kIFwKKyAgICAgICAgICAgICAgICAg
ICAgICh4bWxfZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgICAgICMgVVRG
LTE2TEUgd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1
dGYtMTZsZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMjpd
LCAndXRmLTE2bGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFb
OjRdID09ICdceDAwXHgwMFx4MDBceDNjJzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkJFCisg
ICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTMyYmUnCisgICAgICAg
ICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTMyYmUnKS5lbmNvZGUo
J3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDNjXHgwMFx4MDBc
eDAwJzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkxFCisgICAgICAgICAgICAgICAgc25pZmZl
ZF94bWxfZW5jb2RpbmcgPSAndXRmLTMybGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1
bmljb2RlKHhtbF9kYXRhLCAndXRmLTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAg
IGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgICAg
ICAjIFVURi0zMkJFIHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rp
bmcgPSAndXRmLTMyYmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9k
YXRhWzQ6XSwgJ3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHht
bF9kYXRhWzo0XSA9PSAnXHhmZlx4ZmVceDAwXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYt
MzJMRSB3aXRoIEJPTQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0
Zi0zMmxlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0s
ICd1dGYtMzJsZScpLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6
M10gPT0gJ1x4ZWZceGJiXHhiZic6CisgICAgICAgICAgICAgICAgIyBVVEYtOCB3aXRoIEJPTQor
ICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi04JworICAgICAgICAg
ICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVszOl0sICd1dGYtOCcpLmVuY29kZSgn
dXRmLTgnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9l
bmNvZGluZyA9ICdhc2NpaScKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoK
KyAgICAgICAgICAgIHhtbF9lbmNvZGluZ19tYXRjaCA9IE5vbmUKKyAgICAgICAgeG1sX2VuY29k
aW5nX3JlID0gJ148XD8uKmVuY29kaW5nPVtcJyJdKC4qPylbXCciXS4qXD8+Jy5lbmNvZGUoKQor
ICAgICAgICB4bWxfZW5jb2RpbmdfbWF0Y2ggPSByZS5jb21waWxlKHhtbF9lbmNvZGluZ19yZSku
bWF0Y2goeG1sX2RhdGEpCisgICAgICAgIGlmIG5vdCB4bWxfZW5jb2RpbmdfbWF0Y2ggYW5kIGlz
SFRNTDoKKyAgICAgICAgICAgIG1ldGFfcmUgPSAnPFxzKm1ldGFbXj5dK2NoYXJzZXQ9KFtePl0q
PylbO1wnIj5dJy5lbmNvZGUoKQorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShtZXRh
X3JlLCByZS5JKQorICAgICAgICAgICAgeG1sX2VuY29kaW5nX21hdGNoID0gcmVnZXhwLnNlYXJj
aCh4bWxfZGF0YSkKKyAgICAgICAgaWYgeG1sX2VuY29kaW5nX21hdGNoIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgeG1sX2VuY29kaW5nID0geG1sX2VuY29kaW5nX21hdGNoLmdyb3VwcygpWzBd
LmRlY29kZSgKKyAgICAgICAgICAgICAgICAnYXNjaWknKS5sb3dlcigpCisgICAgICAgICAgICBp
ZiBpc0hUTUw6CisgICAgICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IHht
bF9lbmNvZGluZworICAgICAgICAgICAgaWYgc25pZmZlZF94bWxfZW5jb2RpbmcgYW5kIFwKKyAg
ICAgICAgICAgICAgICh4bWxfZW5jb2RpbmcgaW4gKCdpc28tMTA2NDYtdWNzLTInLCAndWNzLTIn
LCAnY3N1bmljb2RlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc28tMTA2
NDYtdWNzLTQnLCAndWNzLTQnLCAnY3N1Y3M0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd1dGYtMTYnLCAndXRmLTMyJywgJ3V0Zl8xNicsICd1dGZfMzInLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3V0ZjE2JywgJ3UxNicpKToKKyAgICAgICAgICAgICAg
ICB4bWxfZW5jb2RpbmcgPSBzbmlmZmVkX3htbF9lbmNvZGluZworICAgICAgICByZXR1cm4geG1s
X2RhdGEsIHhtbF9lbmNvZGluZywgc25pZmZlZF94bWxfZW5jb2RpbmcKKworCisgICAgZGVmIGZp
bmRfY29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2RlYyhzZWxm
LkNIQVJTRVRfQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCkpIFwKKyAgICAgICAgICAgICAg
IG9yIChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiIikpKSBc
CisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBs
YWNlKCItIiwgIl8iKSkpIFwKKyAgICAgICAgICAgICAgIG9yIGNoYXJzZXQKKworICAgIGRlZiBf
Y29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIGlmIG5vdCBjaGFyc2V0OiByZXR1cm4gY2hh
cnNldAorICAgICAgICBjb2RlYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29k
ZWNzLmxvb2t1cChjaGFyc2V0KQorICAgICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAg
IGV4Y2VwdCAoTG9va3VwRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAg
ICAgICByZXR1cm4gY29kZWMKKworICAgIEVCQ0RJQ19UT19BU0NJSV9NQVAgPSBOb25lCisgICAg
ZGVmIF9lYmNkaWNfdG9fYXNjaWkoc2VsZiwgcyk6CisgICAgICAgIGMgPSBzZWxmLl9fY2xhc3Nf
XworICAgICAgICBpZiBub3QgYy5FQkNESUNfVE9fQVNDSUlfTUFQOgorICAgICAgICAgICAgZW1h
cCA9ICgwLDEsMiwzLDE1Niw5LDEzNCwxMjcsMTUxLDE0MSwxNDIsMTEsMTIsMTMsMTQsMTUsCisg
ICAgICAgICAgICAgICAgICAgIDE2LDE3LDE4LDE5LDE1NywxMzMsOCwxMzUsMjQsMjUsMTQ2LDE0
MywyOCwyOSwzMCwzMSwKKyAgICAgICAgICAgICAgICAgICAgMTI4LDEyOSwxMzAsMTMxLDEzMiwx
MCwyMywyNywxMzYsMTM3LDEzOCwxMzksMTQwLDUsNiw3LAorICAgICAgICAgICAgICAgICAgICAx
NDQsMTQ1LDIyLDE0NywxNDgsMTQ5LDE1MCw0LDE1MiwxNTMsMTU0LDE1NSwyMCwyMSwxNTgsMjYs
CisgICAgICAgICAgICAgICAgICAgIDMyLDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcs
MTY4LDkxLDQ2LDYwLDQwLDQzLDMzLAorICAgICAgICAgICAgICAgICAgICAzOCwxNjksMTcwLDE3
MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3Nyw5MywzNiw0Miw0MSw1OSw5NCwKKyAgICAgICAgICAg
ICAgICAgICAgNDUsNDcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxMjQsNDQsMzcs
OTUsNjIsNjMsCisgICAgICAgICAgICAgICAgICAgIDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5
MiwxOTMsMTk0LDk2LDU4LDM1LDY0LDM5LDYxLDM0LAorICAgICAgICAgICAgICAgICAgICAxOTUs
OTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTk2LDE5NywxOTgsMTk5LDIwMCwKKyAg
ICAgICAgICAgICAgICAgICAgMjAxLDIwMiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEz
LDExNCwyMDMsMjA0LDIwNSwKKyAgICAgICAgICAgICAgICAgICAgMjA2LDIwNywyMDgsMjA5LDEy
NiwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDIxMCwKKyAgICAgICAgICAgICAgICAg
ICAgMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIy
NCwKKyAgICAgICAgICAgICAgICAgICAgMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDEyMyw2
NSw2Niw2Nyw2OCw2OSw3MCw3MSw3MiwKKyAgICAgICAgICAgICAgICAgICAgNzMsMjMyLDIzMywy
MzQsMjM1LDIzNiwyMzcsMTI1LDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLAorICAgICAgICAgICAg
ICAgICAgICA4MiwyMzgsMjM5LDI0MCwyNDEsMjQyLDI0Myw5MiwxNTksODMsODQsODUsODYsODcs
ODgsODksCisgICAgICAgICAgICAgICAgICAgIDkwLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDQ4
LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LAorICAgICAgICAgICAgICAgICAgICAyNTAsMjUx
LDI1MiwyNTMsMjU0LDI1NSkKKyAgICAgICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgICAg
IGMuRUJDRElDX1RPX0FTQ0lJX01BUCA9IHN0cmluZy5tYWtldHJhbnMoIFwKKyAgICAgICAgICAg
ICcnLmpvaW4obWFwKGNociwgcmFuZ2UoMjU2KSkpLCAnJy5qb2luKG1hcChjaHIsIGVtYXApKSkK
KyAgICAgICAgcmV0dXJuIHMudHJhbnNsYXRlKGMuRUJDRElDX1RPX0FTQ0lJX01BUCkKKworICAg
IE1TX0NIQVJTID0geyAnXHg4MCcgOiAoJ2V1cm8nLCAnMjBBQycpLAorICAgICAgICAgICAgICAg
ICAnXHg4MScgOiAnICcsCisgICAgICAgICAgICAgICAgICdceDgyJyA6ICgnc2JxdW8nLCAnMjAx
QScpLAorICAgICAgICAgICAgICAgICAnXHg4MycgOiAoJ2Zub2YnLCAnMTkyJyksCisgICAgICAg
ICAgICAgICAgICdceDg0JyA6ICgnYmRxdW8nLCAnMjAxRScpLAorICAgICAgICAgICAgICAgICAn
XHg4NScgOiAoJ2hlbGxpcCcsICcyMDI2JyksCisgICAgICAgICAgICAgICAgICdceDg2JyA6ICgn
ZGFnZ2VyJywgJzIwMjAnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODcnIDogKCdEYWdnZXInLCAn
MjAyMScpLAorICAgICAgICAgICAgICAgICAnXHg4OCcgOiAoJ2NpcmMnLCAnMkM2JyksCisgICAg
ICAgICAgICAgICAgICdceDg5JyA6ICgncGVybWlsJywgJzIwMzAnKSwKKyAgICAgICAgICAgICAg
ICAgJ1x4OEEnIDogKCdTY2Fyb24nLCAnMTYwJyksCisgICAgICAgICAgICAgICAgICdceDhCJyA6
ICgnbHNhcXVvJywgJzIwMzknKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEMnIDogKCdPRWxpZycs
ICcxNTInKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEQnIDogJz8nLAorICAgICAgICAgICAgICAg
ICAnXHg4RScgOiAoJyN4MTdEJywgJzE3RCcpLAorICAgICAgICAgICAgICAgICAnXHg4RicgOiAn
PycsCisgICAgICAgICAgICAgICAgICdceDkwJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4
OTEnIDogKCdsc3F1bycsICcyMDE4JyksCisgICAgICAgICAgICAgICAgICdceDkyJyA6ICgncnNx
dW8nLCAnMjAxOScpLAorICAgICAgICAgICAgICAgICAnXHg5MycgOiAoJ2xkcXVvJywgJzIwMUMn
KSwKKyAgICAgICAgICAgICAgICAgJ1x4OTQnIDogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAg
ICAgICAgICAgICdceDk1JyA6ICgnYnVsbCcsICcyMDIyJyksCisgICAgICAgICAgICAgICAgICdc
eDk2JyA6ICgnbmRhc2gnLCAnMjAxMycpLAorICAgICAgICAgICAgICAgICAnXHg5NycgOiAoJ21k
YXNoJywgJzIwMTQnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTgnIDogKCd0aWxkZScsICcyREMn
KSwKKyAgICAgICAgICAgICAgICAgJ1x4OTknIDogKCd0cmFkZScsICcyMTIyJyksCisgICAgICAg
ICAgICAgICAgICdceDlhJyA6ICgnc2Nhcm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgICAn
XHg5YicgOiAoJ3JzYXF1bycsICcyMDNBJyksCisgICAgICAgICAgICAgICAgICdceDljJyA6ICgn
b2VsaWcnLCAnMTUzJyksCisgICAgICAgICAgICAgICAgICdceDlkJyA6ICc/JywKKyAgICAgICAg
ICAgICAgICAgJ1x4OWUnIDogKCcjeDE3RScsICcxN0UnKSwKKyAgICAgICAgICAgICAgICAgJ1x4
OWYnIDogKCdZdW1sJywgJycpLH0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjQnkgZGVmYXVsdCwg
YWN0IGFzIGFuIEhUTUwgcHJldHR5LXByaW50ZXIuCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIGltcG9ydCBzeXMKKyAgICBzb3VwID0gQmVhdXRpZnVsU291cChzeXMuc3RkaW4pCisg
ICAgcHJpbnQgc291cC5wcmV0dGlmeSgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvYnVnemlsbGEucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvYnVnemls
bGEucHkKaW5kZXggMGVlYjAxYy4uNjI1ZjBkNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2J1Z3ppbGxhLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy9idWd6aWxsYS5weQpAQCAtMzMsMTggKzMzLDIwIEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBv
cnQgc3lzCiBpbXBvcnQgdXJsbGliMgogCisjIFdlYktpdCBpbmNsdWRlcyBhIGJ1aWx0IGNvcHkg
b2YgQmVhdXRpZnVsU291cCBpbiBTY3JpcHRzL21vZHVsZXMKKyMgc28gdGhpcyBpbXBvcnQgc2hv
dWxkIGFsd2F5cyBzdWNjZWVkLgorZnJvbSAuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVs
U291cAorCiB0cnk6Ci0gICAgZnJvbSBCZWF1dGlmdWxTb3VwIGltcG9ydCBCZWF1dGlmdWxTb3Vw
CiAgICAgZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKIGV4Y2VwdCBJbXBvcnRFcnJvciwg
ZToKICAgICBwcmludCAiIiIKLUJlYXV0aWZ1bFNvdXAgYW5kIG1lY2hhbml6ZSBhcmUgcmVxdWly
ZWQuCittZWNoYW5pemUgaXMgcmVxdWlyZWQuCiAKIFRvIGluc3RhbGw6Ci1zdWRvIGVhc3lfaW5z
dGFsbCBCZWF1dGlmdWxTb3VwIG1lY2hhbml6ZQorc3VkbyBlYXN5X2luc3RhbGwgbWVjaGFuaXpl
CiAKIE9yIGZyb20gdGhlIHdlYjoKLWh0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1
dGlmdWxTb3VwLwogaHR0cDovL3d3d3NlYXJjaC5zb3VyY2Vmb3JnZS5uZXQvbWVjaGFuaXplLwog
IiIiCiAgICAgZXhpdCgxKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVz
L3NjbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkKaW5kZXggMmIzNjhk
NC4uZDliYjJmMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3NjbS5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc2NtLnB5CkBAIC0xMzgsNyArMTM4
LDcgQEAgY2xhc3MgU0NNOgogICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZik6CiAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgogCi0g
ICAgZGVmIGNyZWF0ZV9wYXRjaF9jb21tYW5kKHNlbGYpOgorICAgIGRlZiBjcmVhdGVfcGF0Y2go
c2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11
c3QgaW1wbGVtZW50IgogCiAgICAgZGVmIGNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2Fn
ZSk6CkBAIC0yMDksOCArMjA5LDggQEAgY2xhc3MgU1ZOKFNDTSk6CiAgICAgZGVmIGRpc3BsYXlf
bmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICJzdm4iCiAKLSAgICBkZWYgY3JlYXRlX3BhdGNo
X2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNjcmlwdF9wYXRoKCJzdm4tY3Jl
YXRlLXBhdGNoIikKKyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5ydW5fY29tbWFuZChzZWxmLnNjcmlwdF9wYXRoKCJzdm4tY3JlYXRlLXBhdGNoIikpCiAK
ICAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKICAgICAgICAgaWYg
c2VsZi5kcnlydW46CkBAIC0yNjcsOCArMjY3LDggQEAgY2xhc3MgR2l0KFNDTSk6CiAgICAgZGVm
IGRpc3BsYXlfbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICJnaXQiCiAKLSAgICBkZWYgY3Jl
YXRlX3BhdGNoX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiAiZ2l0IGRpZmYgSEVBRCIK
KyAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29t
bWFuZCgiZ2l0IGRpZmYgSEVBRCIpCiAKICAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxm
LCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2UobWVz
c2FnZSk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32043</attachid>
            <date>2009-06-30 02:08:59 -0700</date>
            <delta_ts>2009-06-30 02:31:05 -0700</delta_ts>
            <desc>Add BeautifulSoup, now w/o any create_patch changes</desc>
            <filename>bugzilla_requires_a_filename.patch</filename>
            <type>text/plain</type>
            <size>83369</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA0ODcwZDY4Li5mZjA2MDUyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMDktMDYt
MzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgYSBidWlsdCBjb3B5IG9mIEJlYXV0
aWZ1bFNvdXAgMy4xLjAuMSBzbyB0aGF0CisgICAgICAgIGJ1Z3ppbGxhLXRvb2wgdXNlcnMgZG8g
bm90IG5lZWQgdG8gaW5zdGFsbCBpdCBtYW51YWxseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODMzCisKKyAgICAgICAgQmVhdXRpZnVsU291cCBp
cyBCU0QtbGljZW5zZWQgKHRodXMgV2ViS2l0IGNvbXBhdGlibGUpIGFuZCBhdmFpbGFibGUgZnJv
bToKKyAgICAgICAgaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAK
KworICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDogZml4ZWQgYSB0eXBvIGluIGEgbG9n
IG1lc3NhZ2UuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL0JlYXV0aWZ1bFNvdXAucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvbW9kdWxlcy9idWd6aWxsYS5weToKKworMjAwOS0wNi0z
MCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gSGF1c21hbm4uCiAKICAgICAgICAgRml4IG91ciBjcmVhdGVfcGF0Y2ggaGFuZGxpbmcg
dG8gbm90CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggNjUyYjJlYS4uMjUzNmRmYyAx
MDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtMjYxLDcgKzI2MSw3IEBAIGNsYXNzIExh
bmRBbmRVcGRhdGVCdWcoQ29tbWFuZCk6CiAKICAgICAgICAgY29tbWVudF90ZXh0ID0gTGFuZFBh
dGNoZXNGcm9tQnVncy5idWlsZF9hbmRfY29tbWl0KHRvb2wuc2NtKCksIG9wdGlvbnMpCiAgICAg
ICAgIGlmIGJ1Z19pZDoKLSAgICAgICAgICAgIGxvZygiVXBkYXRpbmcgYnVnICVzIiwgYnVnX2lk
KQorICAgICAgICAgICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQogICAgICAgICAg
ICAgaWYgb3B0aW9ucy5jbG9zZToKICAgICAgICAgICAgICAgICB0b29sLmJ1Z3MuY2xvc2VfYnVn
X2FzX2ZpeGVkKGJ1Z19pZCwgY29tbWVudF90ZXh0KQogICAgICAgICAgICAgZWxzZToKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1dGlmdWxTb3VwLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL0JlYXV0aWZ1bFNvdXAucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyMDRlNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy9CZWF1dGlmdWxTb3VwLnB5CkBAIC0wLDAgKzEsMjAwMCBAQAor
IiIiQmVhdXRpZnVsIFNvdXAKK0VsaXhpciBhbmQgVG9uaWMKKyJUaGUgU2NyZWVuLVNjcmFwZXIn
cyBGcmllbmQiCitodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8K
KworQmVhdXRpZnVsIFNvdXAgcGFyc2VzIGEgKHBvc3NpYmx5IGludmFsaWQpIFhNTCBvciBIVE1M
IGRvY3VtZW50IGludG8gYQordHJlZSByZXByZXNlbnRhdGlvbi4gSXQgcHJvdmlkZXMgbWV0aG9k
cyBhbmQgUHl0aG9uaWMgaWRpb21zIHRoYXQgbWFrZQoraXQgZWFzeSB0byBuYXZpZ2F0ZSwgc2Vh
cmNoLCBhbmQgbW9kaWZ5IHRoZSB0cmVlLgorCitBIHdlbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3Vt
ZW50IHlpZWxkcyBhIHdlbGwtZm9ybWVkIGRhdGEKK3N0cnVjdHVyZS4gQW4gaWxsLWZvcm1lZCBY
TUwvSFRNTCBkb2N1bWVudCB5aWVsZHMgYSBjb3JyZXNwb25kaW5nbHkKK2lsbC1mb3JtZWQgZGF0
YSBzdHJ1Y3R1cmUuIElmIHlvdXIgZG9jdW1lbnQgaXMgb25seSBsb2NhbGx5Cit3ZWxsLWZvcm1l
ZCwgeW91IGNhbiB1c2UgdGhpcyBsaWJyYXJ5IHRvIGZpbmQgYW5kIHByb2Nlc3MgdGhlCit3ZWxs
LWZvcm1lZCBwYXJ0IG9mIGl0LgorCitCZWF1dGlmdWwgU291cCB3b3JrcyB3aXRoIFB5dGhvbiAy
LjIgYW5kIHVwLiBJdCBoYXMgbm8gZXh0ZXJuYWwKK2RlcGVuZGVuY2llcywgYnV0IHlvdSdsbCBo
YXZlIG1vcmUgc3VjY2VzcyBhdCBjb252ZXJ0aW5nIGRhdGEgdG8gVVRGLTgKK2lmIHlvdSBhbHNv
IGluc3RhbGwgdGhlc2UgdGhyZWUgcGFja2FnZXM6CisKKyogY2hhcmRldCwgZm9yIGF1dG8tZGV0
ZWN0aW5nIGNoYXJhY3RlciBlbmNvZGluZ3MKKyAgaHR0cDovL2NoYXJkZXQuZmVlZHBhcnNlci5v
cmcvCisqIGNqa2NvZGVjcyBhbmQgaWNvbnZfY29kZWMsIHdoaWNoIGFkZCBtb3JlIGVuY29kaW5n
cyB0byB0aGUgb25lcyBzdXBwb3J0ZWQKKyAgYnkgc3RvY2sgUHl0aG9uLgorICBodHRwOi8vY2pr
cHl0aG9uLmkxOG4ub3JnLworCitCZWF1dGlmdWwgU291cCBkZWZpbmVzIGNsYXNzZXMgZm9yIHR3
byBtYWluIHBhcnNpbmcgc3RyYXRlZ2llczoKKworICogQmVhdXRpZnVsU3RvbmVTb3VwLCBmb3Ig
cGFyc2luZyBYTUwsIFNHTUwsIG9yIHlvdXIgZG9tYWluLXNwZWNpZmljCisgICBsYW5ndWFnZSB0
aGF0IGtpbmQgb2YgbG9va3MgbGlrZSBYTUwuCisKKyAqIEJlYXV0aWZ1bFNvdXAsIGZvciBwYXJz
aW5nIHJ1bi1vZi10aGUtbWlsbCBIVE1MIGNvZGUsIGJlIGl0IHZhbGlkCisgICBvciBpbnZhbGlk
LiBUaGlzIGNsYXNzIGhhcyB3ZWIgYnJvd3Nlci1saWtlIGhldXJpc3RpY3MgZm9yCisgICBvYnRh
aW5pbmcgYSBzZW5zaWJsZSBwYXJzZSB0cmVlIGluIHRoZSBmYWNlIG9mIGNvbW1vbiBIVE1MIGVy
cm9ycy4KKworQmVhdXRpZnVsIFNvdXAgYWxzbyBkZWZpbmVzIGEgY2xhc3MgKFVuaWNvZGVEYW1t
aXQpIGZvciBhdXRvZGV0ZWN0aW5nCit0aGUgZW5jb2Rpbmcgb2YgYW4gSFRNTCBvciBYTUwgZG9j
dW1lbnQsIGFuZCBjb252ZXJ0aW5nIGl0IHRvCitVbmljb2RlLiBNdWNoIG9mIHRoaXMgY29kZSBp
cyB0YWtlbiBmcm9tIE1hcmsgUGlsZ3JpbSdzIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4KKworRm9y
IG1vcmUgdGhhbiB5b3UgZXZlciB3YW50ZWQgdG8ga25vdyBhYm91dCBCZWF1dGlmdWwgU291cCwg
c2VlIHRoZQorZG9jdW1lbnRhdGlvbjoKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9C
ZWF1dGlmdWxTb3VwL2RvY3VtZW50YXRpb24uaHRtbAorCitIZXJlLCBoYXZlIHNvbWUgbGVnYWxl
c2U6CisKK0NvcHlyaWdodCAoYykgMjAwNC0yMDA5LCBMZW9uYXJkIFJpY2hhcmRzb24KKworQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKworICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKworICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHRoZSBCZWF1dGlm
dWwgU291cCBDb25zb3J0aXVtIGFuZCBBbGwKKyAgICBOaWdodCBLb3NoZXIgQmFrZXJ5IG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAgICB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLCBEQU1NSVQuCisKKyIiIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3Jz
CisKK19fYXV0aG9yX18gPSAiTGVvbmFyZCBSaWNoYXJkc29uIChsZW9uYXJkckBzZWdmYXVsdC5v
cmcpIgorX192ZXJzaW9uX18gPSAiMy4xLjAuMSIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0
IChjKSAyMDA0LTIwMDkgTGVvbmFyZCBSaWNoYXJkc29uIgorX19saWNlbnNlX18gPSAiTmV3LXN0
eWxlIEJTRCIKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IG1hcmt1cGJhc2UKK2ltcG9ydCB0eXBl
cworaW1wb3J0IHJlCitmcm9tIEhUTUxQYXJzZXIgaW1wb3J0IEhUTUxQYXJzZXIsIEhUTUxQYXJz
ZUVycm9yCit0cnk6CisgICAgZnJvbSBodG1sZW50aXR5ZGVmcyBpbXBvcnQgbmFtZTJjb2RlcG9p
bnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBuYW1lMmNvZGVwb2ludCA9IHt9Cit0cnk6Cisg
ICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNl
dAorCisjVGhlc2UgaGFja3MgbWFrZSBCZWF1dGlmdWwgU291cCBhYmxlIHRvIHBhcnNlIFhNTCB3
aXRoIG5hbWVzcGFjZXMKK21hcmt1cGJhc2UuX2RlY2xuYW1lX21hdGNoID0gcmUuY29tcGlsZShy
J1thLXpBLVpdWy1fLjphLXpBLVowLTldKlxzKicpLm1hdGNoCisKK0RFRkFVTFRfT1VUUFVUX0VO
Q09ESU5HID0gInV0Zi04IgorCisjIEZpcnN0LCB0aGUgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCBt
YXJrdXAgZWxlbWVudHMuCisKK2RlZiBzb2IodW5pY29kZSwgZW5jb2RpbmcpOgorICAgICIiIlJl
dHVybnMgZWl0aGVyIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZyBvciBpdHMgZW5jb2RpbmcuIiIi
CisgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUKKyAgICBl
bHNlOgorICAgICAgICByZXR1cm4gdW5pY29kZS5lbmNvZGUoZW5jb2RpbmcpCisKK2NsYXNzIFBh
Z2VFbGVtZW50OgorICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb24g
Zm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQorICAgIChlaXRoZXIgYSB0YWcgb3IgYSBwaWVjZSBv
ZiB0ZXh0KSIiIgorCisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVudD1Ob25lLCBwcmV2aW91cz1O
b25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCByZWxhdGlvbnMgYmV0d2VlbiB0
aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRzLiIiIgorICAgICAgICBzZWxm
LnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3VzID0gcHJldmlvdXMKKyAgICAg
ICAgc2VsZi5uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZyA9IE5vbmUK
KyAgICAgICAgc2VsZi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQg
YW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxp
bmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNT
aWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZgorCisgICAgZGVmIHJlcGxhY2VXaXRoKHNlbGYsIHJl
cGxhY2VXaXRoKToKKyAgICAgICAgb2xkUGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgbXlJ
bmRleCA9IHNlbGYucGFyZW50LmNvbnRlbnRzLmluZGV4KHNlbGYpCisgICAgICAgIGlmIGhhc2F0
dHIocmVwbGFjZVdpdGgsICdwYXJlbnQnKSBhbmQgcmVwbGFjZVdpdGgucGFyZW50ID09IHNlbGYu
cGFyZW50OgorICAgICAgICAgICAgIyBXZSdyZSByZXBsYWNpbmcgdGhpcyBlbGVtZW50IHdpdGgg
b25lIG9mIGl0cyBzaWJsaW5ncy4KKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5wYXJlbnQuY29u
dGVudHMuaW5kZXgocmVwbGFjZVdpdGgpCisgICAgICAgICAgICBpZiBpbmRleCBhbmQgaW5kZXgg
PCBteUluZGV4OgorICAgICAgICAgICAgICAgICMgRnVydGhlcm1vcmUsIGl0IGNvbWVzIGJlZm9y
ZSB0aGlzIGVsZW1lbnQuIFRoYXQKKyAgICAgICAgICAgICAgICAjIG1lYW5zIHRoYXQgd2hlbiB3
ZSBleHRyYWN0IGl0LCB0aGUgaW5kZXggb2YgdGhpcworICAgICAgICAgICAgICAgICMgZWxlbWVu
dCB3aWxsIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBteUluZGV4ID0gbXlJbmRleCAtIDEKKyAg
ICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgb2xkUGFyZW50Lmluc2VydChteUluZGV4LCBy
ZXBsYWNlV2l0aCkKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVj
dGl2ZWx5IHJpcHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgaWYg
c2VsZi5wYXJlbnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJl
bnQuY29udGVudHMucmVtb3ZlKHNlbGYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoK
KyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgI0ZpbmQgdGhlIHR3byBlbGVtZW50cyB0
aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgorICAgICAgICAjdGhpcyBlbGVtZW50
IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQuIENvbm5lY3QKKyAgICAgICAg
I3RoZSB0d28uCisgICAgICAgIGxhc3RDaGlsZCA9IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgp
CisgICAgICAgIG5leHRFbGVtZW50ID0gbGFzdENoaWxkLm5leHQKKworICAgICAgICBpZiBzZWxm
LnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5uZXh0ID0gbmV4dEVsZW1lbnQK
KyAgICAgICAgaWYgbmV4dEVsZW1lbnQ6CisgICAgICAgICAgICBuZXh0RWxlbWVudC5wcmV2aW91
cyA9IHNlbGYucHJldmlvdXMKKyAgICAgICAgc2VsZi5wcmV2aW91cyA9IE5vbmUKKyAgICAgICAg
bGFzdENoaWxkLm5leHQgPSBOb25lCisKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAg
ICAgIGlmIHNlbGYucHJldmlvdXNTaWJsaW5nOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c1Np
YmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nCisgICAgICAgIGlmIHNlbGYubmV4
dFNpYmxpbmc6CisgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZyA9
IHNlbGYucHJldmlvdXNTaWJsaW5nCisgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nID0gc2Vs
Zi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfbGFz
dFJlY3Vyc2l2ZUNoaWxkKHNlbGYpOgorICAgICAgICAiRmluZHMgdGhlIGxhc3QgZWxlbWVudCBi
ZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCisgICAgICAgIGxhc3RDaGlsZCA9IHNl
bGYKKyAgICAgICAgd2hpbGUgaGFzYXR0cihsYXN0Q2hpbGQsICdjb250ZW50cycpIGFuZCBsYXN0
Q2hpbGQuY29udGVudHM6CisgICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGQuY29udGVu
dHNbLTFdCisgICAgICAgIHJldHVybiBsYXN0Q2hpbGQKKworICAgIGRlZiBpbnNlcnQoc2VsZiwg
cG9zaXRpb24sIG5ld0NoaWxkKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UobmV3Q2hpbGQsIGJh
c2VzdHJpbmcpCisgICAgICAgICAgICBvciBpc2luc3RhbmNlKG5ld0NoaWxkLCB1bmljb2RlKSkg
XAorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG5ld0NoaWxkLCBOYXZpZ2FibGVTdHJp
bmcpOgorICAgICAgICAgICAgbmV3Q2hpbGQgPSBOYXZpZ2FibGVTdHJpbmcobmV3Q2hpbGQpCisK
KyAgICAgICAgcG9zaXRpb24gPSAgbWluKHBvc2l0aW9uLCBsZW4oc2VsZi5jb250ZW50cykpCisg
ICAgICAgIGlmIGhhc2F0dHIobmV3Q2hpbGQsICdwYXJlbnQnKSBhbmQgbmV3Q2hpbGQucGFyZW50
ICE9IE5vbmU6CisgICAgICAgICAgICAjIFdlJ3JlICdpbnNlcnRpbmcnIGFuIGVsZW1lbnQgdGhh
dCdzIGFscmVhZHkgb25lCisgICAgICAgICAgICAjIG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4u
CisgICAgICAgICAgICBpZiBuZXdDaGlsZC5wYXJlbnQgPT0gc2VsZjoKKyAgICAgICAgICAgICAg
ICBpbmRleCA9IHNlbGYuZmluZChuZXdDaGlsZCkKKyAgICAgICAgICAgICAgICBpZiBpbmRleCBh
bmQgaW5kZXggPCBwb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBGdXJ0aGVybW9yZSB3
ZSdyZSBtb3ZpbmcgaXQgZnVydGhlciBkb3duIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGxp
c3Qgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgICAg
ICAgICAgICAgICMgd2hlbiB3ZSBleHRyYWN0IHRoaXMgZWxlbWVudCwgb3VyIHRhcmdldCBpbmRl
eAorICAgICAgICAgICAgICAgICAgICAjIHdpbGwganVtcCBkb3duIG9uZS4KKyAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDEKKyAgICAgICAgICAgIG5ld0NoaWxkLmV4
dHJhY3QoKQorCisgICAgICAgIG5ld0NoaWxkLnBhcmVudCA9IHNlbGYKKyAgICAgICAgcHJldmlv
dXNDaGlsZCA9IE5vbmUKKyAgICAgICAgaWYgcG9zaXRpb24gPT0gMDoKKyAgICAgICAgICAgIG5l
d0NoaWxkLnByZXZpb3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZp
b3VzID0gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldmlvdXNDaGlsZCA9IHNl
bGYuY29udGVudHNbcG9zaXRpb24tMV0KKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzU2li
bGluZyA9IHByZXZpb3VzQ2hpbGQKKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzU2libGlu
Zy5uZXh0U2libGluZyA9IG5ld0NoaWxkCisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91cyA9
IHByZXZpb3VzQ2hpbGQuX2xhc3RSZWN1cnNpdmVDaGlsZCgpCisgICAgICAgIGlmIG5ld0NoaWxk
LnByZXZpb3VzOgorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXMubmV4dCA9IG5ld0NoaWxk
CisKKyAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQgPSBuZXdDaGlsZC5fbGFzdFJlY3Vyc2l2
ZUNoaWxkKCkKKworICAgICAgICBpZiBwb3NpdGlvbiA+PSBsZW4oc2VsZi5jb250ZW50cyk6Cisg
ICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZyA9IE5vbmUKKworICAgICAgICAgICAgcGFy
ZW50ID0gc2VsZgorICAgICAgICAgICAgcGFyZW50c05leHRTaWJsaW5nID0gTm9uZQorICAgICAg
ICAgICAgd2hpbGUgbm90IHBhcmVudHNOZXh0U2libGluZzoKKyAgICAgICAgICAgICAgICBwYXJl
bnRzTmV4dFNpYmxpbmcgPSBwYXJlbnQubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICBwYXJl
bnQgPSBwYXJlbnQucGFyZW50CisgICAgICAgICAgICAgICAgaWYgbm90IHBhcmVudDogIyBUaGlz
IGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgcGFyZW50c05leHRTaWJsaW5nOgorICAgICAgICAgICAg
ICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBwYXJlbnRzTmV4dFNpYmxpbmcKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9
IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5leHRDaGlsZCA9IHNlbGYuY29udGVu
dHNbcG9zaXRpb25dCisgICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZyA9IG5leHRDaGls
ZAorICAgICAgICAgICAgaWYgbmV3Q2hpbGQubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAg
bmV3Q2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gbmV3Q2hpbGQKKyAgICAgICAg
ICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQgPSBuZXh0Q2hpbGQKKworICAgICAgICBpZiBu
ZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0OgorICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1l
bnQubmV4dC5wcmV2aW91cyA9IG5ld0NoaWxkc0xhc3RFbGVtZW50CisgICAgICAgIHNlbGYuY29u
dGVudHMuaW5zZXJ0KHBvc2l0aW9uLCBuZXdDaGlsZCkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwg
dGFnKToKKyAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gdGFnIHRvIHRoZSBjb250ZW50cyBv
ZiB0aGlzIHRhZy4iIiIKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYuY29udGVudHMpLCB0
YWcpCisKKyAgICBkZWYgZmluZE5leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1O
b25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gdGhhdCBt
YXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKKyAgICAgICAgYXBwZWFycyBhZnRlciB0aGlz
IFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNl
bGYuZmluZEFsbE5leHQsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKworICAgIGRlZiBm
aW5kQWxsTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyBh
bGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgorICAgICAg
ICBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxm
Ll9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2VsZi5uZXh0R2VuZXJhdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kTmV4
dFNpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0
IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGFmdGVyIHRo
aXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUo
c2VsZi5maW5kTmV4dFNpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICBkZWYgZmluZE5leHRTaWJsaW5ncyhzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5n
cyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYSBhbmQg
YXBwZWFyIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nR2VuZXJhdG9yLCAqKmt3YXJncykKKyAgICBm
ZXRjaE5leHRTaWJsaW5ncyA9IGZpbmROZXh0U2libGluZ3MgIyBDb21wYXRpYmlsaXR5IHdpdGgg
cHJlLTMueAorCisgICAgZGVmIGZpbmRQcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9
LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3QgaXRl
bSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJzIGJl
Zm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9m
aW5kT25lKHNlbGYuZmluZEFsbFByZXZpb3VzLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3Mp
CisKKyAgICBkZWYgZmluZEFsbFByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRl
eHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToK
KyAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVy
aWEgYW5kIGFwcGVhcgorICAgICAgICBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIi
IgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQs
IHNlbGYucHJldmlvdXNHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3
YXJncykKKyAgICBmZXRjaFByZXZpb3VzID0gZmluZEFsbFByZXZpb3VzICMgQ29tcGF0aWJpbGl0
eSB3aXRoIHByZS0zLngKKworICAgIGRlZiBmaW5kUHJldmlvdXNTaWJsaW5nKHNlbGYsIG5hbWU9
Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5z
IHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZQorICAgICAg
ICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3Vt
ZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9uZShzZWxmLmZpbmRQcmV2aW91c1Np
YmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpCisKKyAgICBkZWYgZmluZFByZXZpb3VzU2libGluZ3Moc2VsZiwgbmFtZT1Ob25l
LCBhdHRycz17fSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1p
dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRo
aXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIg
YmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnByZXZpb3VzU2libGluZ0dlbmVyYXRvciwgKiprd2FyZ3MpCisgICAgZmV0
Y2hQcmV2aW91c1NpYmxpbmdzID0gZmluZFByZXZpb3VzU2libGluZ3MgIyBDb21wYXRpYmlsaXR5
IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQYXJlbnQoc2VsZiwgbmFtZT1Ob25lLCBhdHRy
cz17fSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHBhcmVudCBv
ZiB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgor
ICAgICAgICAjIE5PVEU6IFdlIGNhbid0IHVzZSBfZmluZE9uZSBiZWNhdXNlIGZpbmRQYXJlbnRz
IHRha2VzIGEgZGlmZmVyZW50CisgICAgICAgICMgc2V0IG9mIGFyZ3VtZW50cy4KKyAgICAgICAg
ciA9IE5vbmUKKyAgICAgICAgbCA9IHNlbGYuZmluZFBhcmVudHMobmFtZSwgYXR0cnMsIDEpCisg
ICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorCisg
ICAgZGVmIGZpbmRQYXJlbnRzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIGxpbWl0PU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGFyZW50cyBvZiB0aGlzIFRhZyB0
aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKworICAgICAgICByZXR1
cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgTm9uZSwgbGltaXQsIHNlbGYucGFyZW50R2Vu
ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmZXRj
aFBhcmVudHMgPSBmaW5kUGFyZW50cyAjIENvbXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAg
ICAjVGhlc2UgbWV0aG9kcyBkbyB0aGUgcmVhbCBoZWF2eSBsaWZ0aW5nLgorCisgICAgZGVmIF9m
aW5kT25lKHNlbGYsIG1ldGhvZCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKToKKyAgICAg
ICAgciA9IE5vbmUKKyAgICAgICAgbCA9IG1ldGhvZChuYW1lLCBhdHRycywgdGV4dCwgMSwgKipr
d2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1
cm4gcgorCisgICAgZGVmIF9maW5kQWxsKHNlbGYsIG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwg
Z2VuZXJhdG9yLCAqKmt3YXJncyk6CisgICAgICAgICJJdGVyYXRlcyBvdmVyIGEgZ2VuZXJhdG9y
IGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1hdGNoLiIKKworICAgICAgICBpZiBpc2luc3RhbmNl
KG5hbWUsIFNvdXBTdHJhaW5lcik6CisgICAgICAgICAgICBzdHJhaW5lciA9IG5hbWUKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICMgQnVpbGQgYSBTb3VwU3RyYWluZXIKKyAgICAgICAgICAg
IHN0cmFpbmVyID0gU291cFN0cmFpbmVyKG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKyAg
ICAgICAgcmVzdWx0cyA9IFJlc3VsdFNldChzdHJhaW5lcikKKyAgICAgICAgZyA9IGdlbmVyYXRv
cigpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgaSA9IGcubmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHN0cmFpbmVyLnNlYXJjaChpKQorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGltaXQgYW5kIGxlbihyZXN1bHRzKSA+PSBsaW1pdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICAjVGhlc2UgR2VuZXJhdG9y
cyBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSBzdGFydGluZyBmcm9tIGJvdGgKKyAgICAjTmF2aWdh
YmxlU3RyaW5ncyBhbmQgVGFncy4KKyAgICBkZWYgbmV4dEdlbmVyYXRvcihzZWxmKToKKyAgICAg
ICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLm5leHQKKyAg
ICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBuZXh0U2libGluZ0dlbmVyYXRvcihzZWxmKToK
KyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLm5l
eHRTaWJsaW5nCisgICAgICAgICAgICB5aWVsZCBpCisKKyAgICBkZWYgcHJldmlvdXNHZW5lcmF0
b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGk6CisgICAgICAgICAg
ICBpID0gaS5wcmV2aW91cworICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIHByZXZpb3Vz
U2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUg
aToKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzU2libGluZworICAgICAgICAgICAgeWllbGQg
aQorCisgICAgZGVmIHBhcmVudEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAg
ICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgIGkgPSBpLnBhcmVudAorICAgICAgICAgICAgeWll
bGQgaQorCisgICAgIyBVdGlsaXR5IG1ldGhvZHMKKyAgICBkZWYgc3Vic3RpdHV0ZUVuY29kaW5n
KHNlbGYsIHN0ciwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIGVuY29kaW5nID0gZW5jb2Rpbmcg
b3IgInV0Zi04IgorICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoIiVTT1VQLUVOQ09ESU5HJSIs
IGVuY29kaW5nKQorCisgICAgZGVmIHRvRW5jb2Rpbmcoc2VsZiwgcywgZW5jb2Rpbmc9Tm9uZSk6
CisgICAgICAgICIiIkVuY29kZXMgYW4gb2JqZWN0IHRvIGEgc3RyaW5nIGluIHNvbWUgZW5jb2Rp
bmcsIG9yIHRvIFVuaWNvZGUuCisgICAgICAgIC4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShz
LCB1bmljb2RlKToKKyAgICAgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgICAgIHMg
PSBzLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHMsIHN0cik6Cisg
ICAgICAgICAgICBpZiBlbmNvZGluZzoKKyAgICAgICAgICAgICAgICBzID0gcy5lbmNvZGUoZW5j
b2RpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHMp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBlbmNvZGluZzoKKyAgICAgICAgICAgICAg
ICBzICA9IHNlbGYudG9FbmNvZGluZyhzdHIocyksIGVuY29kaW5nKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQorICAgICAgICByZXR1cm4gcworCitj
bGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVsZW1lbnQpOgorCisgICAgZGVmIF9f
bmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJp
bmcuCisKKyAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2aWdhYmxlU3RyaW5nLCB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgc3RyaW5nIGluIERFRkFVTFRfT1VUUFVU
X0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJlCisgICAgICAgIHBhc3NlZCBpbiB0
byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1cGVyY2xhc3Mgd29uJ3Qga25vdwor
ICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICAiIiIK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6CisgICAgICAgICAgICByZXR1
cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIHJldHVybiB1bmljb2RlLl9f
bmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpCisKKyAgICBkZWYgX19n
ZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAodW5pY29kZShzZWxmKSwpCisKKyAg
ICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiInRleHQuc3RyaW5nIGdp
dmVzIHlvdSB0ZXh0LiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKKyAgICAgICAgY29tcGF0aWJpbGl0
eSBmb3IgTmF2aWdhYmxlKlN0cmluZywgYnV0IGZvciBDRGF0YSogaXQgbGV0cyB5b3UKKyAgICAg
ICAgZ2V0IHRoZSBzdHJpbmcgd2l0aG91dCB0aGUgQ0RhdGEgd3JhcHBlci4iIiIKKyAgICAgICAg
aWYgYXR0ciA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgIiclcycgb2JqZWN0IGhhcyBu
byBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpCisKKyAg
ICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKCkuZW5jb2RlKGVuY29kaW5nKQorCisgICAgZGVmIGRl
Y29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYKKworY2xhc3MgQ0RhdGEoTmF2aWdhYmxlU3RyaW5nKToKKworICAgIGRl
ZiBkZWNvZGVHaXZlbkV2ZW50dWFsRW5jb2Rpbmcoc2VsZiwgZXZlbnR1YWxFbmNvZGluZyk6Cisg
ICAgICAgIHJldHVybiB1JzwhW0NEQVRBWycgKyBzZWxmICsgdSddXT4nCisKK2NsYXNzIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbihOYXZpZ2FibGVTdHJpbmcpOgorCisgICAgZGVmIGRlY29kZUdpdmVu
RXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKKyAgICAgICAgb3V0cHV0
ID0gc2VsZgorICAgICAgICBpZiB1JyVTT1VQLUVOQ09ESU5HJScgaW4gb3V0cHV0OgorICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5zdWJzdGl0dXRlRW5jb2Rpbmcob3V0cHV0LCBldmVudHVhbEVu
Y29kaW5nKQorICAgICAgICByZXR1cm4gdSc8PycgKyBvdXRwdXQgKyB1Jz8+JworCitjbGFzcyBD
b21tZW50KE5hdmlnYWJsZVN0cmluZyk6CisgICAgZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNv
ZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIHUnPCEtLScgKyBz
ZWxmICsgdSctLT4nCisKK2NsYXNzIERlY2xhcmF0aW9uKE5hdmlnYWJsZVN0cmluZyk6CisgICAg
ZGVmIGRlY29kZUdpdmVuRXZlbnR1YWxFbmNvZGluZyhzZWxmLCBldmVudHVhbEVuY29kaW5nKToK
KyAgICAgICAgcmV0dXJuIHUnPCEnICsgc2VsZiArIHUnPicKKworY2xhc3MgVGFnKFBhZ2VFbGVt
ZW50KToKKworICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1MIHRhZyB3aXRoIGl0cyBhdHRy
aWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKKworICAgIGRlZiBfaW52ZXJ0KGgpOgorICAgICAgICAi
Q2hlYXAgZnVuY3Rpb24gdG8gaW52ZXJ0IGEgaGFzaC4iCisgICAgICAgIGkgPSB7fQorICAgICAg
ICBmb3Igayx2IGluIGguaXRlbXMoKToKKyAgICAgICAgICAgIGlbdl0gPSBrCisgICAgICAgIHJl
dHVybiBpCisKKyAgICBYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUyA9IHsgImFwb3MiIDog
IiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicXVvdCIgOiAnIics
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbXAiIDogIiYiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHQiIDogIjwiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3QiIDogIj4iIH0KKworICAgIFhNTF9TUEVD
SUFMX0NIQVJTX1RPX0VOVElUSUVTID0gX2ludmVydChYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9D
SEFSUykKKworICAgIGRlZiBfY29udmVydEVudGl0aWVzKHNlbGYsIG1hdGNoKToKKyAgICAgICAg
IiIiVXNlZCBpbiBhIGNhbGwgdG8gcmUuc3ViIHRvIHJlcGxhY2UgSFRNTCwgWE1MLCBhbmQgbnVt
ZXJpYworICAgICAgICBlbnRpdGllcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBVbmljb2RlIGNoYXJh
Y3RlcnMuIElmIEhUTUwKKyAgICAgICAgZW50aXRpZXMgYXJlIGJlaW5nIGNvbnZlcnRlZCwgYW55
IHVucmVjb2duaXplZCBlbnRpdGllcyBhcmUKKyAgICAgICAgZXNjYXBlZC4iIiIKKyAgICAgICAg
eCA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyBh
bmQgeCBpbiBuYW1lMmNvZGVwb2ludDoKKyAgICAgICAgICAgIHJldHVybiB1bmljaHIobmFtZTJj
b2RlcG9pbnRbeF0pCisgICAgICAgIGVsaWYgeCBpbiBzZWxmLlhNTF9FTlRJVElFU19UT19TUEVD
SUFMX0NIQVJTOgorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlNbeF0K
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUnJiVzOycgJSB4Cisg
ICAgICAgIGVsaWYgbGVuKHgpID4gMCBhbmQgeFswXSA9PSAnIyc6CisgICAgICAgICAgICAjIEhh
bmRsZSBudW1lcmljIGVudGl0aWVzCisgICAgICAgICAgICBpZiBsZW4oeCkgPiAxIGFuZCB4WzFd
ID09ICd4JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKGludCh4WzI6XSwgMTYpKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKGludCh4WzE6
XSkpCisKKyAgICAgICAgZWxpZiBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzOgorICAg
ICAgICAgICAgcmV0dXJuIHUnJmFtcDslczsnICUgeAorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmV0dXJuIHUnJiVzOycgJSB4CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyLCBu
YW1lLCBhdHRycz1Ob25lLCBwYXJlbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcHJldmlvdXM9
Tm9uZSk6CisgICAgICAgICJCYXNpYyBjb25zdHJ1Y3Rvci4iCisKKyAgICAgICAgIyBXZSBkb24n
dCBhY3R1YWxseSBzdG9yZSB0aGUgcGFyc2VyIG9iamVjdDogdGhhdCBsZXRzIGV4dHJhY3RlZAor
ICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZAorICAgICAgICBzZWxmLnBhcnNl
ckNsYXNzID0gcGFyc2VyLl9fY2xhc3NfXworICAgICAgICBzZWxmLmlzU2VsZkNsb3NpbmcgPSBw
YXJzZXIuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisg
ICAgICAgIGlmIGF0dHJzID09IE5vbmU6CisgICAgICAgICAgICBhdHRycyA9IFtdCisgICAgICAg
IHNlbGYuYXR0cnMgPSBhdHRycworICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KKyAgICAgICAg
c2VsZi5zZXR1cChwYXJlbnQsIHByZXZpb3VzKQorICAgICAgICBzZWxmLmhpZGRlbiA9IEZhbHNl
CisgICAgICAgIHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25zID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5jb252ZXJ0SFRNTEVudGl0aWVzID0gcGFyc2VyLmNvbnZlcnRIVE1MRW50aXRpZXMKKyAgICAg
ICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBwYXJzZXIuY29udmVydFhNTEVudGl0aWVzCisg
ICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBwYXJzZXIuZXNjYXBlVW5y
ZWNvZ25pemVkRW50aXRpZXMKKworICAgICAgICBkZWYgY29udmVydChrdmFsKToKKyAgICAgICAg
ICAgICJDb252ZXJ0cyBIVE1MLCBYTUwgYW5kIG51bWVyaWMgZW50aXRpZXMgaW4gdGhlIGF0dHJp
YnV0ZSB2YWx1ZS4iCisgICAgICAgICAgICBrLCB2YWwgPSBrdmFsCisgICAgICAgICAgICBpZiB2
YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3ZhbAorICAgICAgICAgICAgcmV0
dXJuIChrLCByZS5zdWIoIiYoI1xkK3wjeFswLTlhLWZBLUZdK3xcdyspOyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb252ZXJ0RW50aXRpZXMsIHZhbCkpCisgICAgICAg
IHNlbGYuYXR0cnMgPSBtYXAoY29udmVydCwgc2VsZi5hdHRycykKKworICAgIGRlZiBnZXQoc2Vs
Ziwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0
aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLCBvcgorICAgICAgICB0aGUgdmFsdWUgZ2l2
ZW4gZm9yICdkZWZhdWx0JyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhhdAorICAgICAgICBhdHRyaWJ1
dGUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKCkuZ2V0KGtleSwgZGVmYXVs
dCkKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9n
ZXRBdHRyTWFwKCkuaGFzX2tleShrZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5
KToKKyAgICAgICAgIiIidGFnW2tleV0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0
dHJpYnV0ZSBmb3IgdGhlIHRhZywKKyAgICAgICAgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaWYg
aXQncyBub3QgdGhlcmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKClba2V5
XQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAiSXRlcmF0aW5nIG92ZXIgYSB0
YWcgaXRlcmF0ZXMgb3ZlciBpdHMgY29udGVudHMuIgorICAgICAgICByZXR1cm4gaXRlcihzZWxm
LmNvbnRlbnRzKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICJUaGUgbGVuZ3Ro
IG9mIGEgdGFnIGlzIHRoZSBsZW5ndGggb2YgaXRzIGxpc3Qgb2YgY29udGVudHMuIgorICAgICAg
ICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYs
IHgpOgorICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCisKKyAgICBkZWYgX19ub256
ZXJvX18oc2VsZik6CisgICAgICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBu
byBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19zZXRpdGVtX18o
c2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldHRpbmcgdGFnW2tleV0gc2V0cyB0aGUg
dmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlCisgICAgICAgIHRhZy4iIiIKKyAg
ICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCisgICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFs
dWUKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4o
c2VsZi5hdHRycykpOgorICAgICAgICAgICAgaWYgc2VsZi5hdHRyc1tpXVswXSA9PSBrZXk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5hdHRyc1tpXSA9IChrZXksIHZhbHVlKQorICAgICAgICAgICAg
ICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBzZWxm
LmF0dHJzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCisgICAgICAgIHNlbGYuX2dldEF0dHJNYXAoKVtr
ZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAi
RGVsZXRpbmcgdGFnW2tleV0gZGVsZXRlcyBhbGwgJ2tleScgYXR0cmlidXRlcyBmb3IgdGhlIHRh
Zy4iCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuYXR0cnM6CisgICAgICAgICAgICBpZiBpdGVt
WzBdID09IGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHJzLnJlbW92ZShpdGVtKQorICAg
ICAgICAgICAgICAgICNXZSBkb24ndCBicmVhayBiZWNhdXNlIGJhZCBIVE1MIGNhbiBkZWZpbmUg
dGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjYXR0cmlidXRlIG11bHRpcGxlIHRpbWVzLgorICAg
ICAgICAgICAgc2VsZi5fZ2V0QXR0ck1hcCgpCisgICAgICAgICAgICBpZiBzZWxmLmF0dHJNYXAu
aGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHJNYXBba2V5XQorCisg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNhbGxp
bmcgYSB0YWcgbGlrZSBhIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgaXRzCisgICAg
ICAgIGZpbmRBbGwoKSBtZXRob2QuIEVnLiB0YWcoJ2EnKSByZXR1cm5zIGEgbGlzdCBvZiBhbGwg
dGhlIEEgdGFncworICAgICAgICBmb3VuZCB3aXRoaW4gdGhpcyB0YWcuIiIiCisgICAgICAgIHJl
dHVybiBhcHBseShzZWxmLmZpbmRBbGwsIGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBfX2dldGF0
dHJfXyhzZWxmLCB0YWcpOgorICAgICAgICAjcHJpbnQgIkdldGF0dHIgJXMuJXMiICUgKHNlbGYu
X19jbGFzc19fLCB0YWcpCisgICAgICAgIGlmIGxlbih0YWcpID4gMyBhbmQgdGFnLnJmaW5kKCdU
YWcnKSA9PSBsZW4odGFnKS0zOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWdbOi0z
XSkKKyAgICAgICAgZWxpZiB0YWcuZmluZCgnX18nKSAhPSAwOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZmluZCh0YWcpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmpl
Y3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlIChzZWxmLl9fY2xhc3NfXywgdGFnKQorCisgICAg
ZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhp
cyB0YWcgaGFzIHRoZSBzYW1lIG5hbWUsIHRoZSBzYW1lIGF0dHJpYnV0ZXMsCisgICAgICAgIGFu
ZCB0aGUgc2FtZSBjb250ZW50cyAocmVjdXJzaXZlbHkpIGFzIHRoZSBnaXZlbiB0YWcuCisKKyAg
ICAgICAgTk9URTogcmlnaHQgbm93IHRoaXMgd2lsbCByZXR1cm4gZmFsc2UgaWYgdHdvIHRhZ3Mg
aGF2ZSB0aGUKKyAgICAgICAgc2FtZSBhdHRyaWJ1dGVzIGluIGEgZGlmZmVyZW50IG9yZGVyLiBT
aG91bGQgdGhpcyBiZSBmaXhlZD8iIiIKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3RoZXIsICdu
YW1lJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdhdHRycycpIG9yIG5vdCBoYXNhdHRyKG90aGVy
LCAnY29udGVudHMnKSBvciBzZWxmLm5hbWUgIT0gb3RoZXIubmFtZSBvciBzZWxmLmF0dHJzICE9
IG90aGVyLmF0dHJzIG9yIGxlbihzZWxmKSAhPSBsZW4ob3RoZXIpOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmNvbnRlbnRzKSk6
CisgICAgICAgICAgICBpZiBzZWxmLmNvbnRlbnRzW2ldICE9IG90aGVyLmNvbnRlbnRzW2ldOgor
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhp
cyB0YWcgaXMgbm90IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgdGFnLAorICAgICAgICBhcyBkZWZp
bmVkIGluIF9fZXFfXy4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAg
ICBkZWYgX19yZXByX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgor
ICAgICAgICAiIiJSZW5kZXJzIHRoaXMgdGFnIGFzIGEgc3RyaW5nLiIiIgorICAgICAgICByZXR1
cm4gc2VsZi5kZWNvZGUoZXZlbnR1YWxFbmNvZGluZz1lbmNvZGluZykKKworICAgIEJBUkVfQU1Q
RVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+XXwiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJig/ISNcZCs7fCN4WzAtOWEtZkEtRl0rO3xc
dys7KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIpIikK
KworICAgIGRlZiBfc3ViX2VudGl0eShzZWxmLCB4KToKKyAgICAgICAgIiIiVXNlZCB3aXRoIGEg
cmVndWxhciBleHByZXNzaW9uIHRvIHN1YnN0aXR1dGUgdGhlCisgICAgICAgIGFwcHJvcHJpYXRl
IFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBzcGVjaWFsIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgcmV0
dXJuICImIiArIHNlbGYuWE1MX1NQRUNJQUxfQ0hBUlNfVE9fRU5USVRJRVNbeC5ncm91cCgwKVsw
XV0gKyAiOyIKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZGVjb2RlKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5lbmNvZGUoKQorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBV
VF9FTkNPRElORywKKyAgICAgICAgICAgICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZl
bD0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKHByZXR0eVByaW50LCBpbmRlbnRMZXZl
bCwgZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgcHJl
dHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTAsCisgICAgICAgICAgICAgICBldmVudHVhbEVu
Y29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0
cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnIGFuZAorICAgICAgICBp
dHMgY29udGVudHMuIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5nLiIiIgor
CisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgaWYgc2VsZi5hdHRyczoKKyAgICAgICAgICAg
IGZvciBrZXksIHZhbCBpbiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgICAgIGZtdCA9ICclcz0i
JXMiJworICAgICAgICAgICAgICAgIGlmIGlzU3RyaW5nKHZhbCk6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzZWxmLmNvbnRhaW5zU3Vic3RpdHV0aW9ucworICAgICAgICAgICAgICAgICAgICAg
ICAgYW5kIGV2ZW50dWFsRW5jb2RpbmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZCAnJVNPVVAtRU5DT0RJTkclJyBpbiB2YWwpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsID0gc2VsZi5zdWJzdGl0dXRlRW5jb2RpbmcodmFsLCBldmVudHVhbEVuY29kaW5nKQor
CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBlaXRoZXI6CisgICAg
ICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIG5vIGVt
YmVkZGVkIGRvdWJsZSBxdW90ZXMgb3Igc2luZ2xlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAg
ICAgIyAgIE5vIHByb2JsZW06IHdlIGVuY2xvc2UgaXQgaW4gZG91YmxlIHF1b3Rlcy4KKyAgICAg
ICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMuIE5vIHBy
b2JsZW06CisgICAgICAgICAgICAgICAgICAgICMgICBkb3VibGUgcXVvdGVzIHdvcmsgaGVyZSB0
b28uCisgICAgICAgICAgICAgICAgICAgICMgKiBDb250YWlucyBlbWJlZGRlZCBkb3VibGUgcXVv
dGVzLiBObyBwcm9ibGVtOgorICAgICAgICAgICAgICAgICAgICAjICAgd2UgZW5jbG9zZSBpdCBp
biBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICogRW1iZWRzIGJvdGggc2lu
Z2xlIF9hbmRfIGRvdWJsZSBxdW90ZXMuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgIyAgIGNh
bid0IGhhcHBlbiBuYXR1cmFsbHksIGJ1dCBpdCBjYW4gaGFwcGVuIGlmCisgICAgICAgICAgICAg
ICAgICAgICMgICB5b3UgbW9kaWZ5IGFuIGF0dHJpYnV0ZSB2YWx1ZSBhZnRlciBwYXJzaW5nCisg
ICAgICAgICAgICAgICAgICAgICMgICB0aGUgZG9jdW1lbnQuIE5vdyB3ZSBoYXZlIGEgYml0IG9m
IGEKKyAgICAgICAgICAgICAgICAgICAgIyAgIHByb2JsZW0uIFdlIHNvbHZlIGl0IGJ5IGVuY2xv
c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyAgIGF0dHJpYnV0ZSBpbiBzaW5nbGUgcXVv
dGVzLCBhbmQgZXNjYXBpbmcgYW55CisgICAgICAgICAgICAgICAgICAgICMgICBlbWJlZGRlZCBz
aW5nbGUgcXVvdGVzIHRvIFhNTCBlbnRpdGllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgJyIn
IGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIlcz0nJXMnIgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgIiciIGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIFRPRE86IHJlcGxhY2Ugd2l0aCBhcG9zIHdoZW4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9
IHZhbC5yZXBsYWNlKCInIiwgIiZzcXVvdDsiKQorCisgICAgICAgICAgICAgICAgICAgICMgTm93
IHdlJ3JlIG9rYXkgdy9yL3QgcXVvdGVzLiBCdXQgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAg
ICAgICAgICAjIHZhbHVlIG1pZ2h0IGFsc28gY29udGFpbiBhbmdsZSBicmFja2V0cywgb3IKKyAg
ICAgICAgICAgICAgICAgICAgIyBhbXBlcnNhbmRzIHRoYXQgYXJlbid0IHBhcnQgb2YgZW50aXRp
ZXMuIFdlIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgIyB0byBlc2NhcGUgdGhvc2UgdG8gWE1M
IGVudGl0aWVzIHRvby4KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5CQVJFX0FNUEVS
U0FORF9PUl9CUkFDS0VULnN1YihzZWxmLl9zdWJfZW50aXR5LCB2YWwpCisgICAgICAgICAgICAg
ICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIGJvb2xlYW4g
YXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGtleQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBmbXQgJSAoa2V5LCB2
YWwpCisgICAgICAgICAgICAgICAgYXR0cnMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIGNsb3Nl
ID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworICAgICAgICBpZiBzZWxmLmlzU2VsZkNsb3Np
bmc6CisgICAgICAgICAgICBjbG9zZSA9ICcgLycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGNsb3NlVGFnID0gJzwvJXM+JyAlIHNlbGYubmFtZQorCisgICAgICAgIGluZGVudFRhZywgaW5k
ZW50Q29udGVudHMgPSAwLCAwCisgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAgICAg
aW5kZW50VGFnID0gaW5kZW50TGV2ZWwKKyAgICAgICAgICAgIHNwYWNlID0gKCcgJyAqIChpbmRl
bnRUYWctMSkpCisgICAgICAgICAgICBpbmRlbnRDb250ZW50cyA9IGluZGVudFRhZyArIDEKKyAg
ICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZUNvbnRlbnRzKHByZXR0eVByaW50LCBpbmRlbnRD
b250ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50dWFs
RW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuaGlkZGVuOgorICAgICAgICAgICAgcyA9IGNvbnRl
bnRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gW10KKyAgICAgICAgICAgIGF0dHJp
YnV0ZVN0cmluZyA9ICcnCisgICAgICAgICAgICBpZiBhdHRyczoKKyAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVTdHJpbmcgPSAnICcgKyAnICcuam9pbihhdHRycykKKyAgICAgICAgICAgIGlmIHBy
ZXR0eVByaW50OgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNlKQorICAgICAgICAgICAg
cy5hcHBlbmQoJzwlcyVzJXM+JyAlIChzZWxmLm5hbWUsIGF0dHJpYnV0ZVN0cmluZywgY2xvc2Up
KQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQo
IlxuIikKKyAgICAgICAgICAgIHMuYXBwZW5kKGNvbnRlbnRzKQorICAgICAgICAgICAgaWYgcHJl
dHR5UHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV0gIT0gIlxuIjoKKyAgICAgICAg
ICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQgYW5kIGNs
b3NlVGFnOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNlKQorICAgICAgICAgICAgcy5h
cHBlbmQoY2xvc2VUYWcpCisgICAgICAgICAgICBpZiBwcmV0dHlQcmludCBhbmQgY2xvc2VUYWcg
YW5kIHNlbGYubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAg
ICAgICAgICAgIHMgPSAnJy5qb2luKHMpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgZGVj
b21wb3NlKHNlbGYpOgorICAgICAgICAiIiJSZWN1cnNpdmVseSBkZXN0cm95cyB0aGUgY29udGVu
dHMgb2YgdGhpcyB0cmVlLiIiIgorICAgICAgICBjb250ZW50cyA9IFtpIGZvciBpIGluIHNlbGYu
Y29udGVudHNdCisgICAgICAgIGZvciBpIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShpLCBUYWcpOgorICAgICAgICAgICAgICAgIGkuZGVjb21wb3NlKCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaS5leHRyYWN0KCkKKyAgICAgICAgc2VsZi5leHRy
YWN0KCkKKworICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9F
TkNPRElORyk6CisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZShlbmNvZGluZywgVHJ1ZSkKKwor
ICAgIGRlZiBlbmNvZGVDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNP
RElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExl
dmVsPTApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGVDb250ZW50cyhwcmV0dHlQcmludCwg
aW5kZW50TGV2ZWwpLmVuY29kZShlbmNvZGluZykKKworICAgIGRlZiBkZWNvZGVDb250ZW50cyhz
ZWxmLCBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnR1YWxFbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAg
ICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFzIGEgc3RyaW5nIGluIHRoZSBn
aXZlbgorICAgICAgICBlbmNvZGluZy4gSWYgZW5jb2RpbmcgaXMgTm9uZSwgcmV0dXJucyBhIFVu
aWNvZGUgc3RyaW5nLi4iIiIKKyAgICAgICAgcz1bXQorICAgICAgICBmb3IgYyBpbiBzZWxmOgor
ICAgICAgICAgICAgdGV4dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgTmF2
aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICAgICB0ZXh0ID0gYy5kZWNvZGVHaXZlbkV2ZW50
dWFsRW5jb2RpbmcoZXZlbnR1YWxFbmNvZGluZykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShjLCBUYWcpOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGMuZGVjb2RlKHByZXR0eVByaW50
LCBpbmRlbnRMZXZlbCwgZXZlbnR1YWxFbmNvZGluZykpCisgICAgICAgICAgICBpZiB0ZXh0IGFu
ZCBwcmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisgICAg
ICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAg
ICAgICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50TGV2ZWwtMSkpCisgICAgICAgICAg
ICAgICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAg
ICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4o
cykKKworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwg
YXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgKiprd2Fy
Z3MpOgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcg
bWF0Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICByID0gTm9u
ZQorICAgICAgICBsID0gc2VsZi5maW5kQWxsKG5hbWUsIGF0dHJzLCByZWN1cnNpdmUsIHRleHQs
IDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAg
ICAgcmV0dXJuIHIKKyAgICBmaW5kQ2hpbGQgPSBmaW5kCisKKyAgICBkZWYgZmluZEFsbChzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAorICAgICAg
ICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRXh0cmFjdHMgYSBs
aXN0IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlh
LiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQorICAgICAgICBh
dHRyaWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKworICAgICAgICBUaGUgdmFsdWUg
b2YgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKKyAgICAgICAg
c3RyaW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBv
ciBhCisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hl
dGhlciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBk
ZWZpbml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUg
dGFnIG5hbWUuIiIiCisgICAgICAgIGdlbmVyYXRvciA9IHNlbGYucmVjdXJzaXZlQ2hpbGRHZW5l
cmF0b3IKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9
IHNlbGYuY2hpbGRHZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwg
YXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZpbmRDaGlsZHJl
biA9IGZpbmRBbGwKKworICAgICMgUHJlLTMueCBjb21wYXRpYmlsaXR5IG1ldGhvZHMuIFdpbGwg
Z28gYXdheSBpbiA0LjAuCisgICAgZmlyc3QgPSBmaW5kCisgICAgZmV0Y2ggPSBmaW5kQWxsCisK
KyAgICBkZWYgZmV0Y2hUZXh0KHNlbGYsIHRleHQ9Tm9uZSwgcmVjdXJzaXZlPVRydWUsIGxpbWl0
PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5maW5kQWxsKHRleHQ9dGV4dCwgcmVjdXJzaXZl
PXJlY3Vyc2l2ZSwgbGltaXQ9bGltaXQpCisKKyAgICBkZWYgZmlyc3RUZXh0KHNlbGYsIHRleHQ9
Tm9uZSwgcmVjdXJzaXZlPVRydWUpOgorICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRleHQ9dGV4
dCwgcmVjdXJzaXZlPXJlY3Vyc2l2ZSkKKworICAgICMgMy54IGNvbXBhdGliaWxpdHkgbWV0aG9k
cy4gV2lsbCBnbyBhd2F5IGluIDQuMC4KKyAgICBkZWYgcmVuZGVyQ29udGVudHMoc2VsZiwgZW5j
b2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29kZUNvbnRlbnRzKHByZXR0eVByaW50
LCBpbmRlbnRMZXZlbCwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5lbmNvZGVDb250ZW50cyhlbmNvZGluZywgcHJldHR5UHJpbnQsIGluZGVudExldmVs
KQorCisKKyAgICAjUHJpdmF0ZSBtZXRob2RzCisKKyAgICBkZWYgX2dldEF0dHJNYXAoc2VsZik6
CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgbWFwIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFn
J3MgYXR0cmlidXRlcywKKyAgICAgICAgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQuIiIiCisg
ICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYsICdhdHRyTWFwJyk6CisgICAgICAgICAgICBzZWxm
LmF0dHJNYXAgPSB7fQorICAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLmF0dHJz
OgorICAgICAgICAgICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFsdWUKKyAgICAgICAgcmV0
dXJuIHNlbGYuYXR0ck1hcAorCisgICAgI0dlbmVyYXRvciBtZXRob2RzCisgICAgZGVmIHJlY3Vy
c2l2ZUNoaWxkR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVu
dHMpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBzdG9wTm9kZSA9
IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgpLm5leHQKKyAgICAgICAgY3VycmVudCA9IHNlbGYu
Y29udGVudHNbMF0KKyAgICAgICAgd2hpbGUgY3VycmVudCBpcyBub3Qgc3RvcE5vZGU6CisgICAg
ICAgICAgICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0
CisKKyAgICBkZWYgY2hpbGRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGlmIG5vdCBsZW4oc2Vs
Zi5jb250ZW50cyk6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIGN1
cnJlbnQgPSBzZWxmLmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQ6CisgICAgICAg
ICAgICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0U2li
bGluZworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyMgTmV4dCwgYSBjb3VwbGUgY2xh
c3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQgdGhlaXIgcmVzdWx0cy4KK2NsYXNzIFNvdXBT
dHJhaW5lcjoKKyAgICAiIiJFbmNhcHN1bGF0ZXMgYSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGlu
ZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAgICB0ZXh0KS4iIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAg
ICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBpZiBpc1N0cmluZyhhdHRycyk6CisgICAg
ICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBhdHRycworICAgICAgICAgICAgYXR0cnMgPSBOb25l
CisgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgIGlmIGF0dHJzOgorICAgICAgICAgICAg
ICAgIGF0dHJzID0gYXR0cnMuY29weSgpCisgICAgICAgICAgICAgICAgYXR0cnMudXBkYXRlKGt3
YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXR0cnMgPSBrd2FyZ3MK
KyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKwor
ICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRleHQ6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi50ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiVz
fCVzIiAlIChzZWxmLm5hbWUsIHNlbGYuYXR0cnMpCisKKyAgICBkZWYgc2VhcmNoVGFnKHNlbGYs
IG1hcmt1cE5hbWU9Tm9uZSwgbWFya3VwQXR0cnM9e30pOgorICAgICAgICBmb3VuZCA9IE5vbmUK
KyAgICAgICAgbWFya3VwID0gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cE5hbWUs
IFRhZyk6CisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXBOYW1lCisgICAgICAgICAgICBtYXJr
dXBBdHRycyA9IG1hcmt1cAorICAgICAgICBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0YSA9IGNhbGxh
YmxlKHNlbGYubmFtZSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90
IGlzaW5zdGFuY2UobWFya3VwTmFtZSwgVGFnKQorCisgICAgICAgIGlmIChub3Qgc2VsZi5uYW1l
KSBcCisgICAgICAgICAgICAgICBvciBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0YSBcCisgICAgICAg
ICAgICAgICBvciAobWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2VsZi5uYW1lKSkg
XAorICAgICAgICAgICAgICAgb3IgKG5vdCBtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3Vw
TmFtZSwgc2VsZi5uYW1lKSk6CisgICAgICAgICAgICBpZiBjYWxsRnVuY3Rpb25XaXRoVGFnRGF0
YToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYubmFtZShtYXJrdXBOYW1lLCBtYXJrdXBB
dHRycykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisg
ICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Ig
YXR0ciwgbWF0Y2hBZ2FpbnN0IGluIHNlbGYuYXR0cnMuaXRlbXMoKToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IG1hcmt1cEF0dHJNYXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
aGFzYXR0cihtYXJrdXBBdHRycywgJ2dldCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmt1cEF0dHJNYXAgPSBtYXJrdXBBdHRycworICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcCA9IHt9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBtYXJrdXBBdHRyczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQXR0ck1hcFtrXSA9IHYKKyAgICAgICAgICAg
ICAgICAgICAgYXR0clZhbHVlID0gbWFya3VwQXR0ck1hcC5nZXQoYXR0cikKKyAgICAgICAgICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX21hdGNoZXMoYXR0clZhbHVlLCBtYXRjaEFnYWluc3QpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGlmIG1h
cmt1cDoKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cE5hbWUKKyAgICAgICAg
cmV0dXJuIGZvdW5kCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIG1hcmt1cCk6CisgICAgICAgICNw
cmludCAnbG9va2luZyBmb3IgJXMgaW4gJXMnICUgKHNlbGYsIG1hcmt1cCkKKyAgICAgICAgZm91
bmQgPSBOb25lCisgICAgICAgICMgSWYgZ2l2ZW4gYSBsaXN0IG9mIGl0ZW1zLCBzY2FuIGl0IGZv
ciBhIHRleHQgZWxlbWVudCB0aGF0CisgICAgICAgICMgbWF0Y2hlcy4KKyAgICAgICAgaWYgaXNM
aXN0KG1hcmt1cCkgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAg
IGZvciBlbGVtZW50IGluIG1hcmt1cDoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVs
ZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAorICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2Vs
Zi5zZWFyY2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZWxlbWVudAor
ICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIElmIGl0J3MgYSBUYWcsIG1ha2Ug
c3VyZSBpdHMgbmFtZSBvciBhdHRyaWJ1dGVzIG1hdGNoLgorICAgICAgICAjIERvbid0IGJvdGhl
ciB3aXRoIFRhZ3MgaWYgd2UncmUgc2VhcmNoaW5nIGZvciB0ZXh0LgorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYudGV4dDoKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuc2VhcmNoVGFnKG1hcmt1cCkKKyAgICAgICAgIyBJ
ZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVzLgorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwKKyAgICAgICAgICAgICAgICAg
aXNTdHJpbmcobWFya3VwKToKKyAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoZXMobWFya3VwLCBz
ZWxmLnRleHQpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICJJIGRvbid0IGtub3cgaG93IHRvIG1hdGNo
IGFnYWluc3QgYSAlcyIgXAorICAgICAgICAgICAgICAgICAgJSBtYXJrdXAuX19jbGFzc19fCisg
ICAgICAgIHJldHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0
Y2hBZ2FpbnN0KToKKyAgICAgICAgI3ByaW50ICJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlICht
YXJrdXAsIG1hdGNoQWdhaW5zdCkKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgaWYg
bWF0Y2hBZ2FpbnN0ID09IFRydWUgYW5kIHR5cGUobWF0Y2hBZ2FpbnN0KSA9PSB0eXBlcy5Cb29s
ZWFuVHlwZToKKyAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCAhPSBOb25lCisgICAgICAgIGVs
aWYgY2FsbGFibGUobWF0Y2hBZ2FpbnN0KToKKyAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoQWdh
aW5zdChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjQ3VzdG9tIG1hdGNoIG1l
dGhvZHMgdGFrZSB0aGUgdGFnIGFzIGFuIGFyZ3VtZW50LCBidXQgYWxsCisgICAgICAgICAgICAj
b3RoZXIgd2F5cyBvZiBtYXRjaGluZyBtYXRjaCB0aGUgdGFnIG5hbWUgYXMgYSBzdHJpbmcuCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAgICAgICBt
YXJrdXAgPSBtYXJrdXAubmFtZQorICAgICAgICAgICAgaWYgbWFya3VwIGlzIG5vdCBOb25lIGFu
ZCBub3QgaXNTdHJpbmcobWFya3VwKToKKyAgICAgICAgICAgICAgICBtYXJrdXAgPSB1bmljb2Rl
KG1hcmt1cCkKKyAgICAgICAgICAgICNOb3cgd2Uga25vdyB0aGF0IGNodW5rIGlzIGVpdGhlciBh
IHN0cmluZywgb3IgTm9uZS4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAn
bWF0Y2gnKToKKyAgICAgICAgICAgICAgICAjIEl0J3MgYSByZWdleHAgb2JqZWN0LgorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBhbmQgbWF0Y2hBZ2FpbnN0LnNlYXJjaChtYXJrdXAp
CisgICAgICAgICAgICBlbGlmIChpc0xpc3QobWF0Y2hBZ2FpbnN0KQorICAgICAgICAgICAgICAg
ICAgYW5kIChtYXJrdXAgaXMgbm90IE5vbmUgb3Igbm90IGlzU3RyaW5nKG1hdGNoQWdhaW5zdCkp
KToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaW4gbWF0Y2hBZ2FpbnN0CisgICAg
ICAgICAgICBlbGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAnaXRlbXMnKToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtYXJrdXAuaGFzX2tleShtYXRjaEFnYWluc3QpCisgICAgICAgICAgICBl
bGlmIG1hdGNoQWdhaW5zdCBhbmQgaXNTdHJpbmcobWFya3VwKToKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgICAgIG1hdGNo
QWdhaW5zdCA9IHVuaWNvZGUobWF0Y2hBZ2FpbnN0KQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHN0cihtYXRjaEFnYWluc3QpCisKKyAg
ICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hB
Z2FpbnN0ID09IG1hcmt1cAorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIFJlc3VsdFNl
dChsaXN0KToKKyAgICAiIiJBIFJlc3VsdFNldCBpcyBqdXN0IGEgbGlzdCB0aGF0IGtlZXBzIHRy
YWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKKyAgICB0aGF0IGNyZWF0ZWQgaXQuIiIiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIGxpc3QuX19pbml0X18oW10pCisgICAg
ICAgIHNlbGYuc291cmNlID0gc291cmNlCisKKyMgTm93LCBzb21lIGhlbHBlciBmdW5jdGlvbnMu
CisKK2RlZiBpc0xpc3QobCk6CisgICAgIiIiQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgd29ya3Mg
d2l0aCBhbGwgMi54IHZlcnNpb25zIG9mIFB5dGhvbgorICAgIHRvIGRldGVybWluZSB3aGV0aGVy
IG9yIG5vdCBzb21ldGhpbmcgaXMgbGlzdGxpa2UuIiIiCisgICAgcmV0dXJuICgoaGFzYXR0cihs
LCAnX19pdGVyX18nKSBhbmQgbm90IGlzU3RyaW5nKGwpKQorICAgICAgICAgICAgb3IgKHR5cGUo
bCkgaW4gKHR5cGVzLkxpc3RUeXBlLCB0eXBlcy5UdXBsZVR5cGUpKSkKKworZGVmIGlzU3RyaW5n
KHMpOgorICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHdvcmtzIHdpdGggYWxsIDIueCB2
ZXJzaW9ucyBvZiBQeXRob24KKyAgICB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgc29tZXRo
aW5nIGlzIHN0cmluZ2xpa2UuIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gaXNpbnN0YW5j
ZShzLCB1bmljb2RlKSBvciBpc2luc3RhbmNlKHMsIGJhc2VzdHJpbmcpCisgICAgZXhjZXB0IE5h
bWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uocywgc3RyKQorCitkZWYgYnVpbGRU
YWdNYXAoZGVmYXVsdCwgKmFyZ3MpOgorICAgICIiIlR1cm5zIGEgbGlzdCBvZiBtYXBzLCBsaXN0
cywgb3Igc2NhbGFycyBpbnRvIGEgc2luZ2xlIG1hcC4KKyAgICBVc2VkIHRvIGJ1aWxkIHRoZSBT
RUxGX0NMT1NJTkdfVEFHUywgTkVTVEFCTEVfVEFHUywgYW5kCisgICAgTkVTVElOR19SRVNFVF9U
QUdTIG1hcHMgb3V0IG9mIGxpc3RzIGFuZCBwYXJ0aWFsIG1hcHMuIiIiCisgICAgYnVpbHQgPSB7
fQorICAgIGZvciBwb3J0aW9uIGluIGFyZ3M6CisgICAgICAgIGlmIGhhc2F0dHIocG9ydGlvbiwg
J2l0ZW1zJyk6CisgICAgICAgICAgICAjSXQncyBhIG1hcC4gTWVyZ2UgaXQuCisgICAgICAgICAg
ICBmb3Igayx2IGluIHBvcnRpb24uaXRlbXMoKToKKyAgICAgICAgICAgICAgICBidWlsdFtrXSA9
IHYKKyAgICAgICAgZWxpZiBpc0xpc3QocG9ydGlvbikgYW5kIG5vdCBpc1N0cmluZyhwb3J0aW9u
KToKKyAgICAgICAgICAgICNJdCdzIGEgbGlzdC4gTWFwIGVhY2ggaXRlbSB0byB0aGUgZGVmYXVs
dC4KKyAgICAgICAgICAgIGZvciBrIGluIHBvcnRpb246CisgICAgICAgICAgICAgICAgYnVpbHRb
a10gPSBkZWZhdWx0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjSXQncyBhIHNjYWxhci4g
TWFwIGl0IHRvIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgYnVpbHRbcG9ydGlvbl0gPSBkZWZh
dWx0CisgICAgcmV0dXJuIGJ1aWx0CisKKyMgTm93LCB0aGUgcGFyc2VyIGNsYXNzZXMuCisKK2Ns
YXNzIEhUTUxQYXJzZXJCdWlsZGVyKEhUTUxQYXJzZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHNvdXApOgorICAgICAgICBIVE1MUGFyc2VyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNl
bGYuc291cCA9IHNvdXAKKworICAgICMgV2UgaW5oZXJpdCBmZWVkKCkgYW5kIHJlc2V0KCkuCisK
KyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgaWYg
bmFtZSA9PSAnbWV0YSc6CisgICAgICAgICAgICBzZWxmLnNvdXAuZXh0cmFjdENoYXJzZXRGcm9t
TWV0YShhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc291cC51bmtub3du
X3N0YXJ0dGFnKG5hbWUsIGF0dHJzKQorCisgICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgbmFt
ZSk6CisgICAgICAgIHNlbGYuc291cC51bmtub3duX2VuZHRhZyhuYW1lKQorCisgICAgZGVmIGhh
bmRsZV9kYXRhKHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEo
Y29udGVudCkKKworICAgIGRlZiBfdG9TdHJpbmdTdWJjbGFzcyhzZWxmLCB0ZXh0LCBzdWJjbGFz
cyk6CisgICAgICAgICIiIkFkZHMgYSBjZXJ0YWluIHBpZWNlIG9mIHRleHQgdG8gdGhlIHRyZWUg
YXMgYSBOYXZpZ2FibGVTdHJpbmcKKyAgICAgICAgc3ViY2xhc3MuIiIiCisgICAgICAgIHNlbGYu
c291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh0ZXh0KQorICAgICAgICBz
ZWxmLnNvdXAuZW5kRGF0YShzdWJjbGFzcykKKworICAgIGRlZiBoYW5kbGVfcGkoc2VsZiwgdGV4
dCk6CisgICAgICAgICIiIkhhbmRsZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gYXMgYSBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24KKyAgICAgICAgb2JqZWN0LCBwb3NzaWJseSBvbmUgd2l0aCBhICVT
T1VQLUVOQ09ESU5HJSBzbG90IGludG8gd2hpY2ggYW4KKyAgICAgICAgZW5jb2Rpbmcgd2lsbCBi
ZSBwbHVnZ2VkIGxhdGVyLiIiIgorICAgICAgICBpZiB0ZXh0WzozXSA9PSAieG1sIjoKKyAgICAg
ICAgICAgIHRleHQgPSB1InhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclU09VUC1FTkNPRElO
RyUnIgorICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKHRleHQsIFByb2Nlc3NpbmdJbnN0
cnVjdGlvbikKKworICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxmLCB0ZXh0KToKKyAgICAgICAg
IkhhbmRsZSBjb21tZW50cyBhcyBDb21tZW50IG9iamVjdHMuIgorICAgICAgICBzZWxmLl90b1N0
cmluZ1N1YmNsYXNzKHRleHQsIENvbW1lbnQpCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2Vs
ZiwgcmVmKToKKyAgICAgICAgIkhhbmRsZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcyBkYXRhLiIK
KyAgICAgICAgaWYgc2VsZi5zb3VwLmNvbnZlcnRFbnRpdGllczoKKyAgICAgICAgICAgIGRhdGEg
PSB1bmljaHIoaW50KHJlZikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gJyYj
JXM7JyAlIHJlZgorICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFu
ZGxlX2VudGl0eXJlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJIYW5kbGUgZW50aXR5IHJlZmVy
ZW5jZXMgYXMgZGF0YSwgcG9zc2libHkgY29udmVydGluZyBrbm93bgorICAgICAgICBIVE1MIGFu
ZC9vciBYTUwgZW50aXR5IHJlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZQor
ICAgICAgICBjaGFyYWN0ZXJzLiIiIgorICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICBpZiBz
ZWxmLnNvdXAuY29udmVydEhUTUxFbnRpdGllczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBkYXRhID0gdW5pY2hyKG5hbWUyY29kZXBvaW50W3JlZl0pCisgICAgICAgICAgICBl
eGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIG5vdCBk
YXRhIGFuZCBzZWxmLnNvdXAuY29udmVydFhNTEVudGl0aWVzOgorICAgICAgICAgICAgICAgIGRh
dGEgPSBzZWxmLnNvdXAuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMuZ2V0KHJlZikKKwor
ICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5zb3VwLmNvbnZlcnRIVE1MRW50aXRpZXMgYW5k
IFwKKyAgICAgICAgICAgIG5vdCBzZWxmLnNvdXAuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hB
UlMuZ2V0KHJlZik6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBXZSd2ZSBnb3QgYSBwcm9ibGVt
IGhlcmUuIFdlJ3JlIHRvbGQgdGhpcyBpcworICAgICAgICAgICAgICAgICMgYW4gZW50aXR5IHJl
ZmVyZW5jZSwgYnV0IGl0J3Mgbm90IGFuIFhNTCBlbnRpdHkKKyAgICAgICAgICAgICAgICAjIHJl
ZmVyZW5jZSBvciBhbiBIVE1MIGVudGl0eSByZWZlcmVuY2UuIE5vbmV0aGVsZXNzLAorICAgICAg
ICAgICAgICAgICMgdGhlIGxvZ2ljYWwgdGhpbmcgdG8gZG8gaXMgdG8gcGFzcyBpdCB0aHJvdWdo
IGFzIGFuCisgICAgICAgICAgICAgICAgIyB1bnJlY29nbml6ZWQgZW50aXR5IHJlZmVyZW5jZS4K
KyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBFeGNlcHQ6IHdoZW4gdGhlIGlu
cHV0IGlzICImY2Fyb2w7IiB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgIyB3aWxsIGJl
IGNhbGxlZCB3aXRoIGlucHV0ICJjYXJvbCIuIFdoZW4gdGhlIGlucHV0IGlzCisgICAgICAgICAg
ICAgICAgIyAiQVQmVCIsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBpbnB1dAor
ICAgICAgICAgICAgICAgICMgIlQiLiBXZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHdoZXRoZXIg
YSBzZW1pY29sb24KKyAgICAgICAgICAgICAgICAjIHdhcyBwcmVzZW50IG9yaWdpbmFsbHksIHNv
IHdlIGRvbid0IGtub3cgd2hldGhlcgorICAgICAgICAgICAgICAgICMgdGhpcyBpcyBhbiB1bmtu
b3duIGVudGl0eSBvciBqdXN0IGEgbWlzcGxhY2VkCisgICAgICAgICAgICAgICAgIyBhbXBlcnNh
bmQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIG1vcmUgY29tbW9u
IGNhc2UgaXMgYSBtaXNwbGFjZWQgYW1wZXJzYW5kLCBzbyBJCisgICAgICAgICAgICAgICAgIyBl
c2NhcGUgdGhlIGFtcGVyc2FuZCBhbmQgb21pdCB0aGUgdHJhaWxpbmcgc2VtaWNvbG9uLgorICAg
ICAgICAgICAgICAgIGRhdGEgPSAiJmFtcDslcyIgJSByZWYKKyAgICAgICAgaWYgbm90IGRhdGE6
CisgICAgICAgICAgICAjIFRoaXMgY2FzZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGFib3Zl
LCBiZWNhdXNlIHdlCisgICAgICAgICAgICAjIGhhdmVuJ3QgYWxyZWFkeSBnb25lIHRocm91Z2gg
YSBzdXBwb3NlZGx5IGNvbXByZWhlbnNpdmUKKyAgICAgICAgICAgICMgbWFwcGluZyBvZiBlbnRp
dGllcyB0byBVbmljb2RlIGNoYXJhY3RlcnMuIFdlIG1pZ2h0IG5vdAorICAgICAgICAgICAgIyBo
YXZlIGdvbmUgdGhyb3VnaCBhbnkgbWFwcGluZyBhdCBhbGwuIFNvIHRoZSBjaGFuY2VzIGFyZQor
ICAgICAgICAgICAgIyB2ZXJ5IGhpZ2ggdGhhdCB0aGlzIGlzIGEgcmVhbCBlbnRpdHksIGFuZCBu
b3QgYQorICAgICAgICAgICAgIyBtaXNwbGFjZWQgYW1wZXJzYW5kLgorICAgICAgICAgICAgZGF0
YSA9ICImJXM7IiAlIHJlZgorICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBk
ZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgICJIYW5kbGUgRE9DVFlQRXMgYW5k
IHRoZSBsaWtlIGFzIERlY2xhcmF0aW9uIG9iamVjdHMuIgorICAgICAgICBzZWxmLl90b1N0cmlu
Z1N1YmNsYXNzKGRhdGEsIERlY2xhcmF0aW9uKQorCisgICAgZGVmIHBhcnNlX2RlY2xhcmF0aW9u
KHNlbGYsIGkpOgorICAgICAgICAiIiJUcmVhdCBhIGJvZ3VzIFNHTUwgZGVjbGFyYXRpb24gYXMg
cmF3IGRhdGEuIFRyZWF0IGEgQ0RBVEEKKyAgICAgICAgZGVjbGFyYXRpb24gYXMgYSBDRGF0YSBv
YmplY3QuIiIiCisgICAgICAgIGogPSBOb25lCisgICAgICAgIGlmIHNlbGYucmF3ZGF0YVtpOmkr
OV0gPT0gJzwhW0NEQVRBWyc6CisgICAgICAgICAgICAgayA9IHNlbGYucmF3ZGF0YS5maW5kKCdd
XT4nLCBpKQorICAgICAgICAgICAgIGlmIGsgPT0gLTE6CisgICAgICAgICAgICAgICAgIGsgPSBs
ZW4oc2VsZi5yYXdkYXRhKQorICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJhd2RhdGFbaSs5Omtd
CisgICAgICAgICAgICAgaiA9IGsrMworICAgICAgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xh
c3MoZGF0YSwgQ0RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgaiA9IEhUTUxQYXJzZXIucGFyc2VfZGVjbGFyYXRpb24oc2VsZiwgaSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvcjoKKyAgICAgICAgICAgICAgICB0b0hhbmRsZSA9
IHNlbGYucmF3ZGF0YVtpOl0KKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHRvSGFu
ZGxlKQorICAgICAgICAgICAgICAgIGogPSBpICsgbGVuKHRvSGFuZGxlKQorICAgICAgICByZXR1
cm4gagorCisKK2NsYXNzIEJlYXV0aWZ1bFN0b25lU291cChUYWcpOgorCisgICAgIiIiVGhpcyBj
bGFzcyBjb250YWlucyB0aGUgYmFzaWMgcGFyc2VyIGFuZCBzZWFyY2ggY29kZS4gSXQgZGVmaW5l
cworICAgIGEgcGFyc2VyIHRoYXQga25vd3Mgbm90aGluZyBhYm91dCB0YWcgYmVoYXZpb3IgZXhj
ZXB0IGZvciB0aGUKKyAgICBmb2xsb3dpbmc6CisKKyAgICAgIFlvdSBjYW4ndCBjbG9zZSBhIHRh
ZyB3aXRob3V0IGNsb3NpbmcgYWxsIHRoZSB0YWdzIGl0IGVuY2xvc2VzLgorICAgICAgVGhhdCBp
cywgIjxmb28+PGJhcj48L2Zvbz4iIGFjdHVhbGx5IG1lYW5zCisgICAgICAiPGZvbz48YmFyPjwv
YmFyPjwvZm9vPiIuCisKKyAgICBbQW5vdGhlciBwb3NzaWJsZSBleHBsYW5hdGlvbiBpcyAiPGZv
bz48YmFyIC8+PC9mb28+IiwgYnV0IHNpbmNlCisgICAgdGhpcyBjbGFzcyBkZWZpbmVzIG5vIFNF
TEZfQ0xPU0lOR19UQUdTLCBpdCB3aWxsIG5ldmVyIHVzZSB0aGF0CisgICAgZXhwbGFuYXRpb24u
XQorCisgICAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yIHBhcnNpbmcgWE1MIG9yIG1hZGUtdXAg
bWFya3VwIGxhbmd1YWdlcywKKyAgICBvciB3aGVuIEJlYXV0aWZ1bFNvdXAgbWFrZXMgYW4gYXNz
dW1wdGlvbiBjb3VudGVyIHRvIHdoYXQgeW91IHdlcmUKKyAgICBleHBlY3RpbmcuIiIiCisKKyAg
ICBTRUxGX0NMT1NJTkdfVEFHUyA9IHt9CisgICAgTkVTVEFCTEVfVEFHUyA9IHt9CisgICAgUkVT
RVRfTkVTVElOR19UQUdTID0ge30KKyAgICBRVU9URV9UQUdTID0ge30KKyAgICBQUkVTRVJWRV9X
SElURVNQQUNFX1RBR1MgPSBbXQorCisgICAgTUFSS1VQX01BU1NBR0UgPSBbKHJlLmNvbXBpbGUo
Jyg8W148Pl0qKS8+JyksCisgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4Lmdyb3Vw
KDEpICsgJyAvPicpLAorICAgICAgICAgICAgICAgICAgICAgIChyZS5jb21waWxlKCc8IVxzKyhb
Xjw+XSopPicpLAorICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogJzwhJyArIHguZ3Jv
dXAoMSkgKyAnPicpCisgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgUk9PVF9UQUdfTkFN
RSA9IHUnW2RvY3VtZW50XScKKworICAgIEhUTUxfRU5USVRJRVMgPSAiaHRtbCIKKyAgICBYTUxf
RU5USVRJRVMgPSAieG1sIgorICAgIFhIVE1MX0VOVElUSUVTID0gInhodG1sIgorICAgICMgVE9E
TzogVGhpcyBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkKKyAgICBBTExf
RU5USVRJRVMgPSBYSFRNTF9FTlRJVElFUworCisgICAgIyBVc2VkIHdoZW4gZGV0ZXJtaW5pbmcg
d2hldGhlciBhIHRleHQgbm9kZSBpcyBhbGwgd2hpdGVzcGFjZSBhbmQKKyAgICAjIGNhbiBiZSBy
ZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLiBBIHRleHQgbm9kZSB0aGF0IGNvbnRhaW5zCisg
ICAgIyBmYW5jeSBVbmljb2RlIHNwYWNlcyAodXN1YWxseSBub24tYnJlYWtpbmcpIHNob3VsZCBi
ZSBsZWZ0CisgICAgIyBhbG9uZS4KKyAgICBTVFJJUF9BU0NJSV9TUEFDRVMgPSB7IDk6IE5vbmUs
IDEwOiBOb25lLCAxMjogTm9uZSwgMTM6IE5vbmUsIDMyOiBOb25lLCB9CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbWFya3VwPSIiLCBwYXJzZU9ubHlUaGVzZT1Ob25lLCBmcm9tRW5jb2Rpbmc9
Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWFya3VwTWFzc2FnZT1UcnVlLCBzbWFydFF1b3Rlc1Rv
PVhNTF9FTlRJVElFUywKKyAgICAgICAgICAgICAgICAgY29udmVydEVudGl0aWVzPU5vbmUsIHNl
bGZDbG9zaW5nVGFncz1Ob25lLCBpc0hUTUw9RmFsc2UsCisgICAgICAgICAgICAgICAgIGJ1aWxk
ZXI9SFRNTFBhcnNlckJ1aWxkZXIpOgorICAgICAgICAiIiJUaGUgU291cCBvYmplY3QgaXMgaW5p
dGlhbGl6ZWQgYXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKKyAgICAgICAgcHJvdmlkZWQgbWFy
a3VwICh3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0KQorICAgICAg
ICBpcyBmZWQgaW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisKKyAgICAgICAgSFRNTFBhcnNl
ciB3aWxsIHByb2Nlc3MgbW9zdCBiYWQgSFRNTCwgYW5kIHRoZSBCZWF1dGlmdWxTb3VwCisgICAg
ICAgIGNsYXNzIGhhcyBzb21lIHRyaWNrcyBmb3IgZGVhbGluZyB3aXRoIHNvbWUgSFRNTCB0aGF0
IGtpbGxzCisgICAgICAgIEhUTUxQYXJzZXIsIGJ1dCBCZWF1dGlmdWwgU291cCBjYW4gbm9uZXRo
ZWxlc3MgY2hva2Ugb3IgbG9zZSBkYXRhCisgICAgICAgIGlmIHlvdXIgZGF0YSB1c2VzIHNlbGYt
Y2xvc2luZyB0YWdzIG9yIGRlY2xhcmF0aW9ucworICAgICAgICBpbmNvcnJlY3RseS4KKworICAg
ICAgICBCeSBkZWZhdWx0LCBCZWF1dGlmdWwgU291cCB1c2VzIHJlZ2V4ZXMgdG8gc2FuaXRpemUg
aW5wdXQsCisgICAgICAgIGF2b2lkaW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZXNlIHByb2Js
ZW1zLiBJZiB0aGUgcHJvYmxlbXMKKyAgICAgICAgZG9uJ3QgYXBwbHkgdG8geW91LCBwYXNzIGlu
IEZhbHNlIGZvciBtYXJrdXBNYXNzYWdlLCBhbmQKKyAgICAgICAgeW91J2xsIGdldCBiZXR0ZXIg
cGVyZm9ybWFuY2UuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgcGFyc2VyIG1hc3NhZ2UgdGVjaG5p
cXVlcyBmaXggdGhlIHR3byBtb3N0IGNvbW1vbgorICAgICAgICBpbnN0YW5jZXMgb2YgaW52YWxp
ZCBIVE1MIHRoYXQgY2hva2UgSFRNTFBhcnNlcjoKKworICAgICAgICAgPGJyLz4gKE5vIHNwYWNl
IGJldHdlZW4gbmFtZSBvZiBjbG9zaW5nIHRhZyBhbmQgdGFnIGNsb3NlKQorICAgICAgICAgPCEg
LS1Db21tZW50LS0+IChFeHRyYW5lb3VzIHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24pCisKKyAg
ICAgICAgWW91IGNhbiBwYXNzIGluIGEgY3VzdG9tIGxpc3Qgb2YgKFJFIG9iamVjdCwgcmVwbGFj
ZSBtZXRob2QpCisgICAgICAgIHR1cGxlcyB0byBnZXQgQmVhdXRpZnVsIFNvdXAgdG8gc2NydWIg
eW91ciBpbnB1dCB0aGUgd2F5IHlvdQorICAgICAgICB3YW50LiIiIgorCisgICAgICAgIHNlbGYu
cGFyc2VPbmx5VGhlc2UgPSBwYXJzZU9ubHlUaGVzZQorICAgICAgICBzZWxmLmZyb21FbmNvZGlu
ZyA9IGZyb21FbmNvZGluZworICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rl
c1RvCisgICAgICAgIHNlbGYuY29udmVydEVudGl0aWVzID0gY29udmVydEVudGl0aWVzCisgICAg
ICAgICMgU2V0IHRoZSBydWxlcyBmb3IgaG93IHdlJ2xsIGRlYWwgd2l0aCB0aGUgZW50aXRpZXMg
d2UKKyAgICAgICAgIyBlbmNvdW50ZXIKKyAgICAgICAgaWYgc2VsZi5jb252ZXJ0RW50aXRpZXM6
CisgICAgICAgICAgICAjIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjb252ZXJ0IGVuY29kZWQg
Y2hhcmFjdGVycyB0bworICAgICAgICAgICAgIyBlbnRpdGllcyBldmVuIHdoaWxlIHlvdSdyZSBj
b252ZXJ0aW5nIGVudGl0aWVzIHRvIFVuaWNvZGUuCisgICAgICAgICAgICAjIEp1c3QgY29udmVy
dCBpdCBhbGwgdG8gVW5pY29kZS4KKyAgICAgICAgICAgIHNlbGYuc21hcnRRdW90ZXNUbyA9IE5v
bmUKKyAgICAgICAgICAgIGlmIGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLkhUTUxfRU5USVRJRVM6
CisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAg
ICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAg
ICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgZWxp
ZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5YSFRNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAg
ICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNv
bnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5lc2NhcGVVbnJl
Y29nbml6ZWRFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIGNvbnZlcnRFbnRpdGll
cyA9PSBzZWxmLlhNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxF
bnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMg
PSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMg
PSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRp
ZXMgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gRmFsc2UK
KyAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBGYWxzZQorCisg
ICAgICAgIHNlbGYuaW5zdGFuY2VTZWxmQ2xvc2luZ1RhZ3MgPSBidWlsZFRhZ01hcChOb25lLCBz
ZWxmQ2xvc2luZ1RhZ3MpCisgICAgICAgIHNlbGYuYnVpbGRlciA9IGJ1aWxkZXIoc2VsZikKKyAg
ICAgICAgc2VsZi5yZXNldCgpCisKKyAgICAgICAgaWYgaGFzYXR0cihtYXJrdXAsICdyZWFkJyk6
ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0LgorICAgICAgICAgICAgbWFya3VwID0g
bWFya3VwLnJlYWQoKQorICAgICAgICBzZWxmLm1hcmt1cCA9IG1hcmt1cAorICAgICAgICBzZWxm
Lm1hcmt1cE1hc3NhZ2UgPSBtYXJrdXBNYXNzYWdlCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX2ZlZWQoaXNIVE1MPWlzSFRNTCkKKyAgICAgICAgZXhjZXB0IFN0b3BQYXJzaW5nOgor
ICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLm1hcmt1cCA9IE5vbmUgICAgICAgICAgICAg
ICAgICMgVGhlIG1hcmt1cCBjYW4gbm93IGJlIEdDZWQuCisgICAgICAgIHNlbGYuYnVpbGRlciA9
IE5vbmUgICAgICAgICAgICAgICAgIyBTbyBjYW4gdGhlIGJ1aWxkZXIuCisKKyAgICBkZWYgX2Zl
ZWQoc2VsZiwgaW5Eb2N1bWVudEVuY29kaW5nPU5vbmUsIGlzSFRNTD1GYWxzZSk6CisgICAgICAg
ICMgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZS4KKyAgICAgICAgbWFya3VwID0gc2Vs
Zi5tYXJrdXAKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ29yaWdpbmFsRW5jb2RpbmcnKToKKyAgICAgICAg
ICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0XAorICAgICAgICAgICAgICAgICAgICAgKG1h
cmt1cCwgW3NlbGYuZnJvbUVuY29kaW5nLCBpbkRvY3VtZW50RW5jb2RpbmddLAorICAgICAgICAg
ICAgICAgICAgICAgIHNtYXJ0UXVvdGVzVG89c2VsZi5zbWFydFF1b3Rlc1RvLCBpc0hUTUw9aXNI
VE1MKQorICAgICAgICAgICAgbWFya3VwID0gZGFtbWl0LnVuaWNvZGUKKyAgICAgICAgICAgIHNl
bGYub3JpZ2luYWxFbmNvZGluZyA9IGRhbW1pdC5vcmlnaW5hbEVuY29kaW5nCisgICAgICAgICAg
ICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gZGFtbWl0LmRlY2xhcmVkSFRNTEVuY29kaW5n
CisgICAgICAgIGlmIG1hcmt1cDoKKyAgICAgICAgICAgIGlmIHNlbGYubWFya3VwTWFzc2FnZToK
KyAgICAgICAgICAgICAgICBpZiBub3QgaXNMaXN0KHNlbGYubWFya3VwTWFzc2FnZSk6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IHNlbGYuTUFSS1VQX01BU1NBR0UK
KyAgICAgICAgICAgICAgICBmb3IgZml4LCBtIGluIHNlbGYubWFya3VwTWFzc2FnZToKKyAgICAg
ICAgICAgICAgICAgICAgbWFya3VwID0gZml4LnN1YihtLCBtYXJrdXApCisgICAgICAgICAgICAg
ICAgIyBUT0RPOiBXZSBnZXQgcmlkIG9mIG1hcmt1cE1hc3NhZ2Ugc28gdGhhdCB0aGUKKyAgICAg
ICAgICAgICAgICAjIHNvdXAgb2JqZWN0IGNhbiBiZSBkZWVwY29waWVkIGxhdGVyIG9uLiBTb21l
CisgICAgICAgICAgICAgICAgIyBQeXRob24gaW5zdGFsbGF0aW9ucyBjYW4ndCBjb3B5IHJlZ2V4
ZXMuIElmIGFueW9uZQorICAgICAgICAgICAgICAgICMgd2FzIHJlbHlpbmcgb24gdGhlIGV4aXN0
ZW5jZSBvZiBtYXJrdXBNYXNzYWdlLCB0aGlzCisgICAgICAgICAgICAgICAgIyBtaWdodCBjYXVz
ZSBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICBkZWwoc2VsZi5tYXJrdXBNYXNzYWdlKQorICAg
ICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5mZWVkKG1h
cmt1cCkKKyAgICAgICAgIyBDbG9zZSBvdXQgYW55IHVuZmluaXNoZWQgc3RyaW5ncyBhbmQgY2xv
c2UgYWxsIHRoZSBvcGVuIHRhZ3MuCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAgICAgIHdo
aWxlIHNlbGYuY3VycmVudFRhZy5uYW1lICE9IHNlbGYuUk9PVF9UQUdfTkFNRToKKyAgICAgICAg
ICAgIHNlbGYucG9wVGFnKCkKKworICAgIGRlZiBpc1NlbGZDbG9zaW5nVGFnKHNlbGYsIG5hbWUp
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgaXMgdGhlIG5h
bWUgb2YgYQorICAgICAgICBzZWxmLWNsb3NpbmcgdGFnIGFjY29yZGluZyB0byB0aGlzIHBhcnNl
ci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuU0VMRl9DTE9TSU5HX1RBR1MuaGFzX2tleShuYW1l
KSBcCisgICAgICAgICAgICAgICBvciBzZWxmLmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzLmhhc19r
ZXkobmFtZSkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgVGFnLl9faW5pdF9fKHNl
bGYsIHNlbGYsIHNlbGYuUk9PVF9UQUdfTkFNRSkKKyAgICAgICAgc2VsZi5oaWRkZW4gPSAxCisg
ICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisgICAgICAgIHNlbGYuY3VycmVudERhdGEgPSBb
XQorICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBOb25lCisgICAgICAgIHNlbGYudGFnU3RhY2sg
PSBbXQorICAgICAgICBzZWxmLnF1b3RlU3RhY2sgPSBbXQorICAgICAgICBzZWxmLnB1c2hUYWco
c2VsZikKKworICAgIGRlZiBwb3BUYWcoc2VsZik6CisgICAgICAgIHRhZyA9IHNlbGYudGFnU3Rh
Y2sucG9wKCkKKyAgICAgICAgIyBUYWdzIHdpdGgganVzdCBvbmUgc3RyaW5nLW93bmluZyBjaGls
ZCBnZXQgdGhlIGNoaWxkIGFzIGEKKyAgICAgICAgIyAnc3RyaW5nJyBwcm9wZXJ0eSwgc28gdGhh
dCBzb3VwLnRhZy5zdHJpbmcgaXMgc2hvcnRoYW5kIGZvcgorICAgICAgICAjIHNvdXAudGFnLmNv
bnRlbnRzWzBdCisgICAgICAgIGlmIGxlbihzZWxmLmN1cnJlbnRUYWcuY29udGVudHMpID09IDEg
YW5kIFwKKyAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLmN1cnJlbnRUYWcuY29udGVudHNbMF0s
IE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuc3RyaW5nID0g
c2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzWzBdCisKKyAgICAgICAgI3ByaW50ICJQb3AiLCB0YWcu
bmFtZQorICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50
VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudFRhZwor
CisgICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgI3ByaW50ICJQdXNoIiwgdGFn
Lm5hbWUKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgorICAgICAgICAgICAgc2VsZi5jdXJy
ZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYudGFnU3RhY2suYXBwZW5k
KHRhZykKKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKworICAg
IGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CisgICAg
ICAgIGlmIHNlbGYuY3VycmVudERhdGE6CisgICAgICAgICAgICBjdXJyZW50RGF0YSA9IHUnJy5q
b2luKHNlbGYuY3VycmVudERhdGEpCisgICAgICAgICAgICBpZiAoY3VycmVudERhdGEudHJhbnNs
YXRlKHNlbGYuU1RSSVBfQVNDSUlfU1BBQ0VTKSA9PSAnJyBhbmQKKyAgICAgICAgICAgICAgICBu
b3Qgc2V0KFt0YWcubmFtZSBmb3IgdGFnIGluIHNlbGYudGFnU3RhY2tdKS5pbnRlcnNlY3Rpb24o
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdTKSk6Cisg
ICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50RGF0YToKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudERhdGEgPSAnXG4nCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudERhdGEgPSAnICcKKyAgICAgICAgICAgIHNlbGYuY3VycmVudERhdGEg
PSBbXQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVzZSBhbmQgbGVuKHNlbGYudGFn
U3RhY2spIDw9IDEgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAobm90IHNlbGYucGFyc2VPbmx5
VGhlc2UudGV4dCBvciBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLnBhcnNlT25seVRo
ZXNlLnNlYXJjaChjdXJyZW50RGF0YSkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgbyA9IGNvbnRhaW5lckNsYXNzKGN1cnJlbnREYXRhKQorICAgICAgICAgICAgby5zZXR1
cChzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMpCisgICAgICAgICAgICBpZiBzZWxmLnBy
ZXZpb3VzOgorICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IG8KKyAgICAgICAg
ICAgIHNlbGYucHJldmlvdXMgPSBvCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuY29udGVu
dHMuYXBwZW5kKG8pCisKKworICAgIGRlZiBfcG9wVG9UYWcoc2VsZiwgbmFtZSwgaW5jbHVzaXZl
UG9wPVRydWUpOgorICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3RhY2sgdXAgdG8gYW5kIGluY2x1
ZGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHRhZy4g
SWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcKKyAgICAgICAgc3RhY2sgdXAg
dG8gYnV0ICpub3QqIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQgaW5zdHFhbmNlIG9mCisgICAg
ICAgIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgICNwcmludCAiUG9wcGluZyB0byAlcyIgJSBu
YW1lCisgICAgICAgIGlmIG5hbWUgPT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgbnVtUG9wcyA9IDAKKyAgICAgICAgbW9zdFJlY2VudFRhZyA9IE5v
bmUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFnU3RhY2spLTEsIDAsIC0xKToK
KyAgICAgICAgICAgIGlmIG5hbWUgPT0gc2VsZi50YWdTdGFja1tpXS5uYW1lOgorICAgICAgICAg
ICAgICAgIG51bVBvcHMgPSBsZW4oc2VsZi50YWdTdGFjayktaQorICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgIGlmIG5vdCBpbmNsdXNpdmVQb3A6CisgICAgICAgICAgICBudW1Qb3BzID0g
bnVtUG9wcyAtIDEKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBudW1Qb3BzKToKKyAgICAg
ICAgICAgIG1vc3RSZWNlbnRUYWcgPSBzZWxmLnBvcFRhZygpCisgICAgICAgIHJldHVybiBtb3N0
UmVjZW50VGFnCisKKyAgICBkZWYgX3NtYXJ0UG9wKHNlbGYsIG5hbWUpOgorCisgICAgICAgICIi
IldlIG5lZWQgdG8gcG9wIHVwIHRvIHRoZSBwcmV2aW91cyB0YWcgb2YgdGhpcyB0eXBlLCB1bmxl
c3MKKyAgICAgICAgb25lIG9mIHRoaXMgdGFnJ3MgbmVzdGluZyByZXNldCB0cmlnZ2VycyBjb21l
cyBiZXR3ZWVuIHRoaXMKKyAgICAgICAgdGFnIGFuZCB0aGUgcHJldmlvdXMgdGFnIG9mIHRoaXMg
dHlwZSwgT1IgdW5sZXNzIHRoaXMgdGFnIGlzIGEKKyAgICAgICAgZ2VuZXJpYyBuZXN0aW5nIHRy
aWdnZXIgYW5kIGFub3RoZXIgZ2VuZXJpYyBuZXN0aW5nIHRyaWdnZXIKKyAgICAgICAgY29tZXMg
YmV0d2VlbiB0aGlzIHRhZyBhbmQgdGhlIHByZXZpb3VzIHRhZyBvZiB0aGlzIHR5cGUuCisKKyAg
ICAgICAgRXhhbXBsZXM6CisgICAgICAgICA8cD5Gb288Yj5CYXIgKjxwPiogc2hvdWxkIHBvcCB0
byAncCcsIG5vdCAnYicuCisgICAgICAgICA8cD5Gb288dGFibGU+QmFyICo8cD4qIHNob3VsZCBw
b3AgdG8gJ3RhYmxlJywgbm90ICdwJy4KKyAgICAgICAgIDxwPkZvbzx0YWJsZT48dHI+QmFyICo8
cD4qIHNob3VsZCBwb3AgdG8gJ3RyJywgbm90ICdwJy4KKworICAgICAgICAgPGxpPjx1bD48bGk+
ICo8bGk+KiBzaG91bGQgcG9wIHRvICd1bCcsIG5vdCB0aGUgZmlyc3QgJ2xpJy4KKyAgICAgICAg
IDx0cj48dGFibGU+PHRyPiAqPHRyPiogc2hvdWxkIHBvcCB0byAndGFibGUnLCBub3QgdGhlIGZp
cnN0ICd0cicKKyAgICAgICAgIDx0ZD48dHI+PHRkPiAqPHRkPiogc2hvdWxkIHBvcCB0byAndHIn
LCBub3QgdGhlIGZpcnN0ICd0ZCcKKyAgICAgICAgIiIiCisKKyAgICAgICAgbmVzdGluZ1Jlc2V0
VHJpZ2dlcnMgPSBzZWxmLk5FU1RBQkxFX1RBR1MuZ2V0KG5hbWUpCisgICAgICAgIGlzTmVzdGFi
bGUgPSBuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCisgICAgICAgIGlzUmVzZXROZXN0aW5n
ID0gc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShuYW1lKQorICAgICAgICBwb3BUbyA9
IE5vbmUKKyAgICAgICAgaW5jbHVzaXZlID0gVHJ1ZQorICAgICAgICBmb3IgaSBpbiByYW5nZShs
ZW4oc2VsZi50YWdTdGFjayktMSwgMCwgLTEpOgorICAgICAgICAgICAgcCA9IHNlbGYudGFnU3Rh
Y2tbaV0KKyAgICAgICAgICAgIGlmIChub3QgcCBvciBwLm5hbWUgPT0gbmFtZSkgYW5kIG5vdCBp
c05lc3RhYmxlOgorICAgICAgICAgICAgICAgICNOb24tbmVzdGFibGUgdGFncyBnZXQgcG9wcGVk
IHRvIHRoZSB0b3Agb3IgdG8gdGhlaXIKKyAgICAgICAgICAgICAgICAjbGFzdCBvY2N1cmFuY2Uu
CisgICAgICAgICAgICAgICAgcG9wVG8gPSBuYW1lCisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIGlmIChuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCisgICAgICAgICAgICAg
ICAgYW5kIHAubmFtZSBpbiBuZXN0aW5nUmVzZXRUcmlnZ2VycykgXAorICAgICAgICAgICAgICAg
IG9yIChuZXN0aW5nUmVzZXRUcmlnZ2VycyA9PSBOb25lIGFuZCBpc1Jlc2V0TmVzdGluZworICAg
ICAgICAgICAgICAgICAgICBhbmQgc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShwLm5h
bWUpKToKKworICAgICAgICAgICAgICAgICNJZiB3ZSBlbmNvdW50ZXIgb25lIG9mIHRoZSBuZXN0
aW5nIHJlc2V0IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgI3BlY3VsaWFyIHRvIHRoaXMgdGFn
LCBvciB3ZSBlbmNvdW50ZXIgYW5vdGhlciB0YWcKKyAgICAgICAgICAgICAgICAjdGhhdCBjYXVz
ZXMgbmVzdGluZyB0byByZXNldCwgcG9wIHVwIHRvIGJ1dCBub3QKKyAgICAgICAgICAgICAgICAj
aW5jbHVkaW5nIHRoYXQgdGFnLgorICAgICAgICAgICAgICAgIHBvcFRvID0gcC5uYW1lCisgICAg
ICAgICAgICAgICAgaW5jbHVzaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgcCA9IHAucGFyZW50CisgICAgICAgIGlmIHBvcFRvOgorICAgICAgICAgICAgc2Vs
Zi5fcG9wVG9UYWcocG9wVG8sIGluY2x1c2l2ZSkKKworICAgIGRlZiB1bmtub3duX3N0YXJ0dGFn
KHNlbGYsIG5hbWUsIGF0dHJzLCBzZWxmQ2xvc2luZz0wKToKKyAgICAgICAgI3ByaW50ICJTdGFy
dCB0YWcgJXM6ICVzIiAlIChuYW1lLCBhdHRycykKKyAgICAgICAgaWYgc2VsZi5xdW90ZVN0YWNr
OgorICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCB0YWcuCisgICAgICAgICAgICAjcHJp
bnQgIjwlcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKKyAgICAgICAgICAgIGF0dHJzID0gJycuam9p
bihtYXAobGFtYmRhKHgsIHkpOiAnICVzPSIlcyInICUgKHgsIHkpLCBhdHRycykpCisgICAgICAg
ICAgICBzZWxmLmhhbmRsZV9kYXRhKCc8JXMlcz4nICUgKG5hbWUsIGF0dHJzKSkKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBzZWxmLmVuZERhdGEoKQorCisgICAgICAgIGlmIG5vdCBzZWxm
LmlzU2VsZkNsb3NpbmdUYWcobmFtZSkgYW5kIG5vdCBzZWxmQ2xvc2luZzoKKyAgICAgICAgICAg
IHNlbGYuX3NtYXJ0UG9wKG5hbWUpCisKKyAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVzZSBh
bmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEgXAorICAgICAgICAgICAgICAgYW5kIChzZWxmLnBh
cnNlT25seVRoZXNlLnRleHQgb3Igbm90IHNlbGYucGFyc2VPbmx5VGhlc2Uuc2VhcmNoVGFnKG5h
bWUsIGF0dHJzKSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0YWcgPSBUYWcoc2Vs
ZiwgbmFtZSwgYXR0cnMsIHNlbGYuY3VycmVudFRhZywgc2VsZi5wcmV2aW91cykKKyAgICAgICAg
aWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IHRhZwor
ICAgICAgICBzZWxmLnByZXZpb3VzID0gdGFnCisgICAgICAgIHNlbGYucHVzaFRhZyh0YWcpCisg
ICAgICAgIGlmIHNlbGZDbG9zaW5nIG9yIHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKToKKyAg
ICAgICAgICAgIHNlbGYucG9wVGFnKCkKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLlFVT1RFX1RB
R1M6CisgICAgICAgICAgICAjcHJpbnQgIkJlZ2lubmluZyBxdW90ZSAoJXMpIiAlIG5hbWUKKyAg
ICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHNlbGYu
bGl0ZXJhbCA9IDEKKyAgICAgICAgcmV0dXJuIHRhZworCisgICAgZGVmIHVua25vd25fZW5kdGFn
KHNlbGYsIG5hbWUpOgorICAgICAgICAjcHJpbnQgIkVuZCB0YWcgJXMiICUgbmFtZQorICAgICAg
ICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFja1stMV0gIT0gbmFtZToKKyAg
ICAgICAgICAgICNUaGlzIGlzIG5vdCBhIHJlYWwgZW5kIHRhZy4KKyAgICAgICAgICAgICNwcmlu
dCAiPC8lcz4gaXMgbm90IHJlYWwhIiAlIG5hbWUKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Rh
dGEoJzwvJXM+JyAlIG5hbWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5lbmRE
YXRhKCkKKyAgICAgICAgc2VsZi5fcG9wVG9UYWcobmFtZSkKKyAgICAgICAgaWYgc2VsZi5xdW90
ZVN0YWNrIGFuZCBzZWxmLnF1b3RlU3RhY2tbLTFdID09IG5hbWU6CisgICAgICAgICAgICBzZWxm
LnF1b3RlU3RhY2sucG9wKCkKKyAgICAgICAgICAgIHNlbGYubGl0ZXJhbCA9IChsZW4oc2VsZi5x
dW90ZVN0YWNrKSA+IDApCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAg
ICAgIHNlbGYuY3VycmVudERhdGEuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgZXh0cmFjdENoYXJz
ZXRGcm9tTWV0YShzZWxmLCBhdHRycyk6CisgICAgICAgIHNlbGYudW5rbm93bl9zdGFydHRhZygn
bWV0YScsIGF0dHJzKQorCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAoQmVhdXRpZnVsU3RvbmVTb3Vw
KToKKworICAgICIiIlRoaXMgcGFyc2VyIGtub3dzIHRoZSBmb2xsb3dpbmcgZmFjdHMgYWJvdXQg
SFRNTDoKKworICAgICogU29tZSB0YWdzIGhhdmUgbm8gY2xvc2luZyB0YWcgYW5kIHNob3VsZCBi
ZSBpbnRlcnByZXRlZCBhcyBiZWluZworICAgICAgY2xvc2VkIGFzIHNvb24gYXMgdGhleSBhcmUg
ZW5jb3VudGVyZWQuCisKKyAgICAqIFRoZSB0ZXh0IGluc2lkZSBzb21lIHRhZ3MgKGllLiAnc2Ny
aXB0JykgbWF5IGNvbnRhaW4gdGFncyB3aGljaAorICAgICAgYXJlIG5vdCByZWFsbHkgcGFydCBv
ZiB0aGUgZG9jdW1lbnQgYW5kIHdoaWNoIHNob3VsZCBiZSBwYXJzZWQKKyAgICAgIGFzIHRleHQs
IG5vdCB0YWdzLiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgdGV4dCBhcyB0YWdzLCB5b3UgY2Fu
CisgICAgICBhbHdheXMgZmV0Y2ggaXQgYW5kIHBhcnNlIGl0IGV4cGxpY2l0bHkuCisKKyAgICAq
IFRhZyBuZXN0aW5nIHJ1bGVzOgorCisgICAgICBNb3N0IHRhZ3MgY2FuJ3QgYmUgbmVzdGVkIGF0
IGFsbC4gRm9yIGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlIG9mCisgICAgICBhIDxwPiB0YWcgc2hv
dWxkIGltcGxpY2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDxwPiB0YWcuCisKKyAgICAgICA8cD5Q
YXJhMTxwPlBhcmEyCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAg
IDxwPlBhcmExPC9wPjxwPlBhcmEyCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkIGFy
Yml0cmFyaWx5LiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2UKKyAgICAgIG9mIGEgPGJsb2Nr
cXVvdGU+IHRhZyBzaG91bGQgX25vdF8gaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMKKyAg
ICAgIDxibG9ja3F1b3RlPiB0YWcuCisKKyAgICAgICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5C
b2Igc2FpZDogPGJsb2NrcXVvdGU+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9y
bWVkIGludG86CisgICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVvdGU+Qm9iIHNhaWQ6IDwvYmxv
Y2txdW90ZT48YmxvY2txdW90ZT5CbGFoCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVk
LCBidXQgdGhlIG5lc3RpbmcgaXMgcmVzZXQgYnkgdGhlCisgICAgICBpbnRlcnBvc2l0aW9uIG9m
IG90aGVyIHRhZ3MuIEZvciBpbnN0YW5jZSwgYSA8dHI+IHRhZyBzaG91bGQKKyAgICAgIGltcGxp
Y2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDx0cj4gdGFnIHdpdGhpbiB0aGUgc2FtZSA8dGFibGU+
LAorICAgICAgYnV0IG5vdCBjbG9zZSBhIDx0cj4gdGFnIGluIGFub3RoZXIgdGFibGUuCisKKyAg
ICAgICA8dGFibGU+PHRyPkJsYWg8dHI+QmxhaAorICAgICAgICBzaG91bGQgYmUgdHJhbnNmb3Jt
ZWQgaW50bzoKKyAgICAgICA8dGFibGU+PHRyPkJsYWg8L3RyPjx0cj5CbGFoCisgICAgICAgIGJ1
dCwKKyAgICAgICA8dHI+QmxhaDx0YWJsZT48dHI+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJl
IHRyYW5zZm9ybWVkIGludG8KKyAgICAgICA8dHI+QmxhaDx0YWJsZT48L3RyPjx0cj5CbGFoCisK
KyAgICBEaWZmZXJpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdGFnIG5lc3RpbmcgcnVsZXMgYXJlIGEg
bWFqb3Igc291cmNlCisgICAgb2YgcHJvYmxlbXMgd2l0aCB0aGUgQmVhdXRpZnVsU291cCBjbGFz
cy4gSWYgQmVhdXRpZnVsU291cCBpcyBub3QKKyAgICB0cmVhdGluZyBhcyBuZXN0YWJsZSBhIHRh
ZyB5b3VyIHBhZ2UgYXV0aG9yIHRyZWF0cyBhcyBuZXN0YWJsZSwKKyAgICB0cnkgSUNhbnRCZWxp
ZXZlSXRzQmVhdXRpZnVsU291cCwgTWluaW1hbFNvdXAsIG9yCisgICAgQmVhdXRpZnVsU3RvbmVT
b3VwIGJlZm9yZSB3cml0aW5nIHlvdXIgb3duIHN1YmNsYXNzLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBrd2FyZ3MuaGFzX2tl
eSgnc21hcnRRdW90ZXNUbycpOgorICAgICAgICAgICAga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10g
PSBzZWxmLkhUTUxfRU5USVRJRVMKKyAgICAgICAga3dhcmdzWydpc0hUTUwnXSA9IFRydWUKKyAg
ICAgICAgQmVhdXRpZnVsU3RvbmVTb3VwLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
KworICAgIFNFTEZfQ0xPU0lOR19UQUdTID0gYnVpbGRUYWdNYXAoTm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsnYnInICwgJ2hyJywgJ2lucHV0JywgJ2ltZycsICdt
ZXRhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInLCAnbGlu
aycsICdmcmFtZScsICdiYXNlJ10pCisKKyAgICBQUkVTRVJWRV9XSElURVNQQUNFX1RBR1MgPSBz
ZXQoWydwcmUnLCAndGV4dGFyZWEnXSkKKworICAgIFFVT1RFX1RBR1MgPSB7J3NjcmlwdCcgOiBO
b25lLCAndGV4dGFyZWEnIDogTm9uZX0KKworICAgICNBY2NvcmRpbmcgdG8gdGhlIEhUTUwgc3Rh
bmRhcmQsIGVhY2ggb2YgdGhlc2UgaW5saW5lIHRhZ3MgY2FuCisgICAgI2NvbnRhaW4gYW5vdGhl
ciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCisgICAgI3Rv
IGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgorICAgIE5FU1RBQkxFX0lOTElORV9U
QUdTID0gWydzcGFuJywgJ2ZvbnQnLCAncScsICdvYmplY3QnLCAnYmRvJywgJ3N1YicsICdzdXAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXInXQorCisgICAgI0FjY29yZGlu
ZyB0byB0aGUgSFRNTCBzdGFuZGFyZCwgdGhlc2UgYmxvY2sgdGFncyBjYW4gY29udGFpbgorICAg
ICNhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlLiBGdXJ0aGVybW9yZSwgaXQncyBjb21tb24K
KyAgICAjdG8gYWN0dWFsbHkgdXNlIHRoZXNlIHRhZ3MgdGhpcyB3YXkuCisgICAgTkVTVEFCTEVf
QkxPQ0tfVEFHUyA9IFsnYmxvY2txdW90ZScsICdkaXYnLCAnZmllbGRzZXQnLCAnaW5zJywgJ2Rl
bCddCisKKyAgICAjTGlzdHMgY2FuIGNvbnRhaW4gb3RoZXIgbGlzdHMsIGJ1dCB0aGVyZSBhcmUg
cmVzdHJpY3Rpb25zLgorICAgIE5FU1RBQkxFX0xJU1RfVEFHUyA9IHsgJ29sJyA6IFtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3VsJyA6IFtdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpJyA6IFsndWwnLCAnb2wnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdk
bCcgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZCcgOiBbJ2RsJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZHQnIDogWydkbCddIH0KKworICAgICNUYWJsZXMgY2Fu
IGNvbnRhaW4gb3RoZXIgdGFibGVzLCBidXQgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucy4KKyAgICBO
RVNUQUJMRV9UQUJMRV9UQUdTID0geyd0YWJsZScgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0cicgOiBbJ3RhYmxlJywgJ3Rib2R5JywgJ3Rmb290JywgJ3RoZWFkJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGQnIDogWyd0ciddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3RoJyA6IFsndHInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGVh
ZCcgOiBbJ3RhYmxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGJvZHknIDogWyd0
YWJsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rmb290JyA6IFsndGFibGUnXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgIE5PTl9ORVNUQUJMRV9CTE9DS19U
QUdTID0gWydhZGRyZXNzJywgJ2Zvcm0nLCAncCcsICdwcmUnXQorCisgICAgI0lmIG9uZSBvZiB0
aGVzZSB0YWdzIGlzIGVuY291bnRlcmVkLCBhbGwgdGFncyB1cCB0byB0aGUgbmV4dCB0YWcgb2YK
KyAgICAjdGhpcyB0eXBlIGFyZSBwb3BwZWQuCisgICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVp
bGRUYWdNYXAoTm9uZSwgTkVTVEFCTEVfQkxPQ0tfVEFHUywgJ25vc2NyaXB0JywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFHUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVNUQUJMRV9MSVNUX1RBR1MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfVEFCTEVfVEFHUykK
KworICAgIE5FU1RBQkxFX1RBR1MgPSBidWlsZFRhZ01hcChbXSwgTkVTVEFCTEVfSU5MSU5FX1RB
R1MsIE5FU1RBQkxFX0JMT0NLX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5FU1RBQkxFX0xJU1RfVEFHUywgTkVTVEFCTEVfVEFCTEVfVEFHUykKKworICAgICMgVXNlZCB0
byBkZXRlY3QgdGhlIGNoYXJzZXQgaW4gYSBNRVRBIHRhZzsgc2VlIHN0YXJ0X21ldGEKKyAgICBD
SEFSU0VUX1JFID0gcmUuY29tcGlsZSgiKChefDspXHMqY2hhcnNldD0pKFteO10qKSIsIHJlLk0p
CisKKyAgICBkZWYgZXh0cmFjdENoYXJzZXRGcm9tTWV0YShzZWxmLCBhdHRycyk6CisgICAgICAg
ICIiIkJlYXV0aWZ1bCBTb3VwIGNhbiBkZXRlY3QgYSBjaGFyc2V0IGluY2x1ZGVkIGluIGEgTUVU
QSB0YWcsCisgICAgICAgIHRyeSB0byBjb252ZXJ0IHRoZSBkb2N1bWVudCB0byB0aGF0IGNoYXJz
ZXQsIGFuZCByZS1wYXJzZSB0aGUKKyAgICAgICAgZG9jdW1lbnQgZnJvbSB0aGUgYmVnaW5uaW5n
LiIiIgorICAgICAgICBodHRwRXF1aXYgPSBOb25lCisgICAgICAgIGNvbnRlbnRUeXBlID0gTm9u
ZQorICAgICAgICBjb250ZW50VHlwZUluZGV4ID0gTm9uZQorICAgICAgICB0YWdOZWVkc0VuY29k
aW5nU3Vic3RpdHV0aW9uID0gRmFsc2UKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4o
YXR0cnMpKToKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBhdHRyc1tpXQorICAgICAgICAgICAg
a2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGtleSA9PSAnaHR0cC1lcXVpdic6Cisg
ICAgICAgICAgICAgICAgaHR0cEVxdWl2ID0gdmFsdWUKKyAgICAgICAgICAgIGVsaWYga2V5ID09
ICdjb250ZW50JzoKKyAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IHZhbHVlCisgICAgICAg
ICAgICAgICAgY29udGVudFR5cGVJbmRleCA9IGkKKworICAgICAgICBpZiBodHRwRXF1aXYgYW5k
IGNvbnRlbnRUeXBlOiAjIEl0J3MgYW4gaW50ZXJlc3RpbmcgbWV0YSB0YWcuCisgICAgICAgICAg
ICBtYXRjaCA9IHNlbGYuQ0hBUlNFVF9SRS5zZWFyY2goY29udGVudFR5cGUpCisgICAgICAgICAg
ICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGlu
ZyBpcyBub3QgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2Rp
bmcgPT0gc2VsZi5mcm9tRW5jb2RpbmcpOgorICAgICAgICAgICAgICAgICAgICAjIEFuIEhUTUwg
ZW5jb2Rpbmcgd2FzIHNuaWZmZWQgd2hpbGUgY29udmVydGluZworICAgICAgICAgICAgICAgICAg
ICAjIHRoZSBkb2N1bWVudCB0byBVbmljb2RlLCBvciBhbiBIVE1MIGVuY29kaW5nIHdhcworICAg
ICAgICAgICAgICAgICAgICAjIHNuaWZmZWQgZHVyaW5nIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdo
IHRoZQorICAgICAgICAgICAgICAgICAgICAjIGRvY3VtZW50LCBvciBhbiBlbmNvZGluZyB3YXMg
c3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICMgZXhwbGljaXRseSBhbmQgaXQgd29ya2Vk
LiBSZXdyaXRlIHRoZSBtZXRhIHRhZy4KKyAgICAgICAgICAgICAgICAgICAgZGVmIHJld3JpdGUo
bWF0Y2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpICsg
IiVTT1VQLUVOQ09ESU5HJSIKKyAgICAgICAgICAgICAgICAgICAgbmV3QXR0ciA9IHNlbGYuQ0hB
UlNFVF9SRS5zdWIocmV3cml0ZSwgY29udGVudFR5cGUpCisgICAgICAgICAgICAgICAgICAgIGF0
dHJzW2NvbnRlbnRUeXBlSW5kZXhdID0gKGF0dHJzW2NvbnRlbnRUeXBlSW5kZXhdWzBdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdHRyKQorICAg
ICAgICAgICAgICAgICAgICB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uID0gVHJ1ZQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBvdXIgZmly
c3QgcGFzcyB0aHJvdWdoIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICAgICAgIyBHbyB0
aHJvdWdoIGl0IGFnYWluIHdpdGggdGhlIGVuY29kaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAg
ICAgICAgICAgICBuZXdDaGFyc2V0ID0gbWF0Y2guZ3JvdXAoMykKKyAgICAgICAgICAgICAgICAg
ICAgaWYgbmV3Q2hhcnNldCBhbmQgbmV3Q2hhcnNldCAhPSBzZWxmLm9yaWdpbmFsRW5jb2Rpbmc6
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gbmV3
Q2hhcnNldAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChzZWxmLmRlY2xhcmVk
SFRNTEVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcFBhcnNpbmcK
KyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0YWcgPSBzZWxmLnVua25vd25fc3Rh
cnR0YWcoIm1ldGEiLCBhdHRycykKKyAgICAgICAgaWYgdGFnIGFuZCB0YWdOZWVkc0VuY29kaW5n
U3Vic3RpdHV0aW9uOgorICAgICAgICAgICAgdGFnLmNvbnRhaW5zU3Vic3RpdHV0aW9ucyA9IFRy
dWUKKworCitjbGFzcyBTdG9wUGFyc2luZyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3Mg
SUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cChCZWF1dGlmdWxTb3VwKToKKworICAgICIiIlRo
ZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGlzIG9yaWVudGVkIHRvd2FyZHMgc2tpcHBpbmcgb3Zlcgor
ICAgIGNvbW1vbiBIVE1MIGVycm9ycyBsaWtlIHVuY2xvc2VkIHRhZ3MuIEhvd2V2ZXIsIHNvbWV0
aW1lcyBpdCBtYWtlcworICAgIGVycm9ycyBvZiBpdHMgb3duLiBGb3IgaW5zdGFuY2UsIGNvbnNp
ZGVyIHRoaXMgZnJhZ21lbnQ6CisKKyAgICAgPGI+Rm9vPGI+QmFyPC9iPjwvYj4KKworICAgIFRo
aXMgaXMgcGVyZmVjdGx5IHZhbGlkIChpZiBiaXphcnJlKSBIVE1MLiBIb3dldmVyLCB0aGUKKyAg
ICBCZWF1dGlmdWxTb3VwIGNsYXNzIHdpbGwgaW1wbGljaXRseSBjbG9zZSB0aGUgZmlyc3QgYiB0
YWcgd2hlbiBpdAorICAgIGVuY291bnRlcnMgdGhlIHNlY29uZCAnYicuIEl0IHdpbGwgdGhpbmsg
dGhlIGF1dGhvciB3cm90ZQorICAgICI8Yj5Gb288Yj5CYXIiLCBhbmQgZGlkbid0IGNsb3NlIHRo
ZSBmaXJzdCAnYicgdGFnLCBiZWNhdXNlCisgICAgdGhlcmUncyBubyByZWFsLXdvcmxkIHJlYXNv
biB0byBib2xkIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeQorICAgIGJvbGQuIFdoZW4gaXQgZW5j
b3VudGVycyAnPC9iPjwvYj4nIGl0IHdpbGwgY2xvc2UgdHdvIG1vcmUgJ2InCisgICAgdGFncywg
Zm9yIGEgZ3JhbmQgdG90YWwgb2YgdGhyZWUgdGFncyBjbG9zZWQgaW5zdGVhZCBvZiB0d28uIFRo
aXMKKyAgICBjYW4gdGhyb3cgb2ZmIHRoZSByZXN0IG9mIHlvdXIgZG9jdW1lbnQgc3RydWN0dXJl
LiBUaGUgc2FtZSBpcworICAgIHRydWUgb2YgYSBudW1iZXIgb2Ygb3RoZXIgdGFncywgbGlzdGVk
IGJlbG93LgorCisgICAgSXQncyBtdWNoIG1vcmUgY29tbW9uIGZvciBzb21lb25lIHRvIGZvcmdl
dCB0byBjbG9zZSBhICdiJyB0YWcKKyAgICB0aGFuIHRvIGFjdHVhbGx5IHVzZSBuZXN0ZWQgJ2In
IHRhZ3MsIGFuZCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcworICAgIGhhbmRsZXMgdGhlIGNvbW1v
biBjYXNlLiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIG5vdC1jby1jb21tb24KKyAgICBjYXNlOiB3
aGVyZSB5b3UgY2FuJ3QgYmVsaWV2ZSBzb21lb25lIHdyb3RlIHdoYXQgdGhleSBkaWQsIGJ1dAor
ICAgIGl0J3MgdmFsaWQgSFRNTCBhbmQgQmVhdXRpZnVsU291cCBzY3Jld2VkIHVwIGJ5IGFzc3Vt
aW5nIGl0CisgICAgd291bGRuJ3QgYmUuIiIiCisKKyAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVf
TkVTVEFCTEVfSU5MSU5FX1RBR1MgPSBcCisgICAgIFsnZW0nLCAnYmlnJywgJ2knLCAnc21hbGwn
LCAndHQnLCAnYWJicicsICdhY3JvbnltJywgJ3N0cm9uZycsCisgICAgICAnY2l0ZScsICdjb2Rl
JywgJ2RmbicsICdrYmQnLCAnc2FtcCcsICdzdHJvbmcnLCAndmFyJywgJ2InLAorICAgICAgJ2Jp
ZyddCisKKyAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfQkxPQ0tfVEFHUyA9IFsn
bm9zY3JpcHQnXQorCisgICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxkVGFnTWFwKFtdLCBCZWF1dGlm
dWxTb3VwLk5FU1RBQkxFX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElf
Q0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfSU5MSU5FX1RB
R1MpCisKK2NsYXNzIE1pbmltYWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorICAgICIiIlRoZSBNaW5p
bWFsU291cCBjbGFzcyBpcyBmb3IgcGFyc2luZyBIVE1MIHRoYXQgY29udGFpbnMKKyAgICBwYXRo
b2xvZ2ljYWxseSBiYWQgbWFya3VwLiBJdCBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0YWcK
KyAgICBuZXN0aW5nLCBidXQgaXQgZG9lcyBrbm93IHdoaWNoIHRhZ3MgYXJlIHNlbGYtY2xvc2lu
ZywgdGhhdAorICAgIDxzY3JpcHQ+IHRhZ3MgY29udGFpbiBKYXZhc2NyaXB0IGFuZCBzaG91bGQg
bm90IGJlIHBhcnNlZCwgdGhhdAorICAgIE1FVEEgdGFncyBtYXkgY29udGFpbiBlbmNvZGluZyBp
bmZvcm1hdGlvbiwgYW5kIHNvIG9uLgorCisgICAgVGhpcyBhbHNvIG1ha2VzIGl0IGJldHRlciBm
b3Igc3ViY2xhc3NpbmcgdGhhbiBCZWF1dGlmdWxTdG9uZVNvdXAKKyAgICBvciBCZWF1dGlmdWxT
b3VwLiIiIgorCisgICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAoJ25vc2NyaXB0
JykKKyAgICBORVNUQUJMRV9UQUdTID0ge30KKworY2xhc3MgQmVhdXRpZnVsU09BUChCZWF1dGlm
dWxTdG9uZVNvdXApOgorICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBwdXNoIGEgdGFnIHdpdGggb25s
eSBhIHNpbmdsZSBzdHJpbmcgY2hpbGQgaW50bworICAgIHRoZSB0YWcncyBwYXJlbnQgYXMgYW4g
YXR0cmlidXRlLiBUaGUgYXR0cmlidXRlJ3MgbmFtZSBpcyB0aGUgdGFnCisgICAgbmFtZSwgYW5k
IHRoZSB2YWx1ZSBpcyB0aGUgc3RyaW5nIGNoaWxkLiBBbiBleGFtcGxlIHNob3VsZCBnaXZlCisg
ICAgdGhlIGZsYXZvciBvZiB0aGUgY2hhbmdlOgorCisgICAgPGZvbz48YmFyPmJhejwvYmFyPjwv
Zm9vPgorICAgICA9PgorICAgIDxmb28gYmFyPSJiYXoiPjxiYXI+YmF6PC9iYXI+PC9mb28+CisK
KyAgICBZb3UgY2FuIHRoZW4gYWNjZXNzIGZvb1RhZ1snYmFyJ10gaW5zdGVhZCBvZiBmb29UYWcu
YmFyVGFnLnN0cmluZy4KKworICAgIFRoaXMgaXMsIG9mIGNvdXJzZSwgdXNlZnVsIGZvciBzY3Jh
cGluZyBzdHJ1Y3R1cmVzIHRoYXQgdGVuZCB0bworICAgIHVzZSBzdWJlbGVtZW50cyBpbnN0ZWFk
IG9mIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgU09BUCBtZXNzYWdlcy4gTm90ZQorICAgIHRoYXQgaXQg
bW9kaWZpZXMgaXRzIGlucHV0LCBzbyBkb24ndCBwcmludCB0aGUgbW9kaWZpZWQgdmVyc2lvbgor
ICAgIG91dC4KKworICAgIEknbSBub3Qgc3VyZSBob3cgbWFueSBwZW9wbGUgcmVhbGx5IHdhbnQg
dG8gdXNlIHRoaXMgY2xhc3M7IGxldCBtZQorICAgIGtub3cgaWYgeW91IGRvLiBNYWlubHkgSSBs
aWtlIHRoZSBuYW1lLiIiIgorCisgICAgZGVmIHBvcFRhZyhzZWxmKToKKyAgICAgICAgaWYgbGVu
KHNlbGYudGFnU3RhY2spID4gMToKKyAgICAgICAgICAgIHRhZyA9IHNlbGYudGFnU3RhY2tbLTFd
CisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhZ1N0YWNrWy0yXQorICAgICAgICAgICAgcGFy
ZW50Ll9nZXRBdHRyTWFwKCkKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHRhZywgVGFnKSBh
bmQgbGVuKHRhZy5jb250ZW50cykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNl
KHRhZy5jb250ZW50c1swXSwgTmF2aWdhYmxlU3RyaW5nKSBhbmQKKyAgICAgICAgICAgICAgICBu
b3QgcGFyZW50LmF0dHJNYXAuaGFzX2tleSh0YWcubmFtZSkpOgorICAgICAgICAgICAgICAgIHBh
cmVudFt0YWcubmFtZV0gPSB0YWcuY29udGVudHNbMF0KKyAgICAgICAgQmVhdXRpZnVsU3RvbmVT
b3VwLnBvcFRhZyhzZWxmKQorCisjRW50ZXJwcmlzZSBjbGFzcyBuYW1lcyEgSXQgaGFzIGNvbWUg
dG8gb3VyIGF0dGVudGlvbiB0aGF0IHNvbWUgcGVvcGxlCisjdGhpbmsgdGhlIG5hbWVzIG9mIHRo
ZSBCZWF1dGlmdWwgU291cCBwYXJzZXIgY2xhc3NlcyBhcmUgdG9vIHNpbGx5CisjYW5kICJ1bnBy
b2Zlc3Npb25hbCIgZm9yIHVzZSBpbiBlbnRlcnByaXNlIHNjcmVlbi1zY3JhcGluZy4gV2UgZmVl
bAorI3lvdXIgcGFpbiEgRm9yIHN1Y2gtbWluZGVkIGZvbGssIHRoZSBCZWF1dGlmdWwgU291cCBD
b25zb3J0aXVtIEFuZAorI0FsbC1OaWdodCBLb3NoZXIgQmFrZXJ5IHJlY29tbWVuZHMgcmVuYW1p
bmcgdGhpcyBmaWxlIHRvCisjIlJvYnVzdFBhcnNlci5weSIgKG9yLCBpbiBjYXNlcyBvZiBleHRy
ZW1lIGVudGVycHJpc2luZXNzLAorIyJSb2J1c3RQYXJzZXJCZWFuSW50ZXJmYWNlLmNsYXNzIikg
YW5kIHVzaW5nIHRoZSBmb2xsb3dpbmcKKyNlbnRlcnByaXNlLWZyaWVuZGx5IGNsYXNzIGFsaWFz
ZXM6CitjbGFzcyBSb2J1c3RYTUxQYXJzZXIoQmVhdXRpZnVsU3RvbmVTb3VwKToKKyAgICBwYXNz
CitjbGFzcyBSb2J1c3RIVE1MUGFyc2VyKEJlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNz
IFJvYnVzdFdhY2tBc3NIVE1MUGFyc2VyKElDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXApOgor
ICAgIHBhc3MKK2NsYXNzIFJvYnVzdEluc2FuZWx5V2Fja0Fzc0hUTUxQYXJzZXIoTWluaW1hbFNv
dXApOgorICAgIHBhc3MKK2NsYXNzIFNpbXBsaWZ5aW5nU09BUFBhcnNlcihCZWF1dGlmdWxTT0FQ
KToKKyAgICBwYXNzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIworIyBCb251cyBsaWJyYXJ5OiBVbmljb2RlLCBEYW1taXQKKyMKKyMg
VGhpcyBjbGFzcyBmb3JjZXMgWE1MIGRhdGEgaW50byBhIHN0YW5kYXJkIGZvcm1hdCAodXN1YWxs
eSB0byBVVEYtOAorIyBvciBVbmljb2RlKS4gIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBm
cm9tIE1hcmsgUGlsZ3JpbSdzCisjIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4gSXQgZG9lcyBub3Qg
cmV3cml0ZSB0aGUgWE1MIG9yIEhUTUwgdG8KKyMgcmVmbGVjdCBhIG5ldyBlbmNvZGluZzogdGhh
dCBoYXBwZW5zIGluIEJlYXV0aWZ1bFN0b25lU291cC5oYW5kbGVfcGkKKyMgKFhNTCkgYW5kIEJl
YXV0aWZ1bFNvdXAuc3RhcnRfbWV0YSAoSFRNTCkuCisKKyMgQXV0b2RldGVjdHMgY2hhcmFjdGVy
IGVuY29kaW5ncy4KKyMgRG93bmxvYWQgZnJvbSBodHRwOi8vY2hhcmRldC5mZWVkcGFyc2VyLm9y
Zy8KK3RyeToKKyAgICBpbXBvcnQgY2hhcmRldAorIyAgICBpbXBvcnQgY2hhcmRldC5jb25zdGFu
dHMKKyMgICAgY2hhcmRldC5jb25zdGFudHMuX2RlYnVnID0gMQorZXhjZXB0IEltcG9ydEVycm9y
OgorICAgIGNoYXJkZXQgPSBOb25lCisKKyMgY2prY29kZWNzIGFuZCBpY29udl9jb2RlYyBtYWtl
IFB5dGhvbiBrbm93IGFib3V0IG1vcmUgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMgQm90aCBhcmUg
YXZhaWxhYmxlIGZyb20gaHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8KKyMgVGhleSdyZSBidWls
dCBpbiBpZiB5b3UgdXNlIFB5dGhvbiAyLjQuCit0cnk6CisgICAgaW1wb3J0IGNqa2NvZGVjcy5h
bGlhc2VzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwordHJ5OgorICAgIGltcG9ydCBp
Y29udl9jb2RlYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworY2xhc3MgVW5pY29k
ZURhbW1pdDoKKyAgICAiIiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEg
Kk1MIGRvY3VtZW50IGFuZAorICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4g
SWYgdGhlIHNvdXJjZSBlbmNvZGluZyBpcworICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2Ug
TVMgc21hcnQgcXVvdGVzIHdpdGggdGhlaXIgSFRNTCBvciBYTUwKKyAgICBlcXVpdmFsZW50cy4i
IiIKKworICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9y
ICJjaGFyc2V0IiBpbiBIVE1MCisgICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcg
UHl0aG9uIGNvZGVjIG5hbWVzLiBJdCBvbmx5IGNvdmVycworICAgICMgdmFsdWVzIHRoYXQgYXJl
bid0IGluIFB5dGhvbidzIGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKKyAgICAjIGJ5
IHRoZSBoZXVyaXN0aWNzIGluIGZpbmRfY29kZWMuCisgICAgQ0hBUlNFVF9BTElBU0VTID0geyAi
bWFjaW50b3NoIiA6ICJtYWMtcm9tYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIngtc2pp
cyIgOiAic2hpZnQtamlzIiB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVy
cmlkZUVuY29kaW5ncz1bXSwKKyAgICAgICAgICAgICAgICAgc21hcnRRdW90ZXNUbz0neG1sJywg
aXNIVE1MPUZhbHNlKToKKyAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IE5vbmUK
KyAgICAgICAgc2VsZi5tYXJrdXAsIGRvY3VtZW50RW5jb2RpbmcsIHNuaWZmZWRFbmNvZGluZyA9
IFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RldGVjdEVuY29kaW5nKG1hcmt1cCwgaXNI
VE1MKQorICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rlc1RvCisgICAgICAg
IHNlbGYudHJpZWRFbmNvZGluZ3MgPSBbXQorICAgICAgICBpZiBtYXJrdXAgPT0gJycgb3IgaXNp
bnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29k
aW5nID0gTm9uZQorICAgICAgICAgICAgc2VsZi51bmljb2RlID0gdW5pY29kZShtYXJrdXApCisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICB1ID0gTm9uZQorICAgICAgICBmb3IgcHJvcG9z
ZWRFbmNvZGluZyBpbiBvdmVycmlkZUVuY29kaW5nczoKKyAgICAgICAgICAgIHUgPSBzZWxmLl9j
b252ZXJ0RnJvbShwcm9wb3NlZEVuY29kaW5nKQorICAgICAgICAgICAgaWYgdTogYnJlYWsKKyAg
ICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiAoZG9j
dW1lbnRFbmNvZGluZywgc25pZmZlZEVuY29kaW5nKToKKyAgICAgICAgICAgICAgICB1ID0gc2Vs
Zi5fY29udmVydEZyb20ocHJvcG9zZWRFbmNvZGluZykKKyAgICAgICAgICAgICAgICBpZiB1OiBi
cmVhaworCisgICAgICAgICMgSWYgbm8gbHVjayBhbmQgd2UgaGF2ZSBhdXRvLWRldGVjdGlvbiBs
aWJyYXJ5LCB0cnkgdGhhdDoKKyAgICAgICAgaWYgbm90IHUgYW5kIGNoYXJkZXQgYW5kIG5vdCBp
c2luc3RhbmNlKHNlbGYubWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIHUgPSBzZWxmLl9j
b252ZXJ0RnJvbShjaGFyZGV0LmRldGVjdChzZWxmLm1hcmt1cClbJ2VuY29kaW5nJ10pCisKKyAg
ICAgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1MjoKKyAg
ICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRfZW5jb2RpbmcgaW4gKCJ1
dGYtOCIsICJ3aW5kb3dzLTEyNTIiKToKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVy
dEZyb20ocHJvcG9zZWRfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgaWYgdTogYnJlYWsKKwor
ICAgICAgICBzZWxmLnVuaWNvZGUgPSB1CisgICAgICAgIGlmIG5vdCB1OiBzZWxmLm9yaWdpbmFs
RW5jb2RpbmcgPSBOb25lCisKKyAgICBkZWYgX3N1Yk1TQ2hhcihzZWxmLCBtYXRjaCk6CisgICAg
ICAgICIiIkNoYW5nZXMgYSBNUyBzbWFydCBxdW90ZSBjaGFyYWN0ZXIgdG8gYW4gWE1MIG9yIEhU
TUwKKyAgICAgICAgZW50aXR5LiIiIgorICAgICAgICBvcmlnID0gbWF0Y2guZ3JvdXAoMSkKKyAg
ICAgICAgc3ViID0gc2VsZi5NU19DSEFSUy5nZXQob3JpZykKKyAgICAgICAgaWYgdHlwZShzdWIp
ID09IHR5cGVzLlR1cGxlVHlwZToKKyAgICAgICAgICAgIGlmIHNlbGYuc21hcnRRdW90ZXNUbyA9
PSAneG1sJzoKKyAgICAgICAgICAgICAgICBzdWIgPSAnJiN4Jy5lbmNvZGUoKSArIHN1YlsxXS5l
bmNvZGUoKSArICc7Jy5lbmNvZGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBzdWIgPSAnJicuZW5jb2RlKCkgKyBzdWJbMF0uZW5jb2RlKCkgKyAnOycuZW5jb2RlKCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1YiA9IHN1Yi5lbmNvZGUoKQorICAgICAgICByZXR1
cm4gc3ViCisKKyAgICBkZWYgX2NvbnZlcnRGcm9tKHNlbGYsIHByb3Bvc2VkKToKKyAgICAgICAg
cHJvcG9zZWQgPSBzZWxmLmZpbmRfY29kZWMocHJvcG9zZWQpCisgICAgICAgIGlmIG5vdCBwcm9w
b3NlZCBvciBwcm9wb3NlZCBpbiBzZWxmLnRyaWVkRW5jb2RpbmdzOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgc2VsZi50cmllZEVuY29kaW5ncy5hcHBlbmQocHJvcG9zZWQpCisg
ICAgICAgIG1hcmt1cCA9IHNlbGYubWFya3VwCisKKyAgICAgICAgIyBDb252ZXJ0IHNtYXJ0IHF1
b3RlcyB0byBIVE1MIGlmIGNvbWluZyBmcm9tIGFuIGVuY29kaW5nCisgICAgICAgICMgdGhhdCBt
aWdodCBoYXZlIHRoZW0uCisgICAgICAgIGlmIHNlbGYuc21hcnRRdW90ZXNUbyBhbmQgcHJvcG9z
ZWQubG93ZXIoKSBpbigid2luZG93cy0xMjUyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc28tODg1OS0xIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc28tODg1OS0yIik6Cisg
ICAgICAgICAgICBzbWFydF9xdW90ZXNfcmUgPSAiKFtceDgwLVx4OWZdKSIKKyAgICAgICAgICAg
IHNtYXJ0X3F1b3Rlc19jb21waWxlZCA9IHJlLmNvbXBpbGUoc21hcnRfcXVvdGVzX3JlKQorICAg
ICAgICAgICAgbWFya3VwID0gc21hcnRfcXVvdGVzX2NvbXBpbGVkLnN1YihzZWxmLl9zdWJNU0No
YXIsIG1hcmt1cCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHByaW50ICJUcnlpbmcg
dG8gY29udmVydCBkb2N1bWVudCB0byAlcyIgJSBwcm9wb3NlZAorICAgICAgICAgICAgdSA9IHNl
bGYuX3RvVW5pY29kZShtYXJrdXAsIHByb3Bvc2VkKQorICAgICAgICAgICAgc2VsZi5tYXJrdXAg
PSB1CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBwcm9wb3NlZAorICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBwcmludCAiVGhhdCBkaWRuJ3Qg
d29yayEiCisgICAgICAgICAgICAjIHByaW50IGUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgICNwcmludCAiQ29ycmVjdCBlbmNvZGluZzogJXMiICUgcHJvcG9zZWQKKyAgICAgICAg
cmV0dXJuIHNlbGYubWFya3VwCisKKyAgICBkZWYgX3RvVW5pY29kZShzZWxmLCBkYXRhLCBlbmNv
ZGluZyk6CisgICAgICAgICcnJ0dpdmVuIGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29k
ZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNvZGUuCisgICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmlu
ZyByZWNvZ25pemVkIGJ5IGVuY29kaW5ncy5hbGlhc2VzJycnCisKKyAgICAgICAgIyBzdHJpcCBC
eXRlIE9yZGVyIE1hcmsgKGlmIHByZXNlbnQpCisgICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkg
YW5kIChkYXRhWzoyXSA9PSAnXHhmZVx4ZmYnKSBcCisgICAgICAgICAgICAgICBhbmQgKGRhdGFb
Mjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJwor
ICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0
KSBhbmQgKGRhdGFbOjJdID09ICdceGZmXHhmZScpIFwKKyAgICAgICAgICAgICAgICAgYW5kIChk
YXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZs
ZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQorICAgICAgICBlbGlmIGRhdGFbOjNdID09
ICdceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTgnCisgICAgICAg
ICAgICBkYXRhID0gZGF0YVszOl0KKyAgICAgICAgZWxpZiBkYXRhWzo0XSA9PSAnXHgwMFx4MDBc
eGZlXHhmZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJiZScKKyAgICAgICAgICAg
IGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09ICdceGZmXHhmZVx4MDBc
eDAwJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgZGF0
YSA9IGRhdGFbNDpdCisgICAgICAgIG5ld2RhdGEgPSB1bmljb2RlKGRhdGEsIGVuY29kaW5nKQor
ICAgICAgICByZXR1cm4gbmV3ZGF0YQorCisgICAgZGVmIF9kZXRlY3RFbmNvZGluZyhzZWxmLCB4
bWxfZGF0YSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJp
ZXMgdG8gZGV0ZWN0IGl0cyBYTUwgZW5jb2RpbmcuIiIiCisgICAgICAgIHhtbF9lbmNvZGluZyA9
IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBp
ZiB4bWxfZGF0YVs6NF0gPT0gJ1x4NGNceDZmXHhhN1x4OTQnOgorICAgICAgICAgICAgICAgICMg
RUJDRElDCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSBzZWxmLl9lYmNkaWNfdG9fYXNjaWko
eG1sX2RhdGEpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4M2NceDAw
XHgzZic6CisgICAgICAgICAgICAgICAgIyBVVEYtMTZCRQorICAgICAgICAgICAgICAgIHNuaWZm
ZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0g
dW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAg
ICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZlXHhm
ZicpIFwKKyAgICAgICAgICAgICAgICAgICAgIGFuZCAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4
MDAnKToKKyAgICAgICAgICAgICAgICAjIFVURi0xNkJFIHdpdGggQk9NCisgICAgICAgICAgICAg
ICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2YmUnCisgICAgICAgICAgICAgICAgeG1s
X2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcp
CisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgzY1x4MDBceDNmXHgwMCc6Cisg
ICAgICAgICAgICAgICAgIyBVVEYtMTZMRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2Vu
Y29kaW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4
bWxfZGF0YSwgJ3V0Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIChs
ZW4oeG1sX2RhdGEpID49IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZmXHhmZScpIGFuZCBc
CisgICAgICAgICAgICAgICAgICAgICAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAg
ICAgICAgICAgICAgICAjIFVURi0xNkxFIHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZl
ZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1
bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAg
ICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceDAwXHgzYyc6CisgICAgICAgICAg
ICAgICAgIyBVVEYtMzJCRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
J3V0Zi0zMmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwg
J3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0
XSA9PSAnXHgzY1x4MDBceDAwXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJMRQorICAg
ICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAg
ICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0zMmxlJykuZW5jb2RlKCd1
dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhm
Zic6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJCRSB3aXRoIEJPTQorICAgICAgICAgICAgICAg
IHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAgICAgIHhtbF9k
YXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0sICd1dGYtMzJiZScpLmVuY29kZSgndXRmLTgnKQor
ICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAg
ICAgICAgICAgICAgICMgVVRGLTMyTEUgd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVk
X3htbF9lbmNvZGluZyA9ICd1dGYtMzJsZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVu
aWNvZGUoeG1sX2RhdGFbNDpdLCAndXRmLTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAg
ICAgIGVsaWYgeG1sX2RhdGFbOjNdID09ICdceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgICAg
ICMgVVRGLTggd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9
ICd1dGYtOCcKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMzpd
LCAndXRmLTgnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAnYXNjaWknCisgICAgICAgICAgICAgICAgcGFz
cworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB4bWxfZW5jb2RpbmdfbWF0Y2ggPSBOb25l
CisgICAgICAgIHhtbF9lbmNvZGluZ19yZSA9ICdePFw/LiplbmNvZGluZz1bXCciXSguKj8pW1wn
Il0uKlw/PicuZW5jb2RlKCkKKyAgICAgICAgeG1sX2VuY29kaW5nX21hdGNoID0gcmUuY29tcGls
ZSh4bWxfZW5jb2RpbmdfcmUpLm1hdGNoKHhtbF9kYXRhKQorICAgICAgICBpZiBub3QgeG1sX2Vu
Y29kaW5nX21hdGNoIGFuZCBpc0hUTUw6CisgICAgICAgICAgICBtZXRhX3JlID0gJzxccyptZXRh
W14+XStjaGFyc2V0PShbXj5dKj8pWztcJyI+XScuZW5jb2RlKCkKKyAgICAgICAgICAgIHJlZ2V4
cCA9IHJlLmNvbXBpbGUobWV0YV9yZSwgcmUuSSkKKyAgICAgICAgICAgIHhtbF9lbmNvZGluZ19t
YXRjaCA9IHJlZ2V4cC5zZWFyY2goeG1sX2RhdGEpCisgICAgICAgIGlmIHhtbF9lbmNvZGluZ19t
YXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHhtbF9lbmNvZGluZyA9IHhtbF9lbmNvZGlu
Z19tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoCisgICAgICAgICAgICAgICAgJ2FzY2lpJykubG93
ZXIoKQorICAgICAgICAgICAgaWYgaXNIVE1MOgorICAgICAgICAgICAgICAgIHNlbGYuZGVjbGFy
ZWRIVE1MRW5jb2RpbmcgPSB4bWxfZW5jb2RpbmcKKyAgICAgICAgICAgIGlmIHNuaWZmZWRfeG1s
X2VuY29kaW5nIGFuZCBcCisgICAgICAgICAgICAgICAoeG1sX2VuY29kaW5nIGluICgnaXNvLTEw
NjQ2LXVjcy0yJywgJ3Vjcy0yJywgJ2NzdW5pY29kZScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaXNvLTEwNjQ2LXVjcy00JywgJ3Vjcy00JywgJ2NzdWNzNCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmLTE2JywgJ3V0Zi0zMicsICd1dGZfMTYnLCAn
dXRmXzMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGYxNicsICd1MTYn
KSk6CisgICAgICAgICAgICAgICAgeG1sX2VuY29kaW5nID0gc25pZmZlZF94bWxfZW5jb2RpbmcK
KyAgICAgICAgcmV0dXJuIHhtbF9kYXRhLCB4bWxfZW5jb2RpbmcsIHNuaWZmZWRfeG1sX2VuY29k
aW5nCisKKworICAgIGRlZiBmaW5kX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgorICAgICAgICByZXR1
cm4gc2VsZi5fY29kZWMoc2VsZi5DSEFSU0VUX0FMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQp
KSBcCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5y
ZXBsYWNlKCItIiwgIiIpKSkgXAorICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYu
X2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICJfIikpKSBcCisgICAgICAgICAgICAgICBvciBj
aGFyc2V0CisKKyAgICBkZWYgX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgorICAgICAgICBpZiBub3Qg
Y2hhcnNldDogcmV0dXJuIGNoYXJzZXQKKyAgICAgICAgY29kZWMgPSBOb25lCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoY2hhcnNldCkKKyAgICAgICAgICAgIGNvZGVj
ID0gY2hhcnNldAorICAgICAgICBleGNlcHQgKExvb2t1cEVycm9yLCBWYWx1ZUVycm9yKToKKyAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGNvZGVjCisKKyAgICBFQkNESUNfVE9fQVND
SUlfTUFQID0gTm9uZQorICAgIGRlZiBfZWJjZGljX3RvX2FzY2lpKHNlbGYsIHMpOgorICAgICAg
ICBjID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgaWYgbm90IGMuRUJDRElDX1RPX0FTQ0lJX01B
UDoKKyAgICAgICAgICAgIGVtYXAgPSAoMCwxLDIsMywxNTYsOSwxMzQsMTI3LDE1MSwxNDEsMTQy
LDExLDEyLDEzLDE0LDE1LAorICAgICAgICAgICAgICAgICAgICAxNiwxNywxOCwxOSwxNTcsMTMz
LDgsMTM1LDI0LDI1LDE0NiwxNDMsMjgsMjksMzAsMzEsCisgICAgICAgICAgICAgICAgICAgIDEy
OCwxMjksMTMwLDEzMSwxMzIsMTAsMjMsMjcsMTM2LDEzNywxMzgsMTM5LDE0MCw1LDYsNywKKyAg
ICAgICAgICAgICAgICAgICAgMTQ0LDE0NSwyMiwxNDcsMTQ4LDE0OSwxNTAsNCwxNTIsMTUzLDE1
NCwxNTUsMjAsMjEsMTU4LDI2LAorICAgICAgICAgICAgICAgICAgICAzMiwxNjAsMTYxLDE2Miwx
NjMsMTY0LDE2NSwxNjYsMTY3LDE2OCw5MSw0Niw2MCw0MCw0MywzMywKKyAgICAgICAgICAgICAg
ICAgICAgMzgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsOTMsMzYsNDIsNDEs
NTksOTQsCisgICAgICAgICAgICAgICAgICAgIDQ1LDQ3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgz
LDE4NCwxODUsMTI0LDQ0LDM3LDk1LDYyLDYzLAorICAgICAgICAgICAgICAgICAgICAxODYsMTg3
LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCw5Niw1OCwzNSw2NCwzOSw2MSwzNCwKKyAgICAg
ICAgICAgICAgICAgICAgMTk1LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDE5Niwx
OTcsMTk4LDE5OSwyMDAsCisgICAgICAgICAgICAgICAgICAgIDIwMSwyMDIsMTA2LDEwNywxMDgs
MTA5LDExMCwxMTEsMTEyLDExMywxMTQsMjAzLDIwNCwyMDUsCisgICAgICAgICAgICAgICAgICAg
IDIwNiwyMDcsMjA4LDIwOSwxMjYsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwyMTAs
CisgICAgICAgICAgICAgICAgICAgIDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5
LDIyMCwyMjEsMjIyLDIyMywyMjQsCisgICAgICAgICAgICAgICAgICAgIDIyNSwyMjYsMjI3LDIy
OCwyMjksMjMwLDIzMSwxMjMsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsCisgICAgICAgICAgICAg
ICAgICAgIDczLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDEyNSw3NCw3NSw3Niw3Nyw3OCw3OSw4
MCw4MSwKKyAgICAgICAgICAgICAgICAgICAgODIsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsOTIs
MTU5LDgzLDg0LDg1LDg2LDg3LDg4LDg5LAorICAgICAgICAgICAgICAgICAgICA5MCwyNDQsMjQ1
LDI0NiwyNDcsMjQ4LDI0OSw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1NywKKyAgICAgICAg
ICAgICAgICAgICAgMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUpCisgICAgICAgICAgICBpbXBvcnQg
c3RyaW5nCisgICAgICAgICAgICBjLkVCQ0RJQ19UT19BU0NJSV9NQVAgPSBzdHJpbmcubWFrZXRy
YW5zKCBcCisgICAgICAgICAgICAnJy5qb2luKG1hcChjaHIsIHJhbmdlKDI1NikpKSwgJycuam9p
bihtYXAoY2hyLCBlbWFwKSkpCisgICAgICAgIHJldHVybiBzLnRyYW5zbGF0ZShjLkVCQ0RJQ19U
T19BU0NJSV9NQVApCisKKyAgICBNU19DSEFSUyA9IHsgJ1x4ODAnIDogKCdldXJvJywgJzIwQUMn
KSwKKyAgICAgICAgICAgICAgICAgJ1x4ODEnIDogJyAnLAorICAgICAgICAgICAgICAgICAnXHg4
MicgOiAoJ3NicXVvJywgJzIwMUEnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODMnIDogKCdmbm9m
JywgJzE5MicpLAorICAgICAgICAgICAgICAgICAnXHg4NCcgOiAoJ2JkcXVvJywgJzIwMUUnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4ODUnIDogKCdoZWxsaXAnLCAnMjAyNicpLAorICAgICAgICAg
ICAgICAgICAnXHg4NicgOiAoJ2RhZ2dlcicsICcyMDIwJyksCisgICAgICAgICAgICAgICAgICdc
eDg3JyA6ICgnRGFnZ2VyJywgJzIwMjEnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODgnIDogKCdj
aXJjJywgJzJDNicpLAorICAgICAgICAgICAgICAgICAnXHg4OScgOiAoJ3Blcm1pbCcsICcyMDMw
JyksCisgICAgICAgICAgICAgICAgICdceDhBJyA6ICgnU2Nhcm9uJywgJzE2MCcpLAorICAgICAg
ICAgICAgICAgICAnXHg4QicgOiAoJ2xzYXF1bycsICcyMDM5JyksCisgICAgICAgICAgICAgICAg
ICdceDhDJyA6ICgnT0VsaWcnLCAnMTUyJyksCisgICAgICAgICAgICAgICAgICdceDhEJyA6ICc/
JywKKyAgICAgICAgICAgICAgICAgJ1x4OEUnIDogKCcjeDE3RCcsICcxN0QnKSwKKyAgICAgICAg
ICAgICAgICAgJ1x4OEYnIDogJz8nLAorICAgICAgICAgICAgICAgICAnXHg5MCcgOiAnPycsCisg
ICAgICAgICAgICAgICAgICdceDkxJyA6ICgnbHNxdW8nLCAnMjAxOCcpLAorICAgICAgICAgICAg
ICAgICAnXHg5MicgOiAoJ3JzcXVvJywgJzIwMTknKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTMn
IDogKCdsZHF1bycsICcyMDFDJyksCisgICAgICAgICAgICAgICAgICdceDk0JyA6ICgncmRxdW8n
LCAnMjAxRCcpLAorICAgICAgICAgICAgICAgICAnXHg5NScgOiAoJ2J1bGwnLCAnMjAyMicpLAor
ICAgICAgICAgICAgICAgICAnXHg5NicgOiAoJ25kYXNoJywgJzIwMTMnKSwKKyAgICAgICAgICAg
ICAgICAgJ1x4OTcnIDogKCdtZGFzaCcsICcyMDE0JyksCisgICAgICAgICAgICAgICAgICdceDk4
JyA6ICgndGlsZGUnLCAnMkRDJyksCisgICAgICAgICAgICAgICAgICdceDk5JyA6ICgndHJhZGUn
LCAnMjEyMicpLAorICAgICAgICAgICAgICAgICAnXHg5YScgOiAoJ3NjYXJvbicsICcxNjEnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4OWInIDogKCdyc2FxdW8nLCAnMjAzQScpLAorICAgICAgICAg
ICAgICAgICAnXHg5YycgOiAoJ29lbGlnJywgJzE1MycpLAorICAgICAgICAgICAgICAgICAnXHg5
ZCcgOiAnPycsCisgICAgICAgICAgICAgICAgICdceDllJyA6ICgnI3gxN0UnLCAnMTdFJyksCisg
ICAgICAgICAgICAgICAgICdceDlmJyA6ICgnWXVtbCcsICcnKSx9CisKKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CisKKworI0J5IGRlZmF1bHQsIGFjdCBhcyBhbiBIVE1MIHByZXR0eS1wcmludGVyLgoraWYgX19u
YW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgc291cCA9IEJlYXV0aWZ1
bFNvdXAoc3lzLnN0ZGluKQorICAgIHByaW50IHNvdXAucHJldHRpZnkoKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2J1Z3ppbGxhLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2J1Z3ppbGxhLnB5CmluZGV4IDBlZWIwMWMuLjYyNWYwZDQgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9idWd6aWxsYS5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL21vZHVsZXMvYnVnemlsbGEucHkKQEAgLTMzLDE4ICszMywyMCBAQCBpbXBv
cnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHVybGxpYjIKIAorIyBXZWJLaXQgaW5j
bHVkZXMgYSBidWlsdCBjb3B5IG9mIEJlYXV0aWZ1bFNvdXAgaW4gU2NyaXB0cy9tb2R1bGVzCisj
IHNvIHRoaXMgaW1wb3J0IHNob3VsZCBhbHdheXMgc3VjY2VlZC4KK2Zyb20gLkJlYXV0aWZ1bFNv
dXAgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKwogdHJ5OgotICAgIGZyb20gQmVhdXRpZnVsU291cCBp
bXBvcnQgQmVhdXRpZnVsU291cAogICAgIGZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCiBl
eGNlcHQgSW1wb3J0RXJyb3IsIGU6CiAgICAgcHJpbnQgIiIiCi1CZWF1dGlmdWxTb3VwIGFuZCBt
ZWNoYW5pemUgYXJlIHJlcXVpcmVkLgorbWVjaGFuaXplIGlzIHJlcXVpcmVkLgogCiBUbyBpbnN0
YWxsOgotc3VkbyBlYXN5X2luc3RhbGwgQmVhdXRpZnVsU291cCBtZWNoYW5pemUKK3N1ZG8gZWFz
eV9pbnN0YWxsIG1lY2hhbml6ZQogCiBPciBmcm9tIHRoZSB3ZWI6Ci1odHRwOi8vd3d3LmNydW1t
eS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8KIGh0dHA6Ly93d3dzZWFyY2guc291cmNlZm9y
Z2UubmV0L21lY2hhbml6ZS8KICIiIgogICAgIGV4aXQoMSk=
</data>
<flag name="review"
          id="16569"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>