<?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>218827</bug_id>
          
          <creation_ts>2020-11-11 16:28:31 -0800</creation_ts>
          <short_desc>[webkitscmpy] Support remote Subversion repository</short_desc>
          <delta_ts>2020-12-02 07:52:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215862</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=218927</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=218935</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219172</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219263</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219409</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219432</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1706659</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-11 16:28:31 -0800</bug_when>
    <thetext>Results database already has something similar (although that system is unable to find identifiers), this is also needed to modify commit messages in post commit hooks, unless we want a checkout present when running post-commit hooks, which seems burdensome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706660</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-11 16:28:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/71304485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706666</commentid>
    <comment_count>2</comment_count>
      <attachid>413885</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-11 16:32:14 -0800</bug_when>
    <thetext>Created attachment 413885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708364</commentid>
    <comment_count>3</comment_count>
      <attachid>414378</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-17 13:22:18 -0800</bug_when>
    <thetext>Created attachment 414378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708368</commentid>
    <comment_count>4</comment_count>
      <attachid>414380</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-17 13:27:07 -0800</bug_when>
    <thetext>Created attachment 414380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708404</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-17 15:16:36 -0800</bug_when>
    <thetext>The motivation of this change is allowing us to map identifiers and revisions to one another given only the remote source of an SVN repository, and without using the SVN binary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708874</commentid>
    <comment_count>6</comment_count>
      <attachid>414380</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-18 16:33:53 -0800</bug_when>
    <thetext>Comment on attachment 414380
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709128</commentid>
    <comment_count>7</comment_count>
      <attachid>414588</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-19 08:50:56 -0800</bug_when>
    <thetext>Created attachment 414588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709170</commentid>
    <comment_count>8</comment_count>
      <attachid>414599</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-19 10:11:03 -0800</bug_when>
    <thetext>Created attachment 414599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709178</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-19 10:49:57 -0800</bug_when>
    <thetext>Committed r270038: &lt;https://trac.webkit.org/changeset/270038&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414599.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710613</commentid>
    <comment_count>10</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-30 08:02:49 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710614</commentid>
    <comment_count>11</comment_count>
      <attachid>415023</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-30 08:02:50 -0800</bug_when>
    <thetext>Created attachment 415023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710615</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-30 08:03:45 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #11)
&gt; Created attachment 415023 [details]
&gt; Patch

Accidentally committed time-zone dependent tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710619</commentid>
    <comment_count>13</comment_count>
      <attachid>415023</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-30 08:27:35 -0800</bug_when>
    <thetext>Comment on attachment 415023
Patch

Moving this patch to https://bugs.webkit.org/show_bug.cgi?id=219263</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413885</attachid>
            <date>2020-11-11 16:32:14 -0800</date>
            <delta_ts>2020-11-17 13:22:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201111163212.patch</filename>
            <type>text/plain</type>
            <size>78652</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTcwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk2IEBACisyMDIwLTExLTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4ODI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTMwNDQ4NT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBpbnRl
cmFjdCB3aXRoIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHN2biBjb21tYW5k
LiBUaGlzIGlzIHVzZWZ1bAorICAgICAgICBmb3Igc2VydmljZXMgaG9zdGVkIGluIGVudmlyb25t
ZW50cyB3aGVyZSBpbnN0YWxsaW5nIGJpbmFyaWVzIGlzIGJ1cmRlbnNvbWUsIG9yIGluIGNhc2Vz
IHdoZXJlCisgICAgICAgIHRvb2xzIGFyZSBydW5uaW5nIHdpdGhvdXQgYSBjaGVja291dC4KKwor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19p
bml0X18ucHk6IEJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHMucHk6
IE1vdmVkIHRvIHJlcXVlc3RzXy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL3JlcXVlc3RzXy5weTogQWRkZWQuCisgICAgICAgIChS
ZXNwb25zZSk6IE9iamVjdCBtaW1pY2tpbmcgdGhlIHN0cnVjdHVyZSBvZiBSZXF1ZXN0cydzIHJl
c3BvbnNlIG9iamVjdCwgdXNlZnVsIGZvciBtb2NraW5nLgorICAgICAgICAoUmVxdWVzdHMpOiBD
b250ZXh0IG1hbmFnZXIgd2hpY2ggd2lsbCBpbnRlcmNlcHQgaHR0cCBhbmQgaHR0cHMgcmVxdWVz
dHMgdG8gYSBzcGVjaWZpYyBob3N0LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24sIGF0IGZhc3RlbmVy
cywgbW9ub3RvbmljIGFuZCB4bWx0b2RpY3QuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5OgorICAgICAgICAoU2NtKToKKyAg
ICAgICAgKFNjbS5FeGNlcHRpb24pOiBNb3ZlZCB0byBTY21CYXNlLgorICAgICAgICAoU2NtLl9f
aW5pdF9fKTogTW92ZSBicmFuY2hlcyBsb2dpYyB0byBTY21CYXNlLgorICAgICAgICAoU2NtLmlz
X3N2bik6IE1vdmVkIHRvIFNjbUJhc2UuCisgICAgICAgIChTY20uaXNfZ2l0KTogRGl0dG8uCisg
ICAgICAgIChTY20uZGVmYXVsdF9icmFuY2gpOiBEaXR0by4KKyAgICAgICAgKFNjbS5icmFuY2hl
cyk6IERpdHRvLgorICAgICAgICAoU2NtLnRhZ3MpOiBEaXR0by4KKyAgICAgICAgKFNjbS5maW5k
KTogRGl0dG8uCisgICAgICAgIChTY20uY29tbWl0KTogRGl0dG8uCisgICAgICAgIChTY20ucHJp
b3JpdGl6ZV9icmFuY2hlcyk6IERpdHRvLgorICAgICAgICAoU2NtLmxvZyk6IERpdHRvLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2
bi5weToKKyAgICAgICAgKFN2bi5jb21taXQpOiBQYXNzIGJyYW5jaCB0byBzZWxmLmluZm8gaXMg
cmVkdW5kYW50LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L21vY2tzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5p
dF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvc3ZuLnB5OiBBZGRlZC4KKyAgICAgICAgKFN2bik6IE1v
Y2sgcmVxdWVzdHMgbmVlZGVkIHRvIGludGVyYWN0IHdpdGggYSByZW1vdGUgU3VidmVyc2lvbiBy
ZXBvc2l0b3J5LgorICAgICAgICAoU3ZuLmxhdGVzdCk6IFJldHVybiB0aGUgbW9zdCByZWNlbnQg
Y29tbWl0IG9uIGFueSBicmFuY2guCisgICAgICAgIChTdm4uYnJhbmNoZXMpOiBSZXR1cm4gYnJh
bmNoZXMgYXQgc29tZSByZXZpc2lvbi4KKyAgICAgICAgKFN2bi50YWdzKTogUmV0dXJuIHRhZ3Mg
YXQgc29tZSByZXZpc2lvbi4KKyAgICAgICAgKFN2bi5yYW5nZSk6IEdpdmUgYSBzdGFydCBhbmQg
ZW5kIHJldmlzaW9uLCBhbG9uZyB3aXRoIGEgdGFnIG9yIGJyYW5jaCwKKyAgICAgICAgcmV0dXJu
IGFsbCBjb21taXRzIGluIHRoYXQgcmFuZ2UuCisgICAgICAgIChTdm4ucmVxdWVzdCk6IEhhbmRs
ZSBhIHNtYWxsIHN1YnNldCBvZiByZXF1ZXN0cyB0byBhIFN1YnZlcnNpb24gc2VydmVyLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0u
cHk6CisgICAgICAgIChDb21tYW5kLnBhcnNlcik6IFJlbW92ZSB1bnVzZWQgcmVwb3NpdG9yeSBy
ZWZlcmVuY2UuCisgICAgICAgIChGaW5kLnBhcnNlcik6IERpdHRvLgorICAgICAgICAoQ2hlY2tv
dXQucGFyc2VyKTogRGl0dG8uCisgICAgICAgIChDaGVja291dC5tYWluKTogQ2hlY2tvdXQgaXMg
b25seSBhIG1lYW5pbmdmdWwgY29tbWFuZCBpZiB0aGUgcmVwb3NpdG9yeSBpcyBub3QgYSByZW1v
dGUuCisgICAgICAgIChtYWluKTogQWxsb3cgdGhlIHVzZXIgdG8gdGFyZ2V0IGEgcmVtb3RlIHJl
cG9zaXRvcnkuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcmVtb3RlOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHk6IEFk
ZGVkLgorICAgICAgICAoU2NtKToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEdpdmVuIGEgVVJM
LCBhdHRlbXB0IHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgcmVtb3RlIEFQSSBpcyBhdmFpbGFi
bGUuCisgICAgICAgIChTY20uX19pbml0X18pOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zdm4ucHk6IEFkZGVkLgorICAgICAgICAo
U3ZuKTogSW50ZXJhY3Qgd2l0aCBhIHJlbW90ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgd2l0aG91
dCB1c2luZyB0aGUgc3ZuIGNvbW1hbmQuCisgICAgICAgIChTdm4uaXNfd2Vic2VydmVyKTogQ2hl
Y2sgaWYgdGhlIHByb3ZpZGVkIHVybCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGZvciBhIFN1YnZlcnNp
b24gc2VydmVyLgorICAgICAgICAoU3ZuLl9faW5pdF9fKToKKyAgICAgICAgKFN2bi5pc19zdm4p
OgorICAgICAgICAoU3ZuLl9sYXRlc3QpOiBSZXR1cm4gdGhlIGxhdGVzdCByZXZpc2lvbi4KKyAg
ICAgICAgKFN2bi5pbmZvKTogUmV0dXJuIHRoZSBiaXRzIG9mIHRoZSBgc3ZuIGluZm9gIGNvbW1h
bmQgdGhhdCBhcmUgdXNlZCBpbiBjb2RlLgorICAgICAgICAoU3ZuLmRlZmF1bHRfYnJhbmNoKToK
KyAgICAgICAgKFN2bi5saXN0KToKKyAgICAgICAgKFN2bi5icmFuY2hlcyk6IExpc3QgYWxsIGJy
YW5jaGVzLgorICAgICAgICAoU3ZuLnRhZ3MpOiBMaXN0IGFsbCB0YWdzLgorICAgICAgICAoU3Zu
Ll9jYWNoZV9wYXRoKTogUmV0dXJuIHBhdGggdG8ganNvbiBjYWNoZS4KKyAgICAgICAgKFN2bi5f
Y2FjaGVfbG9jayk6IEZpbGVzeXN0ZW0gbG9jayB1c2VkIHRvIHByZXZlbnQgY29udGVudGlvbiBv
dmVyIHRoZSBqc29uIGNhY2hlLCB0aGlzCisgICAgICAgIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRh
bnQgZHVyaW5nIHRlc3RpbmcuCisgICAgICAgIChTdm4uX2NhY2hlX3JldmlzaW9ucyk6IENhY2hl
IHRoZSBpZGVudGlmaWVyL3JldmlzaW9uIG1hcHBpbmcuCisgICAgICAgIChTdm4uX2JyYW5jaF9m
b3IpOiBHaXZlbiBhIGNvbW1pdCwgZGV0ZXJtaW5lIHdoaWNoIGJyYW5jaCB0aGF0IGNvbW1pdCBp
cyBvbi4KKyAgICAgICAgKFN2bi5fY29tbWl0X2NvdW50KTogRGV0ZXJtaW5lIHRoZSBhbW91bnQg
b2YgY29tbWl0cyBvbiBhIGJyYW5jaCBzaW5jZSBicmFuY2hpbmcuCisgICAgICAgIChTdm4uY29t
bWl0KTogUmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlk
ZW50aWZpZXIgb3IgdGFnLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3NjbV9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKFNjbUJhc2UpOiBCYXNl
IGNsYXNzIGZvciBhbGwgbG9jYWwgYW5kIHJlbW90ZSBTY20gb2JqZWN0cy4KKyAgICAgICAgKFNj
bUJhc2UuRXhjZXB0aW9uKTogTW92ZWQgZnJvbSBsb2NhbC5TY20uCisgICAgICAgIChTY21CYXNl
Ll9faW5pdF9fKTogRGl0dG8uCisgICAgICAgIChTY21CYXNlLmlzX3N2bik6IERpdHRvLgorICAg
ICAgICAoU2NtQmFzZS5pc19naXQpOiBEaXR0by4KKyAgICAgICAgKFNjbUJhc2UuZGVmYXVsdF9i
cmFuY2gpOiBEaXR0by4KKyAgICAgICAgKFNjbUJhc2UuYnJhbmNoZXMpOiBEaXR0by4KKyAgICAg
ICAgKFNjbUJhc2UudGFncyk6IERpdHRvLgorICAgICAgICAoU2NtQmFzZS5jb21taXQpOiBEaXR0
by4KKyAgICAgICAgKFNjbUJhc2UucHJpb3JpdGl6ZV9icmFuY2hlcyk6IERpdHRvLgorICAgICAg
ICAoU2NtQmFzZS5maW5kKTogRGl0dG8uCisgICAgICAgIChTY21CYXNlLmxvZyk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
c3ZuX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGVzdExvY2FsU3ZuKTogTW92ZWQgZnJvbSBUZXN0
U3ZuLgorICAgICAgICAoVGVzdFJlbW90ZVN2bik6IEFkZGVkLgorICAgICAgICAoVGVzdFN2bik6
IE1vdmVkIHRvIFRlc3RMb2NhbFN2bi4KKwogMjAyMC0xMS0xMSAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0cHldIEJ1bXAgQ1VSUkVOVF9WRVJT
SU9OIHRvIDExLjAgZm9yIE1hYyBwb3J0CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI2OTQ5MSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRj
b3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFBy
b2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dl
ckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVy
c2lvbigwLCA0LCAyMCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQsIDIxKQogCiBmcm9tIHdlYmtp
dGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0b0luc3RhbGwKIGlmIHN5cy52
ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvX19p
bml0X18ucHkJKHJldmlzaW9uIDI2OTQ5MSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDQgKzI0LDQgQEAgZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MuY29udGV4dF9zdGFjayBp
bQogZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MudGltZV8gaW1wb3J0IFRpbWUKIGZyb20gd2Via2l0
Y29yZXB5Lm1vY2tzLnN1YnByb2Nlc3MgaW1wb3J0IFByb2Nlc3NDb21wbGV0aW9uLCBTdWJwcm9j
ZXNzCiAKLWZyb20gd2Via2l0Y29yZXB5Lm1vY2tzLnJlcXVlc3RzIGltcG9ydCBSZXNwb25zZQor
ZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MucmVxdWVzdHNfIGltcG9ydCBSZXNwb25zZSwgUmVxdWVz
dHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvbW9ja3MvcmVxdWVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0cy5weQkocmV2aXNpb24g
MjY5NDkxKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9tb2Nrcy9yZXF1ZXN0cy5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyICswLDAgQEAKLSMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotIyBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGpzb24KLQotCi1jbGFz
cyBSZXNwb25zZShvYmplY3QpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbVRleHQo
ZGF0YSwgdXJsPU5vbmUpOgotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBzdHIpCi0g
ICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWRhdGEsIHVybD11cmwpCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGZyb21Kc29uKGRhdGEsIHVybD1Ob25lKToKLSAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2UoZGF0YSwgbGlzdCkgb3IgaXNpbnN0YW5jZShkYXRhLCBkaWN0KQotICAgICAg
ICByZXR1cm4gUmVzcG9uc2UodGV4dD1qc29uLmR1bXBzKGRhdGEpLCB1cmw9dXJsKQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGU0MDQodXJsPU5vbmUpOgotICAgICAgICByZXR1
cm4gUmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0LCB1cmw9dXJsKQotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHN0YXR1c19jb2RlPU5vbmUsIHRleHQ9Tm9uZSwgdXJsPU5vbmUpOgotICAgICAgICBp
ZiBzdGF0dXNfY29kZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUg
PSBzdGF0dXNfY29kZQotICAgICAgICBlbGlmIHRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICBzZWxmLnN0YXR1c19jb2RlID0gMjAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxm
LnN0YXR1c19jb2RlID0gMjA0ICAjIE5vIGNvbnRlbnQKLSAgICAgICAgc2VsZi50ZXh0ID0gdGV4
dAotICAgICAgICBzZWxmLnVybCA9IHVybAotCi0gICAgZGVmIGpzb24oc2VsZik6Ci0gICAgICAg
IHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKLQotICAgIGRlZiBpdGVyX2NvbnRlbnQoc2Vs
ZiwgY2h1bmtfc2l6ZT00MDk2KToKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYu
dGV4dCksIGNodW5rX3NpemUpOgotICAgICAgICAgICAgeWllbGQgc2VsZi50ZXh0W2k6aSArIGNo
dW5rX3NpemVdCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
ZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHBh
c3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvbW9ja3MvcmVxdWVzdHNfLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHNfLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvbW9ja3MvcmVxdWVzdHNfLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBqc29uCisKK2Zyb20g
d2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0Y29yZXB5Lm1vY2tz
IGltcG9ydCBDb250ZXh0U3RhY2sKKworCitjbGFzcyBSZXNwb25zZShvYmplY3QpOgorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbVRleHQoZGF0YSwgdXJsPU5vbmUsIGhlYWRlcnM9Tm9u
ZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIHN0cikKKyAgICAgICAgcmV0dXJu
IFJlc3BvbnNlKHRleHQ9ZGF0YSwgdXJsPXVybCwgaGVhZGVycz1oZWFkZXJzKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBmcm9tSnNvbihkYXRhLCB1cmw9Tm9uZSwgaGVhZGVycz1Ob25l
KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgbGlzdCkgb3IgaXNpbnN0YW5jZShk
YXRhLCBkaWN0KQorCisgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzIG9yIHt9CisgICAgICAgIGlm
ICdDb250ZW50LVR5cGUnIG5vdCBpbiBoZWFkZXJzOgorICAgICAgICAgICAgaGVhZGVyc1snQ29u
dGVudC1UeXBlJ10gPSAndGV4dC9qc29uJworCisgICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0
PWpzb24uZHVtcHMoZGF0YSksIHVybD11cmwsIGhlYWRlcnM9aGVhZGVycykKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlNDA0KHVybD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAg
ICAgICByZXR1cm4gUmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0LCB1cmw9dXJsLCBoZWFkZXJzPWhl
YWRlcnMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9Tm9uZSwgdGV4dD1O
b25lLCB1cmw9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICAgICAgaWYgc3RhdHVzX2NvZGUgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gc3RhdHVzX2NvZGUKKyAg
ICAgICAgZWxpZiB0ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29k
ZSA9IDIwMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IDIw
NCAgIyBObyBjb250ZW50CisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKyAgICAgICAgc2VsZi51
cmwgPSB1cmwKKyAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycyBvciB7fQorCisgICAgICAg
IGlmICdDb250ZW50LVR5cGUnIG5vdCBpbiBzZWxmLmhlYWRlcnM6CisgICAgICAgICAgICBzZWxm
LmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQnCisgICAgICAgIGlmICdDb250ZW50LUxl
bmd0aCcgbm90IGluIHNlbGYuaGVhZGVyczoKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyc1snQ29u
dGVudC1MZW5ndGgnXSA9IGxlbihzZWxmLnRleHQpIGlmIHNlbGYudGV4dCBlbHNlIDAKKworICAg
IGRlZiBqc29uKHNlbGYpOgorICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisK
KyAgICBkZWYgaXRlcl9jb250ZW50KHNlbGYsIGNodW5rX3NpemU9NDA5Nik6CisgICAgICAgIGZv
ciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLnRleHQpLCBjaHVua19zaXplKToKKyAgICAgICAgICAg
IHlpZWxkIHNlbGYudGV4dFtpOmkgKyBjaHVua19zaXplXQorCisgICAgZGVmIGl0ZXJfbGluZXMo
c2VsZik6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYudGV4dC5zcGxpdGxpbmVzKCkgaWYgc2Vs
Zi50ZXh0IGVsc2UgW106CisgICAgICAgICAgICB5aWVsZCBzdHJpbmdfdXRpbHMuZW5jb2RlKGxp
bmUpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisg
ICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHBhc3MKKwor
CitjbGFzcyBSZXF1ZXN0cyhDb250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCAqaG9zdHMpOgorICAgICAgICBzdXBlcihSZXF1ZXN0cywgc2VsZiku
X19pbml0X18oY2xzPVJlcXVlc3RzKQorICAgICAgICBzZWxmLmhvc3RzID0gaG9zdHMKKyAgICAg
ICAgc2VsZi5fdGVtcF9wYXRjaGVzID0gTm9uZQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0
aG9kLCB1cmwsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmNyZWF0ZTQwNCh1
cmwpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAjIEFsbG93IHJlcXVlc3Rz
IGFuZCBtb2NrIHRvIGJlIG1hbmFnZWQgdmlhIGF1dG9pbnN0YWxsCisgICAgICAgIGltcG9ydCBy
ZXF1ZXN0cworICAgICAgICBmcm9tIG1vY2sgaW1wb3J0IHBhdGNoCisKKyAgICAgICAgdGhpcyA9
IHNlbGYKKworICAgICAgICBjbGFzcyBTZXNzaW9uKHJlcXVlc3RzLlNlc3Npb24pOgorICAgICAg
ICAgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsICoqa3dhcmdzKToKKyAgICAgICAg
ICAgICAgICBmb3IgaG9zdCBpbiB0aGlzLmhvc3RzOgorICAgICAgICAgICAgICAgICAgICBmb3Ig
Y2FuZGlkYXRlIGluIFsnaHR0cHM6Ly97fScuZm9ybWF0KGhvc3QpLCAnaHR0cDovL3t9Jy5mb3Jt
YXQoaG9zdCldOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdXJsID09IGNhbmRpZGF0ZToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwg
dXJsLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVybC5zdGFydHN3aXRo
KCd7fS8nLmZvcm1hdChjYW5kaWRhdGUpKSBvciB1cmwuc3RhcnRzd2l0aCgne30/Jy5mb3JtYXQo
Y2FuZGlkYXRlKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVx
dWVzdChtZXRob2QsIHVybCwgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVy
KFNlc3Npb24sIHNlbGYpLnJlcXVlc3QobWV0aG9kLCB1cmwsICoqa3dhcmdzKQorCisgICAgICAg
IHNlbGYuX3RlbXBfcGF0Y2hlcyA9IFsKKyAgICAgICAgICAgIHBhdGNoKCdyZXF1ZXN0cy5TZXNz
aW9uJywgbmV3PVNlc3Npb24pLAorICAgICAgICAgICAgcGF0Y2goJ3JlcXVlc3RzLnJlcXVlc3Qn
LCBuZXc9bGFtYmRhICphcmdzLCAqKmt3YXJnczogU2Vzc2lvbigpLnJlcXVlc3QoKmFyZ3MsICoq
a3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMuZ2V0JywgbmV3PWxhbWJkYSAq
YXJncywgKiprd2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdHRVQnLCAqYXJncywgKiprd2FyZ3Mp
KSwKKyAgICAgICAgICAgIHBhdGNoKCdyZXF1ZXN0cy5oZWFkJywgbmV3PWxhbWJkYSAqYXJncywg
Kiprd2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdIRUFEJywgKmFyZ3MsICoqa3dhcmdzKSksCisg
ICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgKmFyZ3MsICoqa3dh
cmdzOiBTZXNzaW9uKCkucmVxdWVzdCgnUE9TVCcsICphcmdzLCAqKmt3YXJncykpLAorICAgICAg
ICAgICAgcGF0Y2goJ3JlcXVlc3RzLnB1dCcsIG5ldz1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBT
ZXNzaW9uKCkucmVxdWVzdCgnUFVUJywgKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBw
YXRjaCgncmVxdWVzdHMucGF0Y2gnLCBuZXc9bGFtYmRhICphcmdzLCAqKmt3YXJnczogU2Vzc2lv
bigpLnJlcXVlc3QoJ1BBVENIJywgKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRj
aCgncmVxdWVzdHMuZGVsZXRlJywgbmV3PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNlc3Npb24o
KS5yZXF1ZXN0KCdERUxFVEUnLCAqYXJncywgKiprd2FyZ3MpKSwKKyAgICAgICAgXQorICAgICAg
ICBmb3IgcGF0Y2ggaW4gc2VsZi5fdGVtcF9wYXRjaGVzOgorICAgICAgICAgICAgcGF0Y2guX19l
bnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKFJlcXVlc3RzLCBzZWxmKS5fX2VudGVyX18o
KQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1
cGVyKFJlcXVlc3RzLCBzZWxmKS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGZv
ciBwYXRjaCBpbiByZXZlcnNlZChzZWxmLl90ZW1wX3BhdGNoZXMpOgorICAgICAgICAgICAgcGF0
Y2guX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl90ZW1wX3BhdGNoZXMg
PSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkocmV2aXNpb24gMjY5NDkxKQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNiBAQCBleGNlcHQgSW1wb3J0RXJyb3I6
CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwg
d2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAg
ICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgMywgMCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDUs
IDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2RhdGV1dGlsJywgVmVyc2lvbigy
LCA4LCAxKSwgcHlwaV9uYW1lPSdweXRob24tZGF0ZXV0aWwnKSkKK0F1dG9JbnN0YWxsLnJlZ2lz
dGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycsIFZlcnNpb24oMCwgMTUsIDApKSkKK0F1dG9JbnN0YWxs
LnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90b25pYycsIFZlcnNpb24oMSwgNSkpKQorQXV0b0luc3Rh
bGwucmVnaXN0ZXIoUGFja2FnZSgneG1sdG9kaWN0JywgVmVyc2lvbigwLCAxMiwgMCkpKQogCiBm
cm9tIHdlYmtpdHNjbXB5LmNvbnRyaWJ1dG9yIGltcG9ydCBDb250cmlidXRvcgogZnJvbSB3ZWJr
aXRzY21weS5jb21taXQgaW1wb3J0IENvbW1pdAorZnJvbSB3ZWJraXRzY21weS5zY21fYmFzZSBp
bXBvcnQgU2NtQmFzZQogCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAogZnJvbSB3ZWJr
aXRzY21weSBpbXBvcnQgbW9ja3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQkocmV2aXNpb24g
MjY5NDkxKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvcHJvZ3JhbS5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBpbXBvcnQgc3lz
CiAKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgYXJndW1lbnRzLCBsb2cgYXMgd2Via2l0Y29yZXB5X2xvZwotZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgQ29tbWl0LCBsb2NhbCwgbG9nCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQs
IGxvY2FsLCBsb2csIHJlbW90ZQogCiAKIGNsYXNzIENvbW1hbmQob2JqZWN0KToKQEAgLTM2LDcg
KzM2LDcgQEAgY2xhc3MgQ29tbWFuZChvYmplY3QpOgogICAgIGhlbHAgPSBOb25lCiAKICAgICBA
Y2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCByZXBvc2l0b3J5KToKKyAg
ICBkZWYgcGFyc2VyKGNscywgcGFyc2VyKToKICAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToK
ICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3Qg
aGF2ZSBhIG5hbWUnKQogICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgpAQCAtNTMsNyArNTMs
NyBAQCBjbGFzcyBGaW5kKENvbW1hbmQpOgogICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmll
ciwgcmV2aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBwcmludCB0aGUgY29tbWl0JwogCiAg
ICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHBhcnNlcihjbHMsIHBhcnNlciwgcmVwb3NpdG9yeSwg
bG9nZ2Vycz1Ob25lKToKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCBsb2dnZXJzPU5vbmUp
OgogICAgICAgICBhcmd1bWVudHMuTG9nZ2luZ0dyb3VwKAogICAgICAgICAgICAgcGFyc2VyLAog
ICAgICAgICAgICAgbG9nZ2Vycz1sb2dnZXJzLApAQCAtMTIxLDcgKzEyMSw3IEBAIGNsYXNzIENo
ZWNrb3V0KENvbW1hbmQpOgogICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNp
b24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBjaGVja291dCB0aGF0IGNvbW1pdCcKIAogICAgIEBj
bGFzc21ldGhvZAotICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIHJlcG9zaXRvcnksIGxvZ2dl
cnM9Tm9uZSk6CisgICAgZGVmIHBhcnNlcihjbHMsIHBhcnNlciwgbG9nZ2Vycz1Ob25lKToKICAg
ICAgICAgYXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKICAgICAgICAgICAgIHBhcnNlciwKICAgICAg
ICAgICAgIGxvZ2dlcnM9bG9nZ2VycywKQEAgLTEzNiw2ICsxMzYsMTAgQEAgY2xhc3MgQ2hlY2tv
dXQoQ29tbWFuZCk6CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbWFpbihjbHMsIGFyZ3Ms
IHJlcG9zaXRvcnkpOgorICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgorICAgICAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5
IikKKyAgICAgICAgICAgIHJldHVybiAxCisKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29t
bWl0ID0gcmVwb3NpdG9yeS5jaGVja291dChhcmdzLmFyZ3VtZW50WzBdKQogICAgICAgICBleGNl
cHQgKGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKQEAgLTE1
NSwyMCArMTU5LDMyIEBAIGRlZiBtYWluKGFyZ3M9Tm9uZSwgcGF0aD1Ob25lLCBsb2dnZXJzPU4K
IAogICAgIGxvZ2dlcnMgPSBbbG9nZ2luZy5nZXRMb2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywg
IGxvZ10gKyAobG9nZ2VycyBvciBbXSkKIAotICAgIHJlcG9zaXRvcnkgPSBsb2NhbC5TY20uZnJv
bV9wYXRoKHBhdGg9cGF0aCBvciBvcy5nZXRjd2QoKSkKLQogICAgIHBhcnNlciA9IGFyZ3BhcnNl
LkFyZ3VtZW50UGFyc2VyKAogICAgICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5n
IGZyb20gdGhlIFdlYktpdCB0ZWFtIHRvIGludGVyYWN0IHdpdGggYSAnICsKICAgICAgICAgICAg
ICAgICAgICAgJ3JlcG9zaXRvcnkgdXNpbmcgaWRlbnRpZmVycycsCiAgICAgKQogICAgIGFyZ3Vt
ZW50cy5Mb2dnaW5nR3JvdXAocGFyc2VyKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3Vt
ZW50X2dyb3VwKCdSZXBvc2l0b3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAg
ICctLXBhdGgnLCAnLXAnLCAnLUMnLAorICAgICAgICBkZXN0PSdyZXBvc2l0b3J5JywgZGVmYXVs
dD1wYXRoIG9yIG9zLmdldGN3ZCgpLAorICAgICAgICBoZWxwPSdTZXQgdGhlIHJlcG9zaXRvcnkg
cGF0aCBvciBVUkwgdG8gYmUgdXNlZCcsCisgICAgICAgIGFjdGlvbj0nc3RvcmUnLAorICAgICkK
KwogICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1h
bmQgaGVscCcpCiAKICAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZCwgQ2hlY2tvdXRdOgogICAgICAg
ICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIocHJvZ3JhbS5uYW1lLCBoZWxwPXBy
b2dyYW0uaGVscCkKICAgICAgICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhtYWluPXByb2dyYW0u
bWFpbikKLSAgICAgICAgcHJvZ3JhbS5wYXJzZXIoc3VicGFyc2VyLCByZXBvc2l0b3J5PXJlcG9z
aXRvcnksIGxvZ2dlcnM9bG9nZ2VycykKKyAgICAgICAgcHJvZ3JhbS5wYXJzZXIoc3VicGFyc2Vy
LCBsb2dnZXJzPWxvZ2dlcnMpCiAKICAgICBwYXJzZWQgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdz
PWFyZ3MpCiAKKyAgICBpZiBwYXJzZWQucmVwb3NpdG9yeS5zdGFydHN3aXRoKCdodHRwczovLycp
IG9yIHBhcnNlZC5yZXBvc2l0b3J5LnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKToKKyAgICAgICAgcmVw
b3NpdG9yeSA9IHJlbW90ZS5TY20uZnJvbV91cmwocGFyc2VkLnJlcG9zaXRvcnkpCisgICAgZWxz
ZToKKyAgICAgICAgcmVwb3NpdG9yeSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0aD1wYXJzZWQu
cmVwb3NpdG9yeSkKKwogICAgIHJldHVybiBwYXJzZWQubWFpbihhcmdzPXBhcnNlZCwgcmVwb3Np
dG9yeT1yZXBvc2l0b3J5KQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvc2Nt
X2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0
IHNpeAoraW1wb3J0IHN5cworCitmcm9tIGxvZ2dpbmcgaW1wb3J0IE51bGxIYW5kbGVyCitmcm9t
IHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIGxvZworCisKK2NsYXNzIFNjbUJhc2Uob2JqZWN0
KToKKyAgICBjbGFzcyBFeGNlcHRpb24oUnVudGltZUVycm9yKToKKyAgICAgICAgcGFzcworCisg
ICAgIyBQcm9qZWN0cyBjYW4gZGVmaW5lIGZvciB0aGVtc2VsdmVzIHdoYXQgY29uc3RpdHV0ZXMg
YSBkZXZlbG9wbWVudCB2cyBhIHByb2R1Y3Rpb24gYnJhbmNoLAorICAgICMgdGhlIGZvbGxvd2lu
ZyBpZGlvbXMgc2VlbSBjb21tb24gZW5vdWdoIHRvIGJlIHNoYXJlZC4KKyAgICBERVZfQlJBTkNI
RVMgPSByZS5jb21waWxlKHInLipbKGVuZykoZGV2KShidWcpXS8uKycpCisgICAgUFJPRF9CUkFO
Q0hFUyA9IHJlLmNvbXBpbGUocidcUystW1xkK1wuXSstYnJhbmNoJykKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBkZXZfYnJhbmNoZXM9Tm9uZSwgcHJvZF9icmFuY2hlcz1Ob25lKToKKyAgICAg
ICAgc2VsZi5kZXZfYnJhbmNoZXMgPSBkZXZfYnJhbmNoZXMgb3Igc2VsZi5ERVZfQlJBTkNIRVMK
KyAgICAgICAgc2VsZi5wcm9kX2JyYW5jaGVzID0gcHJvZF9icmFuY2hlcyBvciBzZWxmLlBST0Rf
QlJBTkNIRVMKKyAgICAgICAgc2VsZi5wYXRoID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGlzX3N2bihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgaXNfZ2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBkZWZhdWx0X2JyYW5jaChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoZXMoc2VsZik6
CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIHRhZ3Moc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQor
CisgICAgZGVmIGNvbW1pdChzZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZp
ZXI9Tm9uZSwgYnJhbmNoPU5vbmUsIHRhZz1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcHJpb3JpdGl6ZV9icmFuY2hlcyhzZWxmLCBicmFuY2hl
cyk6CisgICAgICAgIGlmIGxlbihicmFuY2hlcykgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hlc1swXQorCisgICAgICAgIGRlZmF1bHRfYnJhbmNoID0gc2VsZi5kZWZhdWx0X2JyYW5j
aAorICAgICAgICBpZiBkZWZhdWx0X2JyYW5jaCBpbiBicmFuY2hlczoKKyAgICAgICAgICAgIHJl
dHVybiBkZWZhdWx0X2JyYW5jaAorCisgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW5m
b3JtYXRpb24gdG8gZGV0ZXJtaW5lIGEgYnJhbmNoLiBXZSB3aWxsIGF0dGVtcHQgdG8gZmlyc3Qg
dXNlIHRoZSBicmFuY2ggc3BlY2lmaWVkCisgICAgICAgICMgYnkgdGhlIGNhbGxlciwgdGhlbiB0
aGUgb25lIHRoZW4gY2hlY2tvdXQgaXMgY3VycmVudGx5IG9uLiBJZiBib3RoIHRob3NlIGZhaWws
IHdlIHdpbGwgcGljayBvbmUgb2YgdGhlCisgICAgICAgICMgb3RoZXIgYnJhbmNoZXMuIFdlIHBy
ZWZlciBwcm9kdWN0aW9uIGJyYW5jaGVzIGZpcnN0LCB0aGVuIGFueSBicmFuY2ggd2hpY2ggaXNu
J3QgZXhwbGljaXRseSBsYWJlbGVkIGEKKyAgICAgICAgIyBkZXYgYnJhbmNoLiBXZSB0aGVuIHNv
cnQgdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIGJyYW5jaGVzIGFuZCBwaWNrIHRoZSBzbWFsbGVzdAor
ICAgICAgICBmaWx0ZXJlZF9jYW5kaWRhdGVzID0gW2NhbmRpZGF0ZSBmb3IgY2FuZGlkYXRlIGlu
IGJyYW5jaGVzIGlmIHNlbGYucHJvZF9icmFuY2hlcy5tYXRjaChjYW5kaWRhdGUpXQorICAgICAg
ICBpZiBub3QgZmlsdGVyZWRfY2FuZGlkYXRlczoKKyAgICAgICAgICAgIGZpbHRlcmVkX2NhbmRp
ZGF0ZXMgPSBbY2FuZGlkYXRlIGZvciBjYW5kaWRhdGUgaW4gYnJhbmNoZXMgaWYgbm90IHNlbGYu
ZGV2X2JyYW5jaGVzLm1hdGNoKGNhbmRpZGF0ZSldCisgICAgICAgIGlmIG5vdCBmaWx0ZXJlZF9j
YW5kaWRhdGVzOgorICAgICAgICAgICAgZmlsdGVyZWRfY2FuZGlkYXRlcyA9IGJyYW5jaGVzCisg
ICAgICAgIHJldHVybiBzb3J0ZWQoZmlsdGVyZWRfY2FuZGlkYXRlcylbMF0KKworICAgIGRlZiBm
aW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJndW1lbnQs
IHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0
ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90ICd7fSciLmZvcm1hdCh0eXBlKGFyZ3Vt
ZW50KSkpCisKKyAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICBpZiAnficgaW4gYXJndW1lbnQ6
CisgICAgICAgICAgICBmb3IgcyBpbiBhcmd1bWVudC5zcGxpdCgnficpWzE6XToKKyAgICAgICAg
ICAgICAgICBpZiBzIGFuZCBub3Qgcy5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgdG8gU2NtLmZpbmQo
KSIuZm9ybWF0KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaW50KHMpIGlm
IHMgZWxzZSAxCisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3VtZW50LnNwbGl0KCd+JylbMF0K
KworICAgICAgICBpZiBhcmd1bWVudCA9PSAnSEVBRCc6CisgICAgICAgICAgICByZXN1bHQgPSBz
ZWxmLmNvbW1pdCgpCisKKyAgICAgICAgZWxpZiBhcmd1bWVudCBpbiBzZWxmLmJyYW5jaGVzOgor
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5jb21taXQoYnJhbmNoPWFyZ3VtZW50KQorCisgICAg
ICAgIGVsaWYgYXJndW1lbnQgaW4gc2VsZi50YWdzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5jb21taXQodGFnPWFyZ3VtZW50KQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBv
ZmZzZXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ34nIG9mZnNldHMgYXJl
IG5vdCBzdXBwb3J0ZWQgZm9yIHJldmlzaW9ucyBhbmQgaWRlbnRpZmllcnMiKQorCisgICAgICAg
ICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0LnBhcnNlKGFyZ3VtZW50KQorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9cGFyc2VkX2NvbW1pdC5o
YXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBhcnNlZF9jb21taXQucmV2aXNpb24sCisg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRfY29tbWl0LmlkZW50aWZpZXIsCisgICAg
ICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQuYnJhbmNoLAorICAgICAgICAgICAgKQor
CisgICAgICAgIGlmIG5vdCBvZmZzZXQ6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAg
ICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgaWRlbnRpZmllcj1yZXN1bHQu
aWRlbnRpZmllciAtIG9mZnNldCwKKyAgICAgICAgICAgIGJyYW5jaD1yZXN1bHQuYnJhbmNoLAor
ICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9nKGNscywgbWVzc2FnZSwg
bGV2ZWw9bG9nZ2luZy5XQVJOSU5HKToKKyAgICAgICAgaWYgbm90IGxvZy5oYW5kbGVycyBvciBh
bGwoW2lzaW5zdGFuY2UoaGFuZGxlLCBOdWxsSGFuZGxlcikgZm9yIGhhbmRsZSBpbiBsb2cuaGFu
ZGxlcnNdKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobWVzc2FnZSArICdcbicpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cubG9nKGxldmVsLCBtZXNzYWdlKQpJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2Nt
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L2xvY2FsL3NjbS5weQkocmV2aXNpb24gMjY5NDkxKQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwyMSArMjEsMTUgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogCi1pbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzaXgKLWltcG9ydCBzeXMKIAotZnJv
bSBsb2dnaW5nIGltcG9ydCBOdWxsSGFuZGxlcgogZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHJ1
bgotZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKK2Zyb20gd2Via2l0c2NtcHkg
aW1wb3J0IFNjbUJhc2UKIAogCi1jbGFzcyBTY20ob2JqZWN0KToKLSAgICBjbGFzcyBFeGNlcHRp
b24oUnVudGltZUVycm9yKToKLSAgICAgICAgcGFzcwotCitjbGFzcyBTY20oU2NtQmFzZSk6CiAg
ICAgIyBQcm9qZWN0cyBjYW4gZGVmaW5lIGZvciB0aGVtc2VsdmVzIHdoYXQgY29uc3RpdHV0ZXMg
YSBkZXZlbG9wbWVudCB2cyBhIHByb2R1Y3Rpb24gYnJhbmNoLAogICAgICMgdGhlIGZvbGxvd2lu
ZyBpZGlvbXMgc2VlbSBjb21tb24gZW5vdWdoIHRvIGJlIHNoYXJlZC4KICAgICBERVZfQlJBTkNI
RVMgPSByZS5jb21waWxlKHInLipbKGVuZykoZGV2KShidWcpXS8uKycpCkBAIC02NCwxMTMgKzU4
LDIyIEBAIGNsYXNzIFNjbShvYmplY3QpOgogICAgICAgICByYWlzZSBPU0Vycm9yKCIne30nIGlz
IG5vdCBhIGtub3duIFNDTSB0eXBlIi5mb3JtYXQocGF0aCkpCiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgcGF0aCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSk6Ci0gICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCcnKQotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICAgICAgc2VsZi5kZXZf
YnJhbmNoZXMgPSBkZXZfYnJhbmNoZXMgb3Igc2VsZi5ERVZfQlJBTkNIRVMKLSAgICAgICAgc2Vs
Zi5wcm9kX2JyYW5jaGVzID0gcHJvZF9icmFuY2hlcyBvciBzZWxmLlBST0RfQlJBTkNIRVMKKyAg
ICAgICAgc3VwZXIoU2NtLCBzZWxmKS5fX2luaXRfXyhkZXZfYnJhbmNoZXM9ZGV2X2JyYW5jaGVz
LCBwcm9kX2JyYW5jaGVzPXByb2RfYnJhbmNoZXMpCiAKLSAgICBAcHJvcGVydHkKLSAgICBkZWYg
aXNfc3ZuKHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIEBwcm9wZXJ0eQotICAg
IGRlZiBpc19naXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShwYXRoLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIkV4cGVjdGVkICdwYXRoJyB0byBiZSBhIHN0cmluZyB0eXBlLCBub3QgJ3t9JyIu
Zm9ybWF0KHR5cGUocGF0aCkpKQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKICAgICBAcHJv
cGVydHkKICAgICBkZWYgcm9vdF9wYXRoKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCkKIAogICAgIEBwcm9wZXJ0eQotICAgIGRlZiBkZWZhdWx0X2JyYW5jaChzZWxm
KToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgICBAcHJvcGVydHkK
ICAgICBkZWYgYnJhbmNoKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCkKIAotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBicmFuY2hlcyhzZWxmKToKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgdGFncyhz
ZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KICAgICBkZWYgcmVt
b3RlKHNlbGYsIG5hbWU9Tm9uZSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
KQogCi0gICAgZGVmIGZpbmQoc2VsZiwgYXJndW1lbnQpOgotICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZShhcmd1bWVudCwgc2l4LnN0cmluZ190eXBlcyk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJFeHBlY3RlZCAnYXJndW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9y
bWF0KHR5cGUoYXJndW1lbnQpKSkKLQotICAgICAgICBvZmZzZXQgPSAwCi0gICAgICAgIGlmICd+
JyBpbiBhcmd1bWVudDoKLSAgICAgICAgICAgIGZvciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+Jylb
MTpdOgotICAgICAgICAgICAgICAgIGlmIHMgYW5kIG5vdCBzLmlzZGlnaXQoKToKLSAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBhcmd1bWVu
dCB0byBTY20uZmluZCgpIi5mb3JtYXQoYXJndW1lbnQpKQotICAgICAgICAgICAgICAgIG9mZnNl
dCArPSBpbnQocykgaWYgcyBlbHNlIDEKLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJndW1lbnQu
c3BsaXQoJ34nKVswXQotCi0gICAgICAgIGlmIGFyZ3VtZW50ID09ICdIRUFEJzoKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuY29tbWl0KCkKLQotICAgICAgICBlbGlmIGFyZ3VtZW50IGluIHNl
bGYuYnJhbmNoZXM6Ci0gICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbW1pdChicmFuY2g9YXJn
dW1lbnQpCi0KLSAgICAgICAgZWxpZiBhcmd1bWVudCBpbiBzZWxmLnRhZ3M6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLmNvbW1pdCh0YWc9YXJndW1lbnQpCi0KLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGlmIG9mZnNldDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIn
ficgb2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmV2aXNpb25zIGFuZCBpZGVudGlmaWVy
cyIpCi0KLSAgICAgICAgICAgIHBhcnNlZF9jb21taXQgPSBDb21taXQucGFyc2UoYXJndW1lbnQp
Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCi0gICAgICAgICAgICAgICAgaGFzaD1w
YXJzZWRfY29tbWl0Lmhhc2gsCi0gICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2VkX2NvbW1p
dC5yZXZpc2lvbiwKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQuaWRl
bnRpZmllciwKLSAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFuY2gsCi0g
ICAgICAgICAgICApCi0KLSAgICAgICAgaWYgbm90IG9mZnNldDoKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQKLQotICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCi0gICAgICAgICAgICBpZGVu
dGlmaWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAotICAgICAgICAgICAgYnJhbmNoPXJl
c3VsdC5icmFuY2gsCi0gICAgICAgICkKLQogICAgIGRlZiBjaGVja291dChzZWxmLCBhcmd1bWVu
dCk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gICAgZGVmIGNvbW1p
dChzZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSwgYnJhbmNo
PU5vbmUsIHRhZz1Ob25lKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0K
LSAgICBkZWYgcHJpb3JpdGl6ZV9icmFuY2hlcyhzZWxmLCBicmFuY2hlcyk6Ci0gICAgICAgIGlm
IGxlbihicmFuY2hlcykgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBicmFuY2hlc1swXQotCi0g
ICAgICAgIGRlZmF1bHRfYnJhbmNoID0gc2VsZi5kZWZhdWx0X2JyYW5jaAotICAgICAgICBpZiBk
ZWZhdWx0X2JyYW5jaCBpbiBicmFuY2hlczoKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X2Jy
YW5jaAotCi0gICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGV0
ZXJtaW5lIGEgYnJhbmNoLiBXZSB3aWxsIGF0dGVtcHQgdG8gZmlyc3QgdXNlIHRoZSBicmFuY2gg
c3BlY2lmaWVkCi0gICAgICAgICMgYnkgdGhlIGNhbGxlciwgdGhlbiB0aGUgb25lIHRoZW4gY2hl
Y2tvdXQgaXMgY3VycmVudGx5IG9uLiBJZiBib3RoIHRob3NlIGZhaWwsIHdlIHdpbGwgcGljayBv
bmUgb2YgdGhlCi0gICAgICAgICMgb3RoZXIgYnJhbmNoZXMuIFdlIHByZWZlciBwcm9kdWN0aW9u
IGJyYW5jaGVzIGZpcnN0LCB0aGVuIGFueSBicmFuY2ggd2hpY2ggaXNuJ3QgZXhwbGljaXRseSBs
YWJlbGVkIGEKLSAgICAgICAgIyBkZXYgYnJhbmNoLiBXZSB0aGVuIHNvcnQgdGhlIGxpc3Qgb2Yg
Y2FuZGlkYXRlIGJyYW5jaGVzIGFuZCBwaWNrIHRoZSBzbWFsbGVzdAotICAgICAgICBmaWx0ZXJl
ZF9jYW5kaWRhdGVzID0gW2NhbmRpZGF0ZSBmb3IgY2FuZGlkYXRlIGluIGJyYW5jaGVzIGlmIHNl
bGYucHJvZF9icmFuY2hlcy5tYXRjaChjYW5kaWRhdGUpXQotICAgICAgICBpZiBub3QgZmlsdGVy
ZWRfY2FuZGlkYXRlczoKLSAgICAgICAgICAgIGZpbHRlcmVkX2NhbmRpZGF0ZXMgPSBbY2FuZGlk
YXRlIGZvciBjYW5kaWRhdGUgaW4gYnJhbmNoZXMgaWYgbm90IHNlbGYuZGV2X2JyYW5jaGVzLm1h
dGNoKGNhbmRpZGF0ZSldCi0gICAgICAgIGlmIG5vdCBmaWx0ZXJlZF9jYW5kaWRhdGVzOgotICAg
ICAgICAgICAgZmlsdGVyZWRfY2FuZGlkYXRlcyA9IGJyYW5jaGVzCi0gICAgICAgIHJldHVybiBz
b3J0ZWQoZmlsdGVyZWRfY2FuZGlkYXRlcylbMF0KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBsb2coY2xzLCBtZXNzYWdlLCBsZXZlbD1sb2dnaW5nLldBUk5JTkcpOgotICAgICAgICBpZiBu
b3QgbG9nLmhhbmRsZXJzIG9yIGFsbChbaXNpbnN0YW5jZShoYW5kbGUsIE51bGxIYW5kbGVyKSBm
b3IgaGFuZGxlIGluIGxvZy5oYW5kbGVyc10pOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZShtZXNzYWdlICsgJ1xuJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZy5sb2cobGV2
ZWwsIG1lc3NhZ2UpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9sb2NhbC9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5CShyZXZpc2lvbiAyNjk0
OTEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9s
b2NhbC9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxMSw3ICszMTEsNyBAQCBjbGFzcyBTdm4o
U2NtKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJv
dGggdGFnIGFuZCByZXZpc2lvbicpCiAgICAgICAgICAgICByZXZpc2lvbiA9IENvbW1pdC5fcGFy
c2VfcmV2aXNpb24ocmV2aXNpb24sIGRvX2Fzc2VydD1UcnVlKQogICAgICAgICAgICAgYnJhbmNo
ID0gc2VsZi5fYnJhbmNoX2ZvcihyZXZpc2lvbikKLSAgICAgICAgICAgIGluZm8gPSBzZWxmLmlu
Zm8oY2FjaGVkPVRydWUsIGJyYW5jaD1icmFuY2gsIHJldmlzaW9uPXJldmlzaW9uKQorICAgICAg
ICAgICAgaW5mbyA9IHNlbGYuaW5mbyhjYWNoZWQ9VHJ1ZSwgcmV2aXNpb249cmV2aXNpb24pCiAK
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJyYW5jaCBhbmQgdGFnOgpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTQ5MSkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBmcm9tIHdlYmtpdHNjbXB5Lm1vY2tz
IGltcG9ydCBsb2NhbAorZnJvbSB3ZWJraXRzY21weS5tb2NrcyBpbXBvcnQgcmVtb3RlCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9y
ZW1vdGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHNjbXB5
Lm1vY2tzLnJlbW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9yZW1vdGUvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9zdm4ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgeG1sdG9kaWN0CisKK2Zyb20gY29sbGVj
dGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQor
ZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBD
b21taXQsIENvbnRyaWJ1dG9yLCByZW1vdGUgYXMgc2NtcmVtb3RlCisKKworY2xhc3MgU3ZuKG1v
Y2tzLlJlcXVlc3RzKToKKyAgICB0b3AgPSBOb25lCisgICAgUkVWSVNJT05fUkVRVUVTVF9SRSA9
IHJlLmNvbXBpbGUocidzdm4vcnZyLyg/UDxyZXZpc2lvbj5cZCspKC8oP1A8Y2F0ZWdvcnk+XFMr
KSk/JCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVtb3RlPSdzdm4ud2Via2l0Lm9yZy9y
ZXBvc2l0b3J5L3dlYmtpdCcpOgorICAgICAgICBpZiBub3Qgc2NtcmVtb3RlLlN2bi5pc193ZWJz
ZXJ2ZXIoJ2h0dHBzOi8ve30nLmZvcm1hdChyZW1vdGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJyJ7fSIgaXMgbm90IGEgdmFsaWQgU3ZuIHJlbW90ZScuZm9ybWF0KHJlbW90ZSkp
CisKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyhyZW1vdGUuc3BsaXQoJy8nKVsw
XSkKKyAgICAgICAgaWYgcmVtb3RlWy0xXSAhPSAnLyc6CisgICAgICAgICAgICByZW1vdGUgKz0g
Jy8nCisgICAgICAgIHNlbGYucmVtb3RlID0gcmVtb3RlCisgICAgICAgIHNlbGYuX2NhY2hlX2Nv
bnRlbnRzID0gTm9uZQorICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHNjbXJlbW90ZS5Tdm4o
J2h0dHA6Ly97fScuZm9ybWF0KHNlbGYucmVtb3RlKSkuX2NhY2hlX2xvY2soKSkKKworICAgICAg
ICAjIFByb3ZpZGUgYSByZWFzb25hYmxlIHNldCBvZiBjb21taXRzIHRvIHRlc3QgYWdhaW5zdAor
ICAgICAgICBjb250cmlidXRvciA9IENvbnRyaWJ1dG9yKG5hbWU9J0pvbmF0aGFuIEJlZGFyZCcs
IGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgIHNlbGYuY29tbWl0cyA9IHsK
KyAgICAgICAgICAgICd0cnVuayc6IFsKKyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9JzFAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbj0xLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAg
ICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYwMTAwLAorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPScxc3QgY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMkB0cnVuaycsCisgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uPTIsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwK
KyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjExMDAsCisgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9JzJuZCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0
KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSczQHRydW5rJywKKyAgICAgICAgICAg
ICAgICAgICAgcmV2aXNpb249NCwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1
dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzEwMCwKKyAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBD
b21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzRAdHJ1bmsnLAorICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbj02LAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29u
dHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY1MTAwLAorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSc2dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAg
ICksCisgICAgICAgICAgICBdLCAnYnJhbmNoLWEnOiBbCisgICAgICAgICAgICAgICAgQ29tbWl0
KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnLAorICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbj0zLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29u
dHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYyMTAwLAorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSczcmQgY29tbWl0XG4nLAorICAgICAgICAgICAgICAg
ICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1h
JywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249NywKKyAgICAgICAgICAgICAgICAgICAg
YXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2
NjEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nN3RoIGNvbW1pdFxuJywKKyAgICAg
ICAgICAgICAgICApLAorICAgICAgICAgICAgXSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmNv
bW1pdHNbJ2JyYW5jaC1iJ10gPSBbCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1h
J11bMF0sIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjJAYnJhbmNoLWIn
LAorICAgICAgICAgICAgICAgIHJldmlzaW9uPTUsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNv
bnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY0MTAwLAorICAgICAg
ICAgICAgICAgIG1lc3NhZ2U9JzV0aCBjb21taXRcbicsCisgICAgICAgICAgICApLCBDb21taXQo
CisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4zQGJyYW5jaC1iJywKKyAgICAgICAgICAg
ICAgICByZXZpc2lvbj04LAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAg
ICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NzEwMCwKKyAgICAgICAgICAgICAgICBtZXNz
YWdlPSc4dGggY29tbWl0XG4nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorCisgICAgICAg
IHNlbGYuY29tbWl0c1sndGFncy90YWctMSddID0gWworICAgICAgICAgICAgc2VsZi5jb21taXRz
WydicmFuY2gtYSddWzBdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzFd
LCBDb21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4zQHRhZ3MvdGFnLTEnLAor
ICAgICAgICAgICAgICAgIHJldmlzaW9uPTksCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRy
aWJ1dG9yLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MTAwLAorICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9Jzl0aCBjb21taXRcbicsCisgICAgICAgICAgICApLAorICAgICAgICBd
CisgICAgICAgIHNlbGYuY29tbWl0c1sndGFncy90YWctMiddID0gWworICAgICAgICAgICAgc2Vs
Zi5jb21taXRzWydicmFuY2gtYiddWzBdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFu
Y2gtYiddWzFdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddWzJdLCBDb21t
aXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi40QHRhZ3MvdGFnLTInLAorICAgICAg
ICAgICAgICAgIHJldmlzaW9uPTEwLAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRv
ciwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2OTEwMCwKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlPScxMHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKwor
ICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19lbnRl
cl9fKCkKKworICAgICAgICBjYWNoZV9wYXRoID0gc2NtcmVtb3RlLlN2bignaHR0cDovL3t9Jy5m
b3JtYXQoc2VsZi5yZW1vdGUpKS5fY2FjaGVfcGF0aAorICAgICAgICBpZiBvcy5wYXRoLmlzZmls
ZShjYWNoZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZV9wYXRoLCAncicpIGFz
IGNhY2hlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2NvbnRlbnRzID0gY2FjaGUucmVh
ZCgpCisgICAgICAgICAgICBvcy5yZW1vdmUoY2FjaGVfcGF0aCkKKworICAgICAgICByZXR1cm4g
c2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAg
IGNhY2hlX3BhdGggPSBzY21yZW1vdGUuU3ZuKCdodHRwOi8ve30nLmZvcm1hdChzZWxmLnJlbW90
ZSkpLl9jYWNoZV9wYXRoCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhY2hlX3BhdGgpOgor
ICAgICAgICAgICAgb3MucmVtb3ZlKGNhY2hlX3BhdGgpCisgICAgICAgIGlmIHNlbGYuX2NhY2hl
X2NvbnRlbnRzOgorICAgICAgICAgICAgd2l0aCBvcGVuKGNhY2hlX3BhdGgsICd3JykgYXMgY2Fj
aGU6CisgICAgICAgICAgICAgICAgY2FjaGUud3JpdGUoc2VsZi5fY2FjaGVfY29udGVudHMpCisK
KyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAg
ICBkZWYgbGF0ZXN0KHNlbGYpOgorICAgICAgICBsYXRlc3QgPSBzZWxmLmNvbW1pdHNbJ3RydW5r
J11bLTFdCisgICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5jb21taXRzLnZhbHVlcygpOgorICAg
ICAgICAgICAgZm9yIGNvbW1pdCBpbiBicmFuY2g6CisgICAgICAgICAgICAgICAgaWYgY29tbWl0
LnJldmlzaW9uID4gbGF0ZXN0LnJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBsYXRlc3Qg
PSBjb21taXQKKyAgICAgICAgcmV0dXJuIGxhdGVzdAorCisgICAgZGVmIGJyYW5jaGVzKHNlbGYs
IHJldmlzaW9uPU5vbmUpOgorICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9uIG9yIHNlbGYubGF0
ZXN0KCkKKyAgICAgICAgYnJhbmNoZXMgPSBzZXQoKQorICAgICAgICBmb3IgYnJhbmNoLCBjb21t
aXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBj
b21taXRzOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5yZXZpc2lvbiA8PSByZXZpc2lvbiBh
bmQgbm90IGNvbW1pdC5icmFuY2guc3RhcnRzd2l0aCgndGFncycpIGFuZCBjb21taXQuYnJhbmNo
ICE9ICd0cnVuayc6CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFkZChjb21taXQuYnJh
bmNoKQorICAgICAgICByZXR1cm4gc29ydGVkKGJyYW5jaGVzKQorCisgICAgZGVmIHRhZ3Moc2Vs
ZiwgcmV2aXNpb249Tm9uZSk6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb24gb3Igc2VsZi5s
YXRlc3QoKQorICAgICAgICB0YWdzID0gc2V0KCkKKyAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0
cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29t
bWl0czoKKyAgICAgICAgICAgICAgICBpZiBjb21taXQucmV2aXNpb24gPD0gcmV2aXNpb24gYW5k
IGNvbW1pdC5icmFuY2guc3RhcnRzd2l0aCgndGFncycpOgorICAgICAgICAgICAgICAgICAgICB0
YWdzLmFkZChjb21taXQuYnJhbmNoKQorICAgICAgICByZXR1cm4gc29ydGVkKHRhZ3MpCisKKyAg
ICBkZWYgcmFuZ2Uoc2VsZiwgY2F0ZWdvcnk9Tm9uZSwgc3RhcnQ9Tm9uZSwgZW5kPU5vbmUpOgor
ICAgICAgICBzdGFydCA9IHN0YXJ0IG9yIHNlbGYubGF0ZXN0KCkKKyAgICAgICAgZW5kID0gZW5k
IG9yIDEKKworICAgICAgICBpZiBjYXRlZ29yeSBhbmQgY2F0ZWdvcnkuc3RhcnRzd2l0aCgnYnJh
bmNoZXMvJyk6CisgICAgICAgICAgICBjYXRlZ29yeSA9IGNhdGVnb3J5LnNwbGl0KCcvJylbLTFd
CisKKyAgICAgICAgaWYgbm90IGNhdGVnb3J5OgorICAgICAgICAgICAgZm9yIGNvbW1pdHMgaW4g
c2VsZi5jb21taXRzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29t
bWl0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgY29tbWl0LnJldmlzaW9uID09IHN0YXJ0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb21taXQuYnJhbmNoCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBjYXRlZ29yeToKKyAgICAg
ICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHJlc3VsdCA9IFtjb21taXQgZm9yIGNvbW1pdCBp
biByZXZlcnNlZChzZWxmLmNvbW1pdHNbY2F0ZWdvcnldKV0KKyAgICAgICAgaWYgc2VsZi5jb21t
aXRzW2NhdGVnb3J5XVswXS5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXN1bHQgKz0gW2Nv
bW1pdCBmb3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1sndHJ1bmsnXVs6c2VsZi5j
b21taXRzW2NhdGVnb3J5XVswXS5icmFuY2hfcG9pbnRdKV0KKworICAgICAgICBmb3IgaW5kZXgg
aW4gcmV2ZXJzZWQocmFuZ2UobGVuKHJlc3VsdCkpKToKKyAgICAgICAgICAgIGlmIHJlc3VsdFtp
bmRleF0ucmV2aXNpb24gPCBlbmQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Wzpp
bmRleF0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcmVzdWx0W2lu
ZGV4XS5yZXZpc2lvbiA+IHN0YXJ0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtp
bmRleDpdCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gcmVzdWx0CisK
KyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIGlmIG5vdCB1cmwuc3RhcnRzd2l0aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0
YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2Uu
Y3JlYXRlNDA0KHVybCkKKworICAgICAgICBkYXRhID0geG1sdG9kaWN0LnBhcnNlKGRhdGEpIGlm
IGRhdGEgZWxzZSBOb25lCisgICAgICAgIHN0cmlwcGVkX3VybCA9IHVybC5zcGxpdCgnOi8vJylb
LTFdCisKKyAgICAgICAgIyBMYXRlc3QgcmV2aXNpb24KKyAgICAgICAgaWYgbWV0aG9kID09ICdP
UFRJT05TJyBhbmQgc3RyaXBwZWRfdXJsID09IHNlbGYucmVtb3RlIGFuZCBkYXRhID09IE9yZGVy
ZWREaWN0KCgKKyAgICAgICAgICAgICgnRDpvcHRpb25zJywgT3JkZXJlZERpY3QoKAorICAgICAg
ICAgICAgICAgICgnQHhtbG5zOkQnLCAnREFWOicpLAorICAgICAgICAgICAgICAgICgnRDphY3Rp
dml0eS1jb2xsZWN0aW9uLXNldCcsIE5vbmUpLAorICAgICAgICAgICAgKSkpLAorICAgICAgICAp
KToKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tVGV4dCgKKyAgICAgICAg
ICAgICAgICB1cmw9dXJsLAorICAgICAgICAgICAgICAgIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpvcHRpb25z
LXJlc3BvbnNlIHhtbG5zOkQ9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6YWN0
aXZpdHktY29sbGVjdGlvbi1zZXQ+PEQ6aHJlZj4vcmVwb3NpdG9yeS93ZWJraXQvIXN2bi9hY3Qv
PC9EOmhyZWY+PC9EOmFjdGl2aXR5LWNvbGxlY3Rpb24tc2V0PjwvRDpvcHRpb25zLXJlc3BvbnNl
PlxuJywKKyAgICAgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAgICAgJ1NW
Ti1Zb3VuZ2VzdC1SZXYnOiBzdHIoc2VsZi5sYXRlc3QoKS5yZXZpc2lvbiksCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgKQorCisgICAgICAgICMgTGlzdCBjYXRlZ29yeQorICAgICAg
ICBtYXRjaCA9IHNlbGYuUkVWSVNJT05fUkVRVUVTVF9SRS5tYXRjaChzdHJpcHBlZF91cmwuc3Bs
aXQoJyEnKVstMV0pCisgICAgICAgIGlmIG1ldGhvZCA9PSAnUFJPUEZJTkQnIGFuZCBzdHJpcHBl
ZF91cmwuc3RhcnRzd2l0aCgne30hJy5mb3JtYXQoc2VsZi5yZW1vdGUpKSBhbmQgbWF0Y2ggYW5k
IGRhdGEgPT0gT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdwcm9wZmluZCcsIE9yZGVyZWRE
aWN0KCgKKyAgICAgICAgICAgICAgICAoJ0B4bWxucycsICdEQVY6JyksCisgICAgICAgICAgICAg
ICAgKCdwcm9wJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICAgICAoJ3Jlc291cmNl
dHlwZScsIE9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICAgICAgICAgICAgICgnQHhtbG5zJywg
J0RBVjonKSwKKyAgICAgICAgICAgICAgICAgICAgKSkpLAorICAgICAgICAgICAgICAgICkpKSwK
KyAgICAgICAgICAgICkpKSwKKyAgICAgICAgKSk6CisgICAgICAgICAgICBsaW5rcyA9IFtzdHJp
cHBlZF91cmxbbGVuKHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWzBdKTpdXQorICAgICAgICAgICAg
aWYgbGlua3NbMF1bLTFdICE9ICcvJzoKKyAgICAgICAgICAgICAgICBsaW5rc1swXSArPSAnLycK
KworICAgICAgICAgICAgaWYgbWF0Y2guZ3JvdXAoJ2NhdGVnb3J5JykgPT0gJ2JyYW5jaGVzJzoK
KyAgICAgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYuYnJhbmNoZXMoaW50KG1hdGNoLmdy
b3VwKCdyZXZpc2lvbicpKSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgne317
fS8nLmZvcm1hdChsaW5rc1swXSwgYnJhbmNoKSkKKworICAgICAgICAgICAgZWxpZiBtYXRjaC5n
cm91cCgnY2F0ZWdvcnknKSA9PSAndGFncyc6CisgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBz
ZWxmLnRhZ3MoaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKSk6CisgICAgICAgICAgICAgICAg
ICAgIGxpbmtzLmFwcGVuZCgne317fS8nLmZvcm1hdChsaW5rc1swXVs6LTVdLCB0YWcpKQorCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5j
cmVhdGU0MDQodXJsKQorCisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UoCisgICAg
ICAgICAgICAgICAgc3RhdHVzX2NvZGU9MjA3LAorICAgICAgICAgICAgICAgIHVybD11cmwsCisg
ICAgICAgICAgICAgICAgdGV4dD0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi
Pz5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOm11bHRpc3RhdHVzIHhtbG5zOkQ9IkRBVjoi
IHhtbG5zOm5zMD0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICd7fTwvRDptdWx0aXN0
YXR1cz5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihbCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJzxEOnJlc3BvbnNlIHhtbG5zOmxwMT0iREFWOiI+XG4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxEOmhyZWY+e308L0Q6aHJlZj5cbicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzxEOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzxscDE6cmVzb3VyY2V0eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNldHlwZT5cbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9EOnByb3A+XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzxEOnN0YXR1cz5IVFRQLzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzwvRDpyZXNwb25zZT5cbicuZm9ybWF0KGxpbmspIGZvciBsaW5r
IGluIGxpbmtzCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICApCisK
KyAgICAgICAgIyBJbmZvIGZvciBjb21taXQsIGJyYW5jaCBvciB0YWcKKyAgICAgICAgaWYgbWV0
aG9kID09ICdQUk9QRklORCcgYW5kIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fSEnLmZvcm1h
dChzZWxmLnJlbW90ZSkpIGFuZCBtYXRjaCBhbmQgZGF0YSA9PSBPcmRlcmVkRGljdCgoCisgICAg
ICAgICAgICAoJ3Byb3BmaW5kJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICgnQHht
bG5zJywgJ0RBVjonKSwKKyAgICAgICAgICAgICAgICAoJ3Byb3AnLCBPcmRlcmVkRGljdCgoCisg
ICAgICAgICAgICAgICAgICAgICgncmVzb3VyY2V0eXBlJywgT3JkZXJlZERpY3QoKCgnQHhtbG5z
JywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgICAgICgnZ2V0Y29udGVudGxlbmd0aCcs
IE9yZGVyZWREaWN0KCgoJ0B4bWxucycsICdEQVY6JyksKSkpLAorICAgICAgICAgICAgICAgICAg
ICAoJ2RlYWRwcm9wLWNvdW50JywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ2h0dHA6Ly9zdWJ2
ZXJzaW9uLnRpZ3Jpcy5vcmcveG1sbnMvZGF2LycpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
KCd2ZXJzaW9uLW5hbWUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnREFWOicpLCkpKSwKKyAg
ICAgICAgICAgICAgICAgICAgKCdjcmVhdGlvbmRhdGUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMn
LCAnREFWOicpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjcmVhdG9yLWRpc3BsYXluYW1l
JywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAg
KSkpLAorICAgICAgICAgICAgKSkpLAorICAgICAgICApKToKKyAgICAgICAgICAgIGJyYW5jaCA9
IG1hdGNoLmdyb3VwKCdjYXRlZ29yeScpCisgICAgICAgICAgICBpZiBicmFuY2guc3RhcnRzd2l0
aCgnYnJhbmNoZXMnKToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSAnLycuam9pbihicmFuY2gu
c3BsaXQoJy8nKVsxOl0pCisKKyAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5jb21t
aXRzOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJs
KQorICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5jb21taXRzW2JyYW5jaF1bMF0KKyAgICAgICAg
ICAgIGZvciBjYW5kaWRhdGUgaW4gc2VsZi5jb21taXRzW2JyYW5jaF06CisgICAgICAgICAgICAg
ICAgaWYgY2FuZGlkYXRlLnJldmlzaW9uIDw9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSk6
CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdCA9IGNhbmRpZGF0ZQorCisgICAgICAgICAgICBz
dHJpcHBlZF91cmwgPSBzdHJpcHBlZF91cmxbbGVuKHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWzBd
KTpdCisgICAgICAgICAgICBpZiBzdHJpcHBlZF91cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAg
ICAgICBzdHJpcHBlZF91cmwgKz0gJy8nCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNw
b25zZSgKKyAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT0yMDcsCisgICAgICAgICAgICAgICAg
dXJsPXVybCwKKyAgICAgICAgICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6bXVsdGlzdGF0dXMgeG1s
bnM6RD0iREFWOiIgeG1sbnM6bnMwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxE
OnJlc3BvbnNlIHhtbG5zOmxwMT0iREFWOiIgeG1sbnM6bHAzPSJodHRwOi8vc3VidmVyc2lvbi50
aWdyaXMub3JnL3htbG5zL2Rhdi8iIHhtbG5zOmcwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAg
ICAgICAgJzxEOmhyZWY+e308L0Q6aHJlZj5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnBy
b3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcD5cbicKKyAgICAgICAgICAg
ICAgICAgICAgJzxscDE6cmVzb3VyY2V0eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNl
dHlwZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxscDM6ZGVhZHByb3AtY291bnQ+MTwvbHAz
OmRlYWRwcm9wLWNvdW50PlxuJworICAgICAgICAgICAgICAgICAgICAnPGxwMTp2ZXJzaW9uLW5h
bWU+e308L2xwMTp2ZXJzaW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOmNy
ZWF0aW9uZGF0ZT57fTwvbHAxOmNyZWF0aW9uZGF0ZT5cbicKKyAgICAgICAgICAgICAgICAgICAg
JzxscDE6Y3JlYXRvci1kaXNwbGF5bmFtZT57fTwvbHAxOmNyZWF0b3ItZGlzcGxheW5hbWU+XG4n
CisgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAg
JzxEOnN0YXR1cz5IVFRQLzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJworICAgICAgICAgICAgICAg
ICAgICAnPC9EOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+
XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAg
ICAnPGcwOmdldGNvbnRlbnRsZW5ndGgvPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9EOnBy
b3A+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpzdGF0dXM+SFRUUC8xLjEgNDA0IE5vdCBG
b3VuZDwvRDpzdGF0dXM+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4n
CisgICAgICAgICAgICAgICAgICAgICc8L0Q6cmVzcG9uc2U+XG4nCisgICAgICAgICAgICAgICAg
ICAgICc8L0Q6bXVsdGlzdGF0dXM+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmlwcGVkX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5yZXZpc2lvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRp
bWVzdGFtcCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTLjEwMzc1NFonKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdC5hdXRob3IuZW1haWwsCisgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICkKKworICAgICAgICAjIExvZyBmb3IgY29tbWl0CisgICAgICAgIGlmIG1l
dGhvZCA9PSAnUkVQT1JUJyBhbmQgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9IScuZm9ybWF0
KHNlbGYucmVtb3RlKSkgYW5kIG1hdGNoIGFuZCBkYXRhLmdldCgnUzpsb2ctcmVwb3J0Jyk6Cisg
ICAgICAgICAgICBjb21taXRzID0gc2VsZi5yYW5nZSgKKyAgICAgICAgICAgICAgICBjYXRlZ29y
eT1tYXRjaC5ncm91cCgnY2F0ZWdvcnknKSwKKyAgICAgICAgICAgICAgICBzdGFydD1pbnQoZGF0
YVsnUzpsb2ctcmVwb3J0J11bJ1M6c3RhcnQtcmV2aXNpb24nXSksCisgICAgICAgICAgICAgICAg
ZW5kPWludChkYXRhWydTOmxvZy1yZXBvcnQnXVsnUzplbmQtcmV2aXNpb24nXSksCisgICAgICAg
ICAgICApCisKKyAgICAgICAgICAgIGxpbWl0ID0gaW50KGRhdGFbJ1M6bG9nLXJlcG9ydCddLmdl
dCgnUzpsaW1pdCcsIDApKQorICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihjb21taXRzKSA+
IGxpbWl0OgorICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzWzpsaW1pdF0KKworICAg
ICAgICAgICAgaWYgbm90IGNvbW1pdHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJl
c3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25z
ZSgKKyAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT0yMDAsCisgICAgICAgICAgICAgICAgdXJs
PXVybCwKKyAgICAgICAgICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PlxuJworICAgICAgICAgICAgICAgICc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9InN2
bjoiIHhtbG5zOkQ9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICd7fTwvUzpsb2ctcmVwb3J0
PlxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICcnLmpvaW4oWworICAgICAgICAgICAg
ICAgICAgICAgICAgJzxTOmxvZy1pdGVtPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJzxE
OnZlcnNpb24tbmFtZT57fTwvRDp2ZXJzaW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAnPFM6ZGF0ZT57fTwvUzpkYXRlPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ3t9
e308L1M6bG9nLWl0ZW0+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZnJv
bXRpbWVzdGFtcChjb21taXQudGltZXN0YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMu
MTAzNzU0WicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnIGlmIGRhdGFbJ1M6bG9n
LXJlcG9ydCddLmdldCgnUzpyZXZwcm8nKSBlbHNlICc8RDpjb21tZW50Pnt9PC9EOmNvbW1lbnQ+
XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxEOmNyZWF0b3ItZGlzcGxheW5hbWU+
e308L0Q6Y3JlYXRvci1kaXNwbGF5bmFtZT5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21taXQubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8Uzptb2RpZmllZC1wYXRoIG5vZGUta2lu
ZD0iZmlsZSIgdGV4dC1tb2RzPSJ0cnVlIiBwcm9wLW1vZHM9ImZhbHNlIj4ve2JyYW5jaH0vQ2hh
bmdlbG9nPC9TOm1vZGlmaWVkLXBhdGg+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzxTOm1vZGlmaWVkLXBhdGggbm9kZS1raW5kPSJmaWxlIiB0ZXh0LW1vZHM9InRydWUiIHByb3At
bW9kcz0iZmFsc2UiPi97YnJhbmNofS9maWxlLmNwcDwvUzptb2RpZmllZC1wYXRoPlxuJy5mb3Jt
YXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1jb21taXQuYnJhbmNo
IGlmIGNvbW1pdC5icmFuY2guc3BsaXQoJy8nKVswXSBpbiBbJ3RydW5rJywgJ3RhZ3MnXSBlbHNl
ICdicmFuY2hlcy97fScuZm9ybWF0KGNvbW1pdC5icmFuY2gpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkgaWYgJ1M6ZGlzY292ZXItY2hhbmdlZC1wYXRocycgaW4gZGF0YVsnUzpsb2ct
cmVwb3J0J10gZWxzZSAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICkgZm9yIGNvbW1pdCBp
biBjb21taXRzCisgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICkKKworICAg
ICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9yZW1vdGUvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLnNjbSBpbXBvcnQgU2NtCitmcm9t
IHdlYmtpdHNjbXB5LnJlbW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1v
dGUvc2NtLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHNp
eAorCitmcm9tIHdlYmtpdHNjbXB5LnNjbV9iYXNlIGltcG9ydCBTY21CYXNlCisKKworY2xhc3Mg
U2NtKFNjbUJhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3VybChjbHMsIHVy
bCk6CisgICAgICAgIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IHJlbW90ZQorCisgICAgICAgIGlm
IHJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKHVybCk6CisgICAgICAgICAgICByZXR1cm4gcmVtb3Rl
LlN2bih1cmwpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoIid7fScgaXMgbm90IGEga25vd24gU0NN
IHNlcnZlciIuZm9ybWF0KHVybCkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZf
YnJhbmNoZXM9Tm9uZSwgcHJvZF9icmFuY2hlcz1Ob25lKToKKyAgICAgICAgc3VwZXIoU2NtLCBz
ZWxmKS5fX2luaXRfXyhkZXZfYnJhbmNoZXM9ZGV2X2JyYW5jaGVzLCBwcm9kX2JyYW5jaGVzPXBy
b2RfYnJhbmNoZXMpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzaXguc3RyaW5n
X3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICd1cmwnIHRv
IGJlIGEgc3RyaW5nIHR5cGUsIG5vdCAne30nIi5mb3JtYXQodHlwZSh1cmwpKSkKKyAgICAgICAg
c2VsZi51cmwgPSB1cmwKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3JlbW90ZS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3N2bi5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9y
ZW1vdGUvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQ2IEBACisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYmlzZWN0CitpbXBvcnQgY2FsZW5k
YXIKK2ltcG9ydCBmYXN0ZW5lcnMKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCByZQor
aW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB4bWx0b2RpY3QKKworZnJv
bSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxv
ZywgcnVuLCBkZWNvcmF0b3JzCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90ZS5zY20gaW1wb3J0IFNj
bQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvciwgVmVyc2lvbgor
CisKK2NsYXNzIFN2bihTY20pOgorICAgIFVSTF9SRSA9IHJlLmNvbXBpbGUocidcQWh0dHBzPzov
L3N2bi4oP1A8aG9zdD5cUyspL3JlcG9zaXRvcnkvXFMrXFonKQorICAgIEhJU1RPUllfUkUgPSBy
ZS5jb21waWxlKGInPEQ6dmVyc2lvbi1uYW1lPig/UDxyZXZpc2lvbj5cZCspPC9EOnZlcnNpb24t
bmFtZT4nKQorICAgIENBQ0hFX1ZFUlNJT04gPSBWZXJzaW9uKDEpCisKKyAgICBAY2xhc3NtZXRo
b2QKKyAgICBkZWYgaXNfd2Vic2VydmVyKGNscywgdXJsKToKKyAgICAgICAgcmV0dXJuIFRydWUg
aWYgY2xzLlVSTF9SRS5tYXRjaCh1cmwpIGVsc2UgRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB1cmwsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5vbmUpOgorICAgICAg
ICBpZiB1cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAgIHVybCArPSAnLycKKyAgICAgICAgaWYg
bm90IHNlbGYuaXNfd2Vic2VydmVyKHVybCk6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2Vw
dGlvbigiJ3t9JyBpcyBub3QgYSB2YWxpZCBTVk4gd2Vic2VydmVyIi5mb3JtYXQodXJsKSkKKyAg
ICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyh1cmwsIGRldl9icmFuY2hlcz1kZXZfYnJh
bmNoZXMsIHByb2RfYnJhbmNoZXM9cHJvZF9icmFuY2hlcykKKworICAgICAgICBpZiBvcy5wYXRo
LmV4aXN0cyhzZWxmLl9jYWNoZV9wYXRoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICB3aXRoIHNlbGYuX2NhY2hlX2xvY2soKSwgb3BlbihzZWxmLl9jYWNoZV9wYXRoKSBhcyBm
aWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9IGpzb24ubG9h
ZChmaWxlKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAg
ICAgc2VsZi5fbWV0YWRhdGFfY2FjaGUgPSBkaWN0KHZlcnNpb249c3RyKHNlbGYuQ0FDSEVfVkVS
U0lPTikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9
IGRpY3QodmVyc2lvbj1zdHIoc2VsZi5DQUNIRV9WRVJTSU9OKSkKKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiBpc19zdm4oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAZGVjb3Jh
dG9ycy5NZW1vaXplKHRpbWVvdXQ9NjApCisgICAgZGVmIF9sYXRlc3Qoc2VsZik6CisgICAgICAg
IHJlc3BvbnNlID0gcmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nT1BUSU9O
UycsCisgICAgICAgICAgICB1cmw9c2VsZi51cmwsCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAg
ICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAg
ICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcx
JywKKyAgICAgICAgICAgIH0sIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+XG4nCisgICAgICAgICAgICAnPEQ6b3B0aW9ucyB4bWxuczpEPSJEQVY6Ij5cbicKKyAg
ICAgICAgICAgICcgICAgPEQ6YWN0aXZpdHktY29sbGVjdGlvbi1zZXQ+PC9EOmFjdGl2aXR5LWNv
bGxlY3Rpb24tc2V0PlxuJworICAgICAgICAgICAgJzwvRDpvcHRpb25zPlxuJywKKyAgICAgICAg
KQorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTVk4t
WW91bmdlc3QtUmV2JykpCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1GYWxzZSkK
KyAgICBkZWYgaW5mbyhzZWxmLCBicmFuY2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwgdGFnPU5vbmUp
OgorICAgICAgICBpZiB0YWcgYW5kIGJyYW5jaDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0Nhbm5vdCBzcGVjaWZ5IGJvdGggYnJhbmNoIGFuZCB0YWcnKQorICAgICAgICBpZiB0YWcg
YW5kIHJldmlzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHNwZWNp
ZnkgYm90aCBicmFuY2ggYW5kIHRhZycpCisKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAg
ICAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAg
ICAgIHJldmlzaW9uID0gc2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgICAgIGlmIG5vdCByZXZpc2lv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCByZXZpc2lv
bjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHRoZSBsYXRl
c3QgcmV2aXNpb24nKQorCisgICAgICAgIHVybCA9ICd7fSFzdm4vcnZyL3t9Jy5mb3JtYXQoc2Vs
Zi51cmwsIHJldmlzaW9uKQorICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCAhPSBzZWxmLmRl
ZmF1bHRfYnJhbmNoIGFuZCAnLycgbm90IGluIGJyYW5jaDoKKyAgICAgICAgICAgIHVybCA9ICd7
fS9icmFuY2hlcy97fScuZm9ybWF0KHVybCwgYnJhbmNoKQorICAgICAgICBlbGlmIHRhZzoKKyAg
ICAgICAgICAgIHVybCA9ICd7fS90YWdzL3t9Jy5mb3JtYXQodXJsLCB0YWcpCisgICAgICAgIGVs
aWYgYnJhbmNoOgorICAgICAgICAgICAgdXJsID0gJ3t9L3t9Jy5mb3JtYXQodXJsLCBicmFuY2gg
b3Igc2VsZi5kZWZhdWx0X2JyYW5jaCkKKworICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJl
cXVlc3QoCisgICAgICAgICAgICBtZXRob2Q9J1BST1BGSU5EJywKKyAgICAgICAgICAgIHVybD11
cmwsCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBl
JzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAn
LAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9Jzxw
cm9wZmluZCB4bWxucz0iREFWOiI+XG4nCisgICAgICAgICAgICAnICAgIDxwcm9wPlxuJworICAg
ICAgICAgICAgJyAgICAgICAgPHJlc291cmNldHlwZSB4bWxucz0iREFWOiIvPlxuJworICAgICAg
ICAgICAgJyAgICAgICAgPGdldGNvbnRlbnRsZW5ndGggeG1sbnM9IkRBVjoiLz5cbicKKyAgICAg
ICAgICAgICcgICAgICAgIDxkZWFkcHJvcC1jb3VudCB4bWxucz0iaHR0cDovL3N1YnZlcnNpb24u
dGlncmlzLm9yZy94bWxucy9kYXYvIi8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8dmVyc2lv
bi1uYW1lIHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRpb25k
YXRlIHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRvci1kaXNw
bGF5bmFtZSB4bWxucz0iREFWOiIvPlxuJworICAgICAgICAgICAgJyAgICA8L3Byb3A+XG4nCisg
ICAgICAgICAgICAnPC9wcm9wZmluZD5cbicsCisgICAgICAgICkKKyAgICAgICAgaWYgcmVzcG9u
c2Uuc3RhdHVzX2NvZGUgbm90IGluIFsyMDAsIDIwN106CisgICAgICAgICAgICByZXR1cm4ge30K
KworICAgICAgICByZXNwb25zZSA9IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KQorICAg
ICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmdldCgnRDptdWx0aXN0YXR1cycsIHJlc3BvbnNlKS5n
ZXQoJ0Q6cmVzcG9uc2UnLCBbXSkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAg
ICAgcmV0dXJuIHt9CisKKyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZVswXSBpZiBpc2luc3Rh
bmNlKHJlc3BvbnNlLCBsaXN0KSBlbHNlIHJlc3BvbnNlCisgICAgICAgIHJlc3BvbnNlID0gcmVz
cG9uc2VbJ0Q6cHJvcHN0YXQnXVswXVsnRDpwcm9wJ10KKworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBSZXYnOiByZXNwb25zZVsnbHAxOnZlcnNpb24tbmFtZSdd
LAorICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBBdXRob3InOiByZXNwb25zZVsnbHAxOmNyZWF0
b3ItZGlzcGxheW5hbWUnXSwKKyAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcgJy5q
b2luKHJlc3BvbnNlWydscDE6Y3JlYXRpb25kYXRlJ10uc3BsaXQoJ1QnKSkuc3BsaXQoJy4nKVsw
XSwKKyAgICAgICAgICAgICdSZXZpc2lvbic6IHJldmlzaW9uLAorICAgICAgICB9CisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CisgICAgICAgIHJldHVybiAn
dHJ1bmsnCisKKyAgICBkZWYgbGlzdChzZWxmLCBjYXRlZ29yeSk6CisgICAgICAgIHJldmlzaW9u
ID0gc2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAgICAgICAg
cmV0dXJuIFtdCisKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAg
ICAgICAgbWV0aG9kPSdQUk9QRklORCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9ydnIve30v
e30nLmZvcm1hdChzZWxmLnVybCwgcmV2aXNpb24sIGNhdGVnb3J5KSwKKyAgICAgICAgICAgIGhl
YWRlcnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAg
ICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAg
J0RFUFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0idXRmLTgiPz5cbicKKyAgICAgICAgICAgICAgICAnPHByb3BmaW5kIHhtbG5zPSJE
QVY6Ij5cbicKKyAgICAgICAgICAgICAgICAnICAgIDxwcm9wPjxyZXNvdXJjZXR5cGUgeG1sbnM9
IkRBVjoiLz48L3Byb3A+XG4nCisgICAgICAgICAgICAgICAgJzwvcHJvcGZpbmQ+XG4nLAorICAg
ICAgICApCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlIG5vdCBpbiBbMjAwLCAyMDdd
OgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcmVzcG9uc2VzID0geG1sdG9kaWN0
LnBhcnNlKHJlc3BvbnNlLnRleHQpCisgICAgICAgIHJlc3BvbnNlcyA9IHJlc3BvbnNlcy5nZXQo
J0Q6bXVsdGlzdGF0dXMnLCByZXNwb25zZXMpLmdldCgnRDpyZXNwb25zZScsIFtdKQorCisgICAg
ICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzcG9uc2UgaW4gcmVzcG9uc2VzOgorICAg
ICAgICAgICAgY2FuZGlkYXRlID0gcmVzcG9uc2VbJ0Q6aHJlZiddLnNwbGl0KCchc3ZuL3J2ci97
fS97fS8nLmZvcm1hdChyZXZpc2lvbiwgY2F0ZWdvcnkpKVstMV0ucnN0cmlwKCcvJykKKyAgICAg
ICAgICAgIGlmIG5vdCBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKGNhbmRpZGF0ZSkKKworICAgICAgICByZXR1cm4gcmVzdWx0
cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJyYW5jaGVzKHNlbGYpOgorICAgICAgICByZXR1
cm4gW3NlbGYuZGVmYXVsdF9icmFuY2hdICsgc2VsZi5saXN0KCdicmFuY2hlcycpCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGlzdCgn
dGFncycpCisKKyAgICBAcHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBk
ZWYgX2NhY2hlX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4odGVtcGZp
bGUuZ2V0dGVtcGRpcigpLCAnc3ZuLnt9Jy5mb3JtYXQoc2VsZi5VUkxfUkUubWF0Y2goc2VsZi51
cmwpLmdyb3VwKCdob3N0JykpLCAnd2Via2l0c2NtcHktY2FjaGUuanNvbicpCisKKyAgICBkZWYg
X2NhY2hlX2xvY2soc2VsZik6CisgICAgICAgIHJldHVybiBmYXN0ZW5lcnMuSW50ZXJQcm9jZXNz
TG9jayhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHNlbGYuX2NhY2hlX3BhdGgpLCAnY2Fj
aGUubG9jaycpKQorCisgICAgZGVmIF9jYWNoZV9yZXZpc2lvbnMoc2VsZiwgYnJhbmNoPU5vbmUp
OgorICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAg
ICBpc19kZWZhdWx0X2JyYW5jaCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAg
ICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGU6CisgICAgICAgICAgICBz
ZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdID0gWzBdIGlmIGlzX2RlZmF1bHRfYnJhbmNoIGVs
c2UgW10KKyAgICAgICAgcG9zID0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0pCisK
KyAgICAgICAgIyBJZiB3ZSBhcmVuJ3Qgb24gdGhlIGRlZmF1bHQgYnJhbmNoLCB3ZSB3aWxsIG5l
ZWQgdGhlIGRlZmF1bHQgYnJhbmNoIHRvIGRldGVybWluZSB3aGVuCisgICAgICAgICMgb3VyICBi
cmFuY2ggIGludGVyc2VjdHMgd2l0aCB0aGUgZGVmYXVsdCBicmFuY2guCisgICAgICAgIGlmIG5v
dCBpc19kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhi
cmFuY2g9c2VsZi5kZWZhdWx0X2JyYW5jaCkKKworICAgICAgICBkaWRfd2FybiA9IEZhbHNlCisg
ICAgICAgIGNvdW50ID0gMAorCisgICAgICAgIGxhdGVzdCA9IHNlbGYuX2xhdGVzdCgpCisgICAg
ICAgIHdpdGggcmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywK
KyAgICAgICAgICAgIHVybD0ne30hc3ZuL3J2ci97fS97fScuZm9ybWF0KAorICAgICAgICAgICAg
ICAgIHNlbGYudXJsLAorICAgICAgICAgICAgICAgIGxhdGVzdCwKKyAgICAgICAgICAgICAgICBi
cmFuY2ggaWYgaXNfZGVmYXVsdF9icmFuY2ggb3IgJy8nIGluIGJyYW5jaCBlbHNlICdicmFuY2hl
cy97fScuZm9ybWF0KGJyYW5jaCksCisgICAgICAgICAgICApLCBzdHJlYW09VHJ1ZSwKKyAgICAg
ICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94
bWwnLAorICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAg
ICAgICAgICAgJ0RFUFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPFM6bG9nLXJlcG9y
dCB4bWxuczpTPSJzdm46Ij5cbicKKyAgICAgICAgICAgICAgICAnPFM6c3RhcnQtcmV2aXNpb24+
e3JldmlzaW9ufTwvUzpzdGFydC1yZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAnPFM6ZW5k
LXJldmlzaW9uPjA8L1M6ZW5kLXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzpyZXZw
cm9wPnN2bjpkYXRlPC9TOnJldnByb3A+XG4nCisgICAgICAgICAgICAgICAgJzwvUzpsb2ctcmVw
b3J0PlxuJy5mb3JtYXQocmV2aXNpb249bGF0ZXN0KSwKKyAgICAgICAgKSBhcyByZXNwb25zZToK
KyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAg
ICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIGNvbnN0cnVjdCBicmFuY2ggaGlz
dG9yeSBmb3IgJ3t9JyIuZm9ybWF0KGJyYW5jaCkpCisKKyAgICAgICAgICAgIGZvciBsaW5lIGlu
IHJlc3BvbnNlLml0ZXJfbGluZXMoKToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuSElT
VE9SWV9SRS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBkaWRfd2Fy
bjoKKyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBp
ZiBjb3VudCA+IDEwMDA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygnQ2FjaGlu
ZyBjb21taXQgZGF0YSBmb3Ige30sIHRoaXMgd2lsbCB0YWtlIGEgZmV3IG1pbnV0ZXMuLi4nLmZv
cm1hdChicmFuY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGlkX3dhcm4gPSBUcnVlCisK
KyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkK
KyAgICAgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFu
Y2hdW3BvcyAtIDFdID09IHJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgICAgIGlmIG5vdCBpc19kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgcmV2aXNpb24gaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGVbc2VsZi5kZWZhdWx0X2JyYW5j
aF06CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hd
Lmluc2VydChwb3MsIHJldmlzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdLmluc2VydChwb3MsIHJl
dmlzaW9uKQorCisgICAgICAgIGlmIHNlbGYuX21ldGFkYXRhX2NhY2hlW3NlbGYuZGVmYXVsdF9i
cmFuY2hdWzBdID09IFswXToKKyAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlWydpZGVu
dGlmaWVyJ10gPSBsZW4oc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSkKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmRpcm5hbWUoc2Vs
Zi5fY2FjaGVfcGF0aCkpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGly
bmFtZShzZWxmLl9jYWNoZV9wYXRoKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fY2FjaGVfbG9j
aygpLCBvcGVuKHNlbGYuX2NhY2hlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAg
ICBqc29uLmR1bXAoc2VsZi5fbWV0YWRhdGFfY2FjaGUsIGZpbGUsIGluZGVudD00KQorICAgICAg
ICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb2coIkZhaWxl
ZCB0byB3cml0ZSBTVk4gY2FjaGUgdG8gJ3t9JyIuZm9ybWF0KHNlbGYuX2NhY2hlX3BhdGgpKQor
CisgICAgICAgIHJldHVybiBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdCisKKyAgICBkZWYg
X2JyYW5jaF9mb3Ioc2VsZiwgcmV2aXNpb24pOgorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3Rz
LnJlcXVlc3QoCisgICAgICAgICAgICBtZXRob2Q9J1JFUE9SVCcsCisgICAgICAgICAgICB1cmw9
J3t9IXN2bi9ydnIve30nLmZvcm1hdChzZWxmLnVybCwgcmV2aXNpb24pLAorICAgICAgICAgICAg
aGVhZGVycz17CisgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisg
ICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAg
ICAnREVQVEgnOiAnMScsCisgICAgICAgICAgICB9LCBkYXRhPSc8Uzpsb2ctcmVwb3J0IHhtbG5z
OlM9InN2bjoiPlxuJworICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lvbj57cmV2aXNp
b259PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzplbmQtcmV2aXNp
b24+e3JldmlzaW9ufTwvUzplbmQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgJzxTOmxp
bWl0PjE8L1M6bGltaXQ+XG4nCisgICAgICAgICAgICAgICAgJzxTOmRpc2NvdmVyLWNoYW5nZWQt
cGF0aHMvPlxuJworICAgICAgICAgICAgICAgICc8L1M6bG9nLXJlcG9ydD5cbicuZm9ybWF0KHJl
dmlzaW9uPXJldmlzaW9uKSwKKyAgICAgICAgKQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IGdl
dCBhIHZhbGlkIGFuc3dlciBmcm9tIHRoZSByZW1vdGUsIGJ1dCB3ZSBmb3VuZCBhIG1hdGNoaW5n
IGNhbmRpZGF0ZSwgd2UgcmV0dXJuIHRoYXQuCisgICAgICAgICMgVGhpcyBpcyBhIGJpdCByaXNr
eSBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBicmFuY2ggd2UgaGF2ZSBjYWNoZWQgaXMg
bm90IHRoZSBjYW5vbmljYWwgYnJhbmNoCisgICAgICAgICMgZm9yIGEgcmV2aXNpb24sIGJ1dCB0
aGlzIGlzIHByZXR0eSB1bmxpa2VseSBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgdGhlIG4gKyAx
IGxldmVsIGJyYW5jaCB0byBiZSBjYWNoZWQKKyAgICAgICAgIyBidXQgbm90IHRoZSBuIGxldmVs
IGJyYW5jaC4KKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAg
ICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9y
ICd7fSciLmZvcm1hdChyZXZpc2lvbikpCisKKyAgICAgICAgcGFydGlhbCA9IE5vbmUKKyAgICAg
ICAgaXRlbXMgPSB4bWx0b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dClbJ1M6bG9nLXJlcG9ydCdd
WydTOmxvZy1pdGVtJ10KKyAgICAgICAgZm9yIGdyb3VwIGluIChpdGVtcy5nZXQoJ1M6bW9kaWZp
ZWQtcGF0aCcsIFtdKSwgaXRlbXMuZ2V0KCdTOmFkZGVkLXBhdGgnLCBbXSkpOgorICAgICAgICAg
ICAgZm9yIGl0ZW0gaW4gZ3JvdXAgaWYgaXNpbnN0YW5jZShncm91cCwgbGlzdCkgZWxzZSBbZ3Jv
dXBdOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0aWFsOgorICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWFsID0gaXRlbVsnI3RleHQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBpdGVt
WycjdGV4dCddLnN0YXJ0c3dpdGgocGFydGlhbCk6CisgICAgICAgICAgICAgICAgICAgIHBhcnRp
YWwgPSBwYXJ0aWFsWzotMV0KKworICAgICAgICBjYW5kaWRhdGUgPSBwYXJ0aWFsLnNwbGl0KCcv
JylbMiBpZiBwYXJ0aWFsLnN0YXJ0c3dpdGgoJy9icmFuY2hlcycpIGVsc2UgMV0KKworICAgICAg
ICAjIFRhZ3MgYXJlIGEgdW5pcXVlIGNhc2UgZm9yIFNWTiwgYmVjYXVzZSB0aGV5J3JlIHRyZWF0
ZWQgYXMgYnJhbmNoZXMgaW4gbmF0aXZlIFNWTgorICAgICAgICBpZiBjYW5kaWRhdGUgPT0gJ3Rh
Z3MnOgorICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxbMTpdLnJzdHJpcCgnLycpCisgICAgICAg
IHJldHVybiBjYW5kaWRhdGUKKworICAgIGRlZiBfY29tbWl0X2NvdW50KHNlbGYsIHJldmlzaW9u
PU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVm
YXVsdF9icmFuY2gKKworICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIHJldmlz
aW9uIG5vdCBpbiBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdOgorICAgICAgICAgICAgICAg
IHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCAne30nIG9uICd7fSciLmZvcm1h
dChyZXZpc2lvbiwgYnJhbmNoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXNlY3QuYmlzZWN0X2xl
ZnQoc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSwgaW50KHJldmlzaW9uKSkKKyAgICAgICAg
aWYgYnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gbGVu
KHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0pCisgICAgICAgIHJldHVybiBzZWxmLl9jb21t
aXRfY291bnQocmV2aXNpb249c2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXVswXSwgYnJhbmNo
PXNlbGYuZGVmYXVsdF9icmFuY2gpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9Tm9uZSwg
cmV2aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5vbmUpOgor
ICAgICAgICBpZiBoYXNoOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIGRvZXMg
bm90IHN1cHBvcnQgR2l0IGhhc2hlcycpCisKKyAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCA9
IE5vbmUKKyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlm
IHJldmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZp
bmUgYm90aCByZXZpc2lvbiBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiB0YWc6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBh
bmQgaWRlbnRpZmllcicpCisKKyAgICAgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQsIGlkZW50
aWZpZXIsIHBhcnNlZF9icmFuY2ggPSBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmll
ciwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgICAgICBpZiBwYXJzZWRfYnJhbmNoOgorICAgICAg
ICAgICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHBhcnNlZF9icmFuY2g6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAi
Q2FsbGVyIHBhc3NlZCBib3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZp
ZWQgZGlmZmVyZW50IGJyYW5jaGVzICh7fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhbmNoLCBwYXJzZWRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyYW5jaCA9
IHBhcnNlZF9icmFuY2gKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaCBvciBzZWxmLmRlZmF1
bHRfYnJhbmNoCisKKyAgICAgICAgICAgIGlmIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNo
IGFuZCBwYXJzZWRfYnJhbmNoX3BvaW50OgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCdDYW5ub3QgcHJvdmlkZSBhIGJyYW5jaCBwb2ludCBmb3IgYSBjb21taXQgb24gdGhl
IGRlZmF1bHQgYnJhbmNoJykKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuX21ldGFkYXRhX2Nh
Y2hlLmdldChicmFuY2gsIFtdKSBvciBpZGVudGlmaWVyID49IGxlbihzZWxmLl9tZXRhZGF0YV9j
YWNoZS5nZXQoYnJhbmNoLCBbXSkpOgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaCAhPSBzZWxm
LmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lv
bnMoYnJhbmNoPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICAgICAgc2VsZi5fY2Fj
aGVfcmV2aXNpb25zKGJyYW5jaD1icmFuY2gpCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyID4g
bGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKSk6CisgICAgICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fubm90IGJlIGZvdW5kIG9u
IHRoZSBzcGVjaWZpZWQgYnJhbmNoIGluIHRoZSBjdXJyZW50IGNoZWNrb3V0Jy5mb3JtYXQoaWRl
bnRpZmllcikpCisKKyAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgPD0gMDoKKyAgICAgICAgICAg
ICAgICBpZiBicmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lsbGVnYWwgbmVnYXRpdmUgaWRlbnRpZmllciBvbiB0
aGUgZGVmYXVsdCBicmFuY2gnKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9j
b21taXRfY291bnQoYnJhbmNoPWJyYW5jaCkgKyBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAg
aWYgaWRlbnRpZmllciA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0
aW9uKCdJZGVudGlmaWVyIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBzcGVjaWZpZWQgYnJhbmNoJykK
KworICAgICAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuZGVmYXVsdF9icmFuY2gKKworICAgICAg
ICAgICAgcmV2aXNpb24gPSBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdW2lkZW50aWZpZXJd
CisgICAgICAgICAgICBpbmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBicmFuY2g9YnJhbmNo
LCByZXZpc2lvbj1yZXZpc2lvbikKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9m
b3IocmV2aXNpb24pCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0
KGJyYW5jaCwgW10pIG9yIGlkZW50aWZpZXIgPj0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlLmdl
dChicmFuY2gsIFtdKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJy
YW5jaD1icmFuY2gpCisKKyAgICAgICAgZWxpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIGJy
YW5jaDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJv
dGggYnJhbmNoIGFuZCByZXZpc2lvbicpCisgICAgICAgICAgICBpZiB0YWc6CisgICAgICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBhbmQgcmV2aXNp
b24nKQorICAgICAgICAgICAgcmV2aXNpb24gPSBDb21taXQuX3BhcnNlX3JldmlzaW9uKHJldmlz
aW9uLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9m
b3IocmV2aXNpb24pCisgICAgICAgICAgICBpbmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBi
cmFuY2g9YnJhbmNoLCByZXZpc2lvbj1yZXZpc2lvbikKKworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgaWYgYnJhbmNoIGFuZCB0YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cignQ2Fubm90IGRlZmluZSBib3RoIGJyYW5jaCBhbmQgdGFnJykKKworICAgICAgICAgICAgYnJh
bmNoID0gTm9uZSBpZiB0YWcgZWxzZSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAg
ICAgICAgICAgaW5mbyA9IHNlbGYuaW5mbyh0YWc9dGFnKSBpZiB0YWcgZWxzZSBzZWxmLmluZm8o
YnJhbmNoPWJyYW5jaCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvOgorICAgICAgICAgICAgICAg
IHJhaXNlIHNlbGYuRXhjZXB0aW9uKCIne30nIGlzIG5vdCBhIHJlY29nbml6ZWQge30iLmZvcm1h
dCgKKyAgICAgICAgICAgICAgICAgICAgdGFnIG9yIGJyYW5jaCwKKyAgICAgICAgICAgICAgICAg
ICAgJ3RhZycgaWYgdGFnIGVsc2UgJ2JyYW5jaCcsCisgICAgICAgICAgICAgICAgKSkKKyAgICAg
ICAgICAgIHJldmlzaW9uID0gaW50KGluZm9bJ0xhc3QgQ2hhbmdlZCBSZXYnXSkKKyAgICAgICAg
ICAgIGlmIGJyYW5jaCAhPSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgIGJy
YW5jaCA9IHNlbGYuX2JyYW5jaF9mb3IocmV2aXNpb24pCisKKyAgICAgICAgZGF0ZSA9IGRhdGV0
aW1lLnN0cnB0aW1lKGluZm9bJ0xhc3QgQ2hhbmdlZCBEYXRlJ10sICclWS0lbS0lZCAlSDolTTol
UycpCisKKyAgICAgICAgaWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICBpZiBicmFuY2gg
IT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBhbmQgcmV2aXNpb24gPiBzZWxmLl9tZXRhZGF0YV9jYWNo
ZS5nZXQoc2VsZi5kZWZhdWx0X2JyYW5jaCwgWzBdKVstMV06CisgICAgICAgICAgICAgICAgc2Vs
Zi5fY2FjaGVfcmV2aXNpb25zKGJyYW5jaD1zZWxmLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAg
ICAgaWYgcmV2aXNpb24gbm90IGluIHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtd
KToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPWJyYW5jaCkK
KyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9jb21taXRfY291bnQocmV2aXNpb249cmV2
aXNpb24sIGJyYW5jaD1icmFuY2gpCisKKyAgICAgICAgYnJhbmNoX3BvaW50ID0gTm9uZSBpZiBi
cmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBlbHNlIHNlbGYuX2NvbW1pdF9jb3VudChicmFu
Y2g9YnJhbmNoKQorICAgICAgICBpZiBicmFuY2hfcG9pbnQgYW5kIHBhcnNlZF9icmFuY2hfcG9p
bnQgYW5kIGJyYW5jaF9wb2ludCAhPSBwYXJzZWRfYnJhbmNoX3BvaW50OgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgJ2JyYW5jaF9wb2ludCcgZG9lcyBub3QgbWF0Y2gg
YnJhbmNoIHBvaW50IG9mIHNwZWNpZmllZCBicmFuY2giKQorCisgICAgICAgIHJlc3BvbnNlID0g
cmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAgICAgICAg
ICAgIHVybD0ne30hc3ZuL3J2ci97fScuZm9ybWF0KHNlbGYudXJsLCByZXZpc2lvbiksCisgICAg
ICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQv
eG1sJywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAg
ICAgICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9JzxTOmxvZy1yZXBv
cnQgeG1sbnM6Uz0ic3ZuOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZp
c2lvbj57cmV2aXNpb259PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICAg
ICAnPFM6ZW5kLXJldmlzaW9uPntyZXZpc2lvbn08L1M6ZW5kLXJldmlzaW9uPlxuJworICAgICAg
ICAgICAgICAgICAgICAnPFM6bGltaXQ+MTwvUzpsaW1pdD5cbicKKyAgICAgICAgICAgICAgICAg
ICAgJzwvUzpsb2ctcmVwb3J0PlxuJy5mb3JtYXQocmV2aXNpb249cmV2aXNpb24pLAorICAgICAg
ICApCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgorICAgICAgICAg
ICAgcmVzcG9uc2UgPSB4bWx0b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dCkKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVzcG9uc2UuZ2V0KCdTOmxvZy1yZXBvcnQnLCB7fSkuZ2V0KCdTOmxvZy1p
dGVtJykKKworICAgICAgICAgICAgbmFtZSA9IHJlc3BvbnNlLmdldCgnRDpjcmVhdG9yLWRpc3Bs
YXluYW1lJykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZXNwb25zZS5nZXQoJ0Q6Y29tbWVudCcs
IE5vbmUpCisgICAgICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbignRmFpbGVkIHRvIGZpbmQgY3JlYXRvciBuYW1lJykKKworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5sb2coJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHJlbW90ZSwg
Y2Fubm90IGNvbXB1dGUgY29tbWl0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbWVzc2FnZSA9IE5v
bmUKKyAgICAgICAgICAgIG5hbWUgPSBpbmZvWydMYXN0IENoYW5nZWQgQXV0aG9yJ10KKworICAg
ICAgICBhdXRob3IgPSBDb250cmlidXRvci5ieV9lbWFpbC5nZXQoCisgICAgICAgICAgICBuYW1l
LAorICAgICAgICAgICAgQ29udHJpYnV0b3IuYnlfbmFtZS5nZXQoCisgICAgICAgICAgICAgICAg
bmFtZSwKKyAgICAgICAgICAgICAgICBDb250cmlidXRvcihuYW1lPW5hbWUsIGVtYWlscz1bbmFt
ZV0gaWYgJ0AnIGluIG5hbWUgZWxzZSBbXSksCisgICAgICAgICAgICApLAorICAgICAgICApCisK
KyAgICAgICAgcmV0dXJuIENvbW1pdCgKKyAgICAgICAgICAgIHJldmlzaW9uPWludChyZXZpc2lv
biksCisgICAgICAgICAgICBicmFuY2g9YnJhbmNoLAorICAgICAgICAgICAgaWRlbnRpZmllcj1p
ZGVudGlmaWVyLAorICAgICAgICAgICAgYnJhbmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAg
ICAgICAgIHRpbWVzdGFtcD1pbnQoY2FsZW5kYXIudGltZWdtKGRhdGUudGltZXR1cGxlKCkpKSwK
KyAgICAgICAgICAgIGF1dGhvcj1hdXRob3IsCisgICAgICAgICAgICBtZXNzYWdlPW1lc3NhZ2Us
CisgICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyNjk0OTEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcs
MTAgKzI3LDEwIEBAIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRl
dGltZQogZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0
c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWws
IG1vY2tzLCByZW1vdGUKIAogCi1jbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2Ns
YXNzIFRlc3RMb2NhbFN2bih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aCA9ICcvbW9jay9y
ZXBvc2l0b3J5JwogCiAgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgpAQCAtMjE3LDMgKzIx
Nyw4NyBAQCBjbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCg5LCByZXBvc2l0b3J5LmNoZWNrb3V0KCd0YWctMScpLnJldmlzaW9u
KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCByZXBvc2l0b3J5LmNvbW1pdCgpLnJl
dmlzaW9uKQorCisKK2NsYXNzIFRlc3RSZW1vdGVTdm4odW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IHJlbW90ZSA9ICdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JworCisg
ICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJl
bW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkv
d2Via2l0JyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3RlLlN2bi5pc193
ZWJzZXJ2ZXIoJ2h0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdCcpLCBUcnVl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRw
czovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Jy
YW5jaGVzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVtb3RlLlN2bihzZWxmLnJl
bW90ZSkuYnJhbmNoZXMsCisgICAgICAgICAgICAgICAgWyd0cnVuaycsICdicmFuY2gtYScsICdi
cmFuY2gtYiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdGFncyhzZWxmKToKKyAg
ICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgICAgIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLnRhZ3MsCisgICAg
ICAgICAgICAgICAgWyd0YWctMScsICd0YWctMiddLAorICAgICAgICAgICAgKQorCisgICAgZGVm
IHRlc3Rfc2NtX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZW1vdGUuU3Zu
KHNlbGYucmVtb3RlKS5pc19zdm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtb3RlLlN2
bihzZWxmLnJlbW90ZSkuaXNfZ2l0KQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RF
cXVhbCh7CisgICAgICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBBdXRob3InOiAnamJlZGFyZEBh
cHBsZS5jb20nLAorICAgICAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcyMDIwLTEw
LTAyIDExOjU4OjIwJywKKyAgICAgICAgICAgICAgICAnTGFzdCBDaGFuZ2VkIFJldic6ICc2JywK
KyAgICAgICAgICAgICAgICAnUmV2aXNpb24nOiAxMCwKKyAgICAgICAgICAgIH0sIHJlbW90ZS5T
dm4oc2VsZi5yZW1vdGUpLmluZm8oKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbihz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcxQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1p
dChyZXZpc2lvbj0xKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyQHRydW5rJywg
c3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0yKSkpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjFAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxm
LnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJzNAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9u
PTQpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYicsIHN0cihy
ZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249NSkpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnNEB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5j
b21taXQocmV2aXNpb249NikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJy
YW5jaC1hJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj03KSkp
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIocmVtb3Rl
LlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTgpKSkKKworICAgICAgICAgICAgIyBP
dXQtb2YtYm91bmRzIGNvbW1pdAorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhy
ZW1vdGUuU3ZuLkV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249MTEpKQorCisgICAg
ZGVmIHRlc3RfY29tbWl0X2Zyb21fYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJl
bW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAdHJ1bmsnLCBzdHIo
cmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGJyYW5jaD0ndHJ1bmsnKSkpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxm
LnJlbW90ZSkuY29tbWl0KGJyYW5jaD0nYnJhbmNoLWEnKSkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29t
bWl0KGJyYW5jaD0nYnJhbmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyKHNlbGYp
OgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMSwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzFA
dHJ1bmsnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcmVtb3Rl
LlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzJAdHJ1bmsnKS5yZXZpc2lvbikK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSku
Y29tbWl0KGlkZW50aWZpZXI9JzIuMUBicmFuY2gtYScpLnJldmlzaW9uKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCg0LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRp
Zmllcj0nM0B0cnVuaycpLnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1
LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1i
JykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIHJlbW90ZS5Tdm4o
c2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QHRydW5rJykucmV2aXNpb24pCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1p
dChpZGVudGlmaWVyPScyLjJAYnJhbmNoLWEnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoOCwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9
JzIuM0BicmFuY2gtYicpLnJldmlzaW9uKQorCisgICAgZGVmIHRlc3Rfbm9uX2Nhbm5vbmljYWxf
aWRlbnRpZmllcnMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYu
cmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJzFAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29t
bWl0KGlkZW50aWZpZXI9Jy0xQGJyYW5jaC1hJykpKQorCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcyQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVu
dGlmaWVyPScwQGJyYW5jaC1iJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMUB0
cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFA
YnJhbmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF90YWcoc2VsZik6CisgICAgICAgIHdpdGggbW9j
a3MucmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCByZW1vdGUu
U3ZuKHNlbGYucmVtb3RlKS5jb21taXQodGFnPSd0YWctMScpLnJldmlzaW9uKQorCisgICAgZGVm
IHRlc3RfdGFnX3ByZXZpb3VzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4o
KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIuMkB0YWdzL3RhZy0xJykucmV2aXNpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414378</attachid>
            <date>2020-11-17 13:22:18 -0800</date>
            <delta_ts>2020-11-17 13:27:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201117132217.patch</filename>
            <type>text/plain</type>
            <size>51681</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTkyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTExLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4ODI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTMwNDQ4NT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBpbnRl
cmFjdCB3aXRoIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHN2biBjb21tYW5k
LiBUaGlzIGlzIHVzZWZ1bAorICAgICAgICBmb3Igc2VydmljZXMgaG9zdGVkIGluIGVudmlyb25t
ZW50cyB3aGVyZSBpbnN0YWxsaW5nIGJpbmFyaWVzIGlzIGJ1cmRlbnNvbWUsIG9yIGluIGNhc2Vz
IHdoZXJlCisgICAgICAgIHRvb2xzIGFyZSBydW5uaW5nIHdpdGhvdXQgYSBjaGVja291dC4KKwor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19p
bml0X18ucHk6IEJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weToKKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGU6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tz
L3JlbW90ZS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weTogQWRkZWQuCisgICAg
ICAgIChTdm4pOiBJbnRlcmFjdCB3aXRoIGEgcmVtb3RlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSB3
aXRob3V0IHVzaW5nIHRoZSBzdm4gY29tbWFuZC4KKyAgICAgICAgKFN2bi5pc193ZWJzZXJ2ZXIp
OiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgdXJsIG1hdGNoZXMgdGhlIHBhdHRlcm4gZm9yIGEgU3Vi
dmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgIChTdm4uX19pbml0X18pOgorICAgICAgICAoU3ZuLmlz
X3N2bik6CisgICAgICAgIChTdm4uX2xhdGVzdCk6IFJldHVybiB0aGUgbGF0ZXN0IHJldmlzaW9u
LgorICAgICAgICAoU3ZuLmluZm8pOiBSZXR1cm4gdGhlIGJpdHMgb2YgdGhlIGBzdm4gaW5mb2Ag
Y29tbWFuZCB0aGF0IGFyZSB1c2VkIGluIGNvZGUuCisgICAgICAgIChTdm4uZGVmYXVsdF9icmFu
Y2gpOgorICAgICAgICAoU3ZuLmxpc3QpOgorICAgICAgICAoU3ZuLmJyYW5jaGVzKTogTGlzdCBh
bGwgYnJhbmNoZXMuCisgICAgICAgIChTdm4udGFncyk6IExpc3QgYWxsIHRhZ3MuCisgICAgICAg
IChTdm4uX2NhY2hlX3BhdGgpOiBSZXR1cm4gcGF0aCB0byBqc29uIGNhY2hlLgorICAgICAgICAo
U3ZuLl9jYWNoZV9sb2NrKTogRmlsZXN5c3RlbSBsb2NrIHVzZWQgdG8gcHJldmVudCBjb250ZW50
aW9uIG92ZXIgdGhlIGpzb24gY2FjaGUsIHRoaXMKKyAgICAgICAgaXMgcGFydGljdWxhcmx5IGlt
cG9ydGFudCBkdXJpbmcgdGVzdGluZy4KKyAgICAgICAgKFN2bi5fY2FjaGVfcmV2aXNpb25zKTog
Q2FjaGUgdGhlIGlkZW50aWZpZXIvcmV2aXNpb24gbWFwcGluZy4KKyAgICAgICAgKFN2bi5fYnJh
bmNoX2Zvcik6IEdpdmVuIGEgY29tbWl0LCBkZXRlcm1pbmUgd2hpY2ggYnJhbmNoIHRoYXQgY29t
bWl0IGlzIG9uLgorICAgICAgICAoU3ZuLl9jb21taXRfY291bnQpOiBEZXRlcm1pbmUgdGhlIGFt
b3VudCBvZiBjb21taXRzIG9uIGEgYnJhbmNoIHNpbmNlIGJyYW5jaGluZy4KKyAgICAgICAgKFN2
bi5jb21taXQpOiBSZXR1cm4gYSBjb21taXQgb2JqZWN0IGdpdmVuIGEgcmV2aXNpb24sIGJyYW5j
aCwgaWRlbnRpZmllciBvciB0YWcuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90
ZS9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6
IEdpdmVuIGEgVVJMLCBhdHRlbXB0IHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgcmVtb3RlIEFQ
SSBpcyBhdmFpbGFibGUuCisgICAgICAgIChTY20uX19pbml0X18pOgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9zdm4ucHk6
IEFkZGVkLgorICAgICAgICAoU3ZuKTogTW9jayByZXF1ZXN0cyBuZWVkZWQgdG8gaW50ZXJhY3Qg
d2l0aCBhIHJlbW90ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuCisgICAgICAgIChTdm4ubGF0ZXN0
KTogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24gYW55IGJyYW5jaC4KKyAgICAgICAg
KFN2bi5icmFuY2hlcyk6IFJldHVybiBicmFuY2hlcyBhdCBzb21lIHJldmlzaW9uLgorICAgICAg
ICAoU3ZuLnRhZ3MpOiBSZXR1cm4gdGFncyBhdCBzb21lIHJldmlzaW9uLgorICAgICAgICAoU3Zu
LnJhbmdlKTogR2l2ZSBhIHN0YXJ0IGFuZCBlbmQgcmV2aXNpb24sIGFsb25nIHdpdGggYSB0YWcg
b3IgYnJhbmNoLAorICAgICAgICByZXR1cm4gYWxsIGNvbW1pdHMgaW4gdGhhdCByYW5nZS4KKyAg
ICAgICAgKFN2bi5yZXF1ZXN0KTogSGFuZGxlIGEgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRv
IGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3QucHk6CisgICAgICAgIChUZXN0TG9j
YWxTdm4pOiBNb3ZlZCBmcm9tIFRlc3RTdm4uCisgICAgICAgIChUZXN0UmVtb3RlU3ZuKTogQWRk
ZWQuCisgICAgICAgIChUZXN0U3ZuKTogTW92ZWQgdG8gVGVzdExvY2FsU3ZuLgorCiAyMDIwLTEx
LTE3ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAgICAgQmlnIFN1ciB0
ZXN0ZXJzIGZhaWwgdG8gZmluZCBwcm9wZXIgYXJjaGl2ZXMgZHVlIHRvIGFyY2hpdGVjdHVyZSBr
ZXlzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTkyMCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAg
ICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJr
aXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQog
Ci12ZXJzaW9uID0gVmVyc2lvbigwLCAzLCAxKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMCkK
IAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIsIDgs
IDEpLCBweXBpX25hbWU9J3B5dGhvbi1kYXRldXRpbCcpKQogCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9tb2Nrcy9fX2luaXRfXy5weQkocmV2aXNpb24gMjY5OTIwKQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0IEBACiAjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIGZyb20gd2Via2l0c2NtcHkubW9ja3MgaW1wb3J0IGxv
Y2FsCitmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzIGltcG9ydCByZW1vdGUKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2lu
aXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVt
b3RlL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0c2NtcHkubW9ja3MucmVt
b3RlLnN2biBpbXBvcnQgU3ZuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvc3ZuLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9z
dm4ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM4MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB4bWx0b2RpY3QKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBv
cnQgT3JkZXJlZERpY3QKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgQ29u
dHJpYnV0b3IsIHJlbW90ZSBhcyBzY21yZW1vdGUKKworCitjbGFzcyBTdm4obW9ja3MuUmVxdWVz
dHMpOgorICAgIHRvcCA9IE5vbmUKKyAgICBSRVZJU0lPTl9SRVFVRVNUX1JFID0gcmUuY29tcGls
ZShyJ3N2bi9ydnIvKD9QPHJldmlzaW9uPlxkKykoLyg/UDxjYXRlZ29yeT5cUyspKT8kJykKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZW1vdGU9J3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkv
d2Via2l0Jyk6CisgICAgICAgIGlmIG5vdCBzY21yZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcignaHR0
cHM6Ly97fScuZm9ybWF0KHJlbW90ZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
Int9IiBpcyBub3QgYSB2YWxpZCBTdm4gcmVtb3RlJy5mb3JtYXQocmVtb3RlKSkKKworICAgICAg
ICBzdXBlcihTdm4sIHNlbGYpLl9faW5pdF9fKHJlbW90ZS5zcGxpdCgnLycpWzBdKQorICAgICAg
ICBpZiByZW1vdGVbLTFdICE9ICcvJzoKKyAgICAgICAgICAgIHJlbW90ZSArPSAnLycKKyAgICAg
ICAgc2VsZi5yZW1vdGUgPSByZW1vdGUKKyAgICAgICAgc2VsZi5fY2FjaGVfY29udGVudHMgPSBO
b25lCisgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQoc2NtcmVtb3RlLlN2bignaHR0cDovL3t9
Jy5mb3JtYXQoc2VsZi5yZW1vdGUpKS5fY2FjaGVfbG9jaygpKQorCisgICAgICAgICMgUHJvdmlk
ZSBhIHJlYXNvbmFibGUgc2V0IG9mIGNvbW1pdHMgdG8gdGVzdCBhZ2FpbnN0CisgICAgICAgIGNv
bnRyaWJ1dG9yID0gQ29udHJpYnV0b3IobmFtZT0nSm9uYXRoYW4gQmVkYXJkJywgZW1haWxzPVsn
amJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgc2VsZi5jb21taXRzID0geworICAgICAgICAg
ICAgJ3RydW5rJzogWworICAgICAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcj0nMUB0cnVuaycsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTEs
CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wPTE2MDE2NjAxMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
JzFzdCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPScyQHRydW5rJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNp
b249MiwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAg
ICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MTEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZT0nMm5kIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9JzNAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbj00LAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAg
ICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYzMTAwLAorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPSc0dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nNEB0cnVuaycsCisgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uPTYsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwK
KyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjUxMDAsCisgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9JzZ0aCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgIF0sICdicmFuY2gtYSc6IFsKKyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9JzIuMUBicmFuY2gtYScsCisgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uPTMsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwK
KyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjIxMDAsCisgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9JzNyZCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0
KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjJAYnJhbmNoLWEnLAorICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbj03LAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29u
dHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY2MTAwLAorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSc3dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAg
ICksCisgICAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICAgIHNlbGYuY29tbWl0c1snYnJh
bmNoLWInXSA9IFsKKyAgICAgICAgICAgIHNlbGYuY29tbWl0c1snYnJhbmNoLWEnXVswXSwgQ29t
bWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzIuMkBicmFuY2gtYicsCisgICAgICAg
ICAgICAgICAgcmV2aXNpb249NSwKKyAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3Is
CisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjQxMDAsCisgICAgICAgICAgICAgICAg
bWVzc2FnZT0nNXRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPScyLjNAYnJhbmNoLWInLAorICAgICAgICAgICAgICAgIHJldmlz
aW9uPTgsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcD0xNjAxNjY3MTAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9Jzh0aCBj
b21taXRcbicsCisgICAgICAgICAgICApLAorICAgICAgICBdCisKKyAgICAgICAgc2VsZi5jb21t
aXRzWyd0YWdzL3RhZy0xJ10gPSBbCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1h
J11bMF0sCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1hJ11bMV0sIENvbW1pdCgK
KyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjNAdGFncy90YWctMScsCisgICAgICAgICAg
ICAgICAgcmV2aXNpb249OSwKKyAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisg
ICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgxMDAsCisgICAgICAgICAgICAgICAgbWVz
c2FnZT0nOXRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICAgICAg
c2VsZi5jb21taXRzWyd0YWdzL3RhZy0yJ10gPSBbCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNb
J2JyYW5jaC1iJ11bMF0sCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1iJ11bMV0s
CisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1iJ11bMl0sIENvbW1pdCgKKyAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyPScyLjRAdGFncy90YWctMicsCisgICAgICAgICAgICAgICAg
cmV2aXNpb249MTAsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY5MTAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9
JzEwdGggY29tbWl0XG4nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorCisgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2VudGVyX18oKQorCisg
ICAgICAgIGNhY2hlX3BhdGggPSBzY21yZW1vdGUuU3ZuKCdodHRwOi8ve30nLmZvcm1hdChzZWxm
LnJlbW90ZSkpLl9jYWNoZV9wYXRoCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhY2hlX3Bh
dGgpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGNhY2hlX3BhdGgsICdyJykgYXMgY2FjaGU6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfY29udGVudHMgPSBjYWNoZS5yZWFkKCkKKyAgICAg
ICAgICAgIG9zLnJlbW92ZShjYWNoZV9wYXRoKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAg
ICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY2FjaGVfcGF0
aCA9IHNjbXJlbW90ZS5Tdm4oJ2h0dHA6Ly97fScuZm9ybWF0KHNlbGYucmVtb3RlKSkuX2NhY2hl
X3BhdGgKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY2FjaGVfcGF0aCk6CisgICAgICAgICAg
ICBvcy5yZW1vdmUoY2FjaGVfcGF0aCkKKyAgICAgICAgaWYgc2VsZi5fY2FjaGVfY29udGVudHM6
CisgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVfcGF0aCwgJ3cnKSBhcyBjYWNoZToKKyAgICAg
ICAgICAgICAgICBjYWNoZS53cml0ZShzZWxmLl9jYWNoZV9jb250ZW50cykKKworICAgICAgICBz
dXBlcihTdm4sIHNlbGYpLl9fZXhpdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBsYXRl
c3Qoc2VsZik6CisgICAgICAgIGxhdGVzdCA9IHNlbGYuY29tbWl0c1sndHJ1bmsnXVstMV0KKyAg
ICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmNvbW1pdHMudmFsdWVzKCk6CisgICAgICAgICAgICBm
b3IgY29tbWl0IGluIGJyYW5jaDoKKyAgICAgICAgICAgICAgICBpZiBjb21taXQucmV2aXNpb24g
PiBsYXRlc3QucmV2aXNpb246CisgICAgICAgICAgICAgICAgICAgIGxhdGVzdCA9IGNvbW1pdAor
ICAgICAgICByZXR1cm4gbGF0ZXN0CisKKyAgICBkZWYgYnJhbmNoZXMoc2VsZiwgcmV2aXNpb249
Tm9uZSk6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb24gb3Igc2VsZi5sYXRlc3QoKQorICAg
ICAgICBicmFuY2hlcyA9IHNldCgpCisgICAgICAgIGZvciBicmFuY2gsIGNvbW1pdHMgaW4gc2Vs
Zi5jb21taXRzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6Cisg
ICAgICAgICAgICAgICAgaWYgY29tbWl0LnJldmlzaW9uIDw9IHJldmlzaW9uIGFuZCBub3QgY29t
bWl0LmJyYW5jaC5zdGFydHN3aXRoKCd0YWdzJykgYW5kIGNvbW1pdC5icmFuY2ggIT0gJ3RydW5r
JzoKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMuYWRkKGNvbW1pdC5icmFuY2gpCisgICAg
ICAgIHJldHVybiBzb3J0ZWQoYnJhbmNoZXMpCisKKyAgICBkZWYgdGFncyhzZWxmLCByZXZpc2lv
bj1Ob25lKToKKyAgICAgICAgcmV2aXNpb24gPSByZXZpc2lvbiBvciBzZWxmLmxhdGVzdCgpCisg
ICAgICAgIHRhZ3MgPSBzZXQoKQorICAgICAgICBmb3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYu
Y29tbWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAg
ICAgICAgICAgICAgIGlmIGNvbW1pdC5yZXZpc2lvbiA8PSByZXZpc2lvbiBhbmQgY29tbWl0LmJy
YW5jaC5zdGFydHN3aXRoKCd0YWdzJyk6CisgICAgICAgICAgICAgICAgICAgIHRhZ3MuYWRkKGNv
bW1pdC5icmFuY2gpCisgICAgICAgIHJldHVybiBzb3J0ZWQodGFncykKKworICAgIGRlZiByYW5n
ZShzZWxmLCBjYXRlZ29yeT1Ob25lLCBzdGFydD1Ob25lLCBlbmQ9Tm9uZSk6CisgICAgICAgIHN0
YXJ0ID0gc3RhcnQgb3Igc2VsZi5sYXRlc3QoKQorICAgICAgICBlbmQgPSBlbmQgb3IgMQorCisg
ICAgICAgIGlmIGNhdGVnb3J5IGFuZCBjYXRlZ29yeS5zdGFydHN3aXRoKCdicmFuY2hlcy8nKToK
KyAgICAgICAgICAgIGNhdGVnb3J5ID0gY2F0ZWdvcnkuc3BsaXQoJy8nKVstMV0KKworICAgICAg
ICBpZiBub3QgY2F0ZWdvcnk6CisgICAgICAgICAgICBmb3IgY29tbWl0cyBpbiBzZWxmLmNvbW1p
dHMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAg
ICAgICAgICAgICAgICAgICBpZiBjb21taXQucmV2aXNpb24gPT0gc3RhcnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXRlZ29yeSA9IGNvbW1pdC5icmFuY2gKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IGNhdGVnb3J5OgorICAgICAgICAgICAgcmV0
dXJuIFtdCisKKyAgICAgICAgcmVzdWx0ID0gW2NvbW1pdCBmb3IgY29tbWl0IGluIHJldmVyc2Vk
KHNlbGYuY29tbWl0c1tjYXRlZ29yeV0pXQorICAgICAgICBpZiBzZWxmLmNvbW1pdHNbY2F0ZWdv
cnldWzBdLmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBbY29tbWl0IGZvciBj
b21taXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzWyd0cnVuayddWzpzZWxmLmNvbW1pdHNbY2F0
ZWdvcnldWzBdLmJyYW5jaF9wb2ludF0pXQorCisgICAgICAgIGZvciBpbmRleCBpbiByZXZlcnNl
ZChyYW5nZShsZW4ocmVzdWx0KSkpOgorICAgICAgICAgICAgaWYgcmVzdWx0W2luZGV4XS5yZXZp
c2lvbiA8IGVuZDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbOmluZGV4XQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiByZXN1bHRbaW5kZXhdLnJldmlz
aW9uID4gc3RhcnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W2luZGV4Ol0KKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBy
ZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBkYXRhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAg
aWYgbm90IHVybC5zdGFydHN3aXRoKCdodHRwOi8vJykgYW5kIG5vdCB1cmwuc3RhcnRzd2l0aCgn
aHR0cHM6Ly8nKToKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQo
dXJsKQorCisgICAgICAgIGRhdGEgPSB4bWx0b2RpY3QucGFyc2UoZGF0YSkgaWYgZGF0YSBlbHNl
IE5vbmUKKyAgICAgICAgc3RyaXBwZWRfdXJsID0gdXJsLnNwbGl0KCc6Ly8nKVstMV0KKworICAg
ICAgICAjIExhdGVzdCByZXZpc2lvbgorICAgICAgICBpZiBtZXRob2QgPT0gJ09QVElPTlMnIGFu
ZCBzdHJpcHBlZF91cmwgPT0gc2VsZi5yZW1vdGUgYW5kIGRhdGEgPT0gT3JkZXJlZERpY3QoKAor
ICAgICAgICAgICAgKCdEOm9wdGlvbnMnLCBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAgICAg
KCdAeG1sbnM6RCcsICdEQVY6JyksCisgICAgICAgICAgICAgICAgKCdEOmFjdGl2aXR5LWNvbGxl
Y3Rpb24tc2V0JywgTm9uZSksCisgICAgICAgICAgICApKSksCisgICAgICAgICkpOgorICAgICAg
ICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21UZXh0KAorICAgICAgICAgICAgICAgIHVy
bD11cmwsCisgICAgICAgICAgICAgICAgZGF0YT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOm9wdGlvbnMtcmVzcG9uc2Ug
eG1sbnM6RD0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDphY3Rpdml0eS1jb2xs
ZWN0aW9uLXNldD48RDpocmVmPi9yZXBvc2l0b3J5L3dlYmtpdC8hc3ZuL2FjdC88L0Q6aHJlZj48
L0Q6YWN0aXZpdHktY29sbGVjdGlvbi1zZXQ+PC9EOm9wdGlvbnMtcmVzcG9uc2U+XG4nLAorICAg
ICAgICAgICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAgICAgICAnU1ZOLVlvdW5nZXN0
LVJldic6IHN0cihzZWxmLmxhdGVzdCgpLnJldmlzaW9uKSwKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICApCisKKyAgICAgICAgIyBMaXN0IGNhdGVnb3J5CisgICAgICAgIG1hdGNoID0g
c2VsZi5SRVZJU0lPTl9SRVFVRVNUX1JFLm1hdGNoKHN0cmlwcGVkX3VybC5zcGxpdCgnIScpWy0x
XSkKKyAgICAgICAgaWYgbWV0aG9kID09ICdQUk9QRklORCcgYW5kIHN0cmlwcGVkX3VybC5zdGFy
dHN3aXRoKCd7fSEnLmZvcm1hdChzZWxmLnJlbW90ZSkpIGFuZCBtYXRjaCBhbmQgZGF0YSA9PSBP
cmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ3Byb3BmaW5kJywgT3JkZXJlZERpY3QoKAorICAg
ICAgICAgICAgICAgICgnQHhtbG5zJywgJ0RBVjonKSwKKyAgICAgICAgICAgICAgICAoJ3Byb3An
LCBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAgICAgICAgICgncmVzb3VyY2V0eXBlJywgT3Jk
ZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICAgICAgICAgKCdAeG1sbnMnLCAnREFWOicpLAor
ICAgICAgICAgICAgICAgICAgICApKSksCisgICAgICAgICAgICAgICAgKSkpLAorICAgICAgICAg
ICAgKSkpLAorICAgICAgICApKToKKyAgICAgICAgICAgIGxpbmtzID0gW3N0cmlwcGVkX3VybFts
ZW4oc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbMF0pOl1dCisgICAgICAgICAgICBpZiBsaW5rc1sw
XVstMV0gIT0gJy8nOgorICAgICAgICAgICAgICAgIGxpbmtzWzBdICs9ICcvJworCisgICAgICAg
ICAgICBpZiBtYXRjaC5ncm91cCgnY2F0ZWdvcnknKSA9PSAnYnJhbmNoZXMnOgorICAgICAgICAg
ICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5icmFuY2hlcyhpbnQobWF0Y2guZ3JvdXAoJ3Jldmlz
aW9uJykpKToKKyAgICAgICAgICAgICAgICAgICAgbGlua3MuYXBwZW5kKCd7fXt9LycuZm9ybWF0
KGxpbmtzWzBdLCBicmFuY2gpKQorCisgICAgICAgICAgICBlbGlmIG1hdGNoLmdyb3VwKCdjYXRl
Z29yeScpID09ICd0YWdzJzoKKyAgICAgICAgICAgICAgICBmb3IgdGFnIGluIHNlbGYudGFncyhp
bnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpKToKKyAgICAgICAgICAgICAgICAgICAgbGlua3Mu
YXBwZW5kKCd7fXt9LycuZm9ybWF0KGxpbmtzWzBdWzotNV0sIHRhZykpCisKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1
cmwpCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAgICAgICAg
ICBzdGF0dXNfY29kZT0yMDcsCisgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAg
ICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJworICAg
ICAgICAgICAgICAgICAgICAnPEQ6bXVsdGlzdGF0dXMgeG1sbnM6RD0iREFWOiIgeG1sbnM6bnMw
PSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJ3t9PC9EOm11bHRpc3RhdHVzPlxuJy5m
b3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnPEQ6cmVzcG9uc2UgeG1sbnM6bHAxPSJEQVY6Ij5cbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnPEQ6aHJlZj57fTwvRDpocmVmPlxuJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICc8RDpwcm9wc3RhdD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPEQ6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxwMTpyZXNv
dXJjZXR5cGU+PEQ6Y29sbGVjdGlvbi8+PC9scDE6cmVzb3VyY2V0eXBlPlxuJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPEQ6c3RhdHVzPkhUVFAvMS4xIDIwMCBPSzwvRDpzdGF0dXM+XG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzwvRDpwcm9wc3RhdD5cbicKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnPC9EOnJlc3BvbnNlPlxuJy5mb3JtYXQobGluaykgZm9yIGxpbmsgaW4gbGlua3MK
KyAgICAgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICkKKworICAgICAgICAj
IEluZm8gZm9yIGNvbW1pdCwgYnJhbmNoIG9yIHRhZworICAgICAgICBpZiBtZXRob2QgPT0gJ1BS
T1BGSU5EJyBhbmQgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9IScuZm9ybWF0KHNlbGYucmVt
b3RlKSkgYW5kIG1hdGNoIGFuZCBkYXRhID09IE9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICgn
cHJvcGZpbmQnLCBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAgICAgKCdAeG1sbnMnLCAnREFW
OicpLAorICAgICAgICAgICAgICAgICgncHJvcCcsIE9yZGVyZWREaWN0KCgKKyAgICAgICAgICAg
ICAgICAgICAgKCdyZXNvdXJjZXR5cGUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnREFWOicp
LCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdnZXRjb250ZW50bGVuZ3RoJywgT3JkZXJlZERp
Y3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgICAgICgnZGVhZHBy
b3AtY291bnQnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnaHR0cDovL3N1YnZlcnNpb24udGln
cmlzLm9yZy94bWxucy9kYXYvJyksKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3ZlcnNpb24t
bmFtZScsIE9yZGVyZWREaWN0KCgoJ0B4bWxucycsICdEQVY6JyksKSkpLAorICAgICAgICAgICAg
ICAgICAgICAoJ2NyZWF0aW9uZGF0ZScsIE9yZGVyZWREaWN0KCgoJ0B4bWxucycsICdEQVY6Jyks
KSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NyZWF0b3ItZGlzcGxheW5hbWUnLCBPcmRlcmVk
RGljdCgoKCdAeG1sbnMnLCAnREFWOicpLCkpKSwKKyAgICAgICAgICAgICAgICApKSksCisgICAg
ICAgICAgICApKSksCisgICAgICAgICkpOgorICAgICAgICAgICAgYnJhbmNoID0gbWF0Y2guZ3Jv
dXAoJ2NhdGVnb3J5JykKKyAgICAgICAgICAgIGlmIGJyYW5jaC5zdGFydHN3aXRoKCdicmFuY2hl
cycpOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9ICcvJy5qb2luKGJyYW5jaC5zcGxpdCgnLycp
WzE6XSkKKworICAgICAgICAgICAgaWYgYnJhbmNoIG5vdCBpbiBzZWxmLmNvbW1pdHM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisgICAgICAg
ICAgICBjb21taXQgPSBzZWxmLmNvbW1pdHNbYnJhbmNoXVswXQorICAgICAgICAgICAgZm9yIGNh
bmRpZGF0ZSBpbiBzZWxmLmNvbW1pdHNbYnJhbmNoXToKKyAgICAgICAgICAgICAgICBpZiBjYW5k
aWRhdGUucmV2aXNpb24gPD0gaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKToKKyAgICAgICAg
ICAgICAgICAgICAgY29tbWl0ID0gY2FuZGlkYXRlCisKKyAgICAgICAgICAgIHN0cmlwcGVkX3Vy
bCA9IHN0cmlwcGVkX3VybFtsZW4oc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbMF0pOl0KKyAgICAg
ICAgICAgIGlmIHN0cmlwcGVkX3VybFstMV0gIT0gJy8nOgorICAgICAgICAgICAgICAgIHN0cmlw
cGVkX3VybCArPSAnLycKKworICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlKAorICAg
ICAgICAgICAgICAgIHN0YXR1c19jb2RlPTIwNywKKyAgICAgICAgICAgICAgICB1cmw9dXJsLAor
ICAgICAgICAgICAgICAgIHRleHQ9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDptdWx0aXN0YXR1cyB4bWxuczpEPSJEQVY6
IiB4bWxuczpuczA9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cmVzcG9uc2Ug
eG1sbnM6bHAxPSJEQVY6IiB4bWxuczpscDM9Imh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcv
eG1sbnMvZGF2LyIgeG1sbnM6ZzA9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6
aHJlZj57fTwvRDpocmVmPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4n
CisgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAgICAn
PGxwMTpyZXNvdXJjZXR5cGU+PEQ6Y29sbGVjdGlvbi8+PC9scDE6cmVzb3VyY2V0eXBlPlxuJwor
ICAgICAgICAgICAgICAgICAgICAnPGxwMzpkZWFkcHJvcC1jb3VudD4xPC9scDM6ZGVhZHByb3At
Y291bnQ+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOnZlcnNpb24tbmFtZT57fTwvbHAx
OnZlcnNpb24tbmFtZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxscDE6Y3JlYXRpb25kYXRl
Pnt9PC9scDE6Y3JlYXRpb25kYXRlPlxuJworICAgICAgICAgICAgICAgICAgICAnPGxwMTpjcmVh
dG9yLWRpc3BsYXluYW1lPnt9PC9scDE6Y3JlYXRvci1kaXNwbGF5bmFtZT5cbicKKyAgICAgICAg
ICAgICAgICAgICAgJzwvRDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6c3RhdHVz
PkhUVFAvMS4xIDIwMCBPSzwvRDpzdGF0dXM+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6
cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wc3RhdD5cbicKKyAgICAg
ICAgICAgICAgICAgICAgJzxEOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICc8ZzA6Z2V0
Y29udGVudGxlbmd0aC8+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcD5cbicKKyAg
ICAgICAgICAgICAgICAgICAgJzxEOnN0YXR1cz5IVFRQLzEuMSA0MDQgTm90IEZvdW5kPC9EOnN0
YXR1cz5cbicKKyAgICAgICAgICAgICAgICAgICAgJzwvRDpwcm9wc3RhdD5cbicKKyAgICAgICAg
ICAgICAgICAgICAgJzwvRDpyZXNwb25zZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzwvRDpt
dWx0aXN0YXR1cz5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWRf
dXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0YW1wKS5z
dHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMuMTAzNzU0WicpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAg
ICAgKQorCisgICAgICAgICMgTG9nIGZvciBjb21taXQKKyAgICAgICAgaWYgbWV0aG9kID09ICdS
RVBPUlQnIGFuZCBzdHJpcHBlZF91cmwuc3RhcnRzd2l0aCgne30hJy5mb3JtYXQoc2VsZi5yZW1v
dGUpKSBhbmQgbWF0Y2ggYW5kIGRhdGEuZ2V0KCdTOmxvZy1yZXBvcnQnKToKKyAgICAgICAgICAg
IGNvbW1pdHMgPSBzZWxmLnJhbmdlKAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PW1hdGNoLmdy
b3VwKCdjYXRlZ29yeScpLAorICAgICAgICAgICAgICAgIHN0YXJ0PWludChkYXRhWydTOmxvZy1y
ZXBvcnQnXVsnUzpzdGFydC1yZXZpc2lvbiddKSwKKyAgICAgICAgICAgICAgICBlbmQ9aW50KGRh
dGFbJ1M6bG9nLXJlcG9ydCddWydTOmVuZC1yZXZpc2lvbiddKSwKKyAgICAgICAgICAgICkKKwor
ICAgICAgICAgICAgbGltaXQgPSBpbnQoZGF0YVsnUzpsb2ctcmVwb3J0J10uZ2V0KCdTOmxpbWl0
JywgMCkpCisgICAgICAgICAgICBpZiBsaW1pdCBhbmQgbGVuKGNvbW1pdHMpID4gbGltaXQ6Cisg
ICAgICAgICAgICAgICAgY29tbWl0cyA9IGNvbW1pdHNbOmxpbWl0XQorCisgICAgICAgICAgICBp
ZiBub3QgY29tbWl0czoKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3Jl
YXRlNDA0KHVybCkKKworICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlKAorICAgICAg
ICAgICAgICAgIHN0YXR1c19jb2RlPTIwMCwKKyAgICAgICAgICAgICAgICB1cmw9dXJsLAorICAg
ICAgICAgICAgICAgIHRleHQ9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+
XG4nCisgICAgICAgICAgICAgICAgJzxTOmxvZy1yZXBvcnQgeG1sbnM6Uz0ic3ZuOiIgeG1sbnM6
RD0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAgJ3t9PC9TOmxvZy1yZXBvcnQ+XG4nLmZvcm1h
dCgKKyAgICAgICAgICAgICAgICAgICAgJycuam9pbihbCisgICAgICAgICAgICAgICAgICAgICAg
ICAnPFM6bG9nLWl0ZW0+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPEQ6dmVyc2lvbi1u
YW1lPnt9PC9EOnZlcnNpb24tbmFtZT5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8Uzpk
YXRlPnt9PC9TOmRhdGU+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAne317fTwvUzpsb2ct
aXRlbT5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5yZXZp
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZS5mcm9tdGltZXN0YW1w
KGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolUy4xMDM3NTRaJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgaWYgZGF0YVsnUzpsb2ctcmVwb3J0J10u
Z2V0KCdTOnJldnBybycpIGVsc2UgJzxEOmNvbW1lbnQ+e308L0Q6Y29tbWVudD5cbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPEQ6Y3JlYXRvci1kaXNwbGF5bmFtZT57fTwvRDpjcmVh
dG9yLWRpc3BsYXluYW1lPlxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXQuYXV0aG9yLmVtYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzxTOm1vZGlmaWVkLXBhdGggbm9kZS1raW5kPSJmaWxlIiB0
ZXh0LW1vZHM9InRydWUiIHByb3AtbW9kcz0iZmFsc2UiPi97YnJhbmNofS9DaGFuZ2Vsb2c8L1M6
bW9kaWZpZWQtcGF0aD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPFM6bW9kaWZp
ZWQtcGF0aCBub2RlLWtpbmQ9ImZpbGUiIHRleHQtbW9kcz0idHJ1ZSIgcHJvcC1tb2RzPSJmYWxz
ZSI+L3ticmFuY2h9L2ZpbGUuY3BwPC9TOm1vZGlmaWVkLXBhdGg+XG4nLmZvcm1hdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPWNvbW1pdC5icmFuY2ggaWYgY29tbWl0
LmJyYW5jaC5zcGxpdCgnLycpWzBdIGluIFsndHJ1bmsnLCAndGFncyddIGVsc2UgJ2JyYW5jaGVz
L3t9Jy5mb3JtYXQoY29tbWl0LmJyYW5jaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSBpZiAnUzpkaXNjb3Zlci1jaGFuZ2VkLXBhdGhzJyBpbiBkYXRhWydTOmxvZy1yZXBvcnQnXSBl
bHNlICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgKSBmb3IgY29tbWl0IGluIGNvbW1pdHMK
KyAgICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgKQorCisgICAgICAgIHJldHVy
biBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworZnJvbSB3ZWJraXRzY21weS5yZW1vdGUuc2NtIGltcG9ydCBTY20KK2Zyb20gd2Via2l0c2Nt
cHkucmVtb3RlLnN2biBpbXBvcnQgU3ZuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc2NtLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcmVtb3RlL3NjbS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc2l4CisKK2Zyb20g
d2Via2l0c2NtcHkuc2NtX2Jhc2UgaW1wb3J0IFNjbUJhc2UKKworCitjbGFzcyBTY20oU2NtQmFz
ZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdXJsKGNscywgdXJsKToKKyAgICAg
ICAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgcmVtb3RlCisKKyAgICAgICAgaWYgcmVtb3RlLlN2
bi5pc193ZWJzZXJ2ZXIodXJsKToKKyAgICAgICAgICAgIHJldHVybiByZW1vdGUuU3ZuKHVybCkK
KyAgICAgICAgcmFpc2UgT1NFcnJvcigiJ3t9JyBpcyBub3QgYSBrbm93biBTQ00gc2VydmVyIi5m
b3JtYXQodXJsKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRldl9icmFuY2hlcz1O
b25lLCBwcm9kX2JyYW5jaGVzPU5vbmUpOgorICAgICAgICBzdXBlcihTY20sIHNlbGYpLl9faW5p
dF9fKGRldl9icmFuY2hlcz1kZXZfYnJhbmNoZXMsIHByb2RfYnJhbmNoZXM9cHJvZF9icmFuY2hl
cykKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1cmwsIHNpeC5zdHJpbmdfdHlwZXMpOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ3VybCcgdG8gYmUgYSBzdHJp
bmcgdHlwZSwgbm90ICd7fSciLmZvcm1hdCh0eXBlKHVybCkpKQorICAgICAgICBzZWxmLnVybCA9
IHVybApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvcmVtb3RlL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zdm4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NDYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBiaXNlY3QKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0
IGZhc3RlbmVycworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgcmVx
dWVzdHMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHhtbHRvZGljdAorCitmcm9tIGRhdGV0aW1l
IGltcG9ydCBkYXRldGltZQorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbG9nLCBydW4sIGRl
Y29yYXRvcnMKK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLnNjbSBpbXBvcnQgU2NtCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1dG9yLCBWZXJzaW9uCisKKworY2xhc3Mg
U3ZuKFNjbSk6CisgICAgVVJMX1JFID0gcmUuY29tcGlsZShyJ1xBaHR0cHM/Oi8vc3ZuLig/UDxo
b3N0PlxTKykvcmVwb3NpdG9yeS9cUytcWicpCisgICAgSElTVE9SWV9SRSA9IHJlLmNvbXBpbGUo
Yic8RDp2ZXJzaW9uLW5hbWU+KD9QPHJldmlzaW9uPlxkKyk8L0Q6dmVyc2lvbi1uYW1lPicpCisg
ICAgQ0FDSEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBpc193ZWJzZXJ2ZXIoY2xzLCB1cmwpOgorICAgICAgICByZXR1cm4gVHJ1ZSBpZiBjbHMuVVJM
X1JFLm1hdGNoKHVybCkgZWxzZSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwg
ZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSk6CisgICAgICAgIGlmIHVybFst
MV0gIT0gJy8nOgorICAgICAgICAgICAgdXJsICs9ICcvJworICAgICAgICBpZiBub3Qgc2VsZi5p
c193ZWJzZXJ2ZXIodXJsKToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCIne30n
IGlzIG5vdCBhIHZhbGlkIFNWTiB3ZWJzZXJ2ZXIiLmZvcm1hdCh1cmwpKQorICAgICAgICBzdXBl
cihTdm4sIHNlbGYpLl9faW5pdF9fKHVybCwgZGV2X2JyYW5jaGVzPWRldl9icmFuY2hlcywgcHJv
ZF9icmFuY2hlcz1wcm9kX2JyYW5jaGVzKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNl
bGYuX2NhY2hlX3BhdGgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGgg
c2VsZi5fY2FjaGVfbG9jaygpLCBvcGVuKHNlbGYuX2NhY2hlX3BhdGgpIGFzIGZpbGU6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlID0ganNvbi5sb2FkKGZpbGUpCisg
ICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9t
ZXRhZGF0YV9jYWNoZSA9IGRpY3QodmVyc2lvbj1zdHIoc2VsZi5DQUNIRV9WRVJTSU9OKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlID0gZGljdCh2ZXJz
aW9uPXN0cihzZWxmLkNBQ0hFX1ZFUlNJT04pKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlz
X3N2bihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBkZWNvcmF0b3JzLk1lbW9p
emUodGltZW91dD02MCkKKyAgICBkZWYgX2xhdGVzdChzZWxmKToKKyAgICAgICAgcmVzcG9uc2Ug
PSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPSdPUFRJT05TJywKKyAgICAg
ICAgICAgIHVybD1zZWxmLnVybCwKKyAgICAgICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAg
ICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAgICAgICAgICAgICAgICdBY2NlcHQt
RW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAgJ0RFUFRIJzogJzEnLAorICAgICAg
ICAgICAgfSwgZGF0YT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbicK
KyAgICAgICAgICAgICc8RDpvcHRpb25zIHhtbG5zOkQ9IkRBVjoiPlxuJworICAgICAgICAgICAg
JyAgICA8RDphY3Rpdml0eS1jb2xsZWN0aW9uLXNldD48L0Q6YWN0aXZpdHktY29sbGVjdGlvbi1z
ZXQ+XG4nCisgICAgICAgICAgICAnPC9EOm9wdGlvbnM+XG4nLAorICAgICAgICApCisgICAgICAg
IGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIHJldHVybiBpbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ1NWTi1Zb3VuZ2VzdC1S
ZXYnKSkKKworICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoY2FjaGVkPUZhbHNlKQorICAgIGRlZiBp
bmZvKHNlbGYsIGJyYW5jaD1Ob25lLCByZXZpc2lvbj1Ob25lLCB0YWc9Tm9uZSk6CisgICAgICAg
IGlmIHRhZyBhbmQgYnJhbmNoOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90
IHNwZWNpZnkgYm90aCBicmFuY2ggYW5kIHRhZycpCisgICAgICAgIGlmIHRhZyBhbmQgcmV2aXNp
b246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qgc3BlY2lmeSBib3RoIGJy
YW5jaCBhbmQgdGFnJykKKworICAgICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICBi
cmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICAgICAgcmV2aXNp
b24gPSBzZWxmLl9sYXRlc3QoKQorICAgICAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAg
ICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignRmFpbGVkIHRvIGZpbmQgdGhlIGxhdGVzdCByZXZpc2lv
bicpCisKKyAgICAgICAgdXJsID0gJ3t9IXN2bi9ydnIve30nLmZvcm1hdChzZWxmLnVybCwgcmV2
aXNpb24pCisgICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFu
Y2ggYW5kICcvJyBub3QgaW4gYnJhbmNoOgorICAgICAgICAgICAgdXJsID0gJ3t9L2JyYW5jaGVz
L3t9Jy5mb3JtYXQodXJsLCBicmFuY2gpCisgICAgICAgIGVsaWYgdGFnOgorICAgICAgICAgICAg
dXJsID0gJ3t9L3RhZ3Mve30nLmZvcm1hdCh1cmwsIHRhZykKKyAgICAgICAgZWxpZiBicmFuY2g6
CisgICAgICAgICAgICB1cmwgPSAne30ve30nLmZvcm1hdCh1cmwsIGJyYW5jaCBvciBzZWxmLmRl
ZmF1bHRfYnJhbmNoKQorCisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucmVxdWVzdCgKKyAg
ICAgICAgICAgIG1ldGhvZD0nUFJPUEZJTkQnLAorICAgICAgICAgICAgdXJsPXVybCwKKyAgICAg
ICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94
bWwnLAorICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAg
ICAgICAgICAgJ0RFUFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPHByb3BmaW5kIHht
bG5zPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICcgICAgPHByb3A+XG4nCisgICAgICAgICAgICAn
ICAgICAgICA8cmVzb3VyY2V0eXBlIHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAg
ICAgICA8Z2V0Y29udGVudGxlbmd0aCB4bWxucz0iREFWOiIvPlxuJworICAgICAgICAgICAgJyAg
ICAgICAgPGRlYWRwcm9wLWNvdW50IHhtbG5zPSJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3Jn
L3htbG5zL2Rhdi8iLz5cbicKKyAgICAgICAgICAgICcgICAgICAgIDx2ZXJzaW9uLW5hbWUgeG1s
bnM9IkRBVjoiLz5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxjcmVhdGlvbmRhdGUgeG1sbnM9
IkRBVjoiLz5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxjcmVhdG9yLWRpc3BsYXluYW1lIHht
bG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgIDwvcHJvcD5cbicKKyAgICAgICAgICAg
ICc8L3Byb3BmaW5kPlxuJywKKyAgICAgICAgKQorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNf
Y29kZSBub3QgaW4gWzIwMCwgMjA3XToKKyAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAg
IHJlc3BvbnNlID0geG1sdG9kaWN0LnBhcnNlKHJlc3BvbnNlLnRleHQpCisgICAgICAgIHJlc3Bv
bnNlID0gcmVzcG9uc2UuZ2V0KCdEOm11bHRpc3RhdHVzJywgcmVzcG9uc2UpLmdldCgnRDpyZXNw
b25zZScsIFtdKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4g
e30KKworICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlWzBdIGlmIGlzaW5zdGFuY2UocmVzcG9u
c2UsIGxpc3QpIGVsc2UgcmVzcG9uc2UKKyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZVsnRDpw
cm9wc3RhdCddWzBdWydEOnByb3AnXQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAn
TGFzdCBDaGFuZ2VkIFJldic6IHJlc3BvbnNlWydscDE6dmVyc2lvbi1uYW1lJ10sCisgICAgICAg
ICAgICAnTGFzdCBDaGFuZ2VkIEF1dGhvcic6IHJlc3BvbnNlWydscDE6Y3JlYXRvci1kaXNwbGF5
bmFtZSddLAorICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBEYXRlJzogJyAnLmpvaW4ocmVzcG9u
c2VbJ2xwMTpjcmVhdGlvbmRhdGUnXS5zcGxpdCgnVCcpKS5zcGxpdCgnLicpWzBdLAorICAgICAg
ICAgICAgJ1JldmlzaW9uJzogcmV2aXNpb24sCisgICAgICAgIH0KKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiBkZWZhdWx0X2JyYW5jaChzZWxmKToKKyAgICAgICAgcmV0dXJuICd0cnVuaycKKwor
ICAgIGRlZiBsaXN0KHNlbGYsIGNhdGVnb3J5KToKKyAgICAgICAgcmV2aXNpb24gPSBzZWxmLl9s
YXRlc3QoKQorICAgICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gW10K
KworICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVlc3QoCisgICAgICAgICAgICBtZXRo
b2Q9J1BST1BGSU5EJywKKyAgICAgICAgICAgIHVybD0ne30hc3ZuL3J2ci97fS97fScuZm9ybWF0
KHNlbGYudXJsLCByZXZpc2lvbiwgY2F0ZWdvcnkpLAorICAgICAgICAgICAgaGVhZGVycz17Cisg
ICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAgICAgICAgICAg
ICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAnREVQVEgnOiAn
MScsCisgICAgICAgICAgICB9LCBkYXRhPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PlxuJworICAgICAgICAgICAgICAgICc8cHJvcGZpbmQgeG1sbnM9IkRBVjoiPlxuJwor
ICAgICAgICAgICAgICAgICcgICAgPHByb3A+PHJlc291cmNldHlwZSB4bWxucz0iREFWOiIvPjwv
cHJvcD5cbicKKyAgICAgICAgICAgICAgICAnPC9wcm9wZmluZD5cbicsCisgICAgICAgICkKKyAg
ICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgbm90IGluIFsyMDAsIDIwN106CisgICAgICAg
ICAgICByZXR1cm4gW10KKworICAgICAgICByZXNwb25zZXMgPSB4bWx0b2RpY3QucGFyc2UocmVz
cG9uc2UudGV4dCkKKyAgICAgICAgcmVzcG9uc2VzID0gcmVzcG9uc2VzLmdldCgnRDptdWx0aXN0
YXR1cycsIHJlc3BvbnNlcykuZ2V0KCdEOnJlc3BvbnNlJywgW10pCisKKyAgICAgICAgcmVzdWx0
cyA9IFtdCisgICAgICAgIGZvciByZXNwb25zZSBpbiByZXNwb25zZXM6CisgICAgICAgICAgICBj
YW5kaWRhdGUgPSByZXNwb25zZVsnRDpocmVmJ10uc3BsaXQoJyFzdm4vcnZyL3t9L3t9LycuZm9y
bWF0KHJldmlzaW9uLCBjYXRlZ29yeSkpWy0xXS5yc3RyaXAoJy8nKQorICAgICAgICAgICAgaWYg
bm90IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQoY2FuZGlkYXRlKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgYnJhbmNoZXMoc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5k
ZWZhdWx0X2JyYW5jaF0gKyBzZWxmLmxpc3QoJ2JyYW5jaGVzJykKKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiB0YWdzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saXN0KCd0YWdzJykKKwor
ICAgIEBwcm9wZXJ0eQorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBfY2FjaGVf
cGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1w
ZGlyKCksICdzdm4ue30nLmZvcm1hdChzZWxmLlVSTF9SRS5tYXRjaChzZWxmLnVybCkuZ3JvdXAo
J2hvc3QnKSksICd3ZWJraXRzY21weS1jYWNoZS5qc29uJykKKworICAgIGRlZiBfY2FjaGVfbG9j
ayhzZWxmKToKKyAgICAgICAgcmV0dXJuIGZhc3RlbmVycy5JbnRlclByb2Nlc3NMb2NrKG9zLnBh
dGguam9pbihvcy5wYXRoLmRpcm5hbWUoc2VsZi5fY2FjaGVfcGF0aCksICdjYWNoZS5sb2NrJykp
CisKKyAgICBkZWYgX2NhY2hlX3JldmlzaW9ucyhzZWxmLCBicmFuY2g9Tm9uZSk6CisgICAgICAg
IGJyYW5jaCA9IGJyYW5jaCBvciBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAgIGlzX2RlZmF1
bHRfYnJhbmNoID0gYnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAgaWYgYnJh
bmNoIG5vdCBpbiBzZWxmLl9tZXRhZGF0YV9jYWNoZToKKyAgICAgICAgICAgIHNlbGYuX21ldGFk
YXRhX2NhY2hlW2JyYW5jaF0gPSBbMF0gaWYgaXNfZGVmYXVsdF9icmFuY2ggZWxzZSBbXQorICAg
ICAgICBwb3MgPSBsZW4oc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSkKKworICAgICAgICAj
IElmIHdlIGFyZW4ndCBvbiB0aGUgZGVmYXVsdCBicmFuY2gsIHdlIHdpbGwgbmVlZCB0aGUgZGVm
YXVsdCBicmFuY2ggdG8gZGV0ZXJtaW5lIHdoZW4KKyAgICAgICAgIyBvdXIgIGJyYW5jaCAgaW50
ZXJzZWN0cyB3aXRoIHRoZSBkZWZhdWx0IGJyYW5jaC4KKyAgICAgICAgaWYgbm90IGlzX2RlZmF1
bHRfYnJhbmNoOgorICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJyYW5jaD1zZWxm
LmRlZmF1bHRfYnJhbmNoKQorCisgICAgICAgIGRpZF93YXJuID0gRmFsc2UKKyAgICAgICAgY291
bnQgPSAwCisKKyAgICAgICAgbGF0ZXN0ID0gc2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgd2l0aCBy
ZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPSdSRVBPUlQnLAorICAgICAgICAg
ICAgdXJsPSd7fSFzdm4vcnZyL3t9L3t9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgc2VsZi51
cmwsCisgICAgICAgICAgICAgICAgbGF0ZXN0LAorICAgICAgICAgICAgICAgIGJyYW5jaCBpZiBp
c19kZWZhdWx0X2JyYW5jaCBvciAnLycgaW4gYnJhbmNoIGVsc2UgJ2JyYW5jaGVzL3t9Jy5mb3Jt
YXQoYnJhbmNoKSwKKyAgICAgICAgICAgICksIHN0cmVhbT1UcnVlLAorICAgICAgICAgICAgaGVh
ZGVycz17CisgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAg
ICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAn
REVQVEgnOiAnMScsCisgICAgICAgICAgICB9LCBkYXRhPSc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9
InN2bjoiPlxuJworICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lvbj57cmV2aXNpb259
PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzplbmQtcmV2aXNpb24+
MDwvUzplbmQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgJzxTOnJldnByb3A+c3ZuOmRh
dGU8L1M6cmV2cHJvcD5cbicKKyAgICAgICAgICAgICAgICAnPC9TOmxvZy1yZXBvcnQ+XG4nLmZv
cm1hdChyZXZpc2lvbj1sYXRlc3QpLAorICAgICAgICApIGFzIHJlc3BvbnNlOgorICAgICAgICAg
ICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgICAgIHJhaXNl
IHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29uc3RydWN0IGJyYW5jaCBoaXN0b3J5IGZvciAn
e30nIi5mb3JtYXQoYnJhbmNoKSkKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVzcG9uc2Uu
aXRlcl9saW5lcygpOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5ISVNUT1JZX1JFLm1h
dGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IGRpZF93YXJuOgorICAgICAg
ICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGNvdW50ID4g
MTAwMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCdDYWNoaW5nIGNvbW1pdCBk
YXRhIGZvciB7fSwgdGhpcyB3aWxsIHRha2UgYSBmZXcgbWludXRlcy4uLicuZm9ybWF0KGJyYW5j
aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWRfd2FybiA9IFRydWUKKworICAgICAgICAg
ICAgICAgIHJldmlzaW9uID0gaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKQorICAgICAgICAg
ICAgICAgIGlmIHBvcyA+IDAgYW5kIHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF1bcG9zIC0g
MV0gPT0gcmV2aXNpb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAg
ICAgaWYgbm90IGlzX2RlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBpZiByZXZp
c2lvbiBpbiBzZWxmLl9tZXRhZGF0YV9jYWNoZVtzZWxmLmRlZmF1bHRfYnJhbmNoXToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0uaW5zZXJ0KHBv
cywgcmV2aXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
ICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0uaW5zZXJ0KHBvcywgcmV2aXNpb24pCisK
KyAgICAgICAgaWYgc2VsZi5fbWV0YWRhdGFfY2FjaGVbc2VsZi5kZWZhdWx0X2JyYW5jaF1bMF0g
PT0gWzBdOgorICAgICAgICAgICAgc2VsZi5fbWV0YWRhdGFfY2FjaGVbJ2lkZW50aWZpZXInXSA9
IGxlbihzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdKQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguZGlybmFtZShzZWxmLl9jYWNoZV9w
YXRoKSk6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHNlbGYu
X2NhY2hlX3BhdGgpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9jYWNoZV9sb2NrKCksIG9wZW4o
c2VsZi5fY2FjaGVfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGpzb24uZHVt
cChzZWxmLl9tZXRhZGF0YV9jYWNoZSwgZmlsZSwgaW5kZW50PTQpCisgICAgICAgIGV4Y2VwdCAo
SU9FcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvZygiRmFpbGVkIHRvIHdyaXRl
IFNWTiBjYWNoZSB0byAne30nIi5mb3JtYXQoc2VsZi5fY2FjaGVfcGF0aCkpCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0KKworICAgIGRlZiBfYnJhbmNoX2Zv
cihzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucmVxdWVzdCgK
KyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAgICAgICAgICAgIHVybD0ne30hc3ZuL3J2
ci97fScuZm9ybWF0KHNlbGYudXJsLCByZXZpc2lvbiksCisgICAgICAgICAgICBoZWFkZXJzPXsK
KyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAg
ICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6
ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9JzxTOmxvZy1yZXBvcnQgeG1sbnM6Uz0ic3ZuOiI+
XG4nCisgICAgICAgICAgICAgICAgJzxTOnN0YXJ0LXJldmlzaW9uPntyZXZpc2lvbn08L1M6c3Rh
cnQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgJzxTOmVuZC1yZXZpc2lvbj57cmV2aXNp
b259PC9TOmVuZC1yZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAnPFM6bGltaXQ+MTwvUzps
aW1pdD5cbicKKyAgICAgICAgICAgICAgICAnPFM6ZGlzY292ZXItY2hhbmdlZC1wYXRocy8+XG4n
CisgICAgICAgICAgICAgICAgJzwvUzpsb2ctcmVwb3J0PlxuJy5mb3JtYXQocmV2aXNpb249cmV2
aXNpb24pLAorICAgICAgICApCisKKyAgICAgICAgIyBJZiB3ZSBkaWRuJ3QgZ2V0IGEgdmFsaWQg
YW5zd2VyIGZyb20gdGhlIHJlbW90ZSwgYnV0IHdlIGZvdW5kIGEgbWF0Y2hpbmcgY2FuZGlkYXRl
LCB3ZSByZXR1cm4gdGhhdC4KKyAgICAgICAgIyBUaGlzIGlzIGEgYml0IHJpc2t5IGJlY2F1c2Ug
dGhlcmUgaXMgYSBjaGFuY2UgdGhlIGJyYW5jaCB3ZSBoYXZlIGNhY2hlZCBpcyBub3QgdGhlIGNh
bm9uaWNhbCBicmFuY2gKKyAgICAgICAgIyBmb3IgYSByZXZpc2lvbiwgYnV0IHRoaXMgaXMgcHJl
dHR5IHVubGlrZWx5IGJlY2F1c2UgaXQgd291bGQgcmVxdWlyZSB0aGUgbiArIDEgbGV2ZWwgYnJh
bmNoIHRvIGJlIGNhY2hlZAorICAgICAgICAjIGJ1dCBub3QgdGhlIG4gbGV2ZWwgYnJhbmNoLgor
ICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICByYWlz
ZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGJyYW5jaCBmb3IgJ3t9JyIuZm9y
bWF0KHJldmlzaW9uKSkKKworICAgICAgICBwYXJ0aWFsID0gTm9uZQorICAgICAgICBpdGVtcyA9
IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KVsnUzpsb2ctcmVwb3J0J11bJ1M6bG9nLWl0
ZW0nXQorICAgICAgICBmb3IgZ3JvdXAgaW4gKGl0ZW1zLmdldCgnUzptb2RpZmllZC1wYXRoJywg
W10pLCBpdGVtcy5nZXQoJ1M6YWRkZWQtcGF0aCcsIFtdKSk6CisgICAgICAgICAgICBmb3IgaXRl
bSBpbiBncm91cCBpZiBpc2luc3RhbmNlKGdyb3VwLCBsaXN0KSBlbHNlIFtncm91cF06CisgICAg
ICAgICAgICAgICAgaWYgbm90IHBhcnRpYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwg
PSBpdGVtWycjdGV4dCddCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IGl0ZW1bJyN0ZXh0J10u
c3RhcnRzd2l0aChwYXJ0aWFsKToKKyAgICAgICAgICAgICAgICAgICAgcGFydGlhbCA9IHBhcnRp
YWxbOi0xXQorCisgICAgICAgIGNhbmRpZGF0ZSA9IHBhcnRpYWwuc3BsaXQoJy8nKVsyIGlmIHBh
cnRpYWwuc3RhcnRzd2l0aCgnL2JyYW5jaGVzJykgZWxzZSAxXQorCisgICAgICAgICMgVGFncyBh
cmUgYSB1bmlxdWUgY2FzZSBmb3IgU1ZOLCBiZWNhdXNlIHRoZXkncmUgdHJlYXRlZCBhcyBicmFu
Y2hlcyBpbiBuYXRpdmUgU1ZOCisgICAgICAgIGlmIGNhbmRpZGF0ZSA9PSAndGFncyc6CisgICAg
ICAgICAgICByZXR1cm4gcGFydGlhbFsxOl0ucnN0cmlwKCcvJykKKyAgICAgICAgcmV0dXJuIGNh
bmRpZGF0ZQorCisgICAgZGVmIF9jb21taXRfY291bnQoc2VsZiwgcmV2aXNpb249Tm9uZSwgYnJh
bmNoPU5vbmUpOgorICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5j
aAorCisgICAgICAgIGlmIHJldmlzaW9uOgorICAgICAgICAgICAgaWYgcmV2aXNpb24gbm90IGlu
IHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF06CisgICAgICAgICAgICAgICAgcmFpc2Ugc2Vs
Zi5FeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kICd7fScgb24gJ3t9JyIuZm9ybWF0KHJldmlzaW9u
LCBicmFuY2gpKQorICAgICAgICAgICAgcmV0dXJuIGJpc2VjdC5iaXNlY3RfbGVmdChzZWxmLl9t
ZXRhZGF0YV9jYWNoZVticmFuY2hdLCBpbnQocmV2aXNpb24pKQorICAgICAgICBpZiBicmFuY2gg
PT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWV0
YWRhdGFfY2FjaGVbYnJhbmNoXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9jb3VudChy
ZXZpc2lvbj1zZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdWzBdLCBicmFuY2g9c2VsZi5kZWZh
dWx0X2JyYW5jaCkKKworICAgIGRlZiBjb21taXQoc2VsZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1O
b25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25lLCB0YWc9Tm9uZSk6CisgICAgICAgIGlm
IGhhc2g6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTVk4gZG9lcyBub3Qgc3VwcG9y
dCBHaXQgaGFzaGVzJykKKworICAgICAgICBwYXJzZWRfYnJhbmNoX3BvaW50ID0gTm9uZQorICAg
ICAgICBpZiBpZGVudGlmaWVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgcmV2aXNpb246
CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHJl
dmlzaW9uIGFuZCBpZGVudGlmaWVyJykKKyAgICAgICAgICAgIGlmIHRhZzoKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCBpZGVudGlm
aWVyJykKKworICAgICAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCwgaWRlbnRpZmllciwgcGFy
c2VkX2JyYW5jaCA9IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihpZGVudGlmaWVyLCBkb19hc3Nl
cnQ9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHBhcnNlZF9icmFuY2g6CisgICAgICAgICAgICAgICAg
aWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gcGFyc2VkX2JyYW5jaDoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsZXIgcGFz
c2VkIGJvdGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBkaWZmZXJl
bnQgYnJhbmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmFuY2gsIHBhcnNlZF9icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgYnJhbmNoID0gcGFyc2VkX2Jy
YW5jaAorICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gK
KworICAgICAgICAgICAgaWYgYnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFuY2ggYW5kIHBhcnNl
ZF9icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Nh
bm5vdCBwcm92aWRlIGEgYnJhbmNoIHBvaW50IGZvciBhIGNvbW1pdCBvbiB0aGUgZGVmYXVsdCBi
cmFuY2gnKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJy
YW5jaCwgW10pIG9yIGlkZW50aWZpZXIgPj0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChi
cmFuY2gsIFtdKSk6CisgICAgICAgICAgICAgICAgaWYgYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9i
cmFuY2g6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9
c2VsZi5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lv
bnMoYnJhbmNoPWJyYW5jaCkKKyAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgPiBsZW4oc2VsZi5f
bWV0YWRhdGFfY2FjaGUuZ2V0KGJyYW5jaCwgW10pKToKKyAgICAgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbignSWRlbnRpZmllciB7fSBjYW5ub3QgYmUgZm91bmQgb24gdGhlIHNwZWNp
ZmllZCBicmFuY2ggaW4gdGhlIGN1cnJlbnQgY2hlY2tvdXQnLmZvcm1hdChpZGVudGlmaWVyKSkK
KworICAgICAgICAgICAgaWYgaWRlbnRpZmllciA8PSAwOgorICAgICAgICAgICAgICAgIGlmIGJy
YW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbignSWxsZWdhbCBuZWdhdGl2ZSBpZGVudGlmaWVyIG9uIHRoZSBkZWZhdWx0
IGJyYW5jaCcpCisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IHNlbGYuX2NvbW1pdF9jb3Vu
dChicmFuY2g9YnJhbmNoKSArIGlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICBpZiBpZGVudGlm
aWVyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50
aWZpZXIgZG9lcyBub3QgZXhpc3Qgb24gdGhlIHNwZWNpZmllZCBicmFuY2gnKQorCisgICAgICAg
ICAgICAgICAgYnJhbmNoID0gc2VsZi5kZWZhdWx0X2JyYW5jaAorCisgICAgICAgICAgICByZXZp
c2lvbiA9IHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF1baWRlbnRpZmllcl0KKyAgICAgICAg
ICAgIGluZm8gPSBzZWxmLmluZm8oY2FjaGVkPVRydWUsIGJyYW5jaD1icmFuY2gsIHJldmlzaW9u
PXJldmlzaW9uKQorICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5fYnJhbmNoX2ZvcihyZXZpc2lv
bikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tZXRhZGF0YV9jYWNoZS5nZXQoYnJhbmNoLCBb
XSkgb3IgaWRlbnRpZmllciA+PSBsZW4oc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJyYW5jaCwg
W10pKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPWJyYW5j
aCkKKworICAgICAgICBlbGlmIHJldmlzaW9uOgorICAgICAgICAgICAgaWYgYnJhbmNoOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCBicmFuY2gg
YW5kIHJldmlzaW9uJykKKyAgICAgICAgICAgIGlmIHRhZzoKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCByZXZpc2lvbicpCisgICAg
ICAgICAgICByZXZpc2lvbiA9IENvbW1pdC5fcGFyc2VfcmV2aXNpb24ocmV2aXNpb24sIGRvX2Fz
c2VydD1UcnVlKQorICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5fYnJhbmNoX2ZvcihyZXZpc2lv
bikKKyAgICAgICAgICAgIGluZm8gPSBzZWxmLmluZm8oY2FjaGVkPVRydWUsIGJyYW5jaD1icmFu
Y2gsIHJldmlzaW9uPXJldmlzaW9uKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBi
cmFuY2ggYW5kIHRhZzoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qg
ZGVmaW5lIGJvdGggYnJhbmNoIGFuZCB0YWcnKQorCisgICAgICAgICAgICBicmFuY2ggPSBOb25l
IGlmIHRhZyBlbHNlIGJyYW5jaCBvciBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAgICAgICBp
bmZvID0gc2VsZi5pbmZvKHRhZz10YWcpIGlmIHRhZyBlbHNlIHNlbGYuaW5mbyhicmFuY2g9YnJh
bmNoKQorICAgICAgICAgICAgaWYgbm90IGluZm86CisgICAgICAgICAgICAgICAgcmFpc2Ugc2Vs
Zi5FeGNlcHRpb24oIid7fScgaXMgbm90IGEgcmVjb2duaXplZCB7fSIuZm9ybWF0KAorICAgICAg
ICAgICAgICAgICAgICB0YWcgb3IgYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAndGFnJyBp
ZiB0YWcgZWxzZSAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgcmV2
aXNpb24gPSBpbnQoaW5mb1snTGFzdCBDaGFuZ2VkIFJldiddKQorICAgICAgICAgICAgaWYgYnJh
bmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICAgICAgYnJhbmNoID0gc2Vs
Zi5fYnJhbmNoX2ZvcihyZXZpc2lvbikKKworICAgICAgICBkYXRlID0gZGF0ZXRpbWUuc3RycHRp
bWUoaW5mb1snTGFzdCBDaGFuZ2VkIERhdGUnXSwgJyVZLSVtLSVkICVIOiVNOiVTJykKKworICAg
ICAgICBpZiBub3QgaWRlbnRpZmllcjoKKyAgICAgICAgICAgIGlmIGJyYW5jaCAhPSBzZWxmLmRl
ZmF1bHRfYnJhbmNoIGFuZCByZXZpc2lvbiA+IHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChzZWxm
LmRlZmF1bHRfYnJhbmNoLCBbMF0pWy0xXToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9y
ZXZpc2lvbnMoYnJhbmNoPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICBpZiByZXZp
c2lvbiBub3QgaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJyYW5jaCwgW10pOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9YnJhbmNoKQorICAgICAgICAg
ICAgaWRlbnRpZmllciA9IHNlbGYuX2NvbW1pdF9jb3VudChyZXZpc2lvbj1yZXZpc2lvbiwgYnJh
bmNoPWJyYW5jaCkKKworICAgICAgICBicmFuY2hfcG9pbnQgPSBOb25lIGlmIGJyYW5jaCA9PSBz
ZWxmLmRlZmF1bHRfYnJhbmNoIGVsc2Ugc2VsZi5fY29tbWl0X2NvdW50KGJyYW5jaD1icmFuY2gp
CisgICAgICAgIGlmIGJyYW5jaF9wb2ludCBhbmQgcGFyc2VkX2JyYW5jaF9wb2ludCBhbmQgYnJh
bmNoX3BvaW50ICE9IHBhcnNlZF9icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJQcm92aWRlZCAnYnJhbmNoX3BvaW50JyBkb2VzIG5vdCBtYXRjaCBicmFuY2ggcG9p
bnQgb2Ygc3BlY2lmaWVkIGJyYW5jaCIpCisKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5y
ZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPSdSRVBPUlQnLAorICAgICAgICAgICAgdXJsPSd7
fSFzdm4vcnZyL3t9Jy5mb3JtYXQoc2VsZi51cmwsIHJldmlzaW9uKSwKKyAgICAgICAgICAgIGhl
YWRlcnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAg
ICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAg
J0RFUFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPFM6bG9nLXJlcG9ydCB4bWxuczpT
PSJzdm46Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxTOnN0YXJ0LXJldmlzaW9uPntyZXZp
c2lvbn08L1M6c3RhcnQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgICAgICc8UzplbmQt
cmV2aXNpb24+e3JldmlzaW9ufTwvUzplbmQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAg
ICAgICc8UzpsaW1pdD4xPC9TOmxpbWl0PlxuJworICAgICAgICAgICAgICAgICAgICAnPC9TOmxv
Zy1yZXBvcnQ+XG4nLmZvcm1hdChyZXZpc2lvbj1yZXZpc2lvbiksCisgICAgICAgICkKKworICAg
ICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CisgICAgICAgICAgICByZXNwb25z
ZSA9IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KQorICAgICAgICAgICAgcmVzcG9uc2Ug
PSByZXNwb25zZS5nZXQoJ1M6bG9nLXJlcG9ydCcsIHt9KS5nZXQoJ1M6bG9nLWl0ZW0nKQorCisg
ICAgICAgICAgICBuYW1lID0gcmVzcG9uc2UuZ2V0KCdEOmNyZWF0b3ItZGlzcGxheW5hbWUnKQor
ICAgICAgICAgICAgbWVzc2FnZSA9IHJlc3BvbnNlLmdldCgnRDpjb21tZW50JywgTm9uZSkKKyAg
ICAgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0
aW9uKCdGYWlsZWQgdG8gZmluZCBjcmVhdG9yIG5hbWUnKQorCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLmxvZygnRmFpbGVkIHRvIGNvbm5lY3QgdG8gcmVtb3RlLCBjYW5ub3QgY29t
cHV0ZSBjb21taXQgbWVzc2FnZScpCisgICAgICAgICAgICBtZXNzYWdlID0gTm9uZQorICAgICAg
ICAgICAgbmFtZSA9IGluZm9bJ0xhc3QgQ2hhbmdlZCBBdXRob3InXQorCisgICAgICAgIGF1dGhv
ciA9IENvbnRyaWJ1dG9yLmJ5X2VtYWlsLmdldCgKKyAgICAgICAgICAgIG5hbWUsCisgICAgICAg
ICAgICBDb250cmlidXRvci5ieV9uYW1lLmdldCgKKyAgICAgICAgICAgICAgICBuYW1lLAorICAg
ICAgICAgICAgICAgIENvbnRyaWJ1dG9yKG5hbWU9bmFtZSwgZW1haWxzPVtuYW1lXSBpZiAnQCcg
aW4gbmFtZSBlbHNlIFtdKSwKKyAgICAgICAgICAgICksCisgICAgICAgICkKKworICAgICAgICBy
ZXR1cm4gQ29tbWl0KAorICAgICAgICAgICAgcmV2aXNpb249aW50KHJldmlzaW9uKSwKKyAgICAg
ICAgICAgIGJyYW5jaD1icmFuY2gsCisgICAgICAgICAgICBpZGVudGlmaWVyPWlkZW50aWZpZXIs
CisgICAgICAgICAgICBicmFuY2hfcG9pbnQ9YnJhbmNoX3BvaW50LAorICAgICAgICAgICAgdGlt
ZXN0YW1wPWludChjYWxlbmRhci50aW1lZ20oZGF0ZS50aW1ldHVwbGUoKSkpLAorICAgICAgICAg
ICAgYXV0aG9yPWF1dGhvciwKKyAgICAgICAgICAgIG1lc3NhZ2U9bWVzc2FnZSwKKyAgICAgICAg
KQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
dGVzdC9zdm5fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3QucHkJKHJldmlzaW9u
IDI2OTkyMCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTAg
QEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9t
IHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRzY21weSBpbXBv
cnQgbG9jYWwsIG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MsIHJl
bW90ZQogCiAKLWNsYXNzIFRlc3RTdm4odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdExv
Y2FsU3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnkn
CiAKICAgICBkZWYgdGVzdF9kZXRlY3Rpb24oc2VsZik6CkBAIC0yMTcsMyArMjE3LDg3IEBAIGNs
YXNzIFRlc3RTdm4odW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDksIHJlcG9zaXRvcnkuY2hlY2tvdXQoJ3RhZy0xJykucmV2aXNpb24pCiAgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDksIHJlcG9zaXRvcnkuY29tbWl0KCkucmV2aXNpb24pCisK
KworY2xhc3MgVGVzdFJlbW90ZVN2bih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcmVtb3RlID0g
J2h0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQnCisKKyAgICBkZWYgdGVz
dF9kZXRlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3RlLlN2bi5p
c193ZWJzZXJ2ZXIoJ2h0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQnKSwg
VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcign
aHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JyksIFRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVtb3RlLlN2bi5pc193ZWJzZXJ2ZXIoJ2h0dHBzOi8vZ2l0aHVi
LmNvbS9XZWJLaXQvd2Via2l0JyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYnJhbmNoZXMoc2Vs
Zik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5icmFu
Y2hlcywKKyAgICAgICAgICAgICAgICBbJ3RydW5rJywgJ2JyYW5jaC1hJywgJ2JyYW5jaC1iJ10s
CisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF90YWdzKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAg
ICAgICAgICAgICAgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkudGFncywKKyAgICAgICAgICAgICAg
ICBbJ3RhZy0xJywgJ3RhZy0yJ10sCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zY21f
dHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlbW90ZS5Tdm4oc2VsZi5yZW1v
dGUpLmlzX3N2bikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1vdGUuU3ZuKHNlbGYucmVt
b3RlKS5pc19naXQpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHsKKyAg
ICAgICAgICAgICAgICAnTGFzdCBDaGFuZ2VkIEF1dGhvcic6ICdqYmVkYXJkQGFwcGxlLmNvbScs
CisgICAgICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBEYXRlJzogJzIwMjAtMTAtMDIgMTE6NTg6
MjAnLAorICAgICAgICAgICAgICAgICdMYXN0IENoYW5nZWQgUmV2JzogJzYnLAorICAgICAgICAg
ICAgICAgICdSZXZpc2lvbic6IDEwLAorICAgICAgICAgICAgfSwgcmVtb3RlLlN2bihzZWxmLnJl
bW90ZSkuaW5mbygpKQorCisgICAgZGVmIHRlc3RfY29tbWl0X3JldmlzaW9uKHNlbGYpOgorICAg
ICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJzFAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9u
PTEpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJAdHJ1bmsnLCBzdHIocmVtb3Rl
LlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTIpKSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJzIuMUBicmFuY2gtYScsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5j
b21taXQocmV2aXNpb249MykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnM0B0cnVu
aycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249NCkpKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5Tdm4o
c2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj01KSkpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCc0QHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZp
c2lvbj02KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBz
dHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTcpKSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuM0BicmFuY2gtYicsIHN0cihyZW1vdGUuU3ZuKHNlbGYu
cmVtb3RlKS5jb21taXQocmV2aXNpb249OCkpKQorCisgICAgICAgICAgICAjIE91dC1vZi1ib3Vu
ZHMgY29tbWl0CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJlbW90ZS5Tdm4u
RXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlbW90
ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0xMSkpCisKKyAgICBkZWYgdGVzdF9j
b21taXRfZnJvbV9icmFuY2goc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigp
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnNEB0cnVuaycsIHN0cihyZW1vdGUuU3Zu
KHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNoPSd0cnVuaycpKSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYScsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5j
b21taXQoYnJhbmNoPSdicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzIuM0BicmFuY2gtYicsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNo
PSdicmFuY2gtYicpKSkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXIoc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMUB0cnVuaycpLnJl
dmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCByZW1vdGUuU3ZuKHNlbGYu
cmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMkB0cnVuaycpLnJldmlzaW9uKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgzLCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRl
bnRpZmllcj0nMi4xQGJyYW5jaC1hJykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDQsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSczQHRy
dW5rJykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHJlbW90ZS5T
dm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjJAYnJhbmNoLWInKS5yZXZpc2lv
bikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgcmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuY29tbWl0KGlkZW50aWZpZXI9JzRAdHJ1bmsnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoNywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZp
ZXI9JzIuMkBicmFuY2gtYScpLnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCg4LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4zQGJyYW5j
aC1iJykucmV2aXNpb24pCisKKyAgICBkZWYgdGVzdF9ub25fY2Fubm9uaWNhbF9pZGVudGlmaWVy
cyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCcyQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNv
bW1pdChpZGVudGlmaWVyPScwQGJyYW5jaC1hJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnMUB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRp
Zmllcj0nLTFAYnJhbmNoLWEnKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJA
dHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzBA
YnJhbmNoLWInKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxQHRydW5rJywgc3Ry
KHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSctMUBicmFuY2gtYicp
KSkKKworICAgIGRlZiB0ZXN0X3RhZyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUu
U3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDksIHJlbW90ZS5Tdm4oc2VsZi5y
ZW1vdGUpLmNvbW1pdCh0YWc9J3RhZy0xJykucmV2aXNpb24pCisKKyAgICBkZWYgdGVzdF90YWdf
cHJldmlvdXMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQo
aWRlbnRpZmllcj0nMi4yQHRhZ3MvdGFnLTEnKS5yZXZpc2lvbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414380</attachid>
            <date>2020-11-17 13:27:07 -0800</date>
            <delta_ts>2020-11-19 08:50:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201117132706.patch</filename>
            <type>text/plain</type>
            <size>51973</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTkyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTExLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4ODI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTMwNDQ4NT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBpbnRl
cmFjdCB3aXRoIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHN2biBjb21tYW5k
LiBUaGlzIGlzIHVzZWZ1bAorICAgICAgICBmb3Igc2VydmljZXMgaG9zdGVkIGluIGVudmlyb25t
ZW50cyB3aGVyZSBpbnN0YWxsaW5nIGJpbmFyaWVzIGlzIGJ1cmRlbnNvbWUsIG9yIGluIGNhc2Vz
IHdoZXJlCisgICAgICAgIHRvb2xzIGFyZSBydW5uaW5nIHdpdGhvdXQgYSBjaGVja291dC4KKwor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19p
bml0X18ucHk6IEJ1bXAgdmVyc2lvbiwgYWRkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weToK
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9yZW1vdGU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2
bi5weTogQWRkZWQuCisgICAgICAgIChTdm4pOiBJbnRlcmFjdCB3aXRoIGEgcmVtb3RlIFN1YnZl
cnNpb24gcmVwb3NpdG9yeSB3aXRob3V0IHVzaW5nIHRoZSBzdm4gY29tbWFuZC4KKyAgICAgICAg
KFN2bi5pc193ZWJzZXJ2ZXIpOiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgdXJsIG1hdGNoZXMgdGhl
IHBhdHRlcm4gZm9yIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgIChTdm4uX19pbml0X18p
OgorICAgICAgICAoU3ZuLmlzX3N2bik6CisgICAgICAgIChTdm4uX2xhdGVzdCk6IFJldHVybiB0
aGUgbGF0ZXN0IHJldmlzaW9uLgorICAgICAgICAoU3ZuLmluZm8pOiBSZXR1cm4gdGhlIGJpdHMg
b2YgdGhlIGBzdm4gaW5mb2AgY29tbWFuZCB0aGF0IGFyZSB1c2VkIGluIGNvZGUuCisgICAgICAg
IChTdm4uZGVmYXVsdF9icmFuY2gpOgorICAgICAgICAoU3ZuLmxpc3QpOgorICAgICAgICAoU3Zu
LmJyYW5jaGVzKTogTGlzdCBhbGwgYnJhbmNoZXMuCisgICAgICAgIChTdm4udGFncyk6IExpc3Qg
YWxsIHRhZ3MuCisgICAgICAgIChTdm4uX2NhY2hlX3BhdGgpOiBSZXR1cm4gcGF0aCB0byBqc29u
IGNhY2hlLgorICAgICAgICAoU3ZuLl9jYWNoZV9sb2NrKTogRmlsZXN5c3RlbSBsb2NrIHVzZWQg
dG8gcHJldmVudCBjb250ZW50aW9uIG92ZXIgdGhlIGpzb24gY2FjaGUsIHRoaXMKKyAgICAgICAg
aXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBkdXJpbmcgdGVzdGluZy4KKyAgICAgICAgKFN2bi5f
Y2FjaGVfcmV2aXNpb25zKTogQ2FjaGUgdGhlIGlkZW50aWZpZXIvcmV2aXNpb24gbWFwcGluZy4K
KyAgICAgICAgKFN2bi5fYnJhbmNoX2Zvcik6IEdpdmVuIGEgY29tbWl0LCBkZXRlcm1pbmUgd2hp
Y2ggYnJhbmNoIHRoYXQgY29tbWl0IGlzIG9uLgorICAgICAgICAoU3ZuLl9jb21taXRfY291bnQp
OiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBjb21taXRzIG9uIGEgYnJhbmNoIHNpbmNlIGJyYW5j
aGluZy4KKyAgICAgICAgKFN2bi5jb21taXQpOiBSZXR1cm4gYSBjb21taXQgb2JqZWN0IGdpdmVu
IGEgcmV2aXNpb24sIGJyYW5jaCwgaWRlbnRpZmllciBvciB0YWcuCisgICAgICAgICogU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19p
bml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKToKKyAgICAg
ICAgKFNjbS5mcm9tX3VybCk6IEdpdmVuIGEgVVJMLCBhdHRlbXB0IHRvIGRldGVybWluZSB3aGF0
IGtpbmQgb2YgcmVtb3RlIEFQSSBpcyBhdmFpbGFibGUuCisgICAgICAgIChTY20uX19pbml0X18p
OgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL3JlbW90ZS9zdm4ucHk6IEFkZGVkLgorICAgICAgICAoU3ZuKTogTW9jayByZXF1ZXN0cyBu
ZWVkZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHJlbW90ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuCisg
ICAgICAgIChTdm4ubGF0ZXN0KTogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24gYW55
IGJyYW5jaC4KKyAgICAgICAgKFN2bi5icmFuY2hlcyk6IFJldHVybiBicmFuY2hlcyBhdCBzb21l
IHJldmlzaW9uLgorICAgICAgICAoU3ZuLnRhZ3MpOiBSZXR1cm4gdGFncyBhdCBzb21lIHJldmlz
aW9uLgorICAgICAgICAoU3ZuLnJhbmdlKTogR2l2ZSBhIHN0YXJ0IGFuZCBlbmQgcmV2aXNpb24s
IGFsb25nIHdpdGggYSB0YWcgb3IgYnJhbmNoLAorICAgICAgICByZXR1cm4gYWxsIGNvbW1pdHMg
aW4gdGhhdCByYW5nZS4KKyAgICAgICAgKFN2bi5yZXF1ZXN0KTogSGFuZGxlIGEgc21hbGwgc3Vi
c2V0IG9mIHJlcXVlc3RzIHRvIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgICogU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3QucHk6
CisgICAgICAgIChUZXN0TG9jYWxTdm4pOiBNb3ZlZCBmcm9tIFRlc3RTdm4uCisgICAgICAgIChU
ZXN0UmVtb3RlU3ZuKTogQWRkZWQuCisgICAgICAgIChUZXN0U3ZuKTogTW92ZWQgdG8gVGVzdExv
Y2FsU3ZuLgorCiAyMDIwLTExLTE3ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQmlnIFN1ciB0ZXN0ZXJzIGZhaWwgdG8gZmluZCBwcm9wZXIgYXJjaGl2ZXMgZHVl
IHRvIGFyY2hpdGVjdHVyZSBrZXlzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlz
aW9uIDI2OTkyMCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0NiwxMiBAQCBleGNl
cHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0
aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGlu
ZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgMywgMSkKK3ZlcnNpb24g
PSBWZXJzaW9uKDAsIDQsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2RhdGV1
dGlsJywgVmVyc2lvbigyLCA4LCAxKSwgcHlwaV9uYW1lPSdweXRob24tZGF0ZXV0aWwnKSkKK0F1
dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycsIFZlcnNpb24oMCwgMTUsIDAp
KSkKK0F1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90b25pYycsIFZlcnNpb24oMSwg
NSkpKQorQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgneG1sdG9kaWN0JywgVmVyc2lvbigw
LCAxMiwgMCkpKQogCiBmcm9tIHdlYmtpdHNjbXB5LmNvbnRyaWJ1dG9yIGltcG9ydCBDb250cmli
dXRvcgogZnJvbSB3ZWJraXRzY21weS5jb21taXQgaW1wb3J0IENvbW1pdApJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTkyMCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzIGlt
cG9ydCBsb2NhbAorZnJvbSB3ZWJraXRzY21weS5tb2NrcyBpbXBvcnQgcmVtb3RlCkluZGV4OiBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1v
dGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL3JlbW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHNjbXB5Lm1v
Y2tzLnJlbW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9y
ZW1vdGUvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9zdm4ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgeG1sdG9kaWN0CisKK2Zyb20gY29sbGVjdGlv
bnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJv
bSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21t
aXQsIENvbnRyaWJ1dG9yLCByZW1vdGUgYXMgc2NtcmVtb3RlCisKKworY2xhc3MgU3ZuKG1vY2tz
LlJlcXVlc3RzKToKKyAgICB0b3AgPSBOb25lCisgICAgUkVWSVNJT05fUkVRVUVTVF9SRSA9IHJl
LmNvbXBpbGUocidzdm4vcnZyLyg/UDxyZXZpc2lvbj5cZCspKC8oP1A8Y2F0ZWdvcnk+XFMrKSk/
JCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVtb3RlPSdzdm4ud2Via2l0Lm9yZy9yZXBv
c2l0b3J5L3dlYmtpdCcpOgorICAgICAgICBpZiBub3Qgc2NtcmVtb3RlLlN2bi5pc193ZWJzZXJ2
ZXIoJ2h0dHBzOi8ve30nLmZvcm1hdChyZW1vdGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJyJ7fSIgaXMgbm90IGEgdmFsaWQgU3ZuIHJlbW90ZScuZm9ybWF0KHJlbW90ZSkpCisK
KyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyhyZW1vdGUuc3BsaXQoJy8nKVswXSkK
KyAgICAgICAgaWYgcmVtb3RlWy0xXSAhPSAnLyc6CisgICAgICAgICAgICByZW1vdGUgKz0gJy8n
CisgICAgICAgIHNlbGYucmVtb3RlID0gcmVtb3RlCisgICAgICAgIHNlbGYuX2NhY2hlX2NvbnRl
bnRzID0gTm9uZQorICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHNjbXJlbW90ZS5Tdm4oJ2h0
dHA6Ly97fScuZm9ybWF0KHNlbGYucmVtb3RlKSkuX2NhY2hlX2xvY2soKSkKKworICAgICAgICAj
IFByb3ZpZGUgYSByZWFzb25hYmxlIHNldCBvZiBjb21taXRzIHRvIHRlc3QgYWdhaW5zdAorICAg
ICAgICBjb250cmlidXRvciA9IENvbnRyaWJ1dG9yKG5hbWU9J0pvbmF0aGFuIEJlZGFyZCcsIGVt
YWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgIHNlbGYuY29tbWl0cyA9IHsKKyAg
ICAgICAgICAgICd0cnVuayc6IFsKKyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXI9JzFAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICByZXZp
c2lvbj0xLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAg
ICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYwMTAwLAorICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlPScxc3QgY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMkB0cnVuaycsCisgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uPTIsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjExMDAsCisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9JzJuZCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAor
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSczQHRydW5rJywKKyAgICAgICAgICAgICAg
ICAgICAgcmV2aXNpb249NCwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9y
LAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzEwMCwKKyAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBDb21t
aXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzRAdHJ1bmsnLAorICAgICAgICAg
ICAgICAgICAgICByZXZpc2lvbj02LAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJp
YnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY1MTAwLAorICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPSc2dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICks
CisgICAgICAgICAgICBdLCAnYnJhbmNoLWEnOiBbCisgICAgICAgICAgICAgICAgQ29tbWl0KAor
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnLAorICAgICAgICAg
ICAgICAgICAgICByZXZpc2lvbj0zLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJp
YnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYyMTAwLAorICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPSczcmQgY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICks
IENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1hJywK
KyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249NywKKyAgICAgICAgICAgICAgICAgICAgYXV0
aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NjEw
MCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nN3RoIGNvbW1pdFxuJywKKyAgICAgICAg
ICAgICAgICApLAorICAgICAgICAgICAgXSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmNvbW1p
dHNbJ2JyYW5jaC1iJ10gPSBbCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1hJ11b
MF0sIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjJAYnJhbmNoLWInLAor
ICAgICAgICAgICAgICAgIHJldmlzaW9uPTUsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRy
aWJ1dG9yLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY0MTAwLAorICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9JzV0aCBjb21taXRcbicsCisgICAgICAgICAgICApLCBDb21taXQoCisg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4zQGJyYW5jaC1iJywKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbj04LAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAg
ICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NzEwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdl
PSc4dGggY29tbWl0XG4nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorCisgICAgICAgIHNl
bGYuY29tbWl0c1sndGFncy90YWctMSddID0gWworICAgICAgICAgICAgc2VsZi5jb21taXRzWydi
cmFuY2gtYSddWzBdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzFdLCBD
b21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4zQHRhZ3MvdGFnLTEnLAorICAg
ICAgICAgICAgICAgIHJldmlzaW9uPTksCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1
dG9yLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MTAwLAorICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9Jzl0aCBjb21taXRcbicsCisgICAgICAgICAgICApLAorICAgICAgICBdCisg
ICAgICAgIHNlbGYuY29tbWl0c1sndGFncy90YWctMiddID0gWworICAgICAgICAgICAgc2VsZi5j
b21taXRzWydicmFuY2gtYiddWzBdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gt
YiddWzFdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddWzJdLCBDb21taXQo
CisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi40QHRhZ3MvdGFnLTInLAorICAgICAgICAg
ICAgICAgIHJldmlzaW9uPTEwLAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwK
KyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2OTEwMCwKKyAgICAgICAgICAgICAgICBt
ZXNzYWdlPScxMHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKworICAg
IGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19lbnRlcl9f
KCkKKworICAgICAgICBjYWNoZV9wYXRoID0gc2NtcmVtb3RlLlN2bignaHR0cDovL3t9Jy5mb3Jt
YXQoc2VsZi5yZW1vdGUpKS5fY2FjaGVfcGF0aAorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShj
YWNoZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZV9wYXRoLCAncicpIGFzIGNh
Y2hlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2NvbnRlbnRzID0gY2FjaGUucmVhZCgp
CisgICAgICAgICAgICBvcy5yZW1vdmUoY2FjaGVfcGF0aCkKKworICAgICAgICByZXR1cm4gc2Vs
ZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGNh
Y2hlX3BhdGggPSBzY21yZW1vdGUuU3ZuKCdodHRwOi8ve30nLmZvcm1hdChzZWxmLnJlbW90ZSkp
Ll9jYWNoZV9wYXRoCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhY2hlX3BhdGgpOgorICAg
ICAgICAgICAgb3MucmVtb3ZlKGNhY2hlX3BhdGgpCisgICAgICAgIGlmIHNlbGYuX2NhY2hlX2Nv
bnRlbnRzOgorICAgICAgICAgICAgd2l0aCBvcGVuKGNhY2hlX3BhdGgsICd3JykgYXMgY2FjaGU6
CisgICAgICAgICAgICAgICAgY2FjaGUud3JpdGUoc2VsZi5fY2FjaGVfY29udGVudHMpCisKKyAg
ICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBk
ZWYgbGF0ZXN0KHNlbGYpOgorICAgICAgICBsYXRlc3QgPSBzZWxmLmNvbW1pdHNbJ3RydW5rJ11b
LTFdCisgICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5jb21taXRzLnZhbHVlcygpOgorICAgICAg
ICAgICAgZm9yIGNvbW1pdCBpbiBicmFuY2g6CisgICAgICAgICAgICAgICAgaWYgY29tbWl0LnJl
dmlzaW9uID4gbGF0ZXN0LnJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBsYXRlc3QgPSBj
b21taXQKKyAgICAgICAgcmV0dXJuIGxhdGVzdAorCisgICAgZGVmIGJyYW5jaGVzKHNlbGYsIHJl
dmlzaW9uPU5vbmUpOgorICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9uIG9yIHNlbGYubGF0ZXN0
KCkKKyAgICAgICAgYnJhbmNoZXMgPSBzZXQoKQorICAgICAgICBmb3IgYnJhbmNoLCBjb21taXRz
IGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21t
aXRzOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5yZXZpc2lvbiA8PSByZXZpc2lvbiBhbmQg
bm90IGNvbW1pdC5icmFuY2guc3RhcnRzd2l0aCgndGFncycpIGFuZCBjb21taXQuYnJhbmNoICE9
ICd0cnVuayc6CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFkZChjb21taXQuYnJhbmNo
KQorICAgICAgICByZXR1cm4gc29ydGVkKGJyYW5jaGVzKQorCisgICAgZGVmIHRhZ3Moc2VsZiwg
cmV2aXNpb249Tm9uZSk6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb24gb3Igc2VsZi5sYXRl
c3QoKQorICAgICAgICB0YWdzID0gc2V0KCkKKyAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBp
biBzZWxmLmNvbW1pdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0
czoKKyAgICAgICAgICAgICAgICBpZiBjb21taXQucmV2aXNpb24gPD0gcmV2aXNpb24gYW5kIGNv
bW1pdC5icmFuY2guc3RhcnRzd2l0aCgndGFncycpOgorICAgICAgICAgICAgICAgICAgICB0YWdz
LmFkZChjb21taXQuYnJhbmNoKQorICAgICAgICByZXR1cm4gc29ydGVkKHRhZ3MpCisKKyAgICBk
ZWYgcmFuZ2Uoc2VsZiwgY2F0ZWdvcnk9Tm9uZSwgc3RhcnQ9Tm9uZSwgZW5kPU5vbmUpOgorICAg
ICAgICBzdGFydCA9IHN0YXJ0IG9yIHNlbGYubGF0ZXN0KCkKKyAgICAgICAgZW5kID0gZW5kIG9y
IDEKKworICAgICAgICBpZiBjYXRlZ29yeSBhbmQgY2F0ZWdvcnkuc3RhcnRzd2l0aCgnYnJhbmNo
ZXMvJyk6CisgICAgICAgICAgICBjYXRlZ29yeSA9IGNhdGVnb3J5LnNwbGl0KCcvJylbLTFdCisK
KyAgICAgICAgaWYgbm90IGNhdGVnb3J5OgorICAgICAgICAgICAgZm9yIGNvbW1pdHMgaW4gc2Vs
Zi5jb21taXRzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0
czoKKyAgICAgICAgICAgICAgICAgICAgaWYgY29tbWl0LnJldmlzaW9uID09IHN0YXJ0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb21taXQuYnJhbmNoCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBjYXRlZ29yeToKKyAgICAgICAg
ICAgIHJldHVybiBbXQorCisgICAgICAgIHJlc3VsdCA9IFtjb21taXQgZm9yIGNvbW1pdCBpbiBy
ZXZlcnNlZChzZWxmLmNvbW1pdHNbY2F0ZWdvcnldKV0KKyAgICAgICAgaWYgc2VsZi5jb21taXRz
W2NhdGVnb3J5XVswXS5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXN1bHQgKz0gW2NvbW1p
dCBmb3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1sndHJ1bmsnXVs6c2VsZi5jb21t
aXRzW2NhdGVnb3J5XVswXS5icmFuY2hfcG9pbnRdKV0KKworICAgICAgICBmb3IgaW5kZXggaW4g
cmV2ZXJzZWQocmFuZ2UobGVuKHJlc3VsdCkpKToKKyAgICAgICAgICAgIGlmIHJlc3VsdFtpbmRl
eF0ucmV2aXNpb24gPCBlbmQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzppbmRl
eF0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcmVzdWx0W2luZGV4
XS5yZXZpc2lvbiA+IHN0YXJ0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtpbmRl
eDpdCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAg
ICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIGlmIG5vdCB1cmwuc3RhcnRzd2l0aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0YXJ0
c3dpdGgoJ2h0dHBzOi8vJyk6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3Jl
YXRlNDA0KHVybCkKKworICAgICAgICBkYXRhID0geG1sdG9kaWN0LnBhcnNlKGRhdGEpIGlmIGRh
dGEgZWxzZSBOb25lCisgICAgICAgIHN0cmlwcGVkX3VybCA9IHVybC5zcGxpdCgnOi8vJylbLTFd
CisKKyAgICAgICAgIyBMYXRlc3QgcmV2aXNpb24KKyAgICAgICAgaWYgbWV0aG9kID09ICdPUFRJ
T05TJyBhbmQgc3RyaXBwZWRfdXJsID09IHNlbGYucmVtb3RlIGFuZCBkYXRhID09IE9yZGVyZWRE
aWN0KCgKKyAgICAgICAgICAgICgnRDpvcHRpb25zJywgT3JkZXJlZERpY3QoKAorICAgICAgICAg
ICAgICAgICgnQHhtbG5zOkQnLCAnREFWOicpLAorICAgICAgICAgICAgICAgICgnRDphY3Rpdml0
eS1jb2xsZWN0aW9uLXNldCcsIE5vbmUpLAorICAgICAgICAgICAgKSkpLAorICAgICAgICApKToK
KyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tVGV4dCgKKyAgICAgICAgICAg
ICAgICB1cmw9dXJsLAorICAgICAgICAgICAgICAgIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpvcHRpb25zLXJl
c3BvbnNlIHhtbG5zOkQ9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6YWN0aXZp
dHktY29sbGVjdGlvbi1zZXQ+PEQ6aHJlZj4vcmVwb3NpdG9yeS93ZWJraXQvIXN2bi9hY3QvPC9E
OmhyZWY+PC9EOmFjdGl2aXR5LWNvbGxlY3Rpb24tc2V0PjwvRDpvcHRpb25zLXJlc3BvbnNlPlxu
JywKKyAgICAgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAgICAgJ1NWTi1Z
b3VuZ2VzdC1SZXYnOiBzdHIoc2VsZi5sYXRlc3QoKS5yZXZpc2lvbiksCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKQorCisgICAgICAgICMgTGlzdCBjYXRlZ29yeQorICAgICAgICBt
YXRjaCA9IHNlbGYuUkVWSVNJT05fUkVRVUVTVF9SRS5tYXRjaChzdHJpcHBlZF91cmwuc3BsaXQo
JyEnKVstMV0pCisgICAgICAgIGlmIG1ldGhvZCA9PSAnUFJPUEZJTkQnIGFuZCBzdHJpcHBlZF91
cmwuc3RhcnRzd2l0aCgne30hJy5mb3JtYXQoc2VsZi5yZW1vdGUpKSBhbmQgbWF0Y2ggYW5kIGRh
dGEgPT0gT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdwcm9wZmluZCcsIE9yZGVyZWREaWN0
KCgKKyAgICAgICAgICAgICAgICAoJ0B4bWxucycsICdEQVY6JyksCisgICAgICAgICAgICAgICAg
KCdwcm9wJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICAgICAoJ3Jlc291cmNldHlw
ZScsIE9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICAgICAgICAgICAgICgnQHhtbG5zJywgJ0RB
VjonKSwKKyAgICAgICAgICAgICAgICAgICAgKSkpLAorICAgICAgICAgICAgICAgICkpKSwKKyAg
ICAgICAgICAgICkpKSwKKyAgICAgICAgKSk6CisgICAgICAgICAgICBsaW5rcyA9IFtzdHJpcHBl
ZF91cmxbbGVuKHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWzBdKTpdXQorICAgICAgICAgICAgaWYg
bGlua3NbMF1bLTFdICE9ICcvJzoKKyAgICAgICAgICAgICAgICBsaW5rc1swXSArPSAnLycKKwor
ICAgICAgICAgICAgaWYgbWF0Y2guZ3JvdXAoJ2NhdGVnb3J5JykgPT0gJ2JyYW5jaGVzJzoKKyAg
ICAgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYuYnJhbmNoZXMoaW50KG1hdGNoLmdyb3Vw
KCdyZXZpc2lvbicpKSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgne317fS8n
LmZvcm1hdChsaW5rc1swXSwgYnJhbmNoKSkKKworICAgICAgICAgICAgZWxpZiBtYXRjaC5ncm91
cCgnY2F0ZWdvcnknKSA9PSAndGFncyc6CisgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBzZWxm
LnRhZ3MoaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKSk6CisgICAgICAgICAgICAgICAgICAg
IGxpbmtzLmFwcGVuZCgne317fS8nLmZvcm1hdChsaW5rc1swXVs6LTVdLCB0YWcpKQorCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVh
dGU0MDQodXJsKQorCisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UoCisgICAgICAg
ICAgICAgICAgc3RhdHVzX2NvZGU9MjA3LAorICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAg
ICAgICAgICAgICAgdGV4dD0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5c
bicKKyAgICAgICAgICAgICAgICAgICAgJzxEOm11bHRpc3RhdHVzIHhtbG5zOkQ9IkRBVjoiIHht
bG5zOm5zMD0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICd7fTwvRDptdWx0aXN0YXR1
cz5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihbCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzxEOnJlc3BvbnNlIHhtbG5zOmxwMT0iREFWOiI+XG4nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxEOmhyZWY+e308L0Q6aHJlZj5cbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJzxEOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxs
cDE6cmVzb3VyY2V0eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNldHlwZT5cbicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9EOnByb3A+XG4nCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJzxEOnN0YXR1cz5IVFRQLzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzwvRDpyZXNwb25zZT5cbicuZm9ybWF0KGxpbmspIGZvciBsaW5rIGlu
IGxpbmtzCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICApCisKKyAg
ICAgICAgIyBJbmZvIGZvciBjb21taXQsIGJyYW5jaCBvciB0YWcKKyAgICAgICAgaWYgbWV0aG9k
ID09ICdQUk9QRklORCcgYW5kIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fSEnLmZvcm1hdChz
ZWxmLnJlbW90ZSkpIGFuZCBtYXRjaCBhbmQgZGF0YSA9PSBPcmRlcmVkRGljdCgoCisgICAgICAg
ICAgICAoJ3Byb3BmaW5kJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICgnQHhtbG5z
JywgJ0RBVjonKSwKKyAgICAgICAgICAgICAgICAoJ3Byb3AnLCBPcmRlcmVkRGljdCgoCisgICAg
ICAgICAgICAgICAgICAgICgncmVzb3VyY2V0eXBlJywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywg
J0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgICAgICgnZ2V0Y29udGVudGxlbmd0aCcsIE9y
ZGVyZWREaWN0KCgoJ0B4bWxucycsICdEQVY6JyksKSkpLAorICAgICAgICAgICAgICAgICAgICAo
J2RlYWRwcm9wLWNvdW50JywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ2h0dHA6Ly9zdWJ2ZXJz
aW9uLnRpZ3Jpcy5vcmcveG1sbnMvZGF2LycpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd2
ZXJzaW9uLW5hbWUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnREFWOicpLCkpKSwKKyAgICAg
ICAgICAgICAgICAgICAgKCdjcmVhdGlvbmRhdGUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAn
REFWOicpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjcmVhdG9yLWRpc3BsYXluYW1lJywg
T3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgKSkp
LAorICAgICAgICAgICAgKSkpLAorICAgICAgICApKToKKyAgICAgICAgICAgIGJyYW5jaCA9IG1h
dGNoLmdyb3VwKCdjYXRlZ29yeScpCisgICAgICAgICAgICBpZiBicmFuY2guc3RhcnRzd2l0aCgn
YnJhbmNoZXMnKToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSAnLycuam9pbihicmFuY2guc3Bs
aXQoJy8nKVsxOl0pCisKKyAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5jb21taXRz
OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQor
ICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5jb21taXRzW2JyYW5jaF1bMF0KKyAgICAgICAgICAg
IGZvciBjYW5kaWRhdGUgaW4gc2VsZi5jb21taXRzW2JyYW5jaF06CisgICAgICAgICAgICAgICAg
aWYgY2FuZGlkYXRlLnJldmlzaW9uIDw9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSk6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbW1pdCA9IGNhbmRpZGF0ZQorCisgICAgICAgICAgICBzdHJp
cHBlZF91cmwgPSBzdHJpcHBlZF91cmxbbGVuKHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWzBdKTpd
CisgICAgICAgICAgICBpZiBzdHJpcHBlZF91cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAgICAg
ICBzdHJpcHBlZF91cmwgKz0gJy8nCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25z
ZSgKKyAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT0yMDcsCisgICAgICAgICAgICAgICAgdXJs
PXVybCwKKyAgICAgICAgICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6bXVsdGlzdGF0dXMgeG1sbnM6
RD0iREFWOiIgeG1sbnM6bnMwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnJl
c3BvbnNlIHhtbG5zOmxwMT0iREFWOiIgeG1sbnM6bHAzPSJodHRwOi8vc3VidmVyc2lvbi50aWdy
aXMub3JnL3htbG5zL2Rhdi8iIHhtbG5zOmcwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAg
ICAgJzxEOmhyZWY+e308L0Q6aHJlZj5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnByb3Bz
dGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcD5cbicKKyAgICAgICAgICAgICAg
ICAgICAgJzxscDE6cmVzb3VyY2V0eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNldHlw
ZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxscDM6ZGVhZHByb3AtY291bnQ+MTwvbHAzOmRl
YWRwcm9wLWNvdW50PlxuJworICAgICAgICAgICAgICAgICAgICAnPGxwMTp2ZXJzaW9uLW5hbWU+
e308L2xwMTp2ZXJzaW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOmNyZWF0
aW9uZGF0ZT57fTwvbHAxOmNyZWF0aW9uZGF0ZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxs
cDE6Y3JlYXRvci1kaXNwbGF5bmFtZT57fTwvbHAxOmNyZWF0b3ItZGlzcGxheW5hbWU+XG4nCisg
ICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxE
OnN0YXR1cz5IVFRQLzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJworICAgICAgICAgICAgICAgICAg
ICAnPC9EOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4n
CisgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAgICAn
PGcwOmdldGNvbnRlbnRsZW5ndGgvPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9EOnByb3A+
XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpzdGF0dXM+SFRUUC8xLjEgNDA0IE5vdCBGb3Vu
ZDwvRDpzdGF0dXM+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4nCisg
ICAgICAgICAgICAgICAgICAgICc8L0Q6cmVzcG9uc2U+XG4nCisgICAgICAgICAgICAgICAgICAg
ICc8L0Q6bXVsdGlzdGF0dXM+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cmlwcGVkX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5yZXZpc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVz
dGFtcCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTLjEwMzc1NFonKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdC5hdXRob3IuZW1haWwsCisgICAgICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgICkKKworICAgICAgICAjIExvZyBmb3IgY29tbWl0CisgICAgICAgIGlmIG1ldGhv
ZCA9PSAnUkVQT1JUJyBhbmQgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9IScuZm9ybWF0KHNl
bGYucmVtb3RlKSkgYW5kIG1hdGNoIGFuZCBkYXRhLmdldCgnUzpsb2ctcmVwb3J0Jyk6CisgICAg
ICAgICAgICBjb21taXRzID0gc2VsZi5yYW5nZSgKKyAgICAgICAgICAgICAgICBjYXRlZ29yeT1t
YXRjaC5ncm91cCgnY2F0ZWdvcnknKSwKKyAgICAgICAgICAgICAgICBzdGFydD1pbnQoZGF0YVsn
Uzpsb2ctcmVwb3J0J11bJ1M6c3RhcnQtcmV2aXNpb24nXSksCisgICAgICAgICAgICAgICAgZW5k
PWludChkYXRhWydTOmxvZy1yZXBvcnQnXVsnUzplbmQtcmV2aXNpb24nXSksCisgICAgICAgICAg
ICApCisKKyAgICAgICAgICAgIGxpbWl0ID0gaW50KGRhdGFbJ1M6bG9nLXJlcG9ydCddLmdldCgn
UzpsaW1pdCcsIDApKQorICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihjb21taXRzKSA+IGxp
bWl0OgorICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzWzpsaW1pdF0KKworICAgICAg
ICAgICAgaWYgbm90IGNvbW1pdHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3Bv
bnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgK
KyAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT0yMDAsCisgICAgICAgICAgICAgICAgdXJsPXVy
bCwKKyAgICAgICAgICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PlxuJworICAgICAgICAgICAgICAgICc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9InN2bjoi
IHhtbG5zOkQ9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICd7fTwvUzpsb2ctcmVwb3J0Plxu
Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICcnLmpvaW4oWworICAgICAgICAgICAgICAg
ICAgICAgICAgJzxTOmxvZy1pdGVtPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJzxEOnZl
cnNpb24tbmFtZT57fTwvRDp2ZXJzaW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAnPFM6ZGF0ZT57fTwvUzpkYXRlPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ3t9e308
L1M6bG9nLWl0ZW0+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZnJvbXRp
bWVzdGFtcChjb21taXQudGltZXN0YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMuMTAz
NzU0WicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnIGlmIGRhdGFbJ1M6bG9nLXJl
cG9ydCddLmdldCgnUzpyZXZwcm8nKSBlbHNlICc8RDpjb21tZW50Pnt9PC9EOmNvbW1lbnQ+XG4n
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxEOmNyZWF0b3ItZGlzcGxheW5hbWU+e308
L0Q6Y3JlYXRvci1kaXNwbGF5bmFtZT5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21taXQubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8Uzptb2RpZmllZC1wYXRoIG5vZGUta2luZD0i
ZmlsZSIgdGV4dC1tb2RzPSJ0cnVlIiBwcm9wLW1vZHM9ImZhbHNlIj4ve2JyYW5jaH0vQ2hhbmdl
bG9nPC9TOm1vZGlmaWVkLXBhdGg+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxT
Om1vZGlmaWVkLXBhdGggbm9kZS1raW5kPSJmaWxlIiB0ZXh0LW1vZHM9InRydWUiIHByb3AtbW9k
cz0iZmFsc2UiPi97YnJhbmNofS9maWxlLmNwcDwvUzptb2RpZmllZC1wYXRoPlxuJy5mb3JtYXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1jb21taXQuYnJhbmNoIGlm
IGNvbW1pdC5icmFuY2guc3BsaXQoJy8nKVswXSBpbiBbJ3RydW5rJywgJ3RhZ3MnXSBlbHNlICdi
cmFuY2hlcy97fScuZm9ybWF0KGNvbW1pdC5icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgaWYgJ1M6ZGlzY292ZXItY2hhbmdlZC1wYXRocycgaW4gZGF0YVsnUzpsb2ctcmVw
b3J0J10gZWxzZSAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICkgZm9yIGNvbW1pdCBpbiBj
b21taXRzCisgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICkKKworICAgICAg
ICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9yZW1vdGUvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLnNjbSBpbXBvcnQgU2NtCitmcm9tIHdl
YmtpdHNjbXB5LnJlbW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUv
c2NtLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHNpeAor
Citmcm9tIHdlYmtpdHNjbXB5LnNjbV9iYXNlIGltcG9ydCBTY21CYXNlCisKKworY2xhc3MgU2Nt
KFNjbUJhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3VybChjbHMsIHVybCk6
CisgICAgICAgIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IHJlbW90ZQorCisgICAgICAgIGlmIHJl
bW90ZS5Tdm4uaXNfd2Vic2VydmVyKHVybCk6CisgICAgICAgICAgICByZXR1cm4gcmVtb3RlLlN2
bih1cmwpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoIid7fScgaXMgbm90IGEga25vd24gU0NNIHNl
cnZlciIuZm9ybWF0KHVybCkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZfYnJh
bmNoZXM9Tm9uZSwgcHJvZF9icmFuY2hlcz1Ob25lKToKKyAgICAgICAgc3VwZXIoU2NtLCBzZWxm
KS5fX2luaXRfXyhkZXZfYnJhbmNoZXM9ZGV2X2JyYW5jaGVzLCBwcm9kX2JyYW5jaGVzPXByb2Rf
YnJhbmNoZXMpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzaXguc3RyaW5nX3R5
cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICd1cmwnIHRvIGJl
IGEgc3RyaW5nIHR5cGUsIG5vdCAne30nIi5mb3JtYXQodHlwZSh1cmwpKSkKKyAgICAgICAgc2Vs
Zi51cmwgPSB1cmwKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3JlbW90ZS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3N2bi5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1v
dGUvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQ2IEBACisjIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYmlzZWN0CitpbXBvcnQgY2FsZW5kYXIK
K2ltcG9ydCBmYXN0ZW5lcnMKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1w
b3J0IHJlcXVlc3RzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB4bWx0b2RpY3QKKworZnJvbSBk
YXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxvZywg
cnVuLCBkZWNvcmF0b3JzCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90ZS5zY20gaW1wb3J0IFNjbQor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvciwgVmVyc2lvbgorCisK
K2NsYXNzIFN2bihTY20pOgorICAgIFVSTF9SRSA9IHJlLmNvbXBpbGUocidcQWh0dHBzPzovL3N2
bi4oP1A8aG9zdD5cUyspL3JlcG9zaXRvcnkvXFMrXFonKQorICAgIEhJU1RPUllfUkUgPSByZS5j
b21waWxlKGInPEQ6dmVyc2lvbi1uYW1lPig/UDxyZXZpc2lvbj5cZCspPC9EOnZlcnNpb24tbmFt
ZT4nKQorICAgIENBQ0hFX1ZFUlNJT04gPSBWZXJzaW9uKDEpCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgaXNfd2Vic2VydmVyKGNscywgdXJsKToKKyAgICAgICAgcmV0dXJuIFRydWUgaWYg
Y2xzLlVSTF9SRS5tYXRjaCh1cmwpIGVsc2UgRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB1cmwsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5vbmUpOgorICAgICAgICBp
ZiB1cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAgIHVybCArPSAnLycKKyAgICAgICAgaWYgbm90
IHNlbGYuaXNfd2Vic2VydmVyKHVybCk6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlv
bigiJ3t9JyBpcyBub3QgYSB2YWxpZCBTVk4gd2Vic2VydmVyIi5mb3JtYXQodXJsKSkKKyAgICAg
ICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyh1cmwsIGRldl9icmFuY2hlcz1kZXZfYnJhbmNo
ZXMsIHByb2RfYnJhbmNoZXM9cHJvZF9icmFuY2hlcykKKworICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyhzZWxmLl9jYWNoZV9wYXRoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICB3aXRoIHNlbGYuX2NhY2hlX2xvY2soKSwgb3BlbihzZWxmLl9jYWNoZV9wYXRoKSBhcyBmaWxl
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9IGpzb24ubG9hZChm
aWxlKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAg
c2VsZi5fbWV0YWRhdGFfY2FjaGUgPSBkaWN0KHZlcnNpb249c3RyKHNlbGYuQ0FDSEVfVkVSU0lP
TikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9IGRp
Y3QodmVyc2lvbj1zdHIoc2VsZi5DQUNIRV9WRVJTSU9OKSkKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBpc19zdm4oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAZGVjb3JhdG9y
cy5NZW1vaXplKHRpbWVvdXQ9NjApCisgICAgZGVmIF9sYXRlc3Qoc2VsZik6CisgICAgICAgIHJl
c3BvbnNlID0gcmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nT1BUSU9OUycs
CisgICAgICAgICAgICB1cmw9c2VsZi51cmwsCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAg
ICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAn
QWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywK
KyAgICAgICAgICAgIH0sIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+XG4nCisgICAgICAgICAgICAnPEQ6b3B0aW9ucyB4bWxuczpEPSJEQVY6Ij5cbicKKyAgICAg
ICAgICAgICcgICAgPEQ6YWN0aXZpdHktY29sbGVjdGlvbi1zZXQ+PC9EOmFjdGl2aXR5LWNvbGxl
Y3Rpb24tc2V0PlxuJworICAgICAgICAgICAgJzwvRDpvcHRpb25zPlxuJywKKyAgICAgICAgKQor
ICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICByZXR1cm4gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTVk4tWW91
bmdlc3QtUmV2JykpCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1GYWxzZSkKKyAg
ICBkZWYgaW5mbyhzZWxmLCBicmFuY2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwgdGFnPU5vbmUpOgor
ICAgICAgICBpZiB0YWcgYW5kIGJyYW5jaDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J0Nhbm5vdCBzcGVjaWZ5IGJvdGggYnJhbmNoIGFuZCB0YWcnKQorICAgICAgICBpZiB0YWcgYW5k
IHJldmlzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHNwZWNpZnkg
Ym90aCBicmFuY2ggYW5kIHRhZycpCisKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAg
ICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAgICAg
IHJldmlzaW9uID0gc2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgICAgIGlmIG5vdCByZXZpc2lvbjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCByZXZpc2lvbjoK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHRoZSBsYXRlc3Qg
cmV2aXNpb24nKQorCisgICAgICAgIHVybCA9ICd7fSFzdm4vcnZyL3t9Jy5mb3JtYXQoc2VsZi51
cmwsIHJldmlzaW9uKQorICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCAhPSBzZWxmLmRlZmF1
bHRfYnJhbmNoIGFuZCAnLycgbm90IGluIGJyYW5jaDoKKyAgICAgICAgICAgIHVybCA9ICd7fS9i
cmFuY2hlcy97fScuZm9ybWF0KHVybCwgYnJhbmNoKQorICAgICAgICBlbGlmIHRhZzoKKyAgICAg
ICAgICAgIHVybCA9ICd7fS90YWdzL3t9Jy5mb3JtYXQodXJsLCB0YWcpCisgICAgICAgIGVsaWYg
YnJhbmNoOgorICAgICAgICAgICAgdXJsID0gJ3t9L3t9Jy5mb3JtYXQodXJsLCBicmFuY2ggb3Ig
c2VsZi5kZWZhdWx0X2JyYW5jaCkKKworICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVl
c3QoCisgICAgICAgICAgICBtZXRob2Q9J1BST1BGSU5EJywKKyAgICAgICAgICAgIHVybD11cmws
CisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzog
J3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAor
ICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9Jzxwcm9w
ZmluZCB4bWxucz0iREFWOiI+XG4nCisgICAgICAgICAgICAnICAgIDxwcm9wPlxuJworICAgICAg
ICAgICAgJyAgICAgICAgPHJlc291cmNldHlwZSB4bWxucz0iREFWOiIvPlxuJworICAgICAgICAg
ICAgJyAgICAgICAgPGdldGNvbnRlbnRsZW5ndGggeG1sbnM9IkRBVjoiLz5cbicKKyAgICAgICAg
ICAgICcgICAgICAgIDxkZWFkcHJvcC1jb3VudCB4bWxucz0iaHR0cDovL3N1YnZlcnNpb24udGln
cmlzLm9yZy94bWxucy9kYXYvIi8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8dmVyc2lvbi1u
YW1lIHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRpb25kYXRl
IHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRvci1kaXNwbGF5
bmFtZSB4bWxucz0iREFWOiIvPlxuJworICAgICAgICAgICAgJyAgICA8L3Byb3A+XG4nCisgICAg
ICAgICAgICAnPC9wcm9wZmluZD5cbicsCisgICAgICAgICkKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgbm90IGluIFsyMDAsIDIwN106CisgICAgICAgICAgICByZXR1cm4ge30KKwor
ICAgICAgICByZXNwb25zZSA9IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KQorICAgICAg
ICByZXNwb25zZSA9IHJlc3BvbnNlLmdldCgnRDptdWx0aXN0YXR1cycsIHJlc3BvbnNlKS5nZXQo
J0Q6cmVzcG9uc2UnLCBbXSkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAg
cmV0dXJuIHt9CisKKyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZVswXSBpZiBpc2luc3RhbmNl
KHJlc3BvbnNlLCBsaXN0KSBlbHNlIHJlc3BvbnNlCisgICAgICAgIHJlc3BvbnNlID0gcmVzcG9u
c2VbJ0Q6cHJvcHN0YXQnXVswXVsnRDpwcm9wJ10KKworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgJ0xhc3QgQ2hhbmdlZCBSZXYnOiByZXNwb25zZVsnbHAxOnZlcnNpb24tbmFtZSddLAor
ICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBBdXRob3InOiByZXNwb25zZVsnbHAxOmNyZWF0b3It
ZGlzcGxheW5hbWUnXSwKKyAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcgJy5qb2lu
KHJlc3BvbnNlWydscDE6Y3JlYXRpb25kYXRlJ10uc3BsaXQoJ1QnKSkuc3BsaXQoJy4nKVswXSwK
KyAgICAgICAgICAgICdSZXZpc2lvbic6IHJldmlzaW9uLAorICAgICAgICB9CisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CisgICAgICAgIHJldHVybiAndHJ1
bmsnCisKKyAgICBkZWYgbGlzdChzZWxmLCBjYXRlZ29yeSk6CisgICAgICAgIHJldmlzaW9uID0g
c2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAgICAgICAgcmV0
dXJuIFtdCisKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAg
ICAgbWV0aG9kPSdQUk9QRklORCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9ydnIve30ve30n
LmZvcm1hdChzZWxmLnVybCwgcmV2aXNpb24sIGNhdGVnb3J5KSwKKyAgICAgICAgICAgIGhlYWRl
cnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAgICAg
ICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAgJ0RF
UFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz5cbicKKyAgICAgICAgICAgICAgICAnPHByb3BmaW5kIHhtbG5zPSJEQVY6
Ij5cbicKKyAgICAgICAgICAgICAgICAnICAgIDxwcm9wPjxyZXNvdXJjZXR5cGUgeG1sbnM9IkRB
VjoiLz48L3Byb3A+XG4nCisgICAgICAgICAgICAgICAgJzwvcHJvcGZpbmQ+XG4nLAorICAgICAg
ICApCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlIG5vdCBpbiBbMjAwLCAyMDddOgor
ICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcmVzcG9uc2VzID0geG1sdG9kaWN0LnBh
cnNlKHJlc3BvbnNlLnRleHQpCisgICAgICAgIHJlc3BvbnNlcyA9IHJlc3BvbnNlcy5nZXQoJ0Q6
bXVsdGlzdGF0dXMnLCByZXNwb25zZXMpLmdldCgnRDpyZXNwb25zZScsIFtdKQorCisgICAgICAg
IHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzcG9uc2UgaW4gcmVzcG9uc2VzOgorICAgICAg
ICAgICAgY2FuZGlkYXRlID0gcmVzcG9uc2VbJ0Q6aHJlZiddLnNwbGl0KCchc3ZuL3J2ci97fS97
fS8nLmZvcm1hdChyZXZpc2lvbiwgY2F0ZWdvcnkpKVstMV0ucnN0cmlwKCcvJykKKyAgICAgICAg
ICAgIGlmIG5vdCBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKGNhbmRpZGF0ZSkKKworICAgICAgICByZXR1cm4gcmVzdWx0cwor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGJyYW5jaGVzKHNlbGYpOgorICAgICAgICByZXR1cm4g
W3NlbGYuZGVmYXVsdF9icmFuY2hdICsgc2VsZi5saXN0KCdicmFuY2hlcycpCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGlzdCgndGFn
cycpCisKKyAgICBAcHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYg
X2NhY2hlX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4odGVtcGZpbGUu
Z2V0dGVtcGRpcigpLCAnc3ZuLnt9Jy5mb3JtYXQoc2VsZi5VUkxfUkUubWF0Y2goc2VsZi51cmwp
Lmdyb3VwKCdob3N0JykpLCAnd2Via2l0c2NtcHktY2FjaGUuanNvbicpCisKKyAgICBkZWYgX2Nh
Y2hlX2xvY2soc2VsZik6CisgICAgICAgIHJldHVybiBmYXN0ZW5lcnMuSW50ZXJQcm9jZXNzTG9j
ayhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHNlbGYuX2NhY2hlX3BhdGgpLCAnY2FjaGUu
bG9jaycpKQorCisgICAgZGVmIF9jYWNoZV9yZXZpc2lvbnMoc2VsZiwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICBp
c19kZWZhdWx0X2JyYW5jaCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAg
IGlmIGJyYW5jaCBub3QgaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGU6CisgICAgICAgICAgICBzZWxm
Ll9tZXRhZGF0YV9jYWNoZVticmFuY2hdID0gWzBdIGlmIGlzX2RlZmF1bHRfYnJhbmNoIGVsc2Ug
W10KKyAgICAgICAgcG9zID0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0pCisKKyAg
ICAgICAgIyBJZiB3ZSBhcmVuJ3Qgb24gdGhlIGRlZmF1bHQgYnJhbmNoLCB3ZSB3aWxsIG5lZWQg
dGhlIGRlZmF1bHQgYnJhbmNoIHRvIGRldGVybWluZSB3aGVuCisgICAgICAgICMgb3VyICBicmFu
Y2ggIGludGVyc2VjdHMgd2l0aCB0aGUgZGVmYXVsdCBicmFuY2guCisgICAgICAgIGlmIG5vdCBp
c19kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFu
Y2g9c2VsZi5kZWZhdWx0X2JyYW5jaCkKKworICAgICAgICBkaWRfd2FybiA9IEZhbHNlCisgICAg
ICAgIGNvdW50ID0gMAorCisgICAgICAgIGxhdGVzdCA9IHNlbGYuX2xhdGVzdCgpCisgICAgICAg
IHdpdGggcmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAg
ICAgICAgICAgIHVybD0ne30hc3ZuL3J2ci97fS97fScuZm9ybWF0KAorICAgICAgICAgICAgICAg
IHNlbGYudXJsLAorICAgICAgICAgICAgICAgIGxhdGVzdCwKKyAgICAgICAgICAgICAgICBicmFu
Y2ggaWYgaXNfZGVmYXVsdF9icmFuY2ggb3IgJy8nIGluIGJyYW5jaCBlbHNlICdicmFuY2hlcy97
fScuZm9ybWF0KGJyYW5jaCksCisgICAgICAgICAgICApLCBzdHJlYW09VHJ1ZSwKKyAgICAgICAg
ICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwn
LAorICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAg
ICAgICAgJ0RFUFRIJzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPFM6bG9nLXJlcG9ydCB4
bWxuczpTPSJzdm46Ij5cbicKKyAgICAgICAgICAgICAgICAnPFM6c3RhcnQtcmV2aXNpb24+e3Jl
dmlzaW9ufTwvUzpzdGFydC1yZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAnPFM6ZW5kLXJl
dmlzaW9uPjA8L1M6ZW5kLXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzpyZXZwcm9w
PnN2bjpkYXRlPC9TOnJldnByb3A+XG4nCisgICAgICAgICAgICAgICAgJzwvUzpsb2ctcmVwb3J0
PlxuJy5mb3JtYXQocmV2aXNpb249bGF0ZXN0KSwKKyAgICAgICAgKSBhcyByZXNwb25zZToKKyAg
ICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgICAg
ICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIGNvbnN0cnVjdCBicmFuY2ggaGlzdG9y
eSBmb3IgJ3t9JyIuZm9ybWF0KGJyYW5jaCkpCisKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJl
c3BvbnNlLml0ZXJfbGluZXMoKToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuSElTVE9S
WV9SRS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBkaWRfd2FybjoK
KyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBj
b3VudCA+IDEwMDA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygnQ2FjaGluZyBj
b21taXQgZGF0YSBmb3Ige30sIHRoaXMgd2lsbCB0YWtlIGEgZmV3IG1pbnV0ZXMuLi4nLmZvcm1h
dChicmFuY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGlkX3dhcm4gPSBUcnVlCisKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkKKyAg
ICAgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hd
W3BvcyAtIDFdID09IHJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIGlmIG5vdCBpc19kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAg
aWYgcmV2aXNpb24gaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGVbc2VsZi5kZWZhdWx0X2JyYW5jaF06
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdLmlu
c2VydChwb3MsIHJldmlzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdLmluc2VydChwb3MsIHJldmlz
aW9uKQorCisgICAgICAgIGlmIHNlbGYuX21ldGFkYXRhX2NhY2hlW3NlbGYuZGVmYXVsdF9icmFu
Y2hdWzBdID09IFswXToKKyAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlWydpZGVudGlm
aWVyJ10gPSBsZW4oc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSkKKworICAgICAgICB0cnk6
CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmRpcm5hbWUoc2VsZi5f
Y2FjaGVfcGF0aCkpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFt
ZShzZWxmLl9jYWNoZV9wYXRoKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fY2FjaGVfbG9jaygp
LCBvcGVuKHNlbGYuX2NhY2hlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBq
c29uLmR1bXAoc2VsZi5fbWV0YWRhdGFfY2FjaGUsIGZpbGUsIGluZGVudD00KQorICAgICAgICBl
eGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb2coIkZhaWxlZCB0
byB3cml0ZSBTVk4gY2FjaGUgdG8gJ3t9JyIuZm9ybWF0KHNlbGYuX2NhY2hlX3BhdGgpKQorCisg
ICAgICAgIHJldHVybiBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdCisKKyAgICBkZWYgX2Jy
YW5jaF9mb3Ioc2VsZiwgcmV2aXNpb24pOgorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJl
cXVlc3QoCisgICAgICAgICAgICBtZXRob2Q9J1JFUE9SVCcsCisgICAgICAgICAgICB1cmw9J3t9
IXN2bi9ydnIve30nLmZvcm1hdChzZWxmLnVybCwgcmV2aXNpb24pLAorICAgICAgICAgICAgaGVh
ZGVycz17CisgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAg
ICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAn
REVQVEgnOiAnMScsCisgICAgICAgICAgICB9LCBkYXRhPSc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9
InN2bjoiPlxuJworICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lvbj57cmV2aXNpb259
PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzplbmQtcmV2aXNpb24+
e3JldmlzaW9ufTwvUzplbmQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgJzxTOmxpbWl0
PjE8L1M6bGltaXQ+XG4nCisgICAgICAgICAgICAgICAgJzxTOmRpc2NvdmVyLWNoYW5nZWQtcGF0
aHMvPlxuJworICAgICAgICAgICAgICAgICc8L1M6bG9nLXJlcG9ydD5cbicuZm9ybWF0KHJldmlz
aW9uPXJldmlzaW9uKSwKKyAgICAgICAgKQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IGdldCBh
IHZhbGlkIGFuc3dlciBmcm9tIHRoZSByZW1vdGUsIGJ1dCB3ZSBmb3VuZCBhIG1hdGNoaW5nIGNh
bmRpZGF0ZSwgd2UgcmV0dXJuIHRoYXQuCisgICAgICAgICMgVGhpcyBpcyBhIGJpdCByaXNreSBi
ZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHRoZSBicmFuY2ggd2UgaGF2ZSBjYWNoZWQgaXMgbm90
IHRoZSBjYW5vbmljYWwgYnJhbmNoCisgICAgICAgICMgZm9yIGEgcmV2aXNpb24sIGJ1dCB0aGlz
IGlzIHByZXR0eSB1bmxpa2VseSBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgdGhlIG4gKyAxIGxl
dmVsIGJyYW5jaCB0byBiZSBjYWNoZWQKKyAgICAgICAgIyBidXQgbm90IHRoZSBuIGxldmVsIGJy
YW5jaC4KKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9yICd7
fSciLmZvcm1hdChyZXZpc2lvbikpCisKKyAgICAgICAgcGFydGlhbCA9IE5vbmUKKyAgICAgICAg
aXRlbXMgPSB4bWx0b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dClbJ1M6bG9nLXJlcG9ydCddWydT
OmxvZy1pdGVtJ10KKyAgICAgICAgZm9yIGdyb3VwIGluIChpdGVtcy5nZXQoJ1M6bW9kaWZpZWQt
cGF0aCcsIFtdKSwgaXRlbXMuZ2V0KCdTOmFkZGVkLXBhdGgnLCBbXSkpOgorICAgICAgICAgICAg
Zm9yIGl0ZW0gaW4gZ3JvdXAgaWYgaXNpbnN0YW5jZShncm91cCwgbGlzdCkgZWxzZSBbZ3JvdXBd
OgorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0aWFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJ0aWFsID0gaXRlbVsnI3RleHQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBpdGVtWycj
dGV4dCddLnN0YXJ0c3dpdGgocGFydGlhbCk6CisgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwg
PSBwYXJ0aWFsWzotMV0KKworICAgICAgICBjYW5kaWRhdGUgPSBwYXJ0aWFsLnNwbGl0KCcvJylb
MiBpZiBwYXJ0aWFsLnN0YXJ0c3dpdGgoJy9icmFuY2hlcycpIGVsc2UgMV0KKworICAgICAgICAj
IFRhZ3MgYXJlIGEgdW5pcXVlIGNhc2UgZm9yIFNWTiwgYmVjYXVzZSB0aGV5J3JlIHRyZWF0ZWQg
YXMgYnJhbmNoZXMgaW4gbmF0aXZlIFNWTgorICAgICAgICBpZiBjYW5kaWRhdGUgPT0gJ3RhZ3Mn
OgorICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxbMTpdLnJzdHJpcCgnLycpCisgICAgICAgIHJl
dHVybiBjYW5kaWRhdGUKKworICAgIGRlZiBfY29tbWl0X2NvdW50KHNlbGYsIHJldmlzaW9uPU5v
bmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVs
dF9icmFuY2gKKworICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIHJldmlzaW9u
IG5vdCBpbiBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdOgorICAgICAgICAgICAgICAgIHJh
aXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gZmluZCAne30nIG9uICd7fSciLmZvcm1hdChy
ZXZpc2lvbiwgYnJhbmNoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXNlY3QuYmlzZWN0X2xlZnQo
c2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSwgaW50KHJldmlzaW9uKSkKKyAgICAgICAgaWYg
YnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNl
bGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0pCisgICAgICAgIHJldHVybiBzZWxmLl9jb21taXRf
Y291bnQocmV2aXNpb249c2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXVswXSwgYnJhbmNoPXNl
bGYuZGVmYXVsdF9icmFuY2gpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9Tm9uZSwgcmV2
aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5vbmUpOgorICAg
ICAgICBpZiBoYXNoOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIGRvZXMgbm90
IHN1cHBvcnQgR2l0IGhhc2hlcycpCisKKyAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCA9IE5v
bmUKKyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHJl
dmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUg
Ym90aCByZXZpc2lvbiBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiB0YWc6CisgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBhbmQg
aWRlbnRpZmllcicpCisKKyAgICAgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQsIGlkZW50aWZp
ZXIsIHBhcnNlZF9icmFuY2ggPSBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmllciwg
ZG9fYXNzZXJ0PVRydWUpCisgICAgICAgICAgICBpZiBwYXJzZWRfYnJhbmNoOgorICAgICAgICAg
ICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHBhcnNlZF9icmFuY2g6CisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fs
bGVyIHBhc3NlZCBib3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZpZWQg
ZGlmZmVyZW50IGJyYW5jaGVzICh7fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJhbmNoLCBwYXJzZWRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyYW5jaCA9IHBh
cnNlZF9icmFuY2gKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaCBvciBzZWxmLmRlZmF1bHRf
YnJhbmNoCisKKyAgICAgICAgICAgIGlmIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoIGFu
ZCBwYXJzZWRfYnJhbmNoX3BvaW50OgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0
aW9uKCdDYW5ub3QgcHJvdmlkZSBhIGJyYW5jaCBwb2ludCBmb3IgYSBjb21taXQgb24gdGhlIGRl
ZmF1bHQgYnJhbmNoJykKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuX21ldGFkYXRhX2NhY2hl
LmdldChicmFuY2gsIFtdKSBvciBpZGVudGlmaWVyID49IGxlbihzZWxmLl9tZXRhZGF0YV9jYWNo
ZS5nZXQoYnJhbmNoLCBbXSkpOgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaCAhPSBzZWxmLmRl
ZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMo
YnJhbmNoPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVf
cmV2aXNpb25zKGJyYW5jaD1icmFuY2gpCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyID4gbGVu
KHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKSk6CisgICAgICAgICAgICAgICAg
cmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fubm90IGJlIGZvdW5kIG9uIHRo
ZSBzcGVjaWZpZWQgYnJhbmNoIGluIHRoZSBjdXJyZW50IGNoZWNrb3V0Jy5mb3JtYXQoaWRlbnRp
ZmllcikpCisKKyAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgPD0gMDoKKyAgICAgICAgICAgICAg
ICBpZiBicmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lsbGVnYWwgbmVnYXRpdmUgaWRlbnRpZmllciBvbiB0aGUg
ZGVmYXVsdCBicmFuY2gnKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9jb21t
aXRfY291bnQoYnJhbmNoPWJyYW5jaCkgKyBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgaWYg
aWRlbnRpZmllciA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9u
KCdJZGVudGlmaWVyIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBzcGVjaWZpZWQgYnJhbmNoJykKKwor
ICAgICAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuZGVmYXVsdF9icmFuY2gKKworICAgICAgICAg
ICAgcmV2aXNpb24gPSBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdW2lkZW50aWZpZXJdCisg
ICAgICAgICAgICBpbmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBicmFuY2g9YnJhbmNoLCBy
ZXZpc2lvbj1yZXZpc2lvbikKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9mb3Io
cmV2aXNpb24pCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJy
YW5jaCwgW10pIG9yIGlkZW50aWZpZXIgPj0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChi
cmFuY2gsIFtdKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJyYW5j
aD1icmFuY2gpCisKKyAgICAgICAgZWxpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIGJyYW5j
aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGgg
YnJhbmNoIGFuZCByZXZpc2lvbicpCisgICAgICAgICAgICBpZiB0YWc6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBhbmQgcmV2aXNpb24n
KQorICAgICAgICAgICAgcmV2aXNpb24gPSBDb21taXQuX3BhcnNlX3JldmlzaW9uKHJldmlzaW9u
LCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9mb3Io
cmV2aXNpb24pCisgICAgICAgICAgICBpbmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBicmFu
Y2g9YnJhbmNoLCByZXZpc2lvbj1yZXZpc2lvbikKKworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgaWYgYnJhbmNoIGFuZCB0YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
Q2Fubm90IGRlZmluZSBib3RoIGJyYW5jaCBhbmQgdGFnJykKKworICAgICAgICAgICAgYnJhbmNo
ID0gTm9uZSBpZiB0YWcgZWxzZSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAg
ICAgICAgaW5mbyA9IHNlbGYuaW5mbyh0YWc9dGFnKSBpZiB0YWcgZWxzZSBzZWxmLmluZm8oYnJh
bmNoPWJyYW5jaCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvOgorICAgICAgICAgICAgICAgIHJh
aXNlIHNlbGYuRXhjZXB0aW9uKCIne30nIGlzIG5vdCBhIHJlY29nbml6ZWQge30iLmZvcm1hdCgK
KyAgICAgICAgICAgICAgICAgICAgdGFnIG9yIGJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAg
J3RhZycgaWYgdGFnIGVsc2UgJ2JyYW5jaCcsCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAg
ICAgIHJldmlzaW9uID0gaW50KGluZm9bJ0xhc3QgQ2hhbmdlZCBSZXYnXSkKKyAgICAgICAgICAg
IGlmIGJyYW5jaCAhPSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgIGJyYW5j
aCA9IHNlbGYuX2JyYW5jaF9mb3IocmV2aXNpb24pCisKKyAgICAgICAgZGF0ZSA9IGRhdGV0aW1l
LnN0cnB0aW1lKGluZm9bJ0xhc3QgQ2hhbmdlZCBEYXRlJ10sICclWS0lbS0lZCAlSDolTTolUycp
CisKKyAgICAgICAgaWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICBpZiBicmFuY2ggIT0g
c2VsZi5kZWZhdWx0X2JyYW5jaCBhbmQgcmV2aXNpb24gPiBzZWxmLl9tZXRhZGF0YV9jYWNoZS5n
ZXQoc2VsZi5kZWZhdWx0X2JyYW5jaCwgWzBdKVstMV06CisgICAgICAgICAgICAgICAgc2VsZi5f
Y2FjaGVfcmV2aXNpb25zKGJyYW5jaD1zZWxmLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAg
aWYgcmV2aXNpb24gbm90IGluIHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKToK
KyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPWJyYW5jaCkKKyAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9jb21taXRfY291bnQocmV2aXNpb249cmV2aXNp
b24sIGJyYW5jaD1icmFuY2gpCisKKyAgICAgICAgYnJhbmNoX3BvaW50ID0gTm9uZSBpZiBicmFu
Y2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBlbHNlIHNlbGYuX2NvbW1pdF9jb3VudChicmFuY2g9
YnJhbmNoKQorICAgICAgICBpZiBicmFuY2hfcG9pbnQgYW5kIHBhcnNlZF9icmFuY2hfcG9pbnQg
YW5kIGJyYW5jaF9wb2ludCAhPSBwYXJzZWRfYnJhbmNoX3BvaW50OgorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgJ2JyYW5jaF9wb2ludCcgZG9lcyBub3QgbWF0Y2ggYnJh
bmNoIHBvaW50IG9mIHNwZWNpZmllZCBicmFuY2giKQorCisgICAgICAgIHJlc3BvbnNlID0gcmVx
dWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAgICAgICAgICAg
IHVybD0ne30hc3ZuL3J2ci97fScuZm9ybWF0KHNlbGYudXJsLCByZXZpc2lvbiksCisgICAgICAg
ICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1s
JywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAg
ICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9JzxTOmxvZy1yZXBvcnQg
eG1sbnM6Uz0ic3ZuOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lv
bj57cmV2aXNpb259PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICAgICAn
PFM6ZW5kLXJldmlzaW9uPntyZXZpc2lvbn08L1M6ZW5kLXJldmlzaW9uPlxuJworICAgICAgICAg
ICAgICAgICAgICAnPFM6bGltaXQ+MTwvUzpsaW1pdD5cbicKKyAgICAgICAgICAgICAgICAgICAg
JzwvUzpsb2ctcmVwb3J0PlxuJy5mb3JtYXQocmV2aXNpb249cmV2aXNpb24pLAorICAgICAgICAp
CisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgorICAgICAgICAgICAg
cmVzcG9uc2UgPSB4bWx0b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dCkKKyAgICAgICAgICAgIHJl
c3BvbnNlID0gcmVzcG9uc2UuZ2V0KCdTOmxvZy1yZXBvcnQnLCB7fSkuZ2V0KCdTOmxvZy1pdGVt
JykKKworICAgICAgICAgICAgbmFtZSA9IHJlc3BvbnNlLmdldCgnRDpjcmVhdG9yLWRpc3BsYXlu
YW1lJykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZXNwb25zZS5nZXQoJ0Q6Y29tbWVudCcsIE5v
bmUpCisgICAgICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxm
LkV4Y2VwdGlvbignRmFpbGVkIHRvIGZpbmQgY3JlYXRvciBuYW1lJykKKworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc2VsZi5sb2coJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHJlbW90ZSwgY2Fu
bm90IGNvbXB1dGUgY29tbWl0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUK
KyAgICAgICAgICAgIG5hbWUgPSBpbmZvWydMYXN0IENoYW5nZWQgQXV0aG9yJ10KKworICAgICAg
ICBhdXRob3IgPSBDb250cmlidXRvci5ieV9lbWFpbC5nZXQoCisgICAgICAgICAgICBuYW1lLAor
ICAgICAgICAgICAgQ29udHJpYnV0b3IuYnlfbmFtZS5nZXQoCisgICAgICAgICAgICAgICAgbmFt
ZSwKKyAgICAgICAgICAgICAgICBDb250cmlidXRvcihuYW1lPW5hbWUsIGVtYWlscz1bbmFtZV0g
aWYgJ0AnIGluIG5hbWUgZWxzZSBbXSksCisgICAgICAgICAgICApLAorICAgICAgICApCisKKyAg
ICAgICAgcmV0dXJuIENvbW1pdCgKKyAgICAgICAgICAgIHJldmlzaW9uPWludChyZXZpc2lvbiks
CisgICAgICAgICAgICBicmFuY2g9YnJhbmNoLAorICAgICAgICAgICAgaWRlbnRpZmllcj1pZGVu
dGlmaWVyLAorICAgICAgICAgICAgYnJhbmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAgICAg
ICAgIHRpbWVzdGFtcD1pbnQoY2FsZW5kYXIudGltZWdtKGRhdGUudGltZXR1cGxlKCkpKSwKKyAg
ICAgICAgICAgIGF1dGhvcj1hdXRob3IsCisgICAgICAgICAgICBtZXNzYWdlPW1lc3NhZ2UsCisg
ICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyNjk5MjApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAg
KzI3LDEwIEBAIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGlt
ZQogZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IGxvY2FsLCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1v
Y2tzLCByZW1vdGUKIAogCi1jbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNz
IFRlc3RMb2NhbFN2bih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aCA9ICcvbW9jay9yZXBv
c2l0b3J5JwogCiAgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgpAQCAtMjE3LDMgKzIxNyw4
NyBAQCBjbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCg5LCByZXBvc2l0b3J5LmNoZWNrb3V0KCd0YWctMScpLnJldmlzaW9uKQog
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCByZXBvc2l0b3J5LmNvbW1pdCgpLnJldmlz
aW9uKQorCisKK2NsYXNzIFRlc3RSZW1vdGVTdm4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJl
bW90ZSA9ICdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JworCisgICAg
ZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90
ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Vi
a2l0JyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3RlLlN2bi5pc193ZWJz
ZXJ2ZXIoJ2h0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdCcpLCBUcnVlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwczov
L2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2JyYW5j
aGVzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuYnJhbmNoZXMsCisgICAgICAgICAgICAgICAgWyd0cnVuaycsICdicmFuY2gtYScsICdicmFu
Y2gtYiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdGFncyhzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KAorICAgICAgICAgICAgICAgIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLnRhZ3MsCisgICAgICAg
ICAgICAgICAgWyd0YWctMScsICd0YWctMiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRl
c3Rfc2NtX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZW1vdGUuU3ZuKHNl
bGYucmVtb3RlKS5pc19zdm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtb3RlLlN2bihz
ZWxmLnJlbW90ZSkuaXNfZ2l0KQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVh
bCh7CisgICAgICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBBdXRob3InOiAnamJlZGFyZEBhcHBs
ZS5jb20nLAorICAgICAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcyMDIwLTEwLTAy
IDExOjU4OjIwJywKKyAgICAgICAgICAgICAgICAnTGFzdCBDaGFuZ2VkIFJldic6ICc2JywKKyAg
ICAgICAgICAgICAgICAnUmV2aXNpb24nOiAxMCwKKyAgICAgICAgICAgIH0sIHJlbW90ZS5Tdm4o
c2VsZi5yZW1vdGUpLmluZm8oKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbihzZWxm
KToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcxQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChy
ZXZpc2lvbj0xKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyQHRydW5rJywgc3Ry
KHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0yKSkpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcyLjFAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJl
bW90ZSkuY29tbWl0KHJldmlzaW9uPTMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzNAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTQp
KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYicsIHN0cihyZW1v
dGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249NSkpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnNEB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21t
aXQocmV2aXNpb249NikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5j
aC1hJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj03KSkpCisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIocmVtb3RlLlN2
bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTgpKSkKKworICAgICAgICAgICAgIyBPdXQt
b2YtYm91bmRzIGNvbW1pdAorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhyZW1v
dGUuU3ZuLkV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249MTEpKQorCisgICAgZGVm
IHRlc3RfY29tbWl0X2Zyb21fYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90
ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAdHJ1bmsnLCBzdHIocmVt
b3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGJyYW5jaD0ndHJ1bmsnKSkpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJl
bW90ZSkuY29tbWl0KGJyYW5jaD0nYnJhbmNoLWEnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0
KGJyYW5jaD0nYnJhbmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyKHNlbGYpOgor
ICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMSwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzFAdHJ1
bmsnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcmVtb3RlLlN2
bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzJAdHJ1bmsnKS5yZXZpc2lvbikKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29t
bWl0KGlkZW50aWZpZXI9JzIuMUBicmFuY2gtYScpLnJldmlzaW9uKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCg0LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmll
cj0nM0B0cnVuaycpLnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBy
ZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJyku
cmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIHJlbW90ZS5Tdm4oc2Vs
Zi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QHRydW5rJykucmV2aXNpb24pCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChp
ZGVudGlmaWVyPScyLjJAYnJhbmNoLWEnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoOCwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIu
M0BicmFuY2gtYicpLnJldmlzaW9uKQorCisgICAgZGVmIHRlc3Rfbm9uX2Nhbm5vbmljYWxfaWRl
bnRpZmllcnMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVt
b3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJzFAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0
KGlkZW50aWZpZXI9Jy0xQGJyYW5jaC1hJykpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcyQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlm
aWVyPScwQGJyYW5jaC1iJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMUB0cnVu
aycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJh
bmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF90YWcoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3Mu
cmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCByZW1vdGUuU3Zu
KHNlbGYucmVtb3RlKS5jb21taXQodGFnPSd0YWctMScpLnJldmlzaW9uKQorCisgICAgZGVmIHRl
c3RfdGFnX3ByZXZpb3VzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSku
Y29tbWl0KGlkZW50aWZpZXI9JzIuMkB0YWdzL3RhZy0xJykucmV2aXNpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414588</attachid>
            <date>2020-11-19 08:50:56 -0800</date>
            <delta_ts>2020-11-19 10:11:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201119085055.patch</filename>
            <type>text/plain</type>
            <size>51676</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDAzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTExLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4ODI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTMwNDQ4NT4KKworICAgICAgICBSdWJi
ZXItc3RhbXBlZCBieSBBYWthc2ggSmFpbi4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBp
bnRlcmFjdCB3aXRoIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHN2biBjb21t
YW5kLiBUaGlzIGlzIHVzZWZ1bAorICAgICAgICBmb3Igc2VydmljZXMgaG9zdGVkIGluIGVudmly
b25tZW50cyB3aGVyZSBpbnN0YWxsaW5nIGJpbmFyaWVzIGlzIGJ1cmRlbnNvbWUsIG9yIGluIGNh
c2VzIHdoZXJlCisgICAgICAgIHRvb2xzIGFyZSBydW5uaW5nIHdpdGhvdXQgYSBjaGVja291dC4K
KworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
X19pbml0X18ucHk6IEJ1bXAgdmVyc2lvbiwgYWRkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5w
eToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9yZW1vdGU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3Rl
L3N2bi5weTogQWRkZWQuCisgICAgICAgIChTdm4pOiBJbnRlcmFjdCB3aXRoIGEgcmVtb3RlIFN1
YnZlcnNpb24gcmVwb3NpdG9yeSB3aXRob3V0IHVzaW5nIHRoZSBzdm4gY29tbWFuZC4KKyAgICAg
ICAgKFN2bi5pc193ZWJzZXJ2ZXIpOiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgdXJsIG1hdGNoZXMg
dGhlIHBhdHRlcm4gZm9yIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgIChTdm4uX19pbml0
X18pOgorICAgICAgICAoU3ZuLmlzX3N2bik6CisgICAgICAgIChTdm4uX2xhdGVzdCk6IFJldHVy
biB0aGUgbGF0ZXN0IHJldmlzaW9uLgorICAgICAgICAoU3ZuLmluZm8pOiBSZXR1cm4gdGhlIGJp
dHMgb2YgdGhlIGBzdm4gaW5mb2AgY29tbWFuZCB0aGF0IGFyZSB1c2VkIGluIGNvZGUuCisgICAg
ICAgIChTdm4uZGVmYXVsdF9icmFuY2gpOgorICAgICAgICAoU3ZuLmxpc3QpOgorICAgICAgICAo
U3ZuLmJyYW5jaGVzKTogTGlzdCBhbGwgYnJhbmNoZXMuCisgICAgICAgIChTdm4udGFncyk6IExp
c3QgYWxsIHRhZ3MuCisgICAgICAgIChTdm4uX2NhY2hlX3BhdGgpOiBSZXR1cm4gcGF0aCB0byBq
c29uIGNhY2hlLgorICAgICAgICAoU3ZuLl9jYWNoZV9sb2NrKTogRmlsZXN5c3RlbSBsb2NrIHVz
ZWQgdG8gcHJldmVudCBjb250ZW50aW9uIG92ZXIgdGhlIGpzb24gY2FjaGUsIHRoaXMKKyAgICAg
ICAgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBkdXJpbmcgdGVzdGluZy4KKyAgICAgICAgKFN2
bi5fY2FjaGVfcmV2aXNpb25zKTogQ2FjaGUgdGhlIGlkZW50aWZpZXIvcmV2aXNpb24gbWFwcGlu
Zy4KKyAgICAgICAgKFN2bi5fYnJhbmNoX2Zvcik6IEdpdmVuIGEgY29tbWl0LCBkZXRlcm1pbmUg
d2hpY2ggYnJhbmNoIHRoYXQgY29tbWl0IGlzIG9uLgorICAgICAgICAoU3ZuLl9jb21taXRfY291
bnQpOiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBjb21taXRzIG9uIGEgYnJhbmNoIHNpbmNlIGJy
YW5jaGluZy4KKyAgICAgICAgKFN2bi5jb21taXQpOiBSZXR1cm4gYSBjb21taXQgb2JqZWN0IGdp
dmVuIGEgcmV2aXNpb24sIGJyYW5jaCwgaWRlbnRpZmllciBvciB0YWcuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlOiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKToKKyAg
ICAgICAgKFNjbS5mcm9tX3VybCk6IEdpdmVuIGEgVVJMLCBhdHRlbXB0IHRvIGRldGVybWluZSB3
aGF0IGtpbmQgb2YgcmVtb3RlIEFQSSBpcyBhdmFpbGFibGUuCisgICAgICAgIChTY20uX19pbml0
X18pOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9zdm4ucHk6IEFkZGVkLgorICAgICAgICAoU3ZuKTogTW9jayByZXF1ZXN0
cyBuZWVkZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHJlbW90ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnku
CisgICAgICAgIChTdm4ubGF0ZXN0KTogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24g
YW55IGJyYW5jaC4KKyAgICAgICAgKFN2bi5icmFuY2hlcyk6IFJldHVybiBicmFuY2hlcyBhdCBz
b21lIHJldmlzaW9uLgorICAgICAgICAoU3ZuLnRhZ3MpOiBSZXR1cm4gdGFncyBhdCBzb21lIHJl
dmlzaW9uLgorICAgICAgICAoU3ZuLnJhbmdlKTogR2l2ZSBhIHN0YXJ0IGFuZCBlbmQgcmV2aXNp
b24sIGFsb25nIHdpdGggYSB0YWcgb3IgYnJhbmNoLAorICAgICAgICByZXR1cm4gYWxsIGNvbW1p
dHMgaW4gdGhhdCByYW5nZS4KKyAgICAgICAgKFN2bi5yZXF1ZXN0KTogSGFuZGxlIGEgc21hbGwg
c3Vic2V0IG9mIHJlcXVlc3RzIHRvIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3Qu
cHk6CisgICAgICAgIChUZXN0TG9jYWxTdm4pOiBNb3ZlZCBmcm9tIFRlc3RTdm4uCisgICAgICAg
IChUZXN0UmVtb3RlU3ZuKTogQWRkZWQuCisgICAgICAgIChUZXN0U3ZuKTogTW92ZWQgdG8gVGVz
dExvY2FsU3ZuLgorCiAyMDIwLTExLTE5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIE1ha2UgYmxvY2stc3BhbW1lcnMgYXV0b2luc3RhbGwgcmVxdWVzdHMK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzAwMzEpCisrKyBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAg
ICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29y
ZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVy
c2lvbiA9IFZlcnNpb24oMCwgMywgMikKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQsIDApCiAKIEF1
dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2RhdGV1dGlsJywgVmVyc2lvbigyLCA4LCAxKSwg
cHlwaV9uYW1lPSdweXRob24tZGF0ZXV0aWwnKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9j
a3MvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MDAzMSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNCBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogCiBmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzIGltcG9ydCBsb2NhbAor
ZnJvbSB3ZWJraXRzY21weS5tb2NrcyBpbXBvcnQgcmVtb3RlCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzLnJlbW90ZS5z
dm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvc3ZuLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L21vY2tzL3JlbW90ZS9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
ODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcwor
aW1wb3J0IHJlCitpbXBvcnQgeG1sdG9kaWN0CisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9y
ZGVyZWREaWN0Citmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRjb3Jl
cHkgaW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1
dG9yLCByZW1vdGUgYXMgc2NtcmVtb3RlCisKKworY2xhc3MgU3ZuKG1vY2tzLlJlcXVlc3RzKToK
KyAgICB0b3AgPSBOb25lCisgICAgUkVWSVNJT05fUkVRVUVTVF9SRSA9IHJlLmNvbXBpbGUocidz
dm4vcnZyLyg/UDxyZXZpc2lvbj5cZCspKC8oP1A8Y2F0ZWdvcnk+XFMrKSk/JCcpCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcmVtb3RlPSdzdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtp
dCcpOgorICAgICAgICBpZiBub3Qgc2NtcmVtb3RlLlN2bi5pc193ZWJzZXJ2ZXIoJ2h0dHBzOi8v
e30nLmZvcm1hdChyZW1vdGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyJ7fSIg
aXMgbm90IGEgdmFsaWQgU3ZuIHJlbW90ZScuZm9ybWF0KHJlbW90ZSkpCisKKyAgICAgICAgc3Vw
ZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyhyZW1vdGUuc3BsaXQoJy8nKVswXSkKKyAgICAgICAgaWYg
cmVtb3RlWy0xXSAhPSAnLyc6CisgICAgICAgICAgICByZW1vdGUgKz0gJy8nCisgICAgICAgIHNl
bGYucmVtb3RlID0gcmVtb3RlCisgICAgICAgIHNlbGYuX2NhY2hlX2NvbnRlbnRzID0gTm9uZQor
ICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHNjbXJlbW90ZS5Tdm4oJ2h0dHA6Ly97fScuZm9y
bWF0KHNlbGYucmVtb3RlKSkuX2NhY2hlX2xvY2soKSkKKworICAgICAgICAjIFByb3ZpZGUgYSBy
ZWFzb25hYmxlIHNldCBvZiBjb21taXRzIHRvIHRlc3QgYWdhaW5zdAorICAgICAgICBjb250cmli
dXRvciA9IENvbnRyaWJ1dG9yKG5hbWU9J0pvbmF0aGFuIEJlZGFyZCcsIGVtYWlscz1bJ2piZWRh
cmRAYXBwbGUuY29tJ10pCisgICAgICAgIHNlbGYuY29tbWl0cyA9IHsKKyAgICAgICAgICAgICd0
cnVuayc6IFsKKyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXI9JzFAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj0xLAorICAg
ICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAg
IHRpbWVzdGFtcD0xNjAxNjYwMTAwLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPScxc3Qg
Y29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcj0nMkB0cnVuaycsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTIs
CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wPTE2MDE2NjExMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
JzJuZCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPSczQHRydW5rJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNp
b249NCwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAg
ICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZT0nNHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9JzRAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbj02LAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAg
ICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY1MTAwLAorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPSc2dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAg
ICBdLCAnYnJhbmNoLWEnOiBbCisgICAgICAgICAgICAgICAgQ29tbWl0KAorICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnLAorICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbj0zLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAg
ICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYyMTAwLAorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlPSczcmQgY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1hJywKKyAgICAgICAgICAg
ICAgICAgICAgcmV2aXNpb249NywKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1
dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NjEwMCwKKyAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZT0nN3RoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgXSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1i
J10gPSBbCisgICAgICAgICAgICBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1hJ11bMF0sIENvbW1pdCgK
KyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjJAYnJhbmNoLWInLAorICAgICAgICAgICAg
ICAgIHJldmlzaW9uPTUsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAg
ICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY0MTAwLAorICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9JzV0aCBjb21taXRcbicsCisgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcj0nMi4zQGJyYW5jaC1iJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj04
LAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICB0
aW1lc3RhbXA9MTYwMTY2NzEwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSc4dGggY29tbWl0
XG4nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorCisgICAgICAgIHNlbGYuY29tbWl0c1sn
dGFncy90YWctMSddID0gWworICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzBd
LAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzFdLCBDb21taXQoCisgICAg
ICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4zQHRhZ3MvdGFnLTEnLAorICAgICAgICAgICAgICAg
IHJldmlzaW9uPTksCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MTAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9
Jzl0aCBjb21taXRcbicsCisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgICAgIHNlbGYu
Y29tbWl0c1sndGFncy90YWctMiddID0gWworICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFu
Y2gtYiddWzBdLAorICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddWzFdLAorICAg
ICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddWzJdLCBDb21taXQoCisgICAgICAgICAg
ICAgICAgaWRlbnRpZmllcj0nMi40QHRhZ3MvdGFnLTInLAorICAgICAgICAgICAgICAgIHJldmlz
aW9uPTEwLAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAg
ICAgICB0aW1lc3RhbXA9MTYwMTY2OTEwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPScxMHRo
IGNvbW1pdFxuJywKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKworICAgIGRlZiBfX2VudGVy
X18oc2VsZik6CisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19lbnRlcl9fKCkKKworICAgICAg
ICBjYWNoZV9wYXRoID0gc2NtcmVtb3RlLlN2bignaHR0cDovL3t9Jy5mb3JtYXQoc2VsZi5yZW1v
dGUpKS5fY2FjaGVfcGF0aAorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjYWNoZV9wYXRoKToK
KyAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZV9wYXRoLCAncicpIGFzIGNhY2hlOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2NhY2hlX2NvbnRlbnRzID0gY2FjaGUucmVhZCgpCisgICAgICAgICAg
ICBvcy5yZW1vdmUoY2FjaGVfcGF0aCkKKworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVm
IF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGNhY2hlX3BhdGggPSBz
Y21yZW1vdGUuU3ZuKCdodHRwOi8ve30nLmZvcm1hdChzZWxmLnJlbW90ZSkpLl9jYWNoZV9wYXRo
CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhY2hlX3BhdGgpOgorICAgICAgICAgICAgb3Mu
cmVtb3ZlKGNhY2hlX3BhdGgpCisgICAgICAgIGlmIHNlbGYuX2NhY2hlX2NvbnRlbnRzOgorICAg
ICAgICAgICAgd2l0aCBvcGVuKGNhY2hlX3BhdGgsICd3JykgYXMgY2FjaGU6CisgICAgICAgICAg
ICAgICAgY2FjaGUud3JpdGUoc2VsZi5fY2FjaGVfY29udGVudHMpCisKKyAgICAgICAgc3VwZXIo
U3ZuLCBzZWxmKS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgbGF0ZXN0KHNl
bGYpOgorICAgICAgICBsYXRlc3QgPSBzZWxmLmNvbW1pdHNbJ3RydW5rJ11bLTFdCisgICAgICAg
IGZvciBicmFuY2ggaW4gc2VsZi5jb21taXRzLnZhbHVlcygpOgorICAgICAgICAgICAgZm9yIGNv
bW1pdCBpbiBicmFuY2g6CisgICAgICAgICAgICAgICAgaWYgY29tbWl0LnJldmlzaW9uID4gbGF0
ZXN0LnJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBsYXRlc3QgPSBjb21taXQKKyAgICAg
ICAgcmV0dXJuIGxhdGVzdAorCisgICAgZGVmIGJyYW5jaGVzKHNlbGYsIHJldmlzaW9uPU5vbmUp
OgorICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9uIG9yIHNlbGYubGF0ZXN0KCkKKyAgICAgICAg
YnJhbmNoZXMgPSBzZXQoKQorICAgICAgICBmb3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29t
bWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAgICAg
ICAgICAgICAgIGlmIGNvbW1pdC5yZXZpc2lvbiA8PSByZXZpc2lvbiBhbmQgbm90IGNvbW1pdC5i
cmFuY2guc3RhcnRzd2l0aCgndGFncycpIGFuZCBjb21taXQuYnJhbmNoICE9ICd0cnVuayc6Cisg
ICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFkZChjb21taXQuYnJhbmNoKQorICAgICAgICBy
ZXR1cm4gc29ydGVkKGJyYW5jaGVzKQorCisgICAgZGVmIHRhZ3Moc2VsZiwgcmV2aXNpb249Tm9u
ZSk6CisgICAgICAgIHJldmlzaW9uID0gcmV2aXNpb24gb3Igc2VsZi5sYXRlc3QoKQorICAgICAg
ICB0YWdzID0gc2V0KCkKKyAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1p
dHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAg
ICAgICAgICBpZiBjb21taXQucmV2aXNpb24gPD0gcmV2aXNpb24gYW5kIGNvbW1pdC5icmFuY2gu
c3RhcnRzd2l0aCgndGFncycpOgorICAgICAgICAgICAgICAgICAgICB0YWdzLmFkZChjb21taXQu
YnJhbmNoKQorICAgICAgICByZXR1cm4gc29ydGVkKHRhZ3MpCisKKyAgICBkZWYgcmFuZ2Uoc2Vs
ZiwgY2F0ZWdvcnk9Tm9uZSwgc3RhcnQ9Tm9uZSwgZW5kPU5vbmUpOgorICAgICAgICBzdGFydCA9
IHN0YXJ0IG9yIHNlbGYubGF0ZXN0KCkKKyAgICAgICAgZW5kID0gZW5kIG9yIDEKKworICAgICAg
ICBpZiBjYXRlZ29yeSBhbmQgY2F0ZWdvcnkuc3RhcnRzd2l0aCgnYnJhbmNoZXMvJyk6CisgICAg
ICAgICAgICBjYXRlZ29yeSA9IGNhdGVnb3J5LnNwbGl0KCcvJylbLTFdCisKKyAgICAgICAgaWYg
bm90IGNhdGVnb3J5OgorICAgICAgICAgICAgZm9yIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLnZh
bHVlcygpOgorICAgICAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgY29tbWl0LnJldmlzaW9uID09IHN0YXJ0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2F0ZWdvcnkgPSBjb21taXQuYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhaworCisgICAgICAgIGlmIG5vdCBjYXRlZ29yeToKKyAgICAgICAgICAgIHJldHVybiBb
XQorCisgICAgICAgIHJlc3VsdCA9IFtjb21taXQgZm9yIGNvbW1pdCBpbiByZXZlcnNlZChzZWxm
LmNvbW1pdHNbY2F0ZWdvcnldKV0KKyAgICAgICAgaWYgc2VsZi5jb21taXRzW2NhdGVnb3J5XVsw
XS5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXN1bHQgKz0gW2NvbW1pdCBmb3IgY29tbWl0
IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1sndHJ1bmsnXVs6c2VsZi5jb21taXRzW2NhdGVnb3J5
XVswXS5icmFuY2hfcG9pbnRdKV0KKworICAgICAgICBmb3IgaW5kZXggaW4gcmV2ZXJzZWQocmFu
Z2UobGVuKHJlc3VsdCkpKToKKyAgICAgICAgICAgIGlmIHJlc3VsdFtpbmRleF0ucmV2aXNpb24g
PCBlbmQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzppbmRleF0KKyAgICAgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcmVzdWx0W2luZGV4XS5yZXZpc2lvbiA+
IHN0YXJ0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtpbmRleDpdCisgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcmVxdWVz
dChzZWxmLCBtZXRob2QsIHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5v
dCB1cmwuc3RhcnRzd2l0aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0YXJ0c3dpdGgoJ2h0dHBz
Oi8vJyk6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkK
KworICAgICAgICBkYXRhID0geG1sdG9kaWN0LnBhcnNlKGRhdGEpIGlmIGRhdGEgZWxzZSBOb25l
CisgICAgICAgIHN0cmlwcGVkX3VybCA9IHVybC5zcGxpdCgnOi8vJylbLTFdCisKKyAgICAgICAg
IyBMYXRlc3QgcmV2aXNpb24KKyAgICAgICAgaWYgbWV0aG9kID09ICdPUFRJT05TJyBhbmQgc3Ry
aXBwZWRfdXJsID09IHNlbGYucmVtb3RlIGFuZCBkYXRhID09IE9yZGVyZWREaWN0KCgKKyAgICAg
ICAgICAgICgnRDpvcHRpb25zJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICgnQHht
bG5zOkQnLCAnREFWOicpLAorICAgICAgICAgICAgICAgICgnRDphY3Rpdml0eS1jb2xsZWN0aW9u
LXNldCcsIE5vbmUpLAorICAgICAgICAgICAgKSkpLAorICAgICAgICApKToKKyAgICAgICAgICAg
IHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tVGV4dCgKKyAgICAgICAgICAgICAgICB1cmw9dXJs
LAorICAgICAgICAgICAgICAgIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpvcHRpb25zLXJlc3BvbnNlIHhtbG5z
OkQ9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6YWN0aXZpdHktY29sbGVjdGlv
bi1zZXQ+PEQ6aHJlZj4vcmVwb3NpdG9yeS93ZWJraXQvIXN2bi9hY3QvPC9EOmhyZWY+PC9EOmFj
dGl2aXR5LWNvbGxlY3Rpb24tc2V0PjwvRDpvcHRpb25zLXJlc3BvbnNlPlxuJywKKyAgICAgICAg
ICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAgICAgJ1NWTi1Zb3VuZ2VzdC1SZXYn
OiBzdHIoc2VsZi5sYXRlc3QoKS5yZXZpc2lvbiksCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKQorCisgICAgICAgICMgTGlzdCBjYXRlZ29yeQorICAgICAgICBtYXRjaCA9IHNlbGYu
UkVWSVNJT05fUkVRVUVTVF9SRS5tYXRjaChzdHJpcHBlZF91cmwuc3BsaXQoJyEnKVstMV0pCisg
ICAgICAgIGlmIG1ldGhvZCA9PSAnUFJPUEZJTkQnIGFuZCBzdHJpcHBlZF91cmwuc3RhcnRzd2l0
aCgne30hJy5mb3JtYXQoc2VsZi5yZW1vdGUpKSBhbmQgbWF0Y2ggYW5kIGRhdGEgPT0gT3JkZXJl
ZERpY3QoKAorICAgICAgICAgICAgKCdwcm9wZmluZCcsIE9yZGVyZWREaWN0KCgKKyAgICAgICAg
ICAgICAgICAoJ0B4bWxucycsICdEQVY6JyksCisgICAgICAgICAgICAgICAgKCdwcm9wJywgT3Jk
ZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICAgICAoJ3Jlc291cmNldHlwZScsIE9yZGVyZWRE
aWN0KCgKKyAgICAgICAgICAgICAgICAgICAgICAgICgnQHhtbG5zJywgJ0RBVjonKSwKKyAgICAg
ICAgICAgICAgICAgICAgKSkpLAorICAgICAgICAgICAgICAgICkpKSwKKyAgICAgICAgICAgICkp
KSwKKyAgICAgICAgKSk6CisgICAgICAgICAgICBsaW5rcyA9IFtzdHJpcHBlZF91cmxbbGVuKHN0
cmlwcGVkX3VybC5zcGxpdCgnLycpWzBdKTpdXQorICAgICAgICAgICAgaWYgbGlua3NbMF1bLTFd
ICE9ICcvJzoKKyAgICAgICAgICAgICAgICBsaW5rc1swXSArPSAnLycKKworICAgICAgICAgICAg
aWYgbWF0Y2guZ3JvdXAoJ2NhdGVnb3J5JykgPT0gJ2JyYW5jaGVzJzoKKyAgICAgICAgICAgICAg
ICBmb3IgYnJhbmNoIGluIHNlbGYuYnJhbmNoZXMoaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicp
KSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmtzLmFwcGVuZCgne317fS8nLmZvcm1hdChsaW5r
c1swXSwgYnJhbmNoKSkKKworICAgICAgICAgICAgZWxpZiBtYXRjaC5ncm91cCgnY2F0ZWdvcnkn
KSA9PSAndGFncyc6CisgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBzZWxmLnRhZ3MoaW50KG1h
dGNoLmdyb3VwKCdyZXZpc2lvbicpKSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmtzLmFwcGVu
ZCgne317fS8nLmZvcm1hdChsaW5rc1swXVs6LTVdLCB0YWcpKQorCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQor
CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgc3Rh
dHVzX2NvZGU9MjA3LAorICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAg
dGV4dD0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbicKKyAgICAgICAg
ICAgICAgICAgICAgJzxEOm11bHRpc3RhdHVzIHhtbG5zOkQ9IkRBVjoiIHhtbG5zOm5zMD0iREFW
OiI+XG4nCisgICAgICAgICAgICAgICAgICAgICd7fTwvRDptdWx0aXN0YXR1cz5cbicuZm9ybWF0
KAorICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihbCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJzxEOnJlc3BvbnNlIHhtbG5zOmxwMT0iREFWOiI+XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzxEOmhyZWY+e308L0Q6aHJlZj5cbicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzxEOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxscDE6cmVzb3VyY2V0
eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNldHlwZT5cbicKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnPC9EOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzxEOnN0YXR1cz5IVFRQLzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzwvRDpyZXNwb25zZT5cbicuZm9ybWF0KGxpbmspIGZvciBsaW5rIGluIGxpbmtzCisgICAg
ICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICApCisKKyAgICAgICAgIyBJbmZv
IGZvciBjb21taXQsIGJyYW5jaCBvciB0YWcKKyAgICAgICAgaWYgbWV0aG9kID09ICdQUk9QRklO
RCcgYW5kIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fSEnLmZvcm1hdChzZWxmLnJlbW90ZSkp
IGFuZCBtYXRjaCBhbmQgZGF0YSA9PSBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ3Byb3Bm
aW5kJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICgnQHhtbG5zJywgJ0RBVjonKSwK
KyAgICAgICAgICAgICAgICAoJ3Byb3AnLCBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAgICAg
ICAgICgncmVzb3VyY2V0eXBlJywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSks
CisgICAgICAgICAgICAgICAgICAgICgnZ2V0Y29udGVudGxlbmd0aCcsIE9yZGVyZWREaWN0KCgo
J0B4bWxucycsICdEQVY6JyksKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2RlYWRwcm9wLWNv
dW50JywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ2h0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5v
cmcveG1sbnMvZGF2LycpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd2ZXJzaW9uLW5hbWUn
LCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnREFWOicpLCkpKSwKKyAgICAgICAgICAgICAgICAg
ICAgKCdjcmVhdGlvbmRhdGUnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAnREFWOicpLCkpKSwK
KyAgICAgICAgICAgICAgICAgICAgKCdjcmVhdG9yLWRpc3BsYXluYW1lJywgT3JkZXJlZERpY3Qo
KCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgKSkpLAorICAgICAgICAg
ICAgKSkpLAorICAgICAgICApKToKKyAgICAgICAgICAgIGJyYW5jaCA9IG1hdGNoLmdyb3VwKCdj
YXRlZ29yeScpCisgICAgICAgICAgICBpZiBicmFuY2guc3RhcnRzd2l0aCgnYnJhbmNoZXMnKToK
KyAgICAgICAgICAgICAgICBicmFuY2ggPSAnLycuam9pbihicmFuY2guc3BsaXQoJy8nKVsxOl0p
CisKKyAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5jb21taXRzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorICAgICAgICAgICAg
Y29tbWl0ID0gc2VsZi5jb21taXRzW2JyYW5jaF1bMF0KKyAgICAgICAgICAgIGZvciBjYW5kaWRh
dGUgaW4gc2VsZi5jb21taXRzW2JyYW5jaF06CisgICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRl
LnJldmlzaW9uIDw9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSk6CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdCA9IGNhbmRpZGF0ZQorCisgICAgICAgICAgICBzdHJpcHBlZF91cmwgPSBz
dHJpcHBlZF91cmxbbGVuKHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWzBdKTpdCisgICAgICAgICAg
ICBpZiBzdHJpcHBlZF91cmxbLTFdICE9ICcvJzoKKyAgICAgICAgICAgICAgICBzdHJpcHBlZF91
cmwgKz0gJy8nCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAg
ICAgICAgICBzdGF0dXNfY29kZT0yMDcsCisgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAg
ICAgICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Plxu
JworICAgICAgICAgICAgICAgICAgICAnPEQ6bXVsdGlzdGF0dXMgeG1sbnM6RD0iREFWOiIgeG1s
bnM6bnMwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnJlc3BvbnNlIHhtbG5z
OmxwMT0iREFWOiIgeG1sbnM6bHAzPSJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL3htbG5z
L2Rhdi8iIHhtbG5zOmcwPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOmhyZWY+
e308L0Q6aHJlZj5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnByb3BzdGF0PlxuJworICAg
ICAgICAgICAgICAgICAgICAnPEQ6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxscDE6
cmVzb3VyY2V0eXBlPjxEOmNvbGxlY3Rpb24vPjwvbHAxOnJlc291cmNldHlwZT5cbicKKyAgICAg
ICAgICAgICAgICAgICAgJzxscDM6ZGVhZHByb3AtY291bnQ+MTwvbHAzOmRlYWRwcm9wLWNvdW50
PlxuJworICAgICAgICAgICAgICAgICAgICAnPGxwMTp2ZXJzaW9uLW5hbWU+e308L2xwMTp2ZXJz
aW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOmNyZWF0aW9uZGF0ZT57fTwv
bHAxOmNyZWF0aW9uZGF0ZT5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxscDE6Y3JlYXRvci1k
aXNwbGF5bmFtZT57fTwvbHAxOmNyZWF0b3ItZGlzcGxheW5hbWU+XG4nCisgICAgICAgICAgICAg
ICAgICAgICc8L0Q6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxEOnN0YXR1cz5IVFRQ
LzEuMSAyMDAgT0s8L0Q6c3RhdHVzPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9EOnByb3Bz
dGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPEQ6cHJvcHN0YXQ+XG4nCisgICAgICAgICAg
ICAgICAgICAgICc8RDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAgICAnPGcwOmdldGNvbnRl
bnRsZW5ndGgvPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9EOnByb3A+XG4nCisgICAgICAg
ICAgICAgICAgICAgICc8RDpzdGF0dXM+SFRUUC8xLjEgNDA0IE5vdCBGb3VuZDwvRDpzdGF0dXM+
XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6cHJvcHN0YXQ+XG4nCisgICAgICAgICAgICAg
ICAgICAgICc8L0Q6cmVzcG9uc2U+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L0Q6bXVsdGlz
dGF0dXM+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkX3VybCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRp
bWUoJyVZLSVtLSVkVCVIOiVNOiVTLjEwMzc1NFonKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbW1pdC5hdXRob3IuZW1haWwsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICkK
KworICAgICAgICAjIExvZyBmb3IgY29tbWl0CisgICAgICAgIGlmIG1ldGhvZCA9PSAnUkVQT1JU
JyBhbmQgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9IScuZm9ybWF0KHNlbGYucmVtb3RlKSkg
YW5kIG1hdGNoIGFuZCBkYXRhLmdldCgnUzpsb2ctcmVwb3J0Jyk6CisgICAgICAgICAgICBjb21t
aXRzID0gc2VsZi5yYW5nZSgKKyAgICAgICAgICAgICAgICBjYXRlZ29yeT1tYXRjaC5ncm91cCgn
Y2F0ZWdvcnknKSwKKyAgICAgICAgICAgICAgICBzdGFydD1pbnQoZGF0YVsnUzpsb2ctcmVwb3J0
J11bJ1M6c3RhcnQtcmV2aXNpb24nXSksCisgICAgICAgICAgICAgICAgZW5kPWludChkYXRhWydT
OmxvZy1yZXBvcnQnXVsnUzplbmQtcmV2aXNpb24nXSksCisgICAgICAgICAgICApCisKKyAgICAg
ICAgICAgIGxpbWl0ID0gaW50KGRhdGFbJ1M6bG9nLXJlcG9ydCddLmdldCgnUzpsaW1pdCcsIDAp
KQorICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihjb21taXRzKSA+IGxpbWl0OgorICAgICAg
ICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzWzpsaW1pdF0KKworICAgICAgICAgICAgaWYgbm90
IGNvbW1pdHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQw
NCh1cmwpCisKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAgICAg
ICAgICBzdGF0dXNfY29kZT0yMDAsCisgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAg
ICAgICAgICB0ZXh0PSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJwor
ICAgICAgICAgICAgICAgICc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9InN2bjoiIHhtbG5zOkQ9IkRB
VjoiPlxuJworICAgICAgICAgICAgICAgICd7fTwvUzpsb2ctcmVwb3J0PlxuJy5mb3JtYXQoCisg
ICAgICAgICAgICAgICAgICAgICcnLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgJzxT
OmxvZy1pdGVtPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJzxEOnZlcnNpb24tbmFtZT57
fTwvRDp2ZXJzaW9uLW5hbWU+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnPFM6ZGF0ZT57
fTwvUzpkYXRlPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ3t9e308L1M6bG9nLWl0ZW0+
XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQucmV2aXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21t
aXQudGltZXN0YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMuMTAzNzU0WicpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcnIGlmIGRhdGFbJ1M6bG9nLXJlcG9ydCddLmdldCgn
UzpyZXZwcm8nKSBlbHNlICc8RDpjb21tZW50Pnt9PC9EOmNvbW1lbnQ+XG4nCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJzxEOmNyZWF0b3ItZGlzcGxheW5hbWU+e308L0Q6Y3JlYXRvci1k
aXNwbGF5bmFtZT5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21taXQubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LmF1
dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICc8Uzptb2RpZmllZC1wYXRoIG5vZGUta2luZD0iZmlsZSIgdGV4dC1t
b2RzPSJ0cnVlIiBwcm9wLW1vZHM9ImZhbHNlIj4ve2JyYW5jaH0vQ2hhbmdlbG9nPC9TOm1vZGlm
aWVkLXBhdGg+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxTOm1vZGlmaWVkLXBh
dGggbm9kZS1raW5kPSJmaWxlIiB0ZXh0LW1vZHM9InRydWUiIHByb3AtbW9kcz0iZmFsc2UiPi97
YnJhbmNofS9maWxlLmNwcDwvUzptb2RpZmllZC1wYXRoPlxuJy5mb3JtYXQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1jb21taXQuYnJhbmNoIGlmIGNvbW1pdC5icmFu
Y2guc3BsaXQoJy8nKVswXSBpbiBbJ3RydW5rJywgJ3RhZ3MnXSBlbHNlICdicmFuY2hlcy97fScu
Zm9ybWF0KGNvbW1pdC5icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgaWYg
J1M6ZGlzY292ZXItY2hhbmdlZC1wYXRocycgaW4gZGF0YVsnUzpsb2ctcmVwb3J0J10gZWxzZSAn
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICkgZm9yIGNvbW1pdCBpbiBjb21taXRzCisgICAg
ICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICkKKworICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUv
X19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zy
b20gd2Via2l0c2NtcHkucmVtb3RlLnNjbSBpbXBvcnQgU2NtCitmcm9tIHdlYmtpdHNjbXB5LnJl
bW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc2NtLnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3JlbW90ZS9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHNpeAorCitmcm9tIHdlYmtp
dHNjbXB5LnNjbV9iYXNlIGltcG9ydCBTY21CYXNlCisKKworY2xhc3MgU2NtKFNjbUJhc2UpOgor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3VybChjbHMsIHVybCk6CisgICAgICAgIGZy
b20gd2Via2l0c2NtcHkgaW1wb3J0IHJlbW90ZQorCisgICAgICAgIGlmIHJlbW90ZS5Tdm4uaXNf
d2Vic2VydmVyKHVybCk6CisgICAgICAgICAgICByZXR1cm4gcmVtb3RlLlN2bih1cmwpCisgICAg
ICAgIHJhaXNlIE9TRXJyb3IoIid7fScgaXMgbm90IGEga25vd24gU0NNIHNlcnZlciIuZm9ybWF0
KHVybCkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZfYnJhbmNoZXM9Tm9uZSwg
cHJvZF9icmFuY2hlcz1Ob25lKToKKyAgICAgICAgc3VwZXIoU2NtLCBzZWxmKS5fX2luaXRfXyhk
ZXZfYnJhbmNoZXM9ZGV2X2JyYW5jaGVzLCBwcm9kX2JyYW5jaGVzPXByb2RfYnJhbmNoZXMpCisK
KyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICd1cmwnIHRvIGJlIGEgc3RyaW5nIHR5
cGUsIG5vdCAne30nIi5mb3JtYXQodHlwZSh1cmwpKSkKKyAgICAgICAgc2VsZi51cmwgPSB1cmwK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3N2bi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc3ZuLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgYmlzZWN0CitpbXBvcnQgY2FsZW5kYXIKK2ltcG9ydCBmYXN0
ZW5lcnMKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHJlcXVlc3Rz
CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB4bWx0b2RpY3QKKworZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxvZywgcnVuLCBkZWNvcmF0
b3JzCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90ZS5zY20gaW1wb3J0IFNjbQorZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvciwgVmVyc2lvbgorCisKK2NsYXNzIFN2bihT
Y20pOgorICAgIFVSTF9SRSA9IHJlLmNvbXBpbGUocidcQWh0dHBzPzovL3N2bi4oP1A8aG9zdD5c
UyspL3JlcG9zaXRvcnkvXFMrXFonKQorICAgIEhJU1RPUllfUkUgPSByZS5jb21waWxlKGInPEQ6
dmVyc2lvbi1uYW1lPig/UDxyZXZpc2lvbj5cZCspPC9EOnZlcnNpb24tbmFtZT4nKQorICAgIENB
Q0hFX1ZFUlNJT04gPSBWZXJzaW9uKDEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNf
d2Vic2VydmVyKGNscywgdXJsKToKKyAgICAgICAgcmV0dXJuIFRydWUgaWYgY2xzLlVSTF9SRS5t
YXRjaCh1cmwpIGVsc2UgRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRldl9i
cmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5vbmUpOgorICAgICAgICBpZiB1cmxbLTFdICE9
ICcvJzoKKyAgICAgICAgICAgIHVybCArPSAnLycKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfd2Vi
c2VydmVyKHVybCk6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiJ3t9JyBpcyBu
b3QgYSB2YWxpZCBTVk4gd2Vic2VydmVyIi5mb3JtYXQodXJsKSkKKyAgICAgICAgc3VwZXIoU3Zu
LCBzZWxmKS5fX2luaXRfXyh1cmwsIGRldl9icmFuY2hlcz1kZXZfYnJhbmNoZXMsIHByb2RfYnJh
bmNoZXM9cHJvZF9icmFuY2hlcykKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9j
YWNoZV9wYXRoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYu
X2NhY2hlX2xvY2soKSwgb3BlbihzZWxmLl9jYWNoZV9wYXRoKSBhcyBmaWxlOgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9IGpzb24ubG9hZChmaWxlKQorICAgICAg
ICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5fbWV0YWRh
dGFfY2FjaGUgPSBkaWN0KHZlcnNpb249c3RyKHNlbGYuQ0FDSEVfVkVSU0lPTikpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZSA9IGRpY3QodmVyc2lvbj1z
dHIoc2VsZi5DQUNIRV9WRVJTSU9OKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19zdm4o
c2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKHRp
bWVvdXQ9NjApCisgICAgZGVmIF9sYXRlc3Qoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gcmVx
dWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nT1BUSU9OUycsCisgICAgICAgICAg
ICB1cmw9c2VsZi51cmwsCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAn
Q29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29k
aW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAg
IH0sIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4nCisgICAg
ICAgICAgICAnPEQ6b3B0aW9ucyB4bWxuczpEPSJEQVY6Ij5cbicKKyAgICAgICAgICAgICcgICAg
PEQ6YWN0aXZpdHktY29sbGVjdGlvbi1zZXQ+PC9EOmFjdGl2aXR5LWNvbGxlY3Rpb24tc2V0Plxu
JworICAgICAgICAgICAgJzwvRDpvcHRpb25zPlxuJywKKyAgICAgICAgKQorICAgICAgICBpZiBy
ZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAg
ICAgICByZXR1cm4gaW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTVk4tWW91bmdlc3QtUmV2Jykp
CisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1GYWxzZSkKKyAgICBkZWYgaW5mbyhz
ZWxmLCBicmFuY2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwgdGFnPU5vbmUpOgorICAgICAgICBpZiB0
YWcgYW5kIGJyYW5jaDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBzcGVj
aWZ5IGJvdGggYnJhbmNoIGFuZCB0YWcnKQorICAgICAgICBpZiB0YWcgYW5kIHJldmlzaW9uOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHNwZWNpZnkgYm90aCBicmFuY2gg
YW5kIHRhZycpCisKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAgICAgICAgYnJhbmNo
ID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAgICAgIHJldmlzaW9uID0g
c2VsZi5fbGF0ZXN0KCkKKyAgICAgICAgICAgIGlmIG5vdCByZXZpc2lvbjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCByZXZpc2lvbjoKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHRoZSBsYXRlc3QgcmV2aXNpb24nKQor
CisgICAgICAgIHVybCA9ICd7fSFzdm4vcnZyL3t9Jy5mb3JtYXQoc2VsZi51cmwsIHJldmlzaW9u
KQorICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCAhPSBzZWxmLmRlZmF1bHRfYnJhbmNoIGFu
ZCAnLycgbm90IGluIGJyYW5jaDoKKyAgICAgICAgICAgIHVybCA9ICd7fS9icmFuY2hlcy97fScu
Zm9ybWF0KHVybCwgYnJhbmNoKQorICAgICAgICBlbGlmIHRhZzoKKyAgICAgICAgICAgIHVybCA9
ICd7fS90YWdzL3t9Jy5mb3JtYXQodXJsLCB0YWcpCisgICAgICAgIGVsaWYgYnJhbmNoOgorICAg
ICAgICAgICAgdXJsID0gJ3t9L3t9Jy5mb3JtYXQodXJsLCBicmFuY2ggb3Igc2VsZi5kZWZhdWx0
X2JyYW5jaCkKKworICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVlc3QoCisgICAgICAg
ICAgICBtZXRob2Q9J1BST1BGSU5EJywKKyAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAg
ICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywK
KyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAg
ICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9Jzxwcm9wZmluZCB4bWxucz0i
REFWOiI+XG4nCisgICAgICAgICAgICAnICAgIDxwcm9wPlxuJworICAgICAgICAgICAgJyAgICAg
ICAgPHJlc291cmNldHlwZSB4bWxucz0iREFWOiIvPlxuJworICAgICAgICAgICAgJyAgICAgICAg
PGdldGNvbnRlbnRsZW5ndGggeG1sbnM9IkRBVjoiLz5cbicKKyAgICAgICAgICAgICcgICAgICAg
IDxkZWFkcHJvcC1jb3VudCB4bWxucz0iaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy94bWxu
cy9kYXYvIi8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8dmVyc2lvbi1uYW1lIHhtbG5zPSJE
QVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRpb25kYXRlIHhtbG5zPSJEQVY6
Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8Y3JlYXRvci1kaXNwbGF5bmFtZSB4bWxucz0i
REFWOiIvPlxuJworICAgICAgICAgICAgJyAgICA8L3Byb3A+XG4nCisgICAgICAgICAgICAnPC9w
cm9wZmluZD5cbicsCisgICAgICAgICkKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUg
bm90IGluIFsyMDAsIDIwN106CisgICAgICAgICAgICByZXR1cm4ge30KKworICAgICAgICByZXNw
b25zZSA9IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KQorICAgICAgICByZXNwb25zZSA9
IHJlc3BvbnNlLmdldCgnRDptdWx0aXN0YXR1cycsIHJlc3BvbnNlKS5nZXQoJ0Q6cmVzcG9uc2Un
LCBbXSkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIHt9CisK
KyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZVswXSBpZiBpc2luc3RhbmNlKHJlc3BvbnNlLCBs
aXN0KSBlbHNlIHJlc3BvbnNlCisgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VbJ0Q6cHJvcHN0
YXQnXVswXVsnRDpwcm9wJ10KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ0xhc3Qg
Q2hhbmdlZCBSZXYnOiByZXNwb25zZVsnbHAxOnZlcnNpb24tbmFtZSddLAorICAgICAgICAgICAg
J0xhc3QgQ2hhbmdlZCBBdXRob3InOiByZXNwb25zZVsnbHAxOmNyZWF0b3ItZGlzcGxheW5hbWUn
XSwKKyAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcgJy5qb2luKHJlc3BvbnNlWyds
cDE6Y3JlYXRpb25kYXRlJ10uc3BsaXQoJ1QnKSkuc3BsaXQoJy4nKVswXSwKKyAgICAgICAgICAg
ICdSZXZpc2lvbic6IHJldmlzaW9uLAorICAgICAgICB9CisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CisgICAgICAgIHJldHVybiAndHJ1bmsnCisKKyAgICBk
ZWYgbGlzdChzZWxmLCBjYXRlZ29yeSk6CisgICAgICAgIHJldmlzaW9uID0gc2VsZi5fbGF0ZXN0
KCkKKyAgICAgICAgaWYgbm90IHJldmlzaW9uOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAg
ICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPSdQ
Uk9QRklORCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9ydnIve30ve30nLmZvcm1hdChzZWxm
LnVybCwgcmV2aXNpb24sIGNhdGVnb3J5KSwKKyAgICAgICAgICAgIGhlYWRlcnM9eworICAgICAg
ICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAgICAgICAgICAgICAgICdB
Y2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAgJ0RFUFRIJzogJzEnLAor
ICAgICAgICAgICAgfSwgZGF0YT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi
Pz5cbicKKyAgICAgICAgICAgICAgICAnPHByb3BmaW5kIHhtbG5zPSJEQVY6Ij5cbicKKyAgICAg
ICAgICAgICAgICAnICAgIDxwcm9wPjxyZXNvdXJjZXR5cGUgeG1sbnM9IkRBVjoiLz48L3Byb3A+
XG4nCisgICAgICAgICAgICAgICAgJzwvcHJvcGZpbmQ+XG4nLAorICAgICAgICApCisgICAgICAg
IGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlIG5vdCBpbiBbMjAwLCAyMDddOgorICAgICAgICAgICAg
cmV0dXJuIFtdCisKKyAgICAgICAgcmVzcG9uc2VzID0geG1sdG9kaWN0LnBhcnNlKHJlc3BvbnNl
LnRleHQpCisgICAgICAgIHJlc3BvbnNlcyA9IHJlc3BvbnNlcy5nZXQoJ0Q6bXVsdGlzdGF0dXMn
LCByZXNwb25zZXMpLmdldCgnRDpyZXNwb25zZScsIFtdKQorCisgICAgICAgIHJlc3VsdHMgPSBb
XQorICAgICAgICBmb3IgcmVzcG9uc2UgaW4gcmVzcG9uc2VzOgorICAgICAgICAgICAgY2FuZGlk
YXRlID0gcmVzcG9uc2VbJ0Q6aHJlZiddLnNwbGl0KCchc3ZuL3J2ci97fS97fS8nLmZvcm1hdChy
ZXZpc2lvbiwgY2F0ZWdvcnkpKVstMV0ucnN0cmlwKCcvJykKKyAgICAgICAgICAgIGlmIG5vdCBj
YW5kaWRhdGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKGNhbmRpZGF0ZSkKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgQHByb3Bl
cnR5CisgICAgZGVmIGJyYW5jaGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gW3NlbGYuZGVmYXVs
dF9icmFuY2hdICsgc2VsZi5saXN0KCdicmFuY2hlcycpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgdGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGlzdCgndGFncycpCisKKyAgICBA
cHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgX2NhY2hlX3BhdGgo
c2VsZik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigp
LCAnc3ZuLnt9Jy5mb3JtYXQoc2VsZi5VUkxfUkUubWF0Y2goc2VsZi51cmwpLmdyb3VwKCdob3N0
JykpLCAnd2Via2l0c2NtcHktY2FjaGUuanNvbicpCisKKyAgICBkZWYgX2NhY2hlX2xvY2soc2Vs
Zik6CisgICAgICAgIHJldHVybiBmYXN0ZW5lcnMuSW50ZXJQcm9jZXNzTG9jayhvcy5wYXRoLmpv
aW4ob3MucGF0aC5kaXJuYW1lKHNlbGYuX2NhY2hlX3BhdGgpLCAnY2FjaGUubG9jaycpKQorCisg
ICAgZGVmIF9jYWNoZV9yZXZpc2lvbnMoc2VsZiwgYnJhbmNoPU5vbmUpOgorICAgICAgICBicmFu
Y2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICBpc19kZWZhdWx0X2Jy
YW5jaCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAgIGlmIGJyYW5jaCBu
b3QgaW4gc2VsZi5fbWV0YWRhdGFfY2FjaGU6CisgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9j
YWNoZVticmFuY2hdID0gWzBdIGlmIGlzX2RlZmF1bHRfYnJhbmNoIGVsc2UgW10KKyAgICAgICAg
cG9zID0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlW2JyYW5jaF0pCisKKyAgICAgICAgIyBJZiB3
ZSBhcmVuJ3Qgb24gdGhlIGRlZmF1bHQgYnJhbmNoLCB3ZSB3aWxsIG5lZWQgdGhlIGRlZmF1bHQg
YnJhbmNoIHRvIGRldGVybWluZSB3aGVuCisgICAgICAgICMgb3VyICBicmFuY2ggIGludGVyc2Vj
dHMgd2l0aCB0aGUgZGVmYXVsdCBicmFuY2guCisgICAgICAgIGlmIG5vdCBpc19kZWZhdWx0X2Jy
YW5jaDoKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9c2VsZi5kZWZh
dWx0X2JyYW5jaCkKKworICAgICAgICBkaWRfd2FybiA9IEZhbHNlCisgICAgICAgIGNvdW50ID0g
MAorCisgICAgICAgIGxhdGVzdCA9IHNlbGYuX2xhdGVzdCgpCisgICAgICAgIHdpdGggcmVxdWVz
dHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAgICAgICAgICAgIHVy
bD0ne30hc3ZuL3J2ci97fS97fScuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlbGYudXJsLAor
ICAgICAgICAgICAgICAgIGxhdGVzdCwKKyAgICAgICAgICAgICAgICBicmFuY2ggaWYgaXNfZGVm
YXVsdF9icmFuY2ggb3IgJy8nIGluIGJyYW5jaCBlbHNlICdicmFuY2hlcy97fScuZm9ybWF0KGJy
YW5jaCksCisgICAgICAgICAgICApLCBzdHJlYW09VHJ1ZSwKKyAgICAgICAgICAgIGhlYWRlcnM9
eworICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAgICAgICAg
ICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAgJ0RFUFRI
JzogJzEnLAorICAgICAgICAgICAgfSwgZGF0YT0nPFM6bG9nLXJlcG9ydCB4bWxuczpTPSJzdm46
Ij5cbicKKyAgICAgICAgICAgICAgICAnPFM6c3RhcnQtcmV2aXNpb24+e3JldmlzaW9ufTwvUzpz
dGFydC1yZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAnPFM6ZW5kLXJldmlzaW9uPjA8L1M6
ZW5kLXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzpyZXZwcm9wPnN2bjpkYXRlPC9T
OnJldnByb3A+XG4nCisgICAgICAgICAgICAgICAgJzwvUzpsb2ctcmVwb3J0PlxuJy5mb3JtYXQo
cmV2aXNpb249bGF0ZXN0KSwKKyAgICAgICAgKSBhcyByZXNwb25zZToKKyAgICAgICAgICAgIGlm
IHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxm
LkV4Y2VwdGlvbigiRmFpbGVkIHRvIGNvbnN0cnVjdCBicmFuY2ggaGlzdG9yeSBmb3IgJ3t9JyIu
Zm9ybWF0KGJyYW5jaCkpCisKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLml0ZXJf
bGluZXMoKToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuSElTVE9SWV9SRS5tYXRjaChs
aW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBkaWRfd2FybjoKKyAgICAgICAgICAg
ICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBjb3VudCA+IDEwMDA6
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygnQ2FjaGluZyBjb21taXQgZGF0YSBm
b3Ige30sIHRoaXMgd2lsbCB0YWtlIGEgZmV3IG1pbnV0ZXMuLi4nLmZvcm1hdChicmFuY2gpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGlkX3dhcm4gPSBUcnVlCisKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkKKyAgICAgICAgICAgICAg
ICBpZiBwb3MgPiAwIGFuZCBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdW3BvcyAtIDFdID09
IHJldmlzaW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlm
IG5vdCBpc19kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV2aXNpb24g
aW4gc2VsZi5fbWV0YWRhdGFfY2FjaGVbc2VsZi5kZWZhdWx0X2JyYW5jaF06CisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdLmluc2VydChwb3MsIHJl
dmlzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBz
ZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdLmluc2VydChwb3MsIHJldmlzaW9uKQorCisgICAg
ICAgIGlmIHNlbGYuX21ldGFkYXRhX2NhY2hlW3NlbGYuZGVmYXVsdF9icmFuY2hdWzBdID09IFsw
XToKKyAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlWydpZGVudGlmaWVyJ10gPSBsZW4o
c2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmRpcm5hbWUoc2VsZi5fY2FjaGVfcGF0aCkp
OgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShzZWxmLl9jYWNo
ZV9wYXRoKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fY2FjaGVfbG9jaygpLCBvcGVuKHNlbGYu
X2NhY2hlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBqc29uLmR1bXAoc2Vs
Zi5fbWV0YWRhdGFfY2FjaGUsIGZpbGUsIGluZGVudD00KQorICAgICAgICBleGNlcHQgKElPRXJy
b3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb2coIkZhaWxlZCB0byB3cml0ZSBTVk4g
Y2FjaGUgdG8gJ3t9JyIuZm9ybWF0KHNlbGYuX2NhY2hlX3BhdGgpKQorCisgICAgICAgIHJldHVy
biBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdCisKKyAgICBkZWYgX2JyYW5jaF9mb3Ioc2Vs
ZiwgcmV2aXNpb24pOgorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVlc3QoCisgICAg
ICAgICAgICBtZXRob2Q9J1JFUE9SVCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9ydnIve30n
LmZvcm1hdChzZWxmLnVybCwgcmV2aXNpb24pLAorICAgICAgICAgICAgaGVhZGVycz17CisgICAg
ICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAgICAgICAgICAgICAg
J0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAnREVQVEgnOiAnMScs
CisgICAgICAgICAgICB9LCBkYXRhPSc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9InN2bjoiPlxuJwor
ICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lvbj57cmV2aXNpb259PC9TOnN0YXJ0LXJl
dmlzaW9uPlxuJworICAgICAgICAgICAgICAgICc8UzplbmQtcmV2aXNpb24+e3JldmlzaW9ufTwv
UzplbmQtcmV2aXNpb24+XG4nCisgICAgICAgICAgICAgICAgJzxTOmxpbWl0PjE8L1M6bGltaXQ+
XG4nCisgICAgICAgICAgICAgICAgJzxTOmRpc2NvdmVyLWNoYW5nZWQtcGF0aHMvPlxuJworICAg
ICAgICAgICAgICAgICc8L1M6bG9nLXJlcG9ydD5cbicuZm9ybWF0KHJldmlzaW9uPXJldmlzaW9u
KSwKKyAgICAgICAgKQorCisgICAgICAgICMgSWYgd2UgZGlkbid0IGdldCBhIHZhbGlkIGFuc3dl
ciBmcm9tIHRoZSByZW1vdGUsIGJ1dCB3ZSBmb3VuZCBhIG1hdGNoaW5nIGNhbmRpZGF0ZSwgd2Ug
cmV0dXJuIHRoYXQuCisgICAgICAgICMgVGhpcyBpcyBhIGJpdCByaXNreSBiZWNhdXNlIHRoZXJl
IGlzIGEgY2hhbmNlIHRoZSBicmFuY2ggd2UgaGF2ZSBjYWNoZWQgaXMgbm90IHRoZSBjYW5vbmlj
YWwgYnJhbmNoCisgICAgICAgICMgZm9yIGEgcmV2aXNpb24sIGJ1dCB0aGlzIGlzIHByZXR0eSB1
bmxpa2VseSBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgdGhlIG4gKyAxIGxldmVsIGJyYW5jaCB0
byBiZSBjYWNoZWQKKyAgICAgICAgIyBidXQgbm90IHRoZSBuIGxldmVsIGJyYW5jaC4KKyAgICAg
ICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2Ugc2Vs
Zi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9yICd7fSciLmZvcm1hdChy
ZXZpc2lvbikpCisKKyAgICAgICAgcGFydGlhbCA9IE5vbmUKKyAgICAgICAgaXRlbXMgPSB4bWx0
b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dClbJ1M6bG9nLXJlcG9ydCddWydTOmxvZy1pdGVtJ10K
KyAgICAgICAgZm9yIGdyb3VwIGluIChpdGVtcy5nZXQoJ1M6bW9kaWZpZWQtcGF0aCcsIFtdKSwg
aXRlbXMuZ2V0KCdTOmFkZGVkLXBhdGgnLCBbXSkpOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4g
Z3JvdXAgaWYgaXNpbnN0YW5jZShncm91cCwgbGlzdCkgZWxzZSBbZ3JvdXBdOgorICAgICAgICAg
ICAgICAgIGlmIG5vdCBwYXJ0aWFsOgorICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsID0gaXRl
bVsnI3RleHQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBpdGVtWycjdGV4dCddLnN0YXJ0
c3dpdGgocGFydGlhbCk6CisgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwgPSBwYXJ0aWFsWzot
MV0KKworICAgICAgICBjYW5kaWRhdGUgPSBwYXJ0aWFsLnNwbGl0KCcvJylbMiBpZiBwYXJ0aWFs
LnN0YXJ0c3dpdGgoJy9icmFuY2hlcycpIGVsc2UgMV0KKworICAgICAgICAjIFRhZ3MgYXJlIGEg
dW5pcXVlIGNhc2UgZm9yIFNWTiwgYmVjYXVzZSB0aGV5J3JlIHRyZWF0ZWQgYXMgYnJhbmNoZXMg
aW4gbmF0aXZlIFNWTgorICAgICAgICBpZiBjYW5kaWRhdGUgPT0gJ3RhZ3MnOgorICAgICAgICAg
ICAgcmV0dXJuIHBhcnRpYWxbMTpdLnJzdHJpcCgnLycpCisgICAgICAgIHJldHVybiBjYW5kaWRh
dGUKKworICAgIGRlZiBfY29tbWl0X2NvdW50KHNlbGYsIHJldmlzaW9uPU5vbmUsIGJyYW5jaD1O
b25lKToKKyAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKwor
ICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIHJldmlzaW9uIG5vdCBpbiBzZWxm
Ll9tZXRhZGF0YV9jYWNoZVticmFuY2hdOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCJGYWlsZWQgdG8gZmluZCAne30nIG9uICd7fSciLmZvcm1hdChyZXZpc2lvbiwgYnJh
bmNoKSkKKyAgICAgICAgICAgIHJldHVybiBiaXNlY3QuYmlzZWN0X2xlZnQoc2VsZi5fbWV0YWRh
dGFfY2FjaGVbYnJhbmNoXSwgaW50KHJldmlzaW9uKSkKKyAgICAgICAgaWYgYnJhbmNoID09IHNl
bGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX21ldGFkYXRh
X2NhY2hlW2JyYW5jaF0pCisgICAgICAgIHJldHVybiBzZWxmLl9jb21taXRfY291bnQocmV2aXNp
b249c2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXVswXSwgYnJhbmNoPXNlbGYuZGVmYXVsdF9i
cmFuY2gpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwg
aWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5vbmUpOgorICAgICAgICBpZiBoYXNo
OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIGRvZXMgbm90IHN1cHBvcnQgR2l0
IGhhc2hlcycpCisKKyAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCA9IE5vbmUKKyAgICAgICAg
aWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHJldmlzaW9uOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCByZXZpc2lv
biBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiB0YWc6CisgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBhbmQgaWRlbnRpZmllcicp
CisKKyAgICAgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQsIGlkZW50aWZpZXIsIHBhcnNlZF9i
cmFuY2ggPSBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmllciwgZG9fYXNzZXJ0PVRy
dWUpCisgICAgICAgICAgICBpZiBwYXJzZWRfYnJhbmNoOgorICAgICAgICAgICAgICAgIGlmIGJy
YW5jaCBhbmQgYnJhbmNoICE9IHBhcnNlZF9icmFuY2g6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsbGVyIHBhc3NlZCBi
b3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZpZWQgZGlmZmVyZW50IGJy
YW5jaGVzICh7fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJhbmNoLCBwYXJzZWRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyYW5jaCA9IHBhcnNlZF9icmFuY2gK
KyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaCBvciBzZWxmLmRlZmF1bHRfYnJhbmNoCisKKyAg
ICAgICAgICAgIGlmIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoIGFuZCBwYXJzZWRfYnJh
bmNoX3BvaW50OgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdDYW5ub3Qg
cHJvdmlkZSBhIGJyYW5jaCBwb2ludCBmb3IgYSBjb21taXQgb24gdGhlIGRlZmF1bHQgYnJhbmNo
JykKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gs
IFtdKSBvciBpZGVudGlmaWVyID49IGxlbihzZWxmLl9tZXRhZGF0YV9jYWNoZS5nZXQoYnJhbmNo
LCBbXSkpOgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaCAhPSBzZWxmLmRlZmF1bHRfYnJhbmNo
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPXNlbGYu
ZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJy
YW5jaD1icmFuY2gpCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyID4gbGVuKHNlbGYuX21ldGFk
YXRhX2NhY2hlLmdldChicmFuY2gsIFtdKSk6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5F
eGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBzcGVjaWZpZWQg
YnJhbmNoIGluIHRoZSBjdXJyZW50IGNoZWNrb3V0Jy5mb3JtYXQoaWRlbnRpZmllcikpCisKKyAg
ICAgICAgICAgIGlmIGlkZW50aWZpZXIgPD0gMDoKKyAgICAgICAgICAgICAgICBpZiBicmFuY2gg
PT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5F
eGNlcHRpb24oJ0lsbGVnYWwgbmVnYXRpdmUgaWRlbnRpZmllciBvbiB0aGUgZGVmYXVsdCBicmFu
Y2gnKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9jb21taXRfY291bnQoYnJh
bmNoPWJyYW5jaCkgKyBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgaWYgaWRlbnRpZmllciA8
IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdJZGVudGlmaWVy
IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBzcGVjaWZpZWQgYnJhbmNoJykKKworICAgICAgICAgICAg
ICAgIGJyYW5jaCA9IHNlbGYuZGVmYXVsdF9icmFuY2gKKworICAgICAgICAgICAgcmV2aXNpb24g
PSBzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdW2lkZW50aWZpZXJdCisgICAgICAgICAgICBp
bmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBicmFuY2g9YnJhbmNoLCByZXZpc2lvbj1yZXZp
c2lvbikKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9mb3IocmV2aXNpb24pCisg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJyYW5jaCwgW10pIG9y
IGlkZW50aWZpZXIgPj0gbGVuKHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKSk6
CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJyYW5jaD1icmFuY2gpCisK
KyAgICAgICAgZWxpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggYnJhbmNoIGFuZCBy
ZXZpc2lvbicpCisgICAgICAgICAgICBpZiB0YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBhbmQgcmV2aXNpb24nKQorICAgICAgICAg
ICAgcmV2aXNpb24gPSBDb21taXQuX3BhcnNlX3JldmlzaW9uKHJldmlzaW9uLCBkb19hc3NlcnQ9
VHJ1ZSkKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2JyYW5jaF9mb3IocmV2aXNpb24pCisg
ICAgICAgICAgICBpbmZvID0gc2VsZi5pbmZvKGNhY2hlZD1UcnVlLCBicmFuY2g9YnJhbmNoLCBy
ZXZpc2lvbj1yZXZpc2lvbikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYnJhbmNo
IGFuZCB0YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmlu
ZSBib3RoIGJyYW5jaCBhbmQgdGFnJykKKworICAgICAgICAgICAgYnJhbmNoID0gTm9uZSBpZiB0
YWcgZWxzZSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICAgICAgaW5mbyA9
IHNlbGYuaW5mbyh0YWc9dGFnKSBpZiB0YWcgZWxzZSBzZWxmLmluZm8oYnJhbmNoPWJyYW5jaCkK
KyAgICAgICAgICAgIGlmIG5vdCBpbmZvOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCIne30nIGlzIG5vdCBhIHJlY29nbml6ZWQge30iLmZvcm1hdCgKKyAgICAgICAgICAg
ICAgICAgICAgdGFnIG9yIGJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgJ3RhZycgaWYgdGFn
IGVsc2UgJ2JyYW5jaCcsCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIHJldmlzaW9u
ID0gaW50KGluZm9bJ0xhc3QgQ2hhbmdlZCBSZXYnXSkKKyAgICAgICAgICAgIGlmIGJyYW5jaCAh
PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuX2Jy
YW5jaF9mb3IocmV2aXNpb24pCisKKyAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGlu
Zm9bJ0xhc3QgQ2hhbmdlZCBEYXRlJ10sICclWS0lbS0lZCAlSDolTTolUycpCisKKyAgICAgICAg
aWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICBpZiBicmFuY2ggIT0gc2VsZi5kZWZhdWx0
X2JyYW5jaCBhbmQgcmV2aXNpb24gPiBzZWxmLl9tZXRhZGF0YV9jYWNoZS5nZXQoc2VsZi5kZWZh
dWx0X2JyYW5jaCwgWzBdKVstMV06CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNp
b25zKGJyYW5jaD1zZWxmLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAgaWYgcmV2aXNpb24g
bm90IGluIHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPWJyYW5jaCkKKyAgICAgICAgICAgIGlk
ZW50aWZpZXIgPSBzZWxmLl9jb21taXRfY291bnQocmV2aXNpb249cmV2aXNpb24sIGJyYW5jaD1i
cmFuY2gpCisKKyAgICAgICAgYnJhbmNoX3BvaW50ID0gTm9uZSBpZiBicmFuY2ggPT0gc2VsZi5k
ZWZhdWx0X2JyYW5jaCBlbHNlIHNlbGYuX2NvbW1pdF9jb3VudChicmFuY2g9YnJhbmNoKQorICAg
ICAgICBpZiBicmFuY2hfcG9pbnQgYW5kIHBhcnNlZF9icmFuY2hfcG9pbnQgYW5kIGJyYW5jaF9w
b2ludCAhPSBwYXJzZWRfYnJhbmNoX3BvaW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiUHJvdmlkZWQgJ2JyYW5jaF9wb2ludCcgZG9lcyBub3QgbWF0Y2ggYnJhbmNoIHBvaW50IG9m
IHNwZWNpZmllZCBicmFuY2giKQorCisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucmVxdWVz
dCgKKyAgICAgICAgICAgIG1ldGhvZD0nUkVQT1JUJywKKyAgICAgICAgICAgIHVybD0ne30hc3Zu
L3J2ci97fScuZm9ybWF0KHNlbGYudXJsLCByZXZpc2lvbiksCisgICAgICAgICAgICBoZWFkZXJz
PXsKKyAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAg
ICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBU
SCc6ICcxJywKKyAgICAgICAgICAgIH0sIGRhdGE9JzxTOmxvZy1yZXBvcnQgeG1sbnM6Uz0ic3Zu
OiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8UzpzdGFydC1yZXZpc2lvbj57cmV2aXNpb259
PC9TOnN0YXJ0LXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICAgICAnPFM6ZW5kLXJldmlz
aW9uPntyZXZpc2lvbn08L1M6ZW5kLXJldmlzaW9uPlxuJworICAgICAgICAgICAgICAgICAgICAn
PFM6bGltaXQ+MTwvUzpsaW1pdD5cbicKKyAgICAgICAgICAgICAgICAgICAgJzwvUzpsb2ctcmVw
b3J0PlxuJy5mb3JtYXQocmV2aXNpb249cmV2aXNpb24pLAorICAgICAgICApCisKKyAgICAgICAg
aWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgorICAgICAgICAgICAgcmVzcG9uc2UgPSB4
bWx0b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dCkKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVz
cG9uc2UuZ2V0KCdTOmxvZy1yZXBvcnQnLCB7fSkuZ2V0KCdTOmxvZy1pdGVtJykKKworICAgICAg
ICAgICAgbmFtZSA9IHJlc3BvbnNlLmdldCgnRDpjcmVhdG9yLWRpc3BsYXluYW1lJykKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSByZXNwb25zZS5nZXQoJ0Q6Y29tbWVudCcsIE5vbmUpCisgICAgICAg
ICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbign
RmFpbGVkIHRvIGZpbmQgY3JlYXRvciBuYW1lJykKKworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5sb2coJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHJlbW90ZSwgY2Fubm90IGNvbXB1dGUg
Y29tbWl0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKKyAgICAgICAgICAg
IG5hbWUgPSBpbmZvWydMYXN0IENoYW5nZWQgQXV0aG9yJ10KKworICAgICAgICBhdXRob3IgPSBD
b250cmlidXRvci5ieV9lbWFpbC5nZXQoCisgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAg
Q29udHJpYnV0b3IuYnlfbmFtZS5nZXQoCisgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAg
ICAgICAgICBDb250cmlidXRvcihuYW1lPW5hbWUsIGVtYWlscz1bbmFtZV0gaWYgJ0AnIGluIG5h
bWUgZWxzZSBbXSksCisgICAgICAgICAgICApLAorICAgICAgICApCisKKyAgICAgICAgcmV0dXJu
IENvbW1pdCgKKyAgICAgICAgICAgIHJldmlzaW9uPWludChyZXZpc2lvbiksCisgICAgICAgICAg
ICBicmFuY2g9YnJhbmNoLAorICAgICAgICAgICAgaWRlbnRpZmllcj1pZGVudGlmaWVyLAorICAg
ICAgICAgICAgYnJhbmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgIHRpbWVzdGFt
cD1pbnQoY2FsZW5kYXIudGltZWdtKGRhdGUudGltZXR1cGxlKCkpKSwKKyAgICAgICAgICAgIGF1
dGhvcj1hdXRob3IsCisgICAgICAgICAgICBtZXNzYWdlPW1lc3NhZ2UsCisgICAgICAgICkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
c3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNzAw
MzEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90
ZXN0L3N2bl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBAIGlt
cG9ydCB1bml0dGVzdAogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQogZnJvbSB3ZWJr
aXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxv
Y2FsLCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzLCByZW1vdGUK
IAogCi1jbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRlc3RMb2NhbFN2
bih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JwogCiAg
ICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgpAQCAtMjE3LDMgKzIxNyw4NyBAQCBjbGFzcyBU
ZXN0U3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCg5LCByZXBvc2l0b3J5LmNoZWNrb3V0KCd0YWctMScpLnJldmlzaW9uKQogICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCg5LCByZXBvc2l0b3J5LmNvbW1pdCgpLnJldmlzaW9uKQorCisKK2Ns
YXNzIFRlc3RSZW1vdGVTdm4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJlbW90ZSA9ICdodHRw
czovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JworCisgICAgZGVmIHRlc3RfZGV0
ZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5Tdm4uaXNfd2Vi
c2VydmVyKCdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JyksIFRydWUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3RlLlN2bi5pc193ZWJzZXJ2ZXIoJ2h0dHA6
Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdCcpLCBUcnVlKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwczovL2dpdGh1Yi5jb20v
V2ViS2l0L3dlYmtpdCcpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2JyYW5jaGVzKHNlbGYpOgor
ICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCisgICAgICAgICAgICAgICAgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuYnJhbmNoZXMs
CisgICAgICAgICAgICAgICAgWyd0cnVuaycsICdicmFuY2gtYScsICdicmFuY2gtYiddLAorICAg
ICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdGFncyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nr
cy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgICAgIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLnRhZ3MsCisgICAgICAgICAgICAgICAgWyd0
YWctMScsICd0YWctMiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2NtX3R5cGUo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5p
c19zdm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtb3RlLlN2bihzZWxmLnJlbW90ZSku
aXNfZ2l0KQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5y
ZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCh7CisgICAgICAg
ICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBBdXRob3InOiAnamJlZGFyZEBhcHBsZS5jb20nLAorICAg
ICAgICAgICAgICAgICdMYXN0IENoYW5nZWQgRGF0ZSc6ICcyMDIwLTEwLTAyIDExOjU4OjIwJywK
KyAgICAgICAgICAgICAgICAnTGFzdCBDaGFuZ2VkIFJldic6ICc2JywKKyAgICAgICAgICAgICAg
ICAnUmV2aXNpb24nOiAxMCwKKyAgICAgICAgICAgIH0sIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUp
LmluZm8oKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcx
QHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0xKSkp
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyQHRydW5rJywgc3RyKHJlbW90ZS5Tdm4o
c2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0yKSkpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcyLjFAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0
KHJldmlzaW9uPTMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzNAdHJ1bmsnLCBz
dHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTQpKSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYicsIHN0cihyZW1vdGUuU3ZuKHNlbGYu
cmVtb3RlKS5jb21taXQocmV2aXNpb249NSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnNEB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249
NikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5jaC1hJywgc3RyKHJl
bW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj03KSkpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuY29tbWl0KHJldmlzaW9uPTgpKSkKKworICAgICAgICAgICAgIyBPdXQtb2YtYm91bmRzIGNv
bW1pdAorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhyZW1vdGUuU3ZuLkV4Y2Vw
dGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZW1vdGUuU3Zu
KHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249MTEpKQorCisgICAgZGVmIHRlc3RfY29tbWl0
X2Zyb21fYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxm
LnJlbW90ZSkuY29tbWl0KGJyYW5jaD0ndHJ1bmsnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0
KGJyYW5jaD0nYnJhbmNoLWEnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjNA
YnJhbmNoLWInLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGJyYW5jaD0nYnJh
bmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVt
b3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzFAdHJ1bmsnKS5yZXZpc2lv
bikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuY29tbWl0KGlkZW50aWZpZXI9JzJAdHJ1bmsnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZp
ZXI9JzIuMUBicmFuY2gtYScpLnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCg0LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nM0B0cnVuaycp
LnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCByZW1vdGUuU3ZuKHNl
bGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJykucmV2aXNpb24pCisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNv
bW1pdChpZGVudGlmaWVyPSc0QHRydW5rJykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDcsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScy
LjJAYnJhbmNoLWEnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwg
cmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIuM0BicmFuY2gtYicp
LnJldmlzaW9uKQorCisgICAgZGVmIHRlc3Rfbm9uX2Nhbm5vbmljYWxfaWRlbnRpZmllcnMoc2Vs
Zik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnMkB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQo
aWRlbnRpZmllcj0nMEBicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzFAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9
Jy0xQGJyYW5jaC1hJykpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyQHRydW5r
Jywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScwQGJyYW5j
aC1iJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMUB0cnVuaycsIHN0cihyZW1v
dGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJhbmNoLWInKSkpCisK
KyAgICBkZWYgdGVzdF90YWcoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigp
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCByZW1vdGUuU3ZuKHNlbGYucmVtb3Rl
KS5jb21taXQodGFnPSd0YWctMScpLnJldmlzaW9uKQorCisgICAgZGVmIHRlc3RfdGFnX3ByZXZp
b3VzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoNywgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50
aWZpZXI9JzIuMkB0YWdzL3RhZy0xJykucmV2aXNpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414599</attachid>
            <date>2020-11-19 10:11:03 -0800</date>
            <delta_ts>2020-11-19 10:49:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201119101102.patch</filename>
            <type>text/plain</type>
            <size>51950</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDAzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTExLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4ODI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTMwNDQ4NT4KKworICAgICAgICBSdWJi
ZXItc3RhbXBlZCBieSBBYWthc2ggSmFpbi4KKworICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBp
bnRlcmFjdCB3aXRoIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHN2biBjb21t
YW5kLiBUaGlzIGlzIHVzZWZ1bAorICAgICAgICBmb3Igc2VydmljZXMgaG9zdGVkIGluIGVudmly
b25tZW50cyB3aGVyZSBpbnN0YWxsaW5nIGJpbmFyaWVzIGlzIGJ1cmRlbnNvbWUsIG9yIGluIGNh
c2VzIHdoZXJlCisgICAgICAgIHRvb2xzIGFyZSBydW5uaW5nIHdpdGhvdXQgYSBjaGVja291dC4K
KworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
X19pbml0X18ucHk6IEJ1bXAgdmVyc2lvbiwgYWRkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5w
eToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9yZW1vdGU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3Rl
L3N2bi5weTogQWRkZWQuCisgICAgICAgIChTdm4pOiBJbnRlcmFjdCB3aXRoIGEgcmVtb3RlIFN1
YnZlcnNpb24gcmVwb3NpdG9yeSB3aXRob3V0IHVzaW5nIHRoZSBzdm4gY29tbWFuZC4KKyAgICAg
ICAgKFN2bi5pc193ZWJzZXJ2ZXIpOiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgdXJsIG1hdGNoZXMg
dGhlIHBhdHRlcm4gZm9yIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgIChTdm4uX19pbml0
X18pOgorICAgICAgICAoU3ZuLmlzX3N2bik6CisgICAgICAgIChTdm4uX2xhdGVzdCk6IFJldHVy
biB0aGUgbGF0ZXN0IHJldmlzaW9uLgorICAgICAgICAoU3ZuLmluZm8pOiBSZXR1cm4gdGhlIGJp
dHMgb2YgdGhlIGBzdm4gaW5mb2AgY29tbWFuZCB0aGF0IGFyZSB1c2VkIGluIGNvZGUuCisgICAg
ICAgIChTdm4uZGVmYXVsdF9icmFuY2gpOgorICAgICAgICAoU3ZuLmxpc3QpOgorICAgICAgICAo
U3ZuLmJyYW5jaGVzKTogTGlzdCBhbGwgYnJhbmNoZXMuCisgICAgICAgIChTdm4udGFncyk6IExp
c3QgYWxsIHRhZ3MuCisgICAgICAgIChTdm4uX2NhY2hlX3BhdGgpOiBSZXR1cm4gcGF0aCB0byBq
c29uIGNhY2hlLgorICAgICAgICAoU3ZuLl9jYWNoZV9sb2NrKTogRmlsZXN5c3RlbSBsb2NrIHVz
ZWQgdG8gcHJldmVudCBjb250ZW50aW9uIG92ZXIgdGhlIGpzb24gY2FjaGUsIHRoaXMKKyAgICAg
ICAgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBkdXJpbmcgdGVzdGluZy4KKyAgICAgICAgKFN2
bi5fY2FjaGVfcmV2aXNpb25zKTogQ2FjaGUgdGhlIGlkZW50aWZpZXIvcmV2aXNpb24gbWFwcGlu
Zy4KKyAgICAgICAgKFN2bi5fYnJhbmNoX2Zvcik6IEdpdmVuIGEgY29tbWl0LCBkZXRlcm1pbmUg
d2hpY2ggYnJhbmNoIHRoYXQgY29tbWl0IGlzIG9uLgorICAgICAgICAoU3ZuLl9jb21taXRfY291
bnQpOiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBjb21taXRzIG9uIGEgYnJhbmNoIHNpbmNlIGJy
YW5jaGluZy4KKyAgICAgICAgKFN2bi5jb21taXQpOiBSZXR1cm4gYSBjb21taXQgb2JqZWN0IGdp
dmVuIGEgcmV2aXNpb24sIGJyYW5jaCwgaWRlbnRpZmllciBvciB0YWcuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlOiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKToKKyAg
ICAgICAgKFNjbS5mcm9tX3VybCk6IEdpdmVuIGEgVVJMLCBhdHRlbXB0IHRvIGRldGVybWluZSB3
aGF0IGtpbmQgb2YgcmVtb3RlIEFQSSBpcyBhdmFpbGFibGUuCisgICAgICAgIChTY20uX19pbml0
X18pOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9zdm4ucHk6IEFkZGVkLgorICAgICAgICAoU3ZuKTogTW9jayByZXF1ZXN0
cyBuZWVkZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHJlbW90ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnku
CisgICAgICAgIChTdm4ubGF0ZXN0KTogUmV0dXJuIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24g
YW55IGJyYW5jaC4KKyAgICAgICAgKFN2bi5icmFuY2hlcyk6IFJldHVybiBicmFuY2hlcyBhdCBz
b21lIHJldmlzaW9uLgorICAgICAgICAoU3ZuLnRhZ3MpOiBSZXR1cm4gdGFncyBhdCBzb21lIHJl
dmlzaW9uLgorICAgICAgICAoU3ZuLnJhbmdlKTogR2l2ZSBhIHN0YXJ0IGFuZCBlbmQgcmV2aXNp
b24sIGFsb25nIHdpdGggYSB0YWcgb3IgYnJhbmNoLAorICAgICAgICByZXR1cm4gYWxsIGNvbW1p
dHMgaW4gdGhhdCByYW5nZS4KKyAgICAgICAgKFN2bi5yZXF1ZXN0KTogSGFuZGxlIGEgc21hbGwg
c3Vic2V0IG9mIHJlcXVlc3RzIHRvIGEgU3VidmVyc2lvbiBzZXJ2ZXIuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3Qu
cHk6CisgICAgICAgIChUZXN0TG9jYWxTdm4pOiBNb3ZlZCBmcm9tIFRlc3RTdm4uCisgICAgICAg
IChUZXN0UmVtb3RlU3ZuKTogQWRkZWQuCisgICAgICAgIChUZXN0U3ZuKTogTW92ZWQgdG8gVGVz
dExvY2FsU3ZuLgorCiAyMDIwLTExLTE5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIE1ha2UgYmxvY2stc3BhbW1lcnMgYXV0b2luc3RhbGwgcmVxdWVzdHMK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzAwMzEpCisrKyBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29y
a2luZyBjb3B5KQpAQCAtNDYsOSArNDYsMTIgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAg
ICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0YWxsIHdlYmtpdGNv
cmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBpbmRleCBVUkw+YCIKICAgICApCiAKLXZl
cnNpb24gPSBWZXJzaW9uKDAsIDMsIDIpCit2ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAwKQogCiBB
dXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdkYXRldXRpbCcsIFZlcnNpb24oMiwgOCwgMSks
IHB5cGlfbmFtZT0ncHl0aG9uLWRhdGV1dGlsJykpCitBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNr
YWdlKCdmYXN0ZW5lcnMnLCBWZXJzaW9uKDAsIDE1LCAwKSkpCitBdXRvSW5zdGFsbC5yZWdpc3Rl
cihQYWNrYWdlKCdtb25vdG9uaWMnLCBWZXJzaW9uKDEsIDUpKSkKK0F1dG9JbnN0YWxsLnJlZ2lz
dGVyKFBhY2thZ2UoJ3htbHRvZGljdCcsIFZlcnNpb24oMCwgMTIsIDApKSkKIAogZnJvbSB3ZWJr
aXRzY21weS5jb250cmlidXRvciBpbXBvcnQgQ29udHJpYnV0b3IKIGZyb20gd2Via2l0c2NtcHku
Y29tbWl0IGltcG9ydCBDb21taXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNzAwMzEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQgQEAKICMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIAogZnJvbSB3ZWJraXRzY21weS5tb2NrcyBpbXBvcnQgbG9jYWwKK2Zyb20gd2Via2l0
c2NtcHkubW9ja3MgaW1wb3J0IHJlbW90ZQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL3JlbW90ZS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRzY21weS5tb2Nrcy5yZW1vdGUuc3ZuIGltcG9ydCBT
dm4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL3N2bi5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9yZW1vdGUvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgxIEBACisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQor
aW1wb3J0IHhtbHRvZGljdAorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAor
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBt
b2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvciwgcmVtb3Rl
IGFzIHNjbXJlbW90ZQorCisKK2NsYXNzIFN2bihtb2Nrcy5SZXF1ZXN0cyk6CisgICAgdG9wID0g
Tm9uZQorICAgIFJFVklTSU9OX1JFUVVFU1RfUkUgPSByZS5jb21waWxlKHInc3ZuL3J2ci8oP1A8
cmV2aXNpb24+XGQrKSgvKD9QPGNhdGVnb3J5PlxTKykpPyQnKQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJlbW90ZT0nc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQnKToKKyAgICAg
ICAgaWYgbm90IHNjbXJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwczovL3t9Jy5mb3JtYXQo
cmVtb3RlKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCcie30iIGlzIG5vdCBhIHZh
bGlkIFN2biByZW1vdGUnLmZvcm1hdChyZW1vdGUpKQorCisgICAgICAgIHN1cGVyKFN2biwgc2Vs
ZikuX19pbml0X18ocmVtb3RlLnNwbGl0KCcvJylbMF0pCisgICAgICAgIGlmIHJlbW90ZVstMV0g
IT0gJy8nOgorICAgICAgICAgICAgcmVtb3RlICs9ICcvJworICAgICAgICBzZWxmLnJlbW90ZSA9
IHJlbW90ZQorICAgICAgICBzZWxmLl9jYWNoZV9jb250ZW50cyA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5wYXRjaGVzLmFwcGVuZChzY21yZW1vdGUuU3ZuKCdodHRwOi8ve30nLmZvcm1hdChzZWxmLnJl
bW90ZSkpLl9jYWNoZV9sb2NrKCkpCisKKyAgICAgICAgIyBQcm92aWRlIGEgcmVhc29uYWJsZSBz
ZXQgb2YgY29tbWl0cyB0byB0ZXN0IGFnYWluc3QKKyAgICAgICAgY29udHJpYnV0b3IgPSBDb250
cmlidXRvcihuYW1lPSdKb25hdGhhbiBCZWRhcmQnLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNv
bSddKQorICAgICAgICBzZWxmLmNvbW1pdHMgPSB7CisgICAgICAgICAgICAndHJ1bmsnOiBbCisg
ICAgICAgICAgICAgICAgQ29tbWl0KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScx
QHRydW5rJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249MSwKKyAgICAgICAgICAgICAg
ICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9
MTYwMTY2MDEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nMXN0IGNvbW1pdFxuJywK
KyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXI9JzJAdHJ1bmsnLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj0yLAorICAgICAgICAg
ICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVz
dGFtcD0xNjAxNjYxMTAwLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPScybmQgY29tbWl0
XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllcj0nM0B0cnVuaycsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTQsCisgICAg
ICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICAgICAg
dGltZXN0YW1wPTE2MDE2NjMxMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzR0aCBj
b21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyPSc0QHRydW5rJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249NiwK
KyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAg
ICAgICB0aW1lc3RhbXA9MTYwMTY2NTEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0n
NnRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSwgJ2JyYW5j
aC1hJzogWworICAgICAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllcj0nMi4xQGJyYW5jaC1hJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249MywK
KyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAg
ICAgICB0aW1lc3RhbXA9MTYwMTY2MjEwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0n
M3JkIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXI9JzIuMkBicmFuY2gtYScsCisgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uPTcsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjYxMDAsCisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2U9Jzd0aCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAg
IF0sCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddID0gWworICAg
ICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzBdLCBDb21taXQoCisgICAgICAgICAg
ICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJywKKyAgICAgICAgICAgICAgICByZXZpc2lv
bj01LAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAg
ICB0aW1lc3RhbXA9MTYwMTY2NDEwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSc1dGggY29t
bWl0XG4nLAorICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXI9JzIuM0BicmFuY2gtYicsCisgICAgICAgICAgICAgICAgcmV2aXNpb249OCwKKyAgICAgICAg
ICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2
MDE2NjcxMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nOHRoIGNvbW1pdFxuJywKKyAgICAg
ICAgICAgICksCisgICAgICAgIF0KKworICAgICAgICBzZWxmLmNvbW1pdHNbJ3RhZ3MvdGFnLTEn
XSA9IFsKKyAgICAgICAgICAgIHNlbGYuY29tbWl0c1snYnJhbmNoLWEnXVswXSwKKyAgICAgICAg
ICAgIHNlbGYuY29tbWl0c1snYnJhbmNoLWEnXVsxXSwgQ29tbWl0KAorICAgICAgICAgICAgICAg
IGlkZW50aWZpZXI9JzIuM0B0YWdzL3RhZy0xJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj05
LAorICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICB0
aW1lc3RhbXA9MTYwMTY2ODEwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSc5dGggY29tbWl0
XG4nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLmNvbW1pdHNbJ3Rh
Z3MvdGFnLTInXSA9IFsKKyAgICAgICAgICAgIHNlbGYuY29tbWl0c1snYnJhbmNoLWInXVswXSwK
KyAgICAgICAgICAgIHNlbGYuY29tbWl0c1snYnJhbmNoLWInXVsxXSwKKyAgICAgICAgICAgIHNl
bGYuY29tbWl0c1snYnJhbmNoLWInXVsyXSwgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50
aWZpZXI9JzIuNEB0YWdzL3RhZy0yJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0xMCwKKyAg
ICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgdGltZXN0
YW1wPTE2MDE2NjkxMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nMTB0aCBjb21taXRcbics
CisgICAgICAgICAgICApLAorICAgICAgICBdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgor
ICAgICAgICBzdXBlcihTdm4sIHNlbGYpLl9fZW50ZXJfXygpCisKKyAgICAgICAgY2FjaGVfcGF0
aCA9IHNjbXJlbW90ZS5Tdm4oJ2h0dHA6Ly97fScuZm9ybWF0KHNlbGYucmVtb3RlKSkuX2NhY2hl
X3BhdGgKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY2FjaGVfcGF0aCk6CisgICAgICAgICAg
ICB3aXRoIG9wZW4oY2FjaGVfcGF0aCwgJ3InKSBhcyBjYWNoZToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9jYWNoZV9jb250ZW50cyA9IGNhY2hlLnJlYWQoKQorICAgICAgICAgICAgb3MucmVtb3Zl
KGNhY2hlX3BhdGgpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhz
ZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBjYWNoZV9wYXRoID0gc2NtcmVtb3RlLlN2
bignaHR0cDovL3t9Jy5mb3JtYXQoc2VsZi5yZW1vdGUpKS5fY2FjaGVfcGF0aAorICAgICAgICBp
ZiBvcy5wYXRoLmlzZmlsZShjYWNoZV9wYXRoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjYWNo
ZV9wYXRoKQorICAgICAgICBpZiBzZWxmLl9jYWNoZV9jb250ZW50czoKKyAgICAgICAgICAgIHdp
dGggb3BlbihjYWNoZV9wYXRoLCAndycpIGFzIGNhY2hlOgorICAgICAgICAgICAgICAgIGNhY2hl
LndyaXRlKHNlbGYuX2NhY2hlX2NvbnRlbnRzKQorCisgICAgICAgIHN1cGVyKFN2biwgc2VsZiku
X19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGxhdGVzdChzZWxmKToKKyAgICAg
ICAgbGF0ZXN0ID0gc2VsZi5jb21taXRzWyd0cnVuayddWy0xXQorICAgICAgICBmb3IgYnJhbmNo
IGluIHNlbGYuY29tbWl0cy52YWx1ZXMoKToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gYnJh
bmNoOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5yZXZpc2lvbiA+IGxhdGVzdC5yZXZpc2lv
bjoKKyAgICAgICAgICAgICAgICAgICAgbGF0ZXN0ID0gY29tbWl0CisgICAgICAgIHJldHVybiBs
YXRlc3QKKworICAgIGRlZiBicmFuY2hlcyhzZWxmLCByZXZpc2lvbj1Ob25lKToKKyAgICAgICAg
cmV2aXNpb24gPSByZXZpc2lvbiBvciBzZWxmLmxhdGVzdCgpCisgICAgICAgIGJyYW5jaGVzID0g
c2V0KCkKKyAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMo
KToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAgICBp
ZiBjb21taXQucmV2aXNpb24gPD0gcmV2aXNpb24gYW5kIG5vdCBjb21taXQuYnJhbmNoLnN0YXJ0
c3dpdGgoJ3RhZ3MnKSBhbmQgY29tbWl0LmJyYW5jaCAhPSAndHJ1bmsnOgorICAgICAgICAgICAg
ICAgICAgICBicmFuY2hlcy5hZGQoY29tbWl0LmJyYW5jaCkKKyAgICAgICAgcmV0dXJuIHNvcnRl
ZChicmFuY2hlcykKKworICAgIGRlZiB0YWdzKHNlbGYsIHJldmlzaW9uPU5vbmUpOgorICAgICAg
ICByZXZpc2lvbiA9IHJldmlzaW9uIG9yIHNlbGYubGF0ZXN0KCkKKyAgICAgICAgdGFncyA9IHNl
dCgpCisgICAgICAgIGZvciBicmFuY2gsIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLml0ZW1zKCk6
CisgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAgICAgaWYg
Y29tbWl0LnJldmlzaW9uIDw9IHJldmlzaW9uIGFuZCBjb21taXQuYnJhbmNoLnN0YXJ0c3dpdGgo
J3RhZ3MnKToKKyAgICAgICAgICAgICAgICAgICAgdGFncy5hZGQoY29tbWl0LmJyYW5jaCkKKyAg
ICAgICAgcmV0dXJuIHNvcnRlZCh0YWdzKQorCisgICAgZGVmIHJhbmdlKHNlbGYsIGNhdGVnb3J5
PU5vbmUsIHN0YXJ0PU5vbmUsIGVuZD1Ob25lKToKKyAgICAgICAgc3RhcnQgPSBzdGFydCBvciBz
ZWxmLmxhdGVzdCgpCisgICAgICAgIGVuZCA9IGVuZCBvciAxCisKKyAgICAgICAgaWYgY2F0ZWdv
cnkgYW5kIGNhdGVnb3J5LnN0YXJ0c3dpdGgoJ2JyYW5jaGVzLycpOgorICAgICAgICAgICAgY2F0
ZWdvcnkgPSBjYXRlZ29yeS5zcGxpdCgnLycpWy0xXQorCisgICAgICAgIGlmIG5vdCBjYXRlZ29y
eToKKyAgICAgICAgICAgIGZvciBjb21taXRzIGluIHNlbGYuY29tbWl0cy52YWx1ZXMoKToKKyAg
ICAgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAg
IGlmIGNvbW1pdC5yZXZpc2lvbiA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
dGVnb3J5ID0gY29tbWl0LmJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKwor
ICAgICAgICBpZiBub3QgY2F0ZWdvcnk6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAg
ICByZXN1bHQgPSBbY29tbWl0IGZvciBjb21taXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzW2Nh
dGVnb3J5XSldCisgICAgICAgIGlmIHNlbGYuY29tbWl0c1tjYXRlZ29yeV1bMF0uYnJhbmNoX3Bv
aW50OgorICAgICAgICAgICAgcmVzdWx0ICs9IFtjb21taXQgZm9yIGNvbW1pdCBpbiByZXZlcnNl
ZChzZWxmLmNvbW1pdHNbJ3RydW5rJ11bOnNlbGYuY29tbWl0c1tjYXRlZ29yeV1bMF0uYnJhbmNo
X3BvaW50XSldCisKKyAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJhbmdlKGxlbihyZXN1
bHQpKSk6CisgICAgICAgICAgICBpZiByZXN1bHRbaW5kZXhdLnJldmlzaW9uIDwgZW5kOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6aW5kZXhdCisgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIGlmIHJlc3VsdFtpbmRleF0ucmV2aXNpb24gPiBzdGFydDoKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbaW5kZXg6XQorICAgICAgICAgICAgICAgIGJy
ZWFrCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0
aG9kLCB1cmwsIGRhdGE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgdXJsLnN0YXJ0
c3dpdGgoJ2h0dHA6Ly8nKSBhbmQgbm90IHVybC5zdGFydHN3aXRoKCdodHRwczovLycpOgorICAg
ICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAg
ZGF0YSA9IHhtbHRvZGljdC5wYXJzZShkYXRhKSBpZiBkYXRhIGVsc2UgTm9uZQorICAgICAgICBz
dHJpcHBlZF91cmwgPSB1cmwuc3BsaXQoJzovLycpWy0xXQorCisgICAgICAgICMgTGF0ZXN0IHJl
dmlzaW9uCisgICAgICAgIGlmIG1ldGhvZCA9PSAnT1BUSU9OUycgYW5kIHN0cmlwcGVkX3VybCA9
PSBzZWxmLnJlbW90ZSBhbmQgZGF0YSA9PSBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ0Q6
b3B0aW9ucycsIE9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICAgICAoJ0B4bWxuczpEJywgJ0RB
VjonKSwKKyAgICAgICAgICAgICAgICAoJ0Q6YWN0aXZpdHktY29sbGVjdGlvbi1zZXQnLCBOb25l
KSwKKyAgICAgICAgICAgICkpKSwKKyAgICAgICAgKSk6CisgICAgICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuZnJvbVRleHQoCisgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAg
ICAgICAgICBkYXRhPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJwor
ICAgICAgICAgICAgICAgICAgICAnPEQ6b3B0aW9ucy1yZXNwb25zZSB4bWxuczpEPSJEQVY6Ij5c
bicKKyAgICAgICAgICAgICAgICAgICAgJzxEOmFjdGl2aXR5LWNvbGxlY3Rpb24tc2V0PjxEOmhy
ZWY+L3JlcG9zaXRvcnkvd2Via2l0LyFzdm4vYWN0LzwvRDpocmVmPjwvRDphY3Rpdml0eS1jb2xs
ZWN0aW9uLXNldD48L0Q6b3B0aW9ucy1yZXNwb25zZT5cbicsCisgICAgICAgICAgICAgICAgaGVh
ZGVycz17CisgICAgICAgICAgICAgICAgICAgICdTVk4tWW91bmdlc3QtUmV2Jzogc3RyKHNlbGYu
bGF0ZXN0KCkucmV2aXNpb24pLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICkKKwor
ICAgICAgICAjIExpc3QgY2F0ZWdvcnkKKyAgICAgICAgbWF0Y2ggPSBzZWxmLlJFVklTSU9OX1JF
UVVFU1RfUkUubWF0Y2goc3RyaXBwZWRfdXJsLnNwbGl0KCchJylbLTFdKQorICAgICAgICBpZiBt
ZXRob2QgPT0gJ1BST1BGSU5EJyBhbmQgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9IScuZm9y
bWF0KHNlbGYucmVtb3RlKSkgYW5kIG1hdGNoIGFuZCBkYXRhID09IE9yZGVyZWREaWN0KCgKKyAg
ICAgICAgICAgICgncHJvcGZpbmQnLCBPcmRlcmVkRGljdCgoCisgICAgICAgICAgICAgICAgKCdA
eG1sbnMnLCAnREFWOicpLAorICAgICAgICAgICAgICAgICgncHJvcCcsIE9yZGVyZWREaWN0KCgK
KyAgICAgICAgICAgICAgICAgICAgKCdyZXNvdXJjZXR5cGUnLCBPcmRlcmVkRGljdCgoCisgICAg
ICAgICAgICAgICAgICAgICAgICAoJ0B4bWxucycsICdEQVY6JyksCisgICAgICAgICAgICAgICAg
ICAgICkpKSwKKyAgICAgICAgICAgICAgICApKSksCisgICAgICAgICAgICApKSksCisgICAgICAg
ICkpOgorICAgICAgICAgICAgbGlua3MgPSBbc3RyaXBwZWRfdXJsW2xlbihzdHJpcHBlZF91cmwu
c3BsaXQoJy8nKVswXSk6XV0KKyAgICAgICAgICAgIGlmIGxpbmtzWzBdWy0xXSAhPSAnLyc6Cisg
ICAgICAgICAgICAgICAgbGlua3NbMF0gKz0gJy8nCisKKyAgICAgICAgICAgIGlmIG1hdGNoLmdy
b3VwKCdjYXRlZ29yeScpID09ICdicmFuY2hlcyc6CisgICAgICAgICAgICAgICAgZm9yIGJyYW5j
aCBpbiBzZWxmLmJyYW5jaGVzKGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkpOgorICAgICAg
ICAgICAgICAgICAgICBsaW5rcy5hcHBlbmQoJ3t9e30vJy5mb3JtYXQobGlua3NbMF0sIGJyYW5j
aCkpCisKKyAgICAgICAgICAgIGVsaWYgbWF0Y2guZ3JvdXAoJ2NhdGVnb3J5JykgPT0gJ3RhZ3Mn
OgorICAgICAgICAgICAgICAgIGZvciB0YWcgaW4gc2VsZi50YWdzKGludChtYXRjaC5ncm91cCgn
cmV2aXNpb24nKSkpOgorICAgICAgICAgICAgICAgICAgICBsaW5rcy5hcHBlbmQoJ3t9e30vJy5m
b3JtYXQobGlua3NbMF1bOi01XSwgdGFnKSkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKworICAgICAgICAg
ICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlKAorICAgICAgICAgICAgICAgIHN0YXR1c19jb2RlPTIw
NywKKyAgICAgICAgICAgICAgICB1cmw9dXJsLAorICAgICAgICAgICAgICAgIHRleHQ9Jzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4nCisgICAgICAgICAgICAgICAgICAg
ICc8RDptdWx0aXN0YXR1cyB4bWxuczpEPSJEQVY6IiB4bWxuczpuczA9IkRBVjoiPlxuJworICAg
ICAgICAgICAgICAgICAgICAne308L0Q6bXVsdGlzdGF0dXM+XG4nLmZvcm1hdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICcnLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8
RDpyZXNwb25zZSB4bWxuczpscDE9IkRBVjoiPlxuJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICc8RDpocmVmPnt9PC9EOmhyZWY+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzxEOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wPlxu
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bHAxOnJlc291cmNldHlwZT48RDpjb2xs
ZWN0aW9uLz48L2xwMTpyZXNvdXJjZXR5cGU+XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzwvRDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8RDpzdGF0dXM+
SFRUUC8xLjEgMjAwIE9LPC9EOnN0YXR1cz5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnPC9EOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L0Q6cmVz
cG9uc2U+XG4nLmZvcm1hdChsaW5rKSBmb3IgbGluayBpbiBsaW5rcworICAgICAgICAgICAgICAg
ICAgICAgICAgXSkpLAorICAgICAgICAgICAgKQorCisgICAgICAgICMgSW5mbyBmb3IgY29tbWl0
LCBicmFuY2ggb3IgdGFnCisgICAgICAgIGlmIG1ldGhvZCA9PSAnUFJPUEZJTkQnIGFuZCBzdHJp
cHBlZF91cmwuc3RhcnRzd2l0aCgne30hJy5mb3JtYXQoc2VsZi5yZW1vdGUpKSBhbmQgbWF0Y2gg
YW5kIGRhdGEgPT0gT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdwcm9wZmluZCcsIE9yZGVy
ZWREaWN0KCgKKyAgICAgICAgICAgICAgICAoJ0B4bWxucycsICdEQVY6JyksCisgICAgICAgICAg
ICAgICAgKCdwcm9wJywgT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgICAgICAgICAoJ3Jlc291
cmNldHlwZScsIE9yZGVyZWREaWN0KCgoJ0B4bWxucycsICdEQVY6JyksKSkpLAorICAgICAgICAg
ICAgICAgICAgICAoJ2dldGNvbnRlbnRsZW5ndGgnLCBPcmRlcmVkRGljdCgoKCdAeG1sbnMnLCAn
REFWOicpLCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkZWFkcHJvcC1jb3VudCcsIE9yZGVy
ZWREaWN0KCgoJ0B4bWxucycsICdodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL3htbG5zL2Rh
di8nKSwpKSksCisgICAgICAgICAgICAgICAgICAgICgndmVyc2lvbi1uYW1lJywgT3JkZXJlZERp
Y3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAgICAgICAgICAgICgnY3JlYXRp
b25kYXRlJywgT3JkZXJlZERpY3QoKCgnQHhtbG5zJywgJ0RBVjonKSwpKSksCisgICAgICAgICAg
ICAgICAgICAgICgnY3JlYXRvci1kaXNwbGF5bmFtZScsIE9yZGVyZWREaWN0KCgoJ0B4bWxucycs
ICdEQVY6JyksKSkpLAorICAgICAgICAgICAgICAgICkpKSwKKyAgICAgICAgICAgICkpKSwKKyAg
ICAgICAgKSk6CisgICAgICAgICAgICBicmFuY2ggPSBtYXRjaC5ncm91cCgnY2F0ZWdvcnknKQor
ICAgICAgICAgICAgaWYgYnJhbmNoLnN0YXJ0c3dpdGgoJ2JyYW5jaGVzJyk6CisgICAgICAgICAg
ICAgICAgYnJhbmNoID0gJy8nLmpvaW4oYnJhbmNoLnNwbGl0KCcvJylbMTpdKQorCisgICAgICAg
ICAgICBpZiBicmFuY2ggbm90IGluIHNlbGYuY29tbWl0czoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKyAgICAgICAgICAgIGNvbW1pdCA9IHNl
bGYuY29tbWl0c1ticmFuY2hdWzBdCisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHNlbGYu
Y29tbWl0c1ticmFuY2hdOgorICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZS5yZXZpc2lvbiA8
PSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpOgorICAgICAgICAgICAgICAgICAgICBjb21t
aXQgPSBjYW5kaWRhdGUKKworICAgICAgICAgICAgc3RyaXBwZWRfdXJsID0gc3RyaXBwZWRfdXJs
W2xlbihzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVswXSk6XQorICAgICAgICAgICAgaWYgc3RyaXBw
ZWRfdXJsWy0xXSAhPSAnLyc6CisgICAgICAgICAgICAgICAgc3RyaXBwZWRfdXJsICs9ICcvJwor
CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgc3Rh
dHVzX2NvZGU9MjA3LAorICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAg
dGV4dD0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbicKKyAgICAgICAg
ICAgICAgICAgICAgJzxEOm11bHRpc3RhdHVzIHhtbG5zOkQ9IkRBVjoiIHhtbG5zOm5zMD0iREFW
OiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpyZXNwb25zZSB4bWxuczpscDE9IkRBVjoi
IHhtbG5zOmxwMz0iaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy94bWxucy9kYXYvIiB4bWxu
czpnMD0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpocmVmPnt9PC9EOmhyZWY+
XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpwcm9wc3RhdD5cbicKKyAgICAgICAgICAgICAg
ICAgICAgJzxEOnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOnJlc291cmNldHlw
ZT48RDpjb2xsZWN0aW9uLz48L2xwMTpyZXNvdXJjZXR5cGU+XG4nCisgICAgICAgICAgICAgICAg
ICAgICc8bHAzOmRlYWRwcm9wLWNvdW50PjE8L2xwMzpkZWFkcHJvcC1jb3VudD5cbicKKyAgICAg
ICAgICAgICAgICAgICAgJzxscDE6dmVyc2lvbi1uYW1lPnt9PC9scDE6dmVyc2lvbi1uYW1lPlxu
JworICAgICAgICAgICAgICAgICAgICAnPGxwMTpjcmVhdGlvbmRhdGU+e308L2xwMTpjcmVhdGlv
bmRhdGU+XG4nCisgICAgICAgICAgICAgICAgICAgICc8bHAxOmNyZWF0b3ItZGlzcGxheW5hbWU+
e308L2xwMTpjcmVhdG9yLWRpc3BsYXluYW1lPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9E
OnByb3A+XG4nCisgICAgICAgICAgICAgICAgICAgICc8RDpzdGF0dXM+SFRUUC8xLjEgMjAwIE9L
PC9EOnN0YXR1cz5cbicKKyAgICAgICAgICAgICAgICAgICAgJzwvRDpwcm9wc3RhdD5cbicKKyAg
ICAgICAgICAgICAgICAgICAgJzxEOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAn
PEQ6cHJvcD5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxnMDpnZXRjb250ZW50bGVuZ3RoLz5c
bicKKyAgICAgICAgICAgICAgICAgICAgJzwvRDpwcm9wPlxuJworICAgICAgICAgICAgICAgICAg
ICAnPEQ6c3RhdHVzPkhUVFAvMS4xIDQwNCBOb3QgRm91bmQ8L0Q6c3RhdHVzPlxuJworICAgICAg
ICAgICAgICAgICAgICAnPC9EOnByb3BzdGF0PlxuJworICAgICAgICAgICAgICAgICAgICAnPC9E
OnJlc3BvbnNlPlxuJworICAgICAgICAgICAgICAgICAgICAnPC9EOm11bHRpc3RhdHVzPlxuJy5m
b3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZF91cmwsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRldGltZS5mcm9tdGltZXN0YW1wKGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0l
ZFQlSDolTTolUy4xMDM3NTRaJyksCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQuYXV0
aG9yLmVtYWlsLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApCisKKyAgICAgICAg
IyBMb2cgZm9yIGNvbW1pdAorICAgICAgICBpZiBtZXRob2QgPT0gJ1JFUE9SVCcgYW5kIHN0cmlw
cGVkX3VybC5zdGFydHN3aXRoKCd7fSEnLmZvcm1hdChzZWxmLnJlbW90ZSkpIGFuZCBtYXRjaCBh
bmQgZGF0YS5nZXQoJ1M6bG9nLXJlcG9ydCcpOgorICAgICAgICAgICAgY29tbWl0cyA9IHNlbGYu
cmFuZ2UoCisgICAgICAgICAgICAgICAgY2F0ZWdvcnk9bWF0Y2guZ3JvdXAoJ2NhdGVnb3J5Jyks
CisgICAgICAgICAgICAgICAgc3RhcnQ9aW50KGRhdGFbJ1M6bG9nLXJlcG9ydCddWydTOnN0YXJ0
LXJldmlzaW9uJ10pLAorICAgICAgICAgICAgICAgIGVuZD1pbnQoZGF0YVsnUzpsb2ctcmVwb3J0
J11bJ1M6ZW5kLXJldmlzaW9uJ10pLAorICAgICAgICAgICAgKQorCisgICAgICAgICAgICBsaW1p
dCA9IGludChkYXRhWydTOmxvZy1yZXBvcnQnXS5nZXQoJ1M6bGltaXQnLCAwKSkKKyAgICAgICAg
ICAgIGlmIGxpbWl0IGFuZCBsZW4oY29tbWl0cykgPiBsaW1pdDoKKyAgICAgICAgICAgICAgICBj
b21taXRzID0gY29tbWl0c1s6bGltaXRdCisKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRzOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorCisg
ICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgc3RhdHVz
X2NvZGU9MjAwLAorICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAgdGV4
dD0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbicKKyAgICAgICAgICAg
ICAgICAnPFM6bG9nLXJlcG9ydCB4bWxuczpTPSJzdm46IiB4bWxuczpEPSJEQVY6Ij5cbicKKyAg
ICAgICAgICAgICAgICAne308L1M6bG9nLXJlcG9ydD5cbicuZm9ybWF0KAorICAgICAgICAgICAg
ICAgICAgICAnJy5qb2luKFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8Uzpsb2ctaXRlbT5c
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8RDp2ZXJzaW9uLW5hbWU+e308L0Q6dmVyc2lv
bi1uYW1lPlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJzxTOmRhdGU+e308L1M6ZGF0ZT5c
bicKKyAgICAgICAgICAgICAgICAgICAgICAgICd7fXt9PC9TOmxvZy1pdGVtPlxuJy5mb3JtYXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFt
cCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTLjEwMzc1NFonKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJyBpZiBkYXRhWydTOmxvZy1yZXBvcnQnXS5nZXQoJ1M6cmV2cHJvJykg
ZWxzZSAnPEQ6Y29tbWVudD57fTwvRDpjb21tZW50PlxuJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICc8RDpjcmVhdG9yLWRpc3BsYXluYW1lPnt9PC9EOmNyZWF0b3ItZGlzcGxheW5hbWU+
XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0Lm1lc3Nh
Z2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5hdXRob3IuZW1haWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnPFM6bW9kaWZpZWQtcGF0aCBub2RlLWtpbmQ9ImZpbGUiIHRleHQtbW9kcz0idHJ1ZSIg
cHJvcC1tb2RzPSJmYWxzZSI+L3ticmFuY2h9L0NoYW5nZWxvZzwvUzptb2RpZmllZC1wYXRoPlxu
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8Uzptb2RpZmllZC1wYXRoIG5vZGUta2lu
ZD0iZmlsZSIgdGV4dC1tb2RzPSJ0cnVlIiBwcm9wLW1vZHM9ImZhbHNlIj4ve2JyYW5jaH0vZmls
ZS5jcHA8L1M6bW9kaWZpZWQtcGF0aD5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2g9Y29tbWl0LmJyYW5jaCBpZiBjb21taXQuYnJhbmNoLnNwbGl0KCcv
JylbMF0gaW4gWyd0cnVuaycsICd0YWdzJ10gZWxzZSAnYnJhbmNoZXMve30nLmZvcm1hdChjb21t
aXQuYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGlmICdTOmRpc2NvdmVy
LWNoYW5nZWQtcGF0aHMnIGluIGRhdGFbJ1M6bG9nLXJlcG9ydCddIGVsc2UgJycsCisgICAgICAg
ICAgICAgICAgICAgICAgICApIGZvciBjb21taXQgaW4gY29tbWl0cworICAgICAgICAgICAgICAg
ICAgICBdKSksCisgICAgICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNl
LmNyZWF0ZTQwNCh1cmwpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3JlbW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0
IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHNj
bXB5LnJlbW90ZS5zY20gaW1wb3J0IFNjbQorZnJvbSB3ZWJraXRzY21weS5yZW1vdGUuc3ZuIGlt
cG9ydCBTdm4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3JlbW90ZS9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUv
c2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzaXgKKworZnJvbSB3ZWJraXRzY21weS5zY21f
YmFzZSBpbXBvcnQgU2NtQmFzZQorCisKK2NsYXNzIFNjbShTY21CYXNlKToKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgZnJvbV91cmwoY2xzLCB1cmwpOgorICAgICAgICBmcm9tIHdlYmtpdHNj
bXB5IGltcG9ydCByZW1vdGUKKworICAgICAgICBpZiByZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcih1
cmwpOgorICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5Tdm4odXJsKQorICAgICAgICByYWlzZSBP
U0Vycm9yKCIne30nIGlzIG5vdCBhIGtub3duIFNDTSBzZXJ2ZXIiLmZvcm1hdCh1cmwpKQorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNo
ZXM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFNjbSwgc2VsZikuX19pbml0X18oZGV2X2JyYW5jaGVz
PWRldl9icmFuY2hlcywgcHJvZF9icmFuY2hlcz1wcm9kX2JyYW5jaGVzKQorCisgICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKHVybCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAndXJsJyB0byBiZSBhIHN0cmluZyB0eXBlLCBub3QgJ3t9
JyIuZm9ybWF0KHR5cGUodXJsKSkpCisgICAgICAgIHNlbGYudXJsID0gdXJsCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc3ZuLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3JlbW90ZS9zdm4ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3N2bi5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGJpc2VjdAoraW1wb3J0IGNhbGVuZGFyCitpbXBvcnQgZmFzdGVuZXJzCitpbXBv
cnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHRl
bXBmaWxlCitpbXBvcnQgeG1sdG9kaWN0CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1l
CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBsb2csIHJ1biwgZGVjb3JhdG9ycworZnJvbSB3
ZWJraXRzY21weS5yZW1vdGUuc2NtIGltcG9ydCBTY20KK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IENvbW1pdCwgQ29udHJpYnV0b3IsIFZlcnNpb24KKworCitjbGFzcyBTdm4oU2NtKToKKyAgICBV
UkxfUkUgPSByZS5jb21waWxlKHInXEFodHRwcz86Ly9zdm4uKD9QPGhvc3Q+XFMrKS9yZXBvc2l0
b3J5L1xTK1xaJykKKyAgICBISVNUT1JZX1JFID0gcmUuY29tcGlsZShiJzxEOnZlcnNpb24tbmFt
ZT4oP1A8cmV2aXNpb24+XGQrKTwvRDp2ZXJzaW9uLW5hbWU+JykKKyAgICBDQUNIRV9WRVJTSU9O
ID0gVmVyc2lvbigxKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX3dlYnNlcnZlcihj
bHMsIHVybCk6CisgICAgICAgIHJldHVybiBUcnVlIGlmIGNscy5VUkxfUkUubWF0Y2godXJsKSBl
bHNlIEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZfYnJhbmNoZXM9Tm9u
ZSwgcHJvZF9icmFuY2hlcz1Ob25lKToKKyAgICAgICAgaWYgdXJsWy0xXSAhPSAnLyc6CisgICAg
ICAgICAgICB1cmwgKz0gJy8nCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3dlYnNlcnZlcih1cmwp
OgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIid7fScgaXMgbm90IGEgdmFsaWQg
U1ZOIHdlYnNlcnZlciIuZm9ybWF0KHVybCkpCisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19p
bml0X18odXJsLCBkZXZfYnJhbmNoZXM9ZGV2X2JyYW5jaGVzLCBwcm9kX2JyYW5jaGVzPXByb2Rf
YnJhbmNoZXMpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fY2FjaGVfcGF0aCk6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9jYWNoZV9sb2Nr
KCksIG9wZW4oc2VsZi5fY2FjaGVfcGF0aCkgYXMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fbWV0YWRhdGFfY2FjaGUgPSBqc29uLmxvYWQoZmlsZSkKKyAgICAgICAgICAgIGV4Y2Vw
dCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuX21ldGFkYXRhX2NhY2hlID0g
ZGljdCh2ZXJzaW9uPXN0cihzZWxmLkNBQ0hFX1ZFUlNJT04pKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5fbWV0YWRhdGFfY2FjaGUgPSBkaWN0KHZlcnNpb249c3RyKHNlbGYuQ0FD
SEVfVkVSU0lPTikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfc3ZuKHNlbGYpOgorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSh0aW1lb3V0PTYwKQor
ICAgIGRlZiBfbGF0ZXN0KHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVl
c3QoCisgICAgICAgICAgICBtZXRob2Q9J09QVElPTlMnLAorICAgICAgICAgICAgdXJsPXNlbGYu
dXJsLAorICAgICAgICAgICAgaGVhZGVycz17CisgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlw
ZSc6ICd0ZXh0L3htbCcsCisgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlw
JywKKyAgICAgICAgICAgICAgICAnREVQVEgnOiAnMScsCisgICAgICAgICAgICB9LCBkYXRhPSc8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJworICAgICAgICAgICAgJzxE
Om9wdGlvbnMgeG1sbnM6RD0iREFWOiI+XG4nCisgICAgICAgICAgICAnICAgIDxEOmFjdGl2aXR5
LWNvbGxlY3Rpb24tc2V0PjwvRDphY3Rpdml0eS1jb2xsZWN0aW9uLXNldD5cbicKKyAgICAgICAg
ICAgICc8L0Q6b3B0aW9ucz5cbicsCisgICAgICAgICkKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3Rh
dHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJu
IGludChyZXNwb25zZS5oZWFkZXJzLmdldCgnU1ZOLVlvdW5nZXN0LVJldicpKQorCisgICAgQGRl
Y29yYXRvcnMuTWVtb2l6ZShjYWNoZWQ9RmFsc2UpCisgICAgZGVmIGluZm8oc2VsZiwgYnJhbmNo
PU5vbmUsIHJldmlzaW9uPU5vbmUsIHRhZz1Ob25lKToKKyAgICAgICAgaWYgdGFnIGFuZCBicmFu
Y2g6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qgc3BlY2lmeSBib3RoIGJy
YW5jaCBhbmQgdGFnJykKKyAgICAgICAgaWYgdGFnIGFuZCByZXZpc2lvbjoKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBzcGVjaWZ5IGJvdGggYnJhbmNoIGFuZCB0YWcnKQor
CisgICAgICAgIGlmIG5vdCByZXZpc2lvbjoKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaCBv
ciBzZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAgICAgICByZXZpc2lvbiA9IHNlbGYuX2xhdGVz
dCgpCisgICAgICAgICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdGYWlsZWQgdG8gZmluZCB0aGUgbGF0ZXN0IHJldmlzaW9uJykKKworICAgICAgICB1
cmwgPSAne30hc3ZuL3J2ci97fScuZm9ybWF0KHNlbGYudXJsLCByZXZpc2lvbikKKyAgICAgICAg
aWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBhbmQgJy8nIG5vdCBp
biBicmFuY2g6CisgICAgICAgICAgICB1cmwgPSAne30vYnJhbmNoZXMve30nLmZvcm1hdCh1cmws
IGJyYW5jaCkKKyAgICAgICAgZWxpZiB0YWc6CisgICAgICAgICAgICB1cmwgPSAne30vdGFncy97
fScuZm9ybWF0KHVybCwgdGFnKQorICAgICAgICBlbGlmIGJyYW5jaDoKKyAgICAgICAgICAgIHVy
bCA9ICd7fS97fScuZm9ybWF0KHVybCwgYnJhbmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gpCisK
KyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9k
PSdQUk9QRklORCcsCisgICAgICAgICAgICB1cmw9dXJsLAorICAgICAgICAgICAgaGVhZGVycz17
CisgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAgICAgICAg
ICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAnREVQVEgn
OiAnMScsCisgICAgICAgICAgICB9LCBkYXRhPSc8cHJvcGZpbmQgeG1sbnM9IkRBVjoiPlxuJwor
ICAgICAgICAgICAgJyAgICA8cHJvcD5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxyZXNvdXJj
ZXR5cGUgeG1sbnM9IkRBVjoiLz5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxnZXRjb250ZW50
bGVuZ3RoIHhtbG5zPSJEQVY6Ii8+XG4nCisgICAgICAgICAgICAnICAgICAgICA8ZGVhZHByb3At
Y291bnQgeG1sbnM9Imh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcveG1sbnMvZGF2LyIvPlxu
JworICAgICAgICAgICAgJyAgICAgICAgPHZlcnNpb24tbmFtZSB4bWxucz0iREFWOiIvPlxuJwor
ICAgICAgICAgICAgJyAgICAgICAgPGNyZWF0aW9uZGF0ZSB4bWxucz0iREFWOiIvPlxuJworICAg
ICAgICAgICAgJyAgICAgICAgPGNyZWF0b3ItZGlzcGxheW5hbWUgeG1sbnM9IkRBVjoiLz5cbicK
KyAgICAgICAgICAgICcgICAgPC9wcm9wPlxuJworICAgICAgICAgICAgJzwvcHJvcGZpbmQ+XG4n
LAorICAgICAgICApCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlIG5vdCBpbiBbMjAw
LCAyMDddOgorICAgICAgICAgICAgcmV0dXJuIHt9CisKKyAgICAgICAgcmVzcG9uc2UgPSB4bWx0
b2RpY3QucGFyc2UocmVzcG9uc2UudGV4dCkKKyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5n
ZXQoJ0Q6bXVsdGlzdGF0dXMnLCByZXNwb25zZSkuZ2V0KCdEOnJlc3BvbnNlJywgW10pCisgICAg
ICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgIHJl
c3BvbnNlID0gcmVzcG9uc2VbMF0gaWYgaXNpbnN0YW5jZShyZXNwb25zZSwgbGlzdCkgZWxzZSBy
ZXNwb25zZQorICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlWydEOnByb3BzdGF0J11bMF1bJ0Q6
cHJvcCddCisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdMYXN0IENoYW5nZWQgUmV2
JzogcmVzcG9uc2VbJ2xwMTp2ZXJzaW9uLW5hbWUnXSwKKyAgICAgICAgICAgICdMYXN0IENoYW5n
ZWQgQXV0aG9yJzogcmVzcG9uc2VbJ2xwMTpjcmVhdG9yLWRpc3BsYXluYW1lJ10sCisgICAgICAg
ICAgICAnTGFzdCBDaGFuZ2VkIERhdGUnOiAnICcuam9pbihyZXNwb25zZVsnbHAxOmNyZWF0aW9u
ZGF0ZSddLnNwbGl0KCdUJykpLnNwbGl0KCcuJylbMF0sCisgICAgICAgICAgICAnUmV2aXNpb24n
OiByZXZpc2lvbiwKKyAgICAgICAgfQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRf
YnJhbmNoKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCisgICAgZGVmIGxpc3Qoc2Vs
ZiwgY2F0ZWdvcnkpOgorICAgICAgICByZXZpc2lvbiA9IHNlbGYuX2xhdGVzdCgpCisgICAgICAg
IGlmIG5vdCByZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHJlc3Bv
bnNlID0gcmVxdWVzdHMucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD0nUFJPUEZJTkQnLAor
ICAgICAgICAgICAgdXJsPSd7fSFzdm4vcnZyL3t9L3t9Jy5mb3JtYXQoc2VsZi51cmwsIHJldmlz
aW9uLCBjYXRlZ29yeSksCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAgICAgICAgICAn
Q29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29k
aW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywKKyAgICAgICAgICAg
IH0sIGRhdGE9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4nCisgICAg
ICAgICAgICAgICAgJzxwcm9wZmluZCB4bWxucz0iREFWOiI+XG4nCisgICAgICAgICAgICAgICAg
JyAgICA8cHJvcD48cmVzb3VyY2V0eXBlIHhtbG5zPSJEQVY6Ii8+PC9wcm9wPlxuJworICAgICAg
ICAgICAgICAgICc8L3Byb3BmaW5kPlxuJywKKyAgICAgICAgKQorICAgICAgICBpZiByZXNwb25z
ZS5zdGF0dXNfY29kZSBub3QgaW4gWzIwMCwgMjA3XToKKyAgICAgICAgICAgIHJldHVybiBbXQor
CisgICAgICAgIHJlc3BvbnNlcyA9IHhtbHRvZGljdC5wYXJzZShyZXNwb25zZS50ZXh0KQorICAg
ICAgICByZXNwb25zZXMgPSByZXNwb25zZXMuZ2V0KCdEOm11bHRpc3RhdHVzJywgcmVzcG9uc2Vz
KS5nZXQoJ0Q6cmVzcG9uc2UnLCBbXSkKKworICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAg
Zm9yIHJlc3BvbnNlIGluIHJlc3BvbnNlczoKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHJlc3Bv
bnNlWydEOmhyZWYnXS5zcGxpdCgnIXN2bi9ydnIve30ve30vJy5mb3JtYXQocmV2aXNpb24sIGNh
dGVnb3J5KSlbLTFdLnJzdHJpcCgnLycpCisgICAgICAgICAgICBpZiBub3QgY2FuZGlkYXRlOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChjYW5k
aWRhdGUpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIEBwcm9wZXJ0eQorICAgIGRl
ZiBicmFuY2hlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmRlZmF1bHRfYnJhbmNoXSAr
IHNlbGYubGlzdCgnYnJhbmNoZXMnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ3Moc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLmxpc3QoJ3RhZ3MnKQorCisgICAgQHByb3BlcnR5Cisg
ICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisgICAgZGVmIF9jYWNoZV9wYXRoKHNlbGYpOgorICAg
ICAgICByZXR1cm4gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3N2bi57fScu
Zm9ybWF0KHNlbGYuVVJMX1JFLm1hdGNoKHNlbGYudXJsKS5ncm91cCgnaG9zdCcpKSwgJ3dlYmtp
dHNjbXB5LWNhY2hlLmpzb24nKQorCisgICAgZGVmIF9jYWNoZV9sb2NrKHNlbGYpOgorICAgICAg
ICByZXR1cm4gZmFzdGVuZXJzLkludGVyUHJvY2Vzc0xvY2sob3MucGF0aC5qb2luKG9zLnBhdGgu
ZGlybmFtZShzZWxmLl9jYWNoZV9wYXRoKSwgJ2NhY2hlLmxvY2snKSkKKworICAgIGRlZiBfY2Fj
aGVfcmV2aXNpb25zKHNlbGYsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgYnJhbmNoID0gYnJhbmNo
IG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAgaXNfZGVmYXVsdF9icmFuY2ggPSBicmFu
Y2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICBpZiBicmFuY2ggbm90IGluIHNlbGYu
X21ldGFkYXRhX2NhY2hlOgorICAgICAgICAgICAgc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNo
XSA9IFswXSBpZiBpc19kZWZhdWx0X2JyYW5jaCBlbHNlIFtdCisgICAgICAgIHBvcyA9IGxlbihz
ZWxmLl9tZXRhZGF0YV9jYWNoZVticmFuY2hdKQorCisgICAgICAgICMgSWYgd2UgYXJlbid0IG9u
IHRoZSBkZWZhdWx0IGJyYW5jaCwgd2Ugd2lsbCBuZWVkIHRoZSBkZWZhdWx0IGJyYW5jaCB0byBk
ZXRlcm1pbmUgd2hlbgorICAgICAgICAjIG91ciAgYnJhbmNoICBpbnRlcnNlY3RzIHdpdGggdGhl
IGRlZmF1bHQgYnJhbmNoLgorICAgICAgICBpZiBub3QgaXNfZGVmYXVsdF9icmFuY2g6CisgICAg
ICAgICAgICBzZWxmLl9jYWNoZV9yZXZpc2lvbnMoYnJhbmNoPXNlbGYuZGVmYXVsdF9icmFuY2gp
CisKKyAgICAgICAgZGlkX3dhcm4gPSBGYWxzZQorICAgICAgICBjb3VudCA9IDAKKworICAgICAg
ICBsYXRlc3QgPSBzZWxmLl9sYXRlc3QoKQorICAgICAgICB3aXRoIHJlcXVlc3RzLnJlcXVlc3Qo
CisgICAgICAgICAgICBtZXRob2Q9J1JFUE9SVCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9y
dnIve30ve30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBzZWxmLnVybCwKKyAgICAgICAgICAg
ICAgICBsYXRlc3QsCisgICAgICAgICAgICAgICAgYnJhbmNoIGlmIGlzX2RlZmF1bHRfYnJhbmNo
IG9yICcvJyBpbiBicmFuY2ggZWxzZSAnYnJhbmNoZXMve30nLmZvcm1hdChicmFuY2gpLAorICAg
ICAgICAgICAgKSwgc3RyZWFtPVRydWUsCisgICAgICAgICAgICBoZWFkZXJzPXsKKyAgICAgICAg
ICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJywKKyAgICAgICAgICAgICAgICAnQWNj
ZXB0LUVuY29kaW5nJzogJ2d6aXAnLAorICAgICAgICAgICAgICAgICdERVBUSCc6ICcxJywKKyAg
ICAgICAgICAgIH0sIGRhdGE9JzxTOmxvZy1yZXBvcnQgeG1sbnM6Uz0ic3ZuOiI+XG4nCisgICAg
ICAgICAgICAgICAgJzxTOnN0YXJ0LXJldmlzaW9uPntyZXZpc2lvbn08L1M6c3RhcnQtcmV2aXNp
b24+XG4nCisgICAgICAgICAgICAgICAgJzxTOmVuZC1yZXZpc2lvbj4wPC9TOmVuZC1yZXZpc2lv
bj5cbicKKyAgICAgICAgICAgICAgICAnPFM6cmV2cHJvcD5zdm46ZGF0ZTwvUzpyZXZwcm9wPlxu
JworICAgICAgICAgICAgICAgICc8L1M6bG9nLXJlcG9ydD5cbicuZm9ybWF0KHJldmlzaW9uPWxh
dGVzdCksCisgICAgICAgICkgYXMgcmVzcG9uc2U6CisgICAgICAgICAgICBpZiByZXNwb25zZS5z
dGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24o
IkZhaWxlZCB0byBjb25zdHJ1Y3QgYnJhbmNoIGhpc3RvcnkgZm9yICd7fSciLmZvcm1hdChicmFu
Y2gpKQorCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZXNwb25zZS5pdGVyX2xpbmVzKCk6Cisg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLkhJU1RPUllfUkUubWF0Y2gobGluZSkKKyAgICAg
ICAgICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisK
KyAgICAgICAgICAgICAgICBpZiBub3QgZGlkX3dhcm46CisgICAgICAgICAgICAgICAgICAgIGNv
dW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgY291bnQgPiAxMDAwOgorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5sb2coJ0NhY2hpbmcgY29tbWl0IGRhdGEgZm9yIHt9LCB0aGlz
IHdpbGwgdGFrZSBhIGZldyBtaW51dGVzLi4uJy5mb3JtYXQoYnJhbmNoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZF93YXJuID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgcmV2aXNpb24g
PSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpCisgICAgICAgICAgICAgICAgaWYgcG9zID4g
MCBhbmQgc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXVtwb3MgLSAxXSA9PSByZXZpc2lvbjoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfZGVm
YXVsdF9icmFuY2g6CisgICAgICAgICAgICAgICAgICAgIGlmIHJldmlzaW9uIGluIHNlbGYuX21l
dGFkYXRhX2NhY2hlW3NlbGYuZGVmYXVsdF9icmFuY2hdOgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fbWV0YWRhdGFfY2FjaGVbYnJhbmNoXS5pbnNlcnQocG9zLCByZXZpc2lvbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5fbWV0YWRh
dGFfY2FjaGVbYnJhbmNoXS5pbnNlcnQocG9zLCByZXZpc2lvbikKKworICAgICAgICBpZiBzZWxm
Ll9tZXRhZGF0YV9jYWNoZVtzZWxmLmRlZmF1bHRfYnJhbmNoXVswXSA9PSBbMF06CisgICAgICAg
ICAgICBzZWxmLl9tZXRhZGF0YV9jYWNoZVsnaWRlbnRpZmllciddID0gbGVuKHNlbGYuX21ldGFk
YXRhX2NhY2hlW2JyYW5jaF0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYuX2NhY2hlX3BhdGgpKToKKyAgICAgICAg
ICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUoc2VsZi5fY2FjaGVfcGF0aCkpCisg
ICAgICAgICAgICB3aXRoIHNlbGYuX2NhY2hlX2xvY2soKSwgb3BlbihzZWxmLl9jYWNoZV9wYXRo
LCAndycpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAganNvbi5kdW1wKHNlbGYuX21ldGFkYXRh
X2NhY2hlLCBmaWxlLCBpbmRlbnQ9NCkKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9y
KToKKyAgICAgICAgICAgIHNlbGYubG9nKCJGYWlsZWQgdG8gd3JpdGUgU1ZOIGNhY2hlIHRvICd7
fSciLmZvcm1hdChzZWxmLl9jYWNoZV9wYXRoKSkKKworICAgICAgICByZXR1cm4gc2VsZi5fbWV0
YWRhdGFfY2FjaGVbYnJhbmNoXQorCisgICAgZGVmIF9icmFuY2hfZm9yKHNlbGYsIHJldmlzaW9u
KToKKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0
aG9kPSdSRVBPUlQnLAorICAgICAgICAgICAgdXJsPSd7fSFzdm4vcnZyL3t9Jy5mb3JtYXQoc2Vs
Zi51cmwsIHJldmlzaW9uKSwKKyAgICAgICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAg
ICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLAorICAgICAgICAgICAgICAgICdBY2NlcHQtRW5j
b2RpbmcnOiAnZ3ppcCcsCisgICAgICAgICAgICAgICAgJ0RFUFRIJzogJzEnLAorICAgICAgICAg
ICAgfSwgZGF0YT0nPFM6bG9nLXJlcG9ydCB4bWxuczpTPSJzdm46Ij5cbicKKyAgICAgICAgICAg
ICAgICAnPFM6c3RhcnQtcmV2aXNpb24+e3JldmlzaW9ufTwvUzpzdGFydC1yZXZpc2lvbj5cbicK
KyAgICAgICAgICAgICAgICAnPFM6ZW5kLXJldmlzaW9uPntyZXZpc2lvbn08L1M6ZW5kLXJldmlz
aW9uPlxuJworICAgICAgICAgICAgICAgICc8UzpsaW1pdD4xPC9TOmxpbWl0PlxuJworICAgICAg
ICAgICAgICAgICc8UzpkaXNjb3Zlci1jaGFuZ2VkLXBhdGhzLz5cbicKKyAgICAgICAgICAgICAg
ICAnPC9TOmxvZy1yZXBvcnQ+XG4nLmZvcm1hdChyZXZpc2lvbj1yZXZpc2lvbiksCisgICAgICAg
ICkKKworICAgICAgICAjIElmIHdlIGRpZG4ndCBnZXQgYSB2YWxpZCBhbnN3ZXIgZnJvbSB0aGUg
cmVtb3RlLCBidXQgd2UgZm91bmQgYSBtYXRjaGluZyBjYW5kaWRhdGUsIHdlIHJldHVybiB0aGF0
LgorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgcmlza3kgYmVjYXVzZSB0aGVyZSBpcyBhIGNoYW5j
ZSB0aGUgYnJhbmNoIHdlIGhhdmUgY2FjaGVkIGlzIG5vdCB0aGUgY2Fub25pY2FsIGJyYW5jaAor
ICAgICAgICAjIGZvciBhIHJldmlzaW9uLCBidXQgdGhpcyBpcyBwcmV0dHkgdW5saWtlbHkgYmVj
YXVzZSBpdCB3b3VsZCByZXF1aXJlIHRoZSBuICsgMSBsZXZlbCBicmFuY2ggdG8gYmUgY2FjaGVk
CisgICAgICAgICMgYnV0IG5vdCB0aGUgbiBsZXZlbCBicmFuY2guCisgICAgICAgIGlmIHJlc3Bv
bnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9u
KCJGYWlsZWQgdG8gcmV0cmlldmUgYnJhbmNoIGZvciAne30nIi5mb3JtYXQocmV2aXNpb24pKQor
CisgICAgICAgIHBhcnRpYWwgPSBOb25lCisgICAgICAgIGl0ZW1zID0geG1sdG9kaWN0LnBhcnNl
KHJlc3BvbnNlLnRleHQpWydTOmxvZy1yZXBvcnQnXVsnUzpsb2ctaXRlbSddCisgICAgICAgIGZv
ciBncm91cCBpbiAoaXRlbXMuZ2V0KCdTOm1vZGlmaWVkLXBhdGgnLCBbXSksIGl0ZW1zLmdldCgn
UzphZGRlZC1wYXRoJywgW10pKToKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGdyb3VwIGlmIGlz
aW5zdGFuY2UoZ3JvdXAsIGxpc3QpIGVsc2UgW2dyb3VwXToKKyAgICAgICAgICAgICAgICBpZiBu
b3QgcGFydGlhbDoKKyAgICAgICAgICAgICAgICAgICAgcGFydGlhbCA9IGl0ZW1bJyN0ZXh0J10K
KyAgICAgICAgICAgICAgICB3aGlsZSBub3QgaXRlbVsnI3RleHQnXS5zdGFydHN3aXRoKHBhcnRp
YWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsID0gcGFydGlhbFs6LTFdCisKKyAgICAg
ICAgY2FuZGlkYXRlID0gcGFydGlhbC5zcGxpdCgnLycpWzIgaWYgcGFydGlhbC5zdGFydHN3aXRo
KCcvYnJhbmNoZXMnKSBlbHNlIDFdCisKKyAgICAgICAgIyBUYWdzIGFyZSBhIHVuaXF1ZSBjYXNl
IGZvciBTVk4sIGJlY2F1c2UgdGhleSdyZSB0cmVhdGVkIGFzIGJyYW5jaGVzIGluIG5hdGl2ZSBT
Vk4KKyAgICAgICAgaWYgY2FuZGlkYXRlID09ICd0YWdzJzoKKyAgICAgICAgICAgIHJldHVybiBw
YXJ0aWFsWzE6XS5yc3RyaXAoJy8nKQorICAgICAgICByZXR1cm4gY2FuZGlkYXRlCisKKyAgICBk
ZWYgX2NvbW1pdF9jb3VudChzZWxmLCByZXZpc2lvbj1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAg
ICAgIGJyYW5jaCA9IGJyYW5jaCBvciBzZWxmLmRlZmF1bHRfYnJhbmNoCisKKyAgICAgICAgaWYg
cmV2aXNpb246CisgICAgICAgICAgICBpZiByZXZpc2lvbiBub3QgaW4gc2VsZi5fbWV0YWRhdGFf
Y2FjaGVbYnJhbmNoXToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFp
bGVkIHRvIGZpbmQgJ3t9JyBvbiAne30nIi5mb3JtYXQocmV2aXNpb24sIGJyYW5jaCkpCisgICAg
ICAgICAgICByZXR1cm4gYmlzZWN0LmJpc2VjdF9sZWZ0KHNlbGYuX21ldGFkYXRhX2NhY2hlW2Jy
YW5jaF0sIGludChyZXZpc2lvbikpCisgICAgICAgIGlmIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRf
YnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9tZXRhZGF0YV9jYWNoZVticmFu
Y2hdKQorICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X2NvdW50KHJldmlzaW9uPXNlbGYuX21l
dGFkYXRhX2NhY2hlW2JyYW5jaF1bMF0sIGJyYW5jaD1zZWxmLmRlZmF1bHRfYnJhbmNoKQorCisg
ICAgZGVmIGNvbW1pdChzZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZpZXI9
Tm9uZSwgYnJhbmNoPU5vbmUsIHRhZz1Ob25lKToKKyAgICAgICAgaWYgaGFzaDoKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NWTiBkb2VzIG5vdCBzdXBwb3J0IEdpdCBoYXNoZXMnKQor
CisgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQgPSBOb25lCisgICAgICAgIGlmIGlkZW50aWZp
ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggcmV2aXNpb24gYW5kIGlkZW50
aWZpZXInKQorICAgICAgICAgICAgaWYgdGFnOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCB0YWcgYW5kIGlkZW50aWZpZXInKQorCisgICAgICAg
ICAgICBwYXJzZWRfYnJhbmNoX3BvaW50LCBpZGVudGlmaWVyLCBwYXJzZWRfYnJhbmNoID0gQ29t
bWl0Ll9wYXJzZV9pZGVudGlmaWVyKGlkZW50aWZpZXIsIGRvX2Fzc2VydD1UcnVlKQorICAgICAg
ICAgICAgaWYgcGFyc2VkX2JyYW5jaDoKKyAgICAgICAgICAgICAgICBpZiBicmFuY2ggYW5kIGJy
YW5jaCAhPSBwYXJzZWRfYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGxlciBwYXNzZWQgYm90aCAnYnJhbmNo
JyBhbmQgJ2lkZW50aWZpZXInLCBidXQgc3BlY2lmaWVkIGRpZmZlcmVudCBicmFuY2hlcyAoe30g
YW5kIHt9KSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgcGFy
c2VkX2JyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAg
ICAgICkKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBwYXJzZWRfYnJhbmNoCisgICAgICAgICAg
ICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorCisgICAgICAgICAgICBp
ZiBicmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBhbmQgcGFyc2VkX2JyYW5jaF9wb2ludDoK
KyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignQ2Fubm90IHByb3ZpZGUgYSBi
cmFuY2ggcG9pbnQgZm9yIGEgY29tbWl0IG9uIHRoZSBkZWZhdWx0IGJyYW5jaCcpCisKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9tZXRhZGF0YV9jYWNoZS5nZXQoYnJhbmNoLCBbXSkgb3IgaWRl
bnRpZmllciA+PSBsZW4oc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KGJyYW5jaCwgW10pKToKKyAg
ICAgICAgICAgICAgICBpZiBicmFuY2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fY2FjaGVfcmV2aXNpb25zKGJyYW5jaD1zZWxmLmRlZmF1bHRfYnJh
bmNoKQorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9YnJhbmNo
KQorICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+IGxlbihzZWxmLl9tZXRhZGF0YV9jYWNoZS5n
ZXQoYnJhbmNoLCBbXSkpOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdJ
ZGVudGlmaWVyIHt9IGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCBpbiB0
aGUgY3VycmVudCBjaGVja291dCcuZm9ybWF0KGlkZW50aWZpZXIpKQorCisgICAgICAgICAgICBp
ZiBpZGVudGlmaWVyIDw9IDA6CisgICAgICAgICAgICAgICAgaWYgYnJhbmNoID09IHNlbGYuZGVm
YXVsdF9icmFuY2g6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdJ
bGxlZ2FsIG5lZ2F0aXZlIGlkZW50aWZpZXIgb24gdGhlIGRlZmF1bHQgYnJhbmNoJykKKyAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyID0gc2VsZi5fY29tbWl0X2NvdW50KGJyYW5jaD1icmFuY2gp
ICsgaWRlbnRpZmllcgorICAgICAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgPCAwOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignSWRlbnRpZmllciBkb2VzIG5vdCBl
eGlzdCBvbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCcpCisKKyAgICAgICAgICAgICAgICBicmFuY2gg
PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisKKyAgICAgICAgICAgIHJldmlzaW9uID0gc2VsZi5fbWV0
YWRhdGFfY2FjaGVbYnJhbmNoXVtpZGVudGlmaWVyXQorICAgICAgICAgICAgaW5mbyA9IHNlbGYu
aW5mbyhjYWNoZWQ9VHJ1ZSwgYnJhbmNoPWJyYW5jaCwgcmV2aXNpb249cmV2aXNpb24pCisgICAg
ICAgICAgICBicmFuY2ggPSBzZWxmLl9icmFuY2hfZm9yKHJldmlzaW9uKQorICAgICAgICAgICAg
aWYgbm90IHNlbGYuX21ldGFkYXRhX2NhY2hlLmdldChicmFuY2gsIFtdKSBvciBpZGVudGlmaWVy
ID49IGxlbihzZWxmLl9tZXRhZGF0YV9jYWNoZS5nZXQoYnJhbmNoLCBbXSkpOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9YnJhbmNoKQorCisgICAgICAgIGVs
aWYgcmV2aXNpb246CisgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIGJyYW5jaCBhbmQgcmV2aXNpb24nKQor
ICAgICAgICAgICAgaWYgdGFnOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nh
bm5vdCBkZWZpbmUgYm90aCB0YWcgYW5kIHJldmlzaW9uJykKKyAgICAgICAgICAgIHJldmlzaW9u
ID0gQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbihyZXZpc2lvbiwgZG9fYXNzZXJ0PVRydWUpCisgICAg
ICAgICAgICBicmFuY2ggPSBzZWxmLl9icmFuY2hfZm9yKHJldmlzaW9uKQorICAgICAgICAgICAg
aW5mbyA9IHNlbGYuaW5mbyhjYWNoZWQ9VHJ1ZSwgYnJhbmNoPWJyYW5jaCwgcmV2aXNpb249cmV2
aXNpb24pCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGJyYW5jaCBhbmQgdGFnOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCBicmFu
Y2ggYW5kIHRhZycpCisKKyAgICAgICAgICAgIGJyYW5jaCA9IE5vbmUgaWYgdGFnIGVsc2UgYnJh
bmNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gKKyAgICAgICAgICAgIGluZm8gPSBzZWxmLmluZm8o
dGFnPXRhZykgaWYgdGFnIGVsc2Ugc2VsZi5pbmZvKGJyYW5jaD1icmFuY2gpCisgICAgICAgICAg
ICBpZiBub3QgaW5mbzoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiJ3t9
JyBpcyBub3QgYSByZWNvZ25pemVkIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHRh
ZyBvciBicmFuY2gsCisgICAgICAgICAgICAgICAgICAgICd0YWcnIGlmIHRhZyBlbHNlICdicmFu
Y2gnLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICByZXZpc2lvbiA9IGludChpbmZv
WydMYXN0IENoYW5nZWQgUmV2J10pCisgICAgICAgICAgICBpZiBicmFuY2ggIT0gc2VsZi5kZWZh
dWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBzZWxmLl9icmFuY2hfZm9yKHJl
dmlzaW9uKQorCisgICAgICAgIGRhdGUgPSBkYXRldGltZS5zdHJwdGltZShpbmZvWydMYXN0IENo
YW5nZWQgRGF0ZSddLCAnJVktJW0tJWQgJUg6JU06JVMnKQorCisgICAgICAgIGlmIG5vdCBpZGVu
dGlmaWVyOgorICAgICAgICAgICAgaWYgYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2ggYW5k
IHJldmlzaW9uID4gc2VsZi5fbWV0YWRhdGFfY2FjaGUuZ2V0KHNlbGYuZGVmYXVsdF9icmFuY2gs
IFswXSlbLTFdOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX3JldmlzaW9ucyhicmFuY2g9
c2VsZi5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgIGlmIHJldmlzaW9uIG5vdCBpbiBzZWxm
Ll9tZXRhZGF0YV9jYWNoZS5nZXQoYnJhbmNoLCBbXSk6CisgICAgICAgICAgICAgICAgc2VsZi5f
Y2FjaGVfcmV2aXNpb25zKGJyYW5jaD1icmFuY2gpCisgICAgICAgICAgICBpZGVudGlmaWVyID0g
c2VsZi5fY29tbWl0X2NvdW50KHJldmlzaW9uPXJldmlzaW9uLCBicmFuY2g9YnJhbmNoKQorCisg
ICAgICAgIGJyYW5jaF9wb2ludCA9IE5vbmUgaWYgYnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFu
Y2ggZWxzZSBzZWxmLl9jb21taXRfY291bnQoYnJhbmNoPWJyYW5jaCkKKyAgICAgICAgaWYgYnJh
bmNoX3BvaW50IGFuZCBwYXJzZWRfYnJhbmNoX3BvaW50IGFuZCBicmFuY2hfcG9pbnQgIT0gcGFy
c2VkX2JyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVk
ICdicmFuY2hfcG9pbnQnIGRvZXMgbm90IG1hdGNoIGJyYW5jaCBwb2ludCBvZiBzcGVjaWZpZWQg
YnJhbmNoIikKKworICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLnJlcXVlc3QoCisgICAgICAg
ICAgICBtZXRob2Q9J1JFUE9SVCcsCisgICAgICAgICAgICB1cmw9J3t9IXN2bi9ydnIve30nLmZv
cm1hdChzZWxmLnVybCwgcmV2aXNpb24pLAorICAgICAgICAgICAgaGVhZGVycz17CisgICAgICAg
ICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsCisgICAgICAgICAgICAgICAgJ0Fj
Y2VwdC1FbmNvZGluZyc6ICdnemlwJywKKyAgICAgICAgICAgICAgICAnREVQVEgnOiAnMScsCisg
ICAgICAgICAgICB9LCBkYXRhPSc8Uzpsb2ctcmVwb3J0IHhtbG5zOlM9InN2bjoiPlxuJworICAg
ICAgICAgICAgICAgICAgICAnPFM6c3RhcnQtcmV2aXNpb24+e3JldmlzaW9ufTwvUzpzdGFydC1y
ZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxTOmVuZC1yZXZpc2lvbj57cmV2aXNp
b259PC9TOmVuZC1yZXZpc2lvbj5cbicKKyAgICAgICAgICAgICAgICAgICAgJzxTOmxpbWl0PjE8
L1M6bGltaXQ+XG4nCisgICAgICAgICAgICAgICAgICAgICc8L1M6bG9nLXJlcG9ydD5cbicuZm9y
bWF0KHJldmlzaW9uPXJldmlzaW9uKSwKKyAgICAgICAgKQorCisgICAgICAgIGlmIHJlc3BvbnNl
LnN0YXR1c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgIHJlc3BvbnNlID0geG1sdG9kaWN0LnBh
cnNlKHJlc3BvbnNlLnRleHQpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmdldCgn
Uzpsb2ctcmVwb3J0Jywge30pLmdldCgnUzpsb2ctaXRlbScpCisKKyAgICAgICAgICAgIG5hbWUg
PSByZXNwb25zZS5nZXQoJ0Q6Y3JlYXRvci1kaXNwbGF5bmFtZScpCisgICAgICAgICAgICBtZXNz
YWdlID0gcmVzcG9uc2UuZ2V0KCdEOmNvbW1lbnQnLCBOb25lKQorICAgICAgICAgICAgaWYgbm90
IG5hbWU6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0ZhaWxlZCB0byBm
aW5kIGNyZWF0b3IgbmFtZScpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9n
KCdGYWlsZWQgdG8gY29ubmVjdCB0byByZW1vdGUsIGNhbm5vdCBjb21wdXRlIGNvbW1pdCBtZXNz
YWdlJykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBOb25lCisgICAgICAgICAgICBuYW1lID0gaW5m
b1snTGFzdCBDaGFuZ2VkIEF1dGhvciddCisKKyAgICAgICAgYXV0aG9yID0gQ29udHJpYnV0b3Iu
YnlfZW1haWwuZ2V0KAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIENvbnRyaWJ1dG9y
LmJ5X25hbWUuZ2V0KAorICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgQ29u
dHJpYnV0b3IobmFtZT1uYW1lLCBlbWFpbHM9W25hbWVdIGlmICdAJyBpbiBuYW1lIGVsc2UgW10p
LAorICAgICAgICAgICAgKSwKKyAgICAgICAgKQorCisgICAgICAgIHJldHVybiBDb21taXQoCisg
ICAgICAgICAgICByZXZpc2lvbj1pbnQocmV2aXNpb24pLAorICAgICAgICAgICAgYnJhbmNoPWJy
YW5jaCwKKyAgICAgICAgICAgIGlkZW50aWZpZXI9aWRlbnRpZmllciwKKyAgICAgICAgICAgIGJy
YW5jaF9wb2ludD1icmFuY2hfcG9pbnQsCisgICAgICAgICAgICB0aW1lc3RhbXA9aW50KGNhbGVu
ZGFyLnRpbWVnbShkYXRlLnRpbWV0dXBsZSgpKSksCisgICAgICAgICAgICBhdXRob3I9YXV0aG9y
LAorICAgICAgICAgICAgbWVzc2FnZT1tZXNzYWdlLAorICAgICAgICApCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weQkocmV2aXNpb24gMjcwMDMxKQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQCBpbXBvcnQgdW5pdHRl
c3QKIAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gd2Via2l0Y29yZXB5IGlt
cG9ydCBPdXRwdXRDYXB0dXJlCi1mcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcywgcmVtb3RlCiAKIAotY2xhc3Mg
VGVzdFN2bih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUZXN0TG9jYWxTdm4odW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKIAogICAgIGRlZiB0ZXN0
X2RldGVjdGlvbihzZWxmKToKQEAgLTIxNywzICsyMTcsODcgQEAgY2xhc3MgVGVzdFN2bih1bml0
dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwgcmVwb3Np
dG9yeS5jaGVja291dCgndGFnLTEnKS5yZXZpc2lvbikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoOSwgcmVwb3NpdG9yeS5jb21taXQoKS5yZXZpc2lvbikKKworCitjbGFzcyBUZXN0UmVt
b3RlU3ZuKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICByZW1vdGUgPSAnaHR0cHM6Ly9zdm4ud2Vi
a2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdCcKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcignaHR0
cHM6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdCcpLCBUcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5Tdm4uaXNfd2Vic2VydmVyKCdodHRwOi8vc3ZuLndlYmtp
dC5vcmcvcmVwb3NpdG9yeS93ZWJraXQnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcignaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC93ZWJr
aXQnKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9icmFuY2hlcyhzZWxmKToKKyAgICAgICAgd2l0
aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgICAgIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmJyYW5jaGVzLAorICAgICAgICAg
ICAgICAgIFsndHJ1bmsnLCAnYnJhbmNoLWEnLCAnYnJhbmNoLWInXSwKKyAgICAgICAgICAgICkK
KworICAgIGRlZiB0ZXN0X3RhZ3Moc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2
bigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZW1v
dGUuU3ZuKHNlbGYucmVtb3RlKS50YWdzLAorICAgICAgICAgICAgICAgIFsndGFnLTEnLCAndGFn
LTInXSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NjbV90eXBlKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydFRydWUocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuaXNfc3ZuKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmlzX2dpdCkKKwor
ICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLlN2bigp
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoeworICAgICAgICAgICAgICAgICdM
YXN0IENoYW5nZWQgQXV0aG9yJzogJ2piZWRhcmRAYXBwbGUuY29tJywKKyAgICAgICAgICAgICAg
ICAnTGFzdCBDaGFuZ2VkIERhdGUnOiAnMjAyMC0xMC0wMiAxMTo1ODoyMCcsCisgICAgICAgICAg
ICAgICAgJ0xhc3QgQ2hhbmdlZCBSZXYnOiAnNicsCisgICAgICAgICAgICAgICAgJ1JldmlzaW9u
JzogMTAsCisgICAgICAgICAgICB9LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5pbmZvKCkpCisK
KyAgICBkZWYgdGVzdF9jb21taXRfcmV2aXNpb24oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3Mu
cmVtb3RlLlN2bigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMUB0cnVuaycsIHN0
cihyZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQocmV2aXNpb249MSkpKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnMkB0cnVuaycsIHN0cihyZW1vdGUuU3ZuKHNlbGYucmVtb3Rl
KS5jb21taXQocmV2aXNpb249MikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4x
QGJyYW5jaC1hJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj0z
KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCczQHRydW5rJywgc3RyKHJlbW90ZS5T
dm4oc2VsZi5yZW1vdGUpLmNvbW1pdChyZXZpc2lvbj00KSkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCcyLjJAYnJhbmNoLWInLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29t
bWl0KHJldmlzaW9uPTUpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAdHJ1bmsn
LCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHJldmlzaW9uPTYpKSkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYScsIHN0cihyZW1vdGUuU3ZuKHNl
bGYucmVtb3RlKS5jb21taXQocmV2aXNpb249NykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnMi4zQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChy
ZXZpc2lvbj04KSkpCisKKyAgICAgICAgICAgICMgT3V0LW9mLWJvdW5kcyBjb21taXQKKyAgICAg
ICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocmVtb3RlLlN2bi5FeGNlcHRpb24pOgorICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVtb3RlLlN2bihzZWxmLnJlbW90
ZSkuY29tbWl0KHJldmlzaW9uPTExKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9mcm9tX2JyYW5j
aChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCc0QHRydW5rJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNv
bW1pdChicmFuY2g9J3RydW5rJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4y
QGJyYW5jaC1hJywgc3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2Jy
YW5jaC1hJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4zQGJyYW5jaC1iJywg
c3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1iJykpKQor
CisgICAgZGVmIHRlc3RfaWRlbnRpZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1v
dGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlbW90ZS5Tdm4oc2Vs
Zi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScxQHRydW5rJykucmV2aXNpb24pCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChp
ZGVudGlmaWVyPScyQHRydW5rJykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDMsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjFAYnJh
bmNoLWEnKS5yZXZpc2lvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgcmVtb3Rl
LlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzNAdHJ1bmsnKS5yZXZpc2lvbikK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSku
Y29tbWl0KGlkZW50aWZpZXI9JzIuMkBicmFuY2gtYicpLnJldmlzaW9uKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCg2LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRp
Zmllcj0nNEB0cnVuaycpLnJldmlzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3
LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1h
JykucmV2aXNpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIHJlbW90ZS5Tdm4o
c2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjNAYnJhbmNoLWInKS5yZXZpc2lvbikK
KworICAgIGRlZiB0ZXN0X25vbl9jYW5ub25pY2FsX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzJAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9
JzBAYnJhbmNoLWEnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxQHRydW5rJywg
c3RyKHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSctMUBicmFuY2gt
YScpKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkB0cnVuaycsIHN0cihyZW1v
dGUuU3ZuKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYicpKSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAdHJ1bmsnLCBzdHIocmVtb3RlLlN2bihzZWxm
LnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9Jy0xQGJyYW5jaC1iJykpKQorCisgICAgZGVmIHRl
c3RfdGFnKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwgcmVtb3RlLlN2bihzZWxmLnJlbW90ZSkuY29tbWl0KHRh
Zz0ndGFnLTEnKS5yZXZpc2lvbikKKworICAgIGRlZiB0ZXN0X3RhZ19wcmV2aW91cyhzZWxmKToK
KyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuU3ZuKCk6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDcsIHJlbW90ZS5Tdm4oc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjJA
dGFncy90YWctMScpLnJldmlzaW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415023</attachid>
            <date>2020-11-30 08:02:50 -0800</date>
            <delta_ts>2020-11-30 08:27:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218827-20201130100249.patch</filename>
            <type>text/plain</type>
            <size>1516</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDI0NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDIwLTExLTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIFN1YnZlcnNpb24gcmVw
b3NpdG9yeSAoRm9sbG93LXVwIGZpeCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxODgyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEzMDQ0ODU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
d2VyZSB0aW1lem9uZSBkZXBlbmRlbnQuCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weToKKyAgICAgICAgKFRl
c3RSZW1vdGVTdm4udGVzdF9pbmZvKToKKwogMjAyMC0xMS0zMCAgQWFrYXNoIEphaW4gIDxhYWth
c2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0b21hdGljYWxseSBkZWxldGUgb2xkIGRh
dGEgZnJvbSBld3MgYnVpbGRib3QgaW5zdGFuY2UKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3Qvc3ZuX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNzAyNDQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIGNsYXNzIFRlc3RSZW1vdGVTdm4odW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5Tdm4oKToKICAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHsKICAgICAgICAgICAgICAgICAnTGFzdCBDaGFuZ2Vk
IEF1dGhvcic6ICdqYmVkYXJkQGFwcGxlLmNvbScsCi0gICAgICAgICAgICAgICAgJ0xhc3QgQ2hh
bmdlZCBEYXRlJzogJzIwMjAtMTAtMDIgMTE6NTg6MjAnLAorICAgICAgICAgICAgICAgICdMYXN0
IENoYW5nZWQgRGF0ZSc6IGRhdGV0aW1lLmZyb210aW1lc3RhbXAoMTYwMTY2NTEwMCkuc3RyZnRp
bWUoJyVZLSVtLSVkICVIOiVNOiVTJyksCiAgICAgICAgICAgICAgICAgJ0xhc3QgQ2hhbmdlZCBS
ZXYnOiAnNicsCiAgICAgICAgICAgICAgICAgJ1JldmlzaW9uJzogMTAsCiAgICAgICAgICAgICB9
LCByZW1vdGUuU3ZuKHNlbGYucmVtb3RlKS5pbmZvKCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>