<?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>130159</bug_id>
          
          <creation_ts>2014-03-12 14:08:07 -0700</creation_ts>
          <short_desc>AX: Attached invalid grid should not be exposed as a grid.</short_desc>
          <delta_ts>2016-09-08 14:51:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Craig">jcraig</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>989832</commentid>
    <comment_count>0</comment_count>
      <attachid>226553</attachid>
    <who name="James Craig">jcraig</who>
    <bug_when>2014-03-12 14:08:07 -0700</bug_when>
    <thetext>Created attachment 226553
webarchive

AX: Attached invalid grid should not be exposed as a grid. It&apos;s a grid with gridcells but no rows. This should not be exposed as a grid. Because there are no rows, all of the child contents are inaccessible to VoiceOver. WebKit should correct the author validity error and just treat this like an ignored layout table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227843</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-09-08 14:51:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/28214720&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>226553</attachid>
            <date>2014-03-12 14:08:07 -0700</date>
            <delta_ts>2014-03-12 14:08:07 -0700</delta_ts>
            <desc>webarchive</desc>
            <filename>ImageReorderer.webarchive</filename>
            <type>application/x-webarchive</type>
            <size>641486</size>
            <attacher name="James Craig">jcraig</attacher>
            
              <data encoding="base64">YnBsaXN0MDDSAQIDlF8QD1dlYlN1YnJlc291cmNlc18QD1dlYk1haW5SZXNvdXJjZa8QHQQNEhcc
ISYrMDU6P0RJTlNYXWJnbHF2e4CEiIyQ1AUGBwgJCgsMXldlYlJlc291cmNlVVJMXxATV2ViUmVz
b3VyY2VSZXNwb25zZV8QD1dlYlJlc291cmNlRGF0YV8QE1dlYlJlc291cmNlTUlNRVR5cGVfEEto
dHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2Zzcy9jc3MvZnNz
LXJlc2V0LWdsb2JhbC5jc3NPEQQSYnBsaXN0MDDUAQIDBAUGYmNYJHZlcnNpb25YJG9iamVjdHNZ
JGFyY2hpdmVyVCR0b3ASAAGGoK8QHQcIIigpMBsxMkhJSktMTU5PUFFSU1RVVldYW1xdVSRudWxs
3QkKCwwNDg8QERITFBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNz
UiQ0UiQ5UiQwUiQ1UiQxgAcQCBAHgAiAAhAAgBqAHIAFgBuABhAB0yMQJCUmJ1dOUy5iYXNlW05T
LnJlbGF0aXZlgACABIADXxBLaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2Zy
YW1ld29yay9mc3MvY3NzL2Zzcy1yZXNldC1nbG9iYWwuY3Nz0iorLC1aJGNsYXNzbmFtZVgkY2xh
c3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALpir1hDI0zM0EDU+R1dOUy5rZXlzWk5T
Lm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVGgBGAEoATgBSAFYAWgBeA
GIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJh
bmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKVh0
ZXh0L2Nzc18QGiI0ODFiYzMtM2IxLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAy
MDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVieXRlc1M5NDVVY2xv
c2XSKitZWlxOU0RpY3Rpb25hcnmiWS8RA7FYdGV4dC9jc3PSKiteX18QEU5TSFRUUFVSTFJlc3Bv
bnNlo2BhL18QEU5TSFRUUFVSTFJlc3BvbnNlXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2
ZXLRZGVfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBXAF0AeAB7AH8AggCF
AIgAjACPAJYAmQCcAJ8AogClAKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9AMQAzADYANoA3ADeASwB
MQE8AUUBSwFOAVQBXQFmAWgBbwF3AYIBiwGNAY8BkQGTAZUBlwGZAZsBpAGmAagBqgGsAa4BsAGy
AbQBtgG9AcoBzwHdAeIB8AH/AgoCIwIsAkkCaQKJAo8CkwKZAp4CqwKuArECugK/AtMC1wLrAvkD
CwMOAyQAAAAAAAACAQAAAAAAAABmAAAAAAAAAAAAAAAAAAADJk8RA7EvKgpCYXNlZCBvbiBZVUkg
cmVzZXQKCkNvcHlyaWdodCAoYykgMjAwOCwgWWFob28hIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KQ29kZSBsaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2U6Cmh0dHA6Ly9kZXZlbG9wZXIu
eWFob28ubmV0L3l1aS9saWNlbnNlLnR4dAp2ZXJzaW9uOiAyLjUuMgoqLwoKaHRtbHtjb2xvcjoj
MDAwO30KYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNv
ZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRk
e21hcmdpbjowO3BhZGRpbmc6MDt9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3Jk
ZXItc3BhY2luZzowO30KZmllbGRzZXQsaW1ne2JvcmRlcjowO30KYWRkcmVzcyxjYXB0aW9uLGNp
dGUsY29kZSxkZm4sZW0sc3Ryb25nLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdo
dDpub3JtYWw7fQpsaXtsaXN0LXN0eWxlOm5vbmU7fQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVm
dDt9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbDt9
CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJzt9CmFiYnIsYWNyb255bSB7Ym9yZGVyOjA7Zm9u
dC12YXJpYW50Om5vcm1hbDt9Ci8qIHRvIHByZXNlcnZlIGxpbmUtaGVpZ2h0IGFuZCBzZWxlY3Rv
ciBhcHBlYXJhbmNlICovCnN1cCB7dmVydGljYWwtYWxpZ246dGV4dC10b3A7fQpzdWIge3ZlcnRp
Y2FsLWFsaWduOnRleHQtYm90dG9tO30KCi8qYmVjYXVzZSBsZWdlbmQgZG9lc24ndCBpbmhlcml0
IGluIElFICovCmxlZ2VuZHtjb2xvcjojMDAwO30KCi8qIGJ1dHRvbiBmb250IGFuZCBzaXplIGlu
aGVyaXQgZnJvbSBpdHMgcGFyZW50ICovCmJ1dHRvbiB7Zm9udC1mYW1pbHk6IGluaGVyaXQ7Zm9u
dC1zaXplOiBpbmhlcml0O31YdGV4dC9jc3PUBQYHCA4PEBFfEEpodHRwOi8vZmx1aWRwcm9qZWN0
Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2Zzcy9jc3MvZnNzLWJhc2UtZ2xvYmFsLmNzc08R
BBJicGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYag
rxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBka
GxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAI
EAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEEpo
dHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2Zzcy9jc3MvZnNz
LWJhc2UtZ2xvYmFsLmNzc9IqKywtWiRjbGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiLi9VTlNVUkxY
TlNPYmplY3QjQbjRAC6aHVQQyNMzNBA1PkdXTlMua2V5c1pOUy5vYmplY3RzqDY3ODk6Ozw9gAmA
CoALgAyADYAOgA+AEKg/QEFCQ0RFRoARgBKAE4AUgBWAFoAXgBiAGVZTZXJ2ZXJcQ29udGVudC1U
eXBlVEV0YWddTGFzdC1Nb2RpZmllZFREYXRlXUFjY2VwdC1SYW5nZXNeQ29udGVudC1MZW5ndGha
Q29ubmVjdGlvbl8QFkFwYWNoZS8yLjIuMTUgKENlbnRPUylYdGV4dC9jc3NfEBoiNDgxYmJkLWJh
OS00YWYzM2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAx
MiBNYXIgMjAxNCAyMDo1MDo1NCBHTVRVYnl0ZXNUMjk4NVVjbG9zZdIqK1laXE5TRGljdGlvbmFy
eaJZLxELqVh0ZXh0L2Nzc9IqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJM
UmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNl
UmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUA
pwCpAKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BKwEwATsBRAFKAU0BUwFcAWUBZwFu
AXYBgQGKAYwBjgGQAZIBlAGWAZgBmgGjAaUBpwGpAasBrQGvAbEBswG1AbwByQHOAdwB4QHvAf4C
CQIiAisCSAJoAogCjgKTApkCngKrAq4CsQK6Ar8C0wLXAusC+QMLAw4DJAAAAAAAAAIBAAAAAAAA
AGYAAAAAAAAAAAAAAAAAAAMmTxELqS8qCkJhc2VkIG9uIFlVSSBmb250cyBhbmQgYmFzZQoKQ29w
eXJpZ2h0IChjKSAyMDA4LCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpDb2RlIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0QgTGljZW5zZToKaHR0cDovL2RldmVsb3Blci55YWhvby5uZXQv
eXVpL2xpY2Vuc2UudHh0CnZlcnNpb246IDIuNS4yCiovCgovKiBmcm9tIGZvbnRzLmNzcywgcGFy
dCBvZiBZVUkncyBDU1MgRm91bmRhdGlvbiAqLwoKLyoqCiAqIFBlcmNlbnRzIGNvdWxkIHdvcmsg
Zm9yIElFLCBidXQgZm9yIGJhY2tDb21wYXQgcHVycG9zZXMsIHdlIGFyZSB1c2luZyBrZXl3b3Jk
cy4KICogeC1zbWFsbCBpcyBmb3IgSUU2LzcgcXVpcmtzIG1vZGUuCiAqLwpib2R5IHt9CnRhYmxl
IHtmb250LXNpemU6aW5oZXJpdDtmb250OjEwMCU7fQovKioKICogQnVtcCB1cCBJRSB0byBnZXQg
dG8gMTNweCBlcXVpdmFsZW50CiAqLwpwcmUsY29kZSxrYmQsc2FtcCx0dCB7Zm9udC1mYW1pbHk6
bW9ub3NwYWNlOypmb250LXNpemU6MTA4JTtsaW5lLWhlaWdodDoxMDAlO30KCi8qIGZyb20gYmFz
ZS5jc3MsIHBhcnQgb2YgWVVJJ3MgQ1NTIEZvdW5kYXRpb24gKi8KaDEgewoJLyoxOHB4IHZpYSBZ
VUkgRm9udHMgQ1NTIGZvdW5kYXRpb24qLwoJZm9udC1zaXplOjEzOC41JTsgIAp9CmgyIHsKCS8q
MTZweCB2aWEgWVVJIEZvbnRzIENTUyBmb3VuZGF0aW9uKi8KCWZvbnQtc2l6ZToxMjMuMSU7IAp9
CmgzIHsKCS8qMTRweCB2aWEgWVVJIEZvbnRzIENTUyBmb3VuZGF0aW9uKi8KCWZvbnQtc2l6ZTox
MDglOyAgCn0KaDEsaDIsaDMgewoJLyogdG9wICYgYm90dG9tIG1hcmdpbiBiYXNlZCBvbiBmb250
IHNpemUgKi8KCW1hcmdpbjoxZW0gMDsKfQpoMSxoMixoMyxoNCxoNSxoNixzdHJvbmcgewoJLypi
cmluZ2luZyBib2xkbmVzcyBiYWNrIHRvIGhlYWRlcnMgYW5kIHRoZSBzdHJvbmcgZWxlbWVudCov
Cglmb250LXdlaWdodDpib2xkOyAKfQphYmJyLGFjcm9ueW0gewoJLyppbmRpY2F0aW5nIHRvIHVz
ZXJzIHRoYXQgbW9yZSBpbmZvIGlzIGF2YWlsYWJsZSAqLwoJYm9yZGVyLWJvdHRvbToxcHggZG90
dGVkICMwMDA7CgljdXJzb3I6aGVscDsKfSAKZW0gewoJLypicmluZ2luZyBpdGFsaWNzIGJhY2sg
dG8gdGhlIGVtIGVsZW1lbnQqLwoJZm9udC1zdHlsZTppdGFsaWM7Cn0KYmxvY2txdW90ZSx1bCxv
bCxkbCB7CgkvKmdpdmluZyBibG9ja3F1b3RlcyBhbmQgbGlzdHMgcm9vbSB0byBicmVhdGgqLwoJ
bWFyZ2luOjFlbTsKfQpvbCx1bCxkbCB7CgkvKmJyaW5naW5nIGxpc3RzIG9uIHRvIHRoZSBwYWdl
IHdpdGggYnJlYXRoaW5nIHJvb20gKi8KCW1hcmdpbi1sZWZ0OjJlbTsKfQpvbCBsaSB7CgkvKmdp
dmluZyBPTCdzIExJcyBnZW5lcmF0ZWQgbnVtYmVycyovCglsaXN0LXN0eWxlOiBkZWNpbWFsIG91
dHNpZGU7CQp9CnVsIGxpIHsKCS8qZ2l2aW5nIFVMJ3MgTElzIGdlbmVyYXRlZCBkaXNjIG1hcmtl
cnMqLwoJbGlzdC1zdHlsZTogZGlzYyBvdXRzaWRlOwp9CmRsIGRkIHsKCS8qZ2l2aW5nIFVMJ3Mg
TElzIGdlbmVyYXRlZCBudW1iZXJzKi8KCW1hcmdpbi1sZWZ0OjFlbTsKfQp0aCx0ZCB7CgkvKmJv
cmRlcnMgYW5kIHBhZGRpbmcgdG8gbWFrZSB0aGUgdGFibGUgcmVhZGFibGUqLwoJYm9yZGVyOjFw
eCBzb2xpZCAjMDAwOwoJcGFkZGluZzouNWVtOwp9CnRoIHsKCS8qZGlzdGluZ3Vpc2hpbmcgdGFi
bGUgaGVhZGVycyBmcm9tIGRhdGEgY2VsbHMqLwoJZm9udC13ZWlnaHQ6Ym9sZDsKCXRleHQtYWxp
Z246Y2VudGVyOwp9CmNhcHRpb24gewoJLypjb29yZGluYXRlZCBtYXJnaW4gdG8gbWF0Y2ggY2Vs
bCdzIHBhZGRpbmcqLwoJbWFyZ2luLWJvdHRvbTouNWVtOwoJLypjZW50ZXJlZCBzbyBpdCBkb2Vz
bid0IGJsZW5kIGluIHRvIG90aGVyIGNvbnRlbnQqLwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KcCxm
aWVsZHNldCx0YWJsZSxwcmUgewoJLypzbyB0aGluZ3MgZG9uJ3QgcnVuIGludG8gZWFjaCBvdGhl
ciovCgltYXJnaW4tYm90dG9tOjFlbTsKfQovKiBzZXR0aW5nIGEgY29uc2lzdGVudCB3aWR0aCwg
MTYwcHg7IAogICBjb250cm9sIG9mIHR5cGU9ZmlsZSBzdGlsbCBub3QgcG9zc2libGUgKi8KaW5w
dXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPXBhc3N3b3JkXSx0ZXh0YXJlYXt3aWR0aDoxMi4yNWVt
Oyp3aWR0aDoxMS45ZW07fQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJp
dDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O30KCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwovKiBQcmV2ZW50IHVuZWNlc3Nhcnkgc2Nyb2xsYmFycyBpbiBJRSAq
LwovKiBQdXQgZm9udCBkYXRhIG9uIHRoZSBIVE1MIGVsZW1lbnQgdG8gYWxsb3cgb3ZlcnJpZGVz
IG9uIHRoZSBib2R5ICovCi8qIElFNiBjYW50IHpvb20gdGV4dCBwcm9wZXJseSwgc28gdGV4dCBz
aXplIHJlc2V0IGlzIGEgcm91Z2ggYXBwcm94aW1hdGlvbiAqLwpodG1sIHtvdmVyZmxvdzphdXRv
OyBmb250OjEzcHgvMS4yMzEgYXJpYWwsaGVsdmV0aWNhLGNsZWFuLHNhbnMtc2VyaWY7ICpmb250
LXNpemU6c21hbGw7fQoKLyp0byBlbmFibGUgcmVzaXppbmcgZm9yIElFKi8KaW5wdXQsdGV4dGFy
ZWEsc2VsZWN0ewogICAgKmZvbnQtc2l6ZToxMDAlOwogICAgKmZvbnQtZmFtaWx5OnNhbnMtc2Vy
aWY7Cn0KCi8qIElFIHJlbmRlcmluZyBmaXggZm9yIGV4dHJhIHBhZGRpbmcgb24gYnV0dG9ucy4g
UGFkZGluZyBjYW4gbm93IGJlIHNldCBzYWZlbHkgKi8KaW5wdXQgewogICAgKm92ZXJmbG93OnZp
c2libGU7ICpwYWRkaW5nOjAgMWVtOwp9CgovKiBjdXN0b20gZGVmYXVsdCBmb2N1cyBpbmRpY2F0
b3IgLSB0aGVtZSBvdmVyd3JpdGVzIHRoaXMgKi8KLmZsLWZvY3VzOmZvY3VzLAouZmwtZm9jdXMg
OmZvY3VzeyAgICAKICAgb3V0bGluZTogMnB4IHNvbGlkIGJsYWNrOwp9Clh0ZXh0L2Nzc9QFBgcI
ExQVFl8QRWh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9mcmFtZXdvcmsvZnNz
L2Nzcy9mc3MtbGF5b3V0LmNzc08RBA9icGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0
c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hbXF1VJG51
bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xh
c3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYnV05TLmJhc2Vb
TlMucmVsYXRpdmWAAIAEgANfEEVodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQv
ZnJhbWV3b3JrL2Zzcy9jc3MvZnNzLWxheW91dC5jc3PSKissLVokY2xhc3NuYW1lWCRjbGFzc2Vz
VU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAumqDsEMjTMzQQNT5HV05TLmtleXNaTlMub2Jq
ZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaAF4AYgBlW
U2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQtUmFuZ2Vz
XkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1MpWHRleHQv
Y3NzXxAbIjQ4MWJiZS0zZWVhLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDox
NjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVieXRlc1UxNjEwNlVjbG9z
ZdIqK1laXE5TRGljdGlvbmFyeaJZLxE+6lh0ZXh0L2Nzc9IqK15fXxARTlNIVFRQVVJMUmVzcG9u
c2WjYGEvXxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZl
ctFkZV8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUA
iACMAI8AlgCZAJwAnwCiAKUApwCpAKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BJgEr
ATYBPwFFAUgBTgFXAWABYgFpAXEBfAGFAYcBiQGLAY0BjwGRAZMBlQGeAaABogGkAaYBqAGqAawB
rgGwAbcBxAHJAdcB3AHqAfkCBAIdAiYCRAJkAoQCigKQApYCmwKoAqsCrgK3ArwC0ALUAugC9gMI
AwsDIQAAAAAAAAIBAAAAAAAAAGYAAAAAAAAAAAAAAAAAAAMjTxE+6i8qCkdlbmVyaWMgY29udGFp
bmVycyBmb3IgY29sdW1ucyBhbmQgbGF5b3V0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKi8KCi8qIENvbnRhaW5lciBVdGlsaXRpZXMqLwouZmwtZml4IHtv
dmVyZmxvdzogYXV0bzsgem9vbToxO30KCi8qIAoqIFRoZSBNaWNybyBDbGVhcmZpeCBzb2x1dGlv
biBmcm9tIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLwoq
IExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwoKLyogRm9yIG1vZGVybiBicm93c2Vy
cyAqLwouZmwtY2xlYXJmaXg6YmVmb3JlLCAuZmwtY2xlYXJmaXg6YWZ0ZXIge2NvbnRlbnQ6IiI7
IGRpc3BsYXk6dGFibGU7fQouZmwtY2xlYXJmaXg6YWZ0ZXIge2NsZWFyOmJvdGg7fQoKLyogRm9y
IElFIDYvNyAodHJpZ2dlciBoYXNMYXlvdXQpICovCi5mbC1jbGVhcmZpeCB7em9vbToxO30KCgou
ZmwtcHVzaCB7Y2xlYXI6Ym90aDt9CgovKiBDb250YWluZXIgYWxpZ25tZW50ICovCiAvKiBJRSA2
IG5lZWRzIGlubGluZSBkaXNwbGF5IHRvIHByZXZlbnQgZG91YmxlIG1hcmdpbiBidWcgKG90aGVy
IGJyb3dzZXJzIGlnbm9yZSBpdCkgKi8KLmZsLWZvcmNlLXJpZ2h0IHtmbG9hdDpyaWdodDsgZGlz
cGxheTppbmxpbmU7fQouZmwtZm9yY2UtbGVmdCB7ZmxvYXQ6bGVmdDsgZGlzcGxheTppbmxpbmU7
fQouZmwtY2VudGVyZWQge21hcmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyBkaXNw
bGF5OmJsb2NrO30KCi8qIEdlbmVyaWMgY29udGFpbmVyLCBwcm94eSBmb3Igb3RoZXIgY29udGFp
bmVyIGVmZmVjdHMgKi8KLmZsLWNvbnRhaW5lciB7fQoKLyogRml4ZWQgd2lkdGggY29udGFpbmVy
cyAqLwouZmwtY29udGFpbmVyLTUwIHt3aWR0aDogNTBweDt9Ci5mbC1jb250YWluZXItMTAwIHt3
aWR0aDogMTAwcHg7fQouZmwtY29udGFpbmVyLTE1MCB7d2lkdGg6IDE1MHB4O30KLmZsLWNvbnRh
aW5lci0yMDAge3dpZHRoOiAyMDBweDt9Ci5mbC1jb250YWluZXItMjUwIHt3aWR0aDogMjUwcHg7
fQouZmwtY29udGFpbmVyLTMwMCB7d2lkdGg6IDMwMHB4O30KLmZsLWNvbnRhaW5lci0zNTAge3dp
ZHRoOiAzNTBweDt9Ci5mbC1jb250YWluZXItNDAwIHt3aWR0aDogNDAwcHg7fQouZmwtY29udGFp
bmVyLTQ1MCB7d2lkdGg6IDQ1MHB4O30KLmZsLWNvbnRhaW5lci01MDAge3dpZHRoOiA1MDBweDt9
Ci5mbC1jb250YWluZXItNTUwIHt3aWR0aDogNTUwcHg7fQouZmwtY29udGFpbmVyLTYwMCB7d2lk
dGg6IDYwMHB4O30KLmZsLWNvbnRhaW5lci02NTAge3dpZHRoOiA2NTBweDt9Ci5mbC1jb250YWlu
ZXItNzAwIHt3aWR0aDogNzAwcHg7fQouZmwtY29udGFpbmVyLTc1MCB7d2lkdGg6IDc1MHB4O30K
LmZsLWNvbnRhaW5lci04MDAge3dpZHRoOiA4MDBweDt9Ci5mbC1jb250YWluZXItODUwIHt3aWR0
aDogODUwcHg7fQouZmwtY29udGFpbmVyLTkwMCB7d2lkdGg6IDkwMHB4O30KLmZsLWNvbnRhaW5l
ci05NTAge3dpZHRoOiA5NTBweDt9Ci5mbC1jb250YWluZXItMTAwMCB7d2lkdGg6IDEwMDBweDt9
CgovKiBGbGV4IHdpZHRoIGNvbnRhaW5lcnMgKi8KLmZsLWNvbnRhaW5lci1hdXRvIHt3aWR0aDog
YXV0bzt9Ci5mbC1jb250YWluZXItZmxleCB7d2lkdGg6IDEwMCU7IGNsZWFyOmJvdGg7fQouZmwt
Y29udGFpbmVyLWZsZXgxIHt3aWR0aDogMSU7fQouZmwtY29udGFpbmVyLWZsZXgyIHt3aWR0aDog
MiU7fQouZmwtY29udGFpbmVyLWZsZXgzIHt3aWR0aDogMyU7fQouZmwtY29udGFpbmVyLWZsZXg0
IHt3aWR0aDogNCU7fQouZmwtY29udGFpbmVyLWZsZXg1IHt3aWR0aDogNSU7fQouZmwtY29udGFp
bmVyLWZsZXg2IHt3aWR0aDogNiU7fQouZmwtY29udGFpbmVyLWZsZXg3IHt3aWR0aDogNyU7fQou
ZmwtY29udGFpbmVyLWZsZXg4IHt3aWR0aDogOCU7fQouZmwtY29udGFpbmVyLWZsZXg5IHt3aWR0
aDogOSU7fQouZmwtY29udGFpbmVyLWZsZXgxMCB7d2lkdGg6IDEwJTt9Ci5mbC1jb250YWluZXIt
ZmxleDExIHt3aWR0aDogMTElO30KLmZsLWNvbnRhaW5lci1mbGV4MTIge3dpZHRoOiAxMiU7fQou
ZmwtY29udGFpbmVyLWZsZXgxMyB7d2lkdGg6IDEzJTt9Ci5mbC1jb250YWluZXItZmxleDE0IHt3
aWR0aDogMTQlO30KLmZsLWNvbnRhaW5lci1mbGV4MTUge3dpZHRoOiAxNSU7fQouZmwtY29udGFp
bmVyLWZsZXgxNiB7d2lkdGg6IDE2JTt9Ci5mbC1jb250YWluZXItZmxleDE3IHt3aWR0aDogMTcl
O30KLmZsLWNvbnRhaW5lci1mbGV4MTgge3dpZHRoOiAxOCU7fQouZmwtY29udGFpbmVyLWZsZXgx
OSB7d2lkdGg6IDE5JTt9Ci5mbC1jb250YWluZXItZmxleDIwIHt3aWR0aDogMjAlO30KLmZsLWNv
bnRhaW5lci1mbGV4MjEge3dpZHRoOiAyMSU7fQouZmwtY29udGFpbmVyLWZsZXgyMiB7d2lkdGg6
IDIyJTt9Ci5mbC1jb250YWluZXItZmxleDIzIHt3aWR0aDogMjMlO30KLmZsLWNvbnRhaW5lci1m
bGV4MjQge3dpZHRoOiAyNCU7fQouZmwtY29udGFpbmVyLWZsZXgyNSB7d2lkdGg6IDI1JTt9Ci5m
bC1jb250YWluZXItZmxleDI2IHt3aWR0aDogMjYlO30KLmZsLWNvbnRhaW5lci1mbGV4Mjcge3dp
ZHRoOiAyNyU7fQouZmwtY29udGFpbmVyLWZsZXgyOCB7d2lkdGg6IDI4JTt9Ci5mbC1jb250YWlu
ZXItZmxleDI5IHt3aWR0aDogMjklO30KLmZsLWNvbnRhaW5lci1mbGV4MzAge3dpZHRoOiAzMCU7
fQouZmwtY29udGFpbmVyLWZsZXgzMSB7d2lkdGg6IDMxJTt9Ci5mbC1jb250YWluZXItZmxleDMy
IHt3aWR0aDogMzIlO30KLmZsLWNvbnRhaW5lci1mbGV4MzMge3dpZHRoOiAzMyU7fQouZmwtY29u
dGFpbmVyLWZsZXgzNCB7d2lkdGg6IDM0JTt9Ci5mbC1jb250YWluZXItZmxleDM1IHt3aWR0aDog
MzUlO30KLmZsLWNvbnRhaW5lci1mbGV4MzYge3dpZHRoOiAzNiU7fQouZmwtY29udGFpbmVyLWZs
ZXgzNyB7d2lkdGg6IDM3JTt9Ci5mbC1jb250YWluZXItZmxleDM4IHt3aWR0aDogMzglO30KLmZs
LWNvbnRhaW5lci1mbGV4Mzkge3dpZHRoOiAzOSU7fQouZmwtY29udGFpbmVyLWZsZXg0MCB7d2lk
dGg6IDQwJTt9Ci5mbC1jb250YWluZXItZmxleDQxIHt3aWR0aDogNDElO30KLmZsLWNvbnRhaW5l
ci1mbGV4NDIge3dpZHRoOiA0MiU7fQouZmwtY29udGFpbmVyLWZsZXg0MyB7d2lkdGg6IDQzJTt9
Ci5mbC1jb250YWluZXItZmxleDQ0IHt3aWR0aDogNDQlO30KLmZsLWNvbnRhaW5lci1mbGV4NDUg
e3dpZHRoOiA0NSU7fQouZmwtY29udGFpbmVyLWZsZXg0NiB7d2lkdGg6IDQ2JTt9Ci5mbC1jb250
YWluZXItZmxleDQ3IHt3aWR0aDogNDclO30KLmZsLWNvbnRhaW5lci1mbGV4NDgge3dpZHRoOiA0
OCU7fQouZmwtY29udGFpbmVyLWZsZXg0OSB7d2lkdGg6IDQ5JTt9Ci5mbC1jb250YWluZXItZmxl
eDUwIHt3aWR0aDogNTAlO30KLmZsLWNvbnRhaW5lci1mbGV4NTEge3dpZHRoOiA1MSU7fQouZmwt
Y29udGFpbmVyLWZsZXg1MiB7d2lkdGg6IDUyJTt9Ci5mbC1jb250YWluZXItZmxleDUzIHt3aWR0
aDogNTMlO30KLmZsLWNvbnRhaW5lci1mbGV4NTQge3dpZHRoOiA1NCU7fQouZmwtY29udGFpbmVy
LWZsZXg1NSB7d2lkdGg6IDU1JTt9Ci5mbC1jb250YWluZXItZmxleDU2IHt3aWR0aDogNTYlO30K
LmZsLWNvbnRhaW5lci1mbGV4NTcge3dpZHRoOiA1NyU7fQouZmwtY29udGFpbmVyLWZsZXg1OCB7
d2lkdGg6IDU4JTt9Ci5mbC1jb250YWluZXItZmxleDU5IHt3aWR0aDogNTklO30KLmZsLWNvbnRh
aW5lci1mbGV4NjAge3dpZHRoOiA2MCU7fQouZmwtY29udGFpbmVyLWZsZXg2MSB7d2lkdGg6IDYx
JTt9Ci5mbC1jb250YWluZXItZmxleDYyIHt3aWR0aDogNjIlO30KLmZsLWNvbnRhaW5lci1mbGV4
NjMge3dpZHRoOiA2MyU7fQouZmwtY29udGFpbmVyLWZsZXg2NCB7d2lkdGg6IDY0JTt9Ci5mbC1j
b250YWluZXItZmxleDY1IHt3aWR0aDogNjUlO30KLmZsLWNvbnRhaW5lci1mbGV4NjYge3dpZHRo
OiA2NiU7fQouZmwtY29udGFpbmVyLWZsZXg2NyB7d2lkdGg6IDY3JTt9Ci5mbC1jb250YWluZXIt
ZmxleDY4IHt3aWR0aDogNjglO30KLmZsLWNvbnRhaW5lci1mbGV4Njkge3dpZHRoOiA2OSU7fQou
ZmwtY29udGFpbmVyLWZsZXg3MCB7d2lkdGg6IDcwJTt9Ci5mbC1jb250YWluZXItZmxleDcxIHt3
aWR0aDogNzElO30KLmZsLWNvbnRhaW5lci1mbGV4NzIge3dpZHRoOiA3MiU7fQouZmwtY29udGFp
bmVyLWZsZXg3MyB7d2lkdGg6IDczJTt9Ci5mbC1jb250YWluZXItZmxleDc0IHt3aWR0aDogNzQl
O30KLmZsLWNvbnRhaW5lci1mbGV4NzUge3dpZHRoOiA3NSU7fQouZmwtY29udGFpbmVyLWZsZXg3
NiB7d2lkdGg6IDc2JTt9Ci5mbC1jb250YWluZXItZmxleDc3IHt3aWR0aDogNzclO30KLmZsLWNv
bnRhaW5lci1mbGV4Nzgge3dpZHRoOiA3OCU7fQouZmwtY29udGFpbmVyLWZsZXg3OSB7d2lkdGg6
IDc5JTt9Ci5mbC1jb250YWluZXItZmxleDgwIHt3aWR0aDogODAlO30KLmZsLWNvbnRhaW5lci1m
bGV4ODEge3dpZHRoOiA4MSU7fQouZmwtY29udGFpbmVyLWZsZXg4MiB7d2lkdGg6IDgyJTt9Ci5m
bC1jb250YWluZXItZmxleDgzIHt3aWR0aDogODMlO30KLmZsLWNvbnRhaW5lci1mbGV4ODQge3dp
ZHRoOiA4NCU7fQouZmwtY29udGFpbmVyLWZsZXg4NSB7d2lkdGg6IDg1JTt9Ci5mbC1jb250YWlu
ZXItZmxleDg2IHt3aWR0aDogODYlO30KLmZsLWNvbnRhaW5lci1mbGV4ODcge3dpZHRoOiA4NyU7
fQouZmwtY29udGFpbmVyLWZsZXg4OCB7d2lkdGg6IDg4JTt9Ci5mbC1jb250YWluZXItZmxleDg5
IHt3aWR0aDogODklO30KLmZsLWNvbnRhaW5lci1mbGV4OTAge3dpZHRoOiA5MCU7fQouZmwtY29u
dGFpbmVyLWZsZXg5MSB7d2lkdGg6IDkxJTt9Ci5mbC1jb250YWluZXItZmxleDkyIHt3aWR0aDog
OTIlO30KLmZsLWNvbnRhaW5lci1mbGV4OTMge3dpZHRoOiA5MyU7fQouZmwtY29udGFpbmVyLWZs
ZXg5NCB7d2lkdGg6IDk0JTt9Ci5mbC1jb250YWluZXItZmxleDk1IHt3aWR0aDogOTUlO30KLmZs
LWNvbnRhaW5lci1mbGV4OTYge3dpZHRoOiA5NiU7fQouZmwtY29udGFpbmVyLWZsZXg5NyB7d2lk
dGg6IDk3JTt9Ci5mbC1jb250YWluZXItZmxleDk4IHt3aWR0aDogOTglO30KLmZsLWNvbnRhaW5l
ci1mbGV4OTkge3dpZHRoOiA5OSU7fQoKLyoKKiBMaW5lYXJpemVzLCAhaW1wb3J0YW50cyBvdmVy
cmlkZSBzcGVjaWZpY2l0eQoqLwouZmwtbGF5b3V0LWxpbmVhciAqIHsKICAgIGNsZWFyOiBib3Ro
ICFpbXBvcnRhbnQ7CiAgICBmbG9hdDpub25lICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDow
ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6
dmlzaWJsZSAhaW1wb3J0YW50OyAvKiBubyBzY3JvbGwgYmFycywgYmFja3dhcmRzIGNvbXBhdCB3
aXRoIDEuMy4xICovCiAgICB0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsgLyogZGVmYXVsdCBh
bGlnbm1lbnQgKi8KfQoKLyogT3ZlcnJpZGUgaW5saW5lIGVsZW1lbnRzICovCi5mbC1sYXlvdXQt
bGluZWFyIC5mbC1mb3JjZS1sZWZ0LAouZmwtbGF5b3V0LWxpbmVhciAuZmwtZm9yY2UtcmlnaHQs
Ci5mbC1sYXlvdXQtbGluZWFyIC5mbC1jb2wsCi5mbC1sYXlvdXQtbGluZWFyIC5mbC1ncmlkIGxp
IHsKCWRpc3BsYXk6YmxvY2sgIWltcG9ydGFudDsKCXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7Cn0K
Ci8qIE1ha2UgYWxsIGJsb2NrIGVsZW1lbnRzIHVuaWZvcm0gd2lkdGggKi8KLmZsLWxheW91dC1s
aW5lYXIgZGl2LAouZmwtbGF5b3V0LWxpbmVhciB0YWJsZSwKLmZsLWxheW91dC1saW5lYXIgaDEs
IC5mbC1sYXlvdXQtbGluZWFyIGgyLCAuZmwtbGF5b3V0LWxpbmVhciBoMywgLmZsLWxheW91dC1s
aW5lYXIgaDQsIC5mbC1sYXlvdXQtbGluZWFyIGg1LCAuZmwtbGF5b3V0LWxpbmVhciBoNiwKLmZs
LWxheW91dC1saW5lYXIgcCwKLmZsLWxheW91dC1saW5lYXIgZm9ybSwgLmZsLWxheW91dC1saW5l
YXIgZmllbGRzZXQsCi5mbC1sYXlvdXQtbGluZWFyIHVsLCAuZmwtbGF5b3V0LWxpbmVhciBkbCwg
LmZsLWxheW91dC1saW5lYXIgb2wsCi5mbC1sYXlvdXQtbGluZWFyIHByZSwgLmZsLWxheW91dC1s
aW5lYXIgaHIsIC5mbC1sYXlvdXQtbGluZWFyIGJsb2NrcXVvdGUgewogICAgd2lkdGg6IDEwMCUg
IWltcG9ydGFudDsKCW1heC13aWR0aDogOTYwcHg7CgltaW4td2lkdGg6IDU2MHB4OwoJLypwYWRk
aW5nOiAwICFpbXBvcnRhbnQ7ICBhIHByb2JsZW0gd2hlbiBiZyBpbWFnZXMsIGFuZCBwYWRkaW5n
IHRvIGdpdmUgc3BhY2UgZm9yIGl0ICovCn0KCi5mbC1sYXlvdXQtbGluZWFyIC5mbC1oaWRkZW4t
YWNjZXNzaWJsZSB7CglvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KCi8qIERlcHJlY2F0
ZWQgKi8KLmZsLWxheW91dC1saW5lYXIgLmZsLWxpbmVhckVuYWJsZWQgeyB3aWR0aDoxMDAlICFp
bXBvcnRhbnQ7IGRpc3BsYXk6YmxvY2s7fQoKLyoKKiBBbGlnbnMgY29udGFpbmVycyBhbmQgY29u
dGVudHMgb2YgYSBjb250YWluZXIuIEJlc3QgcHJhY3RpY2UgZm9yIGxpbmVhciBsYXlvdXRzLgoq
LwouZmwtbGF5b3V0LWxpbmVhci5mbC1sYXlvdXQtYWxpZ24tcmlnaHQgKiwKLmZsLWxheW91dC1s
aW5lYXIgLmZsLWxheW91dC1hbGlnbi1yaWdodCAqIHsKICAgIHRleHQtYWxpZ246cmlnaHQgIWlt
cG9ydGFudDsKfQouZmwtbGF5b3V0LWxpbmVhci5mbC1sYXlvdXQtYWxpZ24tY2VudGVyICosCi5m
bC1sYXlvdXQtbGluZWFyIC5mbC1sYXlvdXQtYWxpZ24tY2VudGVyICogewogICAgdGV4dC1hbGln
bjpjZW50ZXIgIWltcG9ydGFudDsKfQoKLyoKTGF5b3V0IEhlbHBlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiovCi8qIENvbHVtbnM6IEEgcXVpY2sgY29s
dW1uIGdyaWQgc3lzdGVtICovCi8qIEZsZXggd2lkdGggY29sdW1ucyAoY29udGFpbmVycyB3aXRo
IG1hcmdpbnMgYW5kIHBhZGRpbmcpICovCi5mbC1jb2wtanVzdGlmaWVkIHtmbG9hdDpsZWZ0OyBk
aXNwbGF5OmlubGluZTsgb3ZlcmZsb3c6YXV0bzsgdGV4dC1hbGlnbjpqdXN0aWZ5O30gLyogcmVk
dW5kYW50OiB0ZXh0IGFsaWdubWVudCBub3cgaW4gZmx1aWQudGV4dC5jc3MgKi8KCi5mbC1jb2wt
ZmxleDIsIC5mbC1jb2wtZmxleDMsIC5mbC1jb2wtZmxleDQsIC5mbC1jb2wtZmxleDUge292ZXJm
bG93OmF1dG87IHpvb206MTt9Ci5mbC1jb2wge2Zsb2F0OmxlZnQ7IGRpc3BsYXk6aW5saW5lO30K
LmZsLWNvbC1mbGV4NSAuZmwtY29sIHt3aWR0aDoxOC45NSU7IG1hcmdpbi1sZWZ0OjAuMjUlO21h
cmdpbi1yaWdodDowLjI1JTsgcGFkZGluZy1sZWZ0OjAuMjUlOyBwYWRkaW5nLXJpZ2h0OjAuMjUl
fQouZmwtY29sLWZsZXg0IC5mbC1jb2wge3dpZHRoOjI0JTsgbWFyZ2luLWxlZnQ6MC4yNSU7bWFy
Z2luLXJpZ2h0OjAuMjUlOyBwYWRkaW5nLWxlZnQ6MC4yNSU7IHBhZGRpbmctcmlnaHQ6MC4yNSV9
Ci5mbC1jb2wtZmxleDMgLmZsLWNvbCB7d2lkdGg6MzIuMzMlOyBtYXJnaW4tbGVmdDowLjI1JTtt
YXJnaW4tcmlnaHQ6MC4yNSU7IHBhZGRpbmctbGVmdDowLjI1JTsgcGFkZGluZy1yaWdodDowLjI1
JX0KLmZsLWNvbC1mbGV4MiAuZmwtY29sIHt3aWR0aDo0OC44NSU7IG1hcmdpbi1sZWZ0OjAuMjUl
O21hcmdpbi1yaWdodDowLjI1JTsgcGFkZGluZy1sZWZ0OjAuMjUlOyBwYWRkaW5nLXJpZ2h0OjAu
MjUlfQoKLyogQ0hBTkdFIFRPIExBWU9VVCBub3QgQ09MIHNpbmNlIHRoaXMgd2lsbCBiZWNvbWUg
YSBsYXlvdXQgaGVscGVyICovCi5mbC1jb2wtbWl4ZWQsCi5mbC1jb2wtbWl4ZWQyLAouZmwtY29s
LW1peGVkMyB7b3ZlcmZsb3c6YXV0bzsgem9vbToxO30KCi8qIE9sZCBTeXN0ZW0gKi8KLmZsLWNv
bC1taXhlZCAuZmwtY29sLXNpZGUge3dpZHRoOjIwMHB4O30KLmZsLWNvbC1taXhlZCAuZmwtY29s
LXNpZGUsCi5mbC1jb2wtbWl4ZWQgLmZsLWNvbC1tYWluIHtwYWRkaW5nOjAgMTBweDt9CgouZmwt
Y29sLW1peGVkMiAuZmwtY29sLXNpZGUge3dpZHRoOjIwMHB4OyBwYWRkaW5nOjAgMTBweDsgZmxv
YXQ6bGVmdDt9Ci5mbC1jb2wtbWl4ZWQyIC5mbC1jb2wtbWFpbiB7bWFyZ2luLWxlZnQ6MjIwcHg7
IHBhZGRpbmc6MCAxMHB4O30gLyogbWFyZ2luIGdvZXMgb24gd2hpY2hldmVyIHNpZGUgdGhlIGZp
eGVkIGNvbHVtbiBnb2VzICovCgouZmwtY29sLW1peGVkMyAuZmwtY29sLW1haW4ge21hcmdpbjow
IDIyMHB4O30gLyogbWFyZ2luIGdvZXMgb24gd2hpY2hldmVyIHNpZGUgdGhlIGZpeGVkIGNvbHVt
biBnb2VzICovCgovKiBOZXcgU3lzdGVtLCByZXF1aXJlcyBmbC1mb3JjZS1YWCBvbiB0aGUgZml4
ZWQgY29sdW1uLCBwcm92aWRlcyBzb21lIGJhc2ljIG51bWJlcnMgdG8gc3RhcnQgd2l0aCAqLwou
ZmwtY29sLWZpeGVkLCAuZmwtY29sLWZsZXgge3BhZGRpbmc6MCAxMHB4O30KCi5mbC1jb2wtbWl4
ZWQgLmZsLWNvbC1maXhlZCB7d2lkdGg6MjAwcHg7IHBhZGRpbmc6MCAxMHB4O30KLmZsLWNvbC1t
aXhlZCAuZmwtY29sLWZsZXgge21hcmdpbi1sZWZ0OjIyMHB4OyBwYWRkaW5nOjAgMTBweDt9Ci5m
bC1jb2wtbWl4ZWQgLmZsLWNvbC1mbGV4LWxlZnQge21hcmdpbi1yaWdodDoyMjBweDsgcGFkZGlu
ZzowIDEwcHg7fQoKLmZsLWNvbC1taXhlZC0xMDAgLmZsLWNvbC1maXhlZCB7d2lkdGg6MTAwcHg7
fQouZmwtY29sLW1peGVkLTEwMCAuZmwtY29sLWZsZXgge21hcmdpbi1sZWZ0OjEyMHB4O30KLmZs
LWNvbC1taXhlZC0xMDAgLmZsLWNvbC1mbGV4LWxlZnQge21hcmdpbi1yaWdodDoxMjBweDt9Cgou
ZmwtY29sLW1peGVkLTE1MCAuZmwtY29sLWZpeGVkIHt3aWR0aDoxNTBweDt9Ci5mbC1jb2wtbWl4
ZWQtMTUwIC5mbC1jb2wtZmxleCB7bWFyZ2luLWxlZnQ6MTcwcHg7fQouZmwtY29sLW1peGVkLTE1
MCAuZmwtY29sLWZsZXgtbGVmdCB7bWFyZ2luLXJpZ2h0OjE3MHB4O30KCi5mbC1jb2wtbWl4ZWQt
MjAwIC5mbC1jb2wtZml4ZWQge3dpZHRoOjIwMHB4O30KLmZsLWNvbC1taXhlZC0yMDAgLmZsLWNv
bC1mbGV4IHttYXJnaW4tbGVmdDoyMjBweDt9Ci5mbC1jb2wtbWl4ZWQtMjAwIC5mbC1jb2wtZmxl
eC1sZWZ0IHttYXJnaW4tcmlnaHQ6MjIwcHg7fQoKLmZsLWNvbC1taXhlZC0yNTAgLmZsLWNvbC1m
aXhlZCB7d2lkdGg6MjUwcHg7fQouZmwtY29sLW1peGVkLTI1MCAuZmwtY29sLWZsZXgge21hcmdp
bi1sZWZ0OjI3MHB4O30KLmZsLWNvbC1taXhlZC0yNTAgLmZsLWNvbC1mbGV4LWxlZnQge21hcmdp
bi1yaWdodDoyNzBweDt9CgouZmwtY29sLW1peGVkLTMwMCAuZmwtY29sLWZpeGVkIHt3aWR0aDoz
MDBweDt9Ci5mbC1jb2wtbWl4ZWQtMzAwIC5mbC1jb2wtZmxleCB7bWFyZ2luLWxlZnQ6MzIwcHg7
fQouZmwtY29sLW1peGVkLTMwMCAuZmwtY29sLWZsZXgtbGVmdCB7bWFyZ2luLXJpZ2h0OjMyMHB4
O30KCgovKgoqIFRhYnM6IGEgcXVpY2sgdGFiIHN5c3RlbQoqIERlcGVuZGVuY3k6IGxpc3QtYmFz
ZWQgbWFya3VwID8KKi8KLmZsLXRhYnMge21hcmdpbjoxMHB4IDAgMCAwOyBib3JkZXItYm90dG9t
OjFweCBzb2xpZCAjMDAwOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MnB4O30K
LmZsLXRhYnMgbGkge2xpc3Qtc3R5bGUtdHlwZTpub25lOyBkaXNwbGF5OmlubGluZTt9Ci8qIHN0
YXIgaGFjayB0byBnZXQgSUUgNis3IHRvIGJlaGF2ZSBwZXJmZWN0bHkgKi8KLmZsLXRhYnMgbGkg
YSB7cGFkZGluZzozcHggMTZweCAycHg7IGJhY2tncm91bmQtY29sb3I6I2ZmZjsgbWFyZ2luLWxl
ZnQ6LTVweDsgKm1hcmdpbi1ib3R0b206LTZweDsgem9vbToxOyBib3JkZXI6MXB4IHNvbGlkICMw
MDA7IGNvbG9yOiM5OTk7fQouZmwtdGFicyBsaSBhOmhvdmVyIHt9Ci5mbC10YWJzLWNlbnRlciB7
dGV4dC1hbGlnbjpjZW50ZXI7fQouZmwtdGFicy1sZWZ0IHt0ZXh0LWFsaWduOmxlZnQ7IHBhZGRp
bmctbGVmdDoxMHB4O30KLmZsLXRhYnMtcmlnaHQge3RleHQtYWxpZ246cmlnaHQ7IHBhZGRpbmct
cmlnaHQ6MTVweDt9Ci5mbC10YWJzIC5mbC1yZW9yZGVyZXItZHJvcE1hcmtlciB7cGFkZGluZzow
IDNweDsgYmFja2dyb3VuZC1jb2xvcjojYzAwO21hcmdpbjowIDVweCAwIC01cHg7IHpvb206MTt9
Ci5mbC10YWJzIC5mbC10YWJzLWFjdGl2ZSBhIHtwYWRkaW5nOjNweCAxNnB4OyBib3JkZXItYm90
dG9tOm5vbmU7IGNvbG9yOiMwMDA7fQouZmwtdGFicy1jb250ZW50IHtwYWRkaW5nOjVweDt9Ci8q
IGdldCB3ZWJraXQgdG8gYmVoYXZlIHBlcmZlY3RseSAtCiogdW5mb3J0dW5hdGVseSwgQ2hyb21l
IGdldHMgY2F1Z2h0IGluIHRoaXMgdG9vIGV2ZW4gdGhvdWdoIGl0IGFwcGxpZWQgdGhlIG9yaWdp
bmFsIHBhZGRpbmcgdmFsdWVzIGZpbmUKKi8KQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWlu
LWRldmljZS1waXhlbC1yYXRpbzowKXsKICAgIC5mbC10YWJzIGxpIGEge3BhZGRpbmc6M3B4IDE2
cHggM3B4O30KICAgIC5mbC10YWJzIC5mbC10YWJzLWFjdGl2ZSBhIHtwYWRkaW5nOjNweCAxNnB4
IDRweDt9Cn0KCi8qCiogTWVudXM6IHF1aWNrIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIG1lbnUK
KiBSZXF1aXJlcyBsaXN0IGl0ZW1zIHdpdGggYW5jaG9ycwoqLwouZmwtbGlzdG1lbnUsIC8qIDw9
PT0gZmwtbGlzdG1lbnUgaXMgREVQUkVDQVRFRCEgKi8KLmZsLWxpc3QtbWVudSB7cGFkZGluZzow
cHg7IG1hcmdpbjowOyBib3JkZXItYm90dG9tLXdpZHRoOjFweDsgYm9yZGVyLWJvdHRvbS1zdHls
ZTpzb2xpZDt9CgouZmwtbGlzdG1lbnUgbGksIC8qIDw9PT0gZmwtbGlzdG1lbnUgaXMgREVQUkVD
QVRFRCEgKi8KLmZsLWxpc3QtbWVudSBsaSB7bWFyZ2luOjA7IHBhZGRpbmc6MDsgbGlzdC1zdHls
ZS10eXBlOm5vbmU7IGJvcmRlci13aWR0aDoxcHg7IGJvcmRlci1zdHlsZTpzb2xpZDsgYm9yZGVy
LWJvdHRvbTpub25lO30KCi5mbC1saXN0bWVudSBhLCAvKiA8PT09IGZsLWxpc3RtZW51IGlzIERF
UFJFQ0FURUQhICovCi5mbC1saXN0LW1lbnUgYSB7cGFkZGluZzo1cHggNXB4OyBkaXNwbGF5OmJs
b2NrOyB6b29tOjE7IG91dGxpbmU6bm9uZTt9IC8qIGxpc3QgaXRlbSBuZWVkcyBsYXlvdXQgKGh0
dHA6Ly93d3cuYnJ1bmlsZG8ub3JnL3Rlc3QvSUVXbGlzcGFjZS5waHApICovCgouZmwtbGlzdC1t
ZW51IGE6aG92ZXIsIC5mbC1saXN0LW1lbnUgYTpmb2N1cyB7CiAgICBwYWRkaW5nOiA0cHggNHB4
OwogICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Cn0KCi5mbC1saXN0LW1lbnUgLmZsLWFjdGl2
ZW1lbnUgYSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NDQ0NDOwogICAgY29sb3I6ICMwMDAw
MDA7Cn0KCi8qCiogUGljdHVyZSBHcmlkOiBhIHF1aWNrIHBpY3R1cmUgZ3JpZCBsYXlvdXQKKiBE
ZXBlbmRlbmN5OiBsaXN0LWJhc2VkIG1hcmt1cAoqLwp1bC5mbC1ncmlkLCAuZmwtZ3JpZCB1bCB7
cGFkZGluZzowOyBtYXJnaW46MDsgb3ZlcmZsb3c6YXV0bzt9Ci5mbC1ncmlkIGxpIHtsaXN0LXN0
eWxlLXR5cGU6bm9uZTsgZGlzcGxheTppbmxpbmU7fQouZmwtZ3JpZCBsaSB7ZmxvYXQ6bGVmdDsg
d2lkdGg6MTklOyBtYXJnaW46MC41JTsgaGVpZ2h0OjE1MHB4OyBvdmVyZmxvdzpoaWRkZW47IHBv
c2l0aW9uOnJlbGF0aXZlOyBkaXNwbGF5OmlubGluZTt9Ci5mbC1ncmlkIGxpIGltZyB7ZGlzcGxh
eTpibG9jazsgbWFyZ2luOjVweCBhdXRvO30KLmZsLWdyaWQgbGkgLmNhcHRpb24sIC8qPD09PSBE
RVBSRUNBVEVEIFNZTlRBWCAqLwouZmwtZ3JpZCBsaSAuZmwtZ3JpZC1jYXB0aW9uIHtwb3NpdGlv
bjphYnNvbHV0ZTsgbGVmdDowcHg7IGJvdHRvbTowcHg7IHdpZHRoOjEwMCU7IHRleHQtYWxpZ246
Y2VudGVyOyBoZWlnaHQ6MWVtOyBwYWRkaW5nOjNweCAwO30KCi8qCiogSWNvbnM6IHF1aWNrIGFj
Y2Vzc2libGUgaWNvbiBoZWxwZXIKKi8KLmZsLWljb24gewogICAgdGV4dC1pbmRlbnQ6LTUwMDBw
eDsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIGN1cnNvcjpwb2ludGVyOwogICAgZGlzcGxheTpi
bG9jazsKICAgIGhlaWdodDoxNnB4OwogICAgd2lkdGg6MTZweDsKICAgIG1hcmdpbi1sZWZ0OjVw
eDsKICAgIG1hcmdpbi1yaWdodDo1cHg7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBj
ZW50ZXI7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Cn0KaW5wdXQuZmwtaWNvbiB7
cGFkZGluZy1sZWZ0OjE2cHg7fQoKLyoKKiBCdXR0b25zOiBxdWljayBzbGlkaW5nIGRvb3IgYnV0
dG9ucwoqIHJlcXVpcmVzIGEgY29udGFpbmVyIHdpdGggYSBzdWIgY29udGFpbmVyCiovCi5mbC1i
dXR0b24tbGVmdCB7ZmxvYXQ6bGVmdDsgbWFyZ2luLXJpZ2h0OjEwcHg7IHBhZGRpbmc6MCAwIDAg
MTZweDsgYmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IGNlbnRlcjsgYmFja2dyb3VuZC1yZXBlYXQ6
bm8tcmVwZWF0O30KLmZsLWJ1dHRvbi1yaWdodCB7ZmxvYXQ6cmlnaHQ7IG1hcmdpbi1sZWZ0OjEw
cHg7IHBhZGRpbmc6MCAwIDAgMTZweDsgYmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IGNlbnRlcjsg
YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O30KLmZsLWJ1dHRvbi1pbm5lciB7ZmxvYXQ6bGVm
dDsgcGFkZGluZzo1cHggMTZweCA1cHggMDsgY3Vyc29yOnBvaW50ZXI7IGJhY2tncm91bmQtcG9z
aXRpb246cmlnaHQgY2VudGVyOyBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7fQoKLyoKKiBX
aWRnZXRzOiBtb2RlbGxlZCBhZnRlciB0aGUgbXljYW10b29scyB3aWRnZXQgbW9kZWwKKi8KLmZs
LXdpZGdldCB7cGFkZGluZzo1cHg7IG1hcmdpbi1ib3R0b206MTBweDt9Ci5mbC13aWRnZXQgLmJ1
dHRvbiB7bWFyZ2luOjAgNXB4O30KLmZsLWdyYWJiYWJsZSAuZmwtd2lkZ2V0LXRpdGxlYmFyIHti
YWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciB0b3A7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVh
dDsgY3Vyc29yOm1vdmU7fQouZmwtd2lkZ2V0IC5mbC13aWRnZXQtdGl0bGViYXIge30KLmZsLXdp
ZGdldCAuZmwtd2lkZ2V0LXRpdGxlYmFyIGgyIHtwYWRkaW5nOjA7IG1hcmdpbjowOyBmb250LXNp
emU6MTA1JTt9Ci5mbC13aWRnZXQgLmZsLXdpZGdldC10aXRsZWJhciAuZmwtYnV0dG9uLWlubmVy
IHsKICAgIGZvbnQtc2l6ZTowLjhlbTsKICAgIHBhZGRpbmctYm90dG9tOjAuMmVtOwogICAgcGFk
ZGluZy10b3A6MC4yZW07Cn0KLmZsLXdpZGdldCAuZmwtd2lkZ2V0LWNvbnRyb2xzIHttYXJnaW46
LTEuM2VtIDAgMS41ZW0gMDt9Ci5mbC13aWRnZXQgLmZsLXdpZGdldC1vcHRpb25zIHttYXJnaW4t
dG9wOjVweDsgcGFkZGluZzowcHggMTBweDt9Ci5mbC13aWRnZXQgLmZsLXdpZGdldC1vcHRpb25z
IHVsIHttYXJnaW46MDsgcGFkZGluZzowOyBvdmVyZmxvdzpoaWRkZW47IHpvb206MTt9Ci5mbC13
aWRnZXQgLmZsLXdpZGdldC1vcHRpb25zIGxpIHtsaXN0LXN0eWxlLXR5cGU6bm9uZTsgZmxvYXQ6
bGVmdDsgZGlzcGxheTppbmxpbmU7IHBhZGRpbmc6MCA1cHggMCA1cHg7IG1hcmdpbi1sZWZ0Oi01
cHg7fQouZmwtd2lkZ2V0IC5mbC13aWRnZXQtb3B0aW9ucyBhIHttYXJnaW4tcmlnaHQ6NXB4O30K
LmZsLXdpZGdldCAuZmwtd2lkZ2V0LWNvbnRlbnQge3pvb206MTsgbWFyZ2luOjVweCAwIDAgMDsg
b3ZlcmZsb3c6IGF1dG87fQouZmwtd2lkZ2V0IC5mbC13aWRnZXQtY29udGVudCB1bCB7fQouZmwt
d2lkZ2V0IC5lbXB0eSAqIHtwYWRkaW5nLXRvcDoxMHB4OyBtYXJnaW4tbGVmdDphdXRvOyBtYXJn
aW4tcmlnaHQ6YXV0bzsgdGV4dC1hbGlnbjpjZW50ZXI7fQoKCi8qIENvbW1vbiB3aWRnZXQgc3Vi
LWNvbXBvbmVudHMgKi8KLmZsLXdpZGdldCAubWVudSB7bWFyZ2luOjA7fQouZmwtd2lkZ2V0IC50
b2dnbGUge3dpZHRoOjMycHg7fQouZmwtd2lkZ2V0IC5vbiB7YmFja2dyb3VuZC1wb3NpdGlvbjps
ZWZ0IHRvcDt9Ci5mbC13aWRnZXQgLm9mZiB7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IGJvdHRv
bTt9CgovKgoqIEZvcm1zIGFuZCBGb3JtIENvbnRyb2xzCiogQ29tbW9uIGFycmFuZ2VtZW50cyBm
b3IgZm9ybSBpbnB1dHMgaW4gYSBsaXN0CiogQWxpZ25tZW50IHJlcXVpcmVzIGxpc3Qgb2YgZmwt
bGFiZWwgZWxlbWVudHMgcGxhY2VkIGJlZm9yZSB0aGUgY29udHJvbAoqLwouZmwtY29udHJvbHMt
bGVmdCBsaSB7bGlzdC1zdHlsZS10eXBlOm5vbmU7IHRleHQtYWxpZ246bGVmdDt9Ci5mbC1jb250
cm9scy1sZWZ0IC5mbC1sYWJlbCB7ZmxvYXQ6bGVmdDsgdGV4dC1hbGlnbjpsZWZ0OyB3aWR0aDo1
MCU7IG1hcmdpbi1yaWdodDo1cHg7fQoKLmZsLWNvbnRyb2xzLXJpZ2h0IGxpIHtsaXN0LXN0eWxl
LXR5cGU6bm9uZTsgZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpsZWZ0O30KLmZsLWNvbnRyb2xz
LXJpZ2h0IC5mbC1sYWJlbCB7ZmxvYXQ6bGVmdDsgdGV4dC1hbGlnbjpyaWdodDsgd2lkdGg6NTAl
OyBtYXJnaW4tcmlnaHQ6NXB4O30KCi5mbC1jb250cm9scy1jZW50ZXJlZCBsaSB7bGlzdC1zdHls
ZS10eXBlOm5vbmU7IGRpc3BsYXk6YmxvY2s7IHRleHQtYWxpZ246bGVmdDt9Ci5mbC1jb250cm9s
cy1jZW50ZXJlZCAuZmwtbGFiZWwge2Zsb2F0OmxlZnQ7IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0
aDo1MCU7IG1hcmdpbi1yaWdodDo1cHg7fQoKLyoqCiogS25vY2tvdXQgQmFja2dyb3VuZCBJbWFn
ZXMKKi8KLmZsLW5vQmFja2dyb3VuZEltYWdlcywgLmZsLW5vQmFja2dyb3VuZEltYWdlcyAqIHsK
ICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50Owp9Ci5mbC1ub0JhY2tncm91bmRJ
bWFnZXMgLmZsLWljb24gewogICAgdGV4dC1pbmRlbnQ6MCAhaW1wb3J0YW50OwogICAgd2lkdGg6
YXV0byAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCAhaW1wb3J0
YW50Owp9CgovKiBQcm9ncmVzc2l2ZSBFbmhhbmNlbWVudDogSlMgd2lsbCByZXZlcnNlIHRoZSBk
aXNwbGF5IHNldHVwIGlmIGl0IGlzIGVuYWJsZWQgKi8KLmZsLVByb2dFbmhhbmNlLWVuaGFuY2Vk
LCAvKiA8PCBzeW50YXggYnJlYWtzIGNvbnZlbnRpb25zIGFuZCBpcyBEZXByZWNhdGVkKi8KLmZs
LXByb2dFbmhhbmNlLWVuaGFuY2VkIHtkaXNwbGF5Om5vbmV9CgouZmwtUHJvZ0VuaGFuY2UtYmFz
aWMsIC8qIDw8IHN5bnRheCBicmVha3MgY29udmVudGlvbnMgYW5kIGlzIERlcHJlY2F0ZWQqLwou
ZmwtcHJvZ0VuaGFuY2UtYmFzaWMge30KCi8qIEhpZGluZyBDb250ZW50LiBUaGUgZm9sbG93aW5n
IHN0eWxlcyBhcmUgYmFzZWQgb24gY3NzIGZyb20gaHR0cDovL2h0bWw1Ym9pbGVycGxhdGUuY29t
ICovCgovKiBIaWRlIGZvciBib3RoIHNjcmVlbnJlYWRlcnMgYW5kIGJyb3dzZXJzICovCi5mbC1o
aWRkZW4geyBkaXNwbGF5OiBub25lOyB2aXNpYmlsaXR5OiBoaWRkZW47IH0KCi8qIEhpZGUgZm9y
IGJvdGggc2NyZWVucmVhZGVycyBhbmQgYnJvd3NlcnMgYnV0IG1haW50YWluIGxheW91dCAqLwou
ZmwtaGlkZGVuLWludmlzaWJsZSB7IHZpc2liaWxpdHk6IGhpZGRlbjsgfQoKLyogSGlkZSBmb3Ig
YnJvd3NlcnMgYnV0IGF2YWlsYWJsZSBmb3Igc2NyZWVucmVhZGVycyAqLwouZmwtaGlkZGVuLWFj
Y2Vzc2libGUgeyBib3JkZXI6IDA7IGNsaXA6IHJlY3QoMCAwIDAgMCk7IGhlaWdodDogMXB4OyBt
YXJnaW46IC0xcHg7IG92ZXJmbG93OiBoaWRkZW47IHBhZGRpbmc6IDA7IHBvc2l0aW9uOiBhYnNv
bHV0ZTsgd2lkdGg6IDFweDsgfQovKiBBZGQgZm9jdXMgZm9yIGtleWJvYXJkIHVzZXJzICovCi5m
bC1oaWRkZW4tYWNjZXNzaWJsZS5mbC1mb2N1czphY3RpdmUsCi5mbC1oaWRkZW4tYWNjZXNzaWJs
ZS5mbC1mb2N1czpmb2N1cyB7IGNsaXA6IGF1dG87IGhlaWdodDogYXV0bzsgbWFyZ2luOiAwOyBv
dmVyZmxvdzogdmlzaWJsZTsgcG9zaXRpb246IHN0YXRpYzsgd2lkdGg6IGF1dG87IH0KCi8qIEhp
ZGUgdGV4dCBmb3IgaW1hZ2UgcmVwbGFjZW1lbnQgKi8KLmZsLWhpZGRlbi1yZXBsYWNlIHsgZGlz
cGxheTogYmxvY2s7IHRleHQtaW5kZW50OiAtOTk5ZW07IG92ZXJmbG93OiBoaWRkZW47IGJhY2tn
cm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IHRleHQtYWxpZ246IGxlZnQ7IGRpcmVjdGlvbjogbHRy
OyB9CgoKLyogREVQUkVDQVRFRCAqLwouZmwtb2ZmU2NyZWVuLWhpZGRlbiB7cG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6LTEwMDAwcHg7IHRvcDphdXRvOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92
ZXJmbG93OmhpZGRlbjt9WHRleHQvY3Nz1AUGBwgYGRobXxBDaHR0cDovL2ZsdWlkcHJvamVjdC5v
cmcvcmVsZWFzZXMvMS40L2ZyYW1ld29yay9mc3MvY3NzL2Zzcy10ZXh0LmNzc08RBAxicGxpc3Qw
MNQBAgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkw
GzEySElKS0xNTk9QUVJTVFVWV1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFS
JDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACA
GoAcgAWAG4AGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEENodHRwOi8vZmx1
aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2Zzcy9jc3MvZnNzLXRleHQuY3Nz
0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALpnr
UxDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9A
QUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1v
ZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBh
Y2hlLzIuMi4xNSAoQ2VudE9TKVh0ZXh0L2Nzc18QGyI0ODFiYzUtMWExMi00YWYzM2QwMTNlNDAw
Il8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAyMDo1
MDo1NCBHTVRVYnl0ZXNUNjY3NFVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEaElh0ZXh0L2Nz
c9IqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxS
ZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEA
GgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCpAKsArQCvALEAswC1
ALcAuQC7AL0AxADMANgA2gDcAN4BJAEpATQBPQFDAUYBTAFVAV4BYAFnAW8BegGDAYUBhwGJAYsB
jQGPAZEBkwGcAZ4BoAGiAaQBpgGoAaoBrAGuAbUBwgHHAdUB2gHoAfcCAgIbAiQCQgJiAoICiAKN
ApMCmAKlAqgCqwK0ArkCzQLRAuUC8wMFAwgDHgAAAAAAAAIBAAAAAAAAAGYAAAAAAAAAAAAAAAAA
AAMgTxEaEi5mbC1mb250LXNpemUtNzAsCi5mbC1mb250LXNpemUtNzAgYm9keSwKLmZsLWZvbnQt
c2l6ZS03MCBpbnB1dCwgCi5mbC1mb250LXNpemUtNzAgc2VsZWN0LCAKLmZsLWZvbnQtc2l6ZS03
MCB0ZXh0YXJlYSB7Zm9udC1zaXplOjAuN2VtOyBsaW5lLWhlaWdodDoxZW07fQoKLmZsLWZvbnQt
c2l6ZS04MCwKLmZsLWZvbnQtc2l6ZS04MCBib2R5LCAKLmZsLWZvbnQtc2l6ZS04MCBpbnB1dCwg
Ci5mbC1mb250LXNpemUtODAgc2VsZWN0LCAKLmZsLWZvbnQtc2l6ZS04MCB0ZXh0YXJlYSB7Zm9u
dC1zaXplOjAuOGVtOyBsaW5lLWhlaWdodDoxLjFlbTt9CgouZmwtZm9udC1zaXplLTkwLAouZmwt
Zm9udC1zaXplLTkwIGJvZHksCi5mbC1mb250LXNpemUtOTAgaW5wdXQsCi5mbC1mb250LXNpemUt
OTAgc2VsZWN0LAouZmwtZm9udC1zaXplLTkwIHRleHRhcmVhIHtmb250LXNpemU6MC45ZW07IGxp
bmUtaGVpZ2h0OjEuMmVtO30KCi5mbC1mb250LXNpemUtMTAwLCAKLmZsLWZvbnQtc2l6ZS0xMDAg
Ym9keSwKLmZsLWZvbnQtc2l6ZS0xMDAgaW5wdXQsIAouZmwtZm9udC1zaXplLTEwMCBzZWxlY3Qs
IAouZmwtZm9udC1zaXplLTEwMCB0ZXh0YXJlYSB7Zm9udC1zaXplOjFlbTsgbGluZS1oZWlnaHQ6
MS4zZW07fQoKLmZsLWZvbnQtc2l6ZS0xMTAsIAouZmwtZm9udC1zaXplLTExMCBib2R5LCAKLmZs
LWZvbnQtc2l6ZS0xMTAgaW5wdXQsIAouZmwtZm9udC1zaXplLTExMCBzZWxlY3QsIAouZmwtZm9u
dC1zaXplLTExMCB0ZXh0YXJlYSB7Zm9udC1zaXplOjEuMWVtOyBsaW5lLWhlaWdodDoxLjRlbTt9
CgouZmwtZm9udC1zaXplLTEyMCwgCi5mbC1mb250LXNpemUtMTIwIGJvZHksIAouZmwtZm9udC1z
aXplLTEyMCBpbnB1dCwgCi5mbC1mb250LXNpemUtMTIwIHNlbGVjdCwgCi5mbC1mb250LXNpemUt
MTIwIHRleHRhcmVhIHtmb250LXNpemU6MS4yZW07IGxpbmUtaGVpZ2h0OjEuNWVtO30KCi5mbC1m
b250LXNpemUtMTMwLCAKLmZsLWZvbnQtc2l6ZS0xMzAgYm9keSwgCi5mbC1mb250LXNpemUtMTMw
IGlucHV0LCAKLmZsLWZvbnQtc2l6ZS0xMzAgc2VsZWN0LCAKLmZsLWZvbnQtc2l6ZS0xMzAgdGV4
dGFyZWEge2ZvbnQtc2l6ZToxLjNlbTsgbGluZS1oZWlnaHQ6MS42ZW07fQoKLmZsLWZvbnQtc2l6
ZS0xNDAsIAouZmwtZm9udC1zaXplLTE0MCBib2R5LCAKLmZsLWZvbnQtc2l6ZS0xNDAgaW5wdXQs
IAouZmwtZm9udC1zaXplLTE0MCBzZWxlY3QsIAouZmwtZm9udC1zaXplLTE0MCB0ZXh0YXJlYSB7
Zm9udC1zaXplOjEuNGVtOyBsaW5lLWhlaWdodDoxLjdlbTt9CgouZmwtZm9udC1zaXplLTE1MCwg
Ci5mbC1mb250LXNpemUtMTUwIGJvZHksCi5mbC1mb250LXNpemUtMTUwIGlucHV0LCAKLmZsLWZv
bnQtc2l6ZS0xNTAgc2VsZWN0LCAKLmZsLWZvbnQtc2l6ZS0xNTAgdGV4dGFyZWEge2ZvbnQtc2l6
ZToxLjVlbTsgbGluZS1oZWlnaHQ6MS44ZW07fQoKLyogZml4IGZvciBTYWZhcmkgMyBpZ25vcmlu
ZyBpbnB1dCBmb250IHNpemUgKi8KQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmlj
ZS1waXhlbC1yYXRpbzowKSB7CiAgICAKICAgIFtjbGFzc349J2ZsLWZvbnQtc2l6ZS03MCddIGlu
cHV0W3R5cGU9c3VibWl0XSwKICAgIFtjbGFzc349J2ZsLWZvbnQtc2l6ZS03MCddIGlucHV0W3R5
cGU9YnV0dG9uXSB7cGFkZGluZzowIDFlbX0KCiAgICBbY2xhc3N+PSdmbC1mb250LXNpemUtODAn
XSBpbnB1dFt0eXBlPXN1Ym1pdF0sCiAgICBbY2xhc3N+PSdmbC1mb250LXNpemUtODAnXSBpbnB1
dFt0eXBlPWJ1dHRvbl0ge2ZvbnQtc2l6ZTowLjhlbTsgcGFkZGluZzowIDFlbX0KCiAgICBbY2xh
c3N+PSdmbC1mb250LXNpemUtOTAnXSBpbnB1dFt0eXBlPXN1Ym1pdF0sCiAgICBbY2xhc3N+PSdm
bC1mb250LXNpemUtOTAnXSBpbnB1dFt0eXBlPWJ1dHRvbl0ge2ZvbnQtc2l6ZTowLjllbTsgcGFk
ZGluZzowIDFlbX0KCiAgICBbY2xhc3N+PSdmbC1mb250LXNpemUtMTAwJ10gaW5wdXRbdHlwZT1z
dWJtaXRdLAogICAgW2NsYXNzfj0nZmwtZm9udC1zaXplLTEwMCddIGlucHV0W3R5cGU9YnV0dG9u
XSB7Zm9udC1zaXplOjFlbTsgcGFkZGluZzowIDFlbX0KCiAgICBbY2xhc3N+PSdmbC1mb250LXNp
emUtMTEwJ10gaW5wdXRbdHlwZT1zdWJtaXRdLAogICAgaW5wdXRbdHlwZT1zdWJtaXRdW2NsYXNz
fj0nZmwtZm9udC1zaXplLTExMCddLAogICAgW2NsYXNzfj0nZmwtZm9udC1zaXplLTExMCddIGlu
cHV0W3R5cGU9YnV0dG9uXSB7YmFja2dyb3VuZC1jb2xvcjojZmZmOyBmb250LXNpemU6MS4xZW07
IHBhZGRpbmc6MCAxZW19CgogICAgW2NsYXNzfj0nZmwtZm9udC1zaXplLTEyMCddIGlucHV0W3R5
cGU9c3VibWl0XSwKICAgIGlucHV0W3R5cGU9c3VibWl0XVtjbGFzc349J2ZsLWZvbnQtc2l6ZS0x
MjAnXSwKICAgIFtjbGFzc349J2ZsLWZvbnQtc2l6ZS0xMjAnXSBpbnB1dFt0eXBlPWJ1dHRvbl0g
e2JhY2tncm91bmQtY29sb3I6I2ZmZjsgZm9udC1zaXplOjEuMmVtOyBwYWRkaW5nOjAgMWVtfQoK
ICAgIFtjbGFzc349J2ZsLWZvbnQtc2l6ZS0xMzAnXSBpbnB1dFt0eXBlPXN1Ym1pdF0sCiAgICBp
bnB1dFt0eXBlPXN1Ym1pdF1bY2xhc3N+PSdmbC1mb250LXNpemUtMTMwJ10sCiAgICBbY2xhc3N+
PSdmbC1mb250LXNpemUtMTMwJ10gaW5wdXRbdHlwZT1idXR0b25dIHtiYWNrZ3JvdW5kLWNvbG9y
OiNmZmY7IGZvbnQtc2l6ZToxLjNlbTsgcGFkZGluZzowIDFlbX0KCiAgICBbY2xhc3N+PSdmbC1m
b250LXNpemUtMTQwJ10gaW5wdXRbdHlwZT1zdWJtaXRdLAogICAgaW5wdXRbdHlwZT1zdWJtaXRd
W2NsYXNzfj0nZmwtZm9udC1zaXplLTE0MCddLAogICAgW2NsYXNzfj0nZmwtZm9udC1zaXplLTE0
MCddIGlucHV0W3R5cGU9YnV0dG9uXSB7YmFja2dyb3VuZC1jb2xvcjojZmZmOyBmb250LXNpemU6
MS40ZW07IHBhZGRpbmc6MCAxZW19CgogICAgW2NsYXNzfj0nZmwtZm9udC1zaXplLTE1MCddIGlu
cHV0W3R5cGU9c3VibWl0XSwKICAgIGlucHV0W3R5cGU9c3VibWl0XVtjbGFzc349J2ZsLWZvbnQt
c2l6ZS0xNTAnXSwKICAgIFtjbGFzc349J2ZsLWZvbnQtc2l6ZS0xNTAnXSBpbnB1dFt0eXBlPWJ1
dHRvbl0ge2JhY2tncm91bmQtY29sb3I6I2ZmZjsgZm9udC1zaXplOjEuNWVtOyBwYWRkaW5nOjAg
MWVtfQogICAgCiAgICBbY2xhc3N+PSdmbC1mb250LXNlcmlmJ10gaW5wdXRbdHlwZT1zdWJtaXRd
LAogICAgW2NsYXNzfj0nZmwtZm9udC1zYW5zJ10gaW5wdXRbdHlwZT1zdWJtaXRdLAogICAgW2Ns
YXNzfj0nZmwtZm9udC1tb25vc3BhY2UnXSBpbnB1dFt0eXBlPXN1Ym1pdF0sCiAgICBbY2xhc3N+
PSdmbC1mb250LWFyaWFsJ10gaW5wdXRbdHlwZT1zdWJtaXRdLAogICAgW2NsYXNzfj0nZmwtZm9u
dC12ZXJkYW5hJ10gaW5wdXRbdHlwZT1zdWJtaXRdLAogICAgW2NsYXNzfj0nZmwtZm9udC10aW1l
cyddIGlucHV0W3R5cGU9c3VibWl0XSwKICAgIFtjbGFzc349J2ZsLWZvbnQtY291cmllciddIGlu
cHV0W3R5cGU9c3VibWl0XSB7YmFja2dyb3VuZC1jb2xvcjojZmZmOyBwYWRkaW5nOjAgMWVtfQp9
CgoKLmZsLWZvbnQtc2VyaWYsIC5mbC1mb250LXNlcmlmICoge2ZvbnQtZmFtaWx5OiBHZW9yZ2lh
LCBUaW1lcywgIlRpbWVzIE5ldyBSb21hbiIsICJCb29rIEFudGlxdWEiLCBzZXJpZjt9Ci5mbC1m
b250LXNhbnMsIC5mbC1mb250LXNhbnMgKiB7Zm9udC1mYW1pbHk6IFRhaG9tYSwgVmVyZGFuYSwg
SGVsdmV0aWNhLCBzYW5zLXNlcmlmO30KLmZsLWZvbnQtbW9ub3NwYWNlLCAuZmwtZm9udC1tb25v
c3BhY2UgKiB7Zm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldywgQ291cmllciIsIG1vbm9zcGFjZTt9
CgouZmwtZm9udC1hcmlhbCwgLmZsLWZvbnQtYXJpYWwgKiB7Zm9udC1mYW1pbHk6ICJBcmlhbCI7
fQouZmwtZm9udC12ZXJkYW5hLCAuZmwtZm9udC12ZXJkYW5hICoge2ZvbnQtZmFtaWx5OiAiVmVy
ZGFuYSI7fQouZmwtZm9udC10aW1lcywgLmZsLWZvbnQtdGltZXMgKiAgIHtmb250LWZhbWlseTog
R2VvcmdpYSwgVGltZXMsICJUaW1lcyBOZXcgUm9tYW4iLCBzZXJpZjt9Ci5mbC1mb250LWNvdXJp
ZXIsIC5mbC1mb250LWNvdXJpZXIgKiB7Zm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJp
ZXIsIG1vbm9zcGFjZTt9Ci5mbC1mb250LWNvbWljLXNhbnMsIC5mbC1mb250LWNvbWljLXNhbnMg
KiB7Zm9udC1mYW1pbHk6ICJDb21pYyBTYW5zIE1TIiwgc2Fucy1zZXJpZjt9CgouZmwtdGV4dC1h
bGlnbi1sZWZ0IHsKICAgIHRleHQtYWxpZ246bGVmdDsKfQouZmwtdGV4dC1hbGlnbi1yaWdodCB7
CiAgICB0ZXh0LWFsaWduOnJpZ2h0Owp9Ci5mbC10ZXh0LWFsaWduLWNlbnRlciB7CiAgICB0ZXh0
LWFsaWduOmNlbnRlcjsKfQouZmwtdGV4dC1hbGlnbi1qdXN0aWZ5IHsKICAgIHRleHQtYWxpZ246
anVzdGlmeTsKfQoKLmZsLWZvbnQtc3BhY2luZy0wLCAKLmZsLWZvbnQtc3BhY2luZy0wIGJvZHks
IAouZmwtZm9udC1zcGFjaW5nLTAgaW5wdXQsCi5mbC1mb250LXNwYWNpbmctMCBzZWxlY3QsCi5m
bC1mb250LXNwYWNpbmctMCB0ZXh0YXJlYSB7bGV0dGVyLXNwYWNpbmc6MGVtfQoKLmZsLWZvbnQt
c3BhY2luZy0xLCAKLmZsLWZvbnQtc3BhY2luZy0xIGJvZHksIAouZmwtZm9udC1zcGFjaW5nLTEg
aW5wdXQsCi5mbC1mb250LXNwYWNpbmctMSBzZWxlY3QsCi5mbC1mb250LXNwYWNpbmctMSB0ZXh0
YXJlYSB7bGV0dGVyLXNwYWNpbmc6MC4xZW19CgouZmwtZm9udC1zcGFjaW5nLTIsIAouZmwtZm9u
dC1zcGFjaW5nLTIgYm9keSwgCi5mbC1mb250LXNwYWNpbmctMiBpbnB1dCwKLmZsLWZvbnQtc3Bh
Y2luZy0yIHNlbGVjdCwKLmZsLWZvbnQtc3BhY2luZy0yIHRleHRhcmVhIHtsZXR0ZXItc3BhY2lu
ZzowLjJlbX0KCi5mbC1mb250LXNwYWNpbmctMywgCi5mbC1mb250LXNwYWNpbmctMyBib2R5LCAK
LmZsLWZvbnQtc3BhY2luZy0zIGlucHV0LAouZmwtZm9udC1zcGFjaW5nLTMgc2VsZWN0LAouZmwt
Zm9udC1zcGFjaW5nLTMgdGV4dGFyZWEge2xldHRlci1zcGFjaW5nOjAuM2VtfQoKLmZsLWZvbnQt
c3BhY2luZy00LCAKLmZsLWZvbnQtc3BhY2luZy00IGJvZHksIAouZmwtZm9udC1zcGFjaW5nLTQg
aW5wdXQsCi5mbC1mb250LXNwYWNpbmctNCBzZWxlY3QsCi5mbC1mb250LXNwYWNpbmctNCB0ZXh0
YXJlYSB7bGV0dGVyLXNwYWNpbmc6MC40ZW19CgouZmwtZm9udC1zcGFjaW5nLTUsIAouZmwtZm9u
dC1zcGFjaW5nLTUgYm9keSwgCi5mbC1mb250LXNwYWNpbmctNSBpbnB1dCwKLmZsLWZvbnQtc3Bh
Y2luZy01IHNlbGVjdCwKLmZsLWZvbnQtc3BhY2luZy01IHRleHRhcmVhIHtsZXR0ZXItc3BhY2lu
ZzowLjVlbX0KCi5mbC1mb250LXNwYWNpbmctNiwgCi5mbC1mb250LXNwYWNpbmctNiBib2R5LCAK
LmZsLWZvbnQtc3BhY2luZy02IGlucHV0LAouZmwtZm9udC1zcGFjaW5nLTYgc2VsZWN0LAouZmwt
Zm9udC1zcGFjaW5nLTYgdGV4dGFyZWEge2xldHRlci1zcGFjaW5nOjAuNmVtfQoKLyogVUkgRW5o
YW5jZXIgIkVzaWVyIHRvIEZpbmQiIGxpbmsgb3B0aW9ucyAqLwovKiBGaXJzdCBwYXNzIHN0cmF0
ZWd5OiBhcHBseSBjbGFzc25hbWVzIGRpcmVjdGt5IG9uIHRoZSBlbGVtZW50cyBvZiBpbnRlcmVz
dCwgdXN1YWxseSB2aWEgSlMgKi8KLmZsLXRleHQtYXF1YSB7Y29sb3I6IGFxdWE7fQouZmwtdGV4
dC1ibGFjayB7Y29sb3I6IGJsYWNrO30KLmZsLXRleHQtYmx1ZSB7Y29sb3I6IGJsdWU7fQouZmwt
dGV4dC1mdWNoc2lhIHtjb2xvcjogZnVjaHNpYTt9Ci5mbC10ZXh0LWdyYXkge2NvbG9yOiBncmF5
O30KLmZsLXRleHQtZ3JlZW4ge2NvbG9yOiBncmVlbjt9Ci5mbC10ZXh0LWxpbWUge2NvbG9yOiBs
aW1lO30KLmZsLXRleHQtbWFyb29uIHtjb2xvcjogbWFyb29uO30KLmZsLXRleHQtbmF2eSB7Y29s
b3I6IG5hdnk7fQouZmwtdGV4dC1vbGl2ZSB7Y29sb3I6IG9saXZlO30KLmZsLXRleHQtcHVycGxl
IHtjb2xvcjogcHVycGxlO30KLmZsLXRleHQtcmVkIHtjb2xvcjogcmVkO30KLmZsLXRleHQtc2ls
dmVyIHtjb2xvcjogc2lsdmVyO30KLmZsLXRleHQtdGVhbCB7Y29sb3I6IHRlYWw7fQouZmwtdGV4
dC13aGl0ZSB7Y29sb3I6d2hpdGU7fQouZmwtdGV4dC15ZWxsb3cge2NvbG9yOiB5ZWxsb3c7fQoK
LmZsLXRleHQtdW5kZXJsaW5lIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KLmZsLXRleHQt
Ym9sZCB7Zm9udC13ZWlnaHQ6Ym9sZDt9Ci5mbC10ZXh0LWxhcmdlciB7Zm9udC1zaXplOjEyNSU7
fQouZmwtaW5wdXQtb3V0bGluZSB7Ym9yZGVyOjJweCBzb2xpZDt9IC8qIGxlYXZlIG91dCBjb2xv
cj8gKi8KCi5mbC1oaWdobGlnaHQteWVsbG93LCAuZmwtaGlnaGxpZ2h0LWhvdmVyLXllbGxvdzpo
b3ZlciwgLmZsLWhpZ2hsaWdodC1mb2N1cy15ZWxsb3c6Zm9jdXMge2JhY2tncm91bmQtY29sb3I6
I0ZGMDsgYmFja2dyb3VuZC1pbWFnZTpub25lO30KLmZsLWhpZ2hsaWdodC1ncmVlbiwgLmZsLWhp
Z2hsaWdodC1ob3Zlci1ncmVlbjpob3ZlciwgLmZsLWhpZ2hsaWdodC1mb2N1cy1ncmVlbjpmb2N1
cyB7YmFja2dyb3VuZC1jb2xvcjojMEYwOyBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7fQouZmwtaGln
aGxpZ2h0LWJsdWUsIC5mbC1oaWdobGlnaHQtaG92ZXItYmx1ZTpob3ZlciwgLmZsLWhpZ2hsaWdo
dC1mb2N1cy1ibHVlOmZvY3VzIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMEY7IGJhY2tncm91bmQtaW1h
Z2U6bm9uZTt9CgoKWHRleHQvY3Nz1AUGBwgdHh8gXxBLaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcv
cmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRlcmVyL2Nzcy9SZW9yZGVyZXIuY3NzTxEEE2Jw
bGlzdDAw1AECAwQFBmJjWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0H
CCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0e
HxcgIVIkNlMkMTBSJDJSJDdSJDNTJDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AI
gAIQAIAagByABYAbgAYQAdMjECQlJidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QS2h0dHA6
Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9jb21wb25lbnRzL3Jlb3JkZXJlci9jc3Mv
UmVvcmRlcmVyLmNzc9IqKywtWiRjbGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiLi9VTlNVUkxYTlNP
YmplY3QjQbjRAC6aQsAQyNMzNBA1PkdXTlMua2V5c1pOUy5vYmplY3RzqDY3ODk6Ozw9gAmACoAL
gAyADYAOgA+AEKg/QEFCQ0RFRoARgBKAE4AUgBWAFoAXgBiAGVZTZXJ2ZXJcQ29udGVudC1UeXBl
VEV0YWddTGFzdC1Nb2RpZmllZFREYXRlXUFjY2VwdC1SYW5nZXNeQ29udGVudC1MZW5ndGhaQ29u
bmVjdGlvbl8QFkFwYWNoZS8yLjIuMTUgKENlbnRPUylYdGV4dC9jc3NfEBoiNGUwMzQ1LTdlNi00
YWYzM2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBN
YXIgMjAxNCAyMDo1MDo1NCBHTVRVYnl0ZXNUMjAyMlVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZ
LxEH5lh0ZXh0L2Nzc9IqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVz
cG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVz
cG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCp
AKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BLAExATwBRQFLAU4BVAFdAWYBaAFvAXcB
ggGLAY0BjwGRAZMBlQGXAZkBmwGkAaYBqAGqAawBrgGwAbIBtAG2Ab0BygHPAd0B4gHwAf8CCgIj
AiwCSQJpAokCjwKUApoCnwKsAq8CsgK7AsAC1ALYAuwC+gMMAw8DJQAAAAAAAAIBAAAAAAAAAGYA
AAAAAAAAAAAAAAAAAAMnTxEH5i5mbC1yZW9yZGVyZXItaW5zdHJ1Y3Rpb25zIHsKICAgIGJhY2tn
cm91bmQtY29sb3I6I0Y1RkZCMDsKICAgIGJvcmRlcjoxcHggc29saWQgI0ZGRTM5MDsKICAgIG1h
cmdpbjo1cHg7CiAgICBwYWRkaW5nOjEwcHg7Cn0KLmZsLXJlb3JkZXJlci1pbnN0cnVjdGlvbnMg
c3Ryb25nIHsKICAgIGRpc3BsYXk6YmxvY2s7Cn0KLyogQmFzZSBBcHBlYXJhbmNlICsgU3RhdGVz
ICovCi5mbC1yZW9yZGVyZXItbW92YWJsZS1kZWZhdWx0IHsKICAgIGN1cnNvcjptb3ZlOwp9IAoK
LyogYXV0b21hdGljYWxseSBhcHBsaWVkIHRoZSBrZXlib2FyZCBzZWxlY3RlZCByZS1vcmRlcmFi
bGUgaXRlbSAqLwouZmwtcmVvcmRlcmVyLW1vdmFibGUtc2VsZWN0ZWQgewoJYmFja2dyb3VuZC1j
b2xvcjogbGlnaHR5ZWxsb3c7Cn0KCi8qIGF1dG9tYXRpY2FsbHkgYXBwbGllZCBhcyB0aGUgbW91
c2UgaG92ZXJzIG92ZXIgcmUtb3JkZXJhYmxlIGl0ZW0gKi8KLmZsLXJlb3JkZXJlci1tb3ZhYmxl
LWhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0eWVsbG93OyAvKiAhaW1wb3J0YW50
OzsqLwp9CgovKiBhdXRvbWF0aWNhbGx5IGFwcGxpZWQgdGhlIGtleWJvYXJkIHNlbGVjdGVkIHJl
LW9yZGVyYWJsZSBpdGVtICovCi5mbC1yZW9yZGVyZXItbW92YWJsZS1kcmFnZ2luZyB7CiAgICBi
YWNrZ3JvdW5kICAgICA6I2NjYzsgICAgCn0KCi5mbC1yZW9yZGVyZXItYXZhdGFyIHsKICAgIGN1
cnNvciAgICAgICAgICA6IG1vdmU7CiAgICBsaXN0LXN0eWxlLXR5cGUgOiBub25lOwogICAgZmls
dGVyICAgICAgICAgIDogYWxwaGEob3BhY2l0eT03NSk7CiAgICBvcGFjaXR5ICAgICAgICAgOiAw
Ljc1OyAgICAKfQoKCi5mbC1yZW9yZGVyZXItZHJvcFdhcm5pbmcgewogICAgZGlzcGxheSA6IG5v
bmU7CiAgICBwYWRkaW5nOiA1cHggMjVweDsgCiAgICBjb2xvciA6ICNmZmY7CiAgICBvcGFjaXR5
OjE7CiAgICBmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApOwogICAgYmFja2dyb3VuZDogIzkwMCB1
cmwoJy4uL2ltYWdlcy90aGVtZXMvX2NvbW1vbi9leGNsYW1hdGlvbi5wbmcnKSBuby1yZXBlYXQg
NXB4IGNlbnRlcjsKfQoKLyogRFJPUCBNQVJLRVI6IGRpZmZlcmVudCBsYXlvdXRzIG1pZ2h0IHJl
cXVpcmUgZGlmZmVyZW50IGRyb3AgbWFya2VyIGFwcGVhcmFuY2VzICovCi8qIEhvcml6b250YWwg
ZHJvcCBtYXJrZXI6IGRlc2lnbmVkIGZvciB2ZXJ0aWNhbCBsYXlvdXRzIChkZWZhdWx0KSAqLwou
ZmwtcmVvcmRlcmVyLXZlcnRpY2FsTGF5b3V0IC5mbC1yZW9yZGVyZXItZHJvcE1hcmtlciwgCi5m
bHVpZC12ZXJ0aWNhbC1vcmRlciAuZmwtcmVvcmRlcmVyLWRyb3BNYXJrZXJ7CiAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjRjAwOwogICAgaGVpZ2h0ICAgICAgICAgIDogMDsKICAgIHBhZGRpbmcgICAg
ICAgICA6IDJweCAwIDAgMDsKICAgIGJvcmRlci13aWR0aCAgICA6IDA7CiAgICBtYXJnaW4gICAg
ICAgICAgOiAtMnB4IDAgMCAwOwogICAgbGlzdC1zdHlsZS10eXBlIDogbm9uZTsKICAgIGZvbnQt
c2l6ZSAgICAgICA6IDA7CiAgICBsaW5lLWhlaWdodCAgICAgOiAwOwogICAgb3ZlcmZsb3cgICAg
ICAgIDogaGlkZGVuOwp9Ci8qIFZlcnRpY2FsIGRyb3AgbWFya2VyOiBkZXNpZ25lZCBmb3IgZ3Jp
ZCBvciBob3Jpem9udGFsIGxheW91dHMgKi8KLmZsLXJlb3JkZXJlci1ob3Jpem9udGFsTGF5b3V0
IC5mbC1yZW9yZGVyZXItZHJvcE1hcmtlciwKLmZsdWlkLWhvcml6b250YWwtb3JkZXIgLmZsLXJl
b3JkZXJlci1kcm9wTWFya2VyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGMDA7CiAgICBwYWRk
aW5nICAgICAgICAgOiAwIDNweDsKICAgIGJvcmRlci13aWR0aCAgICA6IDA7CiAgICBtYXJnaW4g
ICAgICAgICAgOiAwIC0zcHggIWltcG9ydGFudDsKICAgIGxpc3Qtc3R5bGUtdHlwZSA6IG5vbmU7
CiAgICBvdmVyZmxvdyAgICAgICAgOiBoaWRkZW47CiAgICB3aWR0aCAgICAgICAgICAgOiAwICFp
bXBvcnRhbnQ7Cn0KCi8qIFRoZW1lZCBBcHBlYXJhbmNlICsgU3RhdGVzICovClh0ZXh0L2Nzc9QF
BgcIIiMkJV8QWmh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9kZW1vcy9yZW9y
ZGVyZXIvaW1hZ2VSZW9yZGVyZXIvY3NzL2ltYWdlUmVvcmRlcmVyLmNzc08RBCJicGxpc3QwMNQB
AgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEy
SElKS0xNTk9QUVJTVFVWV1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZT
JDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAc
gAWAG4AGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEFpodHRwOi8vZmx1aWRw
cm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZGVtb3MvcmVvcmRlcmVyL2ltYWdlUmVvcmRlcmVyL2Nz
cy9pbWFnZVJlb3JkZXJlci5jc3PSKissLVokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoi4vVU5T
VVJMWE5TT2JqZWN0I0G40QAumvP1EMjTMzQQNT5HV05TLmtleXNaTlMub2JqZWN0c6g2Nzg5Ojs8
PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaAF4AYgBlWU2VydmVyXENvbnRl
bnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQtUmFuZ2VzXkNvbnRlbnQtTGVu
Z3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1MpWHRleHQvY3NzXxAaIjRlMDU0
Ni01ZWEtNGFmMzNkMDEzZTQwMCJfEB1UaHUsIDEzIE9jdCAyMDExIDIwOjE2OjE2IEdNVF8QHVdl
ZCwgMTIgTWFyIDIwMTQgMjA6NTA6NTQgR01UVWJ5dGVzVDE1MTRVY2xvc2XSKitZWlxOU0RpY3Rp
b25hcnmiWS8RBepYdGV4dC9jc3PSKiteX18QEU5TSFRUUFVSTFJlc3BvbnNlo2BhL18QEU5TSFRU
UFVSTFJlc3BvbnNlXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRZGVfEBNXZWJSZXNv
dXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBXAF0AeAB7AH8AggCFAIgAjACPAJYAmQCcAJ8A
ogClAKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9AMQAzADYANoA3ADeATsBQAFLAVQBWgFdAWMBbAF1
AXcBfgGGAZEBmgGcAZ4BoAGiAaQBpgGoAaoBswG1AbcBuQG7Ab0BvwHBAcMBxQHMAdkB3gHsAfEB
/wIOAhkCMgI7AlgCeAKYAp4CowKpAq4CuwK+AsECygLPAuMC5wL7AwkDGwMeAzQAAAAAAAACAQAA
AAAAAABmAAAAAAAAAAAAAAAAAAADNk8RBervu78KLmZsLWltYWdlUmVvcmRlcmVyIHsKICAgIGNs
ZWFyOmJvdGg7Cn0KLmZsLXJlb3JkZXJlci1ob3Jpem9udGFsTGF5b3V0IC5mbC1pbWFnZVJlb3Jk
ZXJlci1pdGVtIHsKICAgIGZsb2F0OmxlZnQ7IAogICAgd2lkdGg6MTUwcHg7IAogICAgaGVpZ2h0
OjE1MHB4OyAKICAgIG1hcmdpbjogNXB4OyAKICAgIHRleHQtYWxpZ246Y2VudGVyOyAKICAgIG92
ZXJmbG93OmhpZGRlbjsgCiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgIGJvcmRlcjoxcHggc29s
aWQgIzAwMDsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDsKICAgIGN1cnNvcjogbW92ZTsKICAg
IHRleHQtZGVjb3JhdGlvbjpub25lOwp9Ci5mbC1yZW9yZGVyZXItaG9yaXpvbnRhbExheW91dCAu
ZmwtaW1hZ2VSZW9yZGVyZXItaXRlbSBpbWcge2Rpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7fQou
ZmwtcmVvcmRlcmVyLWhvcml6b250YWxMYXlvdXQgLmZsLWltYWdlUmVvcmRlcmVyLWNhcHRpb24g
ewogICAgcG9zaXRpb246YWJzb2x1dGU7IAogICAgYm90dG9tOjA7IAogICAgbGVmdDowOyAKICAg
IHdpZHRoOjEwMCU7IAogICAgdGV4dC1hbGlnbjpjZW50ZXI7IAogICAgYmFja2dyb3VuZC1jb2xv
cjojMDAwOyAKICAgIGNvbG9yOiNmZmY7IAogICAgcGFkZGluZzo1cHg7Cn0KCi5mbC1yZW9yZGVy
ZXItaG9yaXpvbnRhbExheW91dCAuZmwtaW1hZ2VSZW9yZGVyZXItaXRlbTpob3ZlciB7CiAgICBi
b3JkZXItY29sb3I6I0ZGNDIwMDsKICAgIGJhY2tncm91bmQtY29sb3I6I0ZGNDIwMDsKfQouZmwt
cmVvcmRlcmVyLWhvcml6b250YWxMYXlvdXQgLmZsLWltYWdlUmVvcmRlcmVyLWl0ZW06aG92ZXIg
LmZsLWltYWdlUmVvcmRlcmVyLWNhcHRpb24gewogICAgYmFja2dyb3VuZC1jb2xvcjojRkY0MjAw
OwogICAgY29sb3I6IzAwMDsKfQouZmwtcmVvcmRlcmVyLWhvcml6b250YWxMYXlvdXQgLmZsLXJl
b3JkZXJlci1tb3ZhYmxlLXNlbGVjdGVkIHsKICAgIGJvcmRlci1jb2xvcjojY2NjOwogICAgYmFj
a2dyb3VuZC1jb2xvcjojY2NjOwp9Ci5mbC1yZW9yZGVyZXItaG9yaXpvbnRhbExheW91dCAuZmwt
cmVvcmRlcmVyLW1vdmFibGUtc2VsZWN0ZWQgLmZsLWltYWdlUmVvcmRlcmVyLWNhcHRpb24gewog
ICAgYmFja2dyb3VuZC1jb2xvcjojY2NjOwogICAgY29sb3I6IzAwMDsKfQouZmwtcmVvcmRlcmVy
LWhvcml6b250YWxMYXlvdXQgLmZsLXJlb3JkZXJlci1kcm9wTWFya2VyIHsKICAgIGhlaWdodDox
NTBweDsgCiAgICBmbG9hdDpsZWZ0Owp9Ci5mbC1yZW9yZGVyZXItaG9yaXpvbnRhbExheW91dCAu
ZmwtcmVvcmRlcmVyLW1vdmFibGUtZHJhZ2dpbmcgewogICAgYm9yZGVyLWNvbG9yOiNGRjQyMDA7
CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRjQyMDA7Cn0KLmZsLXJlb3JkZXJlci1ob3Jpem9udGFs
TGF5b3V0IC5mbC1yZW9yZGVyZXItbW92YWJsZS1kcmFnZ2luZyAuZmwtaW1hZ2VSZW9yZGVyZXIt
Y2FwdGlvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRjQyMDA7CiAgICBjb2xvcjojMDAwOwp9
Clh0ZXh0L2Nzc9QFBgcIJygpKl8QQWh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEu
NC9saWIvanF1ZXJ5L2NvcmUvanMvanF1ZXJ5LmpzTxEEIWJwbGlzdDAw1AECAwQFBmJjWCR2ZXJz
aW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAbMTJISUpLTE1OT1BRUlNU
VVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNT
JDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagByABYAbgAYQAdMjECQl
JidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QQWh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3Jl
bGVhc2VzLzEuNC9saWIvanF1ZXJ5L2NvcmUvanMvanF1ZXJ5Lmpz0iorLC1aJGNsYXNzbmFtZVgk
Y2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr3ZXhDI0zM0EDU+R1dOUy5rZXlz
Wk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVGgBGAEoATgBSAFYAW
gBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0
LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9T
KV8QD3RleHQvamF2YXNjcmlwdF8QHCI0ZTA2MjEtMzk1ZjMtNGFmMzNkMDEzZTQwMCJfEB1UaHUs
IDEzIE9jdCAyMDExIDIwOjE2OjE2IEdNVF8QHVdlZCwgMTIgTWFyIDIwMTQgMjA6NTA6NTQgR01U
VWJ5dGVzVjIzNDk5NVVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxIAA5XzXxAPdGV4dC9qYXZh
c2NyaXB00iorXl9fEBFOU0hUVFBVUkxSZXNwb25zZaNgYS9fEBFOU0hUVFBVUkxSZXNwb25zZV1O
U1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0WRlXxATV2ViUmVzb3VyY2VSZXNwb25zZYAB
AAgAEQAaACMALQAyADcAVwBdAHgAewB/AIIAhQCIAIwAjwCWAJkAnACfAKIApQCnAKkAqwCtAK8A
sQCzALUAtwC5ALsAvQDEAMwA2ADaANwA3gEiAScBMgE7AUEBRAFKAVMBXAFeAWUBbQF4AYEBgwGF
AYcBiQGLAY0BjwGRAZoBnAGeAaABogGkAaYBqAGqAawBswHAAcUB0wHYAeYB9QIAAhkCKwJKAmoC
igKQApcCnQKiAq8CsgK3AskCzgLiAuYC+gMIAxoDHQMzAAAAAAAAAgEAAAAAAAAAZgAAAAAAAAAA
AAAAAAAAAzVPEgADlfMvKiEKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS42LjEKICog
aHR0cDovL2pxdWVyeS5jb20vCiAqCiAqIENvcHlyaWdodCAyMDExLCBKb2huIFJlc2lnCiAqIER1
YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiBo
dHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIEluY2x1ZGVzIFNpenpsZS5qcwogKiBodHRw
Oi8vc2l6emxlanMuY29tLwogKiBDb3B5cmlnaHQgMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbgog
KiBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCiAqCiAqIERh
dGU6IFRodSBNYXkgMTIgMTU6MDQ6MzYgMjAxMSAtMDQwMAogKi8KKGZ1bmN0aW9uKCB3aW5kb3cs
IHVuZGVmaW5lZCApIHsKCi8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3
aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3Vt
ZW50LAoJbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwKCWxvY2F0aW9uID0gd2luZG93Lmxv
Y2F0aW9uOwp2YXIgalF1ZXJ5ID0gKGZ1bmN0aW9uKCkgewoKLy8gRGVmaW5lIGEgbG9jYWwgY29w
eSBvZiBqUXVlcnkKdmFyIGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsK
CQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVj
dG9yICdlbmhhbmNlZCcKCQlyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29u
dGV4dCwgcm9vdGpRdWVyeSApOwoJfSwKCgkvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBv
dmVyd3JpdGUKCV9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAoKCS8vIE1hcCBvdmVyIHRoZSAkIGlu
IGNhc2Ugb2Ygb3ZlcndyaXRlCglfJCA9IHdpbmRvdy4kLAoKCS8vIEEgY2VudHJhbCByZWZlcmVu
Y2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KQoJcm9vdGpRdWVyeSwKCgkvLyBBIHNpbXBs
ZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncyBvciBJRCBzdHJpbmdzCgkvLyAoYm90aCBv
ZiB3aGljaCB3ZSBvcHRpbWl6ZSBmb3IpCglxdWlja0V4cHIgPSAvXig/OltePF0qKDxbXHdcV10r
PilbXj5dKiR8IyhbXHdcLV0qKSQpLywKCgkvLyBDaGVjayBpZiBhIHN0cmluZyBoYXMgYSBub24t
d2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gaXQKCXJub3R3aGl0ZSA9IC9cUy8sCgoJLy8gVXNlZCBm
b3IgdHJpbW1pbmcgd2hpdGVzcGFjZQoJdHJpbUxlZnQgPSAvXlxzKy8sCgl0cmltUmlnaHQgPSAv
XHMrJC8sCgoJLy8gQ2hlY2sgZm9yIGRpZ2l0cwoJcmRpZ2l0ID0gL1xkLywKCgkvLyBNYXRjaCBh
IHN0YW5kYWxvbmUgdGFnCglyc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86PFwvXDE+KT8k
LywKCgkvLyBKU09OIFJlZ0V4cAoJcnZhbGlkY2hhcnMgPSAvXltcXSw6e31cc10qJC8sCglydmFs
aWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLAoJcnZhbGlk
dG9rZW5zID0gLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/
OltlRV1bK1wtXT9cZCspPy9nLAoJcnZhbGlkYnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsv
ZywKCgkvLyBVc2VyYWdlbnQgUmVnRXhwCglyd2Via2l0ID0gLyh3ZWJraXQpWyBcL10oW1x3Ll0r
KS8sCglyb3BlcmEgPSAvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sCglybXNp
ZSA9IC8obXNpZSkgKFtcdy5dKykvLAoJcm1vemlsbGEgPSAvKG1vemlsbGEpKD86Lio/IHJ2Oihb
XHcuXSspKT8vLAoKCS8vIEtlZXAgYSBVc2VyQWdlbnQgc3RyaW5nIGZvciB1c2Ugd2l0aCBqUXVl
cnkuYnJvd3NlcgoJdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudCwKCgkvLyBGb3IgbWF0
Y2hpbmcgdGhlIGVuZ2luZSBhbmQgdmVyc2lvbiBvZiB0aGUgYnJvd3NlcgoJYnJvd3Nlck1hdGNo
LAoKCS8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQoJcmVhZHlMaXN0LAoKCS8vIFRo
ZSByZWFkeSBldmVudCBoYW5kbGVyCglET01Db250ZW50TG9hZGVkLAoKCS8vIFNhdmUgYSByZWZl
cmVuY2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKCXRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZywKCWhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCglwdXNo
ID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCglzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSwK
CXRyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW0sCglpbmRleE9mID0gQXJyYXkucHJvdG90eXBl
LmluZGV4T2YsCgoJLy8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKCWNsYXNzMnR5cGUgPSB7fTsK
CmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7Cgljb25zdHJ1Y3RvcjogalF1ZXJ5LAoJ
aW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgewoJCXZhciBt
YXRjaCwgZWxlbSwgcmV0LCBkb2M7CgoJCS8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwgb3IgJCh1
bmRlZmluZWQpCgkJaWYgKCAhc2VsZWN0b3IgKSB7CgkJCXJldHVybiB0aGlzOwoJCX0KCgkJLy8g
SGFuZGxlICQoRE9NRWxlbWVudCkKCQlpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewoJCQl0aGlz
LmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7CgkJCXRoaXMubGVuZ3RoID0gMTsKCQkJcmV0
dXJuIHRoaXM7CgkJfQoKCQkvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9w
dGltaXplIGZpbmRpbmcgaXQKCQlpZiAoIHNlbGVjdG9yID09PSAiYm9keSIgJiYgIWNvbnRleHQg
JiYgZG9jdW1lbnQuYm9keSApIHsKCQkJdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7CgkJCXRoaXNb
MF0gPSBkb2N1bWVudC5ib2R5OwoJCQl0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7CgkJCXRoaXMu
bGVuZ3RoID0gMTsKCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQkvLyBIYW5kbGUgSFRNTCBzdHJpbmdz
CgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewoJCQkvLyBBcmUgd2UgZGVh
bGluZyB3aXRoIEhUTUwgc3RyaW5nIG9yIGFuIElEPwoJCQlpZiAoIHNlbGVjdG9yLmNoYXJBdCgw
KSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAi
PiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CgkJCQkvLyBBc3N1bWUgdGhhdCBzdHJpbmdz
IHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBj
aGVjawoJCQkJbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CgoJCQl9IGVsc2UgewoJ
CQkJbWF0Y2ggPSBxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKCQkJfQoKCQkJLy8gVmVyaWZ5
IGEgbWF0Y2gsIGFuZCB0aGF0IG5vIGNvbnRleHQgd2FzIHNwZWNpZmllZCBmb3IgI2lkCgkJCWlm
ICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKCgkJCQkvLyBIQU5ETEU6ICQo
aHRtbCkgLT4gJChhcnJheSkKCQkJCWlmICggbWF0Y2hbMV0gKSB7CgkJCQkJY29udGV4dCA9IGNv
bnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29udGV4dDsKCQkJCQlkb2Mg
PSAoY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQp
OwoKCQkJCQkvLyBJZiBhIHNpbmdsZSBzdHJpbmcgaXMgcGFzc2VkIGluIGFuZCBpdCdzIGEgc2lu
Z2xlIHRhZwoJCQkJCS8vIGp1c3QgZG8gYSBjcmVhdGVFbGVtZW50IGFuZCBza2lwIHRoZSByZXN0
CgkJCQkJcmV0ID0gcnNpbmdsZVRhZy5leGVjKCBzZWxlY3RvciApOwoKCQkJCQlpZiAoIHJldCAp
IHsKCQkJCQkJaWYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgewoJCQkJCQkJ
c2VsZWN0b3IgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07CgkJCQkJCQlq
UXVlcnkuZm4uYXR0ci5jYWxsKCBzZWxlY3RvciwgY29udGV4dCwgdHJ1ZSApOwoKCQkJCQkJfSBl
bHNlIHsKCQkJCQkJCXNlbGVjdG9yID0gWyBkb2MuY3JlYXRlRWxlbWVudCggcmV0WzFdICkgXTsK
CQkJCQkJfQoKCQkJCQl9IGVsc2UgewoJCQkJCQlyZXQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCgg
WyBtYXRjaFsxXSBdLCBbIGRvYyBdICk7CgkJCQkJCXNlbGVjdG9yID0gKHJldC5jYWNoZWFibGUg
PyBqUXVlcnkuY2xvbmUocmV0LmZyYWdtZW50KSA6IHJldC5mcmFnbWVudCkuY2hpbGROb2RlczsK
CQkJCQl9CgoJCQkJCXJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNlbGVjdG9yICk7CgoJCQkJ
Ly8gSEFORExFOiAkKCIjaWQiKQoJCQkJfSBlbHNlIHsKCQkJCQllbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7CgoJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0
Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCgkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8g
bG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwoJCQkJCWlmICggZWxlbSAmJiBlbGVtLnBhcmVu
dE5vZGUgKSB7CgkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0
dXJuIGl0ZW1zCgkJCQkJCS8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAoJCQkJCQlpZiAoIGVsZW0u
aWQgIT09IG1hdGNoWzJdICkgewoJCQkJCQkJcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0
b3IgKTsKCQkJCQkJfQoKCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQg
ZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAoJCQkJCQl0aGlzLmxlbmd0aCA9IDE7CgkJ
CQkJCXRoaXNbMF0gPSBlbGVtOwoJCQkJCX0KCgkJCQkJdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7
CgkJCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwoJCQkJCXJldHVybiB0aGlzOwoJCQkJfQoK
CQkJLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKCQkJfSBlbHNlIGlmICggIWNvbnRleHQgfHwg
Y29udGV4dC5qcXVlcnkgKSB7CgkJCQlyZXR1cm4gKGNvbnRleHQgfHwgcm9vdGpRdWVyeSkuZmlu
ZCggc2VsZWN0b3IgKTsKCgkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQoJCQkvLyAod2hp
Y2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKCQkJfSBlbHNl
IHsKCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3Ig
KTsKCQkJfQoKCQkvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCgkJLy8gU2hvcnRjdXQgZm9yIGRvY3Vt
ZW50IHJlYWR5CgkJfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7
CgkJCXJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwoJCX0KCgkJaWYgKHNlbGVj
dG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQpIHsKCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9y
LnNlbGVjdG9yOwoJCQl0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0OwoJCX0KCgkJcmV0
dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7Cgl9LAoKCS8vIFN0YXJ0IHdp
dGggYW4gZW1wdHkgc2VsZWN0b3IKCXNlbGVjdG9yOiAiIiwKCgkvLyBUaGUgY3VycmVudCB2ZXJz
aW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCglqcXVlcnk6ICIxLjYuMSIsCgoJLy8gVGhlIGRlZmF1
bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCglsZW5ndGg6IDAsCgoJLy8gVGhlIG51
bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKCXNp
emU6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmxlbmd0aDsKCX0sCgoJdG9BcnJheTogZnVu
Y3Rpb24oKSB7CgkJcmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMsIDAgKTsKCX0sCgoJLy8gR2V0IHRo
ZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUgoJLy8gR2V0IHRoZSB3
aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKCWdldDogZnVuY3Rpb24o
IG51bSApIHsKCQlyZXR1cm4gbnVtID09IG51bGwgPwoKCQkJLy8gUmV0dXJuIGEgJ2NsZWFuJyBh
cnJheQoJCQl0aGlzLnRvQXJyYXkoKSA6CgoJCQkvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CgkJ
CSggbnVtIDwgMCA/IHRoaXNbIHRoaXMubGVuZ3RoICsgbnVtIF0gOiB0aGlzWyBudW0gXSApOwoJ
fSwKCgkvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0
YWNrCgkvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKCXB1c2hTdGFj
azogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKCQkvLyBCdWlsZCBhIG5ldyBq
UXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAoJCXZhciByZXQgPSB0aGlzLmNvbnN0cnVjdG9yKCk7
CgoJCWlmICggalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSB7CgkJCXB1c2guYXBwbHkoIHJldCwg
ZWxlbXMgKTsKCgkJfSBlbHNlIHsKCQkJalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW1zICk7CgkJfQoK
CQkvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQoJ
CXJldC5wcmV2T2JqZWN0ID0gdGhpczsKCgkJcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CgoJ
CWlmICggbmFtZSA9PT0gImZpbmQiICkgewoJCQlyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9y
ICsgKHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIikgKyBzZWxlY3RvcjsKCQl9IGVsc2UgaWYgKCBu
YW1lICkgewoJCQlyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgIi4iICsgbmFtZSArICIo
IiArIHNlbGVjdG9yICsgIikiOwoJCX0KCgkJLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxl
bWVudCBzZXQKCQlyZXR1cm4gcmV0OwoJfSwKCgkvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2
ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgoJLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJn
dW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKCS8vIG9ubHkgdXNlZCBp
bnRlcm5hbGx5LikKCWVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKCQlyZXR1cm4g
alF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7Cgl9LAoKCXJlYWR5OiBmdW5jdGlv
biggZm4gKSB7CgkJLy8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKCQlqUXVlcnkuYmluZFJlYWR5KCk7
CgoJCS8vIEFkZCB0aGUgY2FsbGJhY2sKCQlyZWFkeUxpc3QuZG9uZSggZm4gKTsKCgkJcmV0dXJu
IHRoaXM7Cgl9LAoKCWVxOiBmdW5jdGlvbiggaSApIHsKCQlyZXR1cm4gaSA9PT0gLTEgPwoJCQl0
aGlzLnNsaWNlKCBpICkgOgoJCQl0aGlzLnNsaWNlKCBpLCAraSArIDEgKTsKCX0sCgoJZmlyc3Q6
IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVxKCAwICk7Cgl9LAoKCWxhc3Q6IGZ1bmN0aW9u
KCkgewoJCXJldHVybiB0aGlzLmVxKCAtMSApOwoJfSwKCglzbGljZTogZnVuY3Rpb24oKSB7CgkJ
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCgkJ
CSJzbGljZSIsIHNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikgKTsKCX0sCgoJbWFwOiBm
dW5jdGlvbiggY2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFw
KHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewoJCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxl
bSwgaSwgZWxlbSApOwoJCX0pKTsKCX0sCgoJZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhp
cy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7Cgl9LAoKCS8vIEZvciBpbnRl
cm5hbCB1c2Ugb25seS4KCS8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxp
a2UgYSBqUXVlcnkgbWV0aG9kLgoJcHVzaDogcHVzaCwKCXNvcnQ6IFtdLnNvcnQsCglzcGxpY2U6
IFtdLnNwbGljZQp9OwoKLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3Rv
dHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgpqUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBq
UXVlcnkuZm47CgpqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkg
ewoJdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAoJCXRh
cmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwKCQlpID0gMSwKCQlsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoLAoJCWRlZXAgPSBmYWxzZTsKCgkvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9u
CglpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKCQlkZWVwID0gdGFyZ2V0OwoJ
CXRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKCQkvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0
aGUgdGFyZ2V0CgkJaSA9IDI7Cgl9CgoJLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBz
dHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCglpZiAoIHR5cGVvZiB0
YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkgewoJCXRh
cmdldCA9IHt9OwoJfQoKCS8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3Vt
ZW50IGlzIHBhc3NlZAoJaWYgKCBsZW5ndGggPT09IGkgKSB7CgkJdGFyZ2V0ID0gdGhpczsKCQkt
LWk7Cgl9CgoJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJLy8gT25seSBkZWFsIHdpdGgg
bm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcwoJCWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkg
XSkgIT0gbnVsbCApIHsKCQkJLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAoJCQlmb3IgKCBuYW1l
IGluIG9wdGlvbnMgKSB7CgkJCQlzcmMgPSB0YXJnZXRbIG5hbWUgXTsKCQkJCWNvcHkgPSBvcHRp
b25zWyBuYW1lIF07CgoJCQkJLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAoJCQkJaWYgKCB0
YXJnZXQgPT09IGNvcHkgKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJLy8gUmVjdXJzZSBp
ZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCgkJCQlpZiAoIGRlZXAgJiYg
Y29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpR
dWVyeS5pc0FycmF5KGNvcHkpKSApICkgewoJCQkJCWlmICggY29weUlzQXJyYXkgKSB7CgkJCQkJ
CWNvcHlJc0FycmF5ID0gZmFsc2U7CgkJCQkJCWNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5
KHNyYykgPyBzcmMgOiBbXTsKCgkJCQkJfSBlbHNlIHsKCQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1
ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9OwoJCQkJCX0KCgkJCQkJLy8gTmV2ZXIg
bW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCgkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBq
UXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwoKCQkJCS8vIERvbid0IGJyaW5nIGlu
IHVuZGVmaW5lZCB2YWx1ZXMKCQkJCX0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsK
CQkJCQl0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLy8gUmV0dXJu
IHRoZSBtb2RpZmllZCBvYmplY3QKCXJldHVybiB0YXJnZXQ7Cn07CgpqUXVlcnkuZXh0ZW5kKHsK
CW5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewoJCWlmICggd2luZG93LiQgPT09IGpRdWVy
eSApIHsKCQkJd2luZG93LiQgPSBfJDsKCQl9CgoJCWlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5
ID09PSBqUXVlcnkgKSB7CgkJCXdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OwoJCX0KCgkJcmV0dXJu
IGpRdWVyeTsKCX0sCgoJLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1
ZSBvbmNlIGl0IG9jY3Vycy4KCWlzUmVhZHk6IGZhbHNlLAoKCS8vIEEgY291bnRlciB0byB0cmFj
ayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKCS8vIHRoZSByZWFkeSBldmVudCBm
aXJlcy4gU2VlICM2NzgxCglyZWFkeVdhaXQ6IDEsCgoJLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhl
IHJlYWR5IGV2ZW50Cglob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgewoJCWlmICggaG9sZCAp
IHsKCQkJalF1ZXJ5LnJlYWR5V2FpdCsrOwoJCX0gZWxzZSB7CgkJCWpRdWVyeS5yZWFkeSggdHJ1
ZSApOwoJCX0KCX0sCgoJLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQoJcmVhZHk6IGZ1
bmN0aW9uKCB3YWl0ICkgewoJCS8vIEVpdGhlciBhIHJlbGVhc2VkIGhvbGQgb3IgYW4gRE9NcmVh
ZHkvbG9hZCBldmVudCBhbmQgbm90IHlldCByZWFkeQoJCWlmICggKHdhaXQgPT09IHRydWUgJiYg
IS0talF1ZXJ5LnJlYWR5V2FpdCkgfHwgKHdhaXQgIT09IHRydWUgJiYgIWpRdWVyeS5pc1JlYWR5
KSApIHsKCQkJLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBn
ZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgoJCQlpZiAoICFkb2N1bWVu
dC5ib2R5ICkgewoJCQkJcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOwoJCQl9
CgoJCQkvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKCQkJalF1ZXJ5LmlzUmVhZHkg
PSB0cnVlOwoKCQkJLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1l
bnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKCQkJaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5
LnJlYWR5V2FpdCA+IDAgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIElmIHRoZXJlIGFyZSBm
dW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKCQkJcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1
bWVudCwgWyBqUXVlcnkgXSApOwoKCQkJLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRz
CgkJCWlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7CgkJCQlqUXVlcnkoIGRvY3VtZW50ICkudHJp
Z2dlciggInJlYWR5IiApLnVuYmluZCggInJlYWR5IiApOwoJCQl9CgkJfQoJfSwKCgliaW5kUmVh
ZHk6IGZ1bmN0aW9uKCkgewoJCWlmICggcmVhZHlMaXN0ICkgewoJCQlyZXR1cm47CgkJfQoKCQly
ZWFkeUxpc3QgPSBqUXVlcnkuX0RlZmVycmVkKCk7CgoJCS8vIENhdGNoIGNhc2VzIHdoZXJlICQo
ZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZQoJCS8vIGJyb3dzZXIgZXZlbnQg
aGFzIGFscmVhZHkgb2NjdXJyZWQuCgkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29t
cGxldGUiICkgewoJCQkvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0
cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKCQkJcmV0dXJuIHNldFRpbWVvdXQoIGpR
dWVyeS5yZWFkeSwgMSApOwoJCX0KCgkJLy8gTW96aWxsYSwgT3BlcmEgYW5kIHdlYmtpdCBuaWdo
dGxpZXMgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBldmVudAoJCWlmICggZG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lciApIHsKCQkJLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjawoJCQlkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2Fk
ZWQsIGZhbHNlICk7CgoJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2ls
bCBhbHdheXMgd29yawoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnku
cmVhZHksIGZhbHNlICk7CgoJCS8vIElmIElFIGV2ZW50IG1vZGVsIGlzIHVzZWQKCQl9IGVsc2Ug
aWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHsKCQkJLy8gZW5zdXJlIGZpcmluZyBiZWZvcmUg
b25sb2FkLAoJCQkvLyBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKCQkJZG9j
dW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVk
ICk7CgoJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMg
d29yawoJCQl3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxvYWQiLCBqUXVlcnkucmVhZHkgKTsKCgkJ
CS8vIElmIElFIGFuZCBub3QgYSBmcmFtZQoJCQkvLyBjb250aW51YWxseSBjaGVjayB0byBzZWUg
aWYgdGhlIGRvY3VtZW50IGlzIHJlYWR5CgkJCXZhciB0b3BsZXZlbCA9IGZhbHNlOwoKCQkJdHJ5
IHsKCQkJCXRvcGxldmVsID0gd2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsOwoJCQl9IGNhdGNo
KGUpIHt9CgoJCQlpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCAmJiB0b3Bs
ZXZlbCApIHsKCQkJCWRvU2Nyb2xsQ2hlY2soKTsKCQkJfQoJCX0KCX0sCgoJLy8gU2VlIHRlc3Qv
dW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KCS8vIFNpbmNl
IHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKCS8vIGFy
ZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCglpc0Z1bmN0
aW9uOiBmdW5jdGlvbiggb2JqICkgewoJCXJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiZnVu
Y3Rpb24iOwoJfSwKCglpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmogKSB7
CgkJcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJheSI7Cgl9LAoKCS8vIEEgY3J1ZGUg
d2F5IG9mIGRldGVybWluaW5nIGlmIGFuIG9iamVjdCBpcyBhIHdpbmRvdwoJaXNXaW5kb3c6IGZ1
bmN0aW9uKCBvYmogKSB7CgkJcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiAm
JiAic2V0SW50ZXJ2YWwiIGluIG9iajsKCX0sCgoJaXNOYU46IGZ1bmN0aW9uKCBvYmogKSB7CgkJ
cmV0dXJuIG9iaiA9PSBudWxsIHx8ICFyZGlnaXQudGVzdCggb2JqICkgfHwgaXNOYU4oIG9iaiAp
OwoJfSwKCgl0eXBlOiBmdW5jdGlvbiggb2JqICkgewoJCXJldHVybiBvYmogPT0gbnVsbCA/CgkJ
CVN0cmluZyggb2JqICkgOgoJCQljbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKG9iaikgXSB8fCAi
b2JqZWN0IjsKCX0sCgoJaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKCQkvLyBNdXN0
IGJlIGFuIE9iamVjdC4KCQkvLyBCZWNhdXNlIG9mIElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sg
dGhlIHByZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4KCQkvLyBNYWtlIHN1cmUg
dGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMg
d2VsbAoJCWlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmou
bm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKCQkJcmV0dXJuIGZhbHNlOwoJ
CX0KCgkJLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAoJCWlm
ICggb2JqLmNvbnN0cnVjdG9yICYmCgkJCSFoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIp
ICYmCgkJCSFoYXNPd24uY2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5
cGVPZiIpICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkvLyBPd24gcHJvcGVydGllcyBhcmUg
ZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKCQkvLyBpZiBsYXN0IG9uZSBpcyBv
d24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4KCgkJdmFyIGtleTsKCQlmb3IgKCBrZXkg
aW4gb2JqICkge30KCgkJcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKCBv
YmosIGtleSApOwoJfSwKCglpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewoJCWZvciAo
IHZhciBuYW1lIGluIG9iaiApIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gdHJ1ZTsK
CX0sCgoJZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CgkJdGhyb3cgbXNnOwoJfSwKCglwYXJzZUpT
T046IGZ1bmN0aW9uKCBkYXRhICkgewoJCWlmICggdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciIHx8
ICFkYXRhICkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCS8vIE1ha2Ugc3VyZSBsZWFkaW5nL3Ry
YWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQoJCWRhdGEg
PSBqUXVlcnkudHJpbSggZGF0YSApOwoKCQkvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBu
YXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKCQlpZiAoIHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09O
LnBhcnNlICkgewoJCQlyZXR1cm4gd2luZG93LkpTT04ucGFyc2UoIGRhdGEgKTsKCQl9CgoJCS8v
IE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgoJCS8vIExvZ2ljIGJv
cnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24yLmpzCgkJaWYgKCBydmFsaWRjaGFycy50
ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKCQkJLnJlcGxhY2UoIHJ2YWxp
ZHRva2VucywgIl0iICkKCQkJLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKCgkJCXJl
dHVybiAobmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkpKCk7CgoJCX0KCQlqUXVlcnku
ZXJyb3IoICJJbnZhbGlkIEpTT046ICIgKyBkYXRhICk7Cgl9LAoKCS8vIENyb3NzLWJyb3dzZXIg
eG1sIHBhcnNpbmcKCS8vICh4bWwgJiB0bXAgdXNlZCBpbnRlcm5hbGx5KQoJcGFyc2VYTUw6IGZ1
bmN0aW9uKCBkYXRhICwgeG1sICwgdG1wICkgewoKCQlpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7
IC8vIFN0YW5kYXJkCgkJCXRtcCA9IG5ldyBET01QYXJzZXIoKTsKCQkJeG1sID0gdG1wLnBhcnNl
RnJvbVN0cmluZyggZGF0YSAsICJ0ZXh0L3htbCIgKTsKCQl9IGVsc2UgeyAvLyBJRQoJCQl4bWwg
PSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7CgkJCXhtbC5hc3luYyA9
ICJmYWxzZSI7CgkJCXhtbC5sb2FkWE1MKCBkYXRhICk7CgkJfQoKCQl0bXAgPSB4bWwuZG9jdW1l
bnRFbGVtZW50OwoKCQlpZiAoICEgdG1wIHx8ICEgdG1wLm5vZGVOYW1lIHx8IHRtcC5ub2RlTmFt
ZSA9PT0gInBhcnNlcmVycm9yIiApIHsKCQkJalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIg
KyBkYXRhICk7CgkJfQoKCQlyZXR1cm4geG1sOwoJfSwKCglub29wOiBmdW5jdGlvbigpIHt9LAoK
CS8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CgkvLyBXb3JrYXJvdW5k
cyBiYXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2NvbGwKCS8vIGh0dHA6Ly93ZWJsb2dzLmph
dmEubmV0L2Jsb2cvZHJpc2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1n
bG9iYWwtY29udGV4dAoJZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CgkJaWYgKCBkYXRh
ICYmIHJub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7CgkJCS8vIFdlIHVzZSBleGVjU2NyaXB0IG9u
IEludGVybmV0IEV4cGxvcmVyCgkJCS8vIFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gc28g
dGhhdCBjb250ZXh0IGlzIHdpbmRvdwoJCQkvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZv
eAoJCQkoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uKCBkYXRhICkgewoJCQkJd2luZG93
WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsKCQkJfSApKCBkYXRhICk7CgkJfQoJfSwK
Cglub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJcmV0dXJuIGVsZW0ubm9kZU5h
bWUgJiYgZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSBuYW1lLnRvVXBwZXJDYXNlKCk7
Cgl9LAoKCS8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKCWVhY2g6IGZ1bmN0aW9u
KCBvYmplY3QsIGNhbGxiYWNrLCBhcmdzICkgewoJCXZhciBuYW1lLCBpID0gMCwKCQkJbGVuZ3Ro
ID0gb2JqZWN0Lmxlbmd0aCwKCQkJaXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVl
cnkuaXNGdW5jdGlvbiggb2JqZWN0ICk7CgoJCWlmICggYXJncyApIHsKCQkJaWYgKCBpc09iaiAp
IHsKCQkJCWZvciAoIG5hbWUgaW4gb2JqZWN0ICkgewoJCQkJCWlmICggY2FsbGJhY2suYXBwbHko
IG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkgewoJCQkJCQlicmVhazsKCQkJCQl9
CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewoJCQkJCWlmICgg
Y2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7CgkJCQkJ
CWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkvLyBBIHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9y
IHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAoJCX0gZWxzZSB7CgkJCWlmICggaXNPYmogKSB7
CgkJCQlmb3IgKCBuYW1lIGluIG9iamVjdCApIHsKCQkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9i
amVjdFsgbmFtZSBdLCBuYW1lLCBvYmplY3RbIG5hbWUgXSApID09PSBmYWxzZSApIHsKCQkJCQkJ
YnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJZm9yICggOyBpIDwgbGVuZ3RoOyAp
IHsKCQkJCQlpZiAoIGNhbGxiYWNrLmNhbGwoIG9iamVjdFsgaSBdLCBpLCBvYmplY3RbIGkrKyBd
ICkgPT09IGZhbHNlICkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJl
dHVybiBvYmplY3Q7Cgl9LAoKCS8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hl
cmV2ZXIgcG9zc2libGUKCXRyaW06IHRyaW0gPwoJCWZ1bmN0aW9uKCB0ZXh0ICkgewoJCQlyZXR1
cm4gdGV4dCA9PSBudWxsID8KCQkJCSIiIDoKCQkJCXRyaW0uY2FsbCggdGV4dCApOwoJCX0gOgoK
CQkvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQoJCWZ1bmN0
aW9uKCB0ZXh0ICkgewoJCQlyZXR1cm4gdGV4dCA9PSBudWxsID8KCQkJCSIiIDoKCQkJCXRleHQu
dG9TdHJpbmcoKS5yZXBsYWNlKCB0cmltTGVmdCwgIiIgKS5yZXBsYWNlKCB0cmltUmlnaHQsICIi
ICk7CgkJfSwKCgkvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CgltYWtlQXJy
YXk6IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKCQl2YXIgcmV0ID0gcmVzdWx0cyB8fCBb
XTsKCgkJaWYgKCBhcnJheSAhPSBudWxsICkgewoJCQkvLyBUaGUgd2luZG93LCBzdHJpbmdzIChh
bmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKCQkJLy8gVGhlIGV4dHJhIHR5cGVvZiBm
dW5jdGlvbiBjaGVjayBpcyB0byBwcmV2ZW50IGNyYXNoZXMKCQkJLy8gaW4gU2FmYXJpIDIgKFNl
ZTogIzMwMzkpCgkJCS8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVy
cnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKCQkJdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJy
YXkgKTsKCgkJCWlmICggYXJyYXkubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIg
fHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNX
aW5kb3coIGFycmF5ICkgKSB7CgkJCQlwdXNoLmNhbGwoIHJldCwgYXJyYXkgKTsKCQkJfSBlbHNl
IHsKCQkJCWpRdWVyeS5tZXJnZSggcmV0LCBhcnJheSApOwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0
OwoJfSwKCglpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyYXkgKSB7CgoJCWlmICggaW5kZXhP
ZiApIHsKCQkJcmV0dXJuIGluZGV4T2YuY2FsbCggYXJyYXksIGVsZW0gKTsKCQl9CgoJCWZvciAo
IHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJ
CWlmICggYXJyYXlbIGkgXSA9PT0gZWxlbSApIHsKCQkJCXJldHVybiBpOwoJCQl9CgkJfQoKCQly
ZXR1cm4gLTE7Cgl9LAoKCW1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKCQl2YXIg
aSA9IGZpcnN0Lmxlbmd0aCwKCQkJaiA9IDA7CgoJCWlmICggdHlwZW9mIHNlY29uZC5sZW5ndGgg
PT09ICJudW1iZXIiICkgewoJCQlmb3IgKCB2YXIgbCA9IHNlY29uZC5sZW5ndGg7IGogPCBsOyBq
KysgKSB7CgkJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKCQkJfQoKCQl9IGVsc2UgewoJ
CQl3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5kZWZpbmVkICkgewoJCQkJZmlyc3RbIGkrKyBdID0g
c2Vjb25kWyBqKysgXTsKCQkJfQoJCX0KCgkJZmlyc3QubGVuZ3RoID0gaTsKCgkJcmV0dXJuIGZp
cnN0OwoJfSwKCglncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnYgKSB7CgkJdmFy
IHJldCA9IFtdLCByZXRWYWw7CgkJaW52ID0gISFpbnY7CgoJCS8vIEdvIHRocm91Z2ggdGhlIGFy
cmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBm
dW5jdGlvbgoJCWZvciAoIHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKysgKSB7CgkJCXJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKCQkJ
aWYgKCBpbnYgIT09IHJldFZhbCApIHsKCQkJCXJldC5wdXNoKCBlbGVtc1sgaSBdICk7CgkJCX0K
CQl9CgoJCXJldHVybiByZXQ7Cgl9LAoKCS8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25s
eQoJbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7CgkJdmFyIHZhbHVlLCBr
ZXksIHJldCA9IFtdLAoJCQlpID0gMCwKCQkJbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAoJCQkvLyBq
cXVlcnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKCQkJaXNBcnJheSA9IGVsZW1zIGlu
c3RhbmNlb2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGgg
PT09ICJudW1iZXIiICYmICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAwIF0gJiYgZWxlbXNbIGxl
bmd0aCAtMSBdICkgfHwgbGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkg
OwoKCQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRl
bXMgdG8gdGhlaXIKCQlpZiAoIGlzQXJyYXkgKSB7CgkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsr
ICkgewoJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CgoJCQkJaWYg
KCB2YWx1ZSAhPSBudWxsICkgewoJCQkJCXJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7CgkJCQl9
CgkJCX0KCgkJLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKCQl9IGVsc2Ug
ewoJCQlmb3IgKCBrZXkgaW4gZWxlbXMgKSB7CgkJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sg
a2V5IF0sIGtleSwgYXJnICk7CgoJCQkJaWYgKCB2YWx1ZSAhPSBudWxsICkgewoJCQkJCXJldFsg
cmV0Lmxlbmd0aCBdID0gdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgoJCS8vIEZsYXR0ZW4gYW55IG5l
c3RlZCBhcnJheXMKCQlyZXR1cm4gcmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOwoJfSwKCgkv
LyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMKCWd1aWQ6IDEsCgoJLy8gQmluZCBh
IGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55
CgkvLyBhcmd1bWVudHMuCglwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewoJCWlmICgg
dHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewoJCQl2YXIgdG1wID0gZm5bIGNvbnRleHQg
XTsKCQkJY29udGV4dCA9IGZuOwoJCQlmbiA9IHRtcDsKCQl9CgoJCS8vIFF1aWNrIGNoZWNrIHRv
IGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCgkJLy8gdGhpcyB0
aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KCQlp
ZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9
CgoJCS8vIFNpbXVsYXRlZCBiaW5kCgkJdmFyIGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMs
IDIgKSwKCQkJcHJveHkgPSBmdW5jdGlvbigpIHsKCQkJCXJldHVybiBmbi5hcHBseSggY29udGV4
dCwgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKCQkJfTsKCgkJLy8g
U2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhh
bmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCgkJcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5n
dWlkIHx8IHByb3h5Lmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKCgkJcmV0dXJuIHByb3h5OwoJfSwK
CgkvLyBNdXRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIHRvIGEgY29s
bGVjdGlvbgoJLy8gVGhlIHZhbHVlL3MgY2FuIGJlIG9wdGlvbmFsbHkgYnkgZXhlY3V0ZWQgaWYg
aXRzIGEgZnVuY3Rpb24KCWFjY2VzczogZnVuY3Rpb24oIGVsZW1zLCBrZXksIHZhbHVlLCBleGVj
LCBmbiwgcGFzcyApIHsKCQl2YXIgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwoKCQkvLyBTZXR0aW5n
IG1hbnkgYXR0cmlidXRlcwoJCWlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CgkJCWZv
ciAoIHZhciBrIGluIGtleSApIHsKCQkJCWpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBrLCBrZXlba10s
IGV4ZWMsIGZuLCB2YWx1ZSApOwoJCQl9CgkJCXJldHVybiBlbGVtczsKCQl9CgoJCS8vIFNldHRp
bmcgb25lIGF0dHJpYnV0ZQoJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCQkJLy8gT3B0
aW9uYWxseSwgZnVuY3Rpb24gdmFsdWVzIGdldCBleGVjdXRlZCBpZiBleGVjIGlzIHRydWUKCQkJ
ZXhlYyA9ICFwYXNzICYmIGV4ZWMgJiYgalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpOwoKCQkJZm9y
ICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQlmbiggZWxlbXNbaV0sIGtleSwg
ZXhlYyA/IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgOiB2
YWx1ZSwgcGFzcyApOwoJCQl9CgoJCQlyZXR1cm4gZWxlbXM7CgkJfQoKCQkvLyBHZXR0aW5nIGFu
IGF0dHJpYnV0ZQoJCXJldHVybiBsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogdW5kZWZp
bmVkOwoJfSwKCglub3c6IGZ1bmN0aW9uKCkgewoJCXJldHVybiAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpOwoJfSwKCgkvLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9uLgoJLy8g
TW9yZSBkZXRhaWxzOiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1V0aWxpdGllcy9qUXVlcnkuYnJv
d3NlcgoJdWFNYXRjaDogZnVuY3Rpb24oIHVhICkgewoJCXVhID0gdWEudG9Mb3dlckNhc2UoKTsK
CgkJdmFyIG1hdGNoID0gcndlYmtpdC5leGVjKCB1YSApIHx8CgkJCXJvcGVyYS5leGVjKCB1YSAp
IHx8CgkJCXJtc2llLmV4ZWMoIHVhICkgfHwKCQkJdWEuaW5kZXhPZigiY29tcGF0aWJsZSIpIDwg
MCAmJiBybW96aWxsYS5leGVjKCB1YSApIHx8CgkJCVtdOwoKCQlyZXR1cm4geyBicm93c2VyOiBt
YXRjaFsxXSB8fCAiIiwgdmVyc2lvbjogbWF0Y2hbMl0gfHwgIjAiIH07Cgl9LAoKCXN1YjogZnVu
Y3Rpb24oKSB7CgkJZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKCQkJ
cmV0dXJuIG5ldyBqUXVlcnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKCQl9CgkJ
alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7CgkJalF1ZXJ5U3ViLnN1cGVy
Y2xhc3MgPSB0aGlzOwoJCWpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlz
KCk7CgkJalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwoJCWpRdWVyeVN1Yi5z
dWIgPSB0aGlzLnN1YjsKCQlqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNlbGVj
dG9yLCBjb250ZXh0ICkgewoJCQlpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpR
dWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewoJCQkJY29udGV4dCA9
IGpRdWVyeVN1YiggY29udGV4dCApOwoJCQl9CgoJCQlyZXR1cm4galF1ZXJ5LmZuLmluaXQuY2Fs
bCggdGhpcywgc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsKCQl9OwoJCWpRdWVy
eVN1Yi5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeVN1Yi5mbjsKCQl2YXIgcm9vdGpRdWVyeVN1
YiA9IGpRdWVyeVN1Yihkb2N1bWVudCk7CgkJcmV0dXJuIGpRdWVyeVN1YjsKCX0sCgoJYnJvd3Nl
cjoge30KfSk7CgovLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKalF1ZXJ5LmVhY2goIkJv
b2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNw
bGl0KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKCWNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBu
YW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Cn0pOwoKYnJvd3Nlck1hdGNoID0galF1
ZXJ5LnVhTWF0Y2goIHVzZXJBZ2VudCApOwppZiAoIGJyb3dzZXJNYXRjaC5icm93c2VyICkgewoJ
alF1ZXJ5LmJyb3dzZXJbIGJyb3dzZXJNYXRjaC5icm93c2VyIF0gPSB0cnVlOwoJalF1ZXJ5LmJy
b3dzZXIudmVyc2lvbiA9IGJyb3dzZXJNYXRjaC52ZXJzaW9uOwp9CgovLyBEZXByZWNhdGVkLCB1
c2UgalF1ZXJ5LmJyb3dzZXIud2Via2l0IGluc3RlYWQKaWYgKCBqUXVlcnkuYnJvd3Nlci53ZWJr
aXQgKSB7CglqUXVlcnkuYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwp9CgovLyBJRSBkb2Vzbid0IG1h
dGNoIG5vbi1icmVha2luZyBzcGFjZXMgd2l0aCBccwppZiAoIHJub3R3aGl0ZS50ZXN0KCAiXHhB
MCIgKSApIHsKCXRyaW1MZWZ0ID0gL15bXHNceEEwXSsvOwoJdHJpbVJpZ2h0ID0gL1tcc1x4QTBd
KyQvOwp9CgovLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UK
cm9vdGpRdWVyeSA9IGpRdWVyeShkb2N1bWVudCk7CgovLyBDbGVhbnVwIGZ1bmN0aW9ucyBmb3Ig
dGhlIGRvY3VtZW50IHJlYWR5IG1ldGhvZAppZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIg
KSB7CglET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CgkJZG9jdW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSAp
OwoJCWpRdWVyeS5yZWFkeSgpOwoJfTsKCn0gZWxzZSBpZiAoIGRvY3VtZW50LmF0dGFjaEV2ZW50
ICkgewoJRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgewoJCS8vIE1ha2Ugc3VyZSBib2R5
IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAo
dGlja2V0ICM1NDQzKS4KCQlpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIg
KSB7CgkJCWRvY3VtZW50LmRldGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29u
dGVudExvYWRlZCApOwoJCQlqUXVlcnkucmVhZHkoKTsKCQl9Cgl9Owp9CgovLyBUaGUgRE9NIHJl
YWR5IGNoZWNrIGZvciBJbnRlcm5ldCBFeHBsb3JlcgpmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkg
ewoJaWYgKCBqUXVlcnkuaXNSZWFkeSApIHsKCQlyZXR1cm47Cgl9CgoJdHJ5IHsKCQkvLyBJZiBJ
RSBpcyB1c2VkLCB1c2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQoJCS8vIGh0dHA6Ly9qYXZh
c2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCgkJZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmRvU2Nyb2xsKCJsZWZ0Iik7Cgl9IGNhdGNoKGUpIHsKCQlzZXRUaW1lb3V0KCBkb1Njcm9s
bENoZWNrLCAxICk7CgkJcmV0dXJuOwoJfQoKCS8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1
bmN0aW9ucwoJalF1ZXJ5LnJlYWR5KCk7Cn0KCi8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2Jh
bCBvYmplY3QKcmV0dXJuIGpRdWVyeTsKCn0pKCk7CgoKdmFyIC8vIFByb21pc2UgbWV0aG9kcwoJ
cHJvbWlzZU1ldGhvZHMgPSAiZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNl
IHRoZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCAiICIgKSwKCS8vIFN0YXRpYyByZWZlcmVuY2UgdG8g
c2xpY2UKCXNsaWNlRGVmZXJyZWQgPSBbXS5zbGljZTsKCmpRdWVyeS5leHRlbmQoewoJLy8gQ3Jl
YXRlIGEgc2ltcGxlIGRlZmVycmVkIChvbmUgY2FsbGJhY2tzIGxpc3QpCglfRGVmZXJyZWQ6IGZ1
bmN0aW9uKCkgewoJCXZhciAvLyBjYWxsYmFja3MgbGlzdAoJCQljYWxsYmFja3MgPSBbXSwKCQkJ
Ly8gc3RvcmVkIFsgY29udGV4dCAsIGFyZ3MgXQoJCQlmaXJlZCwKCQkJLy8gdG8gYXZvaWQgZmly
aW5nIHdoZW4gYWxyZWFkeSBkb2luZyBzbwoJCQlmaXJpbmcsCgkJCS8vIGZsYWcgdG8ga25vdyBp
ZiB0aGUgZGVmZXJyZWQgaGFzIGJlZW4gY2FuY2VsbGVkCgkJCWNhbmNlbGxlZCwKCQkJLy8gdGhl
IGRlZmVycmVkIGl0c2VsZgoJCQlkZWZlcnJlZCAgPSB7CgoJCQkJLy8gZG9uZSggZjEsIGYyLCAu
Li4pCgkJCQlkb25lOiBmdW5jdGlvbigpIHsKCQkJCQlpZiAoICFjYW5jZWxsZWQgKSB7CgkJCQkJ
CXZhciBhcmdzID0gYXJndW1lbnRzLAoJCQkJCQkJaSwKCQkJCQkJCWxlbmd0aCwKCQkJCQkJCWVs
ZW0sCgkJCQkJCQl0eXBlLAoJCQkJCQkJX2ZpcmVkOwoJCQkJCQlpZiAoIGZpcmVkICkgewoJCQkJ
CQkJX2ZpcmVkID0gZmlyZWQ7CgkJCQkJCQlmaXJlZCA9IDA7CgkJCQkJCX0KCQkJCQkJZm9yICgg
aSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQkJCQll
bGVtID0gYXJnc1sgaSBdOwoJCQkJCQkJdHlwZSA9IGpRdWVyeS50eXBlKCBlbGVtICk7CgkJCQkJ
CQlpZiAoIHR5cGUgPT09ICJhcnJheSIgKSB7CgkJCQkJCQkJZGVmZXJyZWQuZG9uZS5hcHBseSgg
ZGVmZXJyZWQsIGVsZW0gKTsKCQkJCQkJCX0gZWxzZSBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIg
KSB7CgkJCQkJCQkJY2FsbGJhY2tzLnB1c2goIGVsZW0gKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJ
CQlpZiAoIF9maXJlZCApIHsKCQkJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBfZmlyZWRbIDAg
XSwgX2ZpcmVkWyAxIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0s
CgoJCQkJLy8gcmVzb2x2ZSB3aXRoIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3MKCQkJCXJlc29sdmVX
aXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKCQkJCQlpZiAoICFjYW5jZWxsZWQgJiYg
IWZpcmVkICYmICFmaXJpbmcgKSB7CgkJCQkJCS8vIG1ha2Ugc3VyZSBhcmdzIGFyZSBhdmFpbGFi
bGUgKCM4NDIxKQoJCQkJCQlhcmdzID0gYXJncyB8fCBbXTsKCQkJCQkJZmlyaW5nID0gMTsKCQkJ
CQkJdHJ5IHsKCQkJCQkJCXdoaWxlKCBjYWxsYmFja3NbIDAgXSApIHsKCQkJCQkJCQljYWxsYmFj
a3Muc2hpZnQoKS5hcHBseSggY29udGV4dCwgYXJncyApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJ
CWZpbmFsbHkgewoJCQkJCQkJZmlyZWQgPSBbIGNvbnRleHQsIGFyZ3MgXTsKCQkJCQkJCWZpcmlu
ZyA9IDA7CgkJCQkJCX0KCQkJCQl9CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9LAoKCQkJCS8vIHJl
c29sdmUgd2l0aCB0aGlzIGFzIGNvbnRleHQgYW5kIGdpdmVuIGFyZ3VtZW50cwoJCQkJcmVzb2x2
ZTogZnVuY3Rpb24oKSB7CgkJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFyZ3VtZW50
cyApOwoJCQkJCXJldHVybiB0aGlzOwoJCQkJfSwKCgkJCQkvLyBIYXMgdGhpcyBkZWZlcnJlZCBi
ZWVuIHJlc29sdmVkPwoJCQkJaXNSZXNvbHZlZDogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICEh
KCBmaXJpbmcgfHwgZmlyZWQgKTsKCQkJCX0sCgoJCQkJLy8gQ2FuY2VsCgkJCQljYW5jZWw6IGZ1
bmN0aW9uKCkgewoJCQkJCWNhbmNlbGxlZCA9IDE7CgkJCQkJY2FsbGJhY2tzID0gW107CgkJCQkJ
cmV0dXJuIHRoaXM7CgkJCQl9CgkJCX07CgoJCXJldHVybiBkZWZlcnJlZDsKCX0sCgoJLy8gRnVs
bCBmbGVkZ2VkIGRlZmVycmVkICh0d28gY2FsbGJhY2tzIGxpc3QpCglEZWZlcnJlZDogZnVuY3Rp
b24oIGZ1bmMgKSB7CgkJdmFyIGRlZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAoJCQlmYWls
RGVmZXJyZWQgPSBqUXVlcnkuX0RlZmVycmVkKCksCgkJCXByb21pc2U7CgkJLy8gQWRkIGVycm9y
RGVmZXJyZWQgbWV0aG9kcywgdGhlbiBhbmQgcHJvbWlzZQoJCWpRdWVyeS5leHRlbmQoIGRlZmVy
cmVkLCB7CgkJCXRoZW46IGZ1bmN0aW9uKCBkb25lQ2FsbGJhY2tzLCBmYWlsQ2FsbGJhY2tzICkg
ewoJCQkJZGVmZXJyZWQuZG9uZSggZG9uZUNhbGxiYWNrcyApLmZhaWwoIGZhaWxDYWxsYmFja3Mg
KTsKCQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQlhbHdheXM6IGZ1bmN0aW9uKCkgewoJCQkJcmV0
dXJuIGRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBhcmd1bWVudHMgKS5mYWlsLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJfSwKCQkJZmFpbDogZmFpbERlZmVycmVkLmRvbmUsCgkJ
CXJlamVjdFdpdGg6IGZhaWxEZWZlcnJlZC5yZXNvbHZlV2l0aCwKCQkJcmVqZWN0OiBmYWlsRGVm
ZXJyZWQucmVzb2x2ZSwKCQkJaXNSZWplY3RlZDogZmFpbERlZmVycmVkLmlzUmVzb2x2ZWQsCgkJ
CXBpcGU6IGZ1bmN0aW9uKCBmbkRvbmUsIGZuRmFpbCApIHsKCQkJCXJldHVybiBqUXVlcnkuRGVm
ZXJyZWQoZnVuY3Rpb24oIG5ld0RlZmVyICkgewoJCQkJCWpRdWVyeS5lYWNoKCB7CgkJCQkJCWRv
bmU6IFsgZm5Eb25lLCAicmVzb2x2ZSIgXSwKCQkJCQkJZmFpbDogWyBmbkZhaWwsICJyZWplY3Qi
IF0KCQkJCQl9LCBmdW5jdGlvbiggaGFuZGxlciwgZGF0YSApIHsKCQkJCQkJdmFyIGZuID0gZGF0
YVsgMCBdLAoJCQkJCQkJYWN0aW9uID0gZGF0YVsgMSBdLAoJCQkJCQkJcmV0dXJuZWQ7CgkJCQkJ
CWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CgkJCQkJCQlkZWZlcnJlZFsgaGFuZGxl
ciBdKGZ1bmN0aW9uKCkgewoJCQkJCQkJCXJldHVybmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3Vt
ZW50cyApOwoJCQkJCQkJCWlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVy
bmVkLnByb21pc2UgKSApIHsKCQkJCQkJCQkJcmV0dXJuZWQucHJvbWlzZSgpLnRoZW4oIG5ld0Rl
ZmVyLnJlc29sdmUsIG5ld0RlZmVyLnJlamVjdCApOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJ
CW5ld0RlZmVyWyBhY3Rpb24gXSggcmV0dXJuZWQgKTsKCQkJCQkJCQl9CgkJCQkJCQl9KTsKCQkJ
CQkJfSBlbHNlIHsKCQkJCQkJCWRlZmVycmVkWyBoYW5kbGVyIF0oIG5ld0RlZmVyWyBhY3Rpb24g
XSApOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9KS5wcm9taXNlKCk7CgkJCX0sCgkJCS8vIEdldCBh
IHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKCQkJLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUg
cHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAoJCQlwcm9taXNlOiBmdW5jdGlv
biggb2JqICkgewoJCQkJaWYgKCBvYmogPT0gbnVsbCApIHsKCQkJCQlpZiAoIHByb21pc2UgKSB7
CgkJCQkJCXJldHVybiBwcm9taXNlOwoJCQkJCX0KCQkJCQlwcm9taXNlID0gb2JqID0ge307CgkJ
CQl9CgkJCQl2YXIgaSA9IHByb21pc2VNZXRob2RzLmxlbmd0aDsKCQkJCXdoaWxlKCBpLS0gKSB7
CgkJCQkJb2JqWyBwcm9taXNlTWV0aG9kc1tpXSBdID0gZGVmZXJyZWRbIHByb21pc2VNZXRob2Rz
W2ldIF07CgkJCQl9CgkJCQlyZXR1cm4gb2JqOwoJCQl9CgkJfSk7CgkJLy8gTWFrZSBzdXJlIG9u
bHkgb25lIGNhbGxiYWNrIGxpc3Qgd2lsbCBiZSB1c2VkCgkJZGVmZXJyZWQuZG9uZSggZmFpbERl
ZmVycmVkLmNhbmNlbCApLmZhaWwoIGRlZmVycmVkLmNhbmNlbCApOwoJCS8vIFVuZXhwb3NlIGNh
bmNlbAoJCWRlbGV0ZSBkZWZlcnJlZC5jYW5jZWw7CgkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFu
eQoJCWlmICggZnVuYyApIHsKCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKCQl9
CgkJcmV0dXJuIGRlZmVycmVkOwoJfSwKCgkvLyBEZWZlcnJlZCBoZWxwZXIKCXdoZW46IGZ1bmN0
aW9uKCBmaXJzdFBhcmFtICkgewoJCXZhciBhcmdzID0gYXJndW1lbnRzLAoJCQlpID0gMCwKCQkJ
bGVuZ3RoID0gYXJncy5sZW5ndGgsCgkJCWNvdW50ID0gbGVuZ3RoLAoJCQlkZWZlcnJlZCA9IGxl
bmd0aCA8PSAxICYmIGZpcnN0UGFyYW0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGZpcnN0UGFyYW0u
cHJvbWlzZSApID8KCQkJCWZpcnN0UGFyYW0gOgoJCQkJalF1ZXJ5LkRlZmVycmVkKCk7CgkJZnVu
Y3Rpb24gcmVzb2x2ZUZ1bmMoIGkgKSB7CgkJCXJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJ
CQlhcmdzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlRGVmZXJyZWQuY2FsbCgg
YXJndW1lbnRzLCAwICkgOiB2YWx1ZTsKCQkJCWlmICggISggLS1jb3VudCApICkgewoJCQkJCS8v
IFN0cmFuZ2UgYnVnIGluIEZGNDoKCQkJCQkvLyBWYWx1ZXMgY2hhbmdlZCBvbnRvIHRoZSBhcmd1
bWVudHMgb2JqZWN0IHNvbWV0aW1lcyBlbmQgdXAgYXMgdW5kZWZpbmVkIHZhbHVlcwoJCQkJCS8v
IG91dHNpZGUgdGhlICQud2hlbiBtZXRob2QuIENsb25pbmcgdGhlIG9iamVjdCBpbnRvIGEgZnJl
c2ggYXJyYXkgc29sdmVzIHRoZSBpc3N1ZQoJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZl
cnJlZCwgc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmdzLCAwICkgKTsKCQkJCX0KCQkJfTsKCQl9CgkJ
aWYgKCBsZW5ndGggPiAxICkgewoJCQlmb3IoIDsgaSA8IGxlbmd0aDsgaSsrICkgewoJCQkJaWYg
KCBhcmdzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3NbIGkgXS5wcm9taXNlICkgKSB7
CgkJCQkJYXJnc1sgaSBdLnByb21pc2UoKS50aGVuKCByZXNvbHZlRnVuYyhpKSwgZGVmZXJyZWQu
cmVqZWN0ICk7CgkJCQl9IGVsc2UgewoJCQkJCS0tY291bnQ7CgkJCQl9CgkJCX0KCQkJaWYgKCAh
Y291bnQgKSB7CgkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGFyZ3MgKTsKCQkJ
fQoJCX0gZWxzZSBpZiAoIGRlZmVycmVkICE9PSBmaXJzdFBhcmFtICkgewoJCQlkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggZGVmZXJyZWQsIGxlbmd0aCA/IFsgZmlyc3RQYXJhbSBdIDogW10gKTsKCQl9
CgkJcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTsKCX0KfSk7CgoKCmpRdWVyeS5zdXBwb3J0ID0g
KGZ1bmN0aW9uKCkgewoKCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiAp
LAoJCWRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKCQlhbGwsCgkJ
YSwKCQlzZWxlY3QsCgkJb3B0LAoJCWlucHV0LAoJCW1hcmdpbkRpdiwKCQlzdXBwb3J0LAoJCWZy
YWdtZW50LAoJCWJvZHksCgkJYm9keVN0eWxlLAoJCXRkcywKCQlldmVudHMsCgkJZXZlbnROYW1l
LAoJCWksCgkJaXNTdXBwb3J0ZWQ7CgoJLy8gUHJlbGltaW5hcnkgdGVzdHMKCWRpdi5zZXRBdHRy
aWJ1dGUoImNsYXNzTmFtZSIsICJ0Iik7CglkaXYuaW5uZXJIVE1MID0gIiAgIDxsaW5rLz48dGFi
bGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5
Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKCglhbGwgPSBkaXYuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoICIqIiApOwoJYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImEi
IClbIDAgXTsKCgkvLyBDYW4ndCBnZXQgYmFzaWMgdGVzdCBzdXBwb3J0CglpZiAoICFhbGwgfHwg
IWFsbC5sZW5ndGggfHwgIWEgKSB7CgkJcmV0dXJuIHt9OwoJfQoKCS8vIEZpcnN0IGJhdGNoIG9m
IHN1cHBvcnRzIHRlc3RzCglzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0
IiApOwoJb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJv
cHRpb24iKSApOwoJaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJpbnB1dCIgKVsg
MCBdOwoKCXN1cHBvcnQgPSB7CgkJLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVu
IC5pbm5lckhUTUwgaXMgdXNlZAoJCWxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxk
Lm5vZGVUeXBlID09PSAzICksCgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHRib2R5IGVsZW1lbnRzIGFy
ZW4ndCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCgkJLy8gSUUgd2lsbCBpbnNlcnQgdGhlbSBpbnRv
IGVtcHR5IHRhYmxlcwoJCXRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHki
ICkubGVuZ3RoLAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxp
emVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKCQkvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBl
bGVtZW50IGluIElFCgkJaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ICJsaW5rIiApLmxlbmd0aCwKCgkJLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9tIGdl
dEF0dHJpYnV0ZQoJCS8vIChJRSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCgkJc3R5bGU6IC90b3Av
LnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICksCgoJCS8vIE1ha2Ugc3VyZSB0aGF0IFVS
THMgYXJlbid0IG1hbmlwdWxhdGVkCgkJLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkgZGVmYXVsdCkK
CQlocmVmTm9ybWFsaXplZDogKCBhLmdldEF0dHJpYnV0ZSggImhyZWYiICkgPT09ICIvYSIgKSwK
CgkJLy8gTWFrZSBzdXJlIHRoYXQgZWxlbWVudCBvcGFjaXR5IGV4aXN0cwoJCS8vIChJRSB1c2Vz
IGZpbHRlciBpbnN0ZWFkKQoJCS8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgV2ViS2l0
IGlzc3VlLiBTZWUgIzUxNDUKCQlvcGFjaXR5OiAvXjAuNTUkLy50ZXN0KCBhLnN0eWxlLm9wYWNp
dHkgKSwKCgkJLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQoJCS8vIChJRSB1c2VzIHN0
eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKCQljc3NGbG9hdDogISFhLnN0eWxlLmNzc0Zs
b2F0LAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGEg
Y2hlY2tib3gKCQkvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCgkJLy8gKFdlYktpdCBkZWZh
dWx0cyB0byAiIiBpbnN0ZWFkKQoJCWNoZWNrT246ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwK
CgkJLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3
b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgoJCS8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2Ug
aW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCgkJb3B0U2Vs
ZWN0ZWQ6IG9wdC5zZWxlY3RlZCwKCgkJLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNl
IGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0
QXR0cmlidXRlIChpZTYvNykKCQlnZXRTZXRBdHRyaWJ1dGU6IGRpdi5jbGFzc05hbWUgIT09ICJ0
IiwKCgkJLy8gV2lsbCBiZSBkZWZpbmVkIGxhdGVyCgkJc3VibWl0QnViYmxlczogdHJ1ZSwKCQlj
aGFuZ2VCdWJibGVzOiB0cnVlLAoJCWZvY3VzaW5CdWJibGVzOiBmYWxzZSwKCQlkZWxldGVFeHBh
bmRvOiB0cnVlLAoJCW5vQ2xvbmVFdmVudDogdHJ1ZSwKCQlpbmxpbmVCbG9ja05lZWRzTGF5b3V0
OiBmYWxzZSwKCQlzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKCQlyZWxpYWJsZU1hcmdpblJpZ2h0
OiB0cnVlCgl9OwoKCS8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9u
ZWQKCWlucHV0LmNoZWNrZWQgPSB0cnVlOwoJc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0
LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7CgoJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG9wdGlv
bnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBhcyBkaXNhYmxlZAoJLy8g
KFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQoJc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsK
CXN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkOwoKCS8vIFRlc3QgdG8gc2VlIGlm
IGl0J3MgcG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CgkvLyBG
YWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgoJdHJ5IHsKCQlkZWxldGUgZGl2LnRlc3Q7Cgl9IGNh
dGNoKCBlICkgewoJCXN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOwoJfQoKCWlmICggIWRp
di5hZGRFdmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkg
ewoJCWRpdi5hdHRhY2hFdmVudCggIm9uY2xpY2siLCBmdW5jdGlvbiBjbGljaygpIHsKCQkJLy8g
Q2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkKCQkJLy8gYm91bmQgZXZlbnQg
aGFuZGxlcnMgKElFIGRvZXMgdGhpcykKCQkJc3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsK
CQkJZGl2LmRldGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrICk7CgkJfSk7CgkJZGl2LmNsb25l
Tm9kZSggdHJ1ZSApLmZpcmVFdmVudCggIm9uY2xpY2siICk7Cgl9CgoJLy8gQ2hlY2sgaWYgYSBy
YWRpbyBtYWludGFpbnMgaXQncyB2YWx1ZQoJLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhl
IERPTQoJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJaW5wdXQudmFs
dWUgPSAidCI7CglpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAicmFkaW8iKTsKCXN1cHBvcnQu
cmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CgoJaW5wdXQuc2V0QXR0cmlidXRlKCJj
aGVja2VkIiwgImNoZWNrZWQiKTsKCWRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKCWZyYWdtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoJZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoIGRpdi5maXJzdENoaWxkICk7CgoJLy8gV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBz
dGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCglzdXBwb3J0LmNoZWNrQ2xvbmUgPSBmcmFnbWVu
dC5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsK
CglkaXYuaW5uZXJIVE1MID0gIiI7CgoJLy8gRmlndXJlIG91dCBpZiB0aGUgVzNDIGJveCBtb2Rl
bCB3b3JrcyBhcyBleHBlY3RlZAoJZGl2LnN0eWxlLndpZHRoID0gZGl2LnN0eWxlLnBhZGRpbmdM
ZWZ0ID0gIjFweCI7CgoJLy8gV2UgdXNlIG91ciBvd24sIGludmlzaWJsZSwgYm9keQoJYm9keSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJib2R5IiApOwoJYm9keVN0eWxlID0gewoJCXZpc2li
aWxpdHk6ICJoaWRkZW4iLAoJCXdpZHRoOiAwLAoJCWhlaWdodDogMCwKCQlib3JkZXI6IDAsCgkJ
bWFyZ2luOiAwLAoJCS8vIFNldCBiYWNrZ3JvdW5kIHRvIGF2b2lkIElFIGNyYXNoZXMgd2hlbiBy
ZW1vdmluZyAoIzkwMjgpCgkJYmFja2dyb3VuZDogIm5vbmUiCgl9OwoJZm9yICggaSBpbiBib2R5
U3R5bGUgKSB7CgkJYm9keS5zdHlsZVsgaSBdID0gYm9keVN0eWxlWyBpIF07Cgl9Cglib2R5LmFw
cGVuZENoaWxkKCBkaXYgKTsKCWRvY3VtZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoIGJvZHksIGRv
Y3VtZW50RWxlbWVudC5maXJzdENoaWxkICk7CgoJLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQg
Y2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKCS8vIHZhbHVlIG9mIHRydWUgYWZ0ZXIg
YXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCglzdXBwb3J0LmFwcGVuZENoZWNrZWQgPSBpbnB1
dC5jaGVja2VkOwoKCXN1cHBvcnQuYm94TW9kZWwgPSBkaXYub2Zmc2V0V2lkdGggPT09IDI7CgoJ
aWYgKCAiem9vbSIgaW4gZGl2LnN0eWxlICkgewoJCS8vIENoZWNrIGlmIG5hdGl2ZWx5IGJsb2Nr
LWxldmVsIGVsZW1lbnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawoJCS8vIGVsZW1lbnRzIHdoZW4g
c2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcKCQkvLyB0aGVtIGxh
eW91dAoJCS8vIChJRSA8IDggZG9lcyB0aGlzKQoJCWRpdi5zdHlsZS5kaXNwbGF5ID0gImlubGlu
ZSI7CgkJZGl2LnN0eWxlLnpvb20gPSAxOwoJCXN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91
dCA9ICggZGl2Lm9mZnNldFdpZHRoID09PSAyICk7CgoJCS8vIENoZWNrIGlmIGVsZW1lbnRzIHdp
dGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVuCgkJLy8gKElFIDYgZG9lcyB0aGlz
KQoJCWRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CgkJZGl2LmlubmVySFRNTCA9ICI8ZGl2IHN0eWxl
PSd3aWR0aDo0cHg7Jz48L2Rpdj4iOwoJCXN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2
Lm9mZnNldFdpZHRoICE9PSAyICk7Cgl9CgoJZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0
ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+
PC90cj48L3RhYmxlPiI7Cgl0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJ0ZCIgKTsK
CgkvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3
aGVuIHRoZXkgYXJlIHNldAoJLy8gdG8gZGlzcGxheTpub25lIGFuZCB0aGVyZSBhcmUgc3RpbGwg
b3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCgkvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZz
ZXRXaWR0aC9IZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KCS8vIGRldGVybWlu
aW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5nCgkvLyBkaXNw
bGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNhZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxl
bWVudCBpcwoJLy8gaGlkZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcgIzQ1MTIg
Zm9yIG1vcmUgaW5mb3JtYXRpb24pLgoJLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCglp
c1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CgoJdGRzWyAwIF0u
c3R5bGUuZGlzcGxheSA9ICIiOwoJdGRzWyAxIF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCgkv
LyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdo
dAoJLy8gKElFIDwgOCBmYWlsIHRoaXMgdGVzdCkKCXN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZz
ZXRzID0gaXNTdXBwb3J0ZWQgJiYgKCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKCWRp
di5pbm5lckhUTUwgPSAiIjsKCgkvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBh
bmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CgkvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1y
aWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3JlCgkvLyBpbmZvIHNlZSBi
dWcgIzMzMzMKCS8vIEZhaWxzIGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCgkv
LyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVl
IGZvciBtYXJnaW4tcmlnaHQKCWlmICggZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQu
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKCQltYXJnaW5EaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAiZGl2IiApOwoJCW1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsKCQlt
YXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSAiMCI7CgkJZGl2LmFwcGVuZENoaWxkKCBtYXJn
aW5EaXYgKTsKCQlzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQoJCQkoIHBhcnNlSW50KCAo
IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCAp
IHx8IHsgbWFyZ2luUmlnaHQ6IDAgfSApLm1hcmdpblJpZ2h0LCAxMCApIHx8IDAgKSA9PT0gMDsK
CX0KCgkvLyBSZW1vdmUgdGhlIGJvZHkgZWxlbWVudCB3ZSBhZGRlZAoJYm9keS5pbm5lckhUTUwg
PSAiIjsKCWRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggYm9keSApOwoKCS8vIFRlY2huaXF1
ZSBmcm9tIEp1cml5IFpheXRzZXYKCS8vIGh0dHA6Ly90aGlua3dlYjIuY29tL3Byb2plY3RzL3By
b3RvdHlwZS9kZXRlY3RpbmctZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25pZmZpbmcv
CgkvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgbm9uLXN0YW5kYXJkIGV2ZW50
IHN5c3RlbXMKCS8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNob3J0LWNpcmN1aXRpbmcgaGVy
ZSBoZWxwcyB1cyB0bwoJLy8gYXZvaWQgYW4gZXZhbCBjYWxsIChpbiBzZXRBdHRyaWJ1dGUpIHdo
aWNoIGNhbiBjYXVzZSBDU1AKCS8vIHRvIGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQCglpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsK
CQlmb3IoIGkgaW4gewoJCQlzdWJtaXQ6IDEsCgkJCWNoYW5nZTogMSwKCQkJZm9jdXNpbjogMQoJ
CX0gKSB7CgkJCWV2ZW50TmFtZSA9ICJvbiIgKyBpOwoJCQlpc1N1cHBvcnRlZCA9ICggZXZlbnRO
YW1lIGluIGRpdiApOwoJCQlpZiAoICFpc1N1cHBvcnRlZCApIHsKCQkJCWRpdi5zZXRBdHRyaWJ1
dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7CgkJCQlpc1N1cHBvcnRlZCA9ICggdHlwZW9mIGRp
dlsgZXZlbnROYW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKCQkJfQoJCQlzdXBwb3J0WyBpICsgIkJ1
YmJsZXMiIF0gPSBpc1N1cHBvcnRlZDsKCQl9Cgl9CgoJcmV0dXJuIHN1cHBvcnQ7Cn0pKCk7Cgov
LyBLZWVwIHRyYWNrIG9mIGJveE1vZGVsCmpRdWVyeS5ib3hNb2RlbCA9IGpRdWVyeS5zdXBwb3J0
LmJveE1vZGVsOwoKCgoKdmFyIHJicmFjZSA9IC9eKD86XHsuKlx9fFxbLipcXSkkLywKCXJtdWx0
aURhc2ggPSAvKFthLXpdKShbQS1aXSkvZzsKCmpRdWVyeS5leHRlbmQoewoJY2FjaGU6IHt9LAoK
CS8vIFBsZWFzZSB1c2Ugd2l0aCBjYXV0aW9uCgl1dWlkOiAwLAoKCS8vIFVuaXF1ZSBmb3IgZWFj
aCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQoJLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1h
dGNoIHJpbmxpbmVqUXVlcnkKCWV4cGFuZG86ICJqUXVlcnkiICsgKCBqUXVlcnkuZm4uanF1ZXJ5
ICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAoKCS8vIFRoZSBmb2xsb3dp
bmcgZWxlbWVudHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKCS8vIGF0dGVt
cHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0byB0aGVtLgoJbm9EYXRhOiB7CgkJImVtYmVk
IjogdHJ1ZSwKCQkvLyBCYW4gYWxsIG9iamVjdHMgZXhjZXB0IGZvciBGbGFzaCAod2hpY2ggaGFu
ZGxlIGV4cGFuZG9zKQoJCSJvYmplY3QiOiAiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2Qjgt
NDQ0NTUzNTQwMDAwIiwKCQkiYXBwbGV0IjogdHJ1ZQoJfSwKCgloYXNEYXRhOiBmdW5jdGlvbigg
ZWxlbSApIHsKCQllbGVtID0gZWxlbS5ub2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsgZWxlbVtqUXVl
cnkuZXhwYW5kb10gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CgoJCXJldHVybiAhIWVsZW0g
JiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7Cgl9LAoKCWRhdGE6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CgkJaWYgKCAhalF1
ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIGludGVybmFs
S2V5ID0galF1ZXJ5LmV4cGFuZG8sIGdldEJ5TmFtZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5n
IiwgdGhpc0NhY2hlLAoKCQkJLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBKUyBv
YmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKCQkJLy8gY2FuJ3QgR0Mgb2JqZWN0IHJl
ZmVyZW5jZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKCQkJaXNOb2RlID0g
ZWxlbS5ub2RlVHlwZSwKCgkJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVl
cnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCgkJCS8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRo
ZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKCQkJY2FjaGUgPSBpc05vZGUg
PyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoKCQkJLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMg
b2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCgkJCS8vIHRoZSBjb2Rl
IHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hl
CgkJCWlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA6IGVsZW1bIGpRdWVyeS5l
eHBhbmRvIF0gJiYgalF1ZXJ5LmV4cGFuZG87CgoJCS8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdv
cmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCgkJLy8gb2Jq
ZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQgYWxsCgkJaWYgKCAoIWlkIHx8IChwdnQgJiYgaWQgJiYg
IWNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVu
ZGVmaW5lZCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCAhaWQgKSB7CgkJCS8vIE9ubHkgRE9N
IG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIg
ZGF0YQoJCQkvLyBlbmRzIHVwIGluIHRoZSBnbG9iYWwgY2FjaGUKCQkJaWYgKCBpc05vZGUgKSB7
CgkJCQllbGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gaWQgPSArK2pRdWVyeS51dWlkOwoJCQl9IGVs
c2UgewoJCQkJaWQgPSBqUXVlcnkuZXhwYW5kbzsKCQkJfQoJCX0KCgkJaWYgKCAhY2FjaGVbIGlk
IF0gKSB7CgkJCWNhY2hlWyBpZCBdID0ge307CgoJCQkvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBm
b3IgMS41IE9OTFkuIEF2b2lkcyBleHBvc2luZyBqUXVlcnkKCQkJLy8gbWV0YWRhdGEgb24gcGxh
aW4gSlMgb2JqZWN0cyB3aGVuIHRoZSBvYmplY3QgaXMgc2VyaWFsaXplZCB1c2luZwoJCQkvLyBK
U09OLnN0cmluZ2lmeQoJCQlpZiAoICFpc05vZGUgKSB7CgkJCQljYWNoZVsgaWQgXS50b0pTT04g
PSBqUXVlcnkubm9vcDsKCQkJfQoJCX0KCgkJLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8g
alF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKCQkvLyBz
aGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCgkJaWYgKCB0eXBlb2Yg
bmFtZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09ICJmdW5jdGlvbiIgKSB7CgkJCWlm
ICggcHZ0ICkgewoJCQkJY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0gPSBqUXVlcnkuZXh0ZW5k
KGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdLCBuYW1lKTsKCQkJfSBlbHNlIHsKCQkJCWNhY2hl
WyBpZCBdID0galF1ZXJ5LmV4dGVuZChjYWNoZVsgaWQgXSwgbmFtZSk7CgkJCX0KCQl9CgoJCXRo
aXNDYWNoZSA9IGNhY2hlWyBpZCBdOwoKCQkvLyBJbnRlcm5hbCBqUXVlcnkgZGF0YSBpcyBzdG9y
ZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBkYXRhCgkJLy8gY2Fj
aGUgaW4gb3JkZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMgYmV0d2VlbiBpbnRlcm5hbCBkYXRh
IGFuZCB1c2VyLWRlZmluZWQKCQkvLyBkYXRhCgkJaWYgKCBwdnQgKSB7CgkJCWlmICggIXRoaXND
YWNoZVsgaW50ZXJuYWxLZXkgXSApIHsKCQkJCXRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSA9IHt9
OwoJCQl9CgoJCQl0aGlzQ2FjaGUgPSB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF07CgkJfQoKCQlp
ZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKCQkJdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lICkgXSA9IGRhdGE7CgkJfQoKCQkvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41
IE9OTFkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiAxLjYuIFVzZXJzIHNob3VsZAoJCS8vIG5vdCBh
dHRlbXB0IHRvIGluc3BlY3QgdGhlIGludGVybmFsIGV2ZW50cyBvYmplY3QgdXNpbmcgalF1ZXJ5
LmRhdGEsIGFzIHRoaXMKCQkvLyBpbnRlcm5hbCBkYXRhIG9iamVjdCBpcyB1bmRvY3VtZW50ZWQg
YW5kIHN1YmplY3QgdG8gY2hhbmdlLgoJCWlmICggbmFtZSA9PT0gImV2ZW50cyIgJiYgIXRoaXND
YWNoZVtuYW1lXSApIHsKCQkJcmV0dXJuIHRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSAmJiB0aGlz
Q2FjaGVbIGludGVybmFsS2V5IF0uZXZlbnRzOwoJCX0KCgkJcmV0dXJuIGdldEJ5TmFtZSA/IHRo
aXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gOiB0aGlzQ2FjaGU7Cgl9LAoKCXJl
bW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkg
Ki8gKSB7CgkJaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKCQkJcmV0dXJuOwoJ
CX0KCgkJdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sIGlzTm9kZSA9IGVsZW0ubm9k
ZVR5cGUsCgoJCQkvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KCQkJY2Fj
aGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoKCQkJLy8gU2VlIGpRdWVyeS5kYXRh
IGZvciBtb3JlIGluZm9ybWF0aW9uCgkJCWlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4cGFu
ZG8gXSA6IGpRdWVyeS5leHBhbmRvOwoKCQkvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hl
IGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8KCQkvLyBwdXJwb3NlIGluIGNvbnRp
bnVpbmcKCQlpZiAoICFjYWNoZVsgaWQgXSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCBuYW1l
ICkgewoJCQl2YXIgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0g
OiBjYWNoZVsgaWQgXTsKCgkJCWlmICggdGhpc0NhY2hlICkgewoJCQkJZGVsZXRlIHRoaXNDYWNo
ZVsgbmFtZSBdOwoKCQkJCS8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUs
IHdlIHdhbnQgdG8gY29udGludWUKCQkJCS8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNl
bGYgZ2V0IGRlc3Ryb3llZAoJCQkJaWYgKCAhaXNFbXB0eURhdGFPYmplY3QodGhpc0NhY2hlKSAp
IHsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCX0KCQl9CgoJCS8vIFNlZSBqUXVlcnkuZGF0YSBmb3Ig
bW9yZSBpbmZvcm1hdGlvbgoJCWlmICggcHZ0ICkgewoJCQlkZWxldGUgY2FjaGVbIGlkIF1bIGlu
dGVybmFsS2V5IF07CgoJCQkvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJlbnQgY2FjaGUgdW5sZXNz
IHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAoJCQkvLyBoYWQgYmVlbiB0aGUgb25seSB0aGluZyBs
ZWZ0IGluIGl0CgkJCWlmICggIWlzRW1wdHlEYXRhT2JqZWN0KGNhY2hlWyBpZCBdKSApIHsKCQkJ
CXJldHVybjsKCQkJfQoJCX0KCgkJdmFyIGludGVybmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsgaW50
ZXJuYWxLZXkgXTsKCgkJLy8gQnJvd3NlcnMgdGhhdCBmYWlsIGV4cGFuZG8gZGVsZXRpb24gYWxz
byByZWZ1c2UgdG8gZGVsZXRlIGV4cGFuZG9zIG9uCgkJLy8gdGhlIHdpbmRvdywgYnV0IGl0IHdp
bGwgYWxsb3cgaXQgb24gYWxsIG90aGVyIEpTIG9iamVjdHM7IG90aGVyIGJyb3dzZXJzCgkJLy8g
ZG9uJ3QgY2FyZQoJCWlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAh
PSB3aW5kb3cgKSB7CgkJCWRlbGV0ZSBjYWNoZVsgaWQgXTsKCQl9IGVsc2UgewoJCQljYWNoZVsg
aWQgXSA9IG51bGw7CgkJfQoKCQkvLyBXZSBkZXN0cm95ZWQgdGhlIGVudGlyZSB1c2VyIGNhY2hl
IGF0IG9uY2UgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuCgkJLy8gaXRlcmF0aW5nIHRocm91Z2gg
ZWFjaCBrZXksIGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIHBlcnNpc3QgaW50ZXJuYWwKCQkv
LyBkYXRhIGlmIGl0IGV4aXN0ZWQKCQlpZiAoIGludGVybmFsQ2FjaGUgKSB7CgkJCWNhY2hlWyBp
ZCBdID0ge307CgkJCS8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWS4gQXZvaWRz
IGV4cG9zaW5nIGpRdWVyeQoJCQkvLyBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdoZW4g
dGhlIG9iamVjdCBpcyBzZXJpYWxpemVkIHVzaW5nCgkJCS8vIEpTT04uc3RyaW5naWZ5CgkJCWlm
ICggIWlzTm9kZSApIHsKCQkJCWNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwoJCQl9
CgoJCQljYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGludGVybmFsQ2FjaGU7CgoJCS8vIE90
aGVyd2lzZSwgd2UgbmVlZCB0byBlbGltaW5hdGUgdGhlIGV4cGFuZG8gb24gdGhlIG5vZGUgdG8g
YXZvaWQKCQkvLyBmYWxzZSBsb29rdXBzIGluIHRoZSBjYWNoZSBmb3IgZW50cmllcyB0aGF0IG5v
IGxvbmdlciBleGlzdAoJCX0gZWxzZSBpZiAoIGlzTm9kZSApIHsKCQkJLy8gSUUgZG9lcyBub3Qg
YWxsb3cgdXMgdG8gZGVsZXRlIGV4cGFuZG8gcHJvcGVydGllcyBmcm9tIG5vZGVzLAoJCQkvLyBu
b3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5v
ZGVzOwoJCQkvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKCQkJaWYgKCBqUXVl
cnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvICkgewoJCQkJZGVsZXRlIGVsZW1bIGpRdWVyeS5leHBh
bmRvIF07CgkJCX0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewoJCQkJZWxlbS5y
ZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7CgkJCX0gZWxzZSB7CgkJCQllbGVtWyBq
UXVlcnkuZXhwYW5kbyBdID0gbnVsbDsKCQkJfQoJCX0KCX0sCgoJLy8gRm9yIGludGVybmFsIHVz
ZSBvbmx5LgoJX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewoJCXJldHVybiBq
UXVlcnkuZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApOwoJfSwKCgkvLyBBIG1ldGhvZCBm
b3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxlIHRoZSBkYXRhIGV4cGFuZG8K
CWFjY2VwdERhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewoJCWlmICggZWxlbS5ub2RlTmFtZSApIHsK
CQkJdmFyIG1hdGNoID0galF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
IF07CgoJCQlpZiAoIG1hdGNoICkgewoJCQkJcmV0dXJuICEobWF0Y2ggPT09IHRydWUgfHwgZWxl
bS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSAhPT0gbWF0Y2gpOwoJCQl9CgkJfQoKCQlyZXR1cm4g
dHJ1ZTsKCX0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWRhdGE6IGZ1bmN0aW9uKCBrZXksIHZh
bHVlICkgewoJCXZhciBkYXRhID0gbnVsbDsKCgkJaWYgKCB0eXBlb2Yga2V5ID09PSAidW5kZWZp
bmVkIiApIHsKCQkJaWYgKCB0aGlzLmxlbmd0aCApIHsKCQkJCWRhdGEgPSBqUXVlcnkuZGF0YSgg
dGhpc1swXSApOwoKCQkJCWlmICggdGhpc1swXS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJICAgIHZh
ciBhdHRyID0gdGhpc1swXS5hdHRyaWJ1dGVzLCBuYW1lOwoJCQkJCWZvciAoIHZhciBpID0gMCwg
bCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJCQluYW1lID0gYXR0cltpXS5uYW1l
OwoKCQkJCQkJaWYgKCBuYW1lLmluZGV4T2YoICJkYXRhLSIgKSA9PT0gMCApIHsKCQkJCQkJCW5h
bWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnN1YnN0cmluZyg1KSApOwoKCQkJCQkJCWRhdGFB
dHRyKCB0aGlzWzBdLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0K
CQkJfQoKCQkJcmV0dXJuIGRhdGE7CgoJCX0gZWxzZSBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmpl
Y3QiICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5LmRhdGEo
IHRoaXMsIGtleSApOwoJCQl9KTsKCQl9CgoJCXZhciBwYXJ0cyA9IGtleS5zcGxpdCgiLiIpOwoJ
CXBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIiOwoKCQlpZiAoIHZhbHVl
ID09PSB1bmRlZmluZWQgKSB7CgkJCWRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRh
IiArIHBhcnRzWzFdICsgIiEiLCBbcGFydHNbMF1dKTsKCgkJCS8vIFRyeSB0byBmZXRjaCBhbnkg
aW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJzdAoJCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAm
JiB0aGlzLmxlbmd0aCApIHsKCQkJCWRhdGEgPSBqUXVlcnkuZGF0YSggdGhpc1swXSwga2V5ICk7
CgkJCQlkYXRhID0gZGF0YUF0dHIoIHRoaXNbMF0sIGtleSwgZGF0YSApOwoJCQl9CgoJCQlyZXR1
cm4gZGF0YSA9PT0gdW5kZWZpbmVkICYmIHBhcnRzWzFdID8KCQkJCXRoaXMuZGF0YSggcGFydHNb
MF0gKSA6CgkJCQlkYXRhOwoKCQl9IGVsc2UgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewoJCQkJdmFyICR0aGlzID0galF1ZXJ5KCB0aGlzICksCgkJCQkJYXJncyA9IFsgcGFydHNb
MF0sIHZhbHVlIF07CgoJCQkJJHRoaXMudHJpZ2dlckhhbmRsZXIoICJzZXREYXRhIiArIHBhcnRz
WzFdICsgIiEiLCBhcmdzICk7CgkJCQlqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOwoJ
CQkJJHRoaXMudHJpZ2dlckhhbmRsZXIoICJjaGFuZ2VEYXRhIiArIHBhcnRzWzFdICsgIiEiLCBh
cmdzICk7CgkJCX0pOwoJCX0KCX0sCgoJcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsKCQly
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywg
a2V5ICk7CgkJfSk7Cgl9Cn0pOwoKZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSAp
IHsKCS8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkK
CS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQoJaWYgKCBkYXRhID09PSB1
bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQl2YXIgbmFtZSA9ICJkYXRhLSIg
KyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIiQxLSQyIiApLnRvTG93ZXJDYXNlKCk7CgoJCWRh
dGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwoKCQlpZiAoIHR5cGVvZiBkYXRhID09PSAi
c3RyaW5nIiApIHsKCQkJdHJ5IHsKCQkJCWRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoK
CQkJCWRhdGEgPT09ICJmYWxzZSIgPyBmYWxzZSA6CgkJCQlkYXRhID09PSAibnVsbCIgPyBudWxs
IDoKCQkJCSFqUXVlcnkuaXNOYU4oIGRhdGEgKSA/IHBhcnNlRmxvYXQoIGRhdGEgKSA6CgkJCQkJ
cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CgkJCQkJZGF0
YTsKCQkJfSBjYXRjaCggZSApIHt9CgoJCQkvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNv
IGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKCQkJalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgZGF0YSAp
OwoKCQl9IGVsc2UgewoJCQlkYXRhID0gdW5kZWZpbmVkOwoJCX0KCX0KCglyZXR1cm4gZGF0YTsK
fQoKLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgZm9yIDEuNSBPTkxZIHRvIGFsbG93IG9iamVjdHMg
d2l0aCBhIHNpbmdsZSB0b0pTT04KLy8gcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZCBlbXB0eSBv
YmplY3RzOyB0aGlzIHByb3BlcnR5IGFsd2F5cyBleGlzdHMgaW4KLy8gb3JkZXIgdG8gbWFrZSBz
dXJlIEpTT04uc3RyaW5naWZ5IGRvZXMgbm90IGV4cG9zZSBpbnRlcm5hbCBtZXRhZGF0YQpmdW5j
dGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewoJZm9yICggdmFyIG5hbWUgaW4gb2JqICkg
ewoJCWlmICggbmFtZSAhPT0gInRvSlNPTiIgKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CgoJ
cmV0dXJuIHRydWU7Cn0KCgoKCmZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0
eXBlLCBzcmMgKSB7Cgl2YXIgZGVmZXJEYXRhS2V5ID0gdHlwZSArICJkZWZlciIsCgkJcXVldWVE
YXRhS2V5ID0gdHlwZSArICJxdWV1ZSIsCgkJbWFya0RhdGFLZXkgPSB0eXBlICsgIm1hcmsiLAoJ
CWRlZmVyID0galF1ZXJ5LmRhdGEoIGVsZW0sIGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVl
ICk7CglpZiAoIGRlZmVyICYmCgkJKCBzcmMgPT09ICJxdWV1ZSIgfHwgIWpRdWVyeS5kYXRhKCBl
bGVtLCBxdWV1ZURhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApICkgJiYKCQkoIHNyYyA9PT0gIm1h
cmsiIHx8ICFqUXVlcnkuZGF0YSggZWxlbSwgbWFya0RhdGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSAp
ICkgKSB7CgkJLy8gR2l2ZSByb29tIGZvciBoYXJkLWNvZGVkIGNhbGxiYWNrcyB0byBmaXJlIGZp
cnN0CgkJLy8gYW5kIGV2ZW50dWFsbHkgbWFyay9xdWV1ZSBzb21ldGhpbmcgZWxzZSBvbiB0aGUg
ZWxlbWVudAoJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewoJCQlpZiAoICFqUXVlcnkuZGF0YSgg
ZWxlbSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSAmJgoJCQkJIWpRdWVyeS5kYXRh
KCBlbGVtLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSB7CgkJCQlqUXVlcnkucmVt
b3ZlRGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5LCB0cnVlICk7CgkJCQlkZWZlci5yZXNvbHZlKCk7
CgkJCX0KCQl9LCAwICk7Cgl9Cn0KCmpRdWVyeS5leHRlbmQoewoKCV9tYXJrOiBmdW5jdGlvbigg
ZWxlbSwgdHlwZSApIHsKCQlpZiAoIGVsZW0gKSB7CgkJCXR5cGUgPSAodHlwZSB8fCAiZngiKSAr
ICJtYXJrIjsKCQkJalF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUsIChqUXVlcnkuZGF0YShlbGVtLHR5
cGUsdW5kZWZpbmVkLHRydWUpIHx8IDApICsgMSwgdHJ1ZSApOwoJCX0KCX0sCgoJX3VubWFyazog
ZnVuY3Rpb24oIGZvcmNlLCBlbGVtLCB0eXBlICkgewoJCWlmICggZm9yY2UgIT09IHRydWUgKSB7
CgkJCXR5cGUgPSBlbGVtOwoJCQllbGVtID0gZm9yY2U7CgkJCWZvcmNlID0gZmFsc2U7CgkJfQoJ
CWlmICggZWxlbSApIHsKCQkJdHlwZSA9IHR5cGUgfHwgImZ4IjsKCQkJdmFyIGtleSA9IHR5cGUg
KyAibWFyayIsCgkJCQljb3VudCA9IGZvcmNlID8gMCA6ICggKGpRdWVyeS5kYXRhKCBlbGVtLCBr
ZXksIHVuZGVmaW5lZCwgdHJ1ZSkgfHwgMSApIC0gMSApOwoJCQlpZiAoIGNvdW50ICkgewoJCQkJ
alF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgY291bnQsIHRydWUgKTsKCQkJfSBlbHNlIHsKCQkJCWpR
dWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBrZXksIHRydWUgKTsKCQkJCWhhbmRsZVF1ZXVlTWFya0Rl
ZmVyKCBlbGVtLCB0eXBlLCAibWFyayIgKTsKCQkJfQoJCX0KCX0sCgoJcXVldWU6IGZ1bmN0aW9u
KCBlbGVtLCB0eXBlLCBkYXRhICkgewoJCWlmICggZWxlbSApIHsKCQkJdHlwZSA9ICh0eXBlIHx8
ICJmeCIpICsgInF1ZXVlIjsKCQkJdmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSwgdW5k
ZWZpbmVkLCB0cnVlICk7CgkJCS8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVp
Y2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKCQkJaWYgKCBkYXRhICkgewoJCQkJaWYgKCAh
cSB8fCBqUXVlcnkuaXNBcnJheShkYXRhKSApIHsKCQkJCQlxID0galF1ZXJ5LmRhdGEoIGVsZW0s
IHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSksIHRydWUgKTsKCQkJCX0gZWxzZSB7CgkJCQkJ
cS5wdXNoKCBkYXRhICk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHEgfHwgW107CgkJfQoJfSwKCglk
ZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKCQl0eXBlID0gdHlwZSB8fCAiZngiOwoK
CQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKCQkJZm4gPSBxdWV1ZS5z
aGlmdCgpLAoJCQlkZWZlcjsKCgkJLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdh
eXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAoJCWlmICggZm4gPT09ICJpbnByb2dyZXNz
IiApIHsKCQkJZm4gPSBxdWV1ZS5zaGlmdCgpOwoJCX0KCgkJaWYgKCBmbiApIHsKCQkJLy8gQWRk
IGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZwoJ
CQkvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkCgkJCWlmICggdHlwZSA9PT0gImZ4IiApIHsKCQkJ
CXF1ZXVlLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTsKCQkJfQoKCQkJZm4uY2FsbChlbGVtLCBmdW5j
dGlvbigpIHsKCQkJCWpRdWVyeS5kZXF1ZXVlKGVsZW0sIHR5cGUpOwoJCQl9KTsKCQl9CgoJCWlm
ICggIXF1ZXVlLmxlbmd0aCApIHsKCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHR5cGUgKyAi
cXVldWUiLCB0cnVlICk7CgkJCWhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0eXBlLCAicXVl
dWUiICk7CgkJfQoJfQp9KTsKCmpRdWVyeS5mbi5leHRlbmQoewoJcXVldWU6IGZ1bmN0aW9uKCB0
eXBlLCBkYXRhICkgewoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewoJCQlkYXRh
ID0gdHlwZTsKCQkJdHlwZSA9ICJmeCI7CgkJfQoKCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAp
IHsKCQkJcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApOwoJCX0KCQlyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMs
IHR5cGUsIGRhdGEgKTsKCgkJCWlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlu
cHJvZ3Jlc3MiICkgewoJCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKCQkJfQoJCX0p
OwoJfSwKCWRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7CgkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CgkJfSk7Cgl9LAoJLy8g
QmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9u
LgoJLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRl
bGF5LwoJZGVsYXk6IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgewoJCXRpbWUgPSBqUXVlcnkuZngg
PyBqUXVlcnkuZnguc3BlZWRzW3RpbWVdIHx8IHRpbWUgOiB0aW1lOwoJCXR5cGUgPSB0eXBlIHx8
ICJmeCI7CgoJCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbigpIHsKCQkJdmFyIGVs
ZW0gPSB0aGlzOwoJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5LmRlcXVldWUo
IGVsZW0sIHR5cGUgKTsKCQkJfSwgdGltZSApOwoJCX0pOwoJfSwKCWNsZWFyUXVldWU6IGZ1bmN0
aW9uKCB0eXBlICkgewoJCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7Cgl9
LAoJLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlw
ZQoJLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCglwcm9taXNlOiBm
dW5jdGlvbiggdHlwZSwgb2JqZWN0ICkgewoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmci
ICkgewoJCQlvYmplY3QgPSB0eXBlOwoJCQl0eXBlID0gdW5kZWZpbmVkOwoJCX0KCQl0eXBlID0g
dHlwZSB8fCAiZngiOwoJCXZhciBkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAoJCQllbGVtZW50
cyA9IHRoaXMsCgkJCWkgPSBlbGVtZW50cy5sZW5ndGgsCgkJCWNvdW50ID0gMSwKCQkJZGVmZXJE
YXRhS2V5ID0gdHlwZSArICJkZWZlciIsCgkJCXF1ZXVlRGF0YUtleSA9IHR5cGUgKyAicXVldWUi
LAoJCQltYXJrRGF0YUtleSA9IHR5cGUgKyAibWFyayIsCgkJCXRtcDsKCQlmdW5jdGlvbiByZXNv
bHZlKCkgewoJCQlpZiAoICEoIC0tY291bnQgKSApIHsKCQkJCWRlZmVyLnJlc29sdmVXaXRoKCBl
bGVtZW50cywgWyBlbGVtZW50cyBdICk7CgkJCX0KCQl9CgkJd2hpbGUoIGktLSApIHsKCQkJaWYg
KCggdG1wID0galF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIGRlZmVyRGF0YUtleSwgdW5kZWZp
bmVkLCB0cnVlICkgfHwKCQkJCQkoIGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBxdWV1ZURh
dGFLZXksIHVuZGVmaW5lZCwgdHJ1ZSApIHx8CgkJCQkJCWpRdWVyeS5kYXRhKCBlbGVtZW50c1sg
aSBdLCBtYXJrRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgKSAmJgoJCQkJCWpRdWVyeS5kYXRh
KCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIGpRdWVyeS5fRGVmZXJyZWQoKSwgdHJ1ZSAp
ICkpIHsKCQkJCWNvdW50Kys7CgkJCQl0bXAuZG9uZSggcmVzb2x2ZSApOwoJCQl9CgkJfQoJCXJl
c29sdmUoKTsKCQlyZXR1cm4gZGVmZXIucHJvbWlzZSgpOwoJfQp9KTsKCgoKCnZhciByY2xhc3Mg
PSAvW1xuXHRccl0vZywKCXJzcGFjZSA9IC9ccysvLAoJcnJldHVybiA9IC9cci9nLAoJcnR5cGUg
PSAvXig/OmJ1dHRvbnxpbnB1dCkkL2ksCglyZm9jdXNhYmxlID0gL14oPzpidXR0b258aW5wdXR8
b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksCglyY2xpY2thYmxlID0gL15hKD86cmVhKT8kL2ks
CglyYm9vbGVhbiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJv
bHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1
aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLAoJcmludmFsaWRDaGFyID0gL1w6LywKCWZvcm1Ib29r
LCBib29sSG9vazsKCmpRdWVyeS5mbi5leHRlbmQoewoJYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZh
bHVlICkgewoJCXJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwg
alF1ZXJ5LmF0dHIgKTsKCX0sCgoJcmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CgkJcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5h
bWUgKTsKCQl9KTsKCX0sCgkKCXByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQlyZXR1
cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGpRdWVyeS5wcm9wICk7
Cgl9LAoJCglyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKCQluYW1lID0galF1ZXJ5LnBy
b3BGaXhbIG5hbWUgXSB8fCBuYW1lOwoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJ
CS8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92
aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQoJCQl0cnkgewoJCQkJdGhpc1sgbmFtZSBdID0gdW5k
ZWZpbmVkOwoJCQkJZGVsZXRlIHRoaXNbIG5hbWUgXTsKCQkJfSBjYXRjaCggZSApIHt9CgkJfSk7
Cgl9LAoKCWFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQl2
YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKCQkJCXNlbGYuYWRkQ2xhc3MoIHZhbHVlLmNhbGwodGhp
cywgaSwgc2VsZi5hdHRyKCJjbGFzcyIpIHx8ICIiKSApOwoJCQl9KTsKCQl9CgoJCWlmICggdmFs
dWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKCQkJdmFyIGNsYXNzTmFtZXMgPSAo
dmFsdWUgfHwgIiIpLnNwbGl0KCByc3BhY2UgKTsKCgkJCWZvciAoIHZhciBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJdmFyIGVsZW0gPSB0aGlzW2ldOwoKCQkJCWlm
ICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQlpZiAoICFlbGVtLmNsYXNzTmFtZSApIHsK
CQkJCQkJZWxlbS5jbGFzc05hbWUgPSB2YWx1ZTsKCgkJCQkJfSBlbHNlIHsKCQkJCQkJdmFyIGNs
YXNzTmFtZSA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiLAoJCQkJCQkJc2V0Q2xhc3MgPSBl
bGVtLmNsYXNzTmFtZTsKCgkJCQkJCWZvciAoIHZhciBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxl
bmd0aDsgYyA8IGNsOyBjKysgKSB7CgkJCQkJCQlpZiAoIGNsYXNzTmFtZS5pbmRleE9mKCAiICIg
KyBjbGFzc05hbWVzW2NdICsgIiAiICkgPCAwICkgewoJCQkJCQkJCXNldENsYXNzICs9ICIgIiAr
IGNsYXNzTmFtZXNbY107CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxlbS5jbGFzc05hbWUgPSBq
UXVlcnkudHJpbSggc2V0Q2xhc3MgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB0
aGlzOwoJfSwKCglyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewoJCWlmICggalF1ZXJ5
LmlzRnVuY3Rpb24odmFsdWUpICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsK
CQkJCXZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwoJCQkJc2VsZi5yZW1vdmVDbGFzcyggdmFsdWUu
Y2FsbCh0aGlzLCBpLCBzZWxmLmF0dHIoImNsYXNzIikpICk7CgkJCX0pOwoJCX0KCgkJaWYgKCAo
dmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5l
ZCApIHsKCQkJdmFyIGNsYXNzTmFtZXMgPSAodmFsdWUgfHwgIiIpLnNwbGl0KCByc3BhY2UgKTsK
CgkJCWZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJ
dmFyIGVsZW0gPSB0aGlzW2ldOwoKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVt
LmNsYXNzTmFtZSApIHsKCQkJCQlpZiAoIHZhbHVlICkgewoJCQkJCQl2YXIgY2xhc3NOYW1lID0g
KCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKTsKCQkJCQkJ
Zm9yICggdmFyIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsK
CQkJCQkJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZXNbY10g
KyAiICIsICIgIik7CgkJCQkJCX0KCQkJCQkJZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSgg
Y2xhc3NOYW1lICk7CgoJCQkJCX0gZWxzZSB7CgkJCQkJCWVsZW0uY2xhc3NOYW1lID0gIiI7CgkJ
CQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJdG9nZ2xlQ2xhc3M6IGZ1
bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CgkJdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCgkJ
CWlzQm9vbCA9IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOwoKCQlpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCB2YWx1ZSApICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsK
CQkJCXZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwoJCQkJc2VsZi50b2dnbGVDbGFzcyggdmFsdWUu
Y2FsbCh0aGlzLCBpLCBzZWxmLmF0dHIoImNsYXNzIiksIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTsK
CQkJfSk7CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlpZiAoIHR5cGUg
PT09ICJzdHJpbmciICkgewoJCQkJLy8gdG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXMKCQkJ
CXZhciBjbGFzc05hbWUsCgkJCQkJaSA9IDAsCgkJCQkJc2VsZiA9IGpRdWVyeSggdGhpcyApLAoJ
CQkJCXN0YXRlID0gc3RhdGVWYWwsCgkJCQkJY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCByc3Bh
Y2UgKTsKCgkJCQl3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7CgkJ
CQkJLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGVyYXRlZCBsaXN0CgkJ
CQkJc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsK
CQkJCQlzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNzTmFt
ZSApOwoJCQkJfQoKCQkJfSBlbHNlIGlmICggdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwgdHlwZSA9
PT0gImJvb2xlYW4iICkgewoJCQkJaWYgKCB0aGlzLmNsYXNzTmFtZSApIHsKCQkJCQkvLyBzdG9y
ZSBjbGFzc05hbWUgaWYgc2V0CgkJCQkJalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVf
XyIsIHRoaXMuY2xhc3NOYW1lICk7CgkJCQl9CgoJCQkJLy8gdG9nZ2xlIHdob2xlIGNsYXNzTmFt
ZQoJCQkJdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2Ug
PyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7CgkJCX0K
CQl9KTsKCX0sCgoJaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQl2YXIgY2xhc3NO
YW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICI7CgkJZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCWlmICggKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsg
IiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkgewoJ
CQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgoJCXJldHVybiBmYWxzZTsKCX0sCgoJdmFsOiBmdW5j
dGlvbiggdmFsdWUgKSB7CgkJdmFyIGhvb2tzLCByZXQsCgkJCWVsZW0gPSB0aGlzWzBdOwoJCQoJ
CWlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CgkJCWlmICggZWxlbSApIHsKCQkJCWhvb2tzID0g
alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBqUXVlcnku
dmFsSG9va3NbIGVsZW0udHlwZSBdOwoKCQkJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3Mg
JiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkgewoJ
CQkJCXJldHVybiByZXQ7CgkJCQl9CgoJCQkJcmV0dXJuIChlbGVtLnZhbHVlIHx8ICIiKS5yZXBs
YWNlKHJyZXR1cm4sICIiKTsKCQkJfQoKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9CgoJCXZhciBp
c0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CgoJCXJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oIGkgKSB7CgkJCXZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCB2YWw7CgoJCQlp
ZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWlmICggaXNG
dW5jdGlvbiApIHsKCQkJCXZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIHNlbGYudmFsKCkgKTsK
CQkJfSBlbHNlIHsKCQkJCXZhbCA9IHZhbHVlOwoJCQl9CgoJCQkvLyBUcmVhdCBudWxsL3VuZGVm
aW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZwoJCQlpZiAoIHZhbCA9PSBudWxs
ICkgewoJCQkJdmFsID0gIiI7CgkJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIi
ICkgewoJCQkJdmFsICs9ICIiOwoJCQl9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkg
KSB7CgkJCQl2YWwgPSBqUXVlcnkubWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKCQkJCQly
ZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKyAiIjsKCQkJCX0pOwoJCQl9CgoJCQlo
b29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwg
alF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXTsKCgkJCS8vIElmIHNldCByZXR1cm5zIHVuZGVm
aW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCgkJCWlmICggIWhvb2tzIHx8ICEoInNl
dCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVm
aW5lZCApIHsKCQkJCXRoaXMudmFsdWUgPSB2YWw7CgkJCX0KCQl9KTsKCX0KfSk7CgpqUXVlcnku
ZXh0ZW5kKHsKCXZhbEhvb2tzOiB7CgkJb3B0aW9uOiB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0g
KSB7CgkJCQkvLyBhdHRyaWJ1dGVzLnZhbHVlIGlzIHVuZGVmaW5lZCBpbiBCbGFja2JlcnJ5IDQu
NyBidXQKCQkJCS8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKCQkJCXZhciB2YWwgPSBlbGVtLmF0
dHJpYnV0ZXMudmFsdWU7CgkJCQlyZXR1cm4gIXZhbCB8fCB2YWwuc3BlY2lmaWVkID8gZWxlbS52
YWx1ZSA6IGVsZW0udGV4dDsKCQkJfQoJCX0sCgkJc2VsZWN0OiB7CgkJCWdldDogZnVuY3Rpb24o
IGVsZW0gKSB7CgkJCQl2YXIgdmFsdWUsCgkJCQkJaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgs
CgkJCQkJdmFsdWVzID0gW10sCgkJCQkJb3B0aW9ucyA9IGVsZW0ub3B0aW9ucywKCQkJCQlvbmUg
PSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIjsKCgkJCQkvLyBOb3RoaW5nIHdhcyBzZWxlY3Rl
ZAoJCQkJaWYgKCBpbmRleCA8IDAgKSB7CgkJCQkJcmV0dXJuIG51bGw7CgkJCQl9CgoJCQkJLy8g
TG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwoJCQkJZm9yICggdmFyIGkgPSBv
bmUgPyBpbmRleCA6IDAsIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoOyBp
IDwgbWF4OyBpKysgKSB7CgkJCQkJdmFyIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCgkJCQkJLy8g
RG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBv
cHRncm91cAoJCQkJCWlmICggb3B0aW9uLnNlbGVjdGVkICYmIChqUXVlcnkuc3VwcG9ydC5vcHRE
aXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxl
ZCIpID09PSBudWxsKSAmJgoJCQkJCQkJKCFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAh
alF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApKSApIHsKCgkJ
CQkJCS8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KCQkJCQkJdmFsdWUg
PSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpOwoKCQkJCQkJLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJh
eSBmb3Igb25lIHNlbGVjdHMKCQkJCQkJaWYgKCBvbmUgKSB7CgkJCQkJCQlyZXR1cm4gdmFsdWU7
CgkJCQkJCX0KCgkJCQkJCS8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CgkJCQkJCXZh
bHVlcy5wdXNoKCB2YWx1ZSApOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBGaXhlcyBCdWcgIzI1NTEg
LS0gc2VsZWN0LnZhbCgpIGJyb2tlbiBpbiBJRSBhZnRlciBmb3JtLnJlc2V0KCkKCQkJCWlmICgg
b25lICYmICF2YWx1ZXMubGVuZ3RoICYmIG9wdGlvbnMubGVuZ3RoICkgewoJCQkJCXJldHVybiBq
UXVlcnkoIG9wdGlvbnNbIGluZGV4IF0gKS52YWwoKTsKCQkJCX0KCgkJCQlyZXR1cm4gdmFsdWVz
OwoJCQl9LAoKCQkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJCQl2YXIgdmFsdWVz
ID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsKCgkJCQlqUXVlcnkoZWxlbSkuZmluZCgib3B0
aW9uIikuZWFjaChmdW5jdGlvbigpIHsKCQkJCQl0aGlzLnNlbGVjdGVkID0galF1ZXJ5LmluQXJy
YXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkgPj0gMDsKCQkJCX0pOwoKCQkJCWlmICgg
IXZhbHVlcy5sZW5ndGggKSB7CgkJCQkJZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CgkJCQl9CgkJ
CQlyZXR1cm4gdmFsdWVzOwoJCQl9CgkJfQoJfSwKCglhdHRyRm46IHsKCQl2YWw6IHRydWUsCgkJ
Y3NzOiB0cnVlLAoJCWh0bWw6IHRydWUsCgkJdGV4dDogdHJ1ZSwKCQlkYXRhOiB0cnVlLAoJCXdp
ZHRoOiB0cnVlLAoJCWhlaWdodDogdHJ1ZSwKCQlvZmZzZXQ6IHRydWUKCX0sCgkKCWF0dHJGaXg6
IHsKCQkvLyBBbHdheXMgbm9ybWFsaXplIHRvIGVuc3VyZSBob29rIHVzYWdlCgkJdGFiaW5kZXg6
ICJ0YWJJbmRleCIKCX0sCgkKCWF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFz
cyApIHsKCQl2YXIgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwoJCQoJCS8vIGRvbid0IGdldC9zZXQg
YXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKCQlpZiAoICFl
bGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewoJCQly
ZXR1cm4gdW5kZWZpbmVkOwoJCX0KCgkJaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5LmF0dHJG
biApIHsKCQkJcmV0dXJuIGpRdWVyeSggZWxlbSApWyBuYW1lIF0oIHZhbHVlICk7CgkJfQoKCQkv
LyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAoJCWlm
ICggISgiZ2V0QXR0cmlidXRlIiBpbiBlbGVtKSApIHsKCQkJcmV0dXJuIGpRdWVyeS5wcm9wKCBl
bGVtLCBuYW1lLCB2YWx1ZSApOwoJCX0KCgkJdmFyIHJldCwgaG9va3MsCgkJCW5vdHhtbCA9IG5U
eXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKCgkJLy8gTm9ybWFsaXplIHRo
ZSBuYW1lIGlmIG5lZWRlZAoJCW5hbWUgPSBub3R4bWwgJiYgalF1ZXJ5LmF0dHJGaXhbIG5hbWUg
XSB8fCBuYW1lOwoKCQlob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXTsKCgkJaWYgKCAh
aG9va3MgKSB7CgkJCS8vIFVzZSBib29sSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCgkJCWlm
ICggcmJvb2xlYW4udGVzdCggbmFtZSApICYmCgkJCQkodHlwZW9mIHZhbHVlID09PSAiYm9vbGVh
biIgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBuYW1l
LnRvTG93ZXJDYXNlKCkpICkgewoKCQkJCWhvb2tzID0gYm9vbEhvb2s7CgoJCQkvLyBVc2UgZm9y
bUhvb2sgZm9yIGZvcm1zIGFuZCBpZiB0aGUgbmFtZSBjb250YWlucyBjZXJ0YWluIGNoYXJhY3Rl
cnMKCQkJfSBlbHNlIGlmICggZm9ybUhvb2sgJiYgKGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImZv
cm0iICkgfHwgcmludmFsaWRDaGFyLnRlc3QoIG5hbWUgKSkgKSB7CgkJCQlob29rcyA9IGZvcm1I
b29rOwoJCQl9CgkJfQoKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgoJCQlpZiAoIHZh
bHVlID09PSBudWxsICkgewoJCQkJalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKCQkJ
CXJldHVybiB1bmRlZmluZWQ7CgoJCQl9IGVsc2UgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29r
cyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09
IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiByZXQ7CgoJCQl9IGVsc2UgewoJCQkJZWxlbS5zZXRB
dHRyaWJ1dGUoIG5hbWUsICIiICsgdmFsdWUgKTsKCQkJCXJldHVybiB2YWx1ZTsKCQkJfQoKCQl9
IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwgKSB7CgkJCXJldHVy
biBob29rcy5nZXQoIGVsZW0sIG5hbWUgKTsKCgkJfSBlbHNlIHsKCgkJCXJldCA9IGVsZW0uZ2V0
QXR0cmlidXRlKCBuYW1lICk7CgoJCQkvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4g
bnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAoJCQlyZXR1cm4gcmV0ID09PSBudWxsID8K
CQkJCXVuZGVmaW5lZCA6CgkJCQlyZXQ7CgkJfQoJfSwKCglyZW1vdmVBdHRyOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSApIHsKCQl2YXIgcHJvcE5hbWU7CgkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAx
ICkgewoJCQluYW1lID0galF1ZXJ5LmF0dHJGaXhbIG5hbWUgXSB8fCBuYW1lOwoJCQoJCQlpZiAo
IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSApIHsKCQkJCS8vIFVzZSByZW1vdmVBdHRy
aWJ1dGUgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0CgkJCQllbGVtLnJlbW92ZUF0dHJpYnV0
ZSggbmFtZSApOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7
CgkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZU5vZGUoIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFt
ZSApICk7CgkJCX0KCgkJCS8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlIGZv
ciBib29sZWFuIGF0dHJpYnV0ZXMKCQkJaWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgJiYgKHBy
b3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lKSBpbiBlbGVtICkgewoJCQkJ
ZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwoJCQl9CgkJfQoJfSwKCglhdHRySG9va3M6IHsKCQl0
eXBlOiB7CgkJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQkJLy8gV2UgY2FuJ3Qg
YWxsb3cgdGhlIHR5cGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHBy
b2JsZW1zIGluIElFKQoJCQkJaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxl
bS5wYXJlbnROb2RlICkgewoJCQkJCWpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3Qg
YmUgY2hhbmdlZCIgKTsKCQkJCX0gZWxzZSBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVl
ICYmIHZhbHVlID09PSAicmFkaW8iICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSAp
IHsKCQkJCQkvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2
YWx1ZSByZXNldHMgdGhlIHZhbHVlIGluIElFNi05CgkJCQkJLy8gUmVzZXQgdmFsdWUgdG8gaXQn
cyBkZWZhdWx0IGluIGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKCQkJCQkvLyBUaGlzIGlz
IGZvciBlbGVtZW50IGNyZWF0aW9uCgkJCQkJdmFyIHZhbCA9IGVsZW0udmFsdWU7CgkJCQkJZWxl
bS5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgdmFsdWUgKTsKCQkJCQlpZiAoIHZhbCApIHsKCQkJCQkJ
ZWxlbS52YWx1ZSA9IHZhbDsKCQkJCQl9CgkJCQkJcmV0dXJuIHZhbHVlOwoJCQkJfQoJCQl9CgkJ
fSwKCQl0YWJJbmRleDogewoJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJLy8gZWxlbS50
YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBo
YXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAoJCQkJLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcv
YmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFs
dWVzLXdpdGgtamF2YXNjcmlwdC8KCQkJCXZhciBhdHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRBdHRy
aWJ1dGVOb2RlKCJ0YWJJbmRleCIpOwoKCQkJCXJldHVybiBhdHRyaWJ1dGVOb2RlICYmIGF0dHJp
YnV0ZU5vZGUuc3BlY2lmaWVkID8KCQkJCQlwYXJzZUludCggYXR0cmlidXRlTm9kZS52YWx1ZSwg
MTAgKSA6CgkJCQkJcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJs
ZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KCQkJCQkJMCA6CgkJCQkJCXVu
ZGVmaW5lZDsKCQkJfQoJCX0KCX0sCgoJcHJvcEZpeDogewoJCXRhYmluZGV4OiAidGFiSW5kZXgi
LAoJCXJlYWRvbmx5OiAicmVhZE9ubHkiLAoJCSJmb3IiOiAiaHRtbEZvciIsCgkJImNsYXNzIjog
ImNsYXNzTmFtZSIsCgkJbWF4bGVuZ3RoOiAibWF4TGVuZ3RoIiwKCQljZWxsc3BhY2luZzogImNl
bGxTcGFjaW5nIiwKCQljZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKCQlyb3dzcGFuOiAicm93
U3BhbiIsCgkJY29sc3BhbjogImNvbFNwYW4iLAoJCXVzZW1hcDogInVzZU1hcCIsCgkJZnJhbWVi
b3JkZXI6ICJmcmFtZUJvcmRlciIsCgkJY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxl
IgoJfSwKCQoJcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewoJCXZhciBuVHlw
ZSA9IGVsZW0ubm9kZVR5cGU7CgoJCS8vIGRvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0
LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKCQlpZiAoICFlbGVtIHx8IG5UeXBlID09PSAz
IHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewoJCQlyZXR1cm4gdW5kZWZpbmVkOwoJ
CX0KCgkJdmFyIHJldCwgaG9va3MsCgkJCW5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnku
aXNYTUxEb2MoIGVsZW0gKTsKCgkJLy8gVHJ5IHRvIG5vcm1hbGl6ZS9maXggdGhlIG5hbWUKCQlu
YW1lID0gbm90eG1sICYmIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCQkKCQlob29r
cyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKCgkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVk
ICkgewoJCQlpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQo
IGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7CgkJCQlyZXR1cm4gcmV0OwoK
CQkJfSBlbHNlIHsKCQkJCXJldHVybiAoZWxlbVsgbmFtZSBdID0gdmFsdWUpOwoJCQl9CgoJCX0g
ZWxzZSB7CgkJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdl
dCggZWxlbSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIHJldDsKCgkJCX0g
ZWxzZSB7CgkJCQlyZXR1cm4gZWxlbVsgbmFtZSBdOwoJCQl9CgkJfQoJfSwKCQoJcHJvcEhvb2tz
OiB7fQp9KTsKCi8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwpib29sSG9vayA9IHsKCWdl
dDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVz
IHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCgkJcmV0dXJuIGVsZW1bIGpRdWVyeS5wcm9w
Rml4WyBuYW1lIF0gfHwgbmFtZSBdID8KCQkJbmFtZS50b0xvd2VyQ2FzZSgpIDoKCQkJdW5kZWZp
bmVkOwoJfSwKCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewoJCXZhciBwcm9w
TmFtZTsKCQlpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKCQkJLy8gUmVtb3ZlIGJvb2xlYW4gYXR0
cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQoJCQlqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFt
ZSApOwoJCX0gZWxzZSB7CgkJCS8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25vdyBhdCB0aGlz
IHBvaW50IGl0J3MgdHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKCQkJLy8gU2V0IGJvb2xlYW4g
YXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQoJCQlw
cm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCQkJaWYgKCBwcm9wTmFt
ZSBpbiBlbGVtICkgewoJCQkJLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZpY2FsbHkgaWYgaXQg
YWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKCQkJCWVsZW1bIHByb3BOYW1lIF0gPSB2YWx1
ZTsKCQkJfQoKCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSAp
OwoJCX0KCQlyZXR1cm4gbmFtZTsKCX0KfTsKCi8vIFVzZSB0aGUgdmFsdWUgcHJvcGVydHkgZm9y
IGJhY2sgY29tcGF0Ci8vIFVzZSB0aGUgZm9ybUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBpbiBJ
RTYvNyAoIzE5NTQpCmpRdWVyeS5hdHRySG9va3MudmFsdWUgPSB7CglnZXQ6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lICkgewoJCWlmICggZm9ybUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAi
YnV0dG9uIiApICkgewoJCQlyZXR1cm4gZm9ybUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7CgkJfQoJ
CXJldHVybiBlbGVtLnZhbHVlOwoJfSwKCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1l
ICkgewoJCWlmICggZm9ybUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiAp
ICkgewoJCQlyZXR1cm4gZm9ybUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwoJCX0KCQkv
LyBEb2VzIG5vdCByZXR1cm4gc28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCgkJZWxl
bS52YWx1ZSA9IHZhbHVlOwoJfQp9OwoKLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9z
ZXR0aW5nIHNvbWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKaWYgKCAhalF1ZXJ5
LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlICkgewoKCS8vIHByb3BGaXggaXMgbW9yZSBjb21wcmVo
ZW5zaXZlIGFuZCBjb250YWlucyBhbGwgZml4ZXMKCWpRdWVyeS5hdHRyRml4ID0galF1ZXJ5LnBy
b3BGaXg7CgkKCS8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIG9uIGEgZm9ybSBpbiBJRTYv
NwoJZm9ybUhvb2sgPSBqUXVlcnkuYXR0ckhvb2tzLm5hbWUgPSBqUXVlcnkudmFsSG9va3MuYnV0
dG9uID0gewoJCWdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJCXZhciByZXQ7CgkJCXJl
dCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwoJCQkvLyBSZXR1cm4gdW5kZWZpbmVk
IGlmIG5vZGVWYWx1ZSBpcyBlbXB0eSBzdHJpbmcKCQkJcmV0dXJuIHJldCAmJiByZXQubm9kZVZh
bHVlICE9PSAiIiA/CgkJCQlyZXQubm9kZVZhbHVlIDoKCQkJCXVuZGVmaW5lZDsKCQl9LAoJCXNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewoJCQkvLyBDaGVjayBmb3JtIG9iamVj
dHMgaW4gSUUgKG11bHRpcGxlIGJ1Z3MgcmVsYXRlZCkKCQkJLy8gT25seSB1c2Ugbm9kZVZhbHVl
IGlmIHRoZSBhdHRyaWJ1dGUgbm9kZSBleGlzdHMgb24gdGhlIGZvcm0KCQkJdmFyIHJldCA9IGVs
ZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwoJCQlpZiAoIHJldCApIHsKCQkJCXJldC5ub2Rl
VmFsdWUgPSB2YWx1ZTsKCQkJCXJldHVybiB2YWx1ZTsKCQkJfQoJCX0KCX07CgoJLy8gU2V0IHdp
ZHRoIGFuZCBoZWlnaHQgdG8gYXV0byBpbnN0ZWFkIG9mIDAgb24gZW1wdHkgc3RyaW5nKCBCdWcg
IzgxNTAgKQoJLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKCWpRdWVyeS5lYWNoKFsgIndpZHRoIiwg
ImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CgkJalF1ZXJ5LmF0dHJIb29rc1sgbmFt
ZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CgkJCXNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQkJaWYgKCB2YWx1ZSA9PT0gIiIgKSB7CgkJCQkJ
ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwoJCQkJCXJldHVybiB2YWx1ZTsKCQkJ
CX0KCQkJfQoJCX0pOwoJfSk7Cn0KCgovLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNp
YWwgY2FsbCBvbiBJRQppZiAoICFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCApIHsKCWpR
dWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24o
IGksIG5hbWUgKSB7CgkJalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCgg
alF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJ
CQl2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsKCQkJCXJldHVybiByZXQg
PT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7CgkJCX0KCQl9KTsKCX0pOwp9CgppZiAoICFqUXVl
cnkuc3VwcG9ydC5zdHlsZSApIHsKCWpRdWVyeS5hdHRySG9va3Muc3R5bGUgPSB7CgkJZ2V0OiBm
dW5jdGlvbiggZWxlbSApIHsKCQkJLy8gUmV0dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBl
bXB0eSBzdHJpbmcKCQkJLy8gTm9ybWFsaXplIHRvIGxvd2VyY2FzZSBzaW5jZSBJRSB1cHBlcmNh
c2VzIGNzcyBwcm9wZXJ0eSBuYW1lcwoJCQlyZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0LnRvTG93
ZXJDYXNlKCkgfHwgdW5kZWZpbmVkOwoJCX0sCgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUg
KSB7CgkJCXJldHVybiAoZWxlbS5zdHlsZS5jc3NUZXh0ID0gIiIgKyB2YWx1ZSk7CgkJfQoJfTsK
fQoKLy8gU2FmYXJpIG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9m
IGFuIG9wdGlvbgovLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5kZXggcHJvcGVy
dHkgZml4ZXMgaXQKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CglqUXVlcnku
cHJvcEhvb2tzLnNlbGVjdGVkID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxl
Y3RlZCwgewoJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXZhciBwYXJlbnQgPSBlbGVtLnBh
cmVudE5vZGU7CgoJCQlpZiAoIHBhcmVudCApIHsKCQkJCXBhcmVudC5zZWxlY3RlZEluZGV4OwoK
CQkJCS8vIE1ha2Ugc3VyZSB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCBvcHRncm91cHMsIHNlZSAj
NTcwMQoJCQkJaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKCQkJCQlwYXJlbnQucGFyZW50Tm9k
ZS5zZWxlY3RlZEluZGV4OwoJCQkJfQoJCQl9CgkJfQoJfSk7Cn0KCi8vIFJhZGlvcyBhbmQgY2hl
Y2tib3hlcyBnZXR0ZXIvc2V0dGVyCmlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7Cglq
UXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CgkJalF1ZXJ5
LnZhbEhvb2tzWyB0aGlzIF0gPSB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQkvLyBI
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgaW4gV2Via2l0ICIiIGlzIHJldHVybmVkIGluc3RlYWQgb2Yg
Im9uIiBpZiBhIHZhbHVlIGlzbid0IHNwZWNpZmllZAoJCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7CgkJCX0KCQl9OwoJfSk7
Cn0KalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewoJalF1
ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9va3NbIHRo
aXMgXSwgewoJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQlpZiAoIGpRdWVyeS5p
c0FycmF5KCB2YWx1ZSApICkgewoJCQkJcmV0dXJuIChlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5B
cnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDApOwoJCQl9CgkJfQoJfSk7Cn0p
OwoKCgoKdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCglybmFt
ZXNwYWNlcyA9IC9cLiguKikkLywKCXJmb3JtRWxlbXMgPSAvXig/OnRleHRhcmVhfGlucHV0fHNl
bGVjdCkkL2ksCglycGVyaW9kID0gL1wuL2csCglyc3BhY2VzID0gLyAvZywKCXJlc2NhcGUgPSAv
W15cd1xzLnxgXS9nLAoJZmNsZWFudXAgPSBmdW5jdGlvbiggbm0gKSB7CgkJcmV0dXJuIG5tLnJl
cGxhY2UocmVzY2FwZSwgIlxcJCYiKTsKCX07CgovKgogKiBBIG51bWJlciBvZiBoZWxwZXIgZnVu
Y3Rpb25zIHVzZWQgZm9yIG1hbmFnaW5nIGV2ZW50cy4KICogTWFueSBvZiB0aGUgaWRlYXMgYmVo
aW5kIHRoaXMgY29kZSBvcmlnaW5hdGVkIGZyb20KICogRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBs
aWJyYXJ5LgogKi8KalF1ZXJ5LmV2ZW50ID0gewoKCS8vIEJpbmQgYW4gZXZlbnQgdG8gYW4gZWxl
bWVudAoJLy8gT3JpZ2luYWwgYnkgRGVhbiBFZHdhcmRzCglhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0
eXBlcywgaGFuZGxlciwgZGF0YSApIHsKCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxl
bS5ub2RlVHlwZSA9PT0gOCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCBoYW5kbGVyID09PSBm
YWxzZSApIHsKCQkJaGFuZGxlciA9IHJldHVybkZhbHNlOwoJCX0gZWxzZSBpZiAoICFoYW5kbGVy
ICkgewoJCQkvLyBGaXhlcyBidWcgIzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9uCgkJ
CXJldHVybjsKCQl9CgoJCXZhciBoYW5kbGVPYmpJbiwgaGFuZGxlT2JqOwoKCQlpZiAoIGhhbmRs
ZXIuaGFuZGxlciApIHsKCQkJaGFuZGxlT2JqSW4gPSBoYW5kbGVyOwoJCQloYW5kbGVyID0gaGFu
ZGxlT2JqSW4uaGFuZGxlcjsKCQl9CgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBi
ZWluZyBleGVjdXRlZCBoYXMgYSB1bmlxdWUgSUQKCQlpZiAoICFoYW5kbGVyLmd1aWQgKSB7CgkJ
CWhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7CgkJfQoKCQkvLyBJbml0IHRoZSBlbGVtZW50
J3MgZXZlbnQgc3RydWN0dXJlCgkJdmFyIGVsZW1EYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtICk7
CgoJCS8vIElmIG5vIGVsZW1EYXRhIGlzIGZvdW5kIHRoZW4gd2UgbXVzdCBiZSB0cnlpbmcgdG8g
YmluZCB0byBvbmUgb2YgdGhlCgkJLy8gYmFubmVkIG5vRGF0YSBlbGVtZW50cwoJCWlmICggIWVs
ZW1EYXRhICkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRz
LAoJCQlldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKCgkJaWYgKCAhZXZlbnRzICkgewoJ
CQllbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKCQl9CgoJCWlmICggIWV2ZW50SGFuZGxl
ICkgewoJCQllbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRsZSA9IGZ1bmN0aW9uKCBlICkgewoJ
CQkJLy8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIo
KSBhbmQKCQkJCS8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5s
b2FkZWQKCQkJCXJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwg
alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/CgkJCQkJalF1ZXJ5LmV2ZW50Lmhh
bmRsZS5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgoJCQkJCXVuZGVmaW5l
ZDsKCQkJfTsKCQl9CgoJCS8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBm
dW5jdGlvbgoJCS8vIFRoaXMgaXMgdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdpdGggbm9uLW5h
dGl2ZSBldmVudHMgaW4gSUUuCgkJZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07CgoJCS8vIEhhbmRs
ZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKCQkvLyBqUXVlcnkoLi4uKS5i
aW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7CgkJdHlwZXMgPSB0eXBlcy5zcGxpdCgiICIp
OwoKCQl2YXIgdHlwZSwgaSA9IDAsIG5hbWVzcGFjZXM7CgoJCXdoaWxlICggKHR5cGUgPSB0eXBl
c1sgaSsrIF0pICkgewoJCQloYW5kbGVPYmogPSBoYW5kbGVPYmpJbiA/CgkJCQlqUXVlcnkuZXh0
ZW5kKHt9LCBoYW5kbGVPYmpJbikgOgoJCQkJeyBoYW5kbGVyOiBoYW5kbGVyLCBkYXRhOiBkYXRh
IH07CgoJCQkvLyBOYW1lc3BhY2VkIGV2ZW50IGhhbmRsZXJzCgkJCWlmICggdHlwZS5pbmRleE9m
KCIuIikgPiAtMSApIHsKCQkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CgkJCQl0eXBl
ID0gbmFtZXNwYWNlcy5zaGlmdCgpOwoJCQkJaGFuZGxlT2JqLm5hbWVzcGFjZSA9IG5hbWVzcGFj
ZXMuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKTsKCgkJCX0gZWxzZSB7CgkJCQluYW1lc3BhY2Vz
ID0gW107CgkJCQloYW5kbGVPYmoubmFtZXNwYWNlID0gIiI7CgkJCX0KCgkJCWhhbmRsZU9iai50
eXBlID0gdHlwZTsKCQkJaWYgKCAhaGFuZGxlT2JqLmd1aWQgKSB7CgkJCQloYW5kbGVPYmouZ3Vp
ZCA9IGhhbmRsZXIuZ3VpZDsKCQkJfQoKCQkJLy8gR2V0IHRoZSBjdXJyZW50IGxpc3Qgb2YgZnVu
Y3Rpb25zIGJvdW5kIHRvIHRoaXMgZXZlbnQKCQkJdmFyIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBl
IF0sCgkJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCgkJ
CS8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUKCQkJaWYgKCAhaGFuZGxlcnMgKSB7CgkJ
CQloYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107CgoJCQkJLy8gQ2hlY2sgZm9yIGEgc3Bl
Y2lhbCBldmVudCBoYW5kbGVyCgkJCQkvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFj
aEV2ZW50IGlmIHRoZSBzcGVjaWFsCgkJCQkvLyBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNl
CgkJCQlpZiAoICFzcGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0
YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7CgkJCQkJLy8gQmluZCB0
aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKCQkJCQlpZiAoIGVsZW0uYWRk
RXZlbnRMaXN0ZW5lciApIHsKCQkJCQkJZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVu
dEhhbmRsZSwgZmFsc2UgKTsKCgkJCQkJfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsK
CQkJCQkJZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7CgkJCQkJ
fQoJCQkJfQoJCQl9CgoJCQlpZiAoIHNwZWNpYWwuYWRkICkgewoJCQkJc3BlY2lhbC5hZGQuY2Fs
bCggZWxlbSwgaGFuZGxlT2JqICk7CgoJCQkJaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCAp
IHsKCQkJCQloYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkOwoJCQkJfQoJCQl9
CgoJCQkvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0CgkJ
CWhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwoKCQkJLy8gS2VlcCB0cmFjayBvZiB3aGljaCBl
dmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KCQkJalF1ZXJ5LmV2
ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKCQl9CgoJCS8vIE51bGxpZnkgZWxlbSB0byBwcmV2
ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQoJCWVsZW0gPSBudWxsOwoJfSwKCglnbG9iYWw6IHt9LAoK
CS8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAoJcmVt
b3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHBvcyApIHsKCQkvLyBkb24ndCBk
byBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwoJCWlmICggZWxlbS5ub2RlVHlwZSA9
PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIGhh
bmRsZXIgPT09IGZhbHNlICkgewoJCQloYW5kbGVyID0gcmV0dXJuRmFsc2U7CgkJfQoKCQl2YXIg
cmV0LCB0eXBlLCBmbiwgaiwgaSA9IDAsIGFsbCwgbmFtZXNwYWNlcywgbmFtZXNwYWNlLCBzcGVj
aWFsLCBldmVudFR5cGUsIGhhbmRsZU9iaiwgb3JpZ1R5cGUsCgkJCWVsZW1EYXRhID0galF1ZXJ5
Lmhhc0RhdGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKSwKCQkJZXZlbnRzID0gZWxl
bURhdGEgJiYgZWxlbURhdGEuZXZlbnRzOwoKCQlpZiAoICFlbGVtRGF0YSB8fCAhZXZlbnRzICkg
ewoJCQlyZXR1cm47CgkJfQoKCQkvLyB0eXBlcyBpcyBhY3R1YWxseSBhbiBldmVudCBvYmplY3Qg
aGVyZQoJCWlmICggdHlwZXMgJiYgdHlwZXMudHlwZSApIHsKCQkJaGFuZGxlciA9IHR5cGVzLmhh
bmRsZXI7CgkJCXR5cGVzID0gdHlwZXMudHlwZTsKCQl9CgoJCS8vIFVuYmluZCBhbGwgZXZlbnRz
IGZvciB0aGUgZWxlbWVudAoJCWlmICggIXR5cGVzIHx8IHR5cGVvZiB0eXBlcyA9PT0gInN0cmlu
ZyIgJiYgdHlwZXMuY2hhckF0KDApID09PSAiLiIgKSB7CgkJCXR5cGVzID0gdHlwZXMgfHwgIiI7
CgoJCQlmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVs
ZW0sIHR5cGUgKyB0eXBlcyApOwoJCQl9CgoJCQlyZXR1cm47CgkJfQoKCQkvLyBIYW5kbGUgbXVs
dGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCgkJLy8galF1ZXJ5KC4uLikudW5iaW5k
KCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7CgkJdHlwZXMgPSB0eXBlcy5zcGxpdCgiICIpOwoK
CQl3aGlsZSAoICh0eXBlID0gdHlwZXNbIGkrKyBdKSApIHsKCQkJb3JpZ1R5cGUgPSB0eXBlOwoJ
CQloYW5kbGVPYmogPSBudWxsOwoJCQlhbGwgPSB0eXBlLmluZGV4T2YoIi4iKSA8IDA7CgkJCW5h
bWVzcGFjZXMgPSBbXTsKCgkJCWlmICggIWFsbCApIHsKCQkJCS8vIE5hbWVzcGFjZWQgZXZlbnQg
aGFuZGxlcnMKCQkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CgkJCQl0eXBlID0gbmFt
ZXNwYWNlcy5zaGlmdCgpOwoKCQkJCW5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsK
CQkJCQlqUXVlcnkubWFwKCBuYW1lc3BhY2VzLnNsaWNlKDApLnNvcnQoKSwgZmNsZWFudXAgKS5q
b2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpOwoJCQl9CgoJCQlldmVudFR5cGUgPSBl
dmVudHNbIHR5cGUgXTsKCgkJCWlmICggIWV2ZW50VHlwZSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9
CgoJCQlpZiAoICFoYW5kbGVyICkgewoJCQkJZm9yICggaiA9IDA7IGogPCBldmVudFR5cGUubGVu
Z3RoOyBqKysgKSB7CgkJCQkJaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07CgoJCQkJCWlmICgg
YWxsIHx8IG5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CgkJCQkJCWpR
dWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIG9yaWdUeXBlLCBoYW5kbGVPYmouaGFuZGxlciwgaiAp
OwoJCQkJCQlldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKCQkJCQl9CgkJCQl9CgoJCQkJY29u
dGludWU7CgkJCX0KCgkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8
IHt9OwoKCQkJZm9yICggaiA9IHBvcyB8fCAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkg
ewoJCQkJaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07CgoJCQkJaWYgKCBoYW5kbGVyLmd1aWQg
PT09IGhhbmRsZU9iai5ndWlkICkgewoJCQkJCS8vIHJlbW92ZSB0aGUgZ2l2ZW4gaGFuZGxlciBm
b3IgdGhlIGdpdmVuIHR5cGUKCQkJCQlpZiAoIGFsbCB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxl
T2JqLm5hbWVzcGFjZSApICkgewoJCQkJCQlpZiAoIHBvcyA9PSBudWxsICkgewoJCQkJCQkJZXZl
bnRUeXBlLnNwbGljZSggai0tLCAxICk7CgkJCQkJCX0KCgkJCQkJCWlmICggc3BlY2lhbC5yZW1v
dmUgKSB7CgkJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKCQkJ
CQkJfQoJCQkJCX0KCgkJCQkJaWYgKCBwb3MgIT0gbnVsbCApIHsKCQkJCQkJYnJlYWs7CgkJCQkJ
fQoJCQkJfQoJCQl9CgoJCQkvLyByZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIG5vIG1v
cmUgaGFuZGxlcnMgZXhpc3QKCQkJaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwIHx8IHBvcyAh
PSBudWxsICYmIGV2ZW50VHlwZS5sZW5ndGggPT09IDEgKSB7CgkJCQlpZiAoICFzcGVjaWFsLnRl
YXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcyApID09PSBm
YWxzZSApIHsKCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhh
bmRsZSApOwoJCQkJfQoKCQkJCXJldCA9IG51bGw7CgkJCQlkZWxldGUgZXZlbnRzWyB0eXBlIF07
CgkJCX0KCQl9CgoJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2Vk
CgkJaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7CgkJCXZhciBoYW5kbGUg
PSBlbGVtRGF0YS5oYW5kbGU7CgkJCWlmICggaGFuZGxlICkgewoJCQkJaGFuZGxlLmVsZW0gPSBu
dWxsOwoJCQl9CgoJCQlkZWxldGUgZWxlbURhdGEuZXZlbnRzOwoJCQlkZWxldGUgZWxlbURhdGEu
aGFuZGxlOwoKCQkJaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZWxlbURhdGEgKSApIHsKCQkJ
CWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB1bmRlZmluZWQsIHRydWUgKTsKCQkJfQoJCX0KCX0s
CgkKCS8vIEV2ZW50cyB0aGF0IGFyZSBzYWZlIHRvIHNob3J0LWNpcmN1aXQgaWYgbm8gaGFuZGxl
cnMgYXJlIGF0dGFjaGVkLgoJLy8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRl
ZCwgdGhleSBtYXkgaGF2ZSBpbmxpbmUgaGFuZGxlcnMuCgljdXN0b21FdmVudDogewoJCSJnZXRE
YXRhIjogdHJ1ZSwKCQkic2V0RGF0YSI6IHRydWUsCgkJImNoYW5nZURhdGEiOiB0cnVlCgl9LAoK
CXRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewoJ
CS8vIEV2ZW50IG9iamVjdCBvciBldmVudCB0eXBlCgkJdmFyIHR5cGUgPSBldmVudC50eXBlIHx8
IGV2ZW50LAoJCQluYW1lc3BhY2VzID0gW10sCgkJCWV4Y2x1c2l2ZTsKCgkJaWYgKCB0eXBlLmlu
ZGV4T2YoIiEiKSA+PSAwICkgewoJCQkvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIgb25seSBm
b3IgdGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3BhY2VzKQoJCQl0eXBlID0gdHlwZS5zbGljZSgw
LCAtMSk7CgkJCWV4Y2x1c2l2ZSA9IHRydWU7CgkJfQoKCQlpZiAoIHR5cGUuaW5kZXhPZigiLiIp
ID49IDAgKSB7CgkJCS8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1h
dGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKCQkJbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4i
KTsKCQkJdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKCQkJbmFtZXNwYWNlcy5zb3J0KCk7CgkJ
fQoKCQlpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUgXSkgJiYg
IWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKCQkJLy8gTm8galF1ZXJ5IGhhbmRsZXJz
IGZvciB0aGlzIGV2ZW50IHR5cGUsIGFuZCBpdCBjYW4ndCBoYXZlIGlubGluZSBoYW5kbGVycwoJ
CQlyZXR1cm47CgkJfQoKCQkvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gRXZlbnQsIE9iamVjdCwg
b3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZwoJCWV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAi
b2JqZWN0IiA/CgkJCS8vIGpRdWVyeS5FdmVudCBvYmplY3QKCQkJZXZlbnRbIGpRdWVyeS5leHBh
bmRvIF0gPyBldmVudCA6CgkJCS8vIE9iamVjdCBsaXRlcmFsCgkJCW5ldyBqUXVlcnkuRXZlbnQo
IHR5cGUsIGV2ZW50ICkgOgoJCQkvLyBKdXN0IHRoZSBldmVudCB0eXBlIChzdHJpbmcpCgkJCW5l
dyBqUXVlcnkuRXZlbnQoIHR5cGUgKTsKCgkJZXZlbnQudHlwZSA9IHR5cGU7CgkJZXZlbnQuZXhj
bHVzaXZlID0gZXhjbHVzaXZlOwoJCWV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbigi
LiIpOwoJCWV2ZW50Lm5hbWVzcGFjZV9yZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsgbmFtZXNw
YWNlcy5qb2luKCJcXC4oPzouKlxcLik/IikgKyAiKFxcLnwkKSIpOwoJCQoJCS8vIHRyaWdnZXJI
YW5kbGVyKCkgYW5kIGdsb2JhbCBldmVudHMgZG9uJ3QgYnViYmxlIG9yIHJ1biB0aGUgZGVmYXVs
dCBhY3Rpb24KCQlpZiAoIG9ubHlIYW5kbGVycyB8fCAhZWxlbSApIHsKCQkJZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgkJfQoKCQkvLyBIYW5kbGUg
YSBnbG9iYWwgdHJpZ2dlcgoJCWlmICggIWVsZW0gKSB7CgkJCS8vIFRPRE86IFN0b3AgdGF1bnRp
bmcgdGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNo
IHRvIGRvY3VtZW50CgkJCWpRdWVyeS5lYWNoKCBqUXVlcnkuY2FjaGUsIGZ1bmN0aW9uKCkgewoJ
CQkJLy8gaW50ZXJuYWxLZXkgdmFyaWFibGUgaXMganVzdCB1c2VkIHRvIG1ha2UgaXQgZWFzaWVy
IHRvIGZpbmQKCQkJCS8vIGFuZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhpcyBzdHVmZiBsYXRlcjsg
Y3VycmVudGx5IGl0IGp1c3QKCQkJCS8vIHBvaW50cyB0byBqUXVlcnkuZXhwYW5kbwoJCQkJdmFy
IGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCgkJCQkJaW50ZXJuYWxDYWNoZSA9IHRoaXNb
IGludGVybmFsS2V5IF07CgkJCQlpZiAoIGludGVybmFsQ2FjaGUgJiYgaW50ZXJuYWxDYWNoZS5l
dmVudHMgJiYgaW50ZXJuYWxDYWNoZS5ldmVudHNbIHR5cGUgXSApIHsKCQkJCQlqUXVlcnkuZXZl
bnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGludGVybmFsQ2FjaGUuaGFuZGxlLmVsZW0gKTsKCQkJ
CX0KCQkJfSk7CgkJCXJldHVybjsKCQl9CgoJCS8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFu
ZCBjb21tZW50IG5vZGVzCgkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5
cGUgPT09IDggKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBj
YXNlIGl0IGlzIGJlaW5nIHJldXNlZAoJCWV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDsKCQlldmVu
dC50YXJnZXQgPSBlbGVtOwoKCQkvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVu
ZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0CgkJZGF0YSA9IGRhdGEg
PyBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgOiBbXTsKCQlkYXRhLnVuc2hpZnQoIGV2ZW50ICk7
CgoJCXZhciBjdXIgPSBlbGVtLAoJCQkvLyBJRSBkb2Vzbid0IGxpa2UgbWV0aG9kIG5hbWVzIHdp
dGggYSBjb2xvbiAoIzM1MzMsICM4MjcyKQoJCQlvbnR5cGUgPSB0eXBlLmluZGV4T2YoIjoiKSA8
IDAgPyAib24iICsgdHlwZSA6ICIiOwoKCQkvLyBGaXJlIGV2ZW50IG9uIHRoZSBjdXJyZW50IGVs
ZW1lbnQsIHRoZW4gYnViYmxlIHVwIHRoZSBET00gdHJlZQoJCWRvIHsKCQkJdmFyIGhhbmRsZSA9
IGpRdWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOwoKCQkJZXZlbnQuY3VycmVudFRhcmdldCA9
IGN1cjsKCQkJaWYgKCBoYW5kbGUgKSB7CgkJCQloYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwoJ
CQl9CgoJCQkvLyBUcmlnZ2VyIGFuIGlubGluZSBib3VuZCBzY3JpcHQKCQkJaWYgKCBvbnR5cGUg
JiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciApICYmIGN1clsgb250eXBlIF0gJiYgY3VyWyBvbnR5
cGUgXS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewoJCQkJZXZlbnQucmVzdWx0ID0g
ZmFsc2U7CgkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9CgoJCQkvLyBCdWJibGUgdXAg
dG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93CgkJCWN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IGN1
ci5vd25lckRvY3VtZW50IHx8IGN1ciA9PT0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgJiYg
d2luZG93OwoJCX0gd2hpbGUgKCBjdXIgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkg
KTsKCgkJLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5v
dwoJCWlmICggIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewoJCQl2YXIgb2xkLAoJCQkJ
c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgoJCQlpZiAoICgh
c3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmNhbGwoIGVsZW0ub3duZXJEb2N1
bWVudCwgZXZlbnQgKSA9PT0gZmFsc2UpICYmCgkJCQkhKHR5cGUgPT09ICJjbGljayIgJiYgalF1
ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSAp
IHsKCgkJCQkvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRo
ZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCgkJCQkvLyBDYW4ndCB1c2UgYW4gLmlzRnVu
Y3Rpb24pKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KCQkJCS8v
IElFPDkgZGllcyBvbiBmb2N1cyB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYpLCBtYXkgd2FudCB0
byByZXZpc2l0IGEgdHJ5L2NhdGNoLgoJCQkJdHJ5IHsKCQkJCQlpZiAoIG9udHlwZSAmJiBlbGVt
WyB0eXBlIF0gKSB7CgkJCQkJCS8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hl
biB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKCQkJCQkJb2xkID0gZWxlbVsgb250eXBlIF07CgoJ
CQkJCQlpZiAoIG9sZCApIHsKCQkJCQkJCWVsZW1bIG9udHlwZSBdID0gbnVsbDsKCQkJCQkJfQoK
CQkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7CgkJCQkJCWVsZW1bIHR5cGUgXSgp
OwoJCQkJCX0KCQkJCX0gY2F0Y2ggKCBpZUVycm9yICkge30KCgkJCQlpZiAoIG9sZCApIHsKCQkJ
CQllbGVtWyBvbnR5cGUgXSA9IG9sZDsKCQkJCX0KCgkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcmVk
ID0gdW5kZWZpbmVkOwoJCQl9CgkJfQoJCQoJCXJldHVybiBldmVudC5yZXN1bHQ7Cgl9LAoKCWhh
bmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewoJCWV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZl
bnQgfHwgd2luZG93LmV2ZW50ICk7CgkJLy8gU25hcHNob3QgdGhlIGhhbmRsZXJzIGxpc3Qgc2lu
Y2UgYSBjYWxsZWQgaGFuZGxlciBtYXkgYWRkL3JlbW92ZSBldmVudHMuCgkJdmFyIGhhbmRsZXJz
ID0gKChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30pWyBldmVudC50eXBlIF0g
fHwgW10pLnNsaWNlKDApLAoJCQlydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQu
bmFtZXNwYWNlLAoJCQlhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50
cywgMCApOwoKCQkvLyBVc2UgdGhlIGZpeC1lZCBFdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQt
b25seSkgbmF0aXZlIGV2ZW50CgkJYXJnc1swXSA9IGV2ZW50OwoJCWV2ZW50LmN1cnJlbnRUYXJn
ZXQgPSB0aGlzOwoKCQlmb3IgKCB2YXIgaiA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGogPCBs
OyBqKysgKSB7CgkJCXZhciBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdOwoKCQkJLy8gVHJpZ2dl
cmVkIGV2ZW50IG11c3QgMSkgYmUgbm9uLWV4Y2x1c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2Us
IG9yCgkJCS8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3Nl
IGluIHRoZSBib3VuZCBldmVudC4KCQkJaWYgKCBydW5fYWxsIHx8IGV2ZW50Lm5hbWVzcGFjZV9y
ZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CgkJCQkvLyBQYXNzIGluIGEgcmVmZXJl
bmNlIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZgoJCQkJLy8gU28gdGhhdCB3ZSBjYW4g
bGF0ZXIgcmVtb3ZlIGl0CgkJCQlldmVudC5oYW5kbGVyID0gaGFuZGxlT2JqLmhhbmRsZXI7CgkJ
CQlldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CgkJCQlldmVudC5oYW5kbGVPYmogPSBoYW5k
bGVPYmo7CgoJCQkJdmFyIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmdz
ICk7CgoJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQlldmVudC5yZXN1bHQgPSBy
ZXQ7CgkJCQkJaWYgKCByZXQgPT09IGZhbHNlICkgewoJCQkJCQlldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwoJCQkJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJCQl9CgkJCQl9CgoJCQkJaWYg
KCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewoJCQkJCWJyZWFrOwoJ
CQkJfQoJCQl9CgkJfQoJCXJldHVybiBldmVudC5yZXN1bHQ7Cgl9LAoKCXByb3BzOiAiYWx0S2V5
IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBj
bGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhh
c2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtleSBuZXdW
YWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJl
bGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRv
RWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksCgoJZml4OiBmdW5jdGlv
biggZXZlbnQgKSB7CgkJaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKCQkJcmV0dXJu
IGV2ZW50OwoJCX0KCgkJLy8gc3RvcmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBldmVudCBvYmpl
Y3QKCQkvLyBhbmQgImNsb25lIiB0byBzZXQgcmVhZC1vbmx5IHByb3BlcnRpZXMKCQl2YXIgb3Jp
Z2luYWxFdmVudCA9IGV2ZW50OwoJCWV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50
ICk7CgoJCWZvciAoIHZhciBpID0gdGhpcy5wcm9wcy5sZW5ndGgsIHByb3A7IGk7ICkgewoJCQlw
cm9wID0gdGhpcy5wcm9wc1sgLS1pIF07CgkJCWV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50
WyBwcm9wIF07CgkJfQoKCQkvLyBGaXggdGFyZ2V0IHByb3BlcnR5LCBpZiBuZWNlc3NhcnkKCQlp
ZiAoICFldmVudC50YXJnZXQgKSB7CgkJCS8vIEZpeGVzICMxOTI1IHdoZXJlIHNyY0VsZW1lbnQg
bWlnaHQgbm90IGJlIGRlZmluZWQgZWl0aGVyCgkJCWV2ZW50LnRhcmdldCA9IGV2ZW50LnNyY0Vs
ZW1lbnQgfHwgZG9jdW1lbnQ7CgkJfQoKCQkvLyBjaGVjayBpZiB0YXJnZXQgaXMgYSB0ZXh0bm9k
ZSAoc2FmYXJpKQoJCWlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgewoJCQlldmVu
dC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKCQl9CgoJCS8vIEFkZCByZWxhdGVk
VGFyZ2V0LCBpZiBuZWNlc3NhcnkKCQlpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGV2ZW50
LmZyb21FbGVtZW50ICkgewoJCQlldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1l
bnQgPT09IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50
OwoJCX0KCgkJLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2
YWlsYWJsZQoJCWlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBldmVudC5jbGllbnRYICE9IG51
bGwgKSB7CgkJCXZhciBldmVudERvY3VtZW50ID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQg
fHwgZG9jdW1lbnQsCgkJCQlkb2MgPSBldmVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKCQkJ
CWJvZHkgPSBldmVudERvY3VtZW50LmJvZHk7CgoJCQlldmVudC5wYWdlWCA9IGV2ZW50LmNsaWVu
dFggKyAoZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8
IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8
fCAwKTsKCQkJZXZlbnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgKGRvYyAmJiBkb2Muc2Nyb2xs
VG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVu
dFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCk7CgkJfQoKCQkvLyBBZGQgd2hp
Y2ggZm9yIGtleSBldmVudHMKCQlpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgKGV2ZW50LmNo
YXJDb2RlICE9IG51bGwgfHwgZXZlbnQua2V5Q29kZSAhPSBudWxsKSApIHsKCQkJZXZlbnQud2hp
Y2ggPSBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlD
b2RlOwoJCX0KCgkJLy8gQWRkIG1ldGFLZXkgdG8gbm9uLU1hYyBicm93c2VycyAodXNlIGN0cmwg
Zm9yIFBDJ3MgYW5kIE1ldGEgZm9yIE1hY3MpCgkJaWYgKCAhZXZlbnQubWV0YUtleSAmJiBldmVu
dC5jdHJsS2V5ICkgewoJCQlldmVudC5tZXRhS2V5ID0gZXZlbnQuY3RybEtleTsKCQl9CgoJCS8v
IEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmln
aHQKCQkvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAoJ
CWlmICggIWV2ZW50LndoaWNoICYmIGV2ZW50LmJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewoJCQll
dmVudC53aGljaCA9IChldmVudC5idXR0b24gJiAxID8gMSA6ICggZXZlbnQuYnV0dG9uICYgMiA/
IDMgOiAoIGV2ZW50LmJ1dHRvbiAmIDQgPyAyIDogMCApICkpOwoJCX0KCgkJcmV0dXJuIGV2ZW50
OwoJfSwKCgkvLyBEZXByZWNhdGVkLCB1c2UgalF1ZXJ5Lmd1aWQgaW5zdGVhZAoJZ3VpZDogMUU4
LAoKCS8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkucHJveHkgaW5zdGVhZAoJcHJveHk6IGpRdWVy
eS5wcm94eSwKCglzcGVjaWFsOiB7CgkJcmVhZHk6IHsKCQkJLy8gTWFrZSBzdXJlIHRoZSByZWFk
eSBldmVudCBpcyBzZXR1cAoJCQlzZXR1cDogalF1ZXJ5LmJpbmRSZWFkeSwKCQkJdGVhcmRvd246
IGpRdWVyeS5ub29wCgkJfSwKCgkJbGl2ZTogewoJCQlhZGQ6IGZ1bmN0aW9uKCBoYW5kbGVPYmog
KSB7CgkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLAoJCQkJCWxpdmVDb252ZXJ0KCBoYW5kbGVP
Ymoub3JpZ1R5cGUsIGhhbmRsZU9iai5zZWxlY3RvciApLAoJCQkJCWpRdWVyeS5leHRlbmQoe30s
IGhhbmRsZU9iaiwge2hhbmRsZXI6IGxpdmVIYW5kbGVyLCBndWlkOiBoYW5kbGVPYmouaGFuZGxl
ci5ndWlkfSkgKTsKCQkJfSwKCgkJCXJlbW92ZTogZnVuY3Rpb24oIGhhbmRsZU9iaiApIHsKCQkJ
CWpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIGxpdmVDb252ZXJ0KCBoYW5kbGVPYmoub3JpZ1R5
cGUsIGhhbmRsZU9iai5zZWxlY3RvciApLCBoYW5kbGVPYmogKTsKCQkJfQoJCX0sCgoJCWJlZm9y
ZXVubG9hZDogewoJCQlzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFu
ZGxlICkgewoJCQkJLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdp
bmRvd3MKCQkJCWlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7CgkJCQkJdGhpcy5vbmJl
Zm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwoJCQkJfQoJCQl9LAoKCQkJdGVhcmRvd246IGZ1bmN0
aW9uKCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApIHsKCQkJCWlmICggdGhpcy5vbmJlZm9yZXVu
bG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7CgkJCQkJdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7
CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgpqUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyID8KCWZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CgkJaWYg
KCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CgkJCWVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5l
ciggdHlwZSwgaGFuZGxlLCBmYWxzZSApOwoJCX0KCX0gOgoJZnVuY3Rpb24oIGVsZW0sIHR5cGUs
IGhhbmRsZSApIHsKCQlpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7CgkJCWVsZW0uZGV0YWNoRXZl
bnQoICJvbiIgKyB0eXBlLCBoYW5kbGUgKTsKCQl9Cgl9OwoKalF1ZXJ5LkV2ZW50ID0gZnVuY3Rp
b24oIHNyYywgcHJvcHMgKSB7CgkvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICdu
ZXcnIGtleXdvcmQKCWlmICggIXRoaXMucHJldmVudERlZmF1bHQgKSB7CgkJcmV0dXJuIG5ldyBq
UXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKCX0KCgkvLyBFdmVudCBvYmplY3QKCWlmICggc3Jj
ICYmIHNyYy50eXBlICkgewoJCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKCQl0aGlzLnR5cGUg
PSBzcmMudHlwZTsKCgkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2
ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKCQkvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0
aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KCQl0aGlzLmlzRGVmYXVsdFByZXZl
bnRlZCA9IChzcmMuZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNl
IHx8CgkJCXNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSkg
PyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7CgoJLy8gRXZlbnQgdHlwZQoJfSBlbHNlIHsKCQl0
aGlzLnR5cGUgPSBzcmM7Cgl9CgoJLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGll
cyBvbnRvIHRoZSBldmVudCBvYmplY3QKCWlmICggcHJvcHMgKSB7CgkJalF1ZXJ5LmV4dGVuZCgg
dGhpcywgcHJvcHMgKTsKCX0KCgkvLyB0aW1lU3RhbXAgaXMgYnVnZ3kgZm9yIHNvbWUgZXZlbnRz
IG9uIEZpcmVmb3goIzM4NDMpCgkvLyBTbyB3ZSB3b24ndCByZWx5IG9uIHRoZSBuYXRpdmUgdmFs
dWUKCXRoaXMudGltZVN0YW1wID0galF1ZXJ5Lm5vdygpOwoKCS8vIE1hcmsgaXQgYXMgZml4ZWQK
CXRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOwp9OwoKZnVuY3Rpb24gcmV0dXJuRmFsc2Uo
KSB7CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKCXJldHVybiB0cnVl
Owp9CgovLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVk
IGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGlu
Zy5odG1sCmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CglwcmV2ZW50RGVmYXVsdDogZnVuY3Rp
b24oKSB7CgkJdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwoKCQl2YXIgZSA9
IHRoaXMub3JpZ2luYWxFdmVudDsKCQlpZiAoICFlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBp
ZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAoJCWlm
ICggZS5wcmV2ZW50RGVmYXVsdCApIHsKCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoKCQkvLyBvdGhl
cndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQg
dG8gZmFsc2UgKElFKQoJCX0gZWxzZSB7CgkJCWUucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQl9Cgl9
LAoJc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKCQl0aGlzLmlzUHJvcGFnYXRpb25TdG9w
cGVkID0gcmV0dXJuVHJ1ZTsKCgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CgkJaWYgKCAh
ZSApIHsKCQkJcmV0dXJuOwoJCX0KCQkvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBp
dCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQlpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgewoJCQll
LnN0b3BQcm9wYWdhdGlvbigpOwoJCX0KCQkvLyBvdGhlcndpc2Ugc2V0IHRoZSBjYW5jZWxCdWJi
bGUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUgKElFKQoJCWUuY2FuY2Vs
QnViYmxlID0gdHJ1ZTsKCX0sCglzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkg
ewoJCXRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoJCXRo
aXMuc3RvcFByb3BhZ2F0aW9uKCk7Cgl9LAoJaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxz
ZSwKCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCWlzSW1tZWRpYXRlUHJvcGFn
YXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZQp9OwoKLy8gQ2hlY2tzIGlmIGFuIGV2ZW50IGhhcHBl
bmVkIG9uIGFuIGVsZW1lbnQgd2l0aGluIGFub3RoZXIgZWxlbWVudAovLyBVc2VkIGluIGpRdWVy
eS5ldmVudC5zcGVjaWFsLm1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgaGFuZGxlcnMKdmFyIHdp
dGhpbkVsZW1lbnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7CgkvLyBDaGVjayBpZiBtb3VzZShvdmVy
fG91dCkgYXJlIHN0aWxsIHdpdGhpbiB0aGUgc2FtZSBwYXJlbnQgZWxlbWVudAoJdmFyIHBhcmVu
dCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7CgoJLy8gc2V0IHRoZSBjb3JyZWN0IGV2ZW50IHR5cGUK
CWV2ZW50LnR5cGUgPSBldmVudC5kYXRhOwoKCS8vIEZpcmVmb3ggc29tZXRpbWVzIGFzc2lnbnMg
cmVsYXRlZFRhcmdldCBhIFhVTCBlbGVtZW50CgkvLyB3aGljaCB3ZSBjYW5ub3QgYWNjZXNzIHRo
ZSBwYXJlbnROb2RlIHByb3BlcnR5IG9mCgl0cnkgewoKCQkvLyBDaHJvbWUgZG9lcyBzb21ldGhp
bmcgc2ltaWxhciwgdGhlIHBhcmVudE5vZGUgcHJvcGVydHkKCQkvLyBjYW4gYmUgYWNjZXNzZWQg
YnV0IGlzIG51bGwuCgkJaWYgKCBwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCAmJiAhcGFy
ZW50LnBhcmVudE5vZGUgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIFRyYXZlcnNlIHVwIHRoZSB0
cmVlCgkJd2hpbGUgKCBwYXJlbnQgJiYgcGFyZW50ICE9PSB0aGlzICkgewoJCQlwYXJlbnQgPSBw
YXJlbnQucGFyZW50Tm9kZTsKCQl9CgoJCWlmICggcGFyZW50ICE9PSB0aGlzICkgewoJCQkvLyBo
YW5kbGUgZXZlbnQgaWYgd2UgYWN0dWFsbHkganVzdCBtb3VzZWQgb24gdG8gYSBub24gc3ViLWVs
ZW1lbnQKCQkJalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgkJ
fQoKCS8vIGFzc3VtaW5nIHdlJ3ZlIGxlZnQgdGhlIGVsZW1lbnQgc2luY2Ugd2UgbW9zdCBsaWtl
bHkgbW91c2Vkb3ZlciBhIHh1bCBlbGVtZW50Cgl9IGNhdGNoKGUpIHsgfQp9LAoKLy8gSW4gY2Fz
ZSBvZiBldmVudCBkZWxlZ2F0aW9uLCB3ZSBvbmx5IG5lZWQgdG8gcmVuYW1lIHRoZSBldmVudC50
eXBlLAovLyBsaXZlSGFuZGxlciB3aWxsIHRha2UgY2FyZSBvZiB0aGUgcmVzdC4KZGVsZWdhdGUg
PSBmdW5jdGlvbiggZXZlbnQgKSB7CglldmVudC50eXBlID0gZXZlbnQuZGF0YTsKCWpRdWVyeS5l
dmVudC5oYW5kbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwp9OwoKLy8gQ3JlYXRlIG1vdXNl
ZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzCmpRdWVyeS5lYWNoKHsKCW1vdXNlZW50ZXI6ICJt
b3VzZW92ZXIiLAoJbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9LCBmdW5jdGlvbiggb3JpZywgZml4
ICkgewoJalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKCQlzZXR1cDogZnVuY3Rpb24o
IGRhdGEgKSB7CgkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIGZpeCwgZGF0YSAmJiBkYXRhLnNl
bGVjdG9yID8gZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50LCBvcmlnICk7CgkJfSwKCQl0ZWFyZG93
bjogZnVuY3Rpb24oIGRhdGEgKSB7CgkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIGZpeCwg
ZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8gZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50ICk7CgkJfQoJ
fTsKfSk7CgovLyBzdWJtaXQgZGVsZWdhdGlvbgppZiAoICFqUXVlcnkuc3VwcG9ydC5zdWJtaXRC
dWJibGVzICkgewoKCWpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKCQlzZXR1cDogZnVu
Y3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMgKSB7CgkJCWlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhp
cywgImZvcm0iICkgKSB7CgkJCQlqUXVlcnkuZXZlbnQuYWRkKHRoaXMsICJjbGljay5zcGVjaWFs
U3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CgkJCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwKCQkJCQkJ
dHlwZSA9IGVsZW0udHlwZTsKCgkJCQkJaWYgKCAodHlwZSA9PT0gInN1Ym1pdCIgfHwgdHlwZSA9
PT0gImltYWdlIikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCApIHsK
CQkJCQkJdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJCX0KCQkJCX0p
OwoKCQkJCWpRdWVyeS5ldmVudC5hZGQodGhpcywgImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLCBm
dW5jdGlvbiggZSApIHsKCQkJCQl2YXIgZWxlbSA9IGUudGFyZ2V0LAoJCQkJCQl0eXBlID0gZWxl
bS50eXBlOwoKCQkJCQlpZiAoICh0eXBlID09PSAidGV4dCIgfHwgdHlwZSA9PT0gInBhc3N3b3Jk
IikgJiYgalF1ZXJ5KCBlbGVtICkuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCAmJiBlLmtleUNvZGUg
PT09IDEzICkgewoJCQkJCQl0cmlnZ2VyKCAic3VibWl0IiwgdGhpcywgYXJndW1lbnRzICk7CgkJ
CQkJfQoJCQkJfSk7CgoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfSwKCgkJ
dGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzICkgewoJCQlqUXVlcnkuZXZlbnQucmVtb3Zl
KCB0aGlzLCAiLnNwZWNpYWxTdWJtaXQiICk7CgkJfQoJfTsKCn0KCi8vIGNoYW5nZSBkZWxlZ2F0
aW9uLCBoYXBwZW5zIGhlcmUgc28gd2UgaGF2ZSBiaW5kLgppZiAoICFqUXVlcnkuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzICkgewoKCXZhciBjaGFuZ2VGaWx0ZXJzLAoKCWdldFZhbCA9IGZ1bmN0aW9u
KCBlbGVtICkgewoJCXZhciB0eXBlID0gZWxlbS50eXBlLCB2YWwgPSBlbGVtLnZhbHVlOwoKCQlp
ZiAoIHR5cGUgPT09ICJyYWRpbyIgfHwgdHlwZSA9PT0gImNoZWNrYm94IiApIHsKCQkJdmFsID0g
ZWxlbS5jaGVja2VkOwoKCQl9IGVsc2UgaWYgKCB0eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiAp
IHsKCQkJdmFsID0gZWxlbS5zZWxlY3RlZEluZGV4ID4gLTEgPwoJCQkJalF1ZXJ5Lm1hcCggZWxl
bS5vcHRpb25zLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJCQlyZXR1cm4gZWxlbS5zZWxlY3RlZDsK
CQkJCX0pLmpvaW4oIi0iKSA6CgkJCQkiIjsKCgkJfSBlbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1l
KCBlbGVtLCAic2VsZWN0IiApICkgewoJCQl2YWwgPSBlbGVtLnNlbGVjdGVkSW5kZXg7CgkJfQoK
CQlyZXR1cm4gdmFsOwoJfSwKCgl0ZXN0Q2hhbmdlID0gZnVuY3Rpb24gdGVzdENoYW5nZSggZSAp
IHsKCQl2YXIgZWxlbSA9IGUudGFyZ2V0LCBkYXRhLCB2YWw7CgoJCWlmICggIXJmb3JtRWxlbXMu
dGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IGVsZW0ucmVhZE9ubHkgKSB7CgkJCXJldHVybjsKCQl9
CgoJCWRhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiICk7CgkJdmFsID0g
Z2V0VmFsKGVsZW0pOwoKCQkvLyB0aGUgY3VycmVudCBkYXRhIHdpbGwgYmUgYWxzbyByZXRyaWV2
ZWQgYnkgYmVmb3JlYWN0aXZhdGUKCQlpZiAoIGUudHlwZSAhPT0gImZvY3Vzb3V0IiB8fCBlbGVt
LnR5cGUgIT09ICJyYWRpbyIgKSB7CgkJCWpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0
YSIsIHZhbCApOwoJCX0KCgkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBkYXRh
ICkgewoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIGRhdGEgIT0gbnVsbCB8fCB2YWwgKSB7CgkJCWUu
dHlwZSA9ICJjaGFuZ2UiOwoJCQllLmxpdmVGaXJlZCA9IHVuZGVmaW5lZDsKCQkJalF1ZXJ5LmV2
ZW50LnRyaWdnZXIoIGUsIGFyZ3VtZW50c1sxXSwgZWxlbSApOwoJCX0KCX07CgoJalF1ZXJ5LmV2
ZW50LnNwZWNpYWwuY2hhbmdlID0gewoJCWZpbHRlcnM6IHsKCQkJZm9jdXNvdXQ6IHRlc3RDaGFu
Z2UsCgoJCQliZWZvcmVkZWFjdGl2YXRlOiB0ZXN0Q2hhbmdlLAoKCQkJY2xpY2s6IGZ1bmN0aW9u
KCBlICkgewoJCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImlucHV0IiApID8gZWxlbS50eXBlIDogIiI7CgoJCQkJaWYgKCB0eXBlID09PSAicmFk
aW8iIHx8IHR5cGUgPT09ICJjaGVja2JveCIgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2Vs
ZWN0IiApICkgewoJCQkJCXRlc3RDaGFuZ2UuY2FsbCggdGhpcywgZSApOwoJCQkJfQoJCQl9LAoK
CQkJLy8gQ2hhbmdlIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIHN1Ym1pdAoJCQkvLyBLZXlkb3du
IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBrZXlwcmVzcywgd2hpY2ggaXMgdXNlZCBpbiBzdWJtaXQt
ZXZlbnQgZGVsZWdhdGlvbgoJCQlrZXlkb3duOiBmdW5jdGlvbiggZSApIHsKCQkJCXZhciBlbGVt
ID0gZS50YXJnZXQsIHR5cGUgPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSA/IGVs
ZW0udHlwZSA6ICIiOwoKCQkJCWlmICggKGUua2V5Q29kZSA9PT0gMTMgJiYgIWpRdWVyeS5ub2Rl
TmFtZSggZWxlbSwgInRleHRhcmVhIiApICkgfHwKCQkJCQkoZS5rZXlDb2RlID09PSAzMiAmJiAo
dHlwZSA9PT0gImNoZWNrYm94IiB8fCB0eXBlID09PSAicmFkaW8iKSkgfHwKCQkJCQl0eXBlID09
PSAic2VsZWN0LW11bHRpcGxlIiApIHsKCQkJCQl0ZXN0Q2hhbmdlLmNhbGwoIHRoaXMsIGUgKTsK
CQkJCX0KCQkJfSwKCgkJCS8vIEJlZm9yZWFjdGl2YXRlIGhhcHBlbnMgYWxzbyBiZWZvcmUgdGhl
IHByZXZpb3VzIGVsZW1lbnQgaXMgYmx1cnJlZAoJCQkvLyB3aXRoIHRoaXMgZXZlbnQgeW91IGNh
bid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQsIGJ1dCB5b3UgY2FuIHN0b3JlCgkJCS8vIGluZm9y
bWF0aW9uCgkJCWJlZm9yZWFjdGl2YXRlOiBmdW5jdGlvbiggZSApIHsKCQkJCXZhciBlbGVtID0g
ZS50YXJnZXQ7CgkJCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2RhdGEiLCBnZXRWYWwo
ZWxlbSkgKTsKCQkJfQoJCX0sCgoJCXNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcyAp
IHsKCQkJaWYgKCB0aGlzLnR5cGUgPT09ICJmaWxlIiApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJ
fQoKCQkJZm9yICggdmFyIHR5cGUgaW4gY2hhbmdlRmlsdGVycyApIHsKCQkJCWpRdWVyeS5ldmVu
dC5hZGQoIHRoaXMsIHR5cGUgKyAiLnNwZWNpYWxDaGFuZ2UiLCBjaGFuZ2VGaWx0ZXJzW3R5cGVd
ICk7CgkJCX0KCgkJCXJldHVybiByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKCQl9
LAoKCQl0ZWFyZG93bjogZnVuY3Rpb24oIG5hbWVzcGFjZXMgKSB7CgkJCWpRdWVyeS5ldmVudC5y
ZW1vdmUoIHRoaXMsICIuc3BlY2lhbENoYW5nZSIgKTsKCgkJCXJldHVybiByZm9ybUVsZW1zLnRl
c3QoIHRoaXMubm9kZU5hbWUgKTsKCQl9Cgl9OwoKCWNoYW5nZUZpbHRlcnMgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbC5jaGFuZ2UuZmlsdGVyczsKCgkvLyBIYW5kbGUgd2hlbiB0aGUgaW5wdXQgaXMg
LmZvY3VzKCknZAoJY2hhbmdlRmlsdGVycy5mb2N1cyA9IGNoYW5nZUZpbHRlcnMuYmVmb3JlYWN0
aXZhdGU7Cn0KCmZ1bmN0aW9uIHRyaWdnZXIoIHR5cGUsIGVsZW0sIGFyZ3MgKSB7CgkvLyBQaWdn
eWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCgkvLyBG
YWtlIG9yaWdpbmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBp
ZiB0aGUKCS8vIHNpbXVsYXRlZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhl
IHNhbWUgb24gdGhlIGRvbm9yLgoJLy8gRG9uJ3QgcGFzcyBhcmdzIG9yIHJlbWVtYmVyIGxpdmVG
aXJlZDsgdGhleSBhcHBseSB0byB0aGUgZG9ub3IgZXZlbnQuCgl2YXIgZXZlbnQgPSBqUXVlcnku
ZXh0ZW5kKCB7fSwgYXJnc1sgMCBdICk7CglldmVudC50eXBlID0gdHlwZTsKCWV2ZW50Lm9yaWdp
bmFsRXZlbnQgPSB7fTsKCWV2ZW50LmxpdmVGaXJlZCA9IHVuZGVmaW5lZDsKCWpRdWVyeS5ldmVu
dC5oYW5kbGUuY2FsbCggZWxlbSwgZXZlbnQgKTsKCWlmICggZXZlbnQuaXNEZWZhdWx0UHJldmVu
dGVkKCkgKSB7CgkJYXJnc1sgMCBdLnByZXZlbnREZWZhdWx0KCk7Cgl9Cn0KCi8vIENyZWF0ZSAi
YnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cwppZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1
c2luQnViYmxlcyApIHsKCWpRdWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZv
Y3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewoKCQkvLyBBdHRhY2ggYSBzaW5nbGUg
Y2FwdHVyaW5nIGhhbmRsZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CgkJ
dmFyIGF0dGFjaGVzID0gMDsKCgkJalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0gewoJCQlz
ZXR1cDogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7CgkJCQkJZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOwoJCQkJfQoJCQl9
LAoJCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CgkJCQlpZiAoIC0tYXR0YWNoZXMgPT09IDAgKSB7
CgkJCQkJZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSAp
OwoJCQkJfQoJCQl9CgkJfTsKCgkJZnVuY3Rpb24gaGFuZGxlciggZG9ub3IgKSB7CgkJCS8vIERv
bm9yIGV2ZW50IGlzIGFsd2F5cyBhIG5hdGl2ZSBvbmU7IGZpeCBpdCBhbmQgc3dpdGNoIGl0cyB0
eXBlLgoJCQkvLyBMZXQgZm9jdXNpbi9vdXQgaGFuZGxlciBjYW5jZWwgdGhlIGRvbm9yIGZvY3Vz
L2JsdXIgZXZlbnQuCgkJCXZhciBlID0galF1ZXJ5LmV2ZW50LmZpeCggZG9ub3IgKTsKCQkJZS50
eXBlID0gZml4OwoJCQllLm9yaWdpbmFsRXZlbnQgPSB7fTsKCQkJalF1ZXJ5LmV2ZW50LnRyaWdn
ZXIoIGUsIG51bGwsIGUudGFyZ2V0ICk7CgkJCWlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAp
IHsKCQkJCWRvbm9yLnByZXZlbnREZWZhdWx0KCk7CgkJCX0KCQl9Cgl9KTsKfQoKalF1ZXJ5LmVh
Y2goWyJiaW5kIiwgIm9uZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCWpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIHR5cGUsIGRhdGEsIGZuICkgewoJCXZhciBoYW5kbGVyOwoKCQkvLyBI
YW5kbGUgb2JqZWN0IGxpdGVyYWxzCgkJaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIgKSB7
CgkJCWZvciAoIHZhciBrZXkgaW4gdHlwZSApIHsKCQkJCXRoaXNbIG5hbWUgXShrZXksIGRhdGEs
IHR5cGVba2V5XSwgZm4pOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0KCgkJaWYgKCBhcmd1bWVu
dHMubGVuZ3RoID09PSAyIHx8IGRhdGEgPT09IGZhbHNlICkgewoJCQlmbiA9IGRhdGE7CgkJCWRh
dGEgPSB1bmRlZmluZWQ7CgkJfQoKCQlpZiAoIG5hbWUgPT09ICJvbmUiICkgewoJCQloYW5kbGVy
ID0gZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJalF1ZXJ5KCB0aGlzICkudW5iaW5kKCBldmVudCwg
aGFuZGxlciApOwoJCQkJcmV0dXJuIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJfTsK
CQkJaGFuZGxlci5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwoJCX0gZWxzZSB7CgkJ
CWhhbmRsZXIgPSBmbjsKCQl9CgoJCWlmICggdHlwZSA9PT0gInVubG9hZCIgJiYgbmFtZSAhPT0g
Im9uZSIgKSB7CgkJCXRoaXMub25lKCB0eXBlLCBkYXRhLCBmbiApOwoKCQl9IGVsc2UgewoJCQlm
b3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJCWpRdWVy
eS5ldmVudC5hZGQoIHRoaXNbaV0sIHR5cGUsIGhhbmRsZXIsIGRhdGEgKTsKCQkJfQoJCX0KCgkJ
cmV0dXJuIHRoaXM7Cgl9Owp9KTsKCmpRdWVyeS5mbi5leHRlbmQoewoJdW5iaW5kOiBmdW5jdGlv
biggdHlwZSwgZm4gKSB7CgkJLy8gSGFuZGxlIG9iamVjdCBsaXRlcmFscwoJCWlmICggdHlwZW9m
IHR5cGUgPT09ICJvYmplY3QiICYmICF0eXBlLnByZXZlbnREZWZhdWx0ICkgewoJCQlmb3IgKCB2
YXIga2V5IGluIHR5cGUgKSB7CgkJCQl0aGlzLnVuYmluZChrZXksIHR5cGVba2V5XSk7CgkJCX0K
CgkJfSBlbHNlIHsKCQkJZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBp
KysgKSB7CgkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzW2ldLCB0eXBlLCBmbiApOwoJCQl9
CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
dHlwZXMsIGRhdGEsIGZuICkgewoJCXJldHVybiB0aGlzLmxpdmUoIHR5cGVzLCBkYXRhLCBmbiwg
c2VsZWN0b3IgKTsKCX0sCgoJdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywg
Zm4gKSB7CgkJaWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAwICkgewoJCQlyZXR1cm4gdGhpcy51
bmJpbmQoICJsaXZlIiApOwoKCQl9IGVsc2UgewoJCQlyZXR1cm4gdGhpcy5kaWUoIHR5cGVzLCBu
dWxsLCBmbiwgc2VsZWN0b3IgKTsKCQl9Cgl9LAoKCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBk
YXRhICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWpRdWVyeS5ldmVudC50
cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7CgkJfSk7Cgl9LAoKCXRyaWdnZXJIYW5kbGVyOiBm
dW5jdGlvbiggdHlwZSwgZGF0YSApIHsKCQlpZiAoIHRoaXNbMF0gKSB7CgkJCXJldHVybiBqUXVl
cnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOwoJCX0KCX0sCgoJ
dG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7CgkJLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJndW1lbnRz
IGZvciBhY2Nlc3MgaW4gY2xvc3VyZQoJCXZhciBhcmdzID0gYXJndW1lbnRzLAoJCQlndWlkID0g
Zm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAoJCQlpID0gMCwKCQkJdG9nZ2xlciA9IGZ1bmN0aW9u
KCBldmVudCApIHsKCQkJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQoJ
CQkJdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBm
bi5ndWlkICkgfHwgMCApICUgaTsKCQkJCWpRdWVyeS5kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIg
KyBmbi5ndWlkLCBsYXN0VG9nZ2xlICsgMSApOwoKCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IGNsaWNr
cyBzdG9wCgkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKCQkJCS8vIGFuZCBleGVjdXRlIHRo
ZSBmdW5jdGlvbgoJCQkJcmV0dXJuIGFyZ3NbIGxhc3RUb2dnbGUgXS5hcHBseSggdGhpcywgYXJn
dW1lbnRzICkgfHwgZmFsc2U7CgkJCX07CgoJCS8vIGxpbmsgYWxsIHRoZSBmdW5jdGlvbnMsIHNv
IGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhpcyBjbGljayBoYW5kbGVyCgkJdG9nZ2xlci5ndWlk
ID0gZ3VpZDsKCQl3aGlsZSAoIGkgPCBhcmdzLmxlbmd0aCApIHsKCQkJYXJnc1sgaSsrIF0uZ3Vp
ZCA9IGd1aWQ7CgkJfQoKCQlyZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApOwoJfSwKCglob3Zl
cjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CgkJcmV0dXJuIHRoaXMubW91c2VlbnRlcigg
Zm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7Cgl9Cn0pOwoKdmFyIGxpdmVN
YXAgPSB7Cglmb2N1czogImZvY3VzaW4iLAoJYmx1cjogImZvY3Vzb3V0IiwKCW1vdXNlZW50ZXI6
ICJtb3VzZW92ZXIiLAoJbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9OwoKalF1ZXJ5LmVhY2goWyJs
aXZlIiwgImRpZSJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCWpRdWVyeS5mblsgbmFtZSBdID0g
ZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiwgb3JpZ1NlbGVjdG9yIC8qIEludGVybmFsIFVzZSBP
bmx5ICovICkgewoJCXZhciB0eXBlLCBpID0gMCwgbWF0Y2gsIG5hbWVzcGFjZXMsIHByZVR5cGUs
CgkJCXNlbGVjdG9yID0gb3JpZ1NlbGVjdG9yIHx8IHRoaXMuc2VsZWN0b3IsCgkJCWNvbnRleHQg
PSBvcmlnU2VsZWN0b3IgPyB0aGlzIDogalF1ZXJ5KCB0aGlzLmNvbnRleHQgKTsKCgkJaWYgKCB0
eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICYmICF0eXBlcy5wcmV2ZW50RGVmYXVsdCApIHsKCQkJ
Zm9yICggdmFyIGtleSBpbiB0eXBlcyApIHsKCQkJCWNvbnRleHRbIG5hbWUgXSgga2V5LCBkYXRh
LCB0eXBlc1trZXldLCBzZWxlY3RvciApOwoJCQl9CgoJCQlyZXR1cm4gdGhpczsKCQl9CgoJCWlm
ICggbmFtZSA9PT0gImRpZSIgJiYgIXR5cGVzICYmCgkJCQkJb3JpZ1NlbGVjdG9yICYmIG9yaWdT
ZWxlY3Rvci5jaGFyQXQoMCkgPT09ICIuIiApIHsKCgkJCWNvbnRleHQudW5iaW5kKCBvcmlnU2Vs
ZWN0b3IgKTsKCgkJCXJldHVybiB0aGlzOwoJCX0KCgkJaWYgKCBkYXRhID09PSBmYWxzZSB8fCBq
UXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewoJCQlmbiA9IGRhdGEgfHwgcmV0dXJuRmFsc2U7
CgkJCWRhdGEgPSB1bmRlZmluZWQ7CgkJfQoKCQl0eXBlcyA9ICh0eXBlcyB8fCAiIikuc3BsaXQo
IiAiKTsKCgkJd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBpKysgXSkgIT0gbnVsbCApIHsKCQkJbWF0
Y2ggPSBybmFtZXNwYWNlcy5leGVjKCB0eXBlICk7CgkJCW5hbWVzcGFjZXMgPSAiIjsKCgkJCWlm
ICggbWF0Y2ggKSAgewoJCQkJbmFtZXNwYWNlcyA9IG1hdGNoWzBdOwoJCQkJdHlwZSA9IHR5cGUu
cmVwbGFjZSggcm5hbWVzcGFjZXMsICIiICk7CgkJCX0KCgkJCWlmICggdHlwZSA9PT0gImhvdmVy
IiApIHsKCQkJCXR5cGVzLnB1c2goICJtb3VzZWVudGVyIiArIG5hbWVzcGFjZXMsICJtb3VzZWxl
YXZlIiArIG5hbWVzcGFjZXMgKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQlwcmVUeXBlID0gdHlw
ZTsKCgkJCWlmICggbGl2ZU1hcFsgdHlwZSBdICkgewoJCQkJdHlwZXMucHVzaCggbGl2ZU1hcFsg
dHlwZSBdICsgbmFtZXNwYWNlcyApOwoJCQkJdHlwZSA9IHR5cGUgKyBuYW1lc3BhY2VzOwoKCQkJ
fSBlbHNlIHsKCQkJCXR5cGUgPSAobGl2ZU1hcFsgdHlwZSBdIHx8IHR5cGUpICsgbmFtZXNwYWNl
czsKCQkJfQoKCQkJaWYgKCBuYW1lID09PSAibGl2ZSIgKSB7CgkJCQkvLyBiaW5kIGxpdmUgaGFu
ZGxlcgoJCQkJZm9yICggdmFyIGogPSAwLCBsID0gY29udGV4dC5sZW5ndGg7IGogPCBsOyBqKysg
KSB7CgkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggY29udGV4dFtqXSwgImxpdmUuIiArIGxpdmVDb252
ZXJ0KCB0eXBlLCBzZWxlY3RvciApLAoJCQkJCQl7IGRhdGE6IGRhdGEsIHNlbGVjdG9yOiBzZWxl
Y3RvciwgaGFuZGxlcjogZm4sIG9yaWdUeXBlOiB0eXBlLCBvcmlnSGFuZGxlcjogZm4sIHByZVR5
cGU6IHByZVR5cGUgfSApOwoJCQkJfQoKCQkJfSBlbHNlIHsKCQkJCS8vIHVuYmluZCBsaXZlIGhh
bmRsZXIKCQkJCWNvbnRleHQudW5iaW5kKCAibGl2ZS4iICsgbGl2ZUNvbnZlcnQoIHR5cGUsIHNl
bGVjdG9yICksIGZuICk7CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzOwoJfTsKfSk7CgpmdW5jdGlv
biBsaXZlSGFuZGxlciggZXZlbnQgKSB7Cgl2YXIgc3RvcCwgbWF4TGV2ZWwsIHJlbGF0ZWQsIG1h
dGNoLCBoYW5kbGVPYmosIGVsZW0sIGosIGksIGwsIGRhdGEsIGNsb3NlLCBuYW1lc3BhY2UsIHJl
dCwKCQllbGVtcyA9IFtdLAoJCXNlbGVjdG9ycyA9IFtdLAoJCWV2ZW50cyA9IGpRdWVyeS5fZGF0
YSggdGhpcywgImV2ZW50cyIgKTsKCgkvLyBNYWtlIHN1cmUgd2UgYXZvaWQgbm9uLWxlZnQtY2xp
Y2sgYnViYmxpbmcgaW4gRmlyZWZveCAoIzM4NjEpIGFuZCBkaXNhYmxlZCBlbGVtZW50cyBpbiBJ
RSAoIzY5MTEpCglpZiAoIGV2ZW50LmxpdmVGaXJlZCA9PT0gdGhpcyB8fCAhZXZlbnRzIHx8ICFl
dmVudHMubGl2ZSB8fCBldmVudC50YXJnZXQuZGlzYWJsZWQgfHwgZXZlbnQuYnV0dG9uICYmIGV2
ZW50LnR5cGUgPT09ICJjbGljayIgKSB7CgkJcmV0dXJuOwoJfQoKCWlmICggZXZlbnQubmFtZXNw
YWNlICkgewoJCW5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsgZXZlbnQubmFtZXNw
YWNlLnNwbGl0KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKTsKCX0KCgll
dmVudC5saXZlRmlyZWQgPSB0aGlzOwoKCXZhciBsaXZlID0gZXZlbnRzLmxpdmUuc2xpY2UoMCk7
CgoJZm9yICggaiA9IDA7IGogPCBsaXZlLmxlbmd0aDsgaisrICkgewoJCWhhbmRsZU9iaiA9IGxp
dmVbal07CgoJCWlmICggaGFuZGxlT2JqLm9yaWdUeXBlLnJlcGxhY2UoIHJuYW1lc3BhY2VzLCAi
IiApID09PSBldmVudC50eXBlICkgewoJCQlzZWxlY3RvcnMucHVzaCggaGFuZGxlT2JqLnNlbGVj
dG9yICk7CgoJCX0gZWxzZSB7CgkJCWxpdmUuc3BsaWNlKCBqLS0sIDEgKTsKCQl9Cgl9CgoJbWF0
Y2ggPSBqUXVlcnkoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIHNlbGVjdG9ycywgZXZlbnQuY3Vy
cmVudFRhcmdldCApOwoKCWZvciAoIGkgPSAwLCBsID0gbWF0Y2gubGVuZ3RoOyBpIDwgbDsgaSsr
ICkgewoJCWNsb3NlID0gbWF0Y2hbaV07CgoJCWZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7
IGorKyApIHsKCQkJaGFuZGxlT2JqID0gbGl2ZVtqXTsKCgkJCWlmICggY2xvc2Uuc2VsZWN0b3Ig
PT09IGhhbmRsZU9iai5zZWxlY3RvciAmJiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2UudGVzdCgg
aGFuZGxlT2JqLm5hbWVzcGFjZSApKSAmJiAhY2xvc2UuZWxlbS5kaXNhYmxlZCApIHsKCQkJCWVs
ZW0gPSBjbG9zZS5lbGVtOwoJCQkJcmVsYXRlZCA9IG51bGw7CgoJCQkJLy8gVGhvc2UgdHdvIGV2
ZW50cyByZXF1aXJlIGFkZGl0aW9uYWwgY2hlY2tpbmcKCQkJCWlmICggaGFuZGxlT2JqLnByZVR5
cGUgPT09ICJtb3VzZWVudGVyIiB8fCBoYW5kbGVPYmoucHJlVHlwZSA9PT0gIm1vdXNlbGVhdmUi
ICkgewoJCQkJCWV2ZW50LnR5cGUgPSBoYW5kbGVPYmoucHJlVHlwZTsKCQkJCQlyZWxhdGVkID0g
alF1ZXJ5KCBldmVudC5yZWxhdGVkVGFyZ2V0ICkuY2xvc2VzdCggaGFuZGxlT2JqLnNlbGVjdG9y
IClbMF07CgoJCQkJCS8vIE1ha2Ugc3VyZSBub3QgdG8gYWNjaWRlbnRhbGx5IG1hdGNoIGEgY2hp
bGQgZWxlbWVudCB3aXRoIHRoZSBzYW1lIHNlbGVjdG9yCgkJCQkJaWYgKCByZWxhdGVkICYmIGpR
dWVyeS5jb250YWlucyggZWxlbSwgcmVsYXRlZCApICkgewoJCQkJCQlyZWxhdGVkID0gZWxlbTsK
CQkJCQl9CgkJCQl9CgoJCQkJaWYgKCAhcmVsYXRlZCB8fCByZWxhdGVkICE9PSBlbGVtICkgewoJ
CQkJCWVsZW1zLnB1c2goeyBlbGVtOiBlbGVtLCBoYW5kbGVPYmo6IGhhbmRsZU9iaiwgbGV2ZWw6
IGNsb3NlLmxldmVsIH0pOwoJCQkJfQoJCQl9CgkJfQoJfQoKCWZvciAoIGkgPSAwLCBsID0gZWxl
bXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCW1hdGNoID0gZWxlbXNbaV07CgoJCWlmICggbWF4
TGV2ZWwgJiYgbWF0Y2gubGV2ZWwgPiBtYXhMZXZlbCApIHsKCQkJYnJlYWs7CgkJfQoKCQlldmVu
dC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2guZWxlbTsKCQlldmVudC5kYXRhID0gbWF0Y2guaGFuZGxl
T2JqLmRhdGE7CgkJZXZlbnQuaGFuZGxlT2JqID0gbWF0Y2guaGFuZGxlT2JqOwoKCQlyZXQgPSBt
YXRjaC5oYW5kbGVPYmoub3JpZ0hhbmRsZXIuYXBwbHkoIG1hdGNoLmVsZW0sIGFyZ3VtZW50cyAp
OwoKCQlpZiAoIHJldCA9PT0gZmFsc2UgfHwgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAp
IHsKCQkJbWF4TGV2ZWwgPSBtYXRjaC5sZXZlbDsKCgkJCWlmICggcmV0ID09PSBmYWxzZSApIHsK
CQkJCXN0b3AgPSBmYWxzZTsKCQkJfQoJCQlpZiAoIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRp
b25TdG9wcGVkKCkgKSB7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCglyZXR1cm4gc3RvcDsKfQoK
ZnVuY3Rpb24gbGl2ZUNvbnZlcnQoIHR5cGUsIHNlbGVjdG9yICkgewoJcmV0dXJuICh0eXBlICYm
IHR5cGUgIT09ICIqIiA/IHR5cGUgKyAiLiIgOiAiIikgKyBzZWxlY3Rvci5yZXBsYWNlKHJwZXJp
b2QsICJgIikucmVwbGFjZShyc3BhY2VzLCAiJiIpOwp9CgpqUXVlcnkuZWFjaCggKCJibHVyIGZv
Y3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxj
bGljayAiICsKCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0
IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKCSJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3du
IGtleXByZXNzIGtleXVwIGVycm9yIikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
CgoJLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24o
IGRhdGEsIGZuICkgewoJCWlmICggZm4gPT0gbnVsbCApIHsKCQkJZm4gPSBkYXRhOwoJCQlkYXRh
ID0gbnVsbDsKCQl9CgoJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CgkJCXRoaXMuYmlu
ZCggbmFtZSwgZGF0YSwgZm4gKSA6CgkJCXRoaXMudHJpZ2dlciggbmFtZSApOwoJfTsKCglpZiAo
IGpRdWVyeS5hdHRyRm4gKSB7CgkJalF1ZXJ5LmF0dHJGblsgbmFtZSBdID0gdHJ1ZTsKCX0KfSk7
CgoKCi8qIQogKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQogKiAgQ29weXJpZ2h0IDIwMTEs
IFRoZSBEb2pvIEZvdW5kYXRpb24KICogIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5k
IEdQTCBMaWNlbnNlcy4KICogIE1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9zaXp6bGVqcy5jb20v
CiAqLwooZnVuY3Rpb24oKXsKCnZhciBjaHVua2VyID0gLygoPzpcKCg/OlwoW14oKV0rXCl8W14o
KV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxc
XC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKCWRv
bmUgPSAwLAoJdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAoJaGFzRHVwbGlj
YXRlID0gZmFsc2UsCgliYXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwKCXJCYWNrc2xhc2ggPSAvXFwv
ZywKCXJOb25Xb3JkID0gL1xXLzsKCi8vIEhlcmUgd2UgY2hlY2sgaWYgdGhlIEphdmFTY3JpcHQg
ZW5naW5lIGlzIHVzaW5nIHNvbWUgc29ydCBvZgovLyBvcHRpbWl6YXRpb24gd2hlcmUgaXQgZG9l
cyBub3QgYWx3YXlzIGNhbGwgb3VyIGNvbXBhcmlzaW9uCi8vIGZ1bmN0aW9uLiBJZiB0aGF0IGlz
IHRoZSBjYXNlLCBkaXNjYXJkIHRoZSBoYXNEdXBsaWNhdGUgdmFsdWUuCi8vICAgVGh1cyBmYXIg
dGhhdCBpbmNsdWRlcyBHb29nbGUgQ2hyb21lLgpbMCwgMF0uc29ydChmdW5jdGlvbigpIHsKCWJh
c2VIYXNEdXBsaWNhdGUgPSBmYWxzZTsKCXJldHVybiAwOwp9KTsKCnZhciBTaXp6bGUgPSBmdW5j
dGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CglyZXN1bHRzID0gcmVz
dWx0cyB8fCBbXTsKCWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKCXZhciBvcmlnQ29u
dGV4dCA9IGNvbnRleHQ7CgoJaWYgKCBjb250ZXh0Lm5vZGVUeXBlICE9PSAxICYmIGNvbnRleHQu
bm9kZVR5cGUgIT09IDkgKSB7CgkJcmV0dXJuIFtdOwoJfQoJCglpZiAoICFzZWxlY3RvciB8fCB0
eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewoJCXJldHVybiByZXN1bHRzOwoJfQoKCXZh
ciBtLCBzZXQsIGNoZWNrU2V0LCBleHRyYSwgcmV0LCBjdXIsIHBvcCwgaSwKCQlwcnVuZSA9IHRy
dWUsCgkJY29udGV4dFhNTCA9IFNpenpsZS5pc1hNTCggY29udGV4dCApLAoJCXBhcnRzID0gW10s
CgkJc29GYXIgPSBzZWxlY3RvcjsKCQoJLy8gUmVzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaHVu
a2VyIHJlZ2V4cCAoc3RhcnQgZnJvbSBoZWFkKQoJZG8gewoJCWNodW5rZXIuZXhlYyggIiIgKTsK
CQltID0gY2h1bmtlci5leGVjKCBzb0ZhciApOwoKCQlpZiAoIG0gKSB7CgkJCXNvRmFyID0gbVsz
XTsKCQkKCQkJcGFydHMucHVzaCggbVsxXSApOwoJCQoJCQlpZiAoIG1bMl0gKSB7CgkJCQlleHRy
YSA9IG1bM107CgkJCQlicmVhazsKCQkJfQoJCX0KCX0gd2hpbGUgKCBtICk7CgoJaWYgKCBwYXJ0
cy5sZW5ndGggPiAxICYmIG9yaWdQT1MuZXhlYyggc2VsZWN0b3IgKSApIHsKCgkJaWYgKCBwYXJ0
cy5sZW5ndGggPT09IDIgJiYgRXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSApIHsKCQkJc2V0ID0g
cG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOwoKCQl9IGVsc2UgewoJ
CQlzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KCQkJCVsgY29udGV4dCBdIDoKCQkJ
CVNpenpsZSggcGFydHMuc2hpZnQoKSwgY29udGV4dCApOwoKCQkJd2hpbGUgKCBwYXJ0cy5sZW5n
dGggKSB7CgkJCQlzZWxlY3RvciA9IHBhcnRzLnNoaWZ0KCk7CgoJCQkJaWYgKCBFeHByLnJlbGF0
aXZlWyBzZWxlY3RvciBdICkgewoJCQkJCXNlbGVjdG9yICs9IHBhcnRzLnNoaWZ0KCk7CgkJCQl9
CgkJCQkKCQkJCXNldCA9IHBvc1Byb2Nlc3MoIHNlbGVjdG9yLCBzZXQgKTsKCQkJfQoJCX0KCgl9
IGVsc2UgewoJCS8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSBy
b290IHNlbGVjdG9yIGlzIGFuIElECgkJLy8gKGJ1dCBub3QgaWYgaXQnbGwgYmUgZmFzdGVyIGlm
IHRoZSBpbm5lciBzZWxlY3RvciBpcyBhbiBJRCkKCQlpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0
aCA+IDEgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAhY29udGV4dFhNTCAmJgoJCQkJRXhw
ci5tYXRjaC5JRC50ZXN0KHBhcnRzWzBdKSAmJiAhRXhwci5tYXRjaC5JRC50ZXN0KHBhcnRzW3Bh
cnRzLmxlbmd0aCAtIDFdKSApIHsKCgkJCXJldCA9IFNpenpsZS5maW5kKCBwYXJ0cy5zaGlmdCgp
LCBjb250ZXh0LCBjb250ZXh0WE1MICk7CgkJCWNvbnRleHQgPSByZXQuZXhwciA/CgkJCQlTaXp6
bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0LnNldCApWzBdIDoKCQkJCXJldC5zZXRbMF07CgkJfQoK
CQlpZiAoIGNvbnRleHQgKSB7CgkJCXJldCA9IHNlZWQgPwoJCQkJeyBleHByOiBwYXJ0cy5wb3Ao
KSwgc2V0OiBtYWtlQXJyYXkoc2VlZCkgfSA6CgkJCQlTaXp6bGUuZmluZCggcGFydHMucG9wKCks
IHBhcnRzLmxlbmd0aCA9PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0g
IisiKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0
LCBjb250ZXh0WE1MICk7CgoJCQlzZXQgPSByZXQuZXhwciA/CgkJCQlTaXp6bGUuZmlsdGVyKCBy
ZXQuZXhwciwgcmV0LnNldCApIDoKCQkJCXJldC5zZXQ7CgoJCQlpZiAoIHBhcnRzLmxlbmd0aCA+
IDAgKSB7CgkJCQljaGVja1NldCA9IG1ha2VBcnJheSggc2V0ICk7CgoJCQl9IGVsc2UgewoJCQkJ
cHJ1bmUgPSBmYWxzZTsKCQkJfQoKCQkJd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7CgkJCQljdXIg
PSBwYXJ0cy5wb3AoKTsKCQkJCXBvcCA9IGN1cjsKCgkJCQlpZiAoICFFeHByLnJlbGF0aXZlWyBj
dXIgXSApIHsKCQkJCQljdXIgPSAiIjsKCQkJCX0gZWxzZSB7CgkJCQkJcG9wID0gcGFydHMucG9w
KCk7CgkJCQl9CgoJCQkJaWYgKCBwb3AgPT0gbnVsbCApIHsKCQkJCQlwb3AgPSBjb250ZXh0OwoJ
CQkJfQoKCQkJCUV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1NldCwgcG9wLCBjb250ZXh0WE1M
ICk7CgkJCX0KCgkJfSBlbHNlIHsKCQkJY2hlY2tTZXQgPSBwYXJ0cyA9IFtdOwoJCX0KCX0KCglp
ZiAoICFjaGVja1NldCApIHsKCQljaGVja1NldCA9IHNldDsKCX0KCglpZiAoICFjaGVja1NldCAp
IHsKCQlTaXp6bGUuZXJyb3IoIGN1ciB8fCBzZWxlY3RvciApOwoJfQoKCWlmICggdG9TdHJpbmcu
Y2FsbChjaGVja1NldCkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CgkJaWYgKCAhcHJ1bmUgKSB7
CgkJCXJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0cywgY2hlY2tTZXQgKTsKCgkJfSBlbHNlIGlm
ICggY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSAxICkgewoJCQlmb3IgKCBpID0gMDsg
Y2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgewoJCQkJaWYgKCBjaGVja1NldFtpXSAmJiAoY2hl
Y2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgJiYgU2l6emxl
LmNvbnRhaW5zKGNvbnRleHQsIGNoZWNrU2V0W2ldKSkgKSB7CgkJCQkJcmVzdWx0cy5wdXNoKCBz
ZXRbaV0gKTsKCQkJCX0KCQkJfQoKCQl9IGVsc2UgewoJCQlmb3IgKCBpID0gMDsgY2hlY2tTZXRb
aV0gIT0gbnVsbDsgaSsrICkgewoJCQkJaWYgKCBjaGVja1NldFtpXSAmJiBjaGVja1NldFtpXS5u
b2RlVHlwZSA9PT0gMSApIHsKCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOwoJCQkJfQoJCQl9
CgkJfQoKCX0gZWxzZSB7CgkJbWFrZUFycmF5KCBjaGVja1NldCwgcmVzdWx0cyApOwoJfQoKCWlm
ICggZXh0cmEgKSB7CgkJU2l6emxlKCBleHRyYSwgb3JpZ0NvbnRleHQsIHJlc3VsdHMsIHNlZWQg
KTsKCQlTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwoJfQoKCXJldHVybiByZXN1bHRzOwp9
OwoKU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKCWlmICggc29ydE9y
ZGVyICkgewoJCWhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CgkJcmVzdWx0cy5zb3J0
KCBzb3J0T3JkZXIgKTsKCgkJaWYgKCBoYXNEdXBsaWNhdGUgKSB7CgkJCWZvciAoIHZhciBpID0g
MTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysgKSB7CgkJCQlpZiAoIHJlc3VsdHNbaV0gPT09IHJl
c3VsdHNbIGkgLSAxIF0gKSB7CgkJCQkJcmVzdWx0cy5zcGxpY2UoIGktLSwgMSApOwoJCQkJfQoJ
CQl9CgkJfQoJfQoKCXJldHVybiByZXN1bHRzOwp9OwoKU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlv
biggZXhwciwgc2V0ICkgewoJcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgc2V0ICk7
Cn07CgpTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7Cgly
ZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBbbm9kZV0gKS5sZW5ndGggPiAwOwp9OwoK
U2l6emxlLmZpbmQgPSBmdW5jdGlvbiggZXhwciwgY29udGV4dCwgaXNYTUwgKSB7Cgl2YXIgc2V0
OwoKCWlmICggIWV4cHIgKSB7CgkJcmV0dXJuIFtdOwoJfQoKCWZvciAoIHZhciBpID0gMCwgbCA9
IEV4cHIub3JkZXIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCXZhciBtYXRjaCwKCQkJdHlwZSA9
IEV4cHIub3JkZXJbaV07CgkJCgkJaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBd
LmV4ZWMoIGV4cHIgKSkgKSB7CgkJCXZhciBsZWZ0ID0gbWF0Y2hbMV07CgkJCW1hdGNoLnNwbGlj
ZSggMSwgMSApOwoKCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJc
XCIgKSB7CgkJCQltYXRjaFsxXSA9IChtYXRjaFsxXSB8fCAiIikucmVwbGFjZSggckJhY2tzbGFz
aCwgIiIgKTsKCQkJCXNldCA9IEV4cHIuZmluZFsgdHlwZSBdKCBtYXRjaCwgY29udGV4dCwgaXNY
TUwgKTsKCgkJCQlpZiAoIHNldCAhPSBudWxsICkgewoJCQkJCWV4cHIgPSBleHByLnJlcGxhY2Uo
IEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIgKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCX0K
CglpZiAoICFzZXQgKSB7CgkJc2V0ID0gdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUgIT09ICJ1bmRlZmluZWQiID8KCQkJY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioi
ICkgOgoJCQlbXTsKCX0KCglyZXR1cm4geyBzZXQ6IHNldCwgZXhwcjogZXhwciB9Owp9OwoKU2l6
emxlLmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBzZXQsIGlucGxhY2UsIG5vdCApIHsKCXZhciBt
YXRjaCwgYW55Rm91bmQsCgkJb2xkID0gZXhwciwKCQlyZXN1bHQgPSBbXSwKCQljdXJMb29wID0g
c2V0LAoJCWlzWE1MRmlsdGVyID0gc2V0ICYmIHNldFswXSAmJiBTaXp6bGUuaXNYTUwoIHNldFsw
XSApOwoKCXdoaWxlICggZXhwciAmJiBzZXQubGVuZ3RoICkgewoJCWZvciAoIHZhciB0eXBlIGlu
IEV4cHIuZmlsdGVyICkgewoJCQlpZiAoIChtYXRjaCA9IEV4cHIubGVmdE1hdGNoWyB0eXBlIF0u
ZXhlYyggZXhwciApKSAhPSBudWxsICYmIG1hdGNoWzJdICkgewoJCQkJdmFyIGZvdW5kLCBpdGVt
LAoJCQkJCWZpbHRlciA9IEV4cHIuZmlsdGVyWyB0eXBlIF0sCgkJCQkJbGVmdCA9IG1hdGNoWzFd
OwoKCQkJCWFueUZvdW5kID0gZmFsc2U7CgoJCQkJbWF0Y2guc3BsaWNlKDEsMSk7CgoJCQkJaWYg
KCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgPT09ICJcXCIgKSB7CgkJCQkJY29udGlu
dWU7CgkJCQl9CgoJCQkJaWYgKCBjdXJMb29wID09PSByZXN1bHQgKSB7CgkJCQkJcmVzdWx0ID0g
W107CgkJCQl9CgoJCQkJaWYgKCBFeHByLnByZUZpbHRlclsgdHlwZSBdICkgewoJCQkJCW1hdGNo
ID0gRXhwci5wcmVGaWx0ZXJbIHR5cGUgXSggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3Vs
dCwgbm90LCBpc1hNTEZpbHRlciApOwoKCQkJCQlpZiAoICFtYXRjaCApIHsKCQkJCQkJYW55Rm91
bmQgPSBmb3VuZCA9IHRydWU7CgoJCQkJCX0gZWxzZSBpZiAoIG1hdGNoID09PSB0cnVlICkgewoJ
CQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQl9CgoJCQkJaWYgKCBtYXRjaCApIHsKCQkJCQlmb3Ig
KCB2YXIgaSA9IDA7IChpdGVtID0gY3VyTG9vcFtpXSkgIT0gbnVsbDsgaSsrICkgewoJCQkJCQlp
ZiAoIGl0ZW0gKSB7CgkJCQkJCQlmb3VuZCA9IGZpbHRlciggaXRlbSwgbWF0Y2gsIGksIGN1ckxv
b3AgKTsKCQkJCQkJCXZhciBwYXNzID0gbm90IF4gISFmb3VuZDsKCgkJCQkJCQlpZiAoIGlucGxh
Y2UgJiYgZm91bmQgIT0gbnVsbCApIHsKCQkJCQkJCQlpZiAoIHBhc3MgKSB7CgkJCQkJCQkJCWFu
eUZvdW5kID0gdHJ1ZTsKCgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJY3VyTG9vcFtpXSA9IGZh
bHNlOwoJCQkJCQkJCX0KCgkJCQkJCQl9IGVsc2UgaWYgKCBwYXNzICkgewoJCQkJCQkJCXJlc3Vs
dC5wdXNoKCBpdGVtICk7CgkJCQkJCQkJYW55Rm91bmQgPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQl9
CgkJCQkJfQoJCQkJfQoKCQkJCWlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQlpZiAo
ICFpbnBsYWNlICkgewoJCQkJCQljdXJMb29wID0gcmVzdWx0OwoJCQkJCX0KCgkJCQkJZXhwciA9
IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOwoKCQkJCQlpZiAoICFhbnlG
b3VuZCApIHsKCQkJCQkJcmV0dXJuIFtdOwoJCQkJCX0KCgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0K
CQl9CgoJCS8vIEltcHJvcGVyIGV4cHJlc3Npb24KCQlpZiAoIGV4cHIgPT09IG9sZCApIHsKCQkJ
aWYgKCBhbnlGb3VuZCA9PSBudWxsICkgewoJCQkJU2l6emxlLmVycm9yKCBleHByICk7CgoJCQl9
IGVsc2UgewoJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCW9sZCA9IGV4cHI7Cgl9CgoJcmV0dXJuIGN1
ckxvb3A7Cn07CgpTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewoJdGhyb3cgIlN5bnRh
eCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBtc2c7Cn07Cgp2YXIgRXhwciA9
IFNpenpsZS5zZWxlY3RvcnMgPSB7CglvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCgoJ
bWF0Y2g6IHsKCQlJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAoJCUNMQVNT
OiAvXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAoJCU5BTUU6IC9cW25hbWU9Wyci
XSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLywKCQlBVFRSOiAvXFtccyoo
KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/
KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKCQlUQUc6IC9e
KCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLAoJCUNISUxEOiAvOihvbmx5fG50aHxs
YXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9c
ZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LywKCQlQT1M6IC86KG50aHxlcXxndHxs
dHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLAoJCVBTRVVE
TzogLzooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwp
XStcKXxbXlwoXCldKikrKVwyXCkpPy8KCX0sCgoJbGVmdE1hdGNoOiB7fSwKCglhdHRyTWFwOiB7
CgkJImNsYXNzIjogImNsYXNzTmFtZSIsCgkJImZvciI6ICJodG1sRm9yIgoJfSwKCglhdHRySGFu
ZGxlOiB7CgkJaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggImhyZWYiICk7CgkJfSwKCQl0eXBlOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJu
IGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKTsKCQl9Cgl9LAoKCXJlbGF0aXZlOiB7CgkJIisi
OiBmdW5jdGlvbihjaGVja1NldCwgcGFydCl7CgkJCXZhciBpc1BhcnRTdHIgPSB0eXBlb2YgcGFy
dCA9PT0gInN0cmluZyIsCgkJCQlpc1RhZyA9IGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCgg
cGFydCApLAoJCQkJaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZzsKCgkJCWlm
ICggaXNUYWcgKSB7CgkJCQlwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgpOwoJCQl9CgoJCQlmb3Ig
KCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGgsIGVsZW07IGkgPCBsOyBpKysgKSB7CgkJ
CQlpZiAoIChlbGVtID0gY2hlY2tTZXRbaV0pICkgewoJCQkJCXdoaWxlICggKGVsZW0gPSBlbGVt
LnByZXZpb3VzU2libGluZykgJiYgZWxlbS5ub2RlVHlwZSAhPT0gMSApIHt9CgoJCQkJCWNoZWNr
U2V0W2ldID0gaXNQYXJ0U3RyTm90VGFnIHx8IGVsZW0gJiYgZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpID09PSBwYXJ0ID8KCQkJCQkJZWxlbSB8fCBmYWxzZSA6CgkJCQkJCWVsZW0gPT09IHBh
cnQ7CgkJCQl9CgkJCX0KCgkJCWlmICggaXNQYXJ0U3RyTm90VGFnICkgewoJCQkJU2l6emxlLmZp
bHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTsKCQkJfQoJCX0sCgoJCSI+IjogZnVuY3Rpb24o
IGNoZWNrU2V0LCBwYXJ0ICkgewoJCQl2YXIgZWxlbSwKCQkJCWlzUGFydFN0ciA9IHR5cGVvZiBw
YXJ0ID09PSAic3RyaW5nIiwKCQkJCWkgPSAwLAoJCQkJbCA9IGNoZWNrU2V0Lmxlbmd0aDsKCgkJ
CWlmICggaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CgkJCQlwYXJ0ID0g
cGFydC50b0xvd2VyQ2FzZSgpOwoKCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJCQllbGVt
ID0gY2hlY2tTZXRbaV07CgoJCQkJCWlmICggZWxlbSApIHsKCQkJCQkJdmFyIHBhcmVudCA9IGVs
ZW0ucGFyZW50Tm9kZTsKCQkJCQkJY2hlY2tTZXRbaV0gPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gcGFydCA/IHBhcmVudCA6IGZhbHNlOwoJCQkJCX0KCQkJCX0KCgkJCX0gZWxz
ZSB7CgkJCQlmb3IgKCA7IGkgPCBsOyBpKysgKSB7CgkJCQkJZWxlbSA9IGNoZWNrU2V0W2ldOwoK
CQkJCQlpZiAoIGVsZW0gKSB7CgkJCQkJCWNoZWNrU2V0W2ldID0gaXNQYXJ0U3RyID8KCQkJCQkJ
CWVsZW0ucGFyZW50Tm9kZSA6CgkJCQkJCQllbGVtLnBhcmVudE5vZGUgPT09IHBhcnQ7CgkJCQkJ
fQoJCQkJfQoKCQkJCWlmICggaXNQYXJ0U3RyICkgewoJCQkJCVNpenpsZS5maWx0ZXIoIHBhcnQs
IGNoZWNrU2V0LCB0cnVlICk7CgkJCQl9CgkJCX0KCQl9LAoKCQkiIjogZnVuY3Rpb24oY2hlY2tT
ZXQsIHBhcnQsIGlzWE1MKXsKCQkJdmFyIG5vZGVDaGVjaywKCQkJCWRvbmVOYW1lID0gZG9uZSsr
LAoJCQkJY2hlY2tGbiA9IGRpckNoZWNrOwoKCQkJaWYgKCB0eXBlb2YgcGFydCA9PT0gInN0cmlu
ZyIgJiYgIXJOb25Xb3JkLnRlc3QoIHBhcnQgKSApIHsKCQkJCXBhcnQgPSBwYXJ0LnRvTG93ZXJD
YXNlKCk7CgkJCQlub2RlQ2hlY2sgPSBwYXJ0OwoJCQkJY2hlY2tGbiA9IGRpck5vZGVDaGVjazsK
CQkJfQoKCQkJY2hlY2tGbiggInBhcmVudE5vZGUiLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQs
IG5vZGVDaGVjaywgaXNYTUwgKTsKCQl9LAoKCQkifiI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFy
dCwgaXNYTUwgKSB7CgkJCXZhciBub2RlQ2hlY2ssCgkJCQlkb25lTmFtZSA9IGRvbmUrKywKCQkJ
CWNoZWNrRm4gPSBkaXJDaGVjazsKCgkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYm
ICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CgkJCQlwYXJ0ID0gcGFydC50b0xvd2VyQ2FzZSgp
OwoJCQkJbm9kZUNoZWNrID0gcGFydDsKCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CgkJCX0K
CgkJCWNoZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQs
IG5vZGVDaGVjaywgaXNYTUwgKTsKCQl9Cgl9LAoKCWZpbmQ6IHsKCQlJRDogZnVuY3Rpb24oIG1h
dGNoLCBjb250ZXh0LCBpc1hNTCApIHsKCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgewoJCQkJdmFyIG0gPSBjb250ZXh0Lmdl
dEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsKCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCgkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBsb25n
ZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCgkJCQlyZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBb
bV0gOiBbXTsKCQkJfQoJCX0sCgoJCU5BTUU6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsK
CQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gInVuZGVmaW5lZCIg
KSB7CgkJCQl2YXIgcmV0ID0gW10sCgkJCQkJcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNC
eU5hbWUoIG1hdGNoWzFdICk7CgoJCQkJZm9yICggdmFyIGkgPSAwLCBsID0gcmVzdWx0cy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJaWYgKCByZXN1bHRzW2ldLmdldEF0dHJpYnV0ZSgibmFt
ZSIpID09PSBtYXRjaFsxXSApIHsKCQkJCQkJcmV0LnB1c2goIHJlc3VsdHNbaV0gKTsKCQkJCQl9
CgkJCQl9CgoJCQkJcmV0dXJuIHJldC5sZW5ndGggPT09IDAgPyBudWxsIDogcmV0OwoJCQl9CgkJ
fSwKCgkJVEFHOiBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7CgkJCWlmICggdHlwZW9mIGNv
bnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewoJCQkJcmV0dXJu
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIG1hdGNoWzFdICk7CgkJCX0KCQl9Cgl9LAoJ
cHJlRmlsdGVyOiB7CgkJQ0xBU1M6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwg
cmVzdWx0LCBub3QsIGlzWE1MICkgewoJCQltYXRjaCA9ICIgIiArIG1hdGNoWzFdLnJlcGxhY2Uo
IHJCYWNrc2xhc2gsICIiICkgKyAiICI7CgoJCQlpZiAoIGlzWE1MICkgewoJCQkJcmV0dXJuIG1h
dGNoOwoJCQl9CgoJCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gY3VyTG9vcFtpXSkg
IT0gbnVsbDsgaSsrICkgewoJCQkJaWYgKCBlbGVtICkgewoJCQkJCWlmICggbm90IF4gKGVsZW0u
Y2xhc3NOYW1lICYmICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5c
cl0vZywgIiAiKS5pbmRleE9mKG1hdGNoKSA+PSAwKSApIHsKCQkJCQkJaWYgKCAhaW5wbGFjZSAp
IHsKCQkJCQkJCXJlc3VsdC5wdXNoKCBlbGVtICk7CgkJCQkJCX0KCgkJCQkJfSBlbHNlIGlmICgg
aW5wbGFjZSApIHsKCQkJCQkJY3VyTG9vcFtpXSA9IGZhbHNlOwoJCQkJCX0KCQkJCX0KCQkJfQoK
CQkJcmV0dXJuIGZhbHNlOwoJCX0sCgoJCUlEOiBmdW5jdGlvbiggbWF0Y2ggKSB7CgkJCXJldHVy
biBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOwoJCX0sCgoJCVRBRzogZnVuY3Rp
b24oIG1hdGNoLCBjdXJMb29wICkgewoJCQlyZXR1cm4gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tz
bGFzaCwgIiIgKS50b0xvd2VyQ2FzZSgpOwoJCX0sCgoJCUNISUxEOiBmdW5jdGlvbiggbWF0Y2gg
KSB7CgkJCWlmICggbWF0Y2hbMV0gPT09ICJudGgiICkgewoJCQkJaWYgKCAhbWF0Y2hbMl0gKSB7
CgkJCQkJU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwoJCQkJfQoKCQkJCW1hdGNoWzJdID0gbWF0
Y2hbMl0ucmVwbGFjZSgvXlwrfFxzKi9nLCAnJyk7CgoJCQkJLy8gcGFyc2UgZXF1YXRpb25zIGxp
a2UgJ2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywgJy1uKzYnCgkJCQl2
YXIgdGVzdCA9IC8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYygKCQkJCQltYXRjaFsy
XSA9PT0gImV2ZW4iICYmICIybiIgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICYmICIybisxIiB8fAoJ
CQkJCSEvXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgIjBuKyIgKyBtYXRjaFsyXSB8fCBtYXRjaFsy
XSk7CgoJCQkJLy8gY2FsY3VsYXRlIHRoZSBudW1iZXJzIChmaXJzdCluKyhsYXN0KSBpbmNsdWRp
bmcgaWYgdGhleSBhcmUgbmVnYXRpdmUKCQkJCW1hdGNoWzJdID0gKHRlc3RbMV0gKyAodGVzdFsy
XSB8fCAxKSkgLSAwOwoJCQkJbWF0Y2hbM10gPSB0ZXN0WzNdIC0gMDsKCQkJfQoJCQllbHNlIGlm
ICggbWF0Y2hbMl0gKSB7CgkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CgkJCX0KCgkJCS8v
IFRPRE86IE1vdmUgdG8gbm9ybWFsIGNhY2hpbmcgc3lzdGVtCgkJCW1hdGNoWzBdID0gZG9uZSsr
OwoKCQkJcmV0dXJuIG1hdGNoOwoJCX0sCgoJCUFUVFI6IGZ1bmN0aW9uKCBtYXRjaCwgY3VyTG9v
cCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgewoJCQl2YXIgbmFtZSA9IG1hdGNoWzFd
ID0gbWF0Y2hbMV0ucmVwbGFjZSggckJhY2tzbGFzaCwgIiIgKTsKCQkJCgkJCWlmICggIWlzWE1M
ICYmIEV4cHIuYXR0ck1hcFtuYW1lXSApIHsKCQkJCW1hdGNoWzFdID0gRXhwci5hdHRyTWFwW25h
bWVdOwoJCQl9CgoJCQkvLyBIYW5kbGUgaWYgYW4gdW4tcXVvdGVkIHZhbHVlIHdhcyB1c2VkCgkJ
CW1hdGNoWzRdID0gKCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJCYWNr
c2xhc2gsICIiICk7CgoJCQlpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewoJCQkJbWF0Y2hbNF0g
PSAiICIgKyBtYXRjaFs0XSArICIgIjsKCQkJfQoKCQkJcmV0dXJuIG1hdGNoOwoJCX0sCgoJCVBT
RVVETzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCApIHsK
CQkJaWYgKCBtYXRjaFsxXSA9PT0gIm5vdCIgKSB7CgkJCQkvLyBJZiB3ZSdyZSBkZWFsaW5nIHdp
dGggYSBjb21wbGV4IGV4cHJlc3Npb24sIG9yIGEgc2ltcGxlIG9uZQoJCQkJaWYgKCAoIGNodW5r
ZXIuZXhlYyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hb
M10pICkgewoJCQkJCW1hdGNoWzNdID0gU2l6emxlKG1hdGNoWzNdLCBudWxsLCBudWxsLCBjdXJM
b29wKTsKCgkJCQl9IGVsc2UgewoJCQkJCXZhciByZXQgPSBTaXp6bGUuZmlsdGVyKG1hdGNoWzNd
LCBjdXJMb29wLCBpbnBsYWNlLCB0cnVlIF4gbm90KTsKCgkJCQkJaWYgKCAhaW5wbGFjZSApIHsK
CQkJCQkJcmVzdWx0LnB1c2guYXBwbHkoIHJlc3VsdCwgcmV0ICk7CgkJCQkJfQoKCQkJCQlyZXR1
cm4gZmFsc2U7CgkJCQl9CgoJCQl9IGVsc2UgaWYgKCBFeHByLm1hdGNoLlBPUy50ZXN0KCBtYXRj
aFswXSApIHx8IEV4cHIubWF0Y2guQ0hJTEQudGVzdCggbWF0Y2hbMF0gKSApIHsKCQkJCXJldHVy
biB0cnVlOwoJCQl9CgkJCQoJCQlyZXR1cm4gbWF0Y2g7CgkJfSwKCgkJUE9TOiBmdW5jdGlvbigg
bWF0Y2ggKSB7CgkJCW1hdGNoLnVuc2hpZnQoIHRydWUgKTsKCgkJCXJldHVybiBtYXRjaDsKCQl9
Cgl9LAoJCglmaWx0ZXJzOiB7CgkJZW5hYmxlZDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVy
biBlbGVtLmRpc2FibGVkID09PSBmYWxzZSAmJiBlbGVtLnR5cGUgIT09ICJoaWRkZW4iOwoJCX0s
CgoJCWRpc2FibGVkOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQg
PT09IHRydWU7CgkJfSwKCgkJY2hlY2tlZDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBl
bGVtLmNoZWNrZWQgPT09IHRydWU7CgkJfSwKCQkKCQlzZWxlY3RlZDogZnVuY3Rpb24oIGVsZW0g
KSB7CgkJCS8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1
bHQKCQkJLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQoJCQlpZiAoIGVsZW0ucGFy
ZW50Tm9kZSApIHsKCQkJCWVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwoJCQl9CgkJCQoJ
CQlyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKCQl9LAoKCQlwYXJlbnQ6IGZ1bmN0aW9u
KCBlbGVtICkgewoJCQlyZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CgkJfSwKCgkJZW1wdHk6IGZ1
bmN0aW9uKCBlbGVtICkgewoJCQlyZXR1cm4gIWVsZW0uZmlyc3RDaGlsZDsKCQl9LAoKCQloYXM6
IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKCQkJcmV0dXJuICEhU2l6emxlKCBtYXRjaFsz
XSwgZWxlbSApLmxlbmd0aDsKCQl9LAoKCQloZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkgewoJCQly
ZXR1cm4gKC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOwoJCX0sCgoJCXRleHQ6IGZ1bmN0
aW9uKCBlbGVtICkgewoJCQl2YXIgYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSwg
dHlwZSA9IGVsZW0udHlwZTsKCQkJLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAn
dGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpIAoJCQkvLyB1c2UgZ2V0QXR0
cmlidXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAidGV4dCIgPT09IHR5cGUgJiYgKCBhdHRyID09
PSB0eXBlIHx8IGF0dHIgPT09IG51bGwgKTsKCQl9LAoKCQlyYWRpbzogZnVuY3Rpb24oIGVsZW0g
KSB7CgkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYg
InJhZGlvIiA9PT0gZWxlbS50eXBlOwoJCX0sCgoJCWNoZWNrYm94OiBmdW5jdGlvbiggZWxlbSAp
IHsKCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAi
Y2hlY2tib3giID09PSBlbGVtLnR5cGU7CgkJfSwKCgkJZmlsZTogZnVuY3Rpb24oIGVsZW0gKSB7
CgkJCXJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYgImZp
bGUiID09PSBlbGVtLnR5cGU7CgkJfSwKCgkJcGFzc3dvcmQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJ
CQlyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmICJwYXNz
d29yZCIgPT09IGVsZW0udHlwZTsKCQl9LAoKCQlzdWJtaXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJ
CQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCQkJcmV0dXJuIChuYW1l
ID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiAic3VibWl0IiA9PT0gZWxlbS50
eXBlOwoJCX0sCgoJCWltYWdlOiBmdW5jdGlvbiggZWxlbSApIHsKCQkJcmV0dXJuIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAiaW1hZ2UiID09PSBlbGVtLnR5cGU7
CgkJfSwKCgkJcmVzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCQl2YXIgbmFtZSA9IGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKTsKCQkJcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUg
PT09ICJidXR0b24iKSAmJiAicmVzZXQiID09PSBlbGVtLnR5cGU7CgkJfSwKCgkJYnV0dG9uOiBm
dW5jdGlvbiggZWxlbSApIHsKCQkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCk7CgkJCXJldHVybiBuYW1lID09PSAiaW5wdXQiICYmICJidXR0b24iID09PSBlbGVtLnR5cGUg
fHwgbmFtZSA9PT0gImJ1dHRvbiI7CgkJfSwKCgkJaW5wdXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJ
CQlyZXR1cm4gKC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kpLnRlc3QoIGVsZW0ubm9k
ZU5hbWUgKTsKCQl9LAoKCQlmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVt
ID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKCQl9Cgl9LAoJc2V0RmlsdGVy
czogewoJCWZpcnN0OiBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJcmV0dXJuIGkgPT09IDA7CgkJ
fSwKCgkJbGFzdDogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoLCBhcnJheSApIHsKCQkJcmV0dXJu
IGkgPT09IGFycmF5Lmxlbmd0aCAtIDE7CgkJfSwKCgkJZXZlbjogZnVuY3Rpb24oIGVsZW0sIGkg
KSB7CgkJCXJldHVybiBpICUgMiA9PT0gMDsKCQl9LAoKCQlvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBp
ICkgewoJCQlyZXR1cm4gaSAlIDIgPT09IDE7CgkJfSwKCgkJbHQ6IGZ1bmN0aW9uKCBlbGVtLCBp
LCBtYXRjaCApIHsKCQkJcmV0dXJuIGkgPCBtYXRjaFszXSAtIDA7CgkJfSwKCgkJZ3Q6IGZ1bmN0
aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKCQkJcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7CgkJfSwK
CgkJbnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CgkJCXJldHVybiBtYXRjaFszXSAt
IDAgPT09IGk7CgkJfSwKCgkJZXE6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKCQkJcmV0
dXJuIG1hdGNoWzNdIC0gMCA9PT0gaTsKCQl9Cgl9LAoJZmlsdGVyOiB7CgkJUFNFVURPOiBmdW5j
dGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgewoJCQl2YXIgbmFtZSA9IG1hdGNoWzFdLAoJ
CQkJZmlsdGVyID0gRXhwci5maWx0ZXJzWyBuYW1lIF07CgoJCQlpZiAoIGZpbHRlciApIHsKCQkJ
CXJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1hdGNoLCBhcnJheSApOwoKCQkJfSBlbHNlIGlmICgg
bmFtZSA9PT0gImNvbnRhaW5zIiApIHsKCQkJCXJldHVybiAoZWxlbS50ZXh0Q29udGVudCB8fCBl
bGVtLmlubmVyVGV4dCB8fCBTaXp6bGUuZ2V0VGV4dChbIGVsZW0gXSkgfHwgIiIpLmluZGV4T2Yo
bWF0Y2hbM10pID49IDA7CgoJCQl9IGVsc2UgaWYgKCBuYW1lID09PSAibm90IiApIHsKCQkJCXZh
ciBub3QgPSBtYXRjaFszXTsKCgkJCQlmb3IgKCB2YXIgaiA9IDAsIGwgPSBub3QubGVuZ3RoOyBq
IDwgbDsgaisrICkgewoJCQkJCWlmICggbm90W2pdID09PSBlbGVtICkgewoJCQkJCQlyZXR1cm4g
ZmFsc2U7CgkJCQkJfQoJCQkJfQoKCQkJCXJldHVybiB0cnVlOwoKCQkJfSBlbHNlIHsKCQkJCVNp
enpsZS5lcnJvciggbmFtZSApOwoJCQl9CgkJfSwKCgkJQ0hJTEQ6IGZ1bmN0aW9uKCBlbGVtLCBt
YXRjaCApIHsKCQkJdmFyIHR5cGUgPSBtYXRjaFsxXSwKCQkJCW5vZGUgPSBlbGVtOwoKCQkJc3dp
dGNoICggdHlwZSApIHsKCQkJCWNhc2UgIm9ubHkiOgoJCQkJY2FzZSAiZmlyc3QiOgoJCQkJCXdo
aWxlICggKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKQkgewoJCQkJCQlpZiAoIG5vZGUu
bm9kZVR5cGUgPT09IDEgKSB7IAoJCQkJCQkJcmV0dXJuIGZhbHNlOyAKCQkJCQkJfQoJCQkJCX0K
CgkJCQkJaWYgKCB0eXBlID09PSAiZmlyc3QiICkgeyAKCQkJCQkJcmV0dXJuIHRydWU7IAoJCQkJ
CX0KCgkJCQkJbm9kZSA9IGVsZW07CgoJCQkJY2FzZSAibGFzdCI6CgkJCQkJd2hpbGUgKCAobm9k
ZSA9IG5vZGUubmV4dFNpYmxpbmcpICkJIHsKCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAx
ICkgeyAKCQkJCQkJCXJldHVybiBmYWxzZTsgCgkJCQkJCX0KCQkJCQl9CgoJCQkJCXJldHVybiB0
cnVlOwoKCQkJCWNhc2UgIm50aCI6CgkJCQkJdmFyIGZpcnN0ID0gbWF0Y2hbMl0sCgkJCQkJCWxh
c3QgPSBtYXRjaFszXTsKCgkJCQkJaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgewoJ
CQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCQkJCgkJCQkJdmFyIGRvbmVOYW1lID0gbWF0Y2hb
MF0sCgkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKCQoJCQkJCWlmICggcGFyZW50ICYm
IChwYXJlbnQuc2l6Y2FjaGUgIT09IGRvbmVOYW1lIHx8ICFlbGVtLm5vZGVJbmRleCkgKSB7CgkJ
CQkJCXZhciBjb3VudCA9IDA7CgkJCQkJCQoJCQkJCQlmb3IgKCBub2RlID0gcGFyZW50LmZpcnN0
Q2hpbGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgewoJCQkJCQkJaWYgKCBub2Rl
Lm5vZGVUeXBlID09PSAxICkgewoJCQkJCQkJCW5vZGUubm9kZUluZGV4ID0gKytjb3VudDsKCQkJ
CQkJCX0KCQkJCQkJfSAKCgkJCQkJCXBhcmVudC5zaXpjYWNoZSA9IGRvbmVOYW1lOwoJCQkJCX0K
CQkJCQkKCQkJCQl2YXIgZGlmZiA9IGVsZW0ubm9kZUluZGV4IC0gbGFzdDsKCgkJCQkJaWYgKCBm
aXJzdCA9PT0gMCApIHsKCQkJCQkJcmV0dXJuIGRpZmYgPT09IDA7CgoJCQkJCX0gZWxzZSB7CgkJ
CQkJCXJldHVybiAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApOwoJ
CQkJCX0KCQkJfQoJCX0sCgoJCUlEOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7CgkJCXJldHVy
biBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBtYXRj
aDsKCQl9LAoKCQlUQUc6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKCQkJcmV0dXJuIChtYXRj
aCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gbWF0Y2g7CgkJfSwKCQkKCQlDTEFTUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNo
ICkgewoJCQlyZXR1cm4gKCIgIiArIChlbGVtLmNsYXNzTmFtZSB8fCBlbGVtLmdldEF0dHJpYnV0
ZSgiY2xhc3MiKSkgKyAiICIpCgkJCQkuaW5kZXhPZiggbWF0Y2ggKSA+IC0xOwoJCX0sCgoJCUFU
VFI6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKCQkJdmFyIG5hbWUgPSBtYXRjaFsxXSwKCQkJ
CXJlc3VsdCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdID8KCQkJCQlFeHByLmF0dHJIYW5kbGVb
IG5hbWUgXSggZWxlbSApIDoKCQkJCQllbGVtWyBuYW1lIF0gIT0gbnVsbCA/CgkJCQkJCWVsZW1b
IG5hbWUgXSA6CgkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICksCgkJCQl2YWx1ZSA9IHJl
c3VsdCArICIiLAoJCQkJdHlwZSA9IG1hdGNoWzJdLAoJCQkJY2hlY2sgPSBtYXRjaFs0XTsKCgkJ
CXJldHVybiByZXN1bHQgPT0gbnVsbCA/CgkJCQl0eXBlID09PSAiIT0iIDoKCQkJCXR5cGUgPT09
ICI9IiA/CgkJCQl2YWx1ZSA9PT0gY2hlY2sgOgoJCQkJdHlwZSA9PT0gIio9IiA/CgkJCQl2YWx1
ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKCQkJCXR5cGUgPT09ICJ+PSIgPwoJCQkJKCIgIiArIHZh
bHVlICsgIiAiKS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKCQkJCSFjaGVjayA/CgkJCQl2YWx1ZSAm
JiByZXN1bHQgIT09IGZhbHNlIDoKCQkJCXR5cGUgPT09ICIhPSIgPwoJCQkJdmFsdWUgIT09IGNo
ZWNrIDoKCQkJCXR5cGUgPT09ICJePSIgPwoJCQkJdmFsdWUuaW5kZXhPZihjaGVjaykgPT09IDAg
OgoJCQkJdHlwZSA9PT0gIiQ9IiA/CgkJCQl2YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hl
Y2subGVuZ3RoKSA9PT0gY2hlY2sgOgoJCQkJdHlwZSA9PT0gInw9IiA/CgkJCQl2YWx1ZSA9PT0g
Y2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0aCArIDEpID09PSBjaGVjayArICIt
IiA6CgkJCQlmYWxzZTsKCQl9LAoKCQlQT1M6IGZ1bmN0aW9uKCBlbGVtLCBtYXRjaCwgaSwgYXJy
YXkgKSB7CgkJCXZhciBuYW1lID0gbWF0Y2hbMl0sCgkJCQlmaWx0ZXIgPSBFeHByLnNldEZpbHRl
cnNbIG5hbWUgXTsKCgkJCWlmICggZmlsdGVyICkgewoJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwg
aSwgbWF0Y2gsIGFycmF5ICk7CgkJCX0KCQl9Cgl9Cn07Cgp2YXIgb3JpZ1BPUyA9IEV4cHIubWF0
Y2guUE9TLAoJZmVzY2FwZSA9IGZ1bmN0aW9uKGFsbCwgbnVtKXsKCQlyZXR1cm4gIlxcIiArIChu
dW0gLSAwICsgMSk7Cgl9OwoKZm9yICggdmFyIHR5cGUgaW4gRXhwci5tYXRjaCApIHsKCUV4cHIu
bWF0Y2hbIHR5cGUgXSA9IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAo
Lyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSApOwoJRXhwci5sZWZ0TWF0Y2hbIHR5
cGUgXSA9IG5ldyBSZWdFeHAoIC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2UgKyBFeHByLm1hdGNo
WyB0eXBlIF0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZywgZmVzY2FwZSkgKTsKfQoKdmFyIG1h
a2VBcnJheSA9IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHsKCWFycmF5ID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoIGFycmF5LCAwICk7CgoJaWYgKCByZXN1bHRzICkgewoJCXJlc3Vs
dHMucHVzaC5hcHBseSggcmVzdWx0cywgYXJyYXkgKTsKCQlyZXR1cm4gcmVzdWx0czsKCX0KCQoJ
cmV0dXJuIGFycmF5Owp9OwoKLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUg
aWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZgovLyBjb252ZXJ0aW5nIGEgTm9kZUxpc3QgdG8g
YW4gYXJyYXkgdXNpbmcgYnVpbHRpbiBtZXRob2RzLgovLyBBbHNvIHZlcmlmaWVzIHRoYXQgdGhl
IHJldHVybmVkIGFycmF5IGhvbGRzIERPTSBub2RlcwovLyAod2hpY2ggaXMgbm90IHRoZSBjYXNl
IGluIHRoZSBCbGFja2JlcnJ5IGJyb3dzZXIpCnRyeSB7CglBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbCggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlw
ZTsKCi8vIFByb3ZpZGUgYSBmYWxsYmFjayBtZXRob2QgaWYgaXQgZG9lcyBub3Qgd29yawp9IGNh
dGNoKCBlICkgewoJbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgewoJCXZh
ciBpID0gMCwKCQkJcmV0ID0gcmVzdWx0cyB8fCBbXTsKCgkJaWYgKCB0b1N0cmluZy5jYWxsKGFy
cmF5KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKCQkJQXJyYXkucHJvdG90eXBlLnB1c2guYXBw
bHkoIHJldCwgYXJyYXkgKTsKCgkJfSBlbHNlIHsKCQkJaWYgKCB0eXBlb2YgYXJyYXkubGVuZ3Ro
ID09PSAibnVtYmVyIiApIHsKCQkJCWZvciAoIHZhciBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsg
aSsrICkgewoJCQkJCXJldC5wdXNoKCBhcnJheVtpXSApOwoJCQkJfQoKCQkJfSBlbHNlIHsKCQkJ
CWZvciAoIDsgYXJyYXlbaV07IGkrKyApIHsKCQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKCQkJ
CX0KCQkJfQoJCX0KCgkJcmV0dXJuIHJldDsKCX07Cn0KCnZhciBzb3J0T3JkZXIsIHNpYmxpbmdD
aGVjazsKCmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uICkgewoJc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CgkJaWYgKCBhID09PSBiICkg
ewoJCQloYXNEdXBsaWNhdGUgPSB0cnVlOwoJCQlyZXR1cm4gMDsKCQl9CgoJCWlmICggIWEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CgkJ
CXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gLTEgOiAxOwoJCX0KCgkJcmV0dXJu
IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0ID8gLTEgOiAxOwoJfTsKCn0gZWxzZSB7
Cglzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKCQkvLyBUaGUgbm9kZXMgYXJlIGlkZW50
aWNhbCwgd2UgY2FuIGV4aXQgZWFybHkKCQlpZiAoIGEgPT09IGIgKSB7CgkJCWhhc0R1cGxpY2F0
ZSA9IHRydWU7CgkJCXJldHVybiAwOwoKCQkvLyBGYWxsYmFjayB0byB1c2luZyBzb3VyY2VJbmRl
eCAoaW4gSUUpIGlmIGl0J3MgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKCQl9IGVsc2UgaWYgKCBh
LnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7CgkJCXJldHVybiBhLnNvdXJjZUluZGV4
IC0gYi5zb3VyY2VJbmRleDsKCQl9CgoJCXZhciBhbCwgYmwsCgkJCWFwID0gW10sCgkJCWJwID0g
W10sCgkJCWF1cCA9IGEucGFyZW50Tm9kZSwKCQkJYnVwID0gYi5wYXJlbnROb2RlLAoJCQljdXIg
PSBhdXA7CgoJCS8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2Ug
Y2FuIGRvIGEgcXVpY2sgY2hlY2sKCQlpZiAoIGF1cCA9PT0gYnVwICkgewoJCQlyZXR1cm4gc2li
bGluZ0NoZWNrKCBhLCBiICk7CgoJCS8vIElmIG5vIHBhcmVudHMgd2VyZSBmb3VuZCB0aGVuIHRo
ZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCgkJfSBlbHNlIGlmICggIWF1cCApIHsKCQkJcmV0dXJu
IC0xOwoKCQl9IGVsc2UgaWYgKCAhYnVwICkgewoJCQlyZXR1cm4gMTsKCQl9CgoJCS8vIE90aGVy
d2lzZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQKCQkvLyB0
byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24K
CQl3aGlsZSAoIGN1ciApIHsKCQkJYXAudW5zaGlmdCggY3VyICk7CgkJCWN1ciA9IGN1ci5wYXJl
bnROb2RlOwoJCX0KCgkJY3VyID0gYnVwOwoKCQl3aGlsZSAoIGN1ciApIHsKCQkJYnAudW5zaGlm
dCggY3VyICk7CgkJCWN1ciA9IGN1ci5wYXJlbnROb2RlOwoJCX0KCgkJYWwgPSBhcC5sZW5ndGg7
CgkJYmwgPSBicC5sZW5ndGg7CgoJCS8vIFN0YXJ0IHdhbGtpbmcgZG93biB0aGUgdHJlZSBsb29r
aW5nIGZvciBhIGRpc2NyZXBhbmN5CgkJZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJs
OyBpKysgKSB7CgkJCWlmICggYXBbaV0gIT09IGJwW2ldICkgewoJCQkJcmV0dXJuIHNpYmxpbmdD
aGVjayggYXBbaV0sIGJwW2ldICk7CgkJCX0KCQl9CgoJCS8vIFdlIGVuZGVkIHNvbWVwbGFjZSB1
cCB0aGUgdHJlZSBzbyBkbyBhIHNpYmxpbmcgY2hlY2sKCQlyZXR1cm4gaSA9PT0gYWwgPwoJCQlz
aWJsaW5nQ2hlY2soIGEsIGJwW2ldLCAtMSApIDoKCQkJc2libGluZ0NoZWNrKCBhcFtpXSwgYiwg
MSApOwoJfTsKCglzaWJsaW5nQ2hlY2sgPSBmdW5jdGlvbiggYSwgYiwgcmV0ICkgewoJCWlmICgg
YSA9PT0gYiApIHsKCQkJcmV0dXJuIHJldDsKCQl9CgoJCXZhciBjdXIgPSBhLm5leHRTaWJsaW5n
OwoKCQl3aGlsZSAoIGN1ciApIHsKCQkJaWYgKCBjdXIgPT09IGIgKSB7CgkJCQlyZXR1cm4gLTE7
CgkJCX0KCgkJCWN1ciA9IGN1ci5uZXh0U2libGluZzsKCQl9CgoJCXJldHVybiAxOwoJfTsKfQoK
Ly8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmVpdmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBh
cnJheSBvZiBET00gbm9kZXMKU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbXMgKSB7Cgl2
YXIgcmV0ID0gIiIsIGVsZW07CgoJZm9yICggdmFyIGkgPSAwOyBlbGVtc1tpXTsgaSsrICkgewoJ
CWVsZW0gPSBlbGVtc1tpXTsKCgkJLy8gR2V0IHRoZSB0ZXh0IGZyb20gdGV4dCBub2RlcyBhbmQg
Q0RBVEEgbm9kZXMKCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9
PT0gNCApIHsKCQkJcmV0ICs9IGVsZW0ubm9kZVZhbHVlOwoKCQkvLyBUcmF2ZXJzZSBldmVyeXRo
aW5nIGVsc2UsIGV4Y2VwdCBjb21tZW50IG5vZGVzCgkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlw
ZSAhPT0gOCApIHsKCQkJcmV0ICs9IFNpenpsZS5nZXRUZXh0KCBlbGVtLmNoaWxkTm9kZXMgKTsK
CQl9Cgl9CgoJcmV0dXJuIHJldDsKfTsKCi8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciBy
ZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUgd2hlbgovLyBxdWVyeWluZyBieSBnZXRFbGVtZW50QnlJ
ZCAoYW5kIHByb3ZpZGUgYSB3b3JrYXJvdW5kKQooZnVuY3Rpb24oKXsKCS8vIFdlJ3JlIGdvaW5n
IHRvIGluamVjdCBhIGZha2UgaW5wdXQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWVkIG5hbWUKCXZh
ciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCgkJaWQgPSAic2NyaXB0IiAr
IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCgkJcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dDsKCglmb3JtLmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsgaWQgKyAiJy8+IjsKCgkvLyBJbmpl
Y3QgaXQgaW50byB0aGUgcm9vdCBlbGVtZW50LCBjaGVjayBpdHMgc3RhdHVzLCBhbmQgcmVtb3Zl
IGl0IHF1aWNrbHkKCXJvb3QuaW5zZXJ0QmVmb3JlKCBmb3JtLCByb290LmZpcnN0Q2hpbGQgKTsK
CgkvLyBUaGUgd29ya2Fyb3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBn
ZXRFbGVtZW50QnlJZAoJLy8gV2hpY2ggc2xvd3MgdGhpbmdzIGRvd24gZm9yIG90aGVyIGJyb3dz
ZXJzIChoZW5jZSB0aGUgYnJhbmNoaW5nKQoJaWYgKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgg
aWQgKSApIHsKCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1M
ICkgewoJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVk
IiAmJiAhaXNYTUwgKSB7CgkJCQl2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hb
MV0pOwoKCQkJCXJldHVybiBtID8KCQkJCQltLmlkID09PSBtYXRjaFsxXSB8fCB0eXBlb2YgbS5n
ZXRBdHRyaWJ1dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlk
Iikubm9kZVZhbHVlID09PSBtYXRjaFsxXSA/CgkJCQkJCVttXSA6CgkJCQkJCXVuZGVmaW5lZCA6
CgkJCQkJW107CgkJCX0KCQl9OwoKCQlFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBlbGVtLCBt
YXRjaCApIHsKCQkJdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSAi
dW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CgoJCQlyZXR1cm4gZWxl
bS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZhbHVlID09PSBtYXRjaDsKCQl9
OwoJfQoKCXJvb3QucmVtb3ZlQ2hpbGQoIGZvcm0gKTsKCgkvLyByZWxlYXNlIG1lbW9yeSBpbiBJ
RQoJcm9vdCA9IGZvcm0gPSBudWxsOwp9KSgpOwoKKGZ1bmN0aW9uKCl7CgkvLyBDaGVjayB0byBz
ZWUgaWYgdGhlIGJyb3dzZXIgcmV0dXJucyBvbmx5IGVsZW1lbnRzCgkvLyB3aGVuIGRvaW5nIGdl
dEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKCgkvLyBDcmVhdGUgYSBmYWtlIGVsZW1lbnQKCXZhciBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCWRpdi5hcHBlbmRDaGlsZCggZG9j
dW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKCgkvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJl
IGZvdW5kCglpZiAoIGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aCA+IDAgKSB7
CgkJRXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsKCQkJdmFyIHJl
c3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOwoKCQkJLy8g
RmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cwoJCQlpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7
CgkJCQl2YXIgdG1wID0gW107CgoJCQkJZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysg
KSB7CgkJCQkJaWYgKCByZXN1bHRzW2ldLm5vZGVUeXBlID09PSAxICkgewoJCQkJCQl0bXAucHVz
aCggcmVzdWx0c1tpXSApOwoJCQkJCX0KCQkJCX0KCgkJCQlyZXN1bHRzID0gdG1wOwoJCQl9CgoJ
CQlyZXR1cm4gcmVzdWx0czsKCQl9OwoJfQoKCS8vIENoZWNrIHRvIHNlZSBpZiBhbiBhdHRyaWJ1
dGUgcmV0dXJucyBub3JtYWxpemVkIGhyZWYgYXR0cmlidXRlcwoJZGl2LmlubmVySFRNTCA9ICI8
YSBocmVmPScjJz48L2E+IjsKCglpZiAoIGRpdi5maXJzdENoaWxkICYmIHR5cGVvZiBkaXYuZmly
c3RDaGlsZC5nZXRBdHRyaWJ1dGUgIT09ICJ1bmRlZmluZWQiICYmCgkJCWRpdi5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgiaHJlZiIpICE9PSAiIyIgKSB7CgoJCUV4cHIuYXR0ckhhbmRsZS5ocmVm
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CgkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYi
LCAyICk7CgkJfTsKCX0KCgkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQoJZGl2ID0gbnVsbDsKfSko
KTsKCmlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApIHsKCShmdW5jdGlvbigpewoJCXZh
ciBvbGRTaXp6bGUgPSBTaXp6bGUsCgkJCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpLAoJCQlpZCA9ICJfX3NpenpsZV9fIjsKCgkJZGl2LmlubmVySFRNTCA9ICI8cCBjbGFzcz0n
VEVTVCc+PC9wPiI7CgoJCS8vIFNhZmFyaSBjYW4ndCBoYW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNv
ZGUgY2hhcmFjdGVycyB3aGVuCgkJLy8gaW4gcXVpcmtzIG1vZGUuCgkJaWYgKCBkaXYucXVlcnlT
ZWxlY3RvckFsbCAmJiBkaXYucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGggPT09IDAg
KSB7CgkJCXJldHVybjsKCQl9CgkKCQlTaXp6bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQs
IGV4dHJhLCBzZWVkICkgewoJCQljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKCgkJCS8v
IE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgb24gbm9uLVhNTCBkb2N1bWVudHMKCQkJLy8gKElE
IHNlbGVjdG9ycyBkb24ndCB3b3JrIGluIG5vbi1IVE1MIGRvY3VtZW50cykKCQkJaWYgKCAhc2Vl
ZCAmJiAhU2l6emxlLmlzWE1MKGNvbnRleHQpICkgewoJCQkJLy8gU2VlIGlmIHdlIGZpbmQgYSBz
ZWxlY3RvciB0byBzcGVlZCB1cAoJCQkJdmFyIG1hdGNoID0gL14oXHcrJCl8XlwuKFtcd1wtXSsk
KXxeIyhbXHdcLV0rJCkvLmV4ZWMoIHF1ZXJ5ICk7CgkJCQkKCQkJCWlmICggbWF0Y2ggJiYgKGNv
bnRleHQubm9kZVR5cGUgPT09IDEgfHwgY29udGV4dC5ub2RlVHlwZSA9PT0gOSkgKSB7CgkJCQkJ
Ly8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikKCQkJCQlpZiAoIG1hdGNoWzFdICkgewoJCQkJCQly
ZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBl
eHRyYSApOwoJCQkJCQoJCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCgkJCQkJfSBl
bHNlIGlmICggbWF0Y2hbMl0gJiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSApIHsKCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCBtYXRjaFsyXSApLCBleHRyYSApOwoJCQkJCX0KCQkJCX0KCQkJCQoJ
CQkJaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICkgewoJCQkJCS8vIFNwZWVkLXVwOiBTaXp6
bGUoImJvZHkiKQoJCQkJCS8vIFRoZSBib2R5IGVsZW1lbnQgb25seSBleGlzdHMgb25jZSwgb3B0
aW1pemUgZmluZGluZyBpdAoJCQkJCWlmICggcXVlcnkgPT09ICJib2R5IiAmJiBjb250ZXh0LmJv
ZHkgKSB7CgkJCQkJCXJldHVybiBtYWtlQXJyYXkoIFsgY29udGV4dC5ib2R5IF0sIGV4dHJhICk7
CgkJCQkJCQoJCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpCgkJCQkJfSBlbHNlIGlmICgg
bWF0Y2ggJiYgbWF0Y2hbM10gKSB7CgkJCQkJCXZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggbWF0Y2hbM10gKTsKCgkJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hl
biBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCgkJCQkJCS8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdl
ciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKCQkJCQkJaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9k
ZSApIHsKCQkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJu
IGl0ZW1zCgkJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKCQkJCQkJCWlmICggZWxlbS5p
ZCA9PT0gbWF0Y2hbM10gKSB7CgkJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggWyBlbGVtIF0sIGV4
dHJhICk7CgkJCQkJCQl9CgkJCQkJCQkKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCXJldHVybiBtYWtl
QXJyYXkoIFtdLCBleHRyYSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCXRyeSB7CgkJCQkJ
CXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChxdWVyeSksIGV4dHJh
ICk7CgkJCQkJfSBjYXRjaChxc2FFcnJvcikge30KCgkJCQkvLyBxU0Egd29ya3Mgc3RyYW5nZWx5
IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKCQkJCS8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlz
IGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKCQkJCS8vIGFuZCB3b3JraW5n
IHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVl
KQoJCQkJLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVsZW1lbnRzCgkJCQl9IGVsc2Ug
aWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSAhPT0gIm9iamVjdCIgKSB7CgkJCQkJdmFyIG9sZENvbnRleHQgPSBjb250ZXh0LAoJCQkJ
CQlvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApLAoJCQkJCQluaWQgPSBvbGQgfHwg
aWQsCgkJCQkJCWhhc1BhcmVudCA9IGNvbnRleHQucGFyZW50Tm9kZSwKCQkJCQkJcmVsYXRpdmVI
aWVyYXJjaHlTZWxlY3RvciA9IC9eXHMqWyt+XS8udGVzdCggcXVlcnkgKTsKCgkJCQkJaWYgKCAh
b2xkICkgewoJCQkJCQljb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7CgkJCQkJfSBl
bHNlIHsKCQkJCQkJbmlkID0gbmlkLnJlcGxhY2UoIC8nL2csICJcXCQmIiApOwoJCQkJCX0KCQkJ
CQlpZiAoIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgJiYgaGFzUGFyZW50ICkgewoJCQkJCQlj
b250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOwoJCQkJCX0KCgkJCQkJdHJ5IHsKCQkJCQkJaWYg
KCAhcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciB8fCBoYXNQYXJlbnQgKSB7CgkJCQkJCQlyZXR1
cm4gbWFrZUFycmF5KCBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWQ9JyIgKyBuaWQgKyAi
J10gIiArIHF1ZXJ5ICksIGV4dHJhICk7CgkJCQkJCX0KCgkJCQkJfSBjYXRjaChwc2V1ZG9FcnJv
cikgewoJCQkJCX0gZmluYWxseSB7CgkJCQkJCWlmICggIW9sZCApIHsKCQkJCQkJCW9sZENvbnRl
eHQucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkK
CQkJcmV0dXJuIG9sZFNpenpsZShxdWVyeSwgY29udGV4dCwgZXh0cmEsIHNlZWQpOwoJCX07CgoJ
CWZvciAoIHZhciBwcm9wIGluIG9sZFNpenpsZSApIHsKCQkJU2l6emxlWyBwcm9wIF0gPSBvbGRT
aXp6bGVbIHByb3AgXTsKCQl9CgoJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCgkJZGl2ID0gbnVs
bDsKCX0pKCk7Cn0KCihmdW5jdGlvbigpewoJdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQsCgkJbWF0Y2hlcyA9IGh0bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubW96TWF0Y2hl
c1NlbGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubXNNYXRjaGVz
U2VsZWN0b3I7CgoJaWYgKCBtYXRjaGVzICkgewoJCS8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgoJCS8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUg
KElFIDkgZmFpbHMgdGhpcykKCQl2YXIgZGlzY29ubmVjdGVkTWF0Y2ggPSAhbWF0Y2hlcy5jYWxs
KCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLCAiZGl2IiApLAoJCQlwc2V1ZG9Xb3Jr
cyA9IGZhbHNlOwoKCQl0cnkgewoJCQkvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0
aW9uCgkJCS8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKCQkJ
bWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICJbdGVzdCE9JyddOnNpenps
ZSIgKTsKCQoJCX0gY2F0Y2goIHBzZXVkb0Vycm9yICkgewoJCQlwc2V1ZG9Xb3JrcyA9IHRydWU7
CgkJfQoKCQlTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIG5vZGUsIGV4cHIgKSB7
CgkJCS8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAoJCQll
eHByID0gZXhwci5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAiPSckMSddIik7CgoJ
CQlpZiAoICFTaXp6bGUuaXNYTUwoIG5vZGUgKSApIHsKCQkJCXRyeSB7IAoJCQkJCWlmICggcHNl
dWRvV29ya3MgfHwgIUV4cHIubWF0Y2guUFNFVURPLnRlc3QoIGV4cHIgKSAmJiAhLyE9Ly50ZXN0
KCBleHByICkgKSB7CgkJCQkJCXZhciByZXQgPSBtYXRjaGVzLmNhbGwoIG5vZGUsIGV4cHIgKTsK
CgkJCQkJCS8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25u
ZWN0ZWQgbm9kZXMKCQkJCQkJaWYgKCByZXQgfHwgIWRpc2Nvbm5lY3RlZE1hdGNoIHx8CgkJCQkJ
CQkJLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9j
dW1lbnQKCQkJCQkJCQkvLyBmcmFnbWVudCBpbiBJRSA5LCBzbyBjaGVjayBmb3IgdGhhdAoJCQkJ
CQkJCW5vZGUuZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7CgkJ
CQkJCQlyZXR1cm4gcmV0OwoJCQkJCQl9CgkJCQkJfQoJCQkJfSBjYXRjaChlKSB7fQoJCQl9CgoJ
CQlyZXR1cm4gU2l6emxlKGV4cHIsIG51bGwsIG51bGwsIFtub2RlXSkubGVuZ3RoID4gMDsKCQl9
OwoJfQp9KSgpOwoKKGZ1bmN0aW9uKCl7Cgl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CgoJZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2Pjxk
aXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7CgoJLy8gT3BlcmEgY2FuJ3QgZmluZCBhIHNlY29uZCBj
bGFzc25hbWUgKGluIDkuNikKCS8vIEFsc28sIG1ha2Ugc3VyZSB0aGF0IGdldEVsZW1lbnRzQnlD
bGFzc05hbWUgYWN0dWFsbHkgZXhpc3RzCglpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSB8fCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApIHsKCQly
ZXR1cm47Cgl9CgoJLy8gU2FmYXJpIGNhY2hlcyBjbGFzcyBhdHRyaWJ1dGVzLCBkb2Vzbid0IGNh
dGNoIGNoYW5nZXMgKGluIDMuMikKCWRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwoKCWlm
ICggZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDEgKSB7CgkJcmV0
dXJuOwoJfQoJCglFeHByLm9yZGVyLnNwbGljZSgxLCAwLCAiQ0xBU1MiKTsKCUV4cHIuZmluZC5D
TEFTUyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7CgkJaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZpbmVkIiAmJiAhaXNYTUwg
KSB7CgkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUobWF0Y2hbMV0pOwoJ
CX0KCX07CgoJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKCWRpdiA9IG51bGw7Cn0pKCk7CgpmdW5j
dGlvbiBkaXJOb2RlQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVj
aywgaXNYTUwgKSB7Cglmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CgkJdmFyIGVsZW0gPSBjaGVja1NldFtpXTsKCgkJaWYgKCBlbGVtICkgewoJCQl2
YXIgbWF0Y2ggPSBmYWxzZTsKCgkJCWVsZW0gPSBlbGVtW2Rpcl07CgoJCQl3aGlsZSAoIGVsZW0g
KSB7CgkJCQlpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkgewoJCQkJCW1hdGNoID0g
Y2hlY2tTZXRbZWxlbS5zaXpzZXRdOwoJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSAmJiAhaXNYTUwgKXsKCQkJCQllbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7
CgkJCQkJZWxlbS5zaXpzZXQgPSBpOwoJCQkJfQoKCQkJCWlmICggZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBjdXIgKSB7CgkJCQkJbWF0Y2ggPSBlbGVtOwoJCQkJCWJyZWFrOwoJCQkJ
fQoKCQkJCWVsZW0gPSBlbGVtW2Rpcl07CgkJCX0KCgkJCWNoZWNrU2V0W2ldID0gbWF0Y2g7CgkJ
fQoJfQp9CgpmdW5jdGlvbiBkaXJDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwg
bm9kZUNoZWNrLCBpc1hNTCApIHsKCWZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKCQl2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOwoKCQlpZiAoIGVsZW0g
KSB7CgkJCXZhciBtYXRjaCA9IGZhbHNlOwoJCQkKCQkJZWxlbSA9IGVsZW1bZGlyXTsKCgkJCXdo
aWxlICggZWxlbSApIHsKCQkJCWlmICggZWxlbS5zaXpjYWNoZSA9PT0gZG9uZU5hbWUgKSB7CgkJ
CQkJbWF0Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJ
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewoJCQkJCWlmICggIWlzWE1MICkgewoJCQkJCQll
bGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CgkJCQkJCWVsZW0uc2l6c2V0ID0gaTsKCQkJCQl9CgoJ
CQkJCWlmICggdHlwZW9mIGN1ciAhPT0gInN0cmluZyIgKSB7CgkJCQkJCWlmICggZWxlbSA9PT0g
Y3VyICkgewoJCQkJCQkJbWF0Y2ggPSB0cnVlOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCgkJCQkJ
fSBlbHNlIGlmICggU2l6emxlLmZpbHRlciggY3VyLCBbZWxlbV0gKS5sZW5ndGggPiAwICkgewoJ
CQkJCQltYXRjaCA9IGVsZW07CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCgkJCQllbGVtID0g
ZWxlbVtkaXJdOwoJCQl9CgoJCQljaGVja1NldFtpXSA9IG1hdGNoOwoJCX0KCX0KfQoKaWYgKCBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMgKSB7CglTaXp6bGUuY29udGFpbnMgPSBm
dW5jdGlvbiggYSwgYiApIHsKCQlyZXR1cm4gYSAhPT0gYiAmJiAoYS5jb250YWlucyA/IGEuY29u
dGFpbnMoYikgOiB0cnVlKTsKCX07Cgp9IGVsc2UgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CglTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlv
biggYSwgYiApIHsKCQlyZXR1cm4gISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDE2
KTsKCX07Cgp9IGVsc2UgewoJU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oKSB7CgkJcmV0dXJu
IGZhbHNlOwoJfTsKfQoKU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CgkvLyBkb2N1
bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4
aXN0CgkvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCgl2YXIgZG9j
dW1lbnRFbGVtZW50ID0gKGVsZW0gPyBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSA6IDApLmRv
Y3VtZW50RWxlbWVudDsKCglyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50
Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKfTsKCnZhciBwb3NQcm9jZXNzID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoJdmFyIG1hdGNoLAoJCXRtcFNldCA9IFtdLAoJCWxh
dGVyID0gIiIsCgkJcm9vdCA9IGNvbnRleHQubm9kZVR5cGUgPyBbY29udGV4dF0gOiBjb250ZXh0
OwoKCS8vIFBvc2l0aW9uIHNlbGVjdG9ycyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRlcgoJ
Ly8gQW5kIHNvIG11c3QgOm5vdChwb3NpdGlvbmFsKSBzbyB3ZSBtb3ZlIGFsbCBQU0VVRE9zIHRv
IHRoZSBlbmQKCXdoaWxlICggKG1hdGNoID0gRXhwci5tYXRjaC5QU0VVRE8uZXhlYyggc2VsZWN0
b3IgKSkgKSB7CgkJbGF0ZXIgKz0gbWF0Y2hbMF07CgkJc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBs
YWNlKCBFeHByLm1hdGNoLlBTRVVETywgIiIgKTsKCX0KCglzZWxlY3RvciA9IEV4cHIucmVsYXRp
dmVbc2VsZWN0b3JdID8gc2VsZWN0b3IgKyAiKiIgOiBzZWxlY3RvcjsKCglmb3IgKCB2YXIgaSA9
IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQlTaXp6bGUoIHNlbGVjdG9yLCBy
b290W2ldLCB0bXBTZXQgKTsKCX0KCglyZXR1cm4gU2l6emxlLmZpbHRlciggbGF0ZXIsIHRtcFNl
dCApOwp9OwoKLy8gRVhQT1NFCmpRdWVyeS5maW5kID0gU2l6emxlOwpqUXVlcnkuZXhwciA9IFNp
enpsZS5zZWxlY3RvcnM7CmpRdWVyeS5leHByWyI6Il0gPSBqUXVlcnkuZXhwci5maWx0ZXJzOwpq
UXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7CmpRdWVyeS50ZXh0ID0gU2l6emxlLmdl
dFRleHQ7CmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKalF1ZXJ5LmNvbnRhaW5zID0g
U2l6emxlLmNvbnRhaW5zOwoKCn0pKCk7CgoKdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAoJcnBhcmVu
dHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sCgkvLyBOb3RlOiBUaGlz
IFJlZ0V4cCBzaG91bGQgYmUgaW1wcm92ZWQsIG9yIGxpa2VseSBwdWxsZWQgZnJvbSBTaXp6bGUK
CXJtdWx0aXNlbGVjdG9yID0gLywvLAoJaXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvLAoJc2xp
Y2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsCglQT1MgPSBqUXVlcnkuZXhwci5tYXRjaC5QT1Ms
CgkvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFy
dGluZyBmcm9tIGEgdW5pcXVlIHNldAoJZ3VhcmFudGVlZFVuaXF1ZSA9IHsKCQljaGlsZHJlbjog
dHJ1ZSwKCQljb250ZW50czogdHJ1ZSwKCQluZXh0OiB0cnVlLAoJCXByZXY6IHRydWUKCX07Cgpq
UXVlcnkuZm4uZXh0ZW5kKHsKCWZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQl2YXIgc2Vs
ZiA9IHRoaXMsCgkJCWksIGw7CgoJCWlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiAp
IHsKCQkJcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CgkJCQlm
b3IgKCBpID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJCWlmICggalF1
ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKCQkJCQkJcmV0dXJuIHRydWU7CgkJ
CQkJfQoJCQkJfQoJCQl9KTsKCQl9CgoJCXZhciByZXQgPSB0aGlzLnB1c2hTdGFjayggIiIsICJm
aW5kIiwgc2VsZWN0b3IgKSwKCQkJbGVuZ3RoLCBuLCByOwoKCQlmb3IgKCBpID0gMCwgbCA9IHRo
aXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQlsZW5ndGggPSByZXQubGVuZ3RoOwoJCQlqUXVl
cnkuZmluZCggc2VsZWN0b3IsIHRoaXNbaV0sIHJldCApOwoKCQkJaWYgKCBpID4gMCApIHsKCQkJ
CS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRzIGFyZSB1bmlxdWUKCQkJCWZvciAoIG4gPSBs
ZW5ndGg7IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7CgkJCQkJZm9yICggciA9IDA7IHIgPCBsZW5n
dGg7IHIrKyApIHsKCQkJCQkJaWYgKCByZXRbcl0gPT09IHJldFtuXSApIHsKCQkJCQkJCXJldC5z
cGxpY2Uobi0tLCAxKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJ
fQoKCQlyZXR1cm4gcmV0OwoJfSwKCgloYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7CgkJdmFyIHRh
cmdldHMgPSBqUXVlcnkoIHRhcmdldCApOwoJCXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigp
IHsKCQkJZm9yICggdmFyIGkgPSAwLCBsID0gdGFyZ2V0cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CgkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewoJCQkJCXJl
dHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfSk7Cgl9LAoKCW5vdDogZnVuY3Rpb24oIHNlbGVjdG9y
ICkgewoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCBmYWxz
ZSksICJub3QiLCBzZWxlY3Rvcik7Cgl9LAoKCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkg
ewoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwg
ImZpbHRlciIsIHNlbGVjdG9yICk7Cgl9LAoKCWlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJ
cmV0dXJuICEhc2VsZWN0b3IgJiYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KCQkJ
alF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKCQkJdGhpcy5maWx0
ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwoJfSwKCgljbG9zZXN0OiBmdW5jdGlvbiggc2Vs
ZWN0b3JzLCBjb250ZXh0ICkgewoJCXZhciByZXQgPSBbXSwgaSwgbCwgY3VyID0gdGhpc1swXTsK
CQkKCQkvLyBBcnJheQoJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHNlbGVjdG9ycyApICkgewoJCQl2
YXIgbWF0Y2gsIHNlbGVjdG9yLAoJCQkJbWF0Y2hlcyA9IHt9LAoJCQkJbGV2ZWwgPSAxOwoKCQkJ
aWYgKCBjdXIgJiYgc2VsZWN0b3JzLmxlbmd0aCApIHsKCQkJCWZvciAoIGkgPSAwLCBsID0gc2Vs
ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJCQlzZWxlY3RvciA9IHNlbGVjdG9yc1tp
XTsKCgkJCQkJaWYgKCAhbWF0Y2hlc1sgc2VsZWN0b3IgXSApIHsKCQkJCQkJbWF0Y2hlc1sgc2Vs
ZWN0b3IgXSA9IFBPUy50ZXN0KCBzZWxlY3RvciApID8KCQkJCQkJCWpRdWVyeSggc2VsZWN0b3Is
IGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgoJCQkJCQkJc2VsZWN0b3I7CgkJCQkJfQoJCQkJ
fQoKCQkJCXdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4
dCApIHsKCQkJCQlmb3IgKCBzZWxlY3RvciBpbiBtYXRjaGVzICkgewoJCQkJCQltYXRjaCA9IG1h
dGNoZXNbIHNlbGVjdG9yIF07CgoJCQkJCQlpZiAoIG1hdGNoLmpxdWVyeSA/IG1hdGNoLmluZGV4
KCBjdXIgKSA+IC0xIDogalF1ZXJ5KCBjdXIgKS5pcyggbWF0Y2ggKSApIHsKCQkJCQkJCXJldC5w
dXNoKHsgc2VsZWN0b3I6IHNlbGVjdG9yLCBlbGVtOiBjdXIsIGxldmVsOiBsZXZlbCB9KTsKCQkJ
CQkJfQoJCQkJCX0KCgkJCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7CgkJCQkJbGV2ZWwrKzsKCQkJ
CX0KCQkJfQoKCQkJcmV0dXJuIHJldDsKCQl9CgoJCS8vIFN0cmluZwoJCXZhciBwb3MgPSBQT1Mu
dGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPwoJCQkJ
alF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgoJCQkJMDsKCgkJ
Zm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJY3VyID0gdGhp
c1tpXTsKCgkJCXdoaWxlICggY3VyICkgewoJCQkJaWYgKCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+
IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSApIHsKCQkJ
CQlyZXQucHVzaCggY3VyICk7CgkJCQkJYnJlYWs7CgoJCQkJfSBlbHNlIHsKCQkJCQljdXIgPSBj
dXIucGFyZW50Tm9kZTsKCQkJCQlpZiAoICFjdXIgfHwgIWN1ci5vd25lckRvY3VtZW50IHx8IGN1
ciA9PT0gY29udGV4dCB8fCBjdXIubm9kZVR5cGUgPT09IDExICkgewoJCQkJCQlicmVhazsKCQkJ
CQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldCA9IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1
ZSggcmV0ICkgOiByZXQ7CgoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIs
IHNlbGVjdG9ycyApOwoJfSwKCgkvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1l
bnQgd2l0aGluCgkvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKCWluZGV4OiBmdW5jdGlv
biggZWxlbSApIHsKCQlpZiAoICFlbGVtIHx8IHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsK
CQkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLAoJCQkJLy8gSWYgaXQgcmVjZWl2ZXMg
YSBzdHJpbmcsIHRoZSBzZWxlY3RvciBpcyB1c2VkCgkJCQkvLyBJZiBpdCByZWNlaXZlcyBub3Ro
aW5nLCB0aGUgc2libGluZ3MgYXJlIHVzZWQKCQkJCWVsZW0gPyBqUXVlcnkoIGVsZW0gKSA6IHRo
aXMucGFyZW50KCkuY2hpbGRyZW4oKSApOwoJCX0KCQkvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9m
IHRoZSBkZXNpcmVkIGVsZW1lbnQKCQlyZXR1cm4galF1ZXJ5LmluQXJyYXkoCgkJCS8vIElmIGl0
IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAoJCQll
bGVtLmpxdWVyeSA/IGVsZW1bMF0gOiBlbGVtLCB0aGlzICk7Cgl9LAoKCWFkZDogZnVuY3Rpb24o
IHNlbGVjdG9yLCBjb250ZXh0ICkgewoJCXZhciBzZXQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJz
dHJpbmciID8KCQkJCWpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSA6CgkJCQlqUXVlcnkubWFr
ZUFycmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rvci5ub2RlVHlwZSA/IFsgc2VsZWN0b3IgXSA6IHNl
bGVjdG9yICksCgkJCWFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7CgoJCXJl
dHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0ZWQoIHNldFswXSApIHx8IGlzRGlzY29u
bmVjdGVkKCBhbGxbMF0gKSA/CgkJCWFsbCA6CgkJCWpRdWVyeS51bmlxdWUoIGFsbCApICk7Cgl9
LAoKCWFuZFNlbGY6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmFkZCggdGhpcy5wcmV2T2Jq
ZWN0ICk7Cgl9Cn0pOwoKLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNoZWNrIHRvIHNlZSBpZiBhbiBl
bGVtZW50IGlzIGRpc2Nvbm5lY3RlZAovLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXBy
b3ZlZCwgd2hlcmUgZmVhc2libGUpLgpmdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZCggbm9kZSApIHsK
CXJldHVybiAhbm9kZSB8fCAhbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2Rl
VHlwZSA9PT0gMTE7Cn0KCmpRdWVyeS5lYWNoKHsKCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7
CgkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKCQlyZXR1cm4gcGFyZW50ICYmIHBhcmVu
dC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwoJfSwKCXBhcmVudHM6IGZ1bmN0aW9u
KCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKCX0s
CglwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1cm4galF1
ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwoJfSwKCW5leHQ6IGZ1bmN0aW9u
KCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkubnRoKCBlbGVtLCAyLCAibmV4dFNpYmxpbmciICk7
Cgl9LAoJcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGpRdWVyeS5udGgoIGVsZW0s
IDIsICJwcmV2aW91c1NpYmxpbmciICk7Cgl9LAoJbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7
CgkJcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKCX0sCglwcmV2QWxs
OiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3Vz
U2libGluZyIgKTsKCX0sCgluZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsK
CQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKCX0sCglw
cmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRp
ciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7Cgl9LAoJc2libGluZ3M6IGZ1bmN0
aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5wYXJlbnROb2RlLmZp
cnN0Q2hpbGQsIGVsZW0gKTsKCX0sCgljaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0
dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKCX0sCgljb250ZW50czogZnVu
Y3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlmcmFtZSIg
KSA/CgkJCWVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVu
dCA6CgkJCWpRdWVyeS5tYWtlQXJyYXkoIGVsZW0uY2hpbGROb2RlcyApOwoJfQp9LCBmdW5jdGlv
biggbmFtZSwgZm4gKSB7CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2Vs
ZWN0b3IgKSB7CgkJdmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApLAoJCQkv
LyBUaGUgdmFyaWFibGUgJ2FyZ3MnIHdhcyBpbnRyb2R1Y2VkIGluCgkJCS8vIGh0dHBzOi8vZ2l0
aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2NvbW1pdC81MmEwMjM4CgkJCS8vIHRvIHdvcmsgYXJvdW5k
IGEgYnVnIGluIENocm9tZSAxMCAoRGV2KSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUg
YnVnIGlzIGZpeGVkLgoJCQkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2Rl
dGFpbD9pZD0xMDUwCgkJCWFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7CgoJCWlmICggIXJ1
bnRpbC50ZXN0KCBuYW1lICkgKSB7CgkJCXNlbGVjdG9yID0gdW50aWw7CgkJfQoKCQlpZiAoIHNl
bGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CgkJCXJldCA9IGpRdWVy
eS5maWx0ZXIoIHNlbGVjdG9yLCByZXQgKTsKCQl9CgoJCXJldCA9IHRoaXMubGVuZ3RoID4gMSAm
JiAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7
CgoJCWlmICggKHRoaXMubGVuZ3RoID4gMSB8fCBybXVsdGlzZWxlY3Rvci50ZXN0KCBzZWxlY3Rv
ciApKSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgewoJCQlyZXQgPSByZXQucmV2ZXJz
ZSgpOwoJCX0KCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGFyZ3Muam9pbigi
LCIpICk7Cgl9Owp9KTsKCmpRdWVyeS5leHRlbmQoewoJZmlsdGVyOiBmdW5jdGlvbiggZXhwciwg
ZWxlbXMsIG5vdCApIHsKCQlpZiAoIG5vdCApIHsKCQkJZXhwciA9ICI6bm90KCIgKyBleHByICsg
IikiOwoJCX0KCgkJcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSA/CgkJCWpRdWVyeS5maW5kLm1h
dGNoZXNTZWxlY3RvcihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0gOiBbXSA6CgkJCWpR
dWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOwoJfSwKCglkaXI6IGZ1bmN0aW9uKCBlbGVt
LCBkaXIsIHVudGlsICkgewoJCXZhciBtYXRjaGVkID0gW10sCgkJCWN1ciA9IGVsZW1bIGRpciBd
OwoKCQl3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRl
ZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCAp
KSApIHsKCQkJaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgKSB7CgkJCQltYXRjaGVkLnB1c2goIGN1
ciApOwoJCQl9CgkJCWN1ciA9IGN1cltkaXJdOwoJCX0KCQlyZXR1cm4gbWF0Y2hlZDsKCX0sCgoJ
bnRoOiBmdW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsKCQlyZXN1bHQgPSByZXN1
bHQgfHwgMTsKCQl2YXIgbnVtID0gMDsKCgkJZm9yICggOyBjdXI7IGN1ciA9IGN1cltkaXJdICkg
ewoJCQlpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiArK251bSA9PT0gcmVzdWx0ICkgewoJCQkJ
YnJlYWs7CgkJCX0KCQl9CgoJCXJldHVybiBjdXI7Cgl9LAoKCXNpYmxpbmc6IGZ1bmN0aW9uKCBu
LCBlbGVtICkgewoJCXZhciByID0gW107CgoJCWZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcg
KSB7CgkJCWlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewoJCQkJci5wdXNo
KCBuICk7CgkJCX0KCQl9CgoJCXJldHVybiByOwoJfQp9KTsKCi8vIEltcGxlbWVudCB0aGUgaWRl
bnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CmZ1bmN0aW9uIHdpbm5vdygg
ZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKCgkvLyBDYW4ndCBwYXNzIG51bGwgb3IgdW5k
ZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0CgkvLyBTZXQgdG8gMCB0byBza2lwIHN0cmlu
ZyBjaGVjawoJcXVhbGlmaWVyID0gcXVhbGlmaWVyIHx8IDA7CgoJaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggcXVhbGlmaWVyICkgKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5j
dGlvbiggZWxlbSwgaSApIHsKCQkJdmFyIHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0s
IGksIGVsZW0gKTsKCQkJcmV0dXJuIHJldFZhbCA9PT0ga2VlcDsKCQl9KTsKCgl9IGVsc2UgaWYg
KCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBm
dW5jdGlvbiggZWxlbSwgaSApIHsKCQkJcmV0dXJuIChlbGVtID09PSBxdWFsaWZpZXIpID09PSBr
ZWVwOwoJCX0pOwoKCX0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkg
ewoJCXZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSAp
IHsKCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CgkJfSk7CgoJCWlmICggaXNTaW1wbGUu
dGVzdCggcXVhbGlmaWVyICkgKSB7CgkJCXJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwg
ZmlsdGVyZWQsICFrZWVwKTsKCQl9IGVsc2UgewoJCQlxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVy
KCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7CgkJfQoJfQoKCXJldHVybiBqUXVlcnkuZ3JlcChlbGVt
ZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CgkJcmV0dXJuIChqUXVlcnkuaW5BcnJheSggZWxl
bSwgcXVhbGlmaWVyICkgPj0gMCkgPT09IGtlZXA7Cgl9KTsKfQoKCgoKdmFyIHJpbmxpbmVqUXVl
cnkgPSAvIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLAoJcmxlYWRpbmdXaGl0ZXNwYWNlID0g
L15ccysvLAoJcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8
bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZywKCXJ0YWdOYW1lID0gLzwoW1x3
Ol0rKS8sCglydGJvZHkgPSAvPHRib2R5L2ksCglyaHRtbCA9IC88fCYjP1x3KzsvLAoJcm5vY2Fj
aGUgPSAvPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAoJLy8gY2hlY2tl
ZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAoJcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxz
Ki5jaGVja2VkLikvaSwKCXJzY3JpcHRUeXBlID0gL1wvKGphdmF8ZWNtYSlzY3JpcHQvaSwKCXJj
bGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSkvLAoJd3JhcE1hcCA9IHsKCQlv
cHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBd
LAoJCWxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0PiIgXSwKCQl0aGVhZDog
WyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKCQl0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4i
LCAiPC90Ym9keT48L3RhYmxlPiIgXSwKCQl0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+Iiwg
IjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKCQljb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90
Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCgkJYXJlYTogWyAxLCAi
PG1hcD4iLCAiPC9tYXA+IiBdLAoJCV9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCgl9OwoKd3JhcE1h
cC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOwp3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9v
dCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOwp3
cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKCi8vIElFIGNhbid0IHNlcmlhbGl6ZSA8bGluaz4gYW5k
IDxzY3JpcHQ+IHRhZ3Mgbm9ybWFsbHkKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6
ZSApIHsKCXdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJkaXY8ZGl2PiIsICI8L2Rpdj4iIF07Cn0K
CmpRdWVyeS5mbi5leHRlbmQoewoJdGV4dDogZnVuY3Rpb24oIHRleHQgKSB7CgkJaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbih0ZXh0KSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7
CgkJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOwoKCQkJCXNlbGYudGV4dCggdGV4dC5jYWxs
KHRoaXMsIGksIHNlbGYudGV4dCgpKSApOwoJCQl9KTsKCQl9CgoJCWlmICggdHlwZW9mIHRleHQg
IT09ICJvYmplY3QiICYmIHRleHQgIT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRoaXMuZW1w
dHkoKS5hcHBlbmQoICh0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVu
dCkuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwoJCX0KCgkJcmV0dXJuIGpRdWVyeS50ZXh0KCB0
aGlzICk7Cgl9LAoKCXdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewoJCWlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJ
CQlqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7CgkJCX0pOwoJCX0K
CgkJaWYgKCB0aGlzWzBdICkgewoJCQkvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0
IGFyb3VuZAoJCQl2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50
ICkuZXEoMCkuY2xvbmUodHJ1ZSk7CgoJCQlpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKCQkJ
CXdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7CgkJCX0KCgkJCXdyYXAubWFwKGZ1bmN0aW9u
KCkgewoJCQkJdmFyIGVsZW0gPSB0aGlzOwoKCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxkICYm
IGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQllbGVtID0gZWxlbS5maXJz
dENoaWxkOwoJCQkJfQoKCQkJCXJldHVybiBlbGVtOwoJCQl9KS5hcHBlbmQoIHRoaXMgKTsKCQl9
CgoJCXJldHVybiB0aGlzOwoJfSwKCgl3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewoJCWlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbihpKSB7CgkJCQlqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkg
KTsKCQkJfSk7CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgc2Vs
ZiA9IGpRdWVyeSggdGhpcyApLAoJCQkJY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CgoJCQlp
ZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKCQkJCWNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKCgkJ
CX0gZWxzZSB7CgkJCQlzZWxmLmFwcGVuZCggaHRtbCApOwoJCQl9CgkJfSk7Cgl9LAoKCXdyYXA6
IGZ1bmN0aW9uKCBodG1sICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWpR
dWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwgKTsKCQl9KTsKCX0sCgoJdW53cmFwOiBmdW5jdGlv
bigpIHsKCQlyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQlpZiAoICFq
UXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkgewoJCQkJalF1ZXJ5KCB0aGlzICkucmVw
bGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOwoJCQl9CgkJfSkuZW5kKCk7Cgl9LAoKCWFwcGVu
ZDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBm
dW5jdGlvbiggZWxlbSApIHsKCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkgewoJCQkJdGhp
cy5hcHBlbmRDaGlsZCggZWxlbSApOwoJCQl9CgkJfSk7Cgl9LAoKCXByZXBlbmQ6IGZ1bmN0aW9u
KCkgewoJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVs
ZW0gKSB7CgkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCXRoaXMuaW5zZXJ0QmVm
b3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKCQkJfQoJCX0pOwoJfSwKCgliZWZvcmU6IGZ1
bmN0aW9uKCkgewoJCWlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CgkJCXJl
dHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewoJ
CQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOwoJCQl9KTsKCQl9
IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewoJCQl2YXIgc2V0ID0galF1ZXJ5KGFyZ3Vt
ZW50c1swXSk7CgkJCXNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJheSgpICk7CgkJCXJl
dHVybiB0aGlzLnB1c2hTdGFjayggc2V0LCAiYmVmb3JlIiwgYXJndW1lbnRzICk7CgkJfQoJfSwK
CglhZnRlcjogZnVuY3Rpb24oKSB7CgkJaWYgKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9k
ZSApIHsKCQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24o
IGVsZW0gKSB7CgkJCQl0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5l
eHRTaWJsaW5nICk7CgkJCX0pOwoJCX0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CgkJ
CXZhciBzZXQgPSB0aGlzLnB1c2hTdGFjayggdGhpcywgImFmdGVyIiwgYXJndW1lbnRzICk7CgkJ
CXNldC5wdXNoLmFwcGx5KCBzZXQsIGpRdWVyeShhcmd1bWVudHNbMF0pLnRvQXJyYXkoKSApOwoJ
CQlyZXR1cm4gc2V0OwoJCX0KCX0sCgoJLy8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVzZSBv
bmx5LS1kbyBub3QgZG9jdW1lbnQKCXJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0
YSApIHsKCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsg
aSsrICkgewoJCQlpZiAoICFzZWxlY3RvciB8fCBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyBl
bGVtIF0gKS5sZW5ndGggKSB7CgkJCQlpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09
PSAxICkgewoJCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUo
IioiKSApOwoJCQkJCWpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7CgkJCQl9CgoJCQkJaWYg
KCBlbGVtLnBhcmVudE5vZGUgKSB7CgkJCQkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBl
bGVtICk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgllbXB0eTogZnVuY3Rp
b24oKSB7CgkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7
IGkrKyApIHsKCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxl
YWtzCgkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCWpRdWVyeS5jbGVhbkRhdGEo
IGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwoJCQl9CgoJCQkvLyBSZW1vdmUgYW55
IHJlbWFpbmluZyBub2RlcwoJCQl3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKCQkJCWVsZW0u
cmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsK
CX0sCgoJY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyAp
IHsKCQlkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRh
QW5kRXZlbnRzOwoJCWRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVs
bCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKCgkJcmV0dXJuIHRoaXMubWFw
KCBmdW5jdGlvbiAoKSB7CgkJCXJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVu
dHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CgkJfSk7Cgl9LAoKCWh0bWw6IGZ1bmN0aW9uKCB2YWx1
ZSApIHsKCQlpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiB0aGlzWzBdICYm
IHRoaXNbMF0ubm9kZVR5cGUgPT09IDEgPwoJCQkJdGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShy
aW5saW5lalF1ZXJ5LCAiIikgOgoJCQkJbnVsbDsKCgkJLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEg
c2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAoJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1
ZSA9PT0gInN0cmluZyIgJiYgIXJub2NhY2hlLnRlc3QoIHZhbHVlICkgJiYKCQkJKGpRdWVyeS5z
dXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFs
dWUgKSkgJiYKCQkJIXdyYXBNYXBbIChydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJd
KVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7CgoJCQl2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocnhodG1s
VGFnLCAiPCQxPjwvJDI+Iik7CgoJCQl0cnkgewoJCQkJZm9yICggdmFyIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5k
IHByZXZlbnQgbWVtb3J5IGxlYWtzCgkJCQkJaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICkg
ewoJCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCB0aGlzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIq
IikgKTsKCQkJCQkJdGhpc1tpXS5pbm5lckhUTUwgPSB2YWx1ZTsKCQkJCQl9CgkJCQl9CgoJCQkv
LyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFj
ayBtZXRob2QKCQkJfSBjYXRjaChlKSB7CgkJCQl0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSAp
OwoJCQl9CgoJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewoJCQl0
aGlzLmVhY2goZnVuY3Rpb24oaSl7CgkJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOwoKCQkJ
CXNlbGYuaHRtbCggdmFsdWUuY2FsbCh0aGlzLCBpLCBzZWxmLmh0bWwoKSkgKTsKCQkJfSk7CgoJ
CX0gZWxzZSB7CgkJCXRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CgkJfQoKCQlyZXR1cm4g
dGhpczsKCX0sCgoJcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQlpZiAoIHRoaXNb
MF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgewoJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZWxl
bWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNlcnRlZAoJ
CQkvLyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0aCBjaGlsZCBlbGVt
ZW50cwoJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewoJCQkJcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQkJdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIG9sZCA9
IHNlbGYuaHRtbCgpOwoJCQkJCXNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGks
IG9sZCApICk7CgkJCQl9KTsKCQkJfQoKCQkJaWYgKCB0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmci
ICkgewoJCQkJdmFsdWUgPSBqUXVlcnkoIHZhbHVlICkuZGV0YWNoKCk7CgkJCX0KCgkJCXJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmcs
CgkJCQkJcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwoKCQkJCWpRdWVyeSggdGhpcyApLnJlbW92
ZSgpOwoKCQkJCWlmICggbmV4dCApIHsKCQkJCQlqUXVlcnkobmV4dCkuYmVmb3JlKCB2YWx1ZSAp
OwoJCQkJfSBlbHNlIHsKCQkJCQlqUXVlcnkocGFyZW50KS5hcHBlbmQoIHZhbHVlICk7CgkJCQl9
CgkJCX0pOwoJCX0gZWxzZSB7CgkJCXJldHVybiB0aGlzLmxlbmd0aCA/CgkJCQl0aGlzLnB1c2hT
dGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSks
ICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgoJCQkJdGhpczsKCQl9Cgl9LAoKCWRldGFjaDogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUg
KTsKCX0sCgoJZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CgkJ
dmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFnbWVudCwgcGFyZW50LAoJCQl2YWx1ZSA9IGFyZ3NbMF0s
CgkJCXNjcmlwdHMgPSBbXTsKCgkJLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0
IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0CgkJaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tD
bG9uZSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmlu
ZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKCQkJCWpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNr
LCB0cnVlICk7CgkJCX0pOwoJCX0KCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7
CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewoJCQkJdmFyIHNlbGYgPSBqUXVlcnko
dGhpcyk7CgkJCQlhcmdzWzBdID0gdmFsdWUuY2FsbCh0aGlzLCBpLCB0YWJsZSA/IHNlbGYuaHRt
bCgpIDogdW5kZWZpbmVkKTsKCQkJCXNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFj
ayApOwoJCQl9KTsKCQl9CgoJCWlmICggdGhpc1swXSApIHsKCQkJcGFyZW50ID0gdmFsdWUgJiYg
dmFsdWUucGFyZW50Tm9kZTsKCgkJCS8vIElmIHdlJ3JlIGluIGEgZnJhZ21lbnQsIGp1c3QgdXNl
IHRoYXQgaW5zdGVhZCBvZiBidWlsZGluZyBhIG5ldyBvbmUKCQkJaWYgKCBqUXVlcnkuc3VwcG9y
dC5wYXJlbnROb2RlICYmIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVu
dC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGggKSB7CgkJCQlyZXN1bHRzID0geyBm
cmFnbWVudDogcGFyZW50IH07CgoJCQl9IGVsc2UgewoJCQkJcmVzdWx0cyA9IGpRdWVyeS5idWls
ZEZyYWdtZW50KCBhcmdzLCB0aGlzLCBzY3JpcHRzICk7CgkJCX0KCgkJCWZyYWdtZW50ID0gcmVz
dWx0cy5mcmFnbWVudDsKCgkJCWlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEg
KSB7CgkJCQlmaXJzdCA9IGZyYWdtZW50ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKCQkJfSBlbHNl
IHsKCQkJCWZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKCQkJfQoKCQkJaWYgKCBmaXJzdCAp
IHsKCQkJCXRhYmxlID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiApOwoK
CQkJCWZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoLCBsYXN0SW5kZXggPSBsIC0gMTsg
aSA8IGw7IGkrKyApIHsKCQkJCQljYWxsYmFjay5jYWxsKAoJCQkJCQl0YWJsZSA/CgkJCQkJCQly
b290KHRoaXNbaV0sIGZpcnN0KSA6CgkJCQkJCQl0aGlzW2ldLAoJCQkJCQkvLyBNYWtlIHN1cmUg
dGhhdCB3ZSBkbyBub3QgbGVhayBtZW1vcnkgYnkgaW5hZHZlcnRlbnRseSBkaXNjYXJkaW5nCgkJ
CQkJCS8vIHRoZSBvcmlnaW5hbCBmcmFnbWVudCAod2hpY2ggbWlnaHQgaGF2ZSBhdHRhY2hlZCBk
YXRhKSBpbnN0ZWFkIG9mCgkJCQkJCS8vIHVzaW5nIGl0OyBpbiBhZGRpdGlvbiwgdXNlIHRoZSBv
cmlnaW5hbCBmcmFnbWVudCBvYmplY3QgZm9yIHRoZSBsYXN0CgkJCQkJCS8vIGl0ZW0gaW5zdGVh
ZCBvZiBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAgYmVpbmcgZW1wdGllZCBpbmNvcnJlY3Rs
eQoJCQkJCQkvLyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKEJ1ZyAjODA3MCkuCgkJCQkJCS8vIEZy
YWdtZW50cyBmcm9tIHRoZSBmcmFnbWVudCBjYWNoZSBtdXN0IGFsd2F5cyBiZSBjbG9uZWQgYW5k
IG5ldmVyIHVzZWQKCQkJCQkJLy8gaW4gcGxhY2UuCgkJCQkJCXJlc3VsdHMuY2FjaGVhYmxlIHx8
IChsID4gMSAmJiBpIDwgbGFzdEluZGV4KSA/CgkJCQkJCQlqUXVlcnkuY2xvbmUoIGZyYWdtZW50
LCB0cnVlLCB0cnVlICkgOgoJCQkJCQkJZnJhZ21lbnQKCQkJCQkpOwoJCQkJfQoJCQl9CgoJCQlp
ZiAoIHNjcmlwdHMubGVuZ3RoICkgewoJCQkJalF1ZXJ5LmVhY2goIHNjcmlwdHMsIGV2YWxTY3Jp
cHQgKTsKCQkJfQoJCX0KCgkJcmV0dXJuIHRoaXM7Cgl9Cn0pOwoKZnVuY3Rpb24gcm9vdCggZWxl
bSwgY3VyICkgewoJcmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAidGFibGUiKSA/CgkJKGVs
ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0gfHwKCQllbGVtLmFwcGVuZENoaWxk
KGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKSkgOgoJCWVsZW07Cn0K
CmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7CgoJaWYgKCBkZXN0Lm5vZGVU
eXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3JjICkgKSB7CgkJcmV0dXJuOwoJfQoKCXZh
ciBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAoJCW9sZERhdGEgPSBqUXVlcnkuZGF0YSgg
c3JjICksCgkJY3VyRGF0YSA9IGpRdWVyeS5kYXRhKCBkZXN0LCBvbGREYXRhICk7CgoJLy8gU3dp
dGNoIHRvIHVzZSB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QsIGlmIGl0IGV4aXN0cywgZm9yIHRo
ZSBuZXh0CgkvLyBzdGFnZSBvZiBkYXRhIGNvcHlpbmcKCWlmICggKG9sZERhdGEgPSBvbGREYXRh
WyBpbnRlcm5hbEtleSBdKSApIHsKCQl2YXIgZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7CgkJCQlj
dXJEYXRhID0gY3VyRGF0YVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQoe30sIG9sZERh
dGEpOwoKCQlpZiAoIGV2ZW50cyApIHsKCQkJZGVsZXRlIGN1ckRhdGEuaGFuZGxlOwoJCQljdXJE
YXRhLmV2ZW50cyA9IHt9OwoKCQkJZm9yICggdmFyIHR5cGUgaW4gZXZlbnRzICkgewoJCQkJZm9y
ICggdmFyIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJ
CQkJCWpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBpIF0u
bmFtZXNwYWNlID8gIi4iIDogIiIgKSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlLCBl
dmVudHNbIHR5cGUgXVsgaSBdLCBldmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKCQkJCX0KCQkJ
fQoJCX0KCX0KfQoKZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7Cgl2
YXIgbm9kZU5hbWU7CgoJLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIG5vbi1F
bGVtZW50cwoJaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewoJCXJldHVybjsKCX0KCgkvLyBj
bGVhckF0dHJpYnV0ZXMgcmVtb3ZlcyB0aGUgYXR0cmlidXRlcywgd2hpY2ggd2UgZG9uJ3Qgd2Fu
dCwKCS8vIGJ1dCBhbHNvIHJlbW92ZXMgdGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2Ug
KmRvKiB3YW50CglpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkgewoJCWRlc3QuY2xlYXJBdHRy
aWJ1dGVzKCk7Cgl9CgoJLy8gbWVyZ2VBdHRyaWJ1dGVzLCBpbiBjb250cmFzdCwgb25seSBtZXJn
ZXMgYmFjayBvbiB0aGUKCS8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZlbnRzCglp
ZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkgewoJCWRlc3QubWVyZ2VBdHRyaWJ1dGVzKCBzcmMg
KTsKCX0KCglub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCgkvLyBJRTYt
OCBmYWlsIHRvIGNsb25lIGNoaWxkcmVuIGluc2lkZSBvYmplY3QgZWxlbWVudHMgdGhhdCB1c2UK
CS8vIHRoZSBwcm9wcmlldGFyeSBjbGFzc2lkIGF0dHJpYnV0ZSB2YWx1ZSAocmF0aGVyIHRoYW4g
dGhlIHR5cGUKCS8vIGF0dHJpYnV0ZSkgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgY29udGVudCB0
byBkaXNwbGF5CglpZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKCQlkZXN0Lm91dGVySFRN
TCA9IHNyYy5vdXRlckhUTUw7CgoJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYg
KHNyYy50eXBlID09PSAiY2hlY2tib3giIHx8IHNyYy50eXBlID09PSAicmFkaW8iKSApIHsKCQkv
LyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNo
ZWNrYm94CgkJLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcgZmFpbCB0byBnaXZlIHRo
ZSBjbG9uZWQgZWxlbWVudAoJCS8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0
Q2hlY2tlZCB2YWx1ZSBpc24ndCBhbHNvIHNldAoJCWlmICggc3JjLmNoZWNrZWQgKSB7CgkJCWRl
c3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKCQl9CgoJCS8v
IElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVlIG9mIGEgY2xv
bmVkCgkJLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFk
IG9mICJvbiIKCQlpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKCQkJZGVzdC52YWx1
ZSA9IHNyYy52YWx1ZTsKCQl9CgoJLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3Rl
ZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKCS8vIHN0YXRlIHdoZW4gY2xvbmluZyBv
cHRpb25zCgl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIgKSB7CgkJZGVzdC5zZWxl
Y3RlZCA9IHNyYy5kZWZhdWx0U2VsZWN0ZWQ7CgoJLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBk
ZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgoJLy8gY2xvbmluZyBvdGhlciB0
eXBlcyBvZiBpbnB1dCBmaWVsZHMKCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiIHx8
IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgewoJCWRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRl
ZmF1bHRWYWx1ZTsKCX0KCgkvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9m
IGNvcGllZCBpZiB0aGUgZXhwYW5kbwoJLy8gZ2V0cyBjb3BpZWQgdG9vCglkZXN0LnJlbW92ZUF0
dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKfQoKalF1ZXJ5LmJ1aWxkRnJhZ21lbnQgPSBmdW5j
dGlvbiggYXJncywgbm9kZXMsIHNjcmlwdHMgKSB7Cgl2YXIgZnJhZ21lbnQsIGNhY2hlYWJsZSwg
Y2FjaGVyZXN1bHRzLAoJCWRvYyA9IChub2RlcyAmJiBub2Rlc1swXSA/IG5vZGVzWzBdLm93bmVy
RG9jdW1lbnQgfHwgbm9kZXNbMF0gOiBkb2N1bWVudCk7CgoJLy8gT25seSBjYWNoZSAic21hbGwi
ICgxLzIgS0IpIEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4g
ZG9jdW1lbnQKCS8vIENsb25pbmcgb3B0aW9ucyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNv
IGRvbid0IGNhY2hlIHRoZW0KCS8vIElFIDYgZG9lc24ndCBsaWtlIGl0IHdoZW4geW91IHB1dCA8
b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQKCS8vIEFsc28sIFdlYktp
dCBkb2VzIG5vdCBjbG9uZSAnY2hlY2tlZCcgYXR0cmlidXRlcyBvbiBjbG9uZU5vZGUsIHNvIGRv
bid0IGNhY2hlCglpZiAoIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAi
c3RyaW5nIiAmJiBhcmdzWzBdLmxlbmd0aCA8IDUxMiAmJiBkb2MgPT09IGRvY3VtZW50ICYmCgkJ
YXJnc1swXS5jaGFyQXQoMCkgPT09ICI8IiAmJiAhcm5vY2FjaGUudGVzdCggYXJnc1swXSApICYm
IChqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8ICFyY2hlY2tlZC50ZXN0KCBhcmdzWzBdICkp
ICkgewoKCQljYWNoZWFibGUgPSB0cnVlOwoKCQljYWNoZXJlc3VsdHMgPSBqUXVlcnkuZnJhZ21l
bnRzWyBhcmdzWzBdIF07CgkJaWYgKCBjYWNoZXJlc3VsdHMgJiYgY2FjaGVyZXN1bHRzICE9PSAx
ICkgewoJCQlmcmFnbWVudCA9IGNhY2hlcmVzdWx0czsKCQl9Cgl9CgoJaWYgKCAhZnJhZ21lbnQg
KSB7CgkJZnJhZ21lbnQgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoJCWpRdWVyeS5j
bGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApOwoJfQoKCWlmICggY2FjaGVhYmxl
ICkgewoJCWpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXSA9IGNhY2hlcmVzdWx0cyA/IGZyYWdt
ZW50IDogMTsKCX0KCglyZXR1cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hlYWJsZTogY2Fj
aGVhYmxlIH07Cn07CgpqUXVlcnkuZnJhZ21lbnRzID0ge307CgpqUXVlcnkuZWFjaCh7CglhcHBl
bmRUbzogImFwcGVuZCIsCglwcmVwZW5kVG86ICJwcmVwZW5kIiwKCWluc2VydEJlZm9yZTogImJl
Zm9yZSIsCglpbnNlcnRBZnRlcjogImFmdGVyIiwKCXJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIK
fSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggc2VsZWN0b3IgKSB7CgkJdmFyIHJldCA9IFtdLAoJCQlpbnNlcnQgPSBqUXVlcnkoIHNl
bGVjdG9yICksCgkJCXBhcmVudCA9IHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXNbMF0ucGFyZW50
Tm9kZTsKCgkJaWYgKCBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQu
Y2hpbGROb2Rlcy5sZW5ndGggPT09IDEgJiYgaW5zZXJ0Lmxlbmd0aCA9PT0gMSApIHsKCQkJaW5z
ZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7CgkJCXJldHVybiB0aGlzOwoKCQl9IGVsc2UgewoJ
CQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbnNlcnQubGVuZ3RoOyBpIDwgbDsgaSsrICkgewoJCQkJ
dmFyIGVsZW1zID0gKGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6IHRoaXMpLmdldCgpOwoJCQkJ
alF1ZXJ5KCBpbnNlcnRbaV0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKCQkJCXJldCA9IHJldC5j
b25jYXQoIGVsZW1zICk7CgkJCX0KCgkJCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1l
LCBpbnNlcnQuc2VsZWN0b3IgKTsKCQl9Cgl9Owp9KTsKCmZ1bmN0aW9uIGdldEFsbCggZWxlbSAp
IHsKCWlmICggImdldEVsZW1lbnRzQnlUYWdOYW1lIiBpbiBlbGVtICkgewoJCXJldHVybiBlbGVt
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKCgl9IGVsc2UgaWYgKCAicXVlcnlTZWxlY3Rv
ckFsbCIgaW4gZWxlbSApIHsKCQlyZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsK
Cgl9IGVsc2UgewoJCXJldHVybiBbXTsKCX0KfQoKLy8gVXNlZCBpbiBjbGVhbiwgZml4ZXMgdGhl
IGRlZmF1bHRDaGVja2VkIHByb3BlcnR5CmZ1bmN0aW9uIGZpeERlZmF1bHRDaGVja2VkKCBlbGVt
ICkgewoJaWYgKCBlbGVtLnR5cGUgPT09ICJjaGVja2JveCIgfHwgZWxlbS50eXBlID09PSAicmFk
aW8iICkgewoJCWVsZW0uZGVmYXVsdENoZWNrZWQgPSBlbGVtLmNoZWNrZWQ7Cgl9Cn0KLy8gRmlu
ZHMgYWxsIGlucHV0cyBhbmQgcGFzc2VzIHRoZW0gdG8gZml4RGVmYXVsdENoZWNrZWQKZnVuY3Rp
b24gZmluZElucHV0cyggZWxlbSApIHsKCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5w
dXQiICkgKSB7CgkJZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKCX0gZWxzZSBpZiAoIGVsZW0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUgKSB7CgkJalF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IiksIGZpeERlZmF1bHRDaGVja2VkICk7Cgl9Cn0KCmpRdWVyeS5leHRl
bmQoewoJY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2
ZW50cyApIHsKCQl2YXIgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKSwKCQkJCXNyY0VsZW1l
bnRzLAoJCQkJZGVzdEVsZW1lbnRzLAoJCQkJaTsKCgkJaWYgKCAoIWpRdWVyeS5zdXBwb3J0Lm5v
Q2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpICYmCgkJCQkoZWxl
bS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hN
TERvYyhlbGVtKSApIHsKCQkJLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZl
bnQgd2hlbiB1c2luZyBjbG9uZU5vZGUuCgkJCS8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhl
IGNsb25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cwoJCQkvLyBmcm9tIHRoZSBvcmlnaW5h
bC4gSW4gb3JkZXIgdG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQoJCQkvLyBwcm9wcmll
dGFyeSBtZXRob2RzIHRvIGNsZWFyIHRoZSBldmVudHMuIFRoYW5rcyB0byBNb29Ub29scwoJCQkv
LyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCgoJCQljbG9uZUZpeEF0dHJpYnV0ZXMoIGVsZW0sIGNs
b25lICk7CgoJCQkvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBzbG93LCBzbyB3ZSB1c2Ug
Z2V0RWxlbWVudHNCeVRhZ05hbWUKCQkJLy8gaW5zdGVhZAoJCQlzcmNFbGVtZW50cyA9IGdldEFs
bCggZWxlbSApOwoJCQlkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CgoJCQkvLyBXZWly
ZCBpdGVyYXRpb24gYmVjYXVzZSBJRSB3aWxsIHJlcGxhY2UgdGhlIGxlbmd0aCBwcm9wZXJ0eQoJ
CQkvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUg
b2YgdGhlCgkJCS8vIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGhhcyBhIG5hbWUgb3IgaWQgb2YgImxl
bmd0aCIKCQkJZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CgkJCQljbG9uZUZp
eEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKCQkJfQoJCX0K
CgkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQoJCWlm
ICggZGF0YUFuZEV2ZW50cyApIHsKCQkJY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CgoJ
CQlpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewoJCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVs
ZW0gKTsKCQkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKCgkJCQlmb3IgKCBpID0g
MDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKCQkJCQljbG9uZUNvcHlFdmVudCggc3JjRWxlbWVu
dHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBSZXR1cm4gdGhl
IGNsb25lZCBzZXQKCQlyZXR1cm4gY2xvbmU7Cgl9LAoKCWNsZWFuOiBmdW5jdGlvbiggZWxlbXMs
IGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICkgewoJCXZhciBjaGVja1NjcmlwdFR5cGU7CgoJ
CWNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwoKCQkvLyAhY29udGV4dC5jcmVhdGVFbGVt
ZW50IGZhaWxzIGluIElFIHdpdGggYW4gZXJyb3IgYnV0IHJldHVybnMgdHlwZW9mICdvYmplY3Qn
CgkJaWYgKCB0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50ID09PSAidW5kZWZpbmVkIiApIHsK
CQkJY29udGV4dCA9IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0WzBdICYmIGNvbnRl
eHRbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKCQl9CgoJCXZhciByZXQgPSBbXSwgajsK
CgkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysg
KSB7CgkJCWlmICggdHlwZW9mIGVsZW0gPT09ICJudW1iZXIiICkgewoJCQkJZWxlbSArPSAiIjsK
CQkJfQoKCQkJaWYgKCAhZWxlbSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQkvLyBDb252ZXJ0
IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCgkJCWlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJp
bmciICkgewoJCQkJaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewoJCQkJCWVsZW0gPSBjb250
ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICk7CgkJCQl9IGVsc2UgewoJCQkJCS8vIEZpeCAiWEhU
TUwiLXN0eWxlIHRhZ3MgaW4gYWxsIGJyb3dzZXJzCgkJCQkJZWxlbSA9IGVsZW0ucmVwbGFjZShy
eGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCgkJCQkJLy8gVHJpbSB3aGl0ZXNwYWNlLCBvdGhlcndp
c2UgaW5kZXhPZiB3b24ndCB3b3JrIGFzIGV4cGVjdGVkCgkJCQkJdmFyIHRhZyA9IChydGFnTmFt
ZS5leGVjKCBlbGVtICkgfHwgWyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNlKCksCgkJCQkJCXdyYXAg
PSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0LAoJCQkJCQlkZXB0aCA9IHdyYXBb
MF0sCgkJCQkJCWRpdiA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgoJCQkJCS8vIEdv
IHRvIGh0bWwgYW5kIGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKCQkJCQlkaXYu
aW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJdOwoKCQkJCQkvLyBNb3ZlIHRvIHRo
ZSByaWdodCBkZXB0aAoJCQkJCXdoaWxlICggZGVwdGgtLSApIHsKCQkJCQkJZGl2ID0gZGl2Lmxh
c3RDaGlsZDsKCQkJCQl9CgoJCQkJCS8vIFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+
IGZyb20gdGFibGUgZnJhZ21lbnRzCgkJCQkJaWYgKCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7
CgoJCQkJCQkvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJv
ZHk+CgkJCQkJCXZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSksCgkJCQkJCQl0Ym9keSA9
IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/CgkJCQkJCQkJZGl2LmZpcnN0Q2hpbGQgJiYg
ZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6CgoJCQkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJl
IDx0aGVhZD4gb3IgPHRmb290PgoJCQkJCQkJCXdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhaGFz
Qm9keSA/CgkJCQkJCQkJCWRpdi5jaGlsZE5vZGVzIDoKCQkJCQkJCQkJW107CgoJCQkJCQlmb3Ig
KCBqID0gdGJvZHkubGVuZ3RoIC0gMTsgaiA+PSAwIDsgLS1qICkgewoJCQkJCQkJaWYgKCBqUXVl
cnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5v
ZGVzLmxlbmd0aCApIHsKCQkJCQkJCQl0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IHRib2R5WyBqIF0gKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gSUUgY29tcGxl
dGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhUTUwgaXMgdXNlZAoJCQkJ
CWlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVz
cGFjZS50ZXN0KCBlbGVtICkgKSB7CgkJCQkJCWRpdi5pbnNlcnRCZWZvcmUoIGNvbnRleHQuY3Jl
YXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdICksIGRpdi5maXJz
dENoaWxkICk7CgkJCQkJfQoKCQkJCQllbGVtID0gZGl2LmNoaWxkTm9kZXM7CgkJCQl9CgkJCX0K
CgkJCS8vIFJlc2V0cyBkZWZhdWx0Q2hlY2tlZCBmb3IgYW55IHJhZGlvcyBhbmQgY2hlY2tib3hl
cwoJCQkvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjAp
CgkJCXZhciBsZW47CgkJCWlmICggIWpRdWVyeS5zdXBwb3J0LmFwcGVuZENoZWNrZWQgKSB7CgkJ
CQlpZiAoIGVsZW1bMF0gJiYgdHlwZW9mIChsZW4gPSBlbGVtLmxlbmd0aCkgPT09ICJudW1iZXIi
ICkgewoJCQkJCWZvciAoIGogPSAwOyBqIDwgbGVuOyBqKysgKSB7CgkJCQkJCWZpbmRJbnB1dHMo
IGVsZW1bal0gKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWZpbmRJbnB1dHMoIGVsZW0gKTsK
CQkJCX0KCQkJfQoKCQkJaWYgKCBlbGVtLm5vZGVUeXBlICkgewoJCQkJcmV0LnB1c2goIGVsZW0g
KTsKCQkJfSBlbHNlIHsKCQkJCXJldCA9IGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtICk7CgkJCX0K
CQl9CgoJCWlmICggZnJhZ21lbnQgKSB7CgkJCWNoZWNrU2NyaXB0VHlwZSA9IGZ1bmN0aW9uKCBl
bGVtICkgewoJCQkJcmV0dXJuICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50
eXBlICk7CgkJCX07CgkJCWZvciAoIGkgPSAwOyByZXRbaV07IGkrKyApIHsKCQkJCWlmICggc2Ny
aXB0cyAmJiBqUXVlcnkubm9kZU5hbWUoIHJldFtpXSwgInNjcmlwdCIgKSAmJiAoIXJldFtpXS50
eXBlIHx8IHJldFtpXS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0L2phdmFzY3JpcHQiKSAp
IHsKCQkJCQlzY3JpcHRzLnB1c2goIHJldFtpXS5wYXJlbnROb2RlID8gcmV0W2ldLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoIHJldFtpXSApIDogcmV0W2ldICk7CgoJCQkJfSBlbHNlIHsKCQkJCQlp
ZiAoIHJldFtpXS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQkJdmFyIGpzVGFncyA9IGpRdWVyeS5n
cmVwKCByZXRbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzY3JpcHQiICksIGNoZWNrU2NyaXB0
VHlwZSApOwoKCQkJCQkJcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgg
anNUYWdzICkgKTsKCQkJCQl9CgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIHJldFtpXSApOwoJ
CQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCgljbGVhbkRhdGE6IGZ1bmN0aW9uKCBl
bGVtcyApIHsKCQl2YXIgZGF0YSwgaWQsIGNhY2hlID0galF1ZXJ5LmNhY2hlLCBpbnRlcm5hbEtl
eSA9IGpRdWVyeS5leHBhbmRvLCBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCgkJCWRl
bGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvOwoKCQlmb3IgKCB2YXIg
aSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKCQkJaWYgKCBl
bGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
XSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQlpZCA9IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07
CgoJCQlpZiAoIGlkICkgewoJCQkJZGF0YSA9IGNhY2hlWyBpZCBdICYmIGNhY2hlWyBpZCBdWyBp
bnRlcm5hbEtleSBdOwoKCQkJCWlmICggZGF0YSAmJiBkYXRhLmV2ZW50cyApIHsKCQkJCQlmb3Ig
KCB2YXIgdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKCQkJCQkJaWYgKCBzcGVjaWFsWyB0eXBlIF0g
KSB7CgkJCQkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CgoJCQkJCQkvLyBU
aGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFk
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRh
dGEuaGFuZGxlICk7CgkJCQkJCX0KCQkJCQl9CgoJCQkJCS8vIE51bGwgdGhlIERPTSByZWZlcmVu
Y2UgdG8gYXZvaWQgSUU2LzcvOCBsZWFrICgjNzA1NCkKCQkJCQlpZiAoIGRhdGEuaGFuZGxlICkg
ewoJCQkJCQlkYXRhLmhhbmRsZS5lbGVtID0gbnVsbDsKCQkJCQl9CgkJCQl9CgoJCQkJaWYgKCBk
ZWxldGVFeHBhbmRvICkgewoJCQkJCWRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwoKCQkJ
CX0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewoJCQkJCWVsZW0ucmVtb3ZlQXR0
cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwoJCQkJfQoKCQkJCWRlbGV0ZSBjYWNoZVsgaWQgXTsK
CQkJfQoJCX0KCX0KfSk7CgpmdW5jdGlvbiBldmFsU2NyaXB0KCBpLCBlbGVtICkgewoJaWYgKCBl
bGVtLnNyYyApIHsKCQlqUXVlcnkuYWpheCh7CgkJCXVybDogZWxlbS5zcmMsCgkJCWFzeW5jOiBm
YWxzZSwKCQkJZGF0YVR5cGU6ICJzY3JpcHQiCgkJfSk7Cgl9IGVsc2UgewoJCWpRdWVyeS5nbG9i
YWxFdmFsKCAoIGVsZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1M
IHx8ICIiICkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiLyokMCovIiApICk7Cgl9CgoJaWYgKCBl
bGVtLnBhcmVudE5vZGUgKSB7CgkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7
Cgl9Cn0KCgoKCnZhciByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKCXJvcGFjaXR5ID0gL29w
YWNpdHk9KFteKV0qKS8sCglyZGFzaEFscGhhID0gLy0oW2Etel0pL2lnLAoJLy8gZml4ZWQgZm9y
IElFOSwgc2VlICM4MzQ2CglydXBwZXIgPSAvKFtBLVpdfF5tcykvZywKCXJudW1weCA9IC9eLT9c
ZCsoPzpweCk/JC9pLAoJcm51bSA9IC9eLT9cZC8sCglycmVsTnVtID0gL15bK1wtXT0vLAoJcnJl
bE51bUZpbHRlciA9IC9bXitcLVwuXGRlXSsvZywKCgljc3NTaG93ID0geyBwb3NpdGlvbjogImFi
c29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKCWNzc1dp
ZHRoID0gWyAiTGVmdCIsICJSaWdodCIgXSwKCWNzc0hlaWdodCA9IFsgIlRvcCIsICJCb3R0b20i
IF0sCgljdXJDU1MsCgoJZ2V0Q29tcHV0ZWRTdHlsZSwKCWN1cnJlbnRTdHlsZSwKCglmY2FtZWxD
YXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgewoJCXJldHVybiBsZXR0ZXIudG9VcHBlckNh
c2UoKTsKCX07CgpqUXVlcnkuZm4uY3NzID0gZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewoJLy8g
U2V0dGluZyAndW5kZWZpbmVkJyBpcyBhIG5vLW9wCglpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09
IDIgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gdGhpczsKCX0KCglyZXR1cm4g
alF1ZXJ5LmFjY2VzcyggdGhpcywgbmFtZSwgdmFsdWUsIHRydWUsIGZ1bmN0aW9uKCBlbGVtLCBu
YW1lLCB2YWx1ZSApIHsKCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CgkJCWpRdWVyeS5z
dHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6CgkJCWpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsK
CX0pOwp9OwoKalF1ZXJ5LmV4dGVuZCh7CgkvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3Mg
Zm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKCS8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNl
dHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQoJY3NzSG9va3M6IHsKCQlvcGFjaXR5OiB7CgkJCWdldDog
ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewoJCQkJaWYgKCBjb21wdXRlZCApIHsKCQkJCQkv
LyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQoJCQkJCXZh
ciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiwgIm9wYWNpdHkiICk7CgkJCQkJcmV0dXJu
IHJldCA9PT0gIiIgPyAiMSIgOiByZXQ7CgoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gZWxlbS5z
dHlsZS5vcGFjaXR5OwoJCQkJfQoJCQl9CgkJfQoJfSwKCgkvLyBFeGNsdWRlIHRoZSBmb2xsb3dp
bmcgY3NzIHByb3BlcnRpZXMgdG8gYWRkIHB4Cgljc3NOdW1iZXI6IHsKCQkiekluZGV4IjogdHJ1
ZSwKCQkiZm9udFdlaWdodCI6IHRydWUsCgkJIm9wYWNpdHkiOiB0cnVlLAoJCSJ6b29tIjogdHJ1
ZSwKCQkibGluZUhlaWdodCI6IHRydWUsCgkJIndpZG93cyI6IHRydWUsCgkJIm9ycGhhbnMiOiB0
cnVlCgl9LAoKCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZp
eCBiZWZvcmUKCS8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKCWNzc1Byb3BzOiB7CgkJ
Ly8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQoJCSJmbG9hdCI6IGpRdWVyeS5zdXBwb3J0
LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IiA6ICJzdHlsZUZsb2F0IgoJfSwKCgkvLyBHZXQgYW5kIHNl
dCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQoJc3R5bGU6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CgkJLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFu
ZCBjb21tZW50IG5vZGVzCgkJaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8v
IE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQoJCXZhciBy
ZXQsIHR5cGUsIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAoJCQlzdHlsZSA9
IGVsZW0uc3R5bGUsIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwoKCQluYW1l
ID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8IG9yaWdOYW1lOwoKCQkvLyBDaGVjayBp
ZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgkJ
CXR5cGUgPSB0eXBlb2YgdmFsdWU7CgoJCQkvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwg
dmFsdWVzIGFyZW4ndCBzZXQuIFNlZTogIzcxMTYKCQkJaWYgKCB0eXBlID09PSAibnVtYmVyIiAm
JiBpc05hTiggdmFsdWUgKSB8fCB2YWx1ZSA9PSBudWxsICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJ
CQkvLyBjb252ZXJ0IHJlbGF0aXZlIG51bWJlciBzdHJpbmdzICgrPSBvciAtPSkgdG8gcmVsYXRp
dmUgbnVtYmVycy4gIzczNDUKCQkJaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiBycmVsTnVtLnRl
c3QoIHZhbHVlICkgKSB7CgkJCQl2YWx1ZSA9ICt2YWx1ZS5yZXBsYWNlKCBycmVsTnVtRmlsdGVy
LCAiIiApICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApICk7CgkJCX0KCgkJ
CS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZv
ciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQoJCQlpZiAoIHR5cGUgPT09ICJudW1iZXIiICYmICFq
UXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewoJCQkJdmFsdWUgKz0gInB4IjsKCQkJfQoK
CQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBq
dXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCgkJCWlmICggIWhvb2tzIHx8ICEoInNldCIgaW4g
aG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUgKSkgIT09IHVuZGVmaW5l
ZCApIHsKCQkJCS8vIFdyYXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3
aGVuICdpbnZhbGlkJyB2YWx1ZXMgYXJlIHByb3ZpZGVkCgkJCQkvLyBGaXhlcyBidWcgIzU1MDkK
CQkJCXRyeSB7CgkJCQkJc3R5bGVbIG5hbWUgXSA9IHZhbHVlOwoJCQkJfSBjYXRjaChlKSB7fQoJ
CQl9CgoJCX0gZWxzZSB7CgkJCS8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24t
Y29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQoJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tz
ICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVk
ICkgewoJCQkJcmV0dXJuIHJldDsKCQkJfQoKCQkJLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2
YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKCQkJcmV0dXJuIHN0eWxlWyBuYW1lIF07CgkJfQoJ
fSwKCgljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSApIHsKCQl2YXIgcmV0LCBob29r
czsKCgkJLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1l
CgkJbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKCQlob29rcyA9IGpRdWVyeS5jc3NI
b29rc1sgbmFtZSBdOwoJCW5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCBuYW1lOwoK
CQkvLyBjc3NGbG9hdCBuZWVkcyBhIHNwZWNpYWwgdHJlYXRtZW50CgkJaWYgKCBuYW1lID09PSAi
Y3NzRmxvYXQiICkgewoJCQluYW1lID0gImZsb2F0IjsKCQl9CgoJCS8vIElmIGEgaG9vayB3YXMg
cHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCgkJaWYgKCBob29rcyAm
JiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSAp
KSAhPT0gdW5kZWZpbmVkICkgewoJCQlyZXR1cm4gcmV0OwoKCQkvLyBPdGhlcndpc2UsIGlmIGEg
d2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAoJCX0gZWxzZSBp
ZiAoIGN1ckNTUyApIHsKCQkJcmV0dXJuIGN1ckNTUyggZWxlbSwgbmFtZSApOwoJCX0KCX0sCgoJ
Ly8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRv
IGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucwoJc3dhcDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMs
IGNhbGxiYWNrICkgewoJCXZhciBvbGQgPSB7fTsKCgkJLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1
ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCgkJZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyAp
IHsKCQkJb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CgkJCWVsZW0uc3R5bGVbIG5h
bWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKCQl9CgoJCWNhbGxiYWNrLmNhbGwoIGVsZW0gKTsKCgkJ
Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCgkJZm9yICggbmFtZSBpbiBvcHRpb25zICkgewoJCQll
bGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKCQl9Cgl9LAoKCWNhbWVsQ2FzZTogZnVu
Y3Rpb24oIHN0cmluZyApIHsKCQlyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZj
YW1lbENhc2UgKTsKCX0KfSk7CgovLyBERVBSRUNBVEVELCBVc2UgalF1ZXJ5LmNzcygpIGluc3Rl
YWQKalF1ZXJ5LmN1ckNTUyA9IGpRdWVyeS5jc3M7CgpqUXVlcnkuZWFjaChbImhlaWdodCIsICJ3
aWR0aCJdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCWpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0g
ewoJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKCQkJdmFyIHZhbDsK
CgkJCWlmICggY29tcHV0ZWQgKSB7CgkJCQlpZiAoIGVsZW0ub2Zmc2V0V2lkdGggIT09IDAgKSB7
CgkJCQkJdmFsID0gZ2V0V0goIGVsZW0sIG5hbWUsIGV4dHJhICk7CgoJCQkJfSBlbHNlIHsKCQkJ
CQlqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CgkJCQkJCXZhbCA9IGdl
dFdIKCBlbGVtLCBuYW1lLCBleHRyYSApOwoJCQkJCX0pOwoJCQkJfQoKCQkJCWlmICggdmFsIDw9
IDAgKSB7CgkJCQkJdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBuYW1lICk7CgoJCQkJCWlmICgg
dmFsID09PSAiMHB4IiAmJiBjdXJyZW50U3R5bGUgKSB7CgkJCQkJCXZhbCA9IGN1cnJlbnRTdHls
ZSggZWxlbSwgbmFtZSwgbmFtZSApOwoJCQkJCX0KCgkJCQkJaWYgKCB2YWwgIT0gbnVsbCApIHsK
CQkJCQkJLy8gU2hvdWxkIHJldHVybiAiYXV0byIgaW5zdGVhZCBvZiAwLCB1c2UgMCBmb3IKCQkJ
CQkJLy8gdGVtcG9yYXJ5IGJhY2t3YXJkcy1jb21wYXQKCQkJCQkJcmV0dXJuIHZhbCA9PT0gIiIg
fHwgdmFsID09PSAiYXV0byIgPyAiMHB4IiA6IHZhbDsKCQkJCQl9CgkJCQl9CgoJCQkJaWYgKCB2
YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewoJCQkJCXZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsK
CgkJCQkJLy8gU2hvdWxkIHJldHVybiAiYXV0byIgaW5zdGVhZCBvZiAwLCB1c2UgMCBmb3IKCQkJ
CQkvLyB0ZW1wb3JhcnkgYmFja3dhcmRzLWNvbXBhdAoJCQkJCXJldHVybiB2YWwgPT09ICIiIHx8
IHZhbCA9PT0gImF1dG8iID8gIjBweCIgOiB2YWw7CgkJCQl9CgoJCQkJcmV0dXJuIHR5cGVvZiB2
YWwgPT09ICJzdHJpbmciID8gdmFsIDogdmFsICsgInB4IjsKCQkJfQoJCX0sCgoJCXNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQlpZiAoIHJudW1weC50ZXN0KCB2YWx1ZSApICkgewoJ
CQkJLy8gaWdub3JlIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzICMxNTk5CgkJCQl2
YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOwoKCQkJCWlmICggdmFsdWUgPj0gMCApIHsKCQkJCQly
ZXR1cm4gdmFsdWUgKyAicHgiOwoJCQkJfQoKCQkJfSBlbHNlIHsKCQkJCXJldHVybiB2YWx1ZTsK
CQkJfQoJCX0KCX07Cn0pOwoKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHsKCWpRdWVy
eS5jc3NIb29rcy5vcGFjaXR5ID0gewoJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewoJCQkvLyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKCQkJcmV0dXJuIHJvcGFjaXR5LnRl
c3QoIChjb21wdXRlZCAmJiBlbGVtLmN1cnJlbnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZp
bHRlciA6IGVsZW0uc3R5bGUuZmlsdGVyKSB8fCAiIiApID8KCQkJCSggcGFyc2VGbG9hdCggUmVn
RXhwLiQxICkgLyAxMDAgKSArICIiIDoKCQkJCWNvbXB1dGVkID8gIjEiIDogIiI7CgkJfSwKCgkJ
c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJCXZhciBzdHlsZSA9IGVsZW0uc3R5bGUs
CgkJCQljdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZTsKCgkJCS8vIElFIGhhcyB0cm91
YmxlIHdpdGggb3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAoJCQkvLyBGb3JjZSBp
dCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCgkJCXN0eWxlLnpvb20gPSAxOwoKCQkJLy8gU2V0
IHRoZSBhbHBoYSBmaWx0ZXIgdG8gc2V0IHRoZSBvcGFjaXR5CgkJCXZhciBvcGFjaXR5ID0galF1
ZXJ5LmlzTmFOKCB2YWx1ZSApID8KCQkJCSIiIDoKCQkJCSJhbHBoYShvcGFjaXR5PSIgKyB2YWx1
ZSAqIDEwMCArICIpIiwKCQkJCWZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUu
ZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKCgkJCXN0eWxlLmZpbHRlciA9IHJhbHBoYS50
ZXN0KCBmaWx0ZXIgKSA/CgkJCQlmaWx0ZXIucmVwbGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOgoJ
CQkJZmlsdGVyICsgIiAiICsgb3BhY2l0eTsKCQl9Cgl9Owp9CgpqUXVlcnkoZnVuY3Rpb24oKSB7
CgkvLyBUaGlzIGhvb2sgY2Fubm90IGJlIGFkZGVkIHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRo
ZSBzdXBwb3J0IHRlc3QKCS8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFk
eQoJaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCApIHsKCQlqUXVlcnku
Y3NzSG9va3MubWFyZ2luUmlnaHQgPSB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVk
ICkgewoJCQkJLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3
cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CgkJCQkvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3Jh
cmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKCQkJCXZhciByZXQ7
CgkJCQlqUXVlcnkuc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2siIH0sIGZ1
bmN0aW9uKCkgewoJCQkJCWlmICggY29tcHV0ZWQgKSB7CgkJCQkJCXJldCA9IGN1ckNTUyggZWxl
bSwgIm1hcmdpbi1yaWdodCIsICJtYXJnaW5SaWdodCIgKTsKCQkJCQl9IGVsc2UgewoJCQkJCQly
ZXQgPSBlbGVtLnN0eWxlLm1hcmdpblJpZ2h0OwoJCQkJCX0KCQkJCX0pOwoJCQkJcmV0dXJuIHJl
dDsKCQkJfQoJCX07Cgl9Cn0pOwoKaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVu
dC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewoJZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXZhciByZXQsIGRlZmF1bHRWaWV3LCBjb21wdXRlZFN0
eWxlOwoKCQluYW1lID0gbmFtZS5yZXBsYWNlKCBydXBwZXIsICItJDEiICkudG9Mb3dlckNhc2Uo
KTsKCgkJaWYgKCAhKGRlZmF1bHRWaWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3
KSApIHsKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9CgoJCWlmICggKGNvbXB1dGVkU3R5bGUgPSBk
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICkpICkgewoJCQlyZXQgPSBj
b21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKTsKCQkJaWYgKCByZXQgPT09ICIi
ICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQs
IGVsZW0gKSApIHsKCQkJCXJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwoJCQl9CgkJ
fQoKCQlyZXR1cm4gcmV0OwoJfTsKfQoKaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3Vy
cmVudFN0eWxlICkgewoJY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJ
dmFyIGxlZnQsCgkJCXJldCA9IGVsZW0uY3VycmVudFN0eWxlICYmIGVsZW0uY3VycmVudFN0eWxl
WyBuYW1lIF0sCgkJCXJzTGVmdCA9IGVsZW0ucnVudGltZVN0eWxlICYmIGVsZW0ucnVudGltZVN0
eWxlWyBuYW1lIF0sCgkJCXN0eWxlID0gZWxlbS5zdHlsZTsKCgkJLy8gRnJvbSB0aGUgYXdlc29t
ZSBoYWNrIGJ5IERlYW4gRWR3YXJkcwoJCS8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMv
MjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTEKCgkJLy8gSWYgd2UncmUgbm90IGRl
YWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCgkJLy8gYnV0IGEgbnVtYmVyIHRoYXQg
aGFzIGEgd2VpcmQgZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCgkJaWYg
KCAhcm51bXB4LnRlc3QoIHJldCApICYmIHJudW0udGVzdCggcmV0ICkgKSB7CgkJCS8vIFJlbWVt
YmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKCQkJbGVmdCA9IHN0eWxlLmxlZnQ7CgoJCQkvLyBQdXQg
aW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CgkJCWlmICggcnNM
ZWZ0ICkgewoJCQkJZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxl
ZnQ7CgkJCX0KCQkJc3R5bGUubGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IChy
ZXQgfHwgMCk7CgkJCXJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7CgoJCQkvLyBSZXZlcnQg
dGhlIGNoYW5nZWQgdmFsdWVzCgkJCXN0eWxlLmxlZnQgPSBsZWZ0OwoJCQlpZiAoIHJzTGVmdCAp
IHsKCQkJCWVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7CgkJCX0KCQl9CgoJCXJldHVy
biByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OwoJfTsKfQoKY3VyQ1NTID0gZ2V0Q29tcHV0ZWRT
dHlsZSB8fCBjdXJyZW50U3R5bGU7CgpmdW5jdGlvbiBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEg
KSB7Cgl2YXIgd2hpY2ggPSBuYW1lID09PSAid2lkdGgiID8gY3NzV2lkdGggOiBjc3NIZWlnaHQs
CgkJdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNl
dEhlaWdodDsKCglpZiAoIGV4dHJhID09PSAiYm9yZGVyIiApIHsKCQlyZXR1cm4gdmFsOwoJfQoK
CWpRdWVyeS5lYWNoKCB3aGljaCwgZnVuY3Rpb24oKSB7CgkJaWYgKCAhZXh0cmEgKSB7CgkJCXZh
bCAtPSBwYXJzZUZsb2F0KGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIHRoaXMgKSkgfHwg
MDsKCQl9CgoJCWlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewoJCQl2YWwgKz0gcGFyc2VGbG9h
dChqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luIiArIHRoaXMgKSkgfHwgMDsKCgkJfSBlbHNlIHsK
CQkJdmFsIC09IHBhcnNlRmxvYXQoalF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyB0aGlzICsg
IldpZHRoIiApKSB8fCAwOwoJCX0KCX0pOwoKCXJldHVybiB2YWw7Cn0KCmlmICggalF1ZXJ5LmV4
cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKCWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVu
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CgkJdmFyIHdpZHRoID0gZWxlbS5vZmZzZXRXaWR0aCwKCQkJ
aGVpZ2h0ID0gZWxlbS5vZmZzZXRIZWlnaHQ7CgoJCXJldHVybiAod2lkdGggPT09IDAgJiYgaGVp
Z2h0ID09PSAwKSB8fCAoIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAo
ZWxlbS5zdHlsZS5kaXNwbGF5IHx8IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0g
Im5vbmUiKTsKCX07CgoJalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVs
ZW0gKSB7CgkJcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApOwoJfTsK
fQoKCgoKdmFyIHIyMCA9IC8lMjAvZywKCXJicmFja2V0ID0gL1xbXF0kLywKCXJDUkxGID0gL1xy
P1xuL2csCglyaGFzaCA9IC8jLiokLywKCXJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxu
XSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKCXJpbnB1dCA9
IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3
b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKCS8vICM3NjUzLCAj
ODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgoJcmxvY2FsUHJvdG9jb2wgPSAv
Xig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHdpZGdldCk6JC8s
Cglybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKCXJwcm90b2NvbCA9IC9eXC9cLy8sCgly
cXVlcnkgPSAvXD8vLAoJcnNjcmlwdCA9IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4p
PFtePF0qKSo8XC9zY3JpcHQ+L2dpLAoJcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4
dGFyZWEpL2ksCglyc3BhY2VzQWpheCA9IC9ccysvLAoJcnRzID0gLyhbPyZdKV89W14mXSovLAoJ
cnVybCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LywK
CgkvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCglfbG9hZCA9IGpRdWVyeS5m
bi5sb2FkLAoKCS8qIFByZWZpbHRlcnMKCSAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1
Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCgkg
KiAyKSBUaGVzZSBhcmUgY2FsbGVkOgoJICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5z
cG9ydAoJICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJp
bmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQoJICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQoJ
ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKCSAqIDUpIGV4ZWN1dGlv
biB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRv
d24gdG8gIioiIGlmIG5lZWRlZAoJICovCglwcmVmaWx0ZXJzID0ge30sCgoJLyogVHJhbnNwb3J0
cyBiaW5kaW5ncwoJICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZQoJICogMikgdGhlIGNhdGNoYWxs
IHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKCSAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGgg
dHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKCSAqLwoJdHJh
bnNwb3J0cyA9IHt9LAoKCS8vIERvY3VtZW50IGxvY2F0aW9uCglhamF4TG9jYXRpb24sCgoJLy8g
RG9jdW1lbnQgbG9jYXRpb24gc2VnbWVudHMKCWFqYXhMb2NQYXJ0czsKCi8vICM4MTM4LCBJRSBt
YXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCi8vIGEgZmllbGQgZnJvbSB3aW5k
b3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAp0cnkgewoJYWpheExv
Y2F0aW9uID0gbG9jYXRpb24uaHJlZjsKfSBjYXRjaCggZSApIHsKCS8vIFVzZSB0aGUgaHJlZiBh
dHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50CgkvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZl
biBkb2N1bWVudC5sb2NhdGlvbgoJYWpheExvY2F0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImEiICk7CglhamF4TG9jYXRpb24uaHJlZiA9ICIiOwoJYWpheExvY2F0aW9uID0gYWpheExv
Y2F0aW9uLmhyZWY7Cn0KCi8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cwphamF4TG9jUGFy
dHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107CgovLyBC
YXNlICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWph
eFRyYW5zcG9ydApmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVy
ZSApIHsKCgkvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRv
ICIqIgoJcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CgoJCWlm
ICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7CgkJCWZ1bmMgPSBk
YXRhVHlwZUV4cHJlc3Npb247CgkJCWRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKCQl9CgoJCWlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKCQkJdmFyIGRhdGFUeXBlcyA9IGRhdGFU
eXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLnNwbGl0KCByc3BhY2VzQWpheCApLAoJCQkJaSA9
IDAsCgkJCQlsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLAoJCQkJZGF0YVR5cGUsCgkJCQlsaXN0
LAoJCQkJcGxhY2VCZWZvcmU7CgoJCQkvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5
cGVFeHByZXNzaW9uCgkJCWZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCWRhdGFUeXBlID0g
ZGF0YVR5cGVzWyBpIF07CgkJCQkvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBi
ZWZvcmUKCQkJCS8vIGFueSBleGlzdGluZyBlbGVtZW50CgkJCQlwbGFjZUJlZm9yZSA9IC9eXCsv
LnRlc3QoIGRhdGFUeXBlICk7CgkJCQlpZiAoIHBsYWNlQmVmb3JlICkgewoJCQkJCWRhdGFUeXBl
ID0gZGF0YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOwoJCQkJfQoJCQkJbGlzdCA9IHN0cnVjdHVy
ZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTsKCQkJCS8vIHRoZW4g
d2UgYWRkIHRvIHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKCQkJCWxpc3RbIHBsYWNlQmVmb3Jl
ID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKCQkJfQoJCX0KCX07Cn0KCi8vIEJhc2Ug
aW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwpmdW5jdGlv
biBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmln
aW5hbE9wdGlvbnMsIGpxWEhSLAoJCWRhdGFUeXBlIC8qIGludGVybmFsICovLCBpbnNwZWN0ZWQg
LyogaW50ZXJuYWwgKi8gKSB7CgoJZGF0YVR5cGUgPSBkYXRhVHlwZSB8fCBvcHRpb25zLmRhdGFU
eXBlc1sgMCBdOwoJaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OwoKCWluc3BlY3RlZFsgZGF0
YVR5cGUgXSA9IHRydWU7CgoJdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCgkJaSA9
IDAsCgkJbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKCQlleGVjdXRlT25seSA9ICgg
c3RydWN0dXJlID09PSBwcmVmaWx0ZXJzICksCgkJc2VsZWN0aW9uOwoKCWZvcig7IGkgPCBsZW5n
dGggJiYgKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7IGkrKyApIHsKCQlzZWxlY3Rpb24g
PSBsaXN0WyBpIF0oIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKCQkvLyBJZiB3
ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBlCgkJLy8gd2UgdHJ5IHRoZXJlIGlm
IGV4ZWN1dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5CgkJaWYgKCB0eXBlb2Ygc2VsZWN0
aW9uID09PSAic3RyaW5nIiApIHsKCQkJaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBz
ZWxlY3Rpb24gXSApIHsKCQkJCXNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKCQkJfSBlbHNlIHsKCQkJ
CW9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApOwoJCQkJc2VsZWN0aW9uID0g
aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCgkJCQkJCXN0cnVjdHVyZSwgb3B0aW9ucywg
b3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgc2VsZWN0aW9uLCBpbnNwZWN0ZWQgKTsKCQkJfQoJCX0K
CX0KCS8vIElmIHdlJ3JlIG9ubHkgZXhlY3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCgkv
LyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5vdCBkb25lIGFscmVhZHkKCWlmICgg
KCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7CgkJ
c2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCgkJCQlzdHJ1Y3R1cmUs
IG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsICIqIiwgaW5zcGVjdGVkICk7Cgl9Cgkv
LyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQoJLy8gYnV0IGl0
J2xsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbGxlciBpbiB0aGF0IGNhc2UKCXJldHVybiBzZWxlY3Rp
b247Cn0KCmpRdWVyeS5mbi5leHRlbmQoewoJbG9hZDogZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBj
YWxsYmFjayApIHsKCQlpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9sb2FkICkgewoJ
CQlyZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoKCQkvLyBEb24ndCBkbyBh
IHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAoJCX0gZWxzZSBpZiAo
ICF0aGlzLmxlbmd0aCApIHsKCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQl2YXIgb2ZmID0gdXJsLmlu
ZGV4T2YoICIgIiApOwoJCWlmICggb2ZmID49IDAgKSB7CgkJCXZhciBzZWxlY3RvciA9IHVybC5z
bGljZSggb2ZmLCB1cmwubGVuZ3RoICk7CgkJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CgkJ
fQoKCQkvLyBEZWZhdWx0IHRvIGEgR0VUIHJlcXVlc3QKCQl2YXIgdHlwZSA9ICJHRVQiOwoKCQkv
LyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKCQlpZiAoIHBhcmFtcyApIHsK
CQkJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCgkJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFt
cyApICkgewoJCQkJLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKCQkJCWNhbGxi
YWNrID0gcGFyYW1zOwoJCQkJcGFyYW1zID0gdW5kZWZpbmVkOwoKCQkJLy8gT3RoZXJ3aXNlLCBi
dWlsZCBhIHBhcmFtIHN0cmluZwoJCQl9IGVsc2UgaWYgKCB0eXBlb2YgcGFyYW1zID09PSAib2Jq
ZWN0IiApIHsKCQkJCXBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1zLCBqUXVlcnkuYWpheFNl
dHRpbmdzLnRyYWRpdGlvbmFsICk7CgkJCQl0eXBlID0gIlBPU1QiOwoJCQl9CgkJfQoKCQl2YXIg
c2VsZiA9IHRoaXM7CgoJCS8vIFJlcXVlc3QgdGhlIHJlbW90ZSBkb2N1bWVudAoJCWpRdWVyeS5h
amF4KHsKCQkJdXJsOiB1cmwsCgkJCXR5cGU6IHR5cGUsCgkJCWRhdGFUeXBlOiAiaHRtbCIsCgkJ
CWRhdGE6IHBhcmFtcywKCQkJLy8gQ29tcGxldGUgY2FsbGJhY2sgKHJlc3BvbnNlVGV4dCBpcyB1
c2VkIGludGVybmFsbHkpCgkJCWNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cywgcmVz
cG9uc2VUZXh0ICkgewoJCQkJLy8gU3RvcmUgdGhlIHJlc3BvbnNlIGFzIHNwZWNpZmllZCBieSB0
aGUganFYSFIgb2JqZWN0CgkJCQlyZXNwb25zZVRleHQgPSBqcVhIUi5yZXNwb25zZVRleHQ7CgkJ
CQkvLyBJZiBzdWNjZXNzZnVsLCBpbmplY3QgdGhlIEhUTUwgaW50byBhbGwgdGhlIG1hdGNoZWQg
ZWxlbWVudHMKCQkJCWlmICgganFYSFIuaXNSZXNvbHZlZCgpICkgewoJCQkJCS8vICM0ODI1OiBH
ZXQgdGhlIGFjdHVhbCByZXNwb25zZSBpbiBjYXNlCgkJCQkJLy8gYSBkYXRhRmlsdGVyIGlzIHBy
ZXNlbnQgaW4gYWpheFNldHRpbmdzCgkJCQkJanFYSFIuZG9uZShmdW5jdGlvbiggciApIHsKCQkJ
CQkJcmVzcG9uc2VUZXh0ID0gcjsKCQkJCQl9KTsKCQkJCQkvLyBTZWUgaWYgYSBzZWxlY3RvciB3
YXMgc3BlY2lmaWVkCgkJCQkJc2VsZi5odG1sKCBzZWxlY3RvciA/CgkJCQkJCS8vIENyZWF0ZSBh
IGR1bW15IGRpdiB0byBob2xkIHRoZSByZXN1bHRzCgkJCQkJCWpRdWVyeSgiPGRpdj4iKQoJCQkJ
CQkJLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRo
ZSBzY3JpcHRzCgkJCQkJCQkvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJv
cnMgaW4gSUUKCQkJCQkJCS5hcHBlbmQocmVzcG9uc2VUZXh0LnJlcGxhY2UocnNjcmlwdCwgIiIp
KQoKCQkJCQkJCS8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCgkJCQkJCQkuZmluZChz
ZWxlY3RvcikgOgoKCQkJCQkJLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQK
CQkJCQkJcmVzcG9uc2VUZXh0ICk7CgkJCQl9CgoJCQkJaWYgKCBjYWxsYmFjayApIHsKCQkJCQlz
ZWxmLmVhY2goIGNhbGxiYWNrLCBbIHJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CgkJ
CQl9CgkJCX0KCQl9KTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCXNlcmlhbGl6ZTogZnVuY3Rpb24o
KSB7CgkJcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7Cgl9LAoK
CXNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
KXsKCQkJcmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1l
bnRzICkgOiB0aGlzOwoJCX0pCgkJLmZpbHRlcihmdW5jdGlvbigpewoJCQlyZXR1cm4gdGhpcy5u
YW1lICYmICF0aGlzLmRpc2FibGVkICYmCgkJCQkoIHRoaXMuY2hlY2tlZCB8fCByc2VsZWN0VGV4
dGFyZWEudGVzdCggdGhpcy5ub2RlTmFtZSApIHx8CgkJCQkJcmlucHV0LnRlc3QoIHRoaXMudHlw
ZSApICk7CgkJfSkKCQkubWFwKGZ1bmN0aW9uKCBpLCBlbGVtICl7CgkJCXZhciB2YWwgPSBqUXVl
cnkoIHRoaXMgKS52YWwoKTsKCgkJCXJldHVybiB2YWwgPT0gbnVsbCA/CgkJCQludWxsIDoKCQkJ
CWpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CgkJCQkJalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbigg
dmFsLCBpICl7CgkJCQkJCXJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBs
YWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKCQkJCQl9KSA6CgkJCQkJeyBuYW1lOiBlbGVtLm5hbWUs
IHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CgkJfSkuZ2V0KCk7Cgl9Cn0p
OwoKLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpB
WCBldmVudHMKalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFq
YXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoICIgIiApLCBmdW5jdGlvbiggaSwg
byApewoJalF1ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApewoJCXJldHVybiB0aGlzLmJpbmQo
IG8sIGYgKTsKCX07Cn0pOwoKalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlv
biggaSwgbWV0aG9kICkgewoJalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEs
IGNhbGxiYWNrLCB0eXBlICkgewoJCS8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50
IHdhcyBvbWl0dGVkCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewoJCQl0eXBl
ID0gdHlwZSB8fCBjYWxsYmFjazsKCQkJY2FsbGJhY2sgPSBkYXRhOwoJCQlkYXRhID0gdW5kZWZp
bmVkOwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5hamF4KHsKCQkJdHlwZTogbWV0aG9kLAoJCQl1cmw6
IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJhY2ssCgkJCWRhdGFUeXBlOiB0
eXBlCgkJfSk7Cgl9Owp9KTsKCmpRdWVyeS5leHRlbmQoewoKCWdldFNjcmlwdDogZnVuY3Rpb24o
IHVybCwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBj
YWxsYmFjaywgInNjcmlwdCIgKTsKCX0sCgoJZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwg
Y2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJq
c29uIiApOwoJfSwKCgkvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBp
bnRvIHRhcmdldAoJLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRz
LgoJLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KCWFq
YXhTZXR1cDogZnVuY3Rpb24gKCB0YXJnZXQsIHNldHRpbmdzICkgewoJCWlmICggIXNldHRpbmdz
ICkgewoJCQkvLyBPbmx5IG9uZSBwYXJhbWV0ZXIsIHdlIGV4dGVuZCBhamF4U2V0dGluZ3MKCQkJ
c2V0dGluZ3MgPSB0YXJnZXQ7CgkJCXRhcmdldCA9IGpRdWVyeS5leHRlbmQoIHRydWUsIGpRdWVy
eS5hamF4U2V0dGluZ3MsIHNldHRpbmdzICk7CgkJfSBlbHNlIHsKCQkJLy8gdGFyZ2V0IHdhcyBw
cm92aWRlZCwgd2UgZXh0ZW5kIGludG8gaXQKCQkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0
LCBqUXVlcnkuYWpheFNldHRpbmdzLCBzZXR0aW5ncyApOwoJCX0KCQkvLyBGbGF0dGVuIGZpZWxk
cyB3ZSBkb24ndCB3YW50IGRlZXAgZXh0ZW5kZWQKCQlmb3IoIHZhciBmaWVsZCBpbiB7IGNvbnRl
eHQ6IDEsIHVybDogMSB9ICkgewoJCQlpZiAoIGZpZWxkIGluIHNldHRpbmdzICkgewoJCQkJdGFy
Z2V0WyBmaWVsZCBdID0gc2V0dGluZ3NbIGZpZWxkIF07CgkJCX0gZWxzZSBpZiggZmllbGQgaW4g
alF1ZXJ5LmFqYXhTZXR0aW5ncyApIHsKCQkJCXRhcmdldFsgZmllbGQgXSA9IGpRdWVyeS5hamF4
U2V0dGluZ3NbIGZpZWxkIF07CgkJCX0KCQl9CgkJcmV0dXJuIHRhcmdldDsKCX0sCgoJYWpheFNl
dHRpbmdzOiB7CgkJdXJsOiBhamF4TG9jYXRpb24sCgkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wu
dGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKCQlnbG9iYWw6IHRydWUsCgkJdHlwZTogIkdFVCIs
CgkJY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLAoJCXBy
b2Nlc3NEYXRhOiB0cnVlLAoJCWFzeW5jOiB0cnVlLAoJCS8qCgkJdGltZW91dDogMCwKCQlkYXRh
OiBudWxsLAoJCWRhdGFUeXBlOiBudWxsLAoJCXVzZXJuYW1lOiBudWxsLAoJCXBhc3N3b3JkOiBu
dWxsLAoJCWNhY2hlOiBudWxsLAoJCXRyYWRpdGlvbmFsOiBmYWxzZSwKCQloZWFkZXJzOiB7fSwK
CQkqLwoKCQlhY2NlcHRzOiB7CgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAoJ
CQlodG1sOiAidGV4dC9odG1sIiwKCQkJdGV4dDogInRleHQvcGxhaW4iLAoJCQlqc29uOiAiYXBw
bGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwKCQkJIioiOiAiKi8qIgoJCX0sCgoJCWNv
bnRlbnRzOiB7CgkJCXhtbDogL3htbC8sCgkJCWh0bWw6IC9odG1sLywKCQkJanNvbjogL2pzb24v
CgkJfSwKCgkJcmVzcG9uc2VGaWVsZHM6IHsKCQkJeG1sOiAicmVzcG9uc2VYTUwiLAoJCQl0ZXh0
OiAicmVzcG9uc2VUZXh0IgoJCX0sCgoJCS8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCgkJLy8g
MSkga2V5IGZvcm1hdCBpcyAic291cmNlX3R5cGUgZGVzdGluYXRpb25fdHlwZSIgKGEgc2luZ2xl
IHNwYWNlIGluLWJldHdlZW4pCgkJLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJl
IHVzZWQgZm9yIHNvdXJjZV90eXBlCgkJY29udmVydGVyczogewoKCQkJLy8gQ29udmVydCBhbnl0
aGluZyB0byB0ZXh0CgkJCSIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAoKCQkJLy8gVGV4dCB0byBo
dG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCgkJCSJ0ZXh0IGh0bWwiOiB0cnVlLAoKCQkJ
Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgoJCQkidGV4dCBqc29uIjogalF1
ZXJ5LnBhcnNlSlNPTiwKCgkJCS8vIFBhcnNlIHRleHQgYXMgeG1sCgkJCSJ0ZXh0IHhtbCI6IGpR
dWVyeS5wYXJzZVhNTAoJCX0KCX0sCgoJYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCglhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNP
clRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKCgkvLyBNYWluIG1ldGhvZAoJYWpheDogZnVuY3Rp
b24oIHVybCwgb3B0aW9ucyApIHsKCgkJLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUg
cHJlLTEuNSBzaWduYXR1cmUKCQlpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgewoJCQlv
cHRpb25zID0gdXJsOwoJCQl1cmwgPSB1bmRlZmluZWQ7CgkJfQoKCQkvLyBGb3JjZSBvcHRpb25z
IHRvIGJlIGFuIG9iamVjdAoJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKCQl2YXIgLy8gQ3Jl
YXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAoJCQlzID0galF1ZXJ5LmFqYXhTZXR1cCgge30s
IG9wdGlvbnMgKSwKCQkJLy8gQ2FsbGJhY2tzIGNvbnRleHQKCQkJY2FsbGJhY2tDb250ZXh0ID0g
cy5jb250ZXh0IHx8IHMsCgkJCS8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMKCQkJLy8gSXQn
cyB0aGUgY2FsbGJhY2tDb250ZXh0IGlmIG9uZSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMK
CQkJLy8gYW5kIGlmIGl0J3MgYSBET00gbm9kZSBvciBhIGpRdWVyeSBjb2xsZWN0aW9uCgkJCWds
b2JhbEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgoJCQkJKCBjYWxsYmFj
a0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICkg
PwoJCQkJCQlqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDogalF1ZXJ5LmV2ZW50LAoJCQkvLyBE
ZWZlcnJlZHMKCQkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKCQkJY29tcGxldGVEZWZl
cnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFj
a3MKCQkJc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKCQkJLy8gaWZNb2RpZmllZCBr
ZXkKCQkJaWZNb2RpZmllZEtleSwKCQkJLy8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQg
b25jZSkKCQkJcmVxdWVzdEhlYWRlcnMgPSB7fSwKCQkJcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9
LAoJCQkvLyBSZXNwb25zZSBoZWFkZXJzCgkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZywKCQkJcmVz
cG9uc2VIZWFkZXJzLAoJCQkvLyB0cmFuc3BvcnQKCQkJdHJhbnNwb3J0LAoJCQkvLyB0aW1lb3V0
IGhhbmRsZQoJCQl0aW1lb3V0VGltZXIsCgkJCS8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFy
cwoJCQlwYXJ0cywKCQkJLy8gVGhlIGpxWEhSIHN0YXRlCgkJCXN0YXRlID0gMCwKCQkJLy8gVG8g
a25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCgkJCWZpcmVHbG9iYWxz
LAoJCQkvLyBMb29wIHZhcmlhYmxlCgkJCWksCgkJCS8vIEZha2UgeGhyCgkJCWpxWEhSID0gewoK
CQkJCXJlYWR5U3RhdGU6IDAsCgoJCQkJLy8gQ2FjaGVzIHRoZSBoZWFkZXIKCQkJCXNldFJlcXVl
c3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQkJCQlpZiAoICFzdGF0ZSApIHsK
CQkJCQkJdmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwoJCQkJCQluYW1lID0gcmVxdWVz
dEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwg
bmFtZTsKCQkJCQkJcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOwoJCQkJCX0KCQkJCQly
ZXR1cm4gdGhpczsKCQkJCX0sCgoJCQkJLy8gUmF3IHN0cmluZwoJCQkJZ2V0QWxsUmVzcG9uc2VI
ZWFkZXJzOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhl
YWRlcnNTdHJpbmcgOiBudWxsOwoJCQkJfSwKCgkJCQkvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFi
bGUgaWYgbmVlZGVkCgkJCQlnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsKCQkJ
CQl2YXIgbWF0Y2g7CgkJCQkJaWYgKCBzdGF0ZSA9PT0gMiApIHsKCQkJCQkJaWYgKCAhcmVzcG9u
c2VIZWFkZXJzICkgewoJCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0ge307CgkJCQkJCQl3aGlsZSgg
KCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CgkJ
CQkJCQkJcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsg
MiBdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXku
dG9Mb3dlckNhc2UoKSBdOwoJCQkJCX0KCQkJCQlyZXR1cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/
IG51bGwgOiBtYXRjaDsKCQkJCX0sCgoJCQkJLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQt
dHlwZSBoZWFkZXIKCQkJCW92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgewoJCQkJ
CWlmICggIXN0YXRlICkgewoJCQkJCQlzLm1pbWVUeXBlID0gdHlwZTsKCQkJCQl9CgkJCQkJcmV0
dXJuIHRoaXM7CgkJCQl9LAoKCQkJCS8vIENhbmNlbCB0aGUgcmVxdWVzdAoJCQkJYWJvcnQ6IGZ1
bmN0aW9uKCBzdGF0dXNUZXh0ICkgewoJCQkJCXN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8ICJh
Ym9ydCI7CgkJCQkJaWYgKCB0cmFuc3BvcnQgKSB7CgkJCQkJCXRyYW5zcG9ydC5hYm9ydCggc3Rh
dHVzVGV4dCApOwoJCQkJCX0KCQkJCQlkb25lKCAwLCBzdGF0dXNUZXh0ICk7CgkJCQkJcmV0dXJu
IHRoaXM7CgkJCQl9CgkJCX07CgoJCS8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMg
ZG9uZQoJCS8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYg
aXQgaXMgZGVjbGFyZWQKCQkvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2ggd291
bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKCQlmdW5jdGlvbiBkb25lKCBzdGF0dXMs
IHN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKCgkJCS8vIENhbGxlZCBvbmNlCgkJ
CWlmICggc3RhdGUgPT09IDIgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIFN0YXRlIGlzICJk
b25lIiBub3cKCQkJc3RhdGUgPSAyOwoKCQkJLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHMK
CQkJaWYgKCB0aW1lb3V0VGltZXIgKSB7CgkJCQljbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciAp
OwoJCQl9CgoJCQkvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29s
bGVjdGlvbgoJCQkvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBi
ZSB1c2VkKQoJCQl0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CgoJCQkvLyBDYWNoZSByZXNwb25zZSBo
ZWFkZXJzCgkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CgoJCQkvLyBT
ZXQgcmVhZHlTdGF0ZQoJCQlqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID8gNCA6IDA7CgoJCQl2
YXIgaXNTdWNjZXNzLAoJCQkJc3VjY2VzcywKCQkJCWVycm9yLAoJCQkJcmVzcG9uc2UgPSByZXNw
b25zZXMgPyBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgOiB1bmRl
ZmluZWQsCgkJCQlsYXN0TW9kaWZpZWQsCgkJCQlldGFnOwoKCQkJLy8gSWYgc3VjY2Vzc2Z1bCwg
aGFuZGxlIHR5cGUgY2hhaW5pbmcKCQkJaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMw
MCB8fCBzdGF0dXMgPT09IDMwNCApIHsKCgkJCQkvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNl
IGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgoJCQkJ
aWYgKCBzLmlmTW9kaWZpZWQgKSB7CgoJCQkJCWlmICggKCBsYXN0TW9kaWZpZWQgPSBqcVhIUi5n
ZXRSZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICkgKSApIHsKCQkJCQkJalF1ZXJ5Lmxh
c3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbGFzdE1vZGlmaWVkOwoJCQkJCX0KCQkJCQlp
ZiAoICggZXRhZyA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiRXRhZyIgKSApICkgewoJCQkJ
CQlqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdID0gZXRhZzsKCQkJCQl9CgkJCQl9CgoJCQkJ
Ly8gSWYgbm90IG1vZGlmaWVkCgkJCQlpZiAoIHN0YXR1cyA9PT0gMzA0ICkgewoKCQkJCQlzdGF0
dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKCQkJCQlpc1N1Y2Nlc3MgPSB0cnVlOwoKCQkJCS8vIElm
IHdlIGhhdmUgZGF0YQoJCQkJfSBlbHNlIHsKCgkJCQkJdHJ5IHsKCQkJCQkJc3VjY2VzcyA9IGFq
YXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwoJCQkJCQlzdGF0dXNUZXh0ID0gInN1Y2Nlc3MiOwoJ
CQkJCQlpc1N1Y2Nlc3MgPSB0cnVlOwoJCQkJCX0gY2F0Y2goZSkgewoJCQkJCQkvLyBXZSBoYXZl
IGEgcGFyc2VyZXJyb3IKCQkJCQkJc3RhdHVzVGV4dCA9ICJwYXJzZXJlcnJvciI7CgkJCQkJCWVy
cm9yID0gZTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkvLyBXZSBleHRyYWN0IGVycm9y
IGZyb20gc3RhdHVzVGV4dAoJCQkJLy8gdGhlbiBub3JtYWxpemUgc3RhdHVzVGV4dCBhbmQgc3Rh
dHVzIGZvciBub24tYWJvcnRzCgkJCQllcnJvciA9IHN0YXR1c1RleHQ7CgkJCQlpZiggIXN0YXR1
c1RleHQgfHwgc3RhdHVzICkgewoJCQkJCXN0YXR1c1RleHQgPSAiZXJyb3IiOwoJCQkJCWlmICgg
c3RhdHVzIDwgMCApIHsKCQkJCQkJc3RhdHVzID0gMDsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8v
IFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CgkJCWpxWEhSLnN0YXR1cyA9IHN0YXR1
czsKCQkJanFYSFIuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7CgoJCQkvLyBTdWNjZXNzL0Vycm9y
CgkJCWlmICggaXNTdWNjZXNzICkgewoJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNr
Q29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CgkJCX0gZWxzZSB7CgkJ
CQlkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1Rl
eHQsIGVycm9yIF0gKTsKCQkJfQoKCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKCQkJ
anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwoJCQlzdGF0dXNDb2RlID0gdW5kZWZpbmVk
OwoKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2Vy
KCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKCQkJCQkJWyBq
cVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKCQkJfQoKCQkJLy8gQ29t
cGxldGUKCQkJY29tcGxldGVEZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBb
IGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKCgkJCWlmICggZmlyZUdsb2JhbHMgKSB7CgkJCQlnbG9i
YWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHNdICk7CgkJ
CQkvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKCQkJCWlmICggISggLS1qUXVlcnku
YWN0aXZlICkgKSB7CgkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKCQkJ
CX0KCQkJfQoJCX0KCgkJLy8gQXR0YWNoIGRlZmVycmVkcwoJCWRlZmVycmVkLnByb21pc2UoIGpx
WEhSICk7CgkJanFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CgkJanFYSFIuZXJyb3IgPSBqcVhI
Ui5mYWlsOwoJCWpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5kb25lOwoKCQkvLyBT
dGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwoJCWpxWEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbigg
bWFwICkgewoJCQlpZiAoIG1hcCApIHsKCQkJCXZhciB0bXA7CgkJCQlpZiAoIHN0YXRlIDwgMiAp
IHsKCQkJCQlmb3IoIHRtcCBpbiBtYXAgKSB7CgkJCQkJCXN0YXR1c0NvZGVbIHRtcCBdID0gWyBz
dGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0bXAg
PSBtYXBbIGpxWEhSLnN0YXR1cyBdOwoJCQkJCWpxWEhSLnRoZW4oIHRtcCwgdG1wICk7CgkJCQl9
CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJfTsKCgkJLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgj
NzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCgkJLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92
aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29sLWxlc3MgdXJscykKCQkvLyBXZSBh
bHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKCQlzLnVybCA9ICggKCB1cmwg
fHwgcy51cmwgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29s
LCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKCgkJLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlz
dAoJCXMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dl
ckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKTsKCgkJLy8gRGV0ZXJtaW5lIGlmIGEgY3Jvc3Mt
ZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIKCQlpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCAp
IHsKCQkJcGFydHMgPSBydXJsLmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKCQkJcy5jcm9z
c0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgoJCQkJKCBwYXJ0c1sgMSBdICE9IGFqYXhMb2NQYXJ0c1sg
MSBdIHx8IHBhcnRzWyAyIF0gIT0gYWpheExvY1BhcnRzWyAyIF0gfHwKCQkJCQkoIHBhcnRzWyAz
IF0gfHwgKCBwYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9CgkJCQkJCSgg
YWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgw
IDogNDQzICkgKSApCgkJCSk7CgkJfQoKCQkvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkg
YSBzdHJpbmcKCQlpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEg
IT09ICJzdHJpbmciICkgewoJCQlzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFk
aXRpb25hbCApOwoJCX0KCgkJLy8gQXBwbHkgcHJlZmlsdGVycwoJCWluc3BlY3RQcmVmaWx0ZXJz
T3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOwoKCQkvLyBJZiBy
ZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbGVyLCBzdG9wIHRoZXJlCgkJaWYgKCBz
dGF0ZSA9PT0gMiApIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gV2UgY2FuIGZpcmUgZ2xv
YmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KCQlmaXJlR2xvYmFscyA9IHMuZ2xvYmFs
OwoKCQkvLyBVcHBlcmNhc2UgdGhlIHR5cGUKCQlzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2Uo
KTsKCgkJLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKCQlzLmhhc0NvbnRlbnQg
PSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKCgkJLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBv
ZiByZXF1ZXN0cwoJCWlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkg
ewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKCQl9CgoJCS8vIE1vcmUg
b3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50CgkJaWYgKCAhcy5o
YXNDb250ZW50ICkgewoKCQkJLy8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRv
IHVybAoJCQlpZiAoIHMuZGF0YSApIHsKCQkJCXMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJs
ICkgPyAiJiIgOiAiPyIgKSArIHMuZGF0YTsKCQkJfQoKCQkJLy8gR2V0IGlmTW9kaWZpZWRLZXkg
YmVmb3JlIGFkZGluZyB0aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIKCQkJaWZNb2RpZmllZEtleSA9
IHMudXJsOwoKCQkJLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAoJCQlpZiAoIHMu
Y2FjaGUgPT09IGZhbHNlICkgewoKCQkJCXZhciB0cyA9IGpRdWVyeS5ub3coKSwKCQkJCQkvLyB0
cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCgkJCQkJcmV0ID0gcy51cmwucmVwbGFjZSgg
cnRzLCAiJDFfPSIgKyB0cyApOwoKCQkJCS8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQg
dGltZXN0YW1wIHRvIHRoZSBlbmQKCQkJCXMudXJsID0gcmV0ICsgKCAocmV0ID09PSBzLnVybCAp
ID8gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIg
KTsKCQkJfQoJCX0KCgkJLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWlu
ZyBzZW50CgkJaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09
IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CgkJCWpxWEhSLnNldFJlcXVlc3RIZWFk
ZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CgkJfQoKCQkvLyBTZXQgdGhlIElm
LU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2Rp
ZmllZCBtb2RlLgoJCWlmICggcy5pZk1vZGlmaWVkICkgewoJCQlpZk1vZGlmaWVkS2V5ID0gaWZN
b2RpZmllZEtleSB8fCBzLnVybDsKCQkJaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlm
aWVkS2V5IF0gKSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2lu
Y2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKCQkJfQoJCQlpZiAo
IGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVh
ZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKCQkJ
fQoJCX0KCgkJLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5k
aW5nIG9uIHRoZSBkYXRhVHlwZQoJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCgkJCSJBY2NlcHQi
LAoJCQlzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/CgkJ
CQlzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIq
IiA/ICIsICovKjsgcT0wLjAxIiA6ICIiICkgOgoJCQkJcy5hY2NlcHRzWyAiKiIgXQoJCSk7CgoJ
CS8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgoJCWZvciAoIGkgaW4gcy5oZWFkZXJzICkgewoJ
CQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwoJCX0KCgkJLy8g
QWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAoJCWlmICggcy5i
ZWZvcmVTZW5kICYmICggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIs
IHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09IDIgKSApIHsKCQkJCS8vIEFib3J0IGlmIG5vdCBk
b25lIGFscmVhZHkKCQkJCWpxWEhSLmFib3J0KCk7CgkJCQlyZXR1cm4gZmFsc2U7CgoJCX0KCgkJ
Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCgkJZm9yICggaSBpbiB7IHN1Y2Nlc3M6
IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewoJCQlqcVhIUlsgaSBdKCBzWyBpIF0gKTsK
CQl9CgoJCS8vIEdldCB0cmFuc3BvcnQKCQl0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKCgkJLy8gSWYgbm8g
dHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CgkJaWYgKCAhdHJhbnNwb3J0ICkgewoJCQlkb25lKCAt
MSwgIk5vIFRyYW5zcG9ydCIgKTsKCQl9IGVsc2UgewoJCQlqcVhIUi5yZWFkeVN0YXRlID0gMTsK
CQkJLy8gU2VuZCBnbG9iYWwgZXZlbnQKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2Jh
bEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKCQkJfQoJ
CQkvLyBUaW1lb3V0CgkJCWlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewoJCQkJdGlt
ZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXsKCQkJCQlqcVhIUi5hYm9ydCggInRp
bWVvdXQiICk7CgkJCQl9LCBzLnRpbWVvdXQgKTsKCQkJfQoKCQkJdHJ5IHsKCQkJCXN0YXRlID0g
MTsKCQkJCXRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwoJCQl9IGNhdGNo
IChlKSB7CgkJCQkvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCgkJ
CQlpZiAoIHN0YXR1cyA8IDIgKSB7CgkJCQkJZG9uZSggLTEsIGUgKTsKCQkJCS8vIFNpbXBseSBy
ZXRocm93IG90aGVyd2lzZQoJCQkJfSBlbHNlIHsKCQkJCQlqUXVlcnkuZXJyb3IoIGUgKTsKCQkJ
CX0KCQkJfQoJCX0KCgkJcmV0dXJuIGpxWEhSOwoJfSwKCgkvLyBTZXJpYWxpemUgYW4gYXJyYXkg
b2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZgoJLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkg
c3RyaW5nCglwYXJhbTogZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewoJCXZhciBzID0gW10s
CgkJCWFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCQkJLy8gSWYgdmFsdWUgaXMgYSBm
dW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCgkJCQl2YWx1ZSA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6IHZhbHVlOwoJCQkJc1sgcy5sZW5ndGgg
XSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQo
IHZhbHVlICk7CgkJCX07CgoJCS8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkg
PD0gMS4zLjIgYmVoYXZpb3IuCgkJaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewoJ
CQl0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7CgkJfQoKCQkv
LyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBv
ZiBmb3JtIGVsZW1lbnRzLgoJCWlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5
ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CgkJCS8vIFNlcmlhbGl6ZSB0aGUg
Zm9ybSBlbGVtZW50cwoJCQlqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CgkJCQlhZGQoIHRo
aXMubmFtZSwgdGhpcy52YWx1ZSApOwoJCQl9KTsKCgkJfSBlbHNlIHsKCQkJLy8gSWYgdHJhZGl0
aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCgkJCS8v
IGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgoJCQlmb3IgKCB2
YXIgcHJlZml4IGluIGEgKSB7CgkJCQlidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwg
dHJhZGl0aW9uYWwsIGFkZCApOwoJCQl9CgkJfQoKCQkvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBz
ZXJpYWxpemF0aW9uCgkJcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsK
CX0KfSk7CgpmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBh
ZGQgKSB7CglpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKCQkvLyBTZXJpYWxpemUgYXJy
YXkgaXRlbS4KCQlqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsKCQkJaWYgKCB0
cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKCQkJCS8vIFRyZWF0IGVh
Y2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KCQkJCWFkZCggcHJlZml4LCB2ICk7CgoJCQl9IGVs
c2UgewoJCQkJLy8gSWYgYXJyYXkgaXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3Qp
LCBlbmNvZGUgaXRzCgkJCQkvLyBudW1lcmljIGluZGV4IHRvIHJlc29sdmUgZGVzZXJpYWxpemF0
aW9uIGFtYmlndWl0eSBpc3N1ZXMuCgkJCQkvLyBOb3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjAp
IGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQoJCQkJLy8gbmVzdGVkIGFycmF5cyBwcm9wZXJs
eSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gbWF5IGNhdXNlCgkJCQkvLyBhIHNlcnZlciBlcnJv
ci4gUG9zc2libGUgZml4ZXMgYXJlIHRvIG1vZGlmeSByYWNrJ3MKCQkJCS8vIGRlc2VyaWFsaXph
dGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwoJCQkJLy8gdG8g
Zm9yY2UgYXJyYXkgc2VyaWFsaXphdGlvbiB0byBiZSBzaGFsbG93LgoJCQkJYnVpbGRQYXJhbXMo
IHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiIHx8IGpRdWVyeS5pc0FycmF5
KHYpID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQkJfQoJCX0pOwoK
CX0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09
PSAib2JqZWN0IiApIHsKCQkvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCgkJZm9yICggdmFyIG5h
bWUgaW4gb2JqICkgewoJCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwg
b2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQl9CgoJfSBlbHNlIHsKCQkvLyBTZXJp
YWxpemUgc2NhbGFyIGl0ZW0uCgkJYWRkKCBwcmVmaXgsIG9iaiApOwoJfQp9CgovLyBUaGlzIGlz
IHN0aWxsIG9uIHRoZSBqUXVlcnkgb2JqZWN0Li4uIGZvciBub3cKLy8gV2FudCB0byBtb3ZlIHRo
aXMgdG8galF1ZXJ5LmFqYXggc29tZSBkYXkKalF1ZXJ5LmV4dGVuZCh7CgoJLy8gQ291bnRlciBm
b3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCglhY3RpdmU6IDAsCgoJLy8g
TGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAoJbGFzdE1vZGlmaWVk
OiB7fSwKCWV0YWc6IHt9Cgp9KTsKCi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVx
dWVzdDoKICogLSBzZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKICogLSBm
aW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFu
ZCBleHBlY3RlZCBkYXRhVHlwZSkKICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3Bv
bnNlCiAqLwpmdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2Vz
ICkgewoKCXZhciBjb250ZW50cyA9IHMuY29udGVudHMsCgkJZGF0YVR5cGVzID0gcy5kYXRhVHlw
ZXMsCgkJcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzLAoJCWN0LAoJCXR5cGUsCgkJ
ZmluYWxEYXRhVHlwZSwKCQlmaXJzdERhdGFUeXBlOwoKCS8vIEZpbGwgcmVzcG9uc2VYWFggZmll
bGRzCglmb3IoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7CgkJaWYgKCB0eXBlIGluIHJlc3Bv
bnNlcyApIHsKCQkJanFYSFJbIHJlc3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5
cGUgXTsKCQl9Cgl9CgoJLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5
cGUgaW4gdGhlIHByb2Nlc3MKCXdoaWxlKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgewoJCWRh
dGFUeXBlcy5zaGlmdCgpOwoJCWlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKCQkJY3QgPSBzLm1p
bWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10eXBlIiApOwoJCX0K
CX0KCgkvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUK
CWlmICggY3QgKSB7CgkJZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKCQkJaWYgKCBjb250ZW50
c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKCQkJCWRhdGFUeXBl
cy51bnNoaWZ0KCB0eXBlICk7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCgkvLyBDaGVjayB0byBz
ZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKCWlmICgg
ZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewoJCWZpbmFsRGF0YVR5cGUgPSBkYXRhVHlw
ZXNbIDAgXTsKCX0gZWxzZSB7CgkJLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcwoJCWZvciAo
IHR5cGUgaW4gcmVzcG9uc2VzICkgewoJCQlpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZl
cnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKCQkJCWZpbmFsRGF0YVR5cGUg
PSB0eXBlOwoJCQkJYnJlYWs7CgkJCX0KCQkJaWYgKCAhZmlyc3REYXRhVHlwZSApIHsKCQkJCWZp
cnN0RGF0YVR5cGUgPSB0eXBlOwoJCQl9CgkJfQoJCS8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQoJ
CWZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7Cgl9CgoJLy8g
SWYgd2UgZm91bmQgYSBkYXRhVHlwZQoJLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlz
dCBpZiBuZWVkZWQKCS8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKCWlm
ICggZmluYWxEYXRhVHlwZSApIHsKCQlpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sg
MCBdICkgewoJCQlkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOwoJCX0KCQlyZXR1
cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07Cgl9Cn0KCi8vIENoYWluIGNvbnZlcnNpb25z
IGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2UKZnVuY3Rpb24gYWph
eENvbnZlcnQoIHMsIHJlc3BvbnNlICkgewoKCS8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHBy
b3ZpZGVkCglpZiAoIHMuZGF0YUZpbHRlciApIHsKCQlyZXNwb25zZSA9IHMuZGF0YUZpbHRlcigg
cmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKCX0KCgl2YXIgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMs
CgkJY29udmVydGVycyA9IHt9LAoJCWksCgkJa2V5LAoJCWxlbmd0aCA9IGRhdGFUeXBlcy5sZW5n
dGgsCgkJdG1wLAoJCS8vIEN1cnJlbnQgYW5kIHByZXZpb3VzIGRhdGFUeXBlcwoJCWN1cnJlbnQg
PSBkYXRhVHlwZXNbIDAgXSwKCQlwcmV2LAoJCS8vIENvbnZlcnNpb24gZXhwcmVzc2lvbgoJCWNv
bnZlcnNpb24sCgkJLy8gQ29udmVyc2lvbiBmdW5jdGlvbgoJCWNvbnYsCgkJLy8gQ29udmVyc2lv
biBmdW5jdGlvbnMgKHRyYW5zaXRpdmUgY29udmVyc2lvbikKCQljb252MSwKCQljb252MjsKCgkv
LyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgY2hhaW4KCWZvciggaSA9IDE7IGkgPCBsZW5ndGg7
IGkrKyApIHsKCgkJLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwCgkJLy8gd2l0aCBsb3dlcmNhc2Vk
IGtleXMKCQlpZiAoIGkgPT09IDEgKSB7CgkJCWZvcigga2V5IGluIHMuY29udmVydGVycyApIHsK
CQkJCWlmKCB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApIHsKCQkJCQljb252ZXJ0ZXJzWyBrZXku
dG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBrZXkgXTsKCQkJCX0KCQkJfQoJCX0KCgkJ
Ly8gR2V0IHRoZSBkYXRhVHlwZXMKCQlwcmV2ID0gY3VycmVudDsKCQljdXJyZW50ID0gZGF0YVR5
cGVzWyBpIF07CgoJCS8vIElmIGN1cnJlbnQgaXMgYXV0byBkYXRhVHlwZSwgdXBkYXRlIGl0IHRv
IHByZXYKCQlpZiggY3VycmVudCA9PT0gIioiICkgewoJCQljdXJyZW50ID0gcHJldjsKCQkvLyBJ
ZiBubyBhdXRvIGFuZCBkYXRhVHlwZXMgYXJlIGFjdHVhbGx5IGRpZmZlcmVudAoJCX0gZWxzZSBp
ZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewoKCQkJLy8gR2V0IHRoZSBj
b252ZXJ0ZXIKCQkJY29udmVyc2lvbiA9IHByZXYgKyAiICIgKyBjdXJyZW50OwoJCQljb252ID0g
Y29udmVydGVyc1sgY29udmVyc2lvbiBdIHx8IGNvbnZlcnRlcnNbICIqICIgKyBjdXJyZW50IF07
CgoJCQkvLyBJZiB0aGVyZSBpcyBubyBkaXJlY3QgY29udmVydGVyLCBzZWFyY2ggdHJhbnNpdGl2
ZWx5CgkJCWlmICggIWNvbnYgKSB7CgkJCQljb252MiA9IHVuZGVmaW5lZDsKCQkJCWZvciggY29u
djEgaW4gY29udmVydGVycyApIHsKCQkJCQl0bXAgPSBjb252MS5zcGxpdCggIiAiICk7CgkJCQkJ
aWYgKCB0bXBbIDAgXSA9PT0gcHJldiB8fCB0bXBbIDAgXSA9PT0gIioiICkgewoJCQkJCQljb252
MiA9IGNvbnZlcnRlcnNbIHRtcFsxXSArICIgIiArIGN1cnJlbnQgXTsKCQkJCQkJaWYgKCBjb252
MiApIHsKCQkJCQkJCWNvbnYxID0gY29udmVydGVyc1sgY29udjEgXTsKCQkJCQkJCWlmICggY29u
djEgPT09IHRydWUgKSB7CgkJCQkJCQkJY29udiA9IGNvbnYyOwoJCQkJCQkJfSBlbHNlIGlmICgg
Y29udjIgPT09IHRydWUgKSB7CgkJCQkJCQkJY29udiA9IGNvbnYxOwoJCQkJCQkJfQoJCQkJCQkJ
YnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gSWYgd2UgZm91bmQgbm8gY29u
dmVydGVyLCBkaXNwYXRjaCBhbiBlcnJvcgoJCQlpZiAoICEoIGNvbnYgfHwgY29udjIgKSApIHsK
CQkJCWpRdWVyeS5lcnJvciggIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgY29udmVyc2lvbi5yZXBs
YWNlKCIgIiwiIHRvICIpICk7CgkJCX0KCQkJLy8gSWYgZm91bmQgY29udmVydGVyIGlzIG5vdCBh
biBlcXVpdmFsZW5jZQoJCQlpZiAoIGNvbnYgIT09IHRydWUgKSB7CgkJCQkvLyBDb252ZXJ0IHdp
dGggMSBvciAyIGNvbnZlcnRlcnMgYWNjb3JkaW5nbHkKCQkJCXJlc3BvbnNlID0gY29udiA/IGNv
bnYoIHJlc3BvbnNlICkgOiBjb252MiggY29udjEocmVzcG9uc2UpICk7CgkJCX0KCQl9Cgl9Cgly
ZXR1cm4gcmVzcG9uc2U7Cn0KCgoKCnZhciBqc2MgPSBqUXVlcnkubm93KCksCglqc3JlID0gLyhc
PSlcPygmfCQpfFw/XD8vaTsKCi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKalF1ZXJ5LmFqYXhT
ZXR1cCh7Cglqc29ucDogImNhbGxiYWNrIiwKCWpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgewoJ
CXJldHVybiBqUXVlcnkuZXhwYW5kbyArICJfIiArICgganNjKysgKTsKCX0KfSk7CgovLyBEZXRl
Y3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVx
dWVzdHMKalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9y
aWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgewoKCXZhciBpbnNwZWN0RGF0YSA9IHMuY29udGVudFR5
cGUgPT09ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiICYmCgkJKCB0eXBlb2Yg
cy5kYXRhID09PSAic3RyaW5nIiApOwoKCWlmICggcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25w
IiB8fAoJCXMuanNvbnAgIT09IGZhbHNlICYmICgganNyZS50ZXN0KCBzLnVybCApIHx8CgkJCQlp
bnNwZWN0RGF0YSAmJiBqc3JlLnRlc3QoIHMuZGF0YSApICkgKSB7CgoJCXZhciByZXNwb25zZUNv
bnRhaW5lciwKCQkJanNvbnBDYWxsYmFjayA9IHMuanNvbnBDYWxsYmFjayA9CgkJCQlqUXVlcnku
aXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPyBzLmpzb25wQ2FsbGJhY2soKSA6IHMuanNv
bnBDYWxsYmFjaywKCQkJcHJldmlvdXMgPSB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSwKCQkJdXJs
ID0gcy51cmwsCgkJCWRhdGEgPSBzLmRhdGEsCgkJCXJlcGxhY2UgPSAiJDEiICsganNvbnBDYWxs
YmFjayArICIkMiI7CgoJCWlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7CgkJCXVybCA9IHVybC5y
ZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7CgkJCWlmICggcy51cmwgPT09IHVybCApIHsKCQkJCWlm
ICggaW5zcGVjdERhdGEgKSB7CgkJCQkJZGF0YSA9IGRhdGEucmVwbGFjZSgganNyZSwgcmVwbGFj
ZSApOwoJCQkJfQoJCQkJaWYgKCBzLmRhdGEgPT09IGRhdGEgKSB7CgkJCQkJLy8gQWRkIGNhbGxi
YWNrIG1hbnVhbGx5CgkJCQkJdXJsICs9ICgvXD8vLnRlc3QoIHVybCApID8gIiYiIDogIj8iKSAr
IHMuanNvbnAgKyAiPSIgKyBqc29ucENhbGxiYWNrOwoJCQkJfQoJCQl9CgkJfQoKCQlzLnVybCA9
IHVybDsKCQlzLmRhdGEgPSBkYXRhOwoKCQkvLyBJbnN0YWxsIGNhbGxiYWNrCgkJd2luZG93WyBq
c29ucENhbGxiYWNrIF0gPSBmdW5jdGlvbiggcmVzcG9uc2UgKSB7CgkJCXJlc3BvbnNlQ29udGFp
bmVyID0gWyByZXNwb25zZSBdOwoJCX07CgoJCS8vIENsZWFuLXVwIGZ1bmN0aW9uCgkJanFYSFIu
YWx3YXlzKGZ1bmN0aW9uKCkgewoJCQkvLyBTZXQgY2FsbGJhY2sgYmFjayB0byBwcmV2aW91cyB2
YWx1ZQoJCQl3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSA9IHByZXZpb3VzOwoJCQkvLyBDYWxsIGlm
IGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKCQkJaWYgKCByZXNwb25z
ZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcHJldmlvdXMgKSApIHsKCQkJCXdpbmRv
d1sganNvbnBDYWxsYmFjayBdKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CgkJCX0KCQl9KTsK
CgkJLy8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4
ZWN1dGlvbgoJCXMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewoJCQlp
ZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKCQkJCWpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFj
ayArICIgd2FzIG5vdCBjYWxsZWQiICk7CgkJCX0KCQkJcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVy
WyAwIF07CgkJfTsKCgkJLy8gZm9yY2UganNvbiBkYXRhVHlwZQoJCXMuZGF0YVR5cGVzWyAwIF0g
PSAianNvbiI7CgoJCS8vIERlbGVnYXRlIHRvIHNjcmlwdAoJCXJldHVybiAic2NyaXB0IjsKCX0K
fSk7CgoKCgovLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQpqUXVlcnkuYWpheFNldHVwKHsKCWFj
Y2VwdHM6IHsKCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKCX0s
Cgljb250ZW50czogewoJCXNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNjcmlwdC8KCX0sCgljb252
ZXJ0ZXJzOiB7CgkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7CgkJCWpRdWVyeS5n
bG9iYWxFdmFsKCB0ZXh0ICk7CgkJCXJldHVybiB0ZXh0OwoJCX0KCX0KfSk7CgovLyBIYW5kbGUg
Y2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGdsb2JhbApqUXVlcnkuYWpheFByZWZpbHRlciggInNj
cmlwdCIsIGZ1bmN0aW9uKCBzICkgewoJaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CgkJ
cy5jYWNoZSA9IGZhbHNlOwoJfQoJaWYgKCBzLmNyb3NzRG9tYWluICkgewoJCXMudHlwZSA9ICJH
RVQiOwoJCXMuZ2xvYmFsID0gZmFsc2U7Cgl9Cn0pOwoKLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sg
dHJhbnNwb3J0CmpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24ocykgewoK
CS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMK
CWlmICggcy5jcm9zc0RvbWFpbiApIHsKCgkJdmFyIHNjcmlwdCwKCQkJaGVhZCA9IGRvY3VtZW50
LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJoZWFkIiApWzBdIHx8IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudDsKCgkJcmV0dXJuIHsKCgkJCXNlbmQ6IGZ1bmN0aW9uKCBf
LCBjYWxsYmFjayApIHsKCgkJCQlzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2Ny
aXB0IiApOwoKCQkJCXNjcmlwdC5hc3luYyA9ICJhc3luYyI7CgoJCQkJaWYgKCBzLnNjcmlwdENo
YXJzZXQgKSB7CgkJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CgkJCQl9CgoJ
CQkJc2NyaXB0LnNyYyA9IHMudXJsOwoKCQkJCS8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJy
b3dzZXJzCgkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1
bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKCQkJCQlpZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFk
eVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7
CgoJCQkJCQkvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKCQkJCQkJc2NyaXB0Lm9ubG9hZCA9
IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwoKCQkJCQkJLy8gUmVtb3ZlIHRoZSBz
Y3JpcHQKCQkJCQkJaWYgKCBoZWFkICYmIHNjcmlwdC5wYXJlbnROb2RlICkgewoJCQkJCQkJaGVh
ZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CgkJCQkJCX0KCgkJCQkJCS8vIERlcmVmZXJlbmNlIHRo
ZSBzY3JpcHQKCQkJCQkJc2NyaXB0ID0gdW5kZWZpbmVkOwoKCQkJCQkJLy8gQ2FsbGJhY2sgaWYg
bm90IGFib3J0CgkJCQkJCWlmICggIWlzQWJvcnQgKSB7CgkJCQkJCQljYWxsYmFjayggMjAwLCAi
c3VjY2VzcyIgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX07CgkJCQkvLyBVc2UgaW5zZXJ0QmVmb3Jl
IGluc3RlYWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KCQkJCS8v
IFRoaXMgYXJpc2VzIHdoZW4gYSBiYXNlIG5vZGUgaXMgdXNlZCAoIzI3MDkgYW5kICM0Mzc4KS4K
CQkJCWhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApOwoJCQl9LAoK
CQkJYWJvcnQ6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBzY3JpcHQgKSB7CgkJCQkJc2NyaXB0Lm9u
bG9hZCggMCwgMSApOwoJCQkJfQoJCQl9CgkJfTsKCX0KfSk7CgoKCgp2YXIgLy8gIzUyODA6IElu
dGVybmV0IEV4cGxvcmVyIHdpbGwga2VlcCBjb25uZWN0aW9ucyBhbGl2ZSBpZiB3ZSBkb24ndCBh
Ym9ydCBvbiB1bmxvYWQKCXhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/
IGZ1bmN0aW9uKCkgewoJCS8vIEFib3J0IGFsbCBwZW5kaW5nIHJlcXVlc3RzCgkJZm9yICggdmFy
IGtleSBpbiB4aHJDYWxsYmFja3MgKSB7CgkJCXhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsK
CQl9Cgl9IDogZmFsc2UsCgl4aHJJZCA9IDAsCgl4aHJDYWxsYmFja3M7CgovLyBGdW5jdGlvbnMg
dG8gY3JlYXRlIHhocnMKZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIoKSB7Cgl0cnkgewoJCXJl
dHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7Cgl9IGNhdGNoKCBlICkge30KfQoKZnVu
Y3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgewoJdHJ5IHsKCQlyZXR1cm4gbmV3IHdpbmRvdy5BY3Rp
dmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTEhUVFAiICk7Cgl9IGNhdGNoKCBlICkge30KfQoKLy8g
Q3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdAovLyAoVGhpcyBpcyBzdGlsbCBhdHRhY2hlZCB0byBh
amF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCmpRdWVyeS5hamF4U2V0dGlu
Z3MueGhyID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPwoJLyogTWljcm9zb2Z0IGZhaWxlZCB0byBw
cm9wZXJseQoJICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJl
cXVlc3QgbG9jYWwgZmlsZXMpLAoJICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4g
aXQgaXMgYXZhaWxhYmxlCgkgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRp
c2FibGVkIGluIElFNy9JRTggc28KCSAqIHdlIG5lZWQgYSBmYWxsYmFjay4KCSAqLwoJZnVuY3Rp
b24oKSB7CgkJcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBj
cmVhdGVBY3RpdmVYSFIoKTsKCX0gOgoJLy8gRm9yIGFsbCBvdGhlciBicm93c2VycywgdXNlIHRo
ZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKCWNyZWF0ZVN0YW5kYXJkWEhSOwoKLy8g
RGV0ZXJtaW5lIHN1cHBvcnQgcHJvcGVydGllcwooZnVuY3Rpb24oIHhociApIHsKCWpRdWVyeS5l
eHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7CgkJYWpheDogISF4aHIsCgkJY29yczogISF4aHIgJiYg
KCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIgKQoJfSk7Cn0pKCBqUXVlcnkuYWpheFNldHRpbmdz
LnhocigpICk7CgovLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRoZSBicm93c2VyIGNhbiBwcm92aWRl
IGFuIHhocgppZiAoIGpRdWVyeS5zdXBwb3J0LmFqYXggKSB7CgoJalF1ZXJ5LmFqYXhUcmFuc3Bv
cnQoZnVuY3Rpb24oIHMgKSB7CgkJLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBw
b3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAoJCWlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1
ZXJ5LnN1cHBvcnQuY29ycyApIHsKCgkJCXZhciBjYWxsYmFjazsKCgkJCXJldHVybiB7CgkJCQlz
ZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CgoJCQkJCS8vIEdldCBhIG5ldyB4
aHIKCQkJCQl2YXIgeGhyID0gcy54aHIoKSwKCQkJCQkJaGFuZGxlLAoJCQkJCQlpOwoKCQkJCQkv
LyBPcGVuIHRoZSBzb2NrZXQKCQkJCQkvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRl
cyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKCQkJCQlpZiAoIHMudXNlcm5hbWUgKSB7
CgkJCQkJCXhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBh
c3N3b3JkICk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMu
YXN5bmMgKTsKCQkJCQl9CgoJCQkJCS8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQK
CQkJCQlpZiAoIHMueGhyRmllbGRzICkgewoJCQkJCQlmb3IgKCBpIGluIHMueGhyRmllbGRzICkg
ewoJCQkJCQkJeGhyWyBpIF0gPSBzLnhockZpZWxkc1sgaSBdOwoJCQkJCQl9CgkJCQkJfQoKCQkJ
CQkvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCgkJCQkJaWYgKCBzLm1pbWVUeXBlICYm
IHhoci5vdmVycmlkZU1pbWVUeXBlICkgewoJCQkJCQl4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5t
aW1lVHlwZSApOwoJCQkJCX0KCgkJCQkJLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKCQkJCQkv
LyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBw
cmVmbGlnaHQgYXJlCgkJCQkJLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBu
ZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KCQkJCQkvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24g
YSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkKCQkJCQkvLyBGb3Ig
c2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92
aWRlZC4KCQkJCQlpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1X
aXRoIl0gKSB7CgkJCQkJCWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBS
ZXF1ZXN0IjsKCQkJCQl9CgoJCQkJCS8vIE5lZWQgYW4gZXh0cmEgdHJ5L2NhdGNoIGZvciBjcm9z
cyBkb21haW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCgkJCQkJdHJ5IHsKCQkJCQkJZm9yICggaSBp
biBoZWFkZXJzICkgewoJCQkJCQkJeGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkg
XSApOwoJCQkJCQl9CgkJCQkJfSBjYXRjaCggXyApIHt9CgoJCQkJCS8vIERvIHNlbmQgdGhlIHJl
cXVlc3QKCQkJCQkvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFs
bHkKCQkJCQkvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChzbyBubyB0cnkvY2F0Y2ggaGVyZSkK
CQkJCQl4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwoKCQkJ
CQkvLyBMaXN0ZW5lcgoJCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7CgoJ
CQkJCQl2YXIgc3RhdHVzLAoJCQkJCQkJc3RhdHVzVGV4dCwKCQkJCQkJCXJlc3BvbnNlSGVhZGVy
cywKCQkJCQkJCXJlc3BvbnNlcywKCQkJCQkJCXhtbDsKCgkJCQkJCS8vIEZpcmVmb3ggdGhyb3dz
IGV4Y2VwdGlvbnMgd2hlbiBhY2Nlc3NpbmcgcHJvcGVydGllcwoJCQkJCQkvLyBvZiBhbiB4aHIg
d2hlbiBhIG5ldHdvcmsgZXJyb3Igb2NjdXJlZAoJCQkJCQkvLyBodHRwOi8vaGVscGZ1bC5rbm9i
cy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4
ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpCgkJCQkJCXRyeSB7CgoJCQkJCQkJLy8g
V2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQoJCQkJCQkJaWYgKCBj
YWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKCgkJCQkJ
CQkJLy8gT25seSBjYWxsZWQgb25jZQoJCQkJCQkJCWNhbGxiYWNrID0gdW5kZWZpbmVkOwoKCQkJ
CQkJCQkvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55bW9yZQoJCQkJCQkJCWlmICggaGFuZGxl
ICkgewoJCQkJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CgkJCQkJ
CQkJCWlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKCQkJCQkJCQkJCWRlbGV0ZSB4aHJDYWxsYmFj
a3NbIGhhbmRsZSBdOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoKCQkJCQkJCQkvLyBJZiBpdCdzIGFu
IGFib3J0CgkJCQkJCQkJaWYgKCBpc0Fib3J0ICkgewoJCQkJCQkJCQkvLyBBYm9ydCBpdCBtYW51
YWxseSBpZiBuZWVkZWQKCQkJCQkJCQkJaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKCQkJ
CQkJCQkJCXhoci5hYm9ydCgpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJ
c3RhdHVzID0geGhyLnN0YXR1czsKCQkJCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFs
bFJlc3BvbnNlSGVhZGVycygpOwoJCQkJCQkJCQlyZXNwb25zZXMgPSB7fTsKCQkJCQkJCQkJeG1s
ID0geGhyLnJlc3BvbnNlWE1MOwoKCQkJCQkJCQkJLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QK
CQkJCQkJCQkJaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsK
CQkJCQkJCQkJCXJlc3BvbnNlcy54bWwgPSB4bWw7CgkJCQkJCQkJCX0KCQkJCQkJCQkJcmVzcG9u
c2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwoKCQkJCQkJCQkJLy8gRmlyZWZveCB0aHJvd3Mg
YW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCgkJCQkJCQkJCS8vIHN0YXR1c1RleHQgZm9yIGZh
dWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKCQkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJCXN0YXR1
c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKCQkJCQkJCQkJfSBjYXRjaCggZSApIHsKCQkJCQkJCQkJ
CS8vIFdlIG5vcm1hbGl6ZSB3aXRoIFdlYmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVzVGV4dAoJ
CQkJCQkJCQkJc3RhdHVzVGV4dCA9ICIiOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQkvLyBGaWx0ZXIg
c3RhdHVzIGZvciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCgoJCQkJCQkJCQkvLyBJZiB0aGUgcmVx
dWVzdCBpcyBsb2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCgkJCQkJCQkJ
CS8vIChzdWNjZXNzIHdpdGggbm8gZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUg
YmVzdCB3ZQoJCQkJCQkJCQkvLyBjYW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMp
CgkJCQkJCQkJCWlmICggIXN0YXR1cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7
CgkJCQkJCQkJCQlzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKCQkJCQkJCQkJ
Ly8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAy
MDQKCQkJCQkJCQkJfSBlbHNlIGlmICggc3RhdHVzID09PSAxMjIzICkgewoJCQkJCQkJCQkJc3Rh
dHVzID0gMjA0OwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9IGNhdGNoKCBm
aXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewoJCQkJCQkJaWYgKCAhaXNBYm9ydCApIHsKCQkJCQkJ
CQljb21wbGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTsKCQkJCQkJCX0KCQkJCQkJ
fQoKCQkJCQkJLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVkZWQKCQkJCQkJaWYgKCByZXNwb25zZXMg
KSB7CgkJCQkJCQljb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3Bv
bnNlSGVhZGVycyApOwoJCQkJCQl9CgkJCQkJfTsKCgkJCQkJLy8gaWYgd2UncmUgaW4gc3luYyBt
b2RlIG9yIGl0J3MgaW4gY2FjaGUKCQkJCQkvLyBhbmQgaGFzIGJlZW4gcmV0cmlldmVkIGRpcmVj
dGx5IChJRTYgJiBJRTcpCgkJCQkJLy8gd2UgbmVlZCB0byBtYW51YWxseSBmaXJlIHRoZSBjYWxs
YmFjawoJCQkJCWlmICggIXMuYXN5bmMgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7CgkJCQkJ
CWNhbGxiYWNrKCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJaGFuZGxlID0gKyt4aHJJZDsKCQkJCQkJ
aWYgKCB4aHJPblVubG9hZEFib3J0ICkgewoJCQkJCQkJLy8gQ3JlYXRlIHRoZSBhY3RpdmUgeGhy
cyBjYWxsYmFja3MgbGlzdCBpZiBuZWVkZWQKCQkJCQkJCS8vIGFuZCBhdHRhY2ggdGhlIHVubG9h
ZCBoYW5kbGVyCgkJCQkJCQlpZiAoICF4aHJDYWxsYmFja3MgKSB7CgkJCQkJCQkJeGhyQ2FsbGJh
Y2tzID0ge307CgkJCQkJCQkJalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJv
cnQgKTsKCQkJCQkJCX0KCQkJCQkJCS8vIEFkZCB0byBsaXN0IG9mIGFjdGl2ZSB4aHJzIGNhbGxi
YWNrcwoJCQkJCQkJeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOwoJCQkJCQl9CgkJ
CQkJCXhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYWxsYmFjazsKCQkJCQl9CgkJCQl9LAoKCQkJ
CWFib3J0OiBmdW5jdGlvbigpIHsKCQkJCQlpZiAoIGNhbGxiYWNrICkgewoJCQkJCQljYWxsYmFj
aygwLDEpOwoJCQkJCX0KCQkJCX0KCQkJfTsKCQl9Cgl9KTsKfQoKCgoKdmFyIGVsZW1kaXNwbGF5
ID0ge30sCglpZnJhbWUsIGlmcmFtZURvYywKCXJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xo
aWRlKSQvLAoJcmZ4bnVtID0gL14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSwKCXRp
bWVySWQsCglmeEF0dHJzID0gWwoJCS8vIGhlaWdodCBhbmltYXRpb25zCgkJWyAiaGVpZ2h0Iiwg
Im1hcmdpblRvcCIsICJtYXJnaW5Cb3R0b20iLCAicGFkZGluZ1RvcCIsICJwYWRkaW5nQm90dG9t
IiBdLAoJCS8vIHdpZHRoIGFuaW1hdGlvbnMKCQlbICJ3aWR0aCIsICJtYXJnaW5MZWZ0IiwgIm1h
cmdpblJpZ2h0IiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIgXSwKCQkvLyBvcGFjaXR5
IGFuaW1hdGlvbnMKCQlbICJvcGFjaXR5IiBdCgldLAoJZnhOb3csCglyZXF1ZXN0QW5pbWF0aW9u
RnJhbWUgPSB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CgkgICAgd2luZG93
Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAoJICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlv
bkZyYW1lOwoKalF1ZXJ5LmZuLmV4dGVuZCh7CglzaG93OiBmdW5jdGlvbiggc3BlZWQsIGVhc2lu
ZywgY2FsbGJhY2sgKSB7CgkJdmFyIGVsZW0sIGRpc3BsYXk7CgoJCWlmICggc3BlZWQgfHwgc3Bl
ZWQgPT09IDAgKSB7CgkJCXJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KCJzaG93IiwgMyksIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKCgkJfSBlbHNlIHsKCQkJZm9yICggdmFyIGkgPSAwLCBq
ID0gdGhpcy5sZW5ndGg7IGkgPCBqOyBpKysgKSB7CgkJCQllbGVtID0gdGhpc1tpXTsKCgkJCQlp
ZiAoIGVsZW0uc3R5bGUgKSB7CgkJCQkJZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKCgkJ
CQkJLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBp
ZiBpdCBpcwoJCQkJCS8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKCQkJ
CQlpZiAoICFqUXVlcnkuX2RhdGEoZWxlbSwgIm9sZGRpc3BsYXkiKSAmJiBkaXNwbGF5ID09PSAi
bm9uZSIgKSB7CgkJCQkJCWRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKCQkJCQl9
CgoJCQkJCS8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRp
c3BsYXk6IG5vbmUKCQkJCQkvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1
bHQgYnJvd3NlciBzdHlsZSBpcwoJCQkJCS8vIGZvciBzdWNoIGFuIGVsZW1lbnQKCQkJCQlpZiAo
IGRpc3BsYXkgPT09ICIiICYmIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9u
ZSIgKSB7CgkJCQkJCWpRdWVyeS5fZGF0YShlbGVtLCAib2xkZGlzcGxheSIsIGRlZmF1bHREaXNw
bGF5KGVsZW0ubm9kZU5hbWUpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIFNldCB0aGUgZGlz
cGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCgkJCS8vIHRvIGF2
b2lkIHRoZSBjb25zdGFudCByZWZsb3cKCQkJZm9yICggaSA9IDA7IGkgPCBqOyBpKysgKSB7CgkJ
CQllbGVtID0gdGhpc1tpXTsKCgkJCQlpZiAoIGVsZW0uc3R5bGUgKSB7CgkJCQkJZGlzcGxheSA9
IGVsZW0uc3R5bGUuZGlzcGxheTsKCgkJCQkJaWYgKCBkaXNwbGF5ID09PSAiIiB8fCBkaXNwbGF5
ID09PSAibm9uZSIgKSB7CgkJCQkJCWVsZW0uc3R5bGUuZGlzcGxheSA9IGpRdWVyeS5fZGF0YShl
bGVtLCAib2xkZGlzcGxheSIpIHx8ICIiOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJcmV0dXJuIHRo
aXM7CgkJfQoJfSwKCgloaWRlOiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7
CgkJaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0gMCApIHsKCQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSgg
Z2VuRngoImhpZGUiLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoKCQl9IGVsc2UgewoJ
CQlmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxlbmd0aDsgaSA8IGo7IGkrKyApIHsKCQkJCWlm
ICggdGhpc1tpXS5zdHlsZSApIHsKCQkJCQl2YXIgZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRoaXNb
aV0sICJkaXNwbGF5IiApOwoKCQkJCQlpZiAoIGRpc3BsYXkgIT09ICJub25lIiAmJiAhalF1ZXJ5
Ll9kYXRhKCB0aGlzW2ldLCAib2xkZGlzcGxheSIgKSApIHsKCQkJCQkJalF1ZXJ5Ll9kYXRhKCB0
aGlzW2ldLCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8v
IFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAoJCQkvLyB0
byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CgkJCWZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkg
ewoJCQkJaWYgKCB0aGlzW2ldLnN0eWxlICkgewoJCQkJCXRoaXNbaV0uc3R5bGUuZGlzcGxheSA9
ICJub25lIjsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIHRoaXM7CgkJfQoJfSwKCgkvLyBTYXZlIHRo
ZSBvbGQgdG9nZ2xlIGZ1bmN0aW9uCglfdG9nZ2xlOiBqUXVlcnkuZm4udG9nZ2xlLAoKCXRvZ2ds
ZTogZnVuY3Rpb24oIGZuLCBmbjIsIGNhbGxiYWNrICkgewoJCXZhciBib29sID0gdHlwZW9mIGZu
ID09PSAiYm9vbGVhbiI7CgoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oZm4pICYmIGpRdWVyeS5p
c0Z1bmN0aW9uKGZuMikgKSB7CgkJCXRoaXMuX3RvZ2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRz
ICk7CgoJCX0gZWxzZSBpZiAoIGZuID09IG51bGwgfHwgYm9vbCApIHsKCQkJdGhpcy5lYWNoKGZ1
bmN0aW9uKCkgewoJCQkJdmFyIHN0YXRlID0gYm9vbCA/IGZuIDogalF1ZXJ5KHRoaXMpLmlzKCI6
aGlkZGVuIik7CgkJCQlqUXVlcnkodGhpcylbIHN0YXRlID8gInNob3ciIDogImhpZGUiIF0oKTsK
CQkJfSk7CgoJCX0gZWxzZSB7CgkJCXRoaXMuYW5pbWF0ZShnZW5GeCgidG9nZ2xlIiwgMyksIGZu
LCBmbjIsIGNhbGxiYWNrKTsKCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCglmYWRlVG86IGZ1bmN0
aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMuZmlsdGVy
KCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpCgkJCQkJLmFuaW1hdGUo
e29wYWNpdHk6IHRvfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwoJfSwKCglhbmltYXRlOiBm
dW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CgkJdmFyIG9wdGFsbCA9
IGpRdWVyeS5zcGVlZChzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayk7CgoJCWlmICggalF1ZXJ5Lmlz
RW1wdHlPYmplY3QoIHByb3AgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaCggb3B0YWxsLmNvbXBs
ZXRlLCBbIGZhbHNlIF0gKTsKCQl9CgoJCS8vIERvIG5vdCBjaGFuZ2UgcmVmZXJlbmNlZCBwcm9w
ZXJ0aWVzIGFzIHBlci1wcm9wZXJ0eSBlYXNpbmcgd2lsbCBiZSBsb3N0CgkJcHJvcCA9IGpRdWVy
eS5leHRlbmQoIHt9LCBwcm9wICk7CgoJCXJldHVybiB0aGlzWyBvcHRhbGwucXVldWUgPT09IGZh
bHNlID8gImVhY2giIDogInF1ZXVlIiBdKGZ1bmN0aW9uKCkgewoJCQkvLyBYWFggJ3RoaXMnIGRv
ZXMgbm90IGFsd2F5cyBoYXZlIGEgbm9kZU5hbWUgd2hlbiBydW5uaW5nIHRoZQoJCQkvLyB0ZXN0
IHN1aXRlCgoJCQlpZiAoIG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgKSB7CgkJCQlqUXVlcnkuX21h
cmsoIHRoaXMgKTsKCQkJfQoKCQkJdmFyIG9wdCA9IGpRdWVyeS5leHRlbmQoIHt9LCBvcHRhbGwg
KSwKCQkJCWlzRWxlbWVudCA9IHRoaXMubm9kZVR5cGUgPT09IDEsCgkJCQloaWRkZW4gPSBpc0Vs
ZW1lbnQgJiYgalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIiksCgkJCQluYW1lLCB2YWwsIHAsCgkJ
CQlkaXNwbGF5LCBlLAoJCQkJcGFydHMsIHN0YXJ0LCBlbmQsIHVuaXQ7CgoJCQkvLyB3aWxsIHN0
b3JlIHBlciBwcm9wZXJ0eSBlYXNpbmcgYW5kIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gYW4g
YW5pbWF0aW9uIGlzIGNvbXBsZXRlCgkJCW9wdC5hbmltYXRlZFByb3BlcnRpZXMgPSB7fTsKCgkJ
CWZvciAoIHAgaW4gcHJvcCApIHsKCgkJCQkvLyBwcm9wZXJ0eSBuYW1lIG5vcm1hbGl6YXRpb24K
CQkJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBwICk7CgkJCQlpZiAoIHAgIT09IG5hbWUgKSB7
CgkJCQkJcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdOwoJCQkJCWRlbGV0ZSBwcm9wWyBwIF07CgkJ
CQl9CgoJCQkJdmFsID0gcHJvcFsgbmFtZSBdOwoKCQkJCS8vIGVhc2luZyByZXNvbHV0aW9uOiBw
ZXIgcHJvcGVydHkgPiBvcHQuc3BlY2lhbEVhc2luZyA+IG9wdC5lYXNpbmcgPiAnc3dpbmcnIChk
ZWZhdWx0KQoJCQkJaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CgkJCQkJb3B0LmFuaW1h
dGVkUHJvcGVydGllc1sgbmFtZSBdID0gdmFsWyAxIF07CgkJCQkJdmFsID0gcHJvcFsgbmFtZSBd
ID0gdmFsWyAwIF07CgkJCQl9IGVsc2UgewoJCQkJCW9wdC5hbmltYXRlZFByb3BlcnRpZXNbIG5h
bWUgXSA9IG9wdC5zcGVjaWFsRWFzaW5nICYmIG9wdC5zcGVjaWFsRWFzaW5nWyBuYW1lIF0gfHwg
b3B0LmVhc2luZyB8fCAnc3dpbmcnOwoJCQkJfQoKCQkJCWlmICggdmFsID09PSAiaGlkZSIgJiYg
aGlkZGVuIHx8IHZhbCA9PT0gInNob3ciICYmICFoaWRkZW4gKSB7CgkJCQkJcmV0dXJuIG9wdC5j
b21wbGV0ZS5jYWxsKCB0aGlzICk7CgkJCQl9CgoJCQkJaWYgKCBpc0VsZW1lbnQgJiYgKCBuYW1l
ID09PSAiaGVpZ2h0IiB8fCBuYW1lID09PSAid2lkdGgiICkgKSB7CgkJCQkJLy8gTWFrZSBzdXJl
IHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CgkJCQkJLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0
dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdAoJCQkJCS8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cg
YXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAoJCQkJCS8vIG92ZXJmbG93WSBhcmUgc2V0IHRv
IHRoZSBzYW1lIHZhbHVlCgkJCQkJb3B0Lm92ZXJmbG93ID0gWyB0aGlzLnN0eWxlLm92ZXJmbG93
LCB0aGlzLnN0eWxlLm92ZXJmbG93WCwgdGhpcy5zdHlsZS5vdmVyZmxvd1kgXTsKCgkJCQkJLy8g
U2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGgKCQkJ
CQkvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgv
aGVpZ2h0CgkJCQkJLy8gYW5pbWF0ZWQKCQkJCQlpZiAoIGpRdWVyeS5jc3MoIHRoaXMsICJkaXNw
bGF5IiApID09PSAiaW5saW5lIiAmJgoJCQkJCQkJalF1ZXJ5LmNzcyggdGhpcywgImZsb2F0IiAp
ID09PSAibm9uZSIgKSB7CgkJCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LmlubGluZUJsb2NrTmVl
ZHNMYXlvdXQgKSB7CgkJCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsK
CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXkoIHRoaXMubm9k
ZU5hbWUgKTsKCgkJCQkJCQkvLyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1i
bG9jazsKCQkJCQkJCS8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdp
dGggbGF5b3V0CgkJCQkJCQlpZiAoIGRpc3BsYXkgPT09ICJpbmxpbmUiICkgewoJCQkJCQkJCXRo
aXMuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwoKCQkJCQkJCX0gZWxzZSB7CgkJCQkJ
CQkJdGhpcy5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CgkJCQkJCQkJdGhpcy5zdHlsZS56b29t
ID0gMTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYgKCBvcHQub3Zl
cmZsb3cgIT0gbnVsbCApIHsKCQkJCXRoaXMuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCQkJ
fQoKCQkJZm9yICggcCBpbiBwcm9wICkgewoJCQkJZSA9IG5ldyBqUXVlcnkuZngoIHRoaXMsIG9w
dCwgcCApOwoJCQkJdmFsID0gcHJvcFsgcCBdOwoKCQkJCWlmICggcmZ4dHlwZXMudGVzdCh2YWwp
ICkgewoJCQkJCWVbIHZhbCA9PT0gInRvZ2dsZSIgPyBoaWRkZW4gPyAic2hvdyIgOiAiaGlkZSIg
OiB2YWwgXSgpOwoKCQkJCX0gZWxzZSB7CgkJCQkJcGFydHMgPSByZnhudW0uZXhlYyggdmFsICk7
CgkJCQkJc3RhcnQgPSBlLmN1cigpOwoKCQkJCQlpZiAoIHBhcnRzICkgewoJCQkJCQllbmQgPSBw
YXJzZUZsb2F0KCBwYXJ0c1syXSApOwoJCQkJCQl1bml0ID0gcGFydHNbM10gfHwgKCBqUXVlcnku
Y3NzTnVtYmVyWyBwIF0gPyAiIiA6ICJweCIgKTsKCgkJCQkJCS8vIFdlIG5lZWQgdG8gY29tcHV0
ZSBzdGFydGluZyB2YWx1ZQoJCQkJCQlpZiAoIHVuaXQgIT09ICJweCIgKSB7CgkJCQkJCQlqUXVl
cnkuc3R5bGUoIHRoaXMsIHAsIChlbmQgfHwgMSkgKyB1bml0KTsKCQkJCQkJCXN0YXJ0ID0gKChl
bmQgfHwgMSkgLyBlLmN1cigpKSAqIHN0YXJ0OwoJCQkJCQkJalF1ZXJ5LnN0eWxlKCB0aGlzLCBw
LCBzdGFydCArIHVuaXQpOwoJCQkJCQl9CgoJCQkJCQkvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBw
cm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KCQkJCQkJaWYgKCBwYXJ0
c1sxXSApIHsKCQkJCQkJCWVuZCA9ICggKHBhcnRzWyAxIF0gPT09ICItPSIgPyAtMSA6IDEpICog
ZW5kICkgKyBzdGFydDsKCQkJCQkJfQoKCQkJCQkJZS5jdXN0b20oIHN0YXJ0LCBlbmQsIHVuaXQg
KTsKCgkJCQkJfSBlbHNlIHsKCQkJCQkJZS5jdXN0b20oIHN0YXJ0LCB2YWwsICIiICk7CgkJCQkJ
fQoJCQkJfQoJCQl9CgoJCQkvLyBGb3IgSlMgc3RyaWN0IGNvbXBsaWFuY2UKCQkJcmV0dXJuIHRy
dWU7CgkJfSk7Cgl9LAoKCXN0b3A6IGZ1bmN0aW9uKCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgewoJ
CWlmICggY2xlYXJRdWV1ZSApIHsKCQkJdGhpcy5xdWV1ZShbXSk7CgkJfQoKCQl0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7CgkJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAoJCQkJaSA9IHRpbWVy
cy5sZW5ndGg7CgkJCS8vIGNsZWFyIG1hcmtlciBjb3VudGVycyBpZiB3ZSBrbm93IHRoZXkgd29u
J3QgYmUKCQkJaWYgKCAhZ290b0VuZCApIHsKCQkJCWpRdWVyeS5fdW5tYXJrKCB0cnVlLCB0aGlz
ICk7CgkJCX0KCQkJd2hpbGUgKCBpLS0gKSB7CgkJCQlpZiAoIHRpbWVyc1tpXS5lbGVtID09PSB0
aGlzICkgewoJCQkJCWlmIChnb3RvRW5kKSB7CgkJCQkJCS8vIGZvcmNlIHRoZSBuZXh0IHN0ZXAg
dG8gYmUgdGhlIGxhc3QKCQkJCQkJdGltZXJzW2ldKHRydWUpOwoJCQkJCX0KCgkJCQkJdGltZXJz
LnNwbGljZShpLCAxKTsKCQkJCX0KCQkJfQoJCX0pOwoKCQkvLyBzdGFydCB0aGUgbmV4dCBpbiB0
aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkCgkJaWYgKCAhZ290b0VuZCAp
IHsKCQkJdGhpcy5kZXF1ZXVlKCk7CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0KCn0pOwoKLy8gQW5p
bWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQpmdW5j
dGlvbiBjcmVhdGVGeE5vdygpIHsKCXNldFRpbWVvdXQoIGNsZWFyRnhOb3csIDAgKTsKCXJldHVy
biAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cn0KCmZ1bmN0aW9uIGNsZWFyRnhOb3coKSB7Cglm
eE5vdyA9IHVuZGVmaW5lZDsKfQoKLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBz
dGFuZGFyZCBhbmltYXRpb24KZnVuY3Rpb24gZ2VuRngoIHR5cGUsIG51bSApIHsKCXZhciBvYmog
PSB7fTsKCglqUXVlcnkuZWFjaCggZnhBdHRycy5jb25jYXQuYXBwbHkoW10sIGZ4QXR0cnMuc2xp
Y2UoMCxudW0pKSwgZnVuY3Rpb24oKSB7CgkJb2JqWyB0aGlzIF0gPSB0eXBlOwoJfSk7CgoJcmV0
dXJuIG9iajsKfQoKLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucwpq
UXVlcnkuZWFjaCh7CglzbGlkZURvd246IGdlbkZ4KCJzaG93IiwgMSksCglzbGlkZVVwOiBnZW5G
eCgiaGlkZSIsIDEpLAoJc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiLCAxKSwKCWZhZGVJbjog
eyBvcGFjaXR5OiAic2hvdyIgfSwKCWZhZGVPdXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sCglmYWRl
VG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkg
ewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sg
KSB7CgkJcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNr
ICk7Cgl9Owp9KTsKCmpRdWVyeS5leHRlbmQoewoJc3BlZWQ6IGZ1bmN0aW9uKCBzcGVlZCwgZWFz
aW5nLCBmbiApIHsKCQl2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0
IiA/IGpRdWVyeS5leHRlbmQoe30sIHNwZWVkKSA6IHsKCQkJY29tcGxldGU6IGZuIHx8ICFmbiAm
JiBlYXNpbmcgfHwKCQkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAoJCQlk
dXJhdGlvbjogc3BlZWQsCgkJCWVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1
ZXJ5LmlzRnVuY3Rpb24oZWFzaW5nKSAmJiBlYXNpbmcKCQl9OwoKCQlvcHQuZHVyYXRpb24gPSBq
UXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0
LmR1cmF0aW9uIDoKCQkJb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnku
Znguc3BlZWRzW29wdC5kdXJhdGlvbl0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OwoKCQkv
LyBRdWV1ZWluZwoJCW9wdC5vbGQgPSBvcHQuY29tcGxldGU7CgkJb3B0LmNvbXBsZXRlID0gZnVu
Y3Rpb24oIG5vVW5tYXJrICkgewoJCQlpZiAoIG9wdC5xdWV1ZSAhPT0gZmFsc2UgKSB7CgkJCQlq
UXVlcnkuZGVxdWV1ZSggdGhpcyApOwoJCQl9IGVsc2UgaWYgKCBub1VubWFyayAhPT0gZmFsc2Ug
KSB7CgkJCQlqUXVlcnkuX3VubWFyayggdGhpcyApOwoJCQl9CgoJCQlpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBvcHQub2xkICkgKSB7CgkJCQlvcHQub2xkLmNhbGwoIHRoaXMgKTsKCQkJfQoJCX07
CgoJCXJldHVybiBvcHQ7Cgl9LAoKCWVhc2luZzogewoJCWxpbmVhcjogZnVuY3Rpb24oIHAsIG4s
IGZpcnN0TnVtLCBkaWZmICkgewoJCQlyZXR1cm4gZmlyc3ROdW0gKyBkaWZmICogcDsKCQl9LAoJ
CXN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7CgkJCXJldHVybiAoKC1N
YXRoLmNvcyhwKk1hdGguUEkpLzIpICsgMC41KSAqIGRpZmYgKyBmaXJzdE51bTsKCQl9Cgl9LAoK
CXRpbWVyczogW10sCgoJZng6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wICkgewoJCXRo
aXMub3B0aW9ucyA9IG9wdGlvbnM7CgkJdGhpcy5lbGVtID0gZWxlbTsKCQl0aGlzLnByb3AgPSBw
cm9wOwoKCQlvcHRpb25zLm9yaWcgPSBvcHRpb25zLm9yaWcgfHwge307Cgl9Cgp9KTsKCmpRdWVy
eS5meC5wcm90b3R5cGUgPSB7CgkvLyBTaW1wbGUgZnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzdHls
ZSB2YWx1ZQoJdXBkYXRlOiBmdW5jdGlvbigpIHsKCQlpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkg
ewoJCQl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7
CgkJfQoKCQkoalF1ZXJ5LmZ4LnN0ZXBbdGhpcy5wcm9wXSB8fCBqUXVlcnkuZnguc3RlcC5fZGVm
YXVsdCkoIHRoaXMgKTsKCX0sCgoJLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKCWN1cjogZnVuY3Rp
b24oKSB7CgkJaWYgKCB0aGlzLmVsZW1bdGhpcy5wcm9wXSAhPSBudWxsICYmICghdGhpcy5lbGVt
LnN0eWxlIHx8IHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwpICkgewoJCQlyZXR1
cm4gdGhpcy5lbGVtWyB0aGlzLnByb3AgXTsKCQl9CgoJCXZhciBwYXJzZWQsCgkJCXIgPSBqUXVl
cnkuY3NzKCB0aGlzLmVsZW0sIHRoaXMucHJvcCApOwoJCS8vIEVtcHR5IHN0cmluZ3MsIG51bGws
IHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMCwKCQkvLyBjb21wbGV4IHZh
bHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcywKCQkvLyBzaW1w
bGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCgkJcmV0dXJuIGlz
TmFOKCBwYXJzZWQgPSBwYXJzZUZsb2F0KCByICkgKSA/ICFyIHx8IHIgPT09ICJhdXRvIiA/IDAg
OiByIDogcGFyc2VkOwoJfSwKCgkvLyBTdGFydCBhbiBhbmltYXRpb24gZnJvbSBvbmUgbnVtYmVy
IHRvIGFub3RoZXIKCWN1c3RvbTogZnVuY3Rpb24oIGZyb20sIHRvLCB1bml0ICkgewoJCXZhciBz
ZWxmID0gdGhpcywKCQkJZnggPSBqUXVlcnkuZngsCgkJCXJhZjsKCgkJdGhpcy5zdGFydFRpbWUg
PSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpOwoJCXRoaXMuc3RhcnQgPSBmcm9tOwoJCXRoaXMuZW5k
ID0gdG87CgkJdGhpcy51bml0ID0gdW5pdCB8fCB0aGlzLnVuaXQgfHwgKCBqUXVlcnkuY3NzTnVt
YmVyWyB0aGlzLnByb3AgXSA/ICIiIDogInB4IiApOwoJCXRoaXMubm93ID0gdGhpcy5zdGFydDsK
CQl0aGlzLnBvcyA9IHRoaXMuc3RhdGUgPSAwOwoKCQlmdW5jdGlvbiB0KCBnb3RvRW5kICkgewoJ
CQlyZXR1cm4gc2VsZi5zdGVwKGdvdG9FbmQpOwoJCX0KCgkJdC5lbGVtID0gdGhpcy5lbGVtOwoK
CQlpZiAoIHQoKSAmJiBqUXVlcnkudGltZXJzLnB1c2godCkgJiYgIXRpbWVySWQgKSB7CgkJCS8v
IFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW5zdGVhZCBvZiBzZXRJbnRlcnZhbCBpZiBhdmFp
bGFibGUKCQkJaWYgKCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7CgkJCQl0aW1lcklkID0gMTsK
CQkJCXJhZiA9IGZ1bmN0aW9uKCkgewoJCQkJCS8vIFdoZW4gdGltZXJJZCBnZXRzIHNldCB0byBu
dWxsIGF0IGFueSBwb2ludCwgdGhpcyBzdG9wcwoJCQkJCWlmICggdGltZXJJZCApIHsKCQkJCQkJ
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCByYWYgKTsKCQkJCQkJZngudGljaygpOwoJCQkJCX0KCQkJ
CX07CgkJCQlyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHJhZiApOwoJCQl9IGVsc2UgewoJCQkJdGlt
ZXJJZCA9IHNldEludGVydmFsKCBmeC50aWNrLCBmeC5pbnRlcnZhbCApOwoJCQl9CgkJfQoJfSwK
CgkvLyBTaW1wbGUgJ3Nob3cnIGZ1bmN0aW9uCglzaG93OiBmdW5jdGlvbigpIHsKCQkvLyBSZW1l
bWJlciB3aGVyZSB3ZSBzdGFydGVkLCBzbyB0aGF0IHdlIGNhbiBnbyBiYWNrIHRvIGl0IGxhdGVy
CgkJdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVt
LCB0aGlzLnByb3AgKTsKCQl0aGlzLm9wdGlvbnMuc2hvdyA9IHRydWU7CgoJCS8vIEJlZ2luIHRo
ZSBhbmltYXRpb24KCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzdGFydCBhdCBhIHNtYWxsIHdpZHRo
L2hlaWdodCB0byBhdm9pZCBhbnkKCQkvLyBmbGFzaCBvZiBjb250ZW50CgkJdGhpcy5jdXN0b20o
dGhpcy5wcm9wID09PSAid2lkdGgiIHx8IHRoaXMucHJvcCA9PT0gImhlaWdodCIgPyAxIDogMCwg
dGhpcy5jdXIoKSk7CgoJCS8vIFN0YXJ0IGJ5IHNob3dpbmcgdGhlIGVsZW1lbnQKCQlqUXVlcnko
IHRoaXMuZWxlbSApLnNob3coKTsKCX0sCgoJLy8gU2ltcGxlICdoaWRlJyBmdW5jdGlvbgoJaGlk
ZTogZnVuY3Rpb24oKSB7CgkJLy8gUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZCwgc28gdGhhdCB3
ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgoJCXRoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF0g
PSBqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7CgkJdGhpcy5vcHRpb25zLmhp
ZGUgPSB0cnVlOwoKCQkvLyBCZWdpbiB0aGUgYW5pbWF0aW9uCgkJdGhpcy5jdXN0b20odGhpcy5j
dXIoKSwgMCk7Cgl9LAoKCS8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24KCXN0ZXA6IGZ1bmN0
aW9uKCBnb3RvRW5kICkgewoJCXZhciB0ID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKCQkJZG9u
ZSA9IHRydWUsCgkJCWVsZW0gPSB0aGlzLmVsZW0sCgkJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnMs
CgkJCWksIG47CgoJCWlmICggZ290b0VuZCB8fCB0ID49IG9wdGlvbnMuZHVyYXRpb24gKyB0aGlz
LnN0YXJ0VGltZSApIHsKCQkJdGhpcy5ub3cgPSB0aGlzLmVuZDsKCQkJdGhpcy5wb3MgPSB0aGlz
LnN0YXRlID0gMTsKCQkJdGhpcy51cGRhdGUoKTsKCgkJCW9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0
aWVzWyB0aGlzLnByb3AgXSA9IHRydWU7CgoJCQlmb3IgKCBpIGluIG9wdGlvbnMuYW5pbWF0ZWRQ
cm9wZXJ0aWVzICkgewoJCQkJaWYgKCBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1tpXSAhPT0g
dHJ1ZSApIHsKCQkJCQlkb25lID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCWlmICggZG9uZSApIHsK
CQkJCS8vIFJlc2V0IHRoZSBvdmVyZmxvdwoJCQkJaWYgKCBvcHRpb25zLm92ZXJmbG93ICE9IG51
bGwgJiYgIWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgKSB7CgoJCQkJCWpRdWVyeS5l
YWNoKCBbICIiLCAiWCIsICJZIiBdLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7CgkJCQkJCWVs
ZW0uc3R5bGVbICJvdmVyZmxvdyIgKyB2YWx1ZSBdID0gb3B0aW9ucy5vdmVyZmxvd1tpbmRleF07
CgkJCQkJfSk7CgkJCQl9CgoJCQkJLy8gSGlkZSB0aGUgZWxlbWVudCBpZiB0aGUgImhpZGUiIG9w
ZXJhdGlvbiB3YXMgZG9uZQoJCQkJaWYgKCBvcHRpb25zLmhpZGUgKSB7CgkJCQkJalF1ZXJ5KGVs
ZW0pLmhpZGUoKTsKCQkJCX0KCgkJCQkvLyBSZXNldCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0
ZW0gaGFzIGJlZW4gaGlkZGVuIG9yIHNob3duCgkJCQlpZiAoIG9wdGlvbnMuaGlkZSB8fCBvcHRp
b25zLnNob3cgKSB7CgkJCQkJZm9yICggdmFyIHAgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRp
ZXMgKSB7CgkJCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcCwgb3B0aW9ucy5vcmlnW3BdICk7CgkJ
CQkJfQoJCQkJfQoKCQkJCS8vIEV4ZWN1dGUgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uCgkJCQlvcHRp
b25zLmNvbXBsZXRlLmNhbGwoIGVsZW0gKTsKCQkJfQoKCQkJcmV0dXJuIGZhbHNlOwoKCQl9IGVs
c2UgewoJCQkvLyBjbGFzc2ljYWwgZWFzaW5nIGNhbm5vdCBiZSB1c2VkIHdpdGggYW4gSW5maW5p
dHkgZHVyYXRpb24KCQkJaWYgKCBvcHRpb25zLmR1cmF0aW9uID09IEluZmluaXR5ICkgewoJCQkJ
dGhpcy5ub3cgPSB0OwoJCQl9IGVsc2UgewoJCQkJbiA9IHQgLSB0aGlzLnN0YXJ0VGltZTsKCQkJ
CXRoaXMuc3RhdGUgPSBuIC8gb3B0aW9ucy5kdXJhdGlvbjsKCgkJCQkvLyBQZXJmb3JtIHRoZSBl
YXNpbmcgZnVuY3Rpb24sIGRlZmF1bHRzIHRvIHN3aW5nCgkJCQl0aGlzLnBvcyA9IGpRdWVyeS5l
YXNpbmdbIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzWyB0aGlzLnByb3AgXSBdKCB0aGlzLnN0
YXRlLCBuLCAwLCAxLCBvcHRpb25zLmR1cmF0aW9uICk7CgkJCQl0aGlzLm5vdyA9IHRoaXMuc3Rh
cnQgKyAoKHRoaXMuZW5kIC0gdGhpcy5zdGFydCkgKiB0aGlzLnBvcyk7CgkJCX0KCQkJLy8gUGVy
Zm9ybSB0aGUgbmV4dCBzdGVwIG9mIHRoZSBhbmltYXRpb24KCQkJdGhpcy51cGRhdGUoKTsKCQl9
CgoJCXJldHVybiB0cnVlOwoJfQp9OwoKalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmZ4LCB7Cgl0aWNr
OiBmdW5jdGlvbigpIHsKCQlmb3IgKCB2YXIgdGltZXJzID0galF1ZXJ5LnRpbWVycywgaSA9IDAg
OyBpIDwgdGltZXJzLmxlbmd0aCA7ICsraSApIHsKCQkJaWYgKCAhdGltZXJzW2ldKCkgKSB7CgkJ
CQl0aW1lcnMuc3BsaWNlKGktLSwgMSk7CgkJCX0KCQl9CgoJCWlmICggIXRpbWVycy5sZW5ndGgg
KSB7CgkJCWpRdWVyeS5meC5zdG9wKCk7CgkJfQoJfSwKCglpbnRlcnZhbDogMTMsCgoJc3RvcDog
ZnVuY3Rpb24oKSB7CgkJY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOwoJCXRpbWVySWQgPSBudWxs
OwoJfSwKCglzcGVlZHM6IHsKCQlzbG93OiA2MDAsCgkJZmFzdDogMjAwLAoJCS8vIERlZmF1bHQg
c3BlZWQKCQlfZGVmYXVsdDogNDAwCgl9LAoKCXN0ZXA6IHsKCQlvcGFjaXR5OiBmdW5jdGlvbigg
ZnggKSB7CgkJCWpRdWVyeS5zdHlsZSggZnguZWxlbSwgIm9wYWNpdHkiLCBmeC5ub3cgKTsKCQl9
LAoKCQlfZGVmYXVsdDogZnVuY3Rpb24oIGZ4ICkgewoJCQlpZiAoIGZ4LmVsZW0uc3R5bGUgJiYg
ZnguZWxlbS5zdHlsZVsgZngucHJvcCBdICE9IG51bGwgKSB7CgkJCQlmeC5lbGVtLnN0eWxlWyBm
eC5wcm9wIF0gPSAoZngucHJvcCA9PT0gIndpZHRoIiB8fCBmeC5wcm9wID09PSAiaGVpZ2h0IiA/
IE1hdGgubWF4KDAsIGZ4Lm5vdykgOiBmeC5ub3cpICsgZngudW5pdDsKCQkJfSBlbHNlIHsKCQkJ
CWZ4LmVsZW1bIGZ4LnByb3AgXSA9IGZ4Lm5vdzsKCQkJfQoJCX0KCX0KfSk7CgppZiAoIGpRdWVy
eS5leHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7CglqUXVlcnkuZXhwci5maWx0ZXJzLmFu
aW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50
aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKCQkJcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07CgkJfSku
bGVuZ3RoOwoJfTsKfQoKLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1
ZSBvZiBhbiBlbGVtZW50CmZ1bmN0aW9uIGRlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHsKCglp
ZiAoICFlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKCgkJdmFyIGVsZW0gPSBqUXVlcnkoICI8
IiArIG5vZGVOYW1lICsgIj4iICkuYXBwZW5kVG8oICJib2R5IiApLAoJCQlkaXNwbGF5ID0gZWxl
bS5jc3MoICJkaXNwbGF5IiApOwoKCQllbGVtLnJlbW92ZSgpOwoKCQkvLyBJZiB0aGUgc2ltcGxl
IHdheSBmYWlscywKCQkvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0
dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCgkJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgfHwg
ZGlzcGxheSA9PT0gIiIgKSB7CgkJCS8vIE5vIGlmcmFtZSB0byB1c2UgeWV0LCBzbyBjcmVhdGUg
aXQKCQkJaWYgKCAhaWZyYW1lICkgewoJCQkJaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImlmcmFtZSIgKTsKCQkJCWlmcmFtZS5mcmFtZUJvcmRlciA9IGlmcmFtZS53aWR0aCA9IGlm
cmFtZS5oZWlnaHQgPSAwOwoJCQl9CgoJCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBpZnJh
bWUgKTsKCgkJCS8vIENyZWF0ZSBhIGNhY2hlYWJsZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1l
bnQgb24gZmlyc3QgY2FsbC4KCQkJLy8gSUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1
c2UgdGhlIGlmcmFtZURvYyB3aXRob3V0IHJlLXdyaXRpbmcgdGhlIGZha2UgaHRtbAoJCQkvLyBk
b2N1bWVudCB0byBpdCwgV2Via2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBp
ZnJhbWUgZG9jdW1lbnQKCQkJaWYgKCAhaWZyYW1lRG9jIHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVu
dCApIHsKCQkJCWlmcmFtZURvYyA9ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNv
bnRlbnREb2N1bWVudCApLmRvY3VtZW50OwoJCQkJaWZyYW1lRG9jLndyaXRlKCAiPCFkb2N0eXBl
PjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IiApOwoJCQl9CgoJCQllbGVtID0gaWZyYW1lRG9j
LmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7CgoJCQlpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGls
ZCggZWxlbSApOwoKCQkJZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOwoK
CQkJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7CgkJfQoKCQkvLyBTdG9yZSB0
aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKCQllbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRp
c3BsYXk7Cgl9CgoJcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOwp9CgoKCgp2YXIgcnRh
YmxlID0gL150KD86YWJsZXxkfGgpJC9pLAoJcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7Cgpp
ZiAoICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAp
IHsKCWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKCQl2YXIgZWxlbSA9
IHRoaXNbMF0sIGJveDsKCgkJaWYgKCBvcHRpb25zICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCBpICkgewoJCQkJalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMs
IGkgKTsKCQkJfSk7CgkJfQoKCQlpZiAoICFlbGVtIHx8ICFlbGVtLm93bmVyRG9jdW1lbnQgKSB7
CgkJCXJldHVybiBudWxsOwoJCX0KCgkJaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQu
Ym9keSApIHsKCQkJcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwoJCX0K
CgkJdHJ5IHsKCQkJYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQl9IGNhdGNo
KGUpIHt9CgoJCXZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCgkJCWRvY0VsZW0gPSBkb2Mu
ZG9jdW1lbnRFbGVtZW50OwoKCQkvLyBNYWtlIHN1cmUgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBh
IGRpc2Nvbm5lY3RlZCBET00gbm9kZQoJCWlmICggIWJveCB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBk
b2NFbGVtLCBlbGVtICkgKSB7CgkJCXJldHVybiBib3ggPyB7IHRvcDogYm94LnRvcCwgbGVmdDog
Ym94LmxlZnQgfSA6IHsgdG9wOiAwLCBsZWZ0OiAwIH07CgkJfQoKCQl2YXIgYm9keSA9IGRvYy5i
b2R5LAoJCQl3aW4gPSBnZXRXaW5kb3coZG9jKSwKCQkJY2xpZW50VG9wICA9IGRvY0VsZW0uY2xp
ZW50VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKCQkJY2xpZW50TGVmdCA9IGRvY0VsZW0u
Y2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCwKCQkJc2Nyb2xsVG9wICA9IHdpbi5w
YWdlWU9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbFRv
cCAgfHwgYm9keS5zY3JvbGxUb3AsCgkJCXNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwg
alF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jRWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHkuc2Ny
b2xsTGVmdCwKCQkJdG9wICA9IGJveC50b3AgICsgc2Nyb2xsVG9wICAtIGNsaWVudFRvcCwKCQkJ
bGVmdCA9IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQ7CgoJCXJldHVybiB7IHRv
cDogdG9wLCBsZWZ0OiBsZWZ0IH07Cgl9OwoKfSBlbHNlIHsKCWpRdWVyeS5mbi5vZmZzZXQgPSBm
dW5jdGlvbiggb3B0aW9ucyApIHsKCQl2YXIgZWxlbSA9IHRoaXNbMF07CgoJCWlmICggb3B0aW9u
cyApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKCQkJCWpRdWVyeS5vZmZz
ZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CgkJCX0pOwoJCX0KCgkJaWYgKCAhZWxl
bSB8fCAhZWxlbS5vd25lckRvY3VtZW50ICkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCWlmICgg
ZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmJvZHkgKSB7CgkJCXJldHVybiBqUXVlcnkub2Zm
c2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKCQl9CgoJCWpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSgp
OwoKCQl2YXIgY29tcHV0ZWRTdHlsZSwKCQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJl
bnQsCgkJCXByZXZPZmZzZXRQYXJlbnQgPSBlbGVtLAoJCQlkb2MgPSBlbGVtLm93bmVyRG9jdW1l
bnQsCgkJCWRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50LAoJCQlib2R5ID0gZG9jLmJvZHks
CgkJCWRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3LAoJCQlwcmV2Q29tcHV0ZWRTdHlsZSA9
IGRlZmF1bHRWaWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCAp
IDogZWxlbS5jdXJyZW50U3R5bGUsCgkJCXRvcCA9IGVsZW0ub2Zmc2V0VG9wLAoJCQlsZWZ0ID0g
ZWxlbS5vZmZzZXRMZWZ0OwoKCQl3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBl
bGVtICE9PSBib2R5ICYmIGVsZW0gIT09IGRvY0VsZW0gKSB7CgkJCWlmICggalF1ZXJ5Lm9mZnNl
dC5zdXBwb3J0c0ZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09
ICJmaXhlZCIgKSB7CgkJCQlicmVhazsKCQkJfQoKCQkJY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRW
aWV3ID8gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSA6IGVsZW0uY3Vy
cmVudFN0eWxlOwoJCQl0b3AgIC09IGVsZW0uc2Nyb2xsVG9wOwoJCQlsZWZ0IC09IGVsZW0uc2Ny
b2xsTGVmdDsKCgkJCWlmICggZWxlbSA9PT0gb2Zmc2V0UGFyZW50ICkgewoJCQkJdG9wICArPSBl
bGVtLm9mZnNldFRvcDsKCQkJCWxlZnQgKz0gZWxlbS5vZmZzZXRMZWZ0OwoKCQkJCWlmICggalF1
ZXJ5Lm9mZnNldC5kb2VzTm90QWRkQm9yZGVyICYmICEoalF1ZXJ5Lm9mZnNldC5kb2VzQWRkQm9y
ZGVyRm9yVGFibGVBbmRDZWxscyAmJiBydGFibGUudGVzdChlbGVtLm5vZGVOYW1lKSkgKSB7CgkJ
CQkJdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoICApIHx8
IDA7CgkJCQkJbGVmdCArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0
aCApIHx8IDA7CgkJCQl9CgoJCQkJcHJldk9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDsKCQkJ
CW9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50OwoJCQl9CgoJCQlpZiAoIGpRdWVyeS5v
ZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlICYmIGNvbXB1dGVkU3R5
bGUub3ZlcmZsb3cgIT09ICJ2aXNpYmxlIiApIHsKCQkJCXRvcCAgKz0gcGFyc2VGbG9hdCggY29t
cHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCAgKSB8fCAwOwoJCQkJbGVmdCArPSBwYXJzZUZsb2F0
KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7CgkJCX0KCgkJCXByZXZDb21w
dXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKCQl9CgoJCWlmICggcHJldkNvbXB1dGVkU3R5bGUu
cG9zaXRpb24gPT09ICJyZWxhdGl2ZSIgfHwgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09
ICJzdGF0aWMiICkgewoJCQl0b3AgICs9IGJvZHkub2Zmc2V0VG9wOwoJCQlsZWZ0ICs9IGJvZHku
b2Zmc2V0TGVmdDsKCQl9CgoJCWlmICggalF1ZXJ5Lm9mZnNldC5zdXBwb3J0c0ZpeGVkUG9zaXRp
b24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICJmaXhlZCIgKSB7CgkJCXRvcCAg
Kz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsVG9wLCBib2R5LnNjcm9sbFRvcCApOwoJCQlsZWZ0
ICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbExlZnQsIGJvZHkuc2Nyb2xsTGVmdCApOwoJCX0K
CgkJcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKCX07Cn0KCmpRdWVyeS5vZmZzZXQg
PSB7Cglpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKCQl2YXIgYm9keSA9IGRvY3VtZW50LmJvZHks
IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBpbm5lckRpdiwgY2hl
Y2tEaXYsIHRhYmxlLCB0ZCwgYm9keU1hcmdpblRvcCA9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mo
Ym9keSwgIm1hcmdpblRvcCIpICkgfHwgMCwKCQkJaHRtbCA9ICI8ZGl2IHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3Bh
ZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+PHRhYmxlIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBz
b2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxwYWRkaW5nPScw
JyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iOwoKCQlqUXVlcnku
ZXh0ZW5kKCBjb250YWluZXIuc3R5bGUsIHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRvcDogMCwg
bGVmdDogMCwgbWFyZ2luOiAwLCBib3JkZXI6IDAsIHdpZHRoOiAiMXB4IiwgaGVpZ2h0OiAiMXB4
IiwgdmlzaWJpbGl0eTogImhpZGRlbiIgfSApOwoKCQljb250YWluZXIuaW5uZXJIVE1MID0gaHRt
bDsKCQlib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKCQlp
bm5lckRpdiA9IGNvbnRhaW5lci5maXJzdENoaWxkOwoJCWNoZWNrRGl2ID0gaW5uZXJEaXYuZmly
c3RDaGlsZDsKCQl0ZCA9IGlubmVyRGl2Lm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGls
ZDsKCgkJdGhpcy5kb2VzTm90QWRkQm9yZGVyID0gKGNoZWNrRGl2Lm9mZnNldFRvcCAhPT0gNSk7
CgkJdGhpcy5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxscyA9ICh0ZC5vZmZzZXRUb3AgPT09
IDUpOwoKCQljaGVja0Rpdi5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CgkJY2hlY2tEaXYuc3R5
bGUudG9wID0gIjIwcHgiOwoKCQkvLyBzYWZhcmkgc3VidHJhY3RzIHBhcmVudCBib3JkZXIgd2lk
dGggaGVyZSB3aGljaCBpcyA1cHgKCQl0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbiA9IChjaGVj
a0Rpdi5vZmZzZXRUb3AgPT09IDIwIHx8IGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gMTUpOwoJCWNo
ZWNrRGl2LnN0eWxlLnBvc2l0aW9uID0gY2hlY2tEaXYuc3R5bGUudG9wID0gIiI7CgoJCWlubmVy
RGl2LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CgkJaW5uZXJEaXYuc3R5bGUucG9zaXRpb24g
PSAicmVsYXRpdmUiOwoKCQl0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJs
ZSA9IChjaGVja0Rpdi5vZmZzZXRUb3AgPT09IC01KTsKCgkJdGhpcy5kb2VzTm90SW5jbHVkZU1h
cmdpbkluQm9keU9mZnNldCA9IChib2R5Lm9mZnNldFRvcCAhPT0gYm9keU1hcmdpblRvcCk7CgoJ
CWJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOwoJCWpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6
ZSA9IGpRdWVyeS5ub29wOwoJfSwKCglib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKCQl2
YXIgdG9wID0gYm9keS5vZmZzZXRUb3AsCgkJCWxlZnQgPSBib2R5Lm9mZnNldExlZnQ7CgoJCWpR
dWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSgpOwoKCQlpZiAoIGpRdWVyeS5vZmZzZXQuZG9lc05vdElu
Y2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgKSB7CgkJCXRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5
LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAwOwoJCQlsZWZ0ICs9IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CgkJfQoKCQlyZXR1cm4geyB0b3A6
IHRvcCwgbGVmdDogbGVmdCB9OwoJfSwKCglzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRp
b25zLCBpICkgewoJCXZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIg
KTsKCgkJLy8gc2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZl
biBvbiBzdGF0aWMgZWxlbQoJCWlmICggcG9zaXRpb24gPT09ICJzdGF0aWMiICkgewoJCQllbGVt
LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCQl9CgoJCXZhciBjdXJFbGVtID0galF1ZXJ5
KCBlbGVtICksCgkJCWN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCksCgkJCWN1ckNTU1RvcCA9
IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICksCgkJCWN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBl
bGVtLCAibGVmdCIgKSwKCQkJY2FsY3VsYXRlUG9zaXRpb24gPSAocG9zaXRpb24gPT09ICJhYnNv
bHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIpICYmIGpRdWVyeS5pbkFycmF5KCJhdXRvIiwg
W2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCgkJCXByb3BzID0ge30sIGN1clBvc2l0aW9u
ID0ge30sIGN1clRvcCwgY3VyTGVmdDsKCgkJLy8gbmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0
ZSBwb3NpdGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMg
ZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCgkJaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKCQkJ
Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CgkJCWN1clRvcCA9IGN1clBvc2l0aW9u
LnRvcDsKCQkJY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CgkJfSBlbHNlIHsKCQkJY3VyVG9w
ID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQo
IGN1ckNTU0xlZnQgKSB8fCAwOwoJCX0KCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9u
cyApICkgewoJCQlvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsK
CQl9CgoJCWlmIChvcHRpb25zLnRvcCAhPSBudWxsKSB7CgkJCXByb3BzLnRvcCA9IChvcHRpb25z
LnRvcCAtIGN1ck9mZnNldC50b3ApICsgY3VyVG9wOwoJCX0KCQlpZiAob3B0aW9ucy5sZWZ0ICE9
IG51bGwpIHsKCQkJcHJvcHMubGVmdCA9IChvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCkg
KyBjdXJMZWZ0OwoJCX0KCgkJaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CgkJCW9wdGlvbnMu
dXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKCQl9IGVsc2UgewoJCQljdXJFbGVtLmNzcyggcHJv
cHMgKTsKCQl9Cgl9Cn07CgoKalF1ZXJ5LmZuLmV4dGVuZCh7Cglwb3NpdGlvbjogZnVuY3Rpb24o
KSB7CgkJaWYgKCAhdGhpc1swXSApIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQl2YXIgZWxlbSA9
IHRoaXNbMF0sCgoJCS8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50CgkJb2Zmc2V0UGFyZW50ID0g
dGhpcy5vZmZzZXRQYXJlbnQoKSwKCgkJLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwoJCW9mZnNldCAg
ICAgICA9IHRoaXMub2Zmc2V0KCksCgkJcGFyZW50T2Zmc2V0ID0gcnJvb3QudGVzdChvZmZzZXRQ
YXJlbnRbMF0ubm9kZU5hbWUpID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6IG9mZnNldFBhcmVudC5v
ZmZzZXQoKTsKCgkJLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCgkJLy8gbm90ZTogd2hlbiBh
biBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5kIG1hcmdpbkxlZnQK
CQkvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNhdXNpbmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3Jy
ZWN0bHkgYmUgMAoJCW9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwg
Im1hcmdpblRvcCIpICkgfHwgMDsKCQlvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0KCBqUXVlcnku
Y3NzKGVsZW0sICJtYXJnaW5MZWZ0IikgKSB8fCAwOwoKCQkvLyBBZGQgb2Zmc2V0UGFyZW50IGJv
cmRlcnMKCQlwYXJlbnRPZmZzZXQudG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNl
dFBhcmVudFswXSwgImJvcmRlclRvcFdpZHRoIikgKSB8fCAwOwoJCXBhcmVudE9mZnNldC5sZWZ0
ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyTGVmdFdp
ZHRoIikgKSB8fCAwOwoKCQkvLyBTdWJ0cmFjdCB0aGUgdHdvIG9mZnNldHMKCQlyZXR1cm4gewoJ
CQl0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCgkJCWxlZnQ6IG9mZnNldC5s
ZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKCQl9OwoJfSwKCglvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9u
KCkgewoJCXJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKCQkJdmFyIG9mZnNldFBhcmVudCA9
IHRoaXMub2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CgkJCXdoaWxlICggb2Zmc2V0UGFy
ZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQubm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mo
b2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRpYyIpICkgewoJCQkJb2Zmc2V0UGFy
ZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKCQkJfQoJCQlyZXR1cm4gb2Zmc2V0UGFy
ZW50OwoJCX0pOwoJfQp9KTsKCgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1l
dGhvZHMKalF1ZXJ5LmVhY2goIFsiTGVmdCIsICJUb3AiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
Cgl2YXIgbWV0aG9kID0gInNjcm9sbCIgKyBuYW1lOwoKCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBm
dW5jdGlvbiggdmFsICkgewoJCXZhciBlbGVtLCB3aW47CgoJCWlmICggdmFsID09PSB1bmRlZmlu
ZWQgKSB7CgkJCWVsZW0gPSB0aGlzWyAwIF07CgoJCQlpZiAoICFlbGVtICkgewoJCQkJcmV0dXJu
IG51bGw7CgkJCX0KCgkJCXdpbiA9IGdldFdpbmRvdyggZWxlbSApOwoKCQkJLy8gUmV0dXJuIHRo
ZSBzY3JvbGwgb2Zmc2V0CgkJCXJldHVybiB3aW4gPyAoInBhZ2VYT2Zmc2V0IiBpbiB3aW4pID8g
d2luWyBpID8gInBhZ2VZT2Zmc2V0IiA6ICJwYWdlWE9mZnNldCIgXSA6CgkJCQlqUXVlcnkuc3Vw
cG9ydC5ib3hNb2RlbCAmJiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSB8
fAoJCQkJCXdpbi5kb2N1bWVudC5ib2R5WyBtZXRob2QgXSA6CgkJCQllbGVtWyBtZXRob2QgXTsK
CQl9CgoJCS8vIFNldCB0aGUgc2Nyb2xsIG9mZnNldAoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CgkJCXdpbiA9IGdldFdpbmRvdyggdGhpcyApOwoKCQkJaWYgKCB3aW4gKSB7CgkJCQl3
aW4uc2Nyb2xsVG8oCgkJCQkJIWkgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbExlZnQoKSwK
CQkJCQkgaSA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKCkKCQkJCSk7CgoJCQl9IGVs
c2UgewoJCQkJdGhpc1sgbWV0aG9kIF0gPSB2YWw7CgkJCX0KCQl9KTsKCX07Cn0pOwoKZnVuY3Rp
b24gZ2V0V2luZG93KCBlbGVtICkgewoJcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8K
CQllbGVtIDoKCQllbGVtLm5vZGVUeXBlID09PSA5ID8KCQkJZWxlbS5kZWZhdWx0VmlldyB8fCBl
bGVtLnBhcmVudFdpbmRvdyA6CgkJCWZhbHNlOwp9CgoKCgovLyBDcmVhdGUgaW5uZXJIZWlnaHQs
IGlubmVyV2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKalF1ZXJ5LmVh
Y2goWyAiSGVpZ2h0IiwgIldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCgl2YXIgdHlw
ZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKCgkvLyBpbm5lckhlaWdodCBhbmQgaW5uZXJXaWR0aAoJ
alF1ZXJ5LmZuWyJpbm5lciIgKyBuYW1lXSA9IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzWzBd
ID8KCQkJcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggdGhpc1swXSwgdHlwZSwgInBhZGRpbmciICkg
KSA6CgkJCW51bGw7Cgl9OwoKCS8vIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoCglqUXVlcnku
Zm5bIm91dGVyIiArIG5hbWVdID0gZnVuY3Rpb24oIG1hcmdpbiApIHsKCQlyZXR1cm4gdGhpc1sw
XSA/CgkJCXBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIHRoaXNbMF0sIHR5cGUsIG1hcmdpbiA/ICJt
YXJnaW4iIDogImJvcmRlciIgKSApIDoKCQkJbnVsbDsKCX07CgoJalF1ZXJ5LmZuWyB0eXBlIF0g
PSBmdW5jdGlvbiggc2l6ZSApIHsKCQkvLyBHZXQgd2luZG93IHdpZHRoIG9yIGhlaWdodAoJCXZh
ciBlbGVtID0gdGhpc1swXTsKCQlpZiAoICFlbGVtICkgewoJCQlyZXR1cm4gc2l6ZSA9PSBudWxs
ID8gbnVsbCA6IHRoaXM7CgkJfQoKCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzaXplICkgKSB7
CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CgkJCQl2YXIgc2VsZiA9IGpRdWVy
eSggdGhpcyApOwoJCQkJc2VsZlsgdHlwZSBdKCBzaXplLmNhbGwoIHRoaXMsIGksIHNlbGZbIHR5
cGUgXSgpICkgKTsKCQkJfSk7CgkJfQoKCQlpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkg
ewoJCQkvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9j
dW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtzIHZzIFN0YW5kYXJkcyBtb2RlCgkJCS8vIDNy
ZCBjb25kaXRpb24gYWxsb3dzIE5va2lhIHN1cHBvcnQsIGFzIGl0IHN1cHBvcnRzIHRoZSBkb2NF
bGVtIHByb3AgYnV0IG5vdCBDU1MxQ29tcGF0CgkJCXZhciBkb2NFbGVtUHJvcCA9IGVsZW0uZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKCQkJcmV0dXJuIGVsZW0u
ZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiICYmIGRvY0VsZW1Qcm9wIHx8CgkJ
CQllbGVtLmRvY3VtZW50LmJvZHlbICJjbGllbnQiICsgbmFtZSBdIHx8IGRvY0VsZW1Qcm9wOwoK
CQkvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CgkJfSBlbHNlIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gOSApIHsKCQkJLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNl
dFtXaWR0aC9IZWlnaHRdLCB3aGljaGV2ZXIgaXMgZ3JlYXRlcgoJCQlyZXR1cm4gTWF0aC5tYXgo
CgkJCQllbGVtLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IiArIG5hbWVdLAoJCQkJZWxlbS5ib2R5
WyJzY3JvbGwiICsgbmFtZV0sIGVsZW0uZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiICsgbmFtZV0s
CgkJCQllbGVtLmJvZHlbIm9mZnNldCIgKyBuYW1lXSwgZWxlbS5kb2N1bWVudEVsZW1lbnRbIm9m
ZnNldCIgKyBuYW1lXQoJCQkpOwoKCQkvLyBHZXQgb3Igc2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0
aGUgZWxlbWVudAoJCX0gZWxzZSBpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHsKCQkJdmFyIG9y
aWcgPSBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlICksCgkJCQlyZXQgPSBwYXJzZUZsb2F0KCBvcmln
ICk7CgoJCQlyZXR1cm4galF1ZXJ5LmlzTmFOKCByZXQgKSA/IG9yaWcgOiByZXQ7CgoJCS8vIFNl
dCB0aGUgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50IChkZWZhdWx0IHRvIHBpeGVscyBp
ZiB2YWx1ZSBpcyB1bml0bGVzcykKCQl9IGVsc2UgewoJCQlyZXR1cm4gdGhpcy5jc3MoIHR5cGUs
IHR5cGVvZiBzaXplID09PSAic3RyaW5nIiA/IHNpemUgOiBzaXplICsgInB4IiApOwoJCX0KCX07
Cgp9KTsKCgp3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cn0pKHdpbmRvdyk7Cl8Q
D3RleHQvamF2YXNjcmlwdNQFBgcILC0uL18QR2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVh
c2VzLzEuNC9saWIvanF1ZXJ5L3VpL2pzL2pxdWVyeS51aS5jb3JlLmpzTxEEImJwbGlzdDAw1AEC
AwQFBmJjWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAbMTJI
SUpLTE1OT1BRUlNUVVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMk
MTBSJDJSJDdSJDNTJDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagByA
BYAbgAYQAdMjECQlJidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QR2h0dHA6Ly9mbHVpZHBy
b2plY3Qub3JnL3JlbGVhc2VzLzEuNC9saWIvanF1ZXJ5L3VpL2pzL2pxdWVyeS51aS5jb3JlLmpz
0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr0q
2BDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9A
QUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1v
ZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBh
Y2hlLzIuMi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGyI0ZTA2NzktMWZiMi00YWYz
M2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIg
MjAxNCAyMDo1MDo1NCBHTVRVYnl0ZXNUODExNFVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEf
sl8QD3RleHQvamF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQ
VVJMUmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291
cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCi
AKUApwCpAKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BKAEtATgBQQFHAUoBUAFZAWIB
ZAFrAXMBfgGHAYkBiwGNAY8BkQGTAZUBlwGgAaIBpAGmAagBqgGsAa4BsAGyAbkBxgHLAdkB3gHs
AfsCBgIfAjECTwJvAo8ClQKaAqACpQKyArUCuALKAs8C4wLnAvsDCQMbAx4DNAAAAAAAAAIBAAAA
AAAAAGYAAAAAAAAAAAAAAAAAAAM2TxEfsi8qIQogKiBqUXVlcnkgVUkgMS44LjEyCiAqCiAqIENv
cHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICog
RHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAq
IGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9V
SQogKi8KKGZ1bmN0aW9uKCAkLCB1bmRlZmluZWQgKSB7CgovLyBwcmV2ZW50IGR1cGxpY2F0ZSBs
b2FkaW5nCi8vIHRoaXMgaXMgb25seSBhIHByb2JsZW0gYmVjYXVzZSB3ZSBwcm94eSBleGlzdGlu
ZyBmdW5jdGlvbnMKLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gZG91YmxlIHByb3h5IHRoZW0KJC51
aSA9ICQudWkgfHwge307CmlmICggJC51aS52ZXJzaW9uICkgewoJcmV0dXJuOwp9CgokLmV4dGVu
ZCggJC51aSwgewoJdmVyc2lvbjogIjEuOC4xMiIsCgoJa2V5Q29kZTogewoJCUFMVDogMTgsCgkJ
QkFDS1NQQUNFOiA4LAoJCUNBUFNfTE9DSzogMjAsCgkJQ09NTUE6IDE4OCwKCQlDT01NQU5EOiA5
MSwKCQlDT01NQU5EX0xFRlQ6IDkxLCAvLyBDT01NQU5ECgkJQ09NTUFORF9SSUdIVDogOTMsCgkJ
Q09OVFJPTDogMTcsCgkJREVMRVRFOiA0NiwKCQlET1dOOiA0MCwKCQlFTkQ6IDM1LAoJCUVOVEVS
OiAxMywKCQlFU0NBUEU6IDI3LAoJCUhPTUU6IDM2LAoJCUlOU0VSVDogNDUsCgkJTEVGVDogMzcs
CgkJTUVOVTogOTMsIC8vIENPTU1BTkRfUklHSFQKCQlOVU1QQURfQUREOiAxMDcsCgkJTlVNUEFE
X0RFQ0lNQUw6IDExMCwKCQlOVU1QQURfRElWSURFOiAxMTEsCgkJTlVNUEFEX0VOVEVSOiAxMDgs
CgkJTlVNUEFEX01VTFRJUExZOiAxMDYsCgkJTlVNUEFEX1NVQlRSQUNUOiAxMDksCgkJUEFHRV9E
T1dOOiAzNCwKCQlQQUdFX1VQOiAzMywKCQlQRVJJT0Q6IDE5MCwKCQlSSUdIVDogMzksCgkJU0hJ
RlQ6IDE2LAoJCVNQQUNFOiAzMiwKCQlUQUI6IDksCgkJVVA6IDM4LAoJCVdJTkRPV1M6IDkxIC8v
IENPTU1BTkQKCX0KfSk7CgovLyBwbHVnaW5zCiQuZm4uZXh0ZW5kKHsKCV9mb2N1czogJC5mbi5m
b2N1cywKCWZvY3VzOiBmdW5jdGlvbiggZGVsYXksIGZuICkgewoJCXJldHVybiB0eXBlb2YgZGVs
YXkgPT09ICJudW1iZXIiID8KCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGVsZW0g
PSB0aGlzOwoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkkKCBlbGVtICkuZm9jdXMo
KTsKCQkJCQlpZiAoIGZuICkgewoJCQkJCQlmbi5jYWxsKCBlbGVtICk7CgkJCQkJfQoJCQkJfSwg
ZGVsYXkgKTsKCQkJfSkgOgoJCQl0aGlzLl9mb2N1cy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
Cgl9LAoKCXNjcm9sbFBhcmVudDogZnVuY3Rpb24oKSB7CgkJdmFyIHNjcm9sbFBhcmVudDsKCQlp
ZiAoKCQuYnJvd3Nlci5tc2llICYmICgvKHN0YXRpY3xyZWxhdGl2ZSkvKS50ZXN0KHRoaXMuY3Nz
KCdwb3NpdGlvbicpKSkgfHwgKC9hYnNvbHV0ZS8pLnRlc3QodGhpcy5jc3MoJ3Bvc2l0aW9uJykp
KSB7CgkJCXNjcm9sbFBhcmVudCA9IHRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpIHsK
CQkJCXJldHVybiAoLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvKS50ZXN0KCQuY3VyQ1NTKHRo
aXMsJ3Bvc2l0aW9uJywxKSkgJiYgKC8oYXV0b3xzY3JvbGwpLykudGVzdCgkLmN1ckNTUyh0aGlz
LCdvdmVyZmxvdycsMSkrJC5jdXJDU1ModGhpcywnb3ZlcmZsb3cteScsMSkrJC5jdXJDU1ModGhp
cywnb3ZlcmZsb3cteCcsMSkpOwoJCQl9KS5lcSgwKTsKCQl9IGVsc2UgewoJCQlzY3JvbGxQYXJl
bnQgPSB0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gKC8oYXV0
b3xzY3JvbGwpLykudGVzdCgkLmN1ckNTUyh0aGlzLCdvdmVyZmxvdycsMSkrJC5jdXJDU1ModGhp
cywnb3ZlcmZsb3cteScsMSkrJC5jdXJDU1ModGhpcywnb3ZlcmZsb3cteCcsMSkpOwoJCQl9KS5l
cSgwKTsKCQl9CgoJCXJldHVybiAoL2ZpeGVkLykudGVzdCh0aGlzLmNzcygncG9zaXRpb24nKSkg
fHwgIXNjcm9sbFBhcmVudC5sZW5ndGggPyAkKGRvY3VtZW50KSA6IHNjcm9sbFBhcmVudDsKCX0s
CgoJekluZGV4OiBmdW5jdGlvbiggekluZGV4ICkgewoJCWlmICggekluZGV4ICE9PSB1bmRlZmlu
ZWQgKSB7CgkJCXJldHVybiB0aGlzLmNzcyggInpJbmRleCIsIHpJbmRleCApOwoJCX0KCgkJaWYg
KCB0aGlzLmxlbmd0aCApIHsKCQkJdmFyIGVsZW0gPSAkKCB0aGlzWyAwIF0gKSwgcG9zaXRpb24s
IHZhbHVlOwoJCQl3aGlsZSAoIGVsZW0ubGVuZ3RoICYmIGVsZW1bIDAgXSAhPT0gZG9jdW1lbnQg
KSB7CgkJCQkvLyBJZ25vcmUgei1pbmRleCBpZiBwb3NpdGlvbiBpcyBzZXQgdG8gYSB2YWx1ZSB3
aGVyZSB6LWluZGV4IGlzIGlnbm9yZWQgYnkgdGhlIGJyb3dzZXIKCQkJCS8vIFRoaXMgbWFrZXMg
YmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycwoJCQkJ
Ly8gV2ViS2l0IGFsd2F5cyByZXR1cm5zIGF1dG8gaWYgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25l
ZAoJCQkJcG9zaXRpb24gPSBlbGVtLmNzcyggInBvc2l0aW9uIiApOwoJCQkJaWYgKCBwb3NpdGlv
biA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gInJlbGF0aXZlIiB8fCBwb3NpdGlvbiA9
PT0gImZpeGVkIiApIHsKCQkJCQkvLyBJRSByZXR1cm5zIDAgd2hlbiB6SW5kZXggaXMgbm90IHNw
ZWNpZmllZAoJCQkJCS8vIG90aGVyIGJyb3dzZXJzIHJldHVybiBhIHN0cmluZwoJCQkJCS8vIHdl
IGlnbm9yZSB0aGUgY2FzZSBvZiBuZXN0ZWQgZWxlbWVudHMgd2l0aCBhbiBleHBsaWNpdCB2YWx1
ZSBvZiAwCgkJCQkJLy8gPGRpdiBzdHlsZT0iei1pbmRleDogLTEwOyI+PGRpdiBzdHlsZT0iei1p
bmRleDogMDsiPjwvZGl2PjwvZGl2PgoJCQkJCXZhbHVlID0gcGFyc2VJbnQoIGVsZW0uY3NzKCAi
ekluZGV4IiApLCAxMCApOwoJCQkJCWlmICggIWlzTmFOKCB2YWx1ZSApICYmIHZhbHVlICE9PSAw
ICkgewoJCQkJCQlyZXR1cm4gdmFsdWU7CgkJCQkJfQoJCQkJfQoJCQkJZWxlbSA9IGVsZW0ucGFy
ZW50KCk7CgkJCX0KCQl9CgoJCXJldHVybiAwOwoJfSwKCglkaXNhYmxlU2VsZWN0aW9uOiBmdW5j
dGlvbigpIHsKCQlyZXR1cm4gdGhpcy5iaW5kKCAoICQuc3VwcG9ydC5zZWxlY3RzdGFydCA/ICJz
ZWxlY3RzdGFydCIgOiAibW91c2Vkb3duIiApICsKCQkJIi51aS1kaXNhYmxlU2VsZWN0aW9uIiwg
ZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJfSk7Cgl9
LAoKCWVuYWJsZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMudW5iaW5kKCAi
LnVpLWRpc2FibGVTZWxlY3Rpb24iICk7Cgl9Cn0pOwoKJC5lYWNoKCBbICJXaWR0aCIsICJIZWln
aHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewoJdmFyIHNpZGUgPSBuYW1lID09PSAiV2lkdGgi
ID8gWyAiTGVmdCIsICJSaWdodCIgXSA6IFsgIlRvcCIsICJCb3R0b20iIF0sCgkJdHlwZSA9IG5h
bWUudG9Mb3dlckNhc2UoKSwKCQlvcmlnID0gewoJCQlpbm5lcldpZHRoOiAkLmZuLmlubmVyV2lk
dGgsCgkJCWlubmVySGVpZ2h0OiAkLmZuLmlubmVySGVpZ2h0LAoJCQlvdXRlcldpZHRoOiAkLmZu
Lm91dGVyV2lkdGgsCgkJCW91dGVySGVpZ2h0OiAkLmZuLm91dGVySGVpZ2h0CgkJfTsKCglmdW5j
dGlvbiByZWR1Y2UoIGVsZW0sIHNpemUsIGJvcmRlciwgbWFyZ2luICkgewoJCSQuZWFjaCggc2lk
ZSwgZnVuY3Rpb24oKSB7CgkJCXNpemUgLT0gcGFyc2VGbG9hdCggJC5jdXJDU1MoIGVsZW0sICJw
YWRkaW5nIiArIHRoaXMsIHRydWUpICkgfHwgMDsKCQkJaWYgKCBib3JkZXIgKSB7CgkJCQlzaXpl
IC09IHBhcnNlRmxvYXQoICQuY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgi
LCB0cnVlKSApIHx8IDA7CgkJCX0KCQkJaWYgKCBtYXJnaW4gKSB7CgkJCQlzaXplIC09IHBhcnNl
RmxvYXQoICQuY3VyQ1NTKCBlbGVtLCAibWFyZ2luIiArIHRoaXMsIHRydWUpICkgfHwgMDsKCQkJ
fQoJCX0pOwoJCXJldHVybiBzaXplOwoJfQoKCSQuZm5bICJpbm5lciIgKyBuYW1lIF0gPSBmdW5j
dGlvbiggc2l6ZSApIHsKCQlpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIG9y
aWdbICJpbm5lciIgKyBuYW1lIF0uY2FsbCggdGhpcyApOwoJCX0KCgkJcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKCQkJJCggdGhpcyApLmNzcyggdHlwZSwgcmVkdWNlKCB0aGlzLCBzaXpl
ICkgKyAicHgiICk7CgkJfSk7Cgl9OwoKCSQuZm5bICJvdXRlciIgKyBuYW1lXSA9IGZ1bmN0aW9u
KCBzaXplLCBtYXJnaW4gKSB7CgkJaWYgKCB0eXBlb2Ygc2l6ZSAhPT0gIm51bWJlciIgKSB7CgkJ
CXJldHVybiBvcmlnWyAib3V0ZXIiICsgbmFtZSBdLmNhbGwoIHRoaXMsIHNpemUgKTsKCQl9CgoJ
CXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCSQoIHRoaXMpLmNzcyggdHlwZSwgcmVk
dWNlKCB0aGlzLCBzaXplLCB0cnVlLCBtYXJnaW4gKSArICJweCIgKTsKCQl9KTsKCX07Cn0pOwoK
Ly8gc2VsZWN0b3JzCmZ1bmN0aW9uIHZpc2libGUoIGVsZW1lbnQgKSB7CglyZXR1cm4gISQoIGVs
ZW1lbnQgKS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpIHsKCQlyZXR1cm4g
JC5jdXJDU1MoIHRoaXMsICJ2aXNpYmlsaXR5IiApID09PSAiaGlkZGVuIiB8fAoJCQkkLmV4cHIu
ZmlsdGVycy5oaWRkZW4oIHRoaXMgKTsKCX0pLmxlbmd0aDsKfQoKJC5leHRlbmQoICQuZXhwclsg
IjoiIF0sIHsKCWRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHsKCQlyZXR1cm4gISEk
LmRhdGEoIGVsZW0sIG1hdGNoWyAzIF0gKTsKCX0sCgoJZm9jdXNhYmxlOiBmdW5jdGlvbiggZWxl
bWVudCApIHsKCQl2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCks
CgkJCXRhYkluZGV4ID0gJC5hdHRyKCBlbGVtZW50LCAidGFiaW5kZXgiICk7CgkJaWYgKCAiYXJl
YSIgPT09IG5vZGVOYW1lICkgewoJCQl2YXIgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlLAoJCQkJ
bWFwTmFtZSA9IG1hcC5uYW1lLAoJCQkJaW1nOwoJCQlpZiAoICFlbGVtZW50LmhyZWYgfHwgIW1h
cE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJtYXAiICkgewoJCQkJcmV0
dXJuIGZhbHNlOwoJCQl9CgkJCWltZyA9ICQoICJpbWdbdXNlbWFwPSMiICsgbWFwTmFtZSArICJd
IiApWzBdOwoJCQlyZXR1cm4gISFpbWcgJiYgdmlzaWJsZSggaW1nICk7CgkJfQoJCXJldHVybiAo
IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVzdCggbm9kZU5hbWUgKQoJ
CQk/ICFlbGVtZW50LmRpc2FibGVkCgkJCTogImEiID09IG5vZGVOYW1lCgkJCQk/IGVsZW1lbnQu
aHJlZiB8fCAhaXNOYU4oIHRhYkluZGV4ICkKCQkJCTogIWlzTmFOKCB0YWJJbmRleCApKQoJCQkv
LyB0aGUgZWxlbWVudCBhbmQgYWxsIG9mIGl0cyBhbmNlc3RvcnMgbXVzdCBiZSB2aXNpYmxlCgkJ
CSYmIHZpc2libGUoIGVsZW1lbnQgKTsKCX0sCgoJdGFiYmFibGU6IGZ1bmN0aW9uKCBlbGVtZW50
ICkgewoJCXZhciB0YWJJbmRleCA9ICQuYXR0ciggZWxlbWVudCwgInRhYmluZGV4IiApOwoJCXJl
dHVybiAoIGlzTmFOKCB0YWJJbmRleCApIHx8IHRhYkluZGV4ID49IDAgKSAmJiAkKCBlbGVtZW50
ICkuaXMoICI6Zm9jdXNhYmxlIiApOwoJfQp9KTsKCi8vIHN1cHBvcnQKJChmdW5jdGlvbigpIHsK
CXZhciBib2R5ID0gZG9jdW1lbnQuYm9keSwKCQlkaXYgPSBib2R5LmFwcGVuZENoaWxkKCBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CgoJJC5leHRlbmQoIGRpdi5zdHls
ZSwgewoJCW1pbkhlaWdodDogIjEwMHB4IiwKCQloZWlnaHQ6ICJhdXRvIiwKCQlwYWRkaW5nOiAw
LAoJCWJvcmRlcldpZHRoOiAwCgl9KTsKCgkkLnN1cHBvcnQubWluSGVpZ2h0ID0gZGl2Lm9mZnNl
dEhlaWdodCA9PT0gMTAwOwoJJC5zdXBwb3J0LnNlbGVjdHN0YXJ0ID0gIm9uc2VsZWN0c3RhcnQi
IGluIGRpdjsKCgkvLyBzZXQgZGlzcGxheSB0byBub25lIHRvIGF2b2lkIGEgbGF5b3V0IGJ1ZyBp
biBJRQoJLy8gaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC80MDE0Cglib2R5LnJlbW92ZUNo
aWxkKCBkaXYgKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwp9KTsKCgoKCgovLyBkZXByZWNhdGVk
CiQuZXh0ZW5kKCAkLnVpLCB7CgkvLyAkLnVpLnBsdWdpbiBpcyBkZXByZWNhdGVkLiAgVXNlIHRo
ZSBwcm94eSBwYXR0ZXJuIGluc3RlYWQuCglwbHVnaW46IHsKCQlhZGQ6IGZ1bmN0aW9uKCBtb2R1
bGUsIG9wdGlvbiwgc2V0ICkgewoJCQl2YXIgcHJvdG8gPSAkLnVpWyBtb2R1bGUgXS5wcm90b3R5
cGU7CgkJCWZvciAoIHZhciBpIGluIHNldCApIHsKCQkJCXByb3RvLnBsdWdpbnNbIGkgXSA9IHBy
b3RvLnBsdWdpbnNbIGkgXSB8fCBbXTsKCQkJCXByb3RvLnBsdWdpbnNbIGkgXS5wdXNoKCBbIG9w
dGlvbiwgc2V0WyBpIF0gXSApOwoJCQl9CgkJfSwKCQljYWxsOiBmdW5jdGlvbiggaW5zdGFuY2Us
IG5hbWUsIGFyZ3MgKSB7CgkJCXZhciBzZXQgPSBpbnN0YW5jZS5wbHVnaW5zWyBuYW1lIF07CgkJ
CWlmICggIXNldCB8fCAhaW5zdGFuY2UuZWxlbWVudFsgMCBdLnBhcmVudE5vZGUgKSB7CgkJCQly
ZXR1cm47CgkJCX0KCQoJCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKysgKSB7
CgkJCQlpZiAoIGluc3RhbmNlLm9wdGlvbnNbIHNldFsgaSBdWyAwIF0gXSApIHsKCQkJCQlzZXRb
IGkgXVsgMSBdLmFwcGx5KCBpbnN0YW5jZS5lbGVtZW50LCBhcmdzICk7CgkJCQl9CgkJCX0KCQl9
Cgl9LAoJCgkvLyB3aWxsIGJlIGRlcHJlY2F0ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8galF1ZXJ5IDEu
NCAtIHVzZSBqUXVlcnkuY29udGFpbnMoKQoJY29udGFpbnM6IGZ1bmN0aW9uKCBhLCBiICkgewoJ
CXJldHVybiBkb2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/CgkJCWEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oIGIgKSAmIDE2IDoKCQkJYSAhPT0gYiAmJiBhLmNvbnRhaW5zKCBiICk7
Cgl9LAoJCgkvLyBvbmx5IHVzZWQgYnkgcmVzaXphYmxlCgloYXNTY3JvbGw6IGZ1bmN0aW9uKCBl
bCwgYSApIHsKCQoJCS8vSWYgb3ZlcmZsb3cgaXMgaGlkZGVuLCB0aGUgZWxlbWVudCBtaWdodCBo
YXZlIGV4dHJhIGNvbnRlbnQsIGJ1dCB0aGUgdXNlciB3YW50cyB0byBoaWRlIGl0CgkJaWYgKCAk
KCBlbCApLmNzcyggIm92ZXJmbG93IiApID09PSAiaGlkZGVuIikgewoJCQlyZXR1cm4gZmFsc2U7
CgkJfQoJCgkJdmFyIHNjcm9sbCA9ICggYSAmJiBhID09PSAibGVmdCIgKSA/ICJzY3JvbGxMZWZ0
IiA6ICJzY3JvbGxUb3AiLAoJCQloYXMgPSBmYWxzZTsKCQoJCWlmICggZWxbIHNjcm9sbCBdID4g
MCApIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCgkJLy8gVE9ETzogZGV0ZXJtaW5lIHdoaWNoIGNh
c2VzIGFjdHVhbGx5IGNhdXNlIHRoaXMgdG8gaGFwcGVuCgkJLy8gaWYgdGhlIGVsZW1lbnQgZG9l
c24ndCBoYXZlIHRoZSBzY3JvbGwgc2V0LCBzZWUgaWYgaXQncyBwb3NzaWJsZSB0bwoJCS8vIHNl
dCB0aGUgc2Nyb2xsCgkJZWxbIHNjcm9sbCBdID0gMTsKCQloYXMgPSAoIGVsWyBzY3JvbGwgXSA+
IDAgKTsKCQllbFsgc2Nyb2xsIF0gPSAwOwoJCXJldHVybiBoYXM7Cgl9LAoJCgkvLyB0aGVzZSBh
cmUgb2RkIGZ1bmN0aW9ucywgZml4IHRoZSBBUEkgb3IgbW92ZSBpbnRvIGluZGl2aWR1YWwgcGx1
Z2lucwoJaXNPdmVyQXhpczogZnVuY3Rpb24oIHgsIHJlZmVyZW5jZSwgc2l6ZSApIHsKCQkvL0Rl
dGVybWluZXMgd2hlbiB4IGNvb3JkaW5hdGUgaXMgb3ZlciAiYiIgZWxlbWVudCBheGlzCgkJcmV0
dXJuICggeCA+IHJlZmVyZW5jZSApICYmICggeCA8ICggcmVmZXJlbmNlICsgc2l6ZSApICk7Cgl9
LAoJaXNPdmVyOiBmdW5jdGlvbiggeSwgeCwgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoICkgewoJ
CS8vRGV0ZXJtaW5lcyB3aGVuIHgsIHkgY29vcmRpbmF0ZXMgaXMgb3ZlciAiYiIgZWxlbWVudAoJ
CXJldHVybiAkLnVpLmlzT3ZlckF4aXMoIHksIHRvcCwgaGVpZ2h0ICkgJiYgJC51aS5pc092ZXJB
eGlzKCB4LCBsZWZ0LCB3aWR0aCApOwoJfQp9KTsKCn0pKCBqUXVlcnkgKTsKXxAPdGV4dC9qYXZh
c2NyaXB01AUGBwgxMjM0XxBJaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2xp
Yi9qcXVlcnkvdWkvanMvanF1ZXJ5LnVpLndpZGdldC5qc08RBCRicGxpc3QwMNQBAgMEBQZiY1gk
dmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9Q
UVJTVFVWV1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3
UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHT
IxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEElodHRwOi8vZmx1aWRwcm9qZWN0Lm9y
Zy9yZWxlYXNlcy8xLjQvbGliL2pxdWVyeS91aS9qcy9qcXVlcnkudWkud2lkZ2V0Lmpz0iorLC1a
JGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALwdzKhDI0zM0
EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVG
gBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVk
VERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIu
Mi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGyI0ZTA2ODAtMWFkMS00YWYzM2QwMTNl
NDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAy
MDo1MDo1NSBHTVRVYnl0ZXNUNjg2NVVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEa0V8QD3Rl
eHQvamF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVz
cG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVz
cG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCp
AKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BKgEvAToBQwFJAUwBUgFbAWQBZgFtAXUB
gAGJAYsBjQGPAZEBkwGVAZcBmQGiAaQBpgGoAaoBrAGuAbABsgG0AbsByAHNAdsB4AHuAf0CCAIh
AjMCUQJxApEClwKcAqICpwK0ArcCugLMAtEC5QLpAv0DCwMdAyADNgAAAAAAAAIBAAAAAAAAAGYA
AAAAAAAAAAAAAAAAAAM4TxEa0S8qIQogKiBqUXVlcnkgVUkgV2lkZ2V0IDEuOC4xMgogKgogKiBD
b3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCiAq
IER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgog
KiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20v
VUkvV2lkZ2V0CiAqLwooZnVuY3Rpb24oICQsIHVuZGVmaW5lZCApIHsKCi8vIGpRdWVyeSAxLjQr
CmlmICggJC5jbGVhbkRhdGEgKSB7Cgl2YXIgX2NsZWFuRGF0YSA9ICQuY2xlYW5EYXRhOwoJJC5j
bGVhbkRhdGEgPSBmdW5jdGlvbiggZWxlbXMgKSB7CgkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAo
ZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CgkJCSQoIGVsZW0gKS50cmlnZ2VySGFu
ZGxlciggInJlbW92ZSIgKTsKCQl9CgkJX2NsZWFuRGF0YSggZWxlbXMgKTsKCX07Cn0gZWxzZSB7
Cgl2YXIgX3JlbW92ZSA9ICQuZm4ucmVtb3ZlOwoJJC5mbi5yZW1vdmUgPSBmdW5jdGlvbiggc2Vs
ZWN0b3IsIGtlZXBEYXRhICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWlm
ICggIWtlZXBEYXRhICkgewoJCQkJaWYgKCAhc2VsZWN0b3IgfHwgJC5maWx0ZXIoIHNlbGVjdG9y
LCBbIHRoaXMgXSApLmxlbmd0aCApIHsKCQkJCQkkKCAiKiIsIHRoaXMgKS5hZGQoIFsgdGhpcyBd
ICkuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJJCggdGhpcyApLnRyaWdnZXJIYW5kbGVyKCAicmVt
b3ZlIiApOwoJCQkJCX0pOwoJCQkJfQoJCQl9CgkJCXJldHVybiBfcmVtb3ZlLmNhbGwoICQodGhp
cyksIHNlbGVjdG9yLCBrZWVwRGF0YSApOwoJCX0pOwoJfTsKfQoKJC53aWRnZXQgPSBmdW5jdGlv
biggbmFtZSwgYmFzZSwgcHJvdG90eXBlICkgewoJdmFyIG5hbWVzcGFjZSA9IG5hbWUuc3BsaXQo
ICIuIiApWyAwIF0sCgkJZnVsbE5hbWU7CgluYW1lID0gbmFtZS5zcGxpdCggIi4iIClbIDEgXTsK
CWZ1bGxOYW1lID0gbmFtZXNwYWNlICsgIi0iICsgbmFtZTsKCglpZiAoICFwcm90b3R5cGUgKSB7
CgkJcHJvdG90eXBlID0gYmFzZTsKCQliYXNlID0gJC5XaWRnZXQ7Cgl9CgoJLy8gY3JlYXRlIHNl
bGVjdG9yIGZvciBwbHVnaW4KCSQuZXhwclsgIjoiIF1bIGZ1bGxOYW1lIF0gPSBmdW5jdGlvbigg
ZWxlbSApIHsKCQlyZXR1cm4gISEkLmRhdGEoIGVsZW0sIG5hbWUgKTsKCX07CgoJJFsgbmFtZXNw
YWNlIF0gPSAkWyBuYW1lc3BhY2UgXSB8fCB7fTsKCSRbIG5hbWVzcGFjZSBdWyBuYW1lIF0gPSBm
dW5jdGlvbiggb3B0aW9ucywgZWxlbWVudCApIHsKCQkvLyBhbGxvdyBpbnN0YW50aWF0aW9uIHdp
dGhvdXQgaW5pdGlhbGl6aW5nIGZvciBzaW1wbGUgaW5oZXJpdGFuY2UKCQlpZiAoIGFyZ3VtZW50
cy5sZW5ndGggKSB7CgkJCXRoaXMuX2NyZWF0ZVdpZGdldCggb3B0aW9ucywgZWxlbWVudCApOwoJ
CX0KCX07CgoJdmFyIGJhc2VQcm90b3R5cGUgPSBuZXcgYmFzZSgpOwoJLy8gd2UgbmVlZCB0byBt
YWtlIHRoZSBvcHRpb25zIGhhc2ggYSBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgbmV3IGluc3Rh
bmNlCgkvLyBvdGhlcndpc2Ugd2UnbGwgbW9kaWZ5IHRoZSBvcHRpb25zIGhhc2ggb24gdGhlIHBy
b3RvdHlwZSB0aGF0IHdlJ3JlCgkvLyBpbmhlcml0aW5nIGZyb20KLy8JJC5lYWNoKCBiYXNlUHJv
dG90eXBlLCBmdW5jdGlvbigga2V5LCB2YWwgKSB7Ci8vCQlpZiAoICQuaXNQbGFpbk9iamVjdCh2
YWwpICkgewovLwkJCWJhc2VQcm90b3R5cGVbIGtleSBdID0gJC5leHRlbmQoIHt9LCB2YWwgKTsK
Ly8JCX0KLy8JfSk7CgliYXNlUHJvdG90eXBlLm9wdGlvbnMgPSAkLmV4dGVuZCggdHJ1ZSwge30s
IGJhc2VQcm90b3R5cGUub3B0aW9ucyApOwoJJFsgbmFtZXNwYWNlIF1bIG5hbWUgXS5wcm90b3R5
cGUgPSAkLmV4dGVuZCggdHJ1ZSwgYmFzZVByb3RvdHlwZSwgewoJCW5hbWVzcGFjZTogbmFtZXNw
YWNlLAoJCXdpZGdldE5hbWU6IG5hbWUsCgkJd2lkZ2V0RXZlbnRQcmVmaXg6ICRbIG5hbWVzcGFj
ZSBdWyBuYW1lIF0ucHJvdG90eXBlLndpZGdldEV2ZW50UHJlZml4IHx8IG5hbWUsCgkJd2lkZ2V0
QmFzZUNsYXNzOiBmdWxsTmFtZQoJfSwgcHJvdG90eXBlICk7CgoJJC53aWRnZXQuYnJpZGdlKCBu
YW1lLCAkWyBuYW1lc3BhY2UgXVsgbmFtZSBdICk7Cn07CgokLndpZGdldC5icmlkZ2UgPSBmdW5j
dGlvbiggbmFtZSwgb2JqZWN0ICkgewoJJC5mblsgbmFtZSBdID0gZnVuY3Rpb24oIG9wdGlvbnMg
KSB7CgkJdmFyIGlzTWV0aG9kQ2FsbCA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiwKCQkJ
YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSwKCQkJcmV0
dXJuVmFsdWUgPSB0aGlzOwoKCQkvLyBhbGxvdyBtdWx0aXBsZSBoYXNoZXMgdG8gYmUgcGFzc2Vk
IG9uIGluaXQKCQlvcHRpb25zID0gIWlzTWV0aG9kQ2FsbCAmJiBhcmdzLmxlbmd0aCA/CgkJCSQu
ZXh0ZW5kLmFwcGx5KCBudWxsLCBbIHRydWUsIG9wdGlvbnMgXS5jb25jYXQoYXJncykgKSA6CgkJ
CW9wdGlvbnM7CgoJCS8vIHByZXZlbnQgY2FsbHMgdG8gaW50ZXJuYWwgbWV0aG9kcwoJCWlmICgg
aXNNZXRob2RDYWxsICYmIG9wdGlvbnMuY2hhckF0KCAwICkgPT09ICJfIiApIHsKCQkJcmV0dXJu
IHJldHVyblZhbHVlOwoJCX0KCgkJaWYgKCBpc01ldGhvZENhbGwgKSB7CgkJCXRoaXMuZWFjaChm
dW5jdGlvbigpIHsKCQkJCXZhciBpbnN0YW5jZSA9ICQuZGF0YSggdGhpcywgbmFtZSApLAoJCQkJ
CW1ldGhvZFZhbHVlID0gaW5zdGFuY2UgJiYgJC5pc0Z1bmN0aW9uKCBpbnN0YW5jZVtvcHRpb25z
XSApID8KCQkJCQkJaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKSA6
CgkJCQkJCWluc3RhbmNlOwoJCQkJLy8gVE9ETzogYWRkIHRoaXMgYmFjayBpbiAxLjkgYW5kIHVz
ZSAkLmVycm9yKCkgKHNlZSAjNTk3MikKLy8JCQkJaWYgKCAhaW5zdGFuY2UgKSB7Ci8vCQkJCQl0
aHJvdyAiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiICsgbmFtZSArICIgcHJpb3IgdG8gaW5pdGlh
bGl6YXRpb247ICIgKwovLwkJCQkJCSJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIgKyBvcHRp
b25zICsgIiciOwovLwkJCQl9Ci8vCQkJCWlmICggISQuaXNGdW5jdGlvbiggaW5zdGFuY2Vbb3B0
aW9uc10gKSApIHsKLy8JCQkJCXRocm93ICJubyBzdWNoIG1ldGhvZCAnIiArIG9wdGlvbnMgKyAi
JyBmb3IgIiArIG5hbWUgKyAiIHdpZGdldCBpbnN0YW5jZSI7Ci8vCQkJCX0KLy8JCQkJdmFyIG1l
dGhvZFZhbHVlID0gaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTsK
CQkJCWlmICggbWV0aG9kVmFsdWUgIT09IGluc3RhbmNlICYmIG1ldGhvZFZhbHVlICE9PSB1bmRl
ZmluZWQgKSB7CgkJCQkJcmV0dXJuVmFsdWUgPSBtZXRob2RWYWx1ZTsKCQkJCQlyZXR1cm4gZmFs
c2U7CgkJCQl9CgkJCX0pOwoJCX0gZWxzZSB7CgkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJ
CXZhciBpbnN0YW5jZSA9ICQuZGF0YSggdGhpcywgbmFtZSApOwoJCQkJaWYgKCBpbnN0YW5jZSAp
IHsKCQkJCQlpbnN0YW5jZS5vcHRpb24oIG9wdGlvbnMgfHwge30gKS5faW5pdCgpOwoJCQkJfSBl
bHNlIHsKCQkJCQkkLmRhdGEoIHRoaXMsIG5hbWUsIG5ldyBvYmplY3QoIG9wdGlvbnMsIHRoaXMg
KSApOwoJCQkJfQoJCQl9KTsKCQl9CgoJCXJldHVybiByZXR1cm5WYWx1ZTsKCX07Cn07CgokLldp
ZGdldCA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkgewoJLy8gYWxsb3cgaW5zdGFudGlh
dGlvbiB3aXRob3V0IGluaXRpYWxpemluZyBmb3Igc2ltcGxlIGluaGVyaXRhbmNlCglpZiAoIGFy
Z3VtZW50cy5sZW5ndGggKSB7CgkJdGhpcy5fY3JlYXRlV2lkZ2V0KCBvcHRpb25zLCBlbGVtZW50
ICk7Cgl9Cn07CgokLldpZGdldC5wcm90b3R5cGUgPSB7Cgl3aWRnZXROYW1lOiAid2lkZ2V0IiwK
CXdpZGdldEV2ZW50UHJlZml4OiAiIiwKCW9wdGlvbnM6IHsKCQlkaXNhYmxlZDogZmFsc2UKCX0s
CglfY3JlYXRlV2lkZ2V0OiBmdW5jdGlvbiggb3B0aW9ucywgZWxlbWVudCApIHsKCQkvLyAkLndp
ZGdldC5icmlkZ2Ugc3RvcmVzIHRoZSBwbHVnaW4gaW5zdGFuY2UsIGJ1dCB3ZSBkbyBpdCBhbnl3
YXkKCQkvLyBzbyB0aGF0IGl0J3Mgc3RvcmVkIGV2ZW4gYmVmb3JlIHRoZSBfY3JlYXRlIGZ1bmN0
aW9uIHJ1bnMKCQkkLmRhdGEoIGVsZW1lbnQsIHRoaXMud2lkZ2V0TmFtZSwgdGhpcyApOwoJCXRo
aXMuZWxlbWVudCA9ICQoIGVsZW1lbnQgKTsKCQl0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCggdHJ1
ZSwge30sCgkJCXRoaXMub3B0aW9ucywKCQkJdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLAoJCQlv
cHRpb25zICk7CgoJCXZhciBzZWxmID0gdGhpczsKCQl0aGlzLmVsZW1lbnQuYmluZCggInJlbW92
ZS4iICsgdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbigpIHsKCQkJc2VsZi5kZXN0cm95KCk7CgkJ
fSk7CgoJCXRoaXMuX2NyZWF0ZSgpOwoJCXRoaXMuX3RyaWdnZXIoICJjcmVhdGUiICk7CgkJdGhp
cy5faW5pdCgpOwoJfSwKCV9nZXRDcmVhdGVPcHRpb25zOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4g
JC5tZXRhZGF0YSAmJiAkLm1ldGFkYXRhLmdldCggdGhpcy5lbGVtZW50WzBdIClbIHRoaXMud2lk
Z2V0TmFtZSBdOwoJfSwKCV9jcmVhdGU6IGZ1bmN0aW9uKCkge30sCglfaW5pdDogZnVuY3Rpb24o
KSB7fSwKCglkZXN0cm95OiBmdW5jdGlvbigpIHsKCQl0aGlzLmVsZW1lbnQKCQkJLnVuYmluZCgg
Ii4iICsgdGhpcy53aWRnZXROYW1lICkKCQkJLnJlbW92ZURhdGEoIHRoaXMud2lkZ2V0TmFtZSAp
OwoJCXRoaXMud2lkZ2V0KCkKCQkJLnVuYmluZCggIi4iICsgdGhpcy53aWRnZXROYW1lICkKCQkJ
LnJlbW92ZUF0dHIoICJhcmlhLWRpc2FibGVkIiApCgkJCS5yZW1vdmVDbGFzcygKCQkJCXRoaXMu
d2lkZ2V0QmFzZUNsYXNzICsgIi1kaXNhYmxlZCAiICsKCQkJCSJ1aS1zdGF0ZS1kaXNhYmxlZCIg
KTsKCX0sCgoJd2lkZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5lbGVtZW50OwoJfSwK
CglvcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCXZhciBvcHRpb25zID0ga2V5OwoK
CQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgKSB7CgkJCS8vIGRvbid0IHJldHVybiBhIHJl
ZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgaGFzaAoJCQlyZXR1cm4gJC5leHRlbmQoIHt9LCB0aGlz
Lm9wdGlvbnMgKTsKCQl9CgoJCWlmICAodHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSB7CgkJCWlm
ICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiB0aGlzLm9wdGlvbnNbIGtleSBd
OwoJCQl9CgkJCW9wdGlvbnMgPSB7fTsKCQkJb3B0aW9uc1sga2V5IF0gPSB2YWx1ZTsKCQl9CgoJ
CXRoaXMuX3NldE9wdGlvbnMoIG9wdGlvbnMgKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoJX3NldE9w
dGlvbnM6IGZ1bmN0aW9uKCBvcHRpb25zICkgewoJCXZhciBzZWxmID0gdGhpczsKCQkkLmVhY2go
IG9wdGlvbnMsIGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCQlzZWxmLl9zZXRPcHRpb24oIGtl
eSwgdmFsdWUgKTsKCQl9KTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoJX3NldE9wdGlvbjogZnVuY3Rp
b24oIGtleSwgdmFsdWUgKSB7CgkJdGhpcy5vcHRpb25zWyBrZXkgXSA9IHZhbHVlOwoKCQlpZiAo
IGtleSA9PT0gImRpc2FibGVkIiApIHsKCQkJdGhpcy53aWRnZXQoKQoJCQkJWyB2YWx1ZSA/ICJh
ZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiXSgKCQkJCQl0aGlzLndpZGdldEJhc2VDbGFzcyArICIt
ZGlzYWJsZWQiICsgIiAiICsKCQkJCQkidWktc3RhdGUtZGlzYWJsZWQiICkKCQkJCS5hdHRyKCAi
YXJpYS1kaXNhYmxlZCIsIHZhbHVlICk7CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJZW5hYmxl
OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCAiZGlzYWJsZWQiLCBmYWxz
ZSApOwoJfSwKCWRpc2FibGU6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLl9zZXRPcHRpb24o
ICJkaXNhYmxlZCIsIHRydWUgKTsKCX0sCgoJX3RyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBldmVu
dCwgZGF0YSApIHsKCQl2YXIgY2FsbGJhY2sgPSB0aGlzLm9wdGlvbnNbIHR5cGUgXTsKCgkJZXZl
bnQgPSAkLkV2ZW50KCBldmVudCApOwoJCWV2ZW50LnR5cGUgPSAoIHR5cGUgPT09IHRoaXMud2lk
Z2V0RXZlbnRQcmVmaXggPwoJCQl0eXBlIDoKCQkJdGhpcy53aWRnZXRFdmVudFByZWZpeCArIHR5
cGUgKS50b0xvd2VyQ2FzZSgpOwoJCWRhdGEgPSBkYXRhIHx8IHt9OwoKCQkvLyBjb3B5IG9yaWdp
bmFsIGV2ZW50IHByb3BlcnRpZXMgb3ZlciB0byB0aGUgbmV3IGV2ZW50CgkJLy8gdGhpcyB3b3Vs
ZCBoYXBwZW4gaWYgd2UgY291bGQgY2FsbCAkLmV2ZW50LmZpeCBpbnN0ZWFkIG9mICQuRXZlbnQK
CQkvLyBidXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBmb3JjZSBhbiBldmVudCB0byBiZSBmaXhl
ZCBtdWx0aXBsZSB0aW1lcwoJCWlmICggZXZlbnQub3JpZ2luYWxFdmVudCApIHsKCQkJZm9yICgg
dmFyIGkgPSAkLmV2ZW50LnByb3BzLmxlbmd0aCwgcHJvcDsgaTsgKSB7CgkJCQlwcm9wID0gJC5l
dmVudC5wcm9wc1sgLS1pIF07CgkJCQlldmVudFsgcHJvcCBdID0gZXZlbnQub3JpZ2luYWxFdmVu
dFsgcHJvcCBdOwoJCQl9CgkJfQoKCQl0aGlzLmVsZW1lbnQudHJpZ2dlciggZXZlbnQsIGRhdGEg
KTsKCgkJcmV0dXJuICEoICQuaXNGdW5jdGlvbihjYWxsYmFjaykgJiYKCQkJY2FsbGJhY2suY2Fs
bCggdGhpcy5lbGVtZW50WzBdLCBldmVudCwgZGF0YSApID09PSBmYWxzZSB8fAoJCQlldmVudC5p
c0RlZmF1bHRQcmV2ZW50ZWQoKSApOwoJfQp9OwoKfSkoIGpRdWVyeSApOwpfEA90ZXh0L2phdmFz
Y3JpcHTUBQYHCDY3ODlfEEhodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvbGli
L2pxdWVyeS91aS9qcy9qcXVlcnkudWkubW91c2UuanNPEQQjYnBsaXN0MDDUAQIDBAUGYmNYJHZl
cnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QHQcIIigpMBsxMkhJSktMTU5PUFFS
U1RVVldYW1xdVSRudWxs3QkKCwwNDg8QERITFBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1Ik
M1MkMTFSJDhWJGNsYXNzUiQ0UiQ5UiQwUiQ1UiQxgAcQCBAHgAiAAhAAgBqAHIAFgBuABhAB0yMQ
JCUmJ1dOUy5iYXNlW05TLnJlbGF0aXZlgACABIADXxBIaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcv
cmVsZWFzZXMvMS40L2xpYi9qcXVlcnkvdWkvanMvanF1ZXJ5LnVpLm1vdXNlLmpz0iorLC1aJGNs
YXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr4rWhDI0zM0EDU+
R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVGgBGA
EoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERh
dGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4x
NSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGyI0ZTA2N2MtMTA5Zi00YWYzM2QwMTNlNDAw
Il8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAyMDo1
MDo1NCBHTVRVYnl0ZXNUNDI1NVVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEQn18QD3RleHQv
amF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVzcG9u
c2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVzcG9u
c2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCpAKsA
rQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BKQEuATkBQgFIAUsBUQFaAWMBZQFsAXQBfwGI
AYoBjAGOAZABkgGUAZYBmAGhAaMBpQGnAakBqwGtAa8BsQGzAboBxwHMAdoB3wHtAfwCBwIgAjIC
UAJwApAClgKbAqECpgKzArYCuQLLAtAC5ALoAvwDCgMcAx8DNQAAAAAAAAIBAAAAAAAAAGYAAAAA
AAAAAAAAAAAAAAM3TxEQny8qIQogKiBqUXVlcnkgVUkgTW91c2UgMS44LjEyCiAqCiAqIENvcHly
aWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVh
bCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqIGh0
dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9N
b3VzZQogKgogKiBEZXBlbmRzOgogKglqcXVlcnkudWkud2lkZ2V0LmpzCiAqLwooZnVuY3Rpb24o
ICQsIHVuZGVmaW5lZCApIHsKCiQud2lkZ2V0KCJ1aS5tb3VzZSIsIHsKCW9wdGlvbnM6IHsKCQlj
YW5jZWw6ICc6aW5wdXQsb3B0aW9uJywKCQlkaXN0YW5jZTogMSwKCQlkZWxheTogMAoJfSwKCV9t
b3VzZUluaXQ6IGZ1bmN0aW9uKCkgewoJCXZhciBzZWxmID0gdGhpczsKCgkJdGhpcy5lbGVtZW50
CgkJCS5iaW5kKCdtb3VzZWRvd24uJyt0aGlzLndpZGdldE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7
CgkJCQlyZXR1cm4gc2VsZi5fbW91c2VEb3duKGV2ZW50KTsKCQkJfSkKCQkJLmJpbmQoJ2NsaWNr
LicrdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbihldmVudCkgewoJCQkJaWYgKHRydWUgPT09ICQu
ZGF0YShldmVudC50YXJnZXQsIHNlbGYud2lkZ2V0TmFtZSArICcucHJldmVudENsaWNrRXZlbnQn
KSkgewoJCQkJICAgICQucmVtb3ZlRGF0YShldmVudC50YXJnZXQsIHNlbGYud2lkZ2V0TmFtZSAr
ICcucHJldmVudENsaWNrRXZlbnQnKTsKCQkJCQlldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRp
b24oKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0pOwoKCQl0aGlzLnN0YXJ0ZWQgPSBm
YWxzZTsKCX0sCgoJLy8gVE9ETzogbWFrZSBzdXJlIGRlc3Ryb3lpbmcgb25lIGluc3RhbmNlIG9m
IG1vdXNlIGRvZXNuJ3QgbWVzcyB3aXRoCgkvLyBvdGhlciBpbnN0YW5jZXMgb2YgbW91c2UKCV9t
b3VzZURlc3Ryb3k6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZWxlbWVudC51bmJpbmQoJy4nK3RoaXMu
d2lkZ2V0TmFtZSk7Cgl9LAoKCV9tb3VzZURvd246IGZ1bmN0aW9uKGV2ZW50KSB7CgkJLy8gZG9u
J3QgbGV0IG1vcmUgdGhhbiBvbmUgd2lkZ2V0IGhhbmRsZSBtb3VzZVN0YXJ0CgkJLy8gVE9ETzog
ZmlndXJlIG91dCB3aHkgd2UgaGF2ZSB0byB1c2Ugb3JpZ2luYWxFdmVudAoJCWV2ZW50Lm9yaWdp
bmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IHt9OwoJCWlmIChldmVudC5vcmlnaW5h
bEV2ZW50Lm1vdXNlSGFuZGxlZCkgeyByZXR1cm47IH0KCgkJLy8gd2UgbWF5IGhhdmUgbWlzc2Vk
IG1vdXNldXAgKG91dCBvZiB3aW5kb3cpCgkJKHRoaXMuX21vdXNlU3RhcnRlZCAmJiB0aGlzLl9t
b3VzZVVwKGV2ZW50KSk7CgoJCXRoaXMuX21vdXNlRG93bkV2ZW50ID0gZXZlbnQ7CgoJCXZhciBz
ZWxmID0gdGhpcywKCQkJYnRuSXNMZWZ0ID0gKGV2ZW50LndoaWNoID09IDEpLAoJCQllbElzQ2Fu
Y2VsID0gKHR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsID09ICJzdHJpbmciID8gJChldmVudC50
YXJnZXQpLnBhcmVudHMoKS5hZGQoZXZlbnQudGFyZ2V0KS5maWx0ZXIodGhpcy5vcHRpb25zLmNh
bmNlbCkubGVuZ3RoIDogZmFsc2UpOwoJCWlmICghYnRuSXNMZWZ0IHx8IGVsSXNDYW5jZWwgfHwg
IXRoaXMuX21vdXNlQ2FwdHVyZShldmVudCkpIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoKCQl0aGlz
Lm1vdXNlRGVsYXlNZXQgPSAhdGhpcy5vcHRpb25zLmRlbGF5OwoJCWlmICghdGhpcy5tb3VzZURl
bGF5TWV0KSB7CgkJCXRoaXMuX21vdXNlRGVsYXlUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CgkJCQlzZWxmLm1vdXNlRGVsYXlNZXQgPSB0cnVlOwoJCQl9LCB0aGlzLm9wdGlvbnMuZGVs
YXkpOwoJCX0KCgkJaWYgKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZXZlbnQpICYmIHRoaXMuX21v
dXNlRGVsYXlNZXQoZXZlbnQpKSB7CgkJCXRoaXMuX21vdXNlU3RhcnRlZCA9ICh0aGlzLl9tb3Vz
ZVN0YXJ0KGV2ZW50KSAhPT0gZmFsc2UpOwoJCQlpZiAoIXRoaXMuX21vdXNlU3RhcnRlZCkgewoJ
CQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoKCQkv
LyBDbGljayBldmVudCBtYXkgbmV2ZXIgaGF2ZSBmaXJlZCAoR2Vja28gJiBPcGVyYSkKCQlpZiAo
dHJ1ZSA9PT0gJC5kYXRhKGV2ZW50LnRhcmdldCwgdGhpcy53aWRnZXROYW1lICsgJy5wcmV2ZW50
Q2xpY2tFdmVudCcpKSB7CgkJCSQucmVtb3ZlRGF0YShldmVudC50YXJnZXQsIHRoaXMud2lkZ2V0
TmFtZSArICcucHJldmVudENsaWNrRXZlbnQnKTsKCQl9CgoJCS8vIHRoZXNlIGRlbGVnYXRlcyBh
cmUgcmVxdWlyZWQgdG8ga2VlcCBjb250ZXh0CgkJdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUgPSBm
dW5jdGlvbihldmVudCkgewoJCQlyZXR1cm4gc2VsZi5fbW91c2VNb3ZlKGV2ZW50KTsKCQl9OwoJ
CXRoaXMuX21vdXNlVXBEZWxlZ2F0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCXJldHVybiBzZWxm
Ll9tb3VzZVVwKGV2ZW50KTsKCQl9OwoJCSQoZG9jdW1lbnQpCgkJCS5iaW5kKCdtb3VzZW1vdmUu
Jyt0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKQoJCQkuYmluZCgnbW91
c2V1cC4nK3RoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKTsKCgkJZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKCQlldmVudC5vcmlnaW5hbEV2ZW50Lm1vdXNlSGFuZGxlZCA9IHRy
dWU7CgkJcmV0dXJuIHRydWU7Cgl9LAoKCV9tb3VzZU1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CgkJ
Ly8gSUUgbW91c2V1cCBjaGVjayAtIG1vdXNldXAgaGFwcGVuZWQgd2hlbiBtb3VzZSB3YXMgb3V0
IG9mIHdpbmRvdwoJCWlmICgkLmJyb3dzZXIubXNpZSAmJiAhKGRvY3VtZW50LmRvY3VtZW50TW9k
ZSA+PSA5KSAmJiAhZXZlbnQuYnV0dG9uKSB7CgkJCXJldHVybiB0aGlzLl9tb3VzZVVwKGV2ZW50
KTsKCQl9CgoJCWlmICh0aGlzLl9tb3VzZVN0YXJ0ZWQpIHsKCQkJdGhpcy5fbW91c2VEcmFnKGV2
ZW50KTsKCQkJcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJfQoKCQlpZiAodGhpcy5f
bW91c2VEaXN0YW5jZU1ldChldmVudCkgJiYgdGhpcy5fbW91c2VEZWxheU1ldChldmVudCkpIHsK
CQkJdGhpcy5fbW91c2VTdGFydGVkID0KCQkJCSh0aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNl
RG93bkV2ZW50LCBldmVudCkgIT09IGZhbHNlKTsKCQkJKHRoaXMuX21vdXNlU3RhcnRlZCA/IHRo
aXMuX21vdXNlRHJhZyhldmVudCkgOiB0aGlzLl9tb3VzZVVwKGV2ZW50KSk7CgkJfQoKCQlyZXR1
cm4gIXRoaXMuX21vdXNlU3RhcnRlZDsKCX0sCgoJX21vdXNlVXA6IGZ1bmN0aW9uKGV2ZW50KSB7
CgkJJChkb2N1bWVudCkKCQkJLnVuYmluZCgnbW91c2Vtb3ZlLicrdGhpcy53aWRnZXROYW1lLCB0
aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkKCQkJLnVuYmluZCgnbW91c2V1cC4nK3RoaXMud2lkZ2V0
TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKTsKCgkJaWYgKHRoaXMuX21vdXNlU3RhcnRlZCkg
ewoJCQl0aGlzLl9tb3VzZVN0YXJ0ZWQgPSBmYWxzZTsKCgkJCWlmIChldmVudC50YXJnZXQgPT0g
dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0KSB7CgkJCSAgICAkLmRhdGEoZXZlbnQudGFyZ2V0
LCB0aGlzLndpZGdldE5hbWUgKyAnLnByZXZlbnRDbGlja0V2ZW50JywgdHJ1ZSk7CgkJCX0KCgkJ
CXRoaXMuX21vdXNlU3RvcChldmVudCk7CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCV9tb3Vz
ZURpc3RhbmNlTWV0OiBmdW5jdGlvbihldmVudCkgewoJCXJldHVybiAoTWF0aC5tYXgoCgkJCQlN
YXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWCAtIGV2ZW50LnBhZ2VYKSwKCQkJCU1h
dGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZIC0gZXZlbnQucGFnZVkpCgkJCSkgPj0g
dGhpcy5vcHRpb25zLmRpc3RhbmNlCgkJKTsKCX0sCgoJX21vdXNlRGVsYXlNZXQ6IGZ1bmN0aW9u
KGV2ZW50KSB7CgkJcmV0dXJuIHRoaXMubW91c2VEZWxheU1ldDsKCX0sCgoJLy8gVGhlc2UgYXJl
IHBsYWNlaG9sZGVyIG1ldGhvZHMsIHRvIGJlIG92ZXJyaWRlbiBieSBleHRlbmRpbmcgcGx1Z2lu
CglfbW91c2VTdGFydDogZnVuY3Rpb24oZXZlbnQpIHt9LAoJX21vdXNlRHJhZzogZnVuY3Rpb24o
ZXZlbnQpIHt9LAoJX21vdXNlU3RvcDogZnVuY3Rpb24oZXZlbnQpIHt9LAoJX21vdXNlQ2FwdHVy
ZTogZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIHRydWU7IH0KfSk7Cgp9KShqUXVlcnkpOwpfEA90
ZXh0L2phdmFzY3JpcHTUBQYHCDs8PT5fEExodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNl
cy8xLjQvbGliL2pxdWVyeS91aS9qcy9qcXVlcnkudWkuZHJhZ2dhYmxlLmpzTxEEKGJwbGlzdDAw
1AECAwQFBmJjWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAb
MTJISUpLTE1OT1BRUlNUVVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIk
NlMkMTBSJDJSJDdSJDNTJDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAa
gByABYAbgAYQAdMjECQlJidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QTGh0dHA6Ly9mbHVp
ZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9saWIvanF1ZXJ5L3VpL2pzL2pxdWVyeS51aS5kcmFn
Z2FibGUuanPSKissLVokY2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0
I0G40QAu4oHLEMjTMzQQNT5HV05TLmtleXNaTlMub2JqZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2A
DoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaAF4AYgBlWU2VydmVyXENvbnRlbnQtVHlwZVRFdGFn
XUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQtUmFuZ2VzXkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rp
b25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1MpXxAPdGV4dC9qYXZhc2NyaXB0XxAbIjRlMDY3Yi03
NThkLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQs
IDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVieXRlc1UzMDA5M1VjbG9zZdIqK1laXE5TRGljdGlv
bmFyeaJZLxF1jV8QD3RleHQvamF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEv
XxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8Q
E1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8A
lgCZAJwAnwCiAKUApwCpAKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BLQEyAT0BRgFM
AU8BVQFeAWcBaQFwAXgBgwGMAY4BkAGSAZQBlgGYAZoBnAGlAacBqQGrAa0BrwGxAbMBtQG3Ab4B
ywHQAd4B4wHxAgACCwIkAjYCVAJ0ApQCmgKgAqYCqwK4ArsCvgLQAtUC6QLtAwEDDwMhAyQDOgAA
AAAAAAIBAAAAAAAAAGYAAAAAAAAAAAAAAAAAAAM8TxF1jS8qCiAqIGpRdWVyeSBVSSBEcmFnZ2Fi
bGUgMS44LjEyCiAqCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVy
eXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJz
aW9uIDIgbGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDov
L2RvY3MuanF1ZXJ5LmNvbS9VSS9EcmFnZ2FibGVzCiAqCiAqIERlcGVuZHM6CiAqCWpxdWVyeS51
aS5jb3JlLmpzCiAqCWpxdWVyeS51aS5tb3VzZS5qcwogKglqcXVlcnkudWkud2lkZ2V0LmpzCiAq
LwooZnVuY3Rpb24oICQsIHVuZGVmaW5lZCApIHsKCiQud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLCAk
LnVpLm1vdXNlLCB7Cgl3aWRnZXRFdmVudFByZWZpeDogImRyYWciLAoJb3B0aW9uczogewoJCWFk
ZENsYXNzZXM6IHRydWUsCgkJYXBwZW5kVG86ICJwYXJlbnQiLAoJCWF4aXM6IGZhbHNlLAoJCWNv
bm5lY3RUb1NvcnRhYmxlOiBmYWxzZSwKCQljb250YWlubWVudDogZmFsc2UsCgkJY3Vyc29yOiAi
YXV0byIsCgkJY3Vyc29yQXQ6IGZhbHNlLAoJCWdyaWQ6IGZhbHNlLAoJCWhhbmRsZTogZmFsc2Us
CgkJaGVscGVyOiAib3JpZ2luYWwiLAoJCWlmcmFtZUZpeDogZmFsc2UsCgkJb3BhY2l0eTogZmFs
c2UsCgkJcmVmcmVzaFBvc2l0aW9uczogZmFsc2UsCgkJcmV2ZXJ0OiBmYWxzZSwKCQlyZXZlcnRE
dXJhdGlvbjogNTAwLAoJCXNjb3BlOiAiZGVmYXVsdCIsCgkJc2Nyb2xsOiB0cnVlLAoJCXNjcm9s
bFNlbnNpdGl2aXR5OiAyMCwKCQlzY3JvbGxTcGVlZDogMjAsCgkJc25hcDogZmFsc2UsCgkJc25h
cE1vZGU6ICJib3RoIiwKCQlzbmFwVG9sZXJhbmNlOiAyMCwKCQlzdGFjazogZmFsc2UsCgkJeklu
ZGV4OiBmYWxzZQoJfSwKCV9jcmVhdGU6IGZ1bmN0aW9uKCkgewoKCQlpZiAodGhpcy5vcHRpb25z
LmhlbHBlciA9PSAnb3JpZ2luYWwnICYmICEoL14oPzpyfGF8ZikvKS50ZXN0KHRoaXMuZWxlbWVu
dC5jc3MoInBvc2l0aW9uIikpKQoJCQl0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb24gPSAn
cmVsYXRpdmUnOwoKCQkodGhpcy5vcHRpb25zLmFkZENsYXNzZXMgJiYgdGhpcy5lbGVtZW50LmFk
ZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSk7CgkJKHRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlz
LmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpKTsKCgkJdGhpcy5fbW91
c2VJbml0KCk7CgoJfSwKCglkZXN0cm95OiBmdW5jdGlvbigpIHsKCQlpZighdGhpcy5lbGVtZW50
LmRhdGEoJ2RyYWdnYWJsZScpKSByZXR1cm47CgkJdGhpcy5lbGVtZW50CgkJCS5yZW1vdmVEYXRh
KCJkcmFnZ2FibGUiKQoJCQkudW5iaW5kKCIuZHJhZ2dhYmxlIikKCQkJLnJlbW92ZUNsYXNzKCJ1
aS1kcmFnZ2FibGUiCgkJCQkrICIgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIgoJCQkJKyAiIHVpLWRy
YWdnYWJsZS1kaXNhYmxlZCIpOwoJCXRoaXMuX21vdXNlRGVzdHJveSgpOwoKCQlyZXR1cm4gdGhp
czsKCX0sCgoJX21vdXNlQ2FwdHVyZTogZnVuY3Rpb24oZXZlbnQpIHsKCgkJdmFyIG8gPSB0aGlz
Lm9wdGlvbnM7CgoJCS8vIGFtb25nIG90aGVycywgcHJldmVudCBhIGRyYWcgb24gYSByZXNpemFi
bGUtaGFuZGxlCgkJaWYgKHRoaXMuaGVscGVyIHx8IG8uZGlzYWJsZWQgfHwgJChldmVudC50YXJn
ZXQpLmlzKCcudWktcmVzaXphYmxlLWhhbmRsZScpKQoJCQlyZXR1cm4gZmFsc2U7CgoJCS8vUXVp
dCBpZiB3ZSdyZSBub3Qgb24gYSB2YWxpZCBoYW5kbGUKCQl0aGlzLmhhbmRsZSA9IHRoaXMuX2dl
dEhhbmRsZShldmVudCk7CgkJaWYgKCF0aGlzLmhhbmRsZSkKCQkJcmV0dXJuIGZhbHNlOwoKCQly
ZXR1cm4gdHJ1ZTsKCgl9LAoKCV9tb3VzZVN0YXJ0OiBmdW5jdGlvbihldmVudCkgewoKCQl2YXIg
byA9IHRoaXMub3B0aW9uczsKCgkJLy9DcmVhdGUgYW5kIGFwcGVuZCB0aGUgdmlzaWJsZSBoZWxw
ZXIKCQl0aGlzLmhlbHBlciA9IHRoaXMuX2NyZWF0ZUhlbHBlcihldmVudCk7CgoJCS8vQ2FjaGUg
dGhlIGhlbHBlciBzaXplCgkJdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpOwoKCQkvL0lm
IGRkbWFuYWdlciBpcyB1c2VkIGZvciBkcm9wcGFibGVzLCBzZXQgdGhlIGdsb2JhbCBkcmFnZ2Fi
bGUKCQlpZigkLnVpLmRkbWFuYWdlcikKCQkJJC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXM7
CgoJCS8qCgkJICogLSBQb3NpdGlvbiBnZW5lcmF0aW9uIC0KCQkgKiBUaGlzIGJsb2NrIGdlbmVy
YXRlcyBldmVyeXRoaW5nIHBvc2l0aW9uIHJlbGF0ZWQgLSBpdCdzIHRoZSBjb3JlIG9mIGRyYWdn
YWJsZXMuCgkJICovCgoJCS8vQ2FjaGUgdGhlIG1hcmdpbnMgb2YgdGhlIG9yaWdpbmFsIGVsZW1l
bnQKCQl0aGlzLl9jYWNoZU1hcmdpbnMoKTsKCgkJLy9TdG9yZSB0aGUgaGVscGVyJ3MgY3NzIHBv
c2l0aW9uCgkJdGhpcy5jc3NQb3NpdGlvbiA9IHRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKTsK
CQl0aGlzLnNjcm9sbFBhcmVudCA9IHRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpOwoKCQkvL1Ro
ZSBlbGVtZW50J3MgYWJzb2x1dGUgcG9zaXRpb24gb24gdGhlIHBhZ2UgbWludXMgbWFyZ2lucwoJ
CXRoaXMub2Zmc2V0ID0gdGhpcy5wb3NpdGlvbkFicyA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKTsK
CQl0aGlzLm9mZnNldCA9IHsKCQkJdG9wOiB0aGlzLm9mZnNldC50b3AgLSB0aGlzLm1hcmdpbnMu
dG9wLAoJCQlsZWZ0OiB0aGlzLm9mZnNldC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQKCQl9OwoK
CQkkLmV4dGVuZCh0aGlzLm9mZnNldCwgewoJCQljbGljazogeyAvL1doZXJlIHRoZSBjbGljayBo
YXBwZW5lZCwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQKCQkJCWxlZnQ6IGV2ZW50LnBhZ2VYIC0g
dGhpcy5vZmZzZXQubGVmdCwKCQkJCXRvcDogZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC50b3AK
CQkJfSwKCQkJcGFyZW50OiB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSwKCQkJcmVsYXRpdmU6IHRo
aXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkgLy9UaGlzIGlzIGEgcmVsYXRpdmUgdG8gYWJzb2x1dGUg
cG9zaXRpb24gbWludXMgdGhlIGFjdHVhbCBwb3NpdGlvbiBjYWxjdWxhdGlvbiAtIG9ubHkgdXNl
ZCBmb3IgcmVsYXRpdmUgcG9zaXRpb25lZCBoZWxwZXIKCQl9KTsKCgkJLy9HZW5lcmF0ZSB0aGUg
b3JpZ2luYWwgcG9zaXRpb24KCQl0aGlzLm9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLnBvc2l0aW9u
ID0gdGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihldmVudCk7CgkJdGhpcy5vcmlnaW5hbFBhZ2VYID0g
ZXZlbnQucGFnZVg7CgkJdGhpcy5vcmlnaW5hbFBhZ2VZID0gZXZlbnQucGFnZVk7CgoJCS8vQWRq
dXN0IHRoZSBtb3VzZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGhlbHBlciBpZiAnY3Vyc29yQXQn
IGlzIHN1cHBsaWVkCgkJKG8uY3Vyc29yQXQgJiYgdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBl
cihvLmN1cnNvckF0KSk7CgoJCS8vU2V0IGEgY29udGFpbm1lbnQgaWYgZ2l2ZW4gaW4gdGhlIG9w
dGlvbnMKCQlpZihvLmNvbnRhaW5tZW50KQoJCQl0aGlzLl9zZXRDb250YWlubWVudCgpOwoKCQkv
L1RyaWdnZXIgZXZlbnQgKyBjYWxsYmFja3MKCQlpZih0aGlzLl90cmlnZ2VyKCJzdGFydCIsIGV2
ZW50KSA9PT0gZmFsc2UpIHsKCQkJdGhpcy5fY2xlYXIoKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0K
CgkJLy9SZWNhY2hlIHRoZSBoZWxwZXIgc2l6ZQoJCXRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlv
bnMoKTsKCgkJLy9QcmVwYXJlIHRoZSBkcm9wcGFibGUgb2Zmc2V0cwoJCWlmICgkLnVpLmRkbWFu
YWdlciAmJiAhby5kcm9wQmVoYXZpb3VyKQoJCQkkLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0
cyh0aGlzLCBldmVudCk7CgoJCXRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZHJh
Z2dpbmciKTsKCQl0aGlzLl9tb3VzZURyYWcoZXZlbnQsIHRydWUpOyAvL0V4ZWN1dGUgdGhlIGRy
YWcgb25jZSAtIHRoaXMgY2F1c2VzIHRoZSBoZWxwZXIgbm90IHRvIGJlIHZpc2libGUgYmVmb3Jl
IGdldHRpbmcgaXRzIGNvcnJlY3QgcG9zaXRpb24KCQlyZXR1cm4gdHJ1ZTsKCX0sCgoJX21vdXNl
RHJhZzogZnVuY3Rpb24oZXZlbnQsIG5vUHJvcGFnYXRpb24pIHsKCgkJLy9Db21wdXRlIHRoZSBo
ZWxwZXJzIHBvc2l0aW9uCgkJdGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24o
ZXZlbnQpOwoJCXRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJz
b2x1dGUiKTsKCgkJLy9DYWxsIHBsdWdpbnMgYW5kIGNhbGxiYWNrcyBhbmQgdXNlIHRoZSByZXN1
bHRpbmcgcG9zaXRpb24gaWYgc29tZXRoaW5nIGlzIHJldHVybmVkCgkJaWYgKCFub1Byb3BhZ2F0
aW9uKSB7CgkJCXZhciB1aSA9IHRoaXMuX3VpSGFzaCgpOwoJCQlpZih0aGlzLl90cmlnZ2VyKCdk
cmFnJywgZXZlbnQsIHVpKSA9PT0gZmFsc2UpIHsKCQkJCXRoaXMuX21vdXNlVXAoe30pOwoJCQkJ
cmV0dXJuIGZhbHNlOwoJCQl9CgkJCXRoaXMucG9zaXRpb24gPSB1aS5wb3NpdGlvbjsKCQl9CgoJ
CWlmKCF0aGlzLm9wdGlvbnMuYXhpcyB8fCB0aGlzLm9wdGlvbnMuYXhpcyAhPSAieSIpIHRoaXMu
aGVscGVyWzBdLnN0eWxlLmxlZnQgPSB0aGlzLnBvc2l0aW9uLmxlZnQrJ3B4JzsKCQlpZighdGhp
cy5vcHRpb25zLmF4aXMgfHwgdGhpcy5vcHRpb25zLmF4aXMgIT0gIngiKSB0aGlzLmhlbHBlclsw
XS5zdHlsZS50b3AgPSB0aGlzLnBvc2l0aW9uLnRvcCsncHgnOwoJCWlmKCQudWkuZGRtYW5hZ2Vy
KSAkLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsIGV2ZW50KTsKCgkJcmV0dXJuIGZhbHNlOwoJfSwK
CglfbW91c2VTdG9wOiBmdW5jdGlvbihldmVudCkgewoKCQkvL0lmIHdlIGFyZSB1c2luZyBkcm9w
cGFibGVzLCBpbmZvcm0gdGhlIG1hbmFnZXIgYWJvdXQgdGhlIGRyb3AKCQl2YXIgZHJvcHBlZCA9
IGZhbHNlOwoJCWlmICgkLnVpLmRkbWFuYWdlciAmJiAhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlv
dXIpCgkJCWRyb3BwZWQgPSAkLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsIGV2ZW50KTsKCgkJLy9p
ZiBhIGRyb3AgY29tZXMgZnJvbSBvdXRzaWRlIChhIHNvcnRhYmxlKQoJCWlmKHRoaXMuZHJvcHBl
ZCkgewoJCQlkcm9wcGVkID0gdGhpcy5kcm9wcGVkOwoJCQl0aGlzLmRyb3BwZWQgPSBmYWxzZTsK
CQl9CgkJCgkJLy9pZiB0aGUgb3JpZ2luYWwgZWxlbWVudCBpcyByZW1vdmVkLCBkb24ndCBib3Ro
ZXIgdG8gY29udGludWUgaWYgaGVscGVyIGlzIHNldCB0byAib3JpZ2luYWwiCgkJaWYoKCF0aGlz
LmVsZW1lbnRbMF0gfHwgIXRoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlKSAmJiB0aGlzLm9wdGlv
bnMuaGVscGVyID09ICJvcmlnaW5hbCIpCgkJCXJldHVybiBmYWxzZTsKCgkJaWYoKHRoaXMub3B0
aW9ucy5yZXZlcnQgPT0gImludmFsaWQiICYmICFkcm9wcGVkKSB8fCAodGhpcy5vcHRpb25zLnJl
dmVydCA9PSAidmFsaWQiICYmIGRyb3BwZWQpIHx8IHRoaXMub3B0aW9ucy5yZXZlcnQgPT09IHRy
dWUgfHwgKCQuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucmV2ZXJ0KSAmJiB0aGlzLm9wdGlvbnMu
cmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LCBkcm9wcGVkKSkpIHsKCQkJdmFyIHNlbGYgPSB0aGlz
OwoJCQkkKHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbiwgcGFyc2VJ
bnQodGhpcy5vcHRpb25zLnJldmVydER1cmF0aW9uLCAxMCksIGZ1bmN0aW9uKCkgewoJCQkJaWYo
c2VsZi5fdHJpZ2dlcigic3RvcCIsIGV2ZW50KSAhPT0gZmFsc2UpIHsKCQkJCQlzZWxmLl9jbGVh
cigpOwoJCQkJfQoJCQl9KTsKCQl9IGVsc2UgewoJCQlpZih0aGlzLl90cmlnZ2VyKCJzdG9wIiwg
ZXZlbnQpICE9PSBmYWxzZSkgewoJCQkJdGhpcy5fY2xlYXIoKTsKCQkJfQoJCX0KCgkJcmV0dXJu
IGZhbHNlOwoJfSwKCQoJY2FuY2VsOiBmdW5jdGlvbigpIHsKCQkKCQlpZih0aGlzLmhlbHBlci5p
cygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpKSB7CgkJCXRoaXMuX21vdXNlVXAoe30pOwoJCX0g
ZWxzZSB7CgkJCXRoaXMuX2NsZWFyKCk7CgkJfQoJCQoJCXJldHVybiB0aGlzOwoJCQoJfSwKCglf
Z2V0SGFuZGxlOiBmdW5jdGlvbihldmVudCkgewoKCQl2YXIgaGFuZGxlID0gIXRoaXMub3B0aW9u
cy5oYW5kbGUgfHwgISQodGhpcy5vcHRpb25zLmhhbmRsZSwgdGhpcy5lbGVtZW50KS5sZW5ndGgg
PyB0cnVlIDogZmFsc2U7CgkJJCh0aGlzLm9wdGlvbnMuaGFuZGxlLCB0aGlzLmVsZW1lbnQpCgkJ
CS5maW5kKCIqIikKCQkJLmFuZFNlbGYoKQoJCQkuZWFjaChmdW5jdGlvbigpIHsKCQkJCWlmKHRo
aXMgPT0gZXZlbnQudGFyZ2V0KSBoYW5kbGUgPSB0cnVlOwoJCQl9KTsKCgkJcmV0dXJuIGhhbmRs
ZTsKCgl9LAoKCV9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uKGV2ZW50KSB7CgoJCXZhciBvID0gdGhp
cy5vcHRpb25zOwoJCXZhciBoZWxwZXIgPSAkLmlzRnVuY3Rpb24oby5oZWxwZXIpID8gJChvLmhl
bHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sIFtldmVudF0pKSA6IChvLmhlbHBlciA9PSAnY2xv
bmUnID8gdGhpcy5lbGVtZW50LmNsb25lKCkgOiB0aGlzLmVsZW1lbnQpOwoKCQlpZighaGVscGVy
LnBhcmVudHMoJ2JvZHknKS5sZW5ndGgpCgkJCWhlbHBlci5hcHBlbmRUbygoby5hcHBlbmRUbyA9
PSAncGFyZW50JyA/IHRoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlIDogby5hcHBlbmRUbykpOwoK
CQlpZihoZWxwZXJbMF0gIT0gdGhpcy5lbGVtZW50WzBdICYmICEoLyhmaXhlZHxhYnNvbHV0ZSkv
KS50ZXN0KGhlbHBlci5jc3MoInBvc2l0aW9uIikpKQoJCQloZWxwZXIuY3NzKCJwb3NpdGlvbiIs
ICJhYnNvbHV0ZSIpOwoKCQlyZXR1cm4gaGVscGVyOwoKCX0sCgoJX2FkanVzdE9mZnNldEZyb21I
ZWxwZXI6IGZ1bmN0aW9uKG9iaikgewoJCWlmICh0eXBlb2Ygb2JqID09ICdzdHJpbmcnKSB7CgkJ
CW9iaiA9IG9iai5zcGxpdCgnICcpOwoJCX0KCQlpZiAoJC5pc0FycmF5KG9iaikpIHsKCQkJb2Jq
ID0ge2xlZnQ6ICtvYmpbMF0sIHRvcDogK29ialsxXSB8fCAwfTsKCQl9CgkJaWYgKCdsZWZ0JyBp
biBvYmopIHsKCQkJdGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IG9iai5sZWZ0ICsgdGhpcy5tYXJn
aW5zLmxlZnQ7CgkJfQoJCWlmICgncmlnaHQnIGluIG9iaikgewoJCQl0aGlzLm9mZnNldC5jbGlj
ay5sZWZ0ID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIG9iai5yaWdodCArIHRoaXMu
bWFyZ2lucy5sZWZ0OwoJCX0KCQlpZiAoJ3RvcCcgaW4gb2JqKSB7CgkJCXRoaXMub2Zmc2V0LmNs
aWNrLnRvcCA9IG9iai50b3AgKyB0aGlzLm1hcmdpbnMudG9wOwoJCX0KCQlpZiAoJ2JvdHRvbScg
aW4gb2JqKSB7CgkJCXRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IHRoaXMuaGVscGVyUHJvcG9ydGlv
bnMuaGVpZ2h0IC0gb2JqLmJvdHRvbSArIHRoaXMubWFyZ2lucy50b3A7CgkJfQoJfSwKCglfZ2V0
UGFyZW50T2Zmc2V0OiBmdW5jdGlvbigpIHsKCgkJLy9HZXQgdGhlIG9mZnNldFBhcmVudCBhbmQg
Y2FjaGUgaXRzIHBvc2l0aW9uCgkJdGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZz
ZXRQYXJlbnQoKTsKCQl2YXIgcG8gPSB0aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTsKCgkJLy8g
VGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1vZGlmeSBhIG9mZnNldCBj
YWxjdWxhdGVkIG9uIHN0YXJ0LCBzaW5jZSB0aGUgZm9sbG93aW5nIGhhcHBlbmVkOgoJCS8vIDEu
IFRoZSBwb3NpdGlvbiBvZiB0aGUgaGVscGVyIGlzIGFic29sdXRlLCBzbyBpdCdzIHBvc2l0aW9u
IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIG5leHQgcG9zaXRpb25lZCBwYXJlbnQKCQkvLyAy
LiBUaGUgYWN0dWFsIG9mZnNldCBwYXJlbnQgaXMgYSBjaGlsZCBvZiB0aGUgc2Nyb2xsIHBhcmVu
dCwgYW5kIHRoZSBzY3JvbGwgcGFyZW50IGlzbid0IHRoZSBkb2N1bWVudCwgd2hpY2ggbWVhbnMg
dGhhdAoJCS8vICAgIHRoZSBzY3JvbGwgaXMgaW5jbHVkZWQgaW4gdGhlIGluaXRpYWwgY2FsY3Vs
YXRpb24gb2YgdGhlIG9mZnNldCBvZiB0aGUgcGFyZW50LCBhbmQgbmV2ZXIgcmVjYWxjdWxhdGVk
IHVwb24gZHJhZwoJCWlmKHRoaXMuY3NzUG9zaXRpb24gPT0gJ2Fic29sdXRlJyAmJiB0aGlzLnNj
cm9sbFBhcmVudFswXSAhPSBkb2N1bWVudCAmJiAkLnVpLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFy
ZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkpIHsKCQkJcG8ubGVmdCArPSB0aGlzLnNjcm9s
bFBhcmVudC5zY3JvbGxMZWZ0KCk7CgkJCXBvLnRvcCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3Jv
bGxUb3AoKTsKCQl9CgoJCWlmKCh0aGlzLm9mZnNldFBhcmVudFswXSA9PSBkb2N1bWVudC5ib2R5
KSAvL1RoaXMgbmVlZHMgdG8gYmUgYWN0dWFsbHkgZG9uZSBmb3IgYWxsIGJyb3dzZXJzLCBzaW5j
ZSBwYWdlWC9wYWdlWSBpbmNsdWRlcyB0aGlzIGluZm9ybWF0aW9uCgkJfHwgKHRoaXMub2Zmc2V0
UGFyZW50WzBdLnRhZ05hbWUgJiYgdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2Vy
Q2FzZSgpID09ICdodG1sJyAmJiAkLmJyb3dzZXIubXNpZSkpIC8vVWdseSBJRSBmaXgKCQkJcG8g
PSB7IHRvcDogMCwgbGVmdDogMCB9OwoKCQlyZXR1cm4gewoJCQl0b3A6IHBvLnRvcCArIChwYXJz
ZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApIHx8IDApLAoJ
CQlsZWZ0OiBwby5sZWZ0ICsgKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVy
TGVmdFdpZHRoIiksMTApIHx8IDApCgkJfTsKCgl9LAoKCV9nZXRSZWxhdGl2ZU9mZnNldDogZnVu
Y3Rpb24oKSB7CgoJCWlmKHRoaXMuY3NzUG9zaXRpb24gPT0gInJlbGF0aXZlIikgewoJCQl2YXIg
cCA9IHRoaXMuZWxlbWVudC5wb3NpdGlvbigpOwoJCQlyZXR1cm4gewoJCQkJdG9wOiBwLnRvcCAt
IChwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKSB8fCAwKSArIHRoaXMuc2Nyb2xs
UGFyZW50LnNjcm9sbFRvcCgpLAoJCQkJbGVmdDogcC5sZWZ0IC0gKHBhcnNlSW50KHRoaXMuaGVs
cGVyLmNzcygibGVmdCIpLDEwKSB8fCAwKSArIHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQo
KQoJCQl9OwoJCX0gZWxzZSB7CgkJCXJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9OwoJCX0KCgl9
LAoKCV9jYWNoZU1hcmdpbnM6IGZ1bmN0aW9uKCkgewoJCXRoaXMubWFyZ2lucyA9IHsKCQkJbGVm
dDogKHBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSwxMCkgfHwgMCksCgkJ
CXRvcDogKHBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLDEwKSB8fCAwKSwK
CQkJcmlnaHQ6IChwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLDEwKSB8
fCAwKSwKCQkJYm90dG9tOiAocGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luQm90dG9t
IiksMTApIHx8IDApCgkJfTsKCX0sCgoJX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6IGZ1bmN0aW9u
KCkgewoJCXRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSB7CgkJCXdpZHRoOiB0aGlzLmhlbHBlci5v
dXRlcldpZHRoKCksCgkJCWhlaWdodDogdGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKQoJCX07Cgl9
LAoKCV9zZXRDb250YWlubWVudDogZnVuY3Rpb24oKSB7CgoJCXZhciBvID0gdGhpcy5vcHRpb25z
OwoJCWlmKG8uY29udGFpbm1lbnQgPT0gJ3BhcmVudCcpIG8uY29udGFpbm1lbnQgPSB0aGlzLmhl
bHBlclswXS5wYXJlbnROb2RlOwoJCWlmKG8uY29udGFpbm1lbnQgPT0gJ2RvY3VtZW50JyB8fCBv
LmNvbnRhaW5tZW50ID09ICd3aW5kb3cnKSB0aGlzLmNvbnRhaW5tZW50ID0gWwoJCQkoby5jb250
YWlubWVudCA9PSAnZG9jdW1lbnQnID8gMCA6ICQod2luZG93KS5zY3JvbGxMZWZ0KCkpIC0gdGhp
cy5vZmZzZXQucmVsYXRpdmUubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LAoJCQkoby5j
b250YWlubWVudCA9PSAnZG9jdW1lbnQnID8gMCA6ICQod2luZG93KS5zY3JvbGxUb3AoKSkgLSB0
aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLAoJCQkoby5j
b250YWlubWVudCA9PSAnZG9jdW1lbnQnID8gMCA6ICQod2luZG93KS5zY3JvbGxMZWZ0KCkpICsg
JChvLmNvbnRhaW5tZW50ID09ICdkb2N1bWVudCcgPyBkb2N1bWVudCA6IHdpbmRvdykud2lkdGgo
KSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCwKCQkJ
KG8uY29udGFpbm1lbnQgPT0gJ2RvY3VtZW50JyA/IDAgOiAkKHdpbmRvdykuc2Nyb2xsVG9wKCkp
ICsgKCQoby5jb250YWlubWVudCA9PSAnZG9jdW1lbnQnID8gZG9jdW1lbnQgOiB3aW5kb3cpLmhl
aWdodCgpIHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpIC0gdGhpcy5o
ZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wCgkJXTsKCgkJaWYoISgv
Xihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvKS50ZXN0KG8uY29udGFpbm1lbnQpICYmIG8uY29u
dGFpbm1lbnQuY29uc3RydWN0b3IgIT0gQXJyYXkpIHsKCQkJdmFyIGNlID0gJChvLmNvbnRhaW5t
ZW50KVswXTsgaWYoIWNlKSByZXR1cm47CgkJCXZhciBjbyA9ICQoby5jb250YWlubWVudCkub2Zm
c2V0KCk7CgkJCXZhciBvdmVyID0gKCQoY2UpLmNzcygib3ZlcmZsb3ciKSAhPSAnaGlkZGVuJyk7
CgoJCQl0aGlzLmNvbnRhaW5tZW50ID0gWwoJCQkJY28ubGVmdCArIChwYXJzZUludCgkKGNlKS5j
c3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKSB8fCAwKSArIChwYXJzZUludCgkKGNlKS5jc3MoInBh
ZGRpbmdMZWZ0IiksMTApIHx8IDApLAoJCQkJY28udG9wICsgKHBhcnNlSW50KCQoY2UpLmNzcygi
Ym9yZGVyVG9wV2lkdGgiKSwxMCkgfHwgMCkgKyAocGFyc2VJbnQoJChjZSkuY3NzKCJwYWRkaW5n
VG9wIiksMTApIHx8IDApLAoJCQkJY28ubGVmdCsob3ZlciA/IE1hdGgubWF4KGNlLnNjcm9sbFdp
ZHRoLGNlLm9mZnNldFdpZHRoKSA6IGNlLm9mZnNldFdpZHRoKSAtIChwYXJzZUludCgkKGNlKS5j
c3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKSB8fCAwKSAtIChwYXJzZUludCgkKGNlKS5jc3MoInBh
ZGRpbmdSaWdodCIpLDEwKSB8fCAwKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0
aGlzLm1hcmdpbnMubGVmdCAtIHRoaXMubWFyZ2lucy5yaWdodCwKCQkJCWNvLnRvcCsob3ZlciA/
IE1hdGgubWF4KGNlLnNjcm9sbEhlaWdodCxjZS5vZmZzZXRIZWlnaHQpIDogY2Uub2Zmc2V0SGVp
Z2h0KSAtIChwYXJzZUludCgkKGNlKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApIHx8IDApIC0g
KHBhcnNlSW50KCQoY2UpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKSB8fCAwKSAtIHRoaXMuaGVs
cGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcCAgLSB0aGlzLm1hcmdpbnMu
Ym90dG9tCgkJCV07CgkJfSBlbHNlIGlmKG8uY29udGFpbm1lbnQuY29uc3RydWN0b3IgPT0gQXJy
YXkpIHsKCQkJdGhpcy5jb250YWlubWVudCA9IG8uY29udGFpbm1lbnQ7CgkJfQoKCX0sCgoJX2Nv
bnZlcnRQb3NpdGlvblRvOiBmdW5jdGlvbihkLCBwb3MpIHsKCgkJaWYoIXBvcykgcG9zID0gdGhp
cy5wb3NpdGlvbjsKCQl2YXIgbW9kID0gZCA9PSAiYWJzb2x1dGUiID8gMSA6IC0xOwoJCXZhciBv
ID0gdGhpcy5vcHRpb25zLCBzY3JvbGwgPSB0aGlzLmNzc1Bvc2l0aW9uID09ICdhYnNvbHV0ZScg
JiYgISh0aGlzLnNjcm9sbFBhcmVudFswXSAhPSBkb2N1bWVudCAmJiAkLnVpLmNvbnRhaW5zKHRo
aXMuc2Nyb2xsUGFyZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkpID8gdGhpcy5vZmZzZXRQ
YXJlbnQgOiB0aGlzLnNjcm9sbFBhcmVudCwgc2Nyb2xsSXNSb290Tm9kZSA9ICgvKGh0bWx8Ym9k
eSkvaSkudGVzdChzY3JvbGxbMF0udGFnTmFtZSk7CgoJCXJldHVybiB7CgkJCXRvcDogKAoJCQkJ
cG9zLnRvcAkJCQkJCQkJCQkJCQkJCQkJLy8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uCgkJ
CQkrIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAqIG1vZAkJCQkJCQkJCQkvLyBPbmx5IGZvciBy
ZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRv
IG9mZnNldCBwYXJlbnQKCQkJCSsgdGhpcy5vZmZzZXQucGFyZW50LnRvcCAqIG1vZAkJCQkJCQkJ
CQkJLy8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCAr
IGJvcmRlcikKCQkJCS0gKCQuYnJvd3Nlci5zYWZhcmkgJiYgJC5icm93c2VyLnZlcnNpb24gPCA1
MjYgJiYgdGhpcy5jc3NQb3NpdGlvbiA9PSAnZml4ZWQnID8gMCA6ICggdGhpcy5jc3NQb3NpdGlv
biA9PSAnZml4ZWQnID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpIDogKCBzY3JvbGxJ
c1Jvb3ROb2RlID8gMCA6IHNjcm9sbC5zY3JvbGxUb3AoKSApICkgKiBtb2QpCgkJCSksCgkJCWxl
ZnQ6ICgKCQkJCXBvcy5sZWZ0CQkJCQkJCQkJCQkJCQkJCS8vIFRoZSBhYnNvbHV0ZSBtb3VzZSBw
b3NpdGlvbgoJCQkJKyB0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0ICogbW9kCQkJCQkJCQkJCS8v
IE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9t
IGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudAoJCQkJKyB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCAq
IG1vZAkJCQkJCQkJCQkJLy8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRl
cnMgKG9mZnNldCArIGJvcmRlcikKCQkJCS0gKCQuYnJvd3Nlci5zYWZhcmkgJiYgJC5icm93c2Vy
LnZlcnNpb24gPCA1MjYgJiYgdGhpcy5jc3NQb3NpdGlvbiA9PSAnZml4ZWQnID8gMCA6ICggdGhp
cy5jc3NQb3NpdGlvbiA9PSAnZml4ZWQnID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQo
KSA6IHNjcm9sbElzUm9vdE5vZGUgPyAwIDogc2Nyb2xsLnNjcm9sbExlZnQoKSApICogbW9kKQoJ
CQkpCgkJfTsKCgl9LAoKCV9nZW5lcmF0ZVBvc2l0aW9uOiBmdW5jdGlvbihldmVudCkgewoKCQl2
YXIgbyA9IHRoaXMub3B0aW9ucywgc2Nyb2xsID0gdGhpcy5jc3NQb3NpdGlvbiA9PSAnYWJzb2x1
dGUnICYmICEodGhpcy5zY3JvbGxQYXJlbnRbMF0gIT0gZG9jdW1lbnQgJiYgJC51aS5jb250YWlu
cyh0aGlzLnNjcm9sbFBhcmVudFswXSwgdGhpcy5vZmZzZXRQYXJlbnRbMF0pKSA/IHRoaXMub2Zm
c2V0UGFyZW50IDogdGhpcy5zY3JvbGxQYXJlbnQsIHNjcm9sbElzUm9vdE5vZGUgPSAoLyhodG1s
fGJvZHkpL2kpLnRlc3Qoc2Nyb2xsWzBdLnRhZ05hbWUpOwoJCXZhciBwYWdlWCA9IGV2ZW50LnBh
Z2VYOwoJCXZhciBwYWdlWSA9IGV2ZW50LnBhZ2VZOwoKCQkvKgoJCSAqIC0gUG9zaXRpb24gY29u
c3RyYWluaW5nIC0KCQkgKiBDb25zdHJhaW4gdGhlIHBvc2l0aW9uIHRvIGEgbWl4IG9mIGdyaWQs
IGNvbnRhaW5tZW50LgoJCSAqLwoKCQlpZih0aGlzLm9yaWdpbmFsUG9zaXRpb24pIHsgLy9JZiB3
ZSBhcmUgbm90IGRyYWdnaW5nIHlldCwgd2Ugd29uJ3QgY2hlY2sgZm9yIG9wdGlvbnMKCgkJCWlm
KHRoaXMuY29udGFpbm1lbnQpIHsKCQkJCWlmKGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xp
Y2subGVmdCA8IHRoaXMuY29udGFpbm1lbnRbMF0pIHBhZ2VYID0gdGhpcy5jb250YWlubWVudFsw
XSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7CgkJCQlpZihldmVudC5wYWdlWSAtIHRoaXMub2Zm
c2V0LmNsaWNrLnRvcCA8IHRoaXMuY29udGFpbm1lbnRbMV0pIHBhZ2VZID0gdGhpcy5jb250YWlu
bWVudFsxXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDsKCQkJCWlmKGV2ZW50LnBhZ2VYIC0gdGhp
cy5vZmZzZXQuY2xpY2subGVmdCA+IHRoaXMuY29udGFpbm1lbnRbMl0pIHBhZ2VYID0gdGhpcy5j
b250YWlubWVudFsyXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7CgkJCQlpZihldmVudC5wYWdl
WSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+IHRoaXMuY29udGFpbm1lbnRbM10pIHBhZ2VZID0g
dGhpcy5jb250YWlubWVudFszXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDsKCQkJfQoKCQkJaWYo
by5ncmlkKSB7CgkJCQl2YXIgdG9wID0gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCgo
cGFnZVkgLSB0aGlzLm9yaWdpbmFsUGFnZVkpIC8gby5ncmlkWzFdKSAqIG8uZ3JpZFsxXTsKCQkJ
CXBhZ2VZID0gdGhpcy5jb250YWlubWVudCA/ICghKHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRv
cCA8IHRoaXMuY29udGFpbm1lbnRbMV0gfHwgdG9wIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4g
dGhpcy5jb250YWlubWVudFszXSkgPyB0b3AgOiAoISh0b3AgLSB0aGlzLm9mZnNldC5jbGljay50
b3AgPCB0aGlzLmNvbnRhaW5tZW50WzFdKSA/IHRvcCAtIG8uZ3JpZFsxXSA6IHRvcCArIG8uZ3Jp
ZFsxXSkpIDogdG9wOwoKCQkJCXZhciBsZWZ0ID0gdGhpcy5vcmlnaW5hbFBhZ2VYICsgTWF0aC5y
b3VuZCgocGFnZVggLSB0aGlzLm9yaWdpbmFsUGFnZVgpIC8gby5ncmlkWzBdKSAqIG8uZ3JpZFsw
XTsKCQkJCXBhZ2VYID0gdGhpcy5jb250YWlubWVudCA/ICghKGxlZnQgLSB0aGlzLm9mZnNldC5j
bGljay5sZWZ0IDwgdGhpcy5jb250YWlubWVudFswXSB8fCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xp
Y2subGVmdCA+IHRoaXMuY29udGFpbm1lbnRbMl0pID8gbGVmdCA6ICghKGxlZnQgLSB0aGlzLm9m
ZnNldC5jbGljay5sZWZ0IDwgdGhpcy5jb250YWlubWVudFswXSkgPyBsZWZ0IC0gby5ncmlkWzBd
IDogbGVmdCArIG8uZ3JpZFswXSkpIDogbGVmdDsKCQkJfQoKCQl9CgoJCXJldHVybiB7CgkJCXRv
cDogKAoJCQkJcGFnZVkJCQkJCQkJCQkJCQkJCQkJLy8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0
aW9uCgkJCQktIHRoaXMub2Zmc2V0LmNsaWNrLnRvcAkJCQkJCQkJCQkJCQkvLyBDbGljayBvZmZz
ZXQgKHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50KQoJCQkJLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50
b3AJCQkJCQkJCQkJCQkvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxh
dGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnQKCQkJCS0gdGhpcy5vZmZz
ZXQucGFyZW50LnRvcAkJCQkJCQkJCQkJCS8vIFRoZSBvZmZzZXRQYXJlbnQncyBvZmZzZXQgd2l0
aG91dCBib3JkZXJzIChvZmZzZXQgKyBib3JkZXIpCgkJCQkrICgkLmJyb3dzZXIuc2FmYXJpICYm
ICQuYnJvd3Nlci52ZXJzaW9uIDwgNTI2ICYmIHRoaXMuY3NzUG9zaXRpb24gPT0gJ2ZpeGVkJyA/
IDAgOiAoIHRoaXMuY3NzUG9zaXRpb24gPT0gJ2ZpeGVkJyA/IC10aGlzLnNjcm9sbFBhcmVudC5z
Y3JvbGxUb3AoKSA6ICggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiBzY3JvbGwuc2Nyb2xsVG9wKCkg
KSApKQoJCQkpLAoJCQlsZWZ0OiAoCgkJCQlwYWdlWAkJCQkJCQkJCQkJCQkJCQkvLyBUaGUgYWJz
b2x1dGUgbW91c2UgcG9zaXRpb24KCQkJCS0gdGhpcy5vZmZzZXQuY2xpY2subGVmdAkJCQkJCQkJ
CQkJCS8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpCgkJCQktIHRoaXMu
b2Zmc2V0LnJlbGF0aXZlLmxlZnQJCQkJCQkJCQkJCQkvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3Np
dGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJl
bnQKCQkJCS0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQJCQkJCQkJCQkJCQkvLyBUaGUgb2Zmc2V0
UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKQoJCQkJKyAo
JC5icm93c2VyLnNhZmFyaSAmJiAkLmJyb3dzZXIudmVyc2lvbiA8IDUyNiAmJiB0aGlzLmNzc1Bv
c2l0aW9uID09ICdmaXhlZCcgPyAwIDogKCB0aGlzLmNzc1Bvc2l0aW9uID09ICdmaXhlZCcgPyAt
dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIDogc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiBz
Y3JvbGwuc2Nyb2xsTGVmdCgpICkpCgkJCSkKCQl9OwoKCX0sCgoJX2NsZWFyOiBmdW5jdGlvbigp
IHsKCQl0aGlzLmhlbHBlci5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIik7CgkJ
aWYodGhpcy5oZWxwZXJbMF0gIT0gdGhpcy5lbGVtZW50WzBdICYmICF0aGlzLmNhbmNlbEhlbHBl
clJlbW92YWwpIHRoaXMuaGVscGVyLnJlbW92ZSgpOwoJCS8vaWYoJC51aS5kZG1hbmFnZXIpICQu
dWkuZGRtYW5hZ2VyLmN1cnJlbnQgPSBudWxsOwoJCXRoaXMuaGVscGVyID0gbnVsbDsKCQl0aGlz
LmNhbmNlbEhlbHBlclJlbW92YWwgPSBmYWxzZTsKCX0sCgoJLy8gRnJvbSBub3cgb24gYnVsayBz
dHVmZiAtIG1haW5seSBoZWxwZXJzCgoJX3RyaWdnZXI6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCB1
aSkgewoJCXVpID0gdWkgfHwgdGhpcy5fdWlIYXNoKCk7CgkJJC51aS5wbHVnaW4uY2FsbCh0aGlz
LCB0eXBlLCBbZXZlbnQsIHVpXSk7CgkJaWYodHlwZSA9PSAiZHJhZyIpIHRoaXMucG9zaXRpb25B
YnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTsgLy9UaGUgYWJzb2x1dGUg
cG9zaXRpb24gaGFzIHRvIGJlIHJlY2FsY3VsYXRlZCBhZnRlciBwbHVnaW5zCgkJcmV0dXJuICQu
V2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsIHR5cGUsIGV2ZW50LCB1aSk7Cgl9
LAoKCXBsdWdpbnM6IHt9LAoKCV91aUhhc2g6IGZ1bmN0aW9uKGV2ZW50KSB7CgkJcmV0dXJuIHsK
CQkJaGVscGVyOiB0aGlzLmhlbHBlciwKCQkJcG9zaXRpb246IHRoaXMucG9zaXRpb24sCgkJCW9y
aWdpbmFsUG9zaXRpb246IHRoaXMub3JpZ2luYWxQb3NpdGlvbiwKCQkJb2Zmc2V0OiB0aGlzLnBv
c2l0aW9uQWJzCgkJfTsKCX0KCn0pOwoKJC5leHRlbmQoJC51aS5kcmFnZ2FibGUsIHsKCXZlcnNp
b246ICIxLjguMTIiCn0pOwoKJC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiY29ubmVjdFRv
U29ydGFibGUiLCB7CglzdGFydDogZnVuY3Rpb24oZXZlbnQsIHVpKSB7CgoJCXZhciBpbnN0ID0g
JCh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSwgbyA9IGluc3Qub3B0aW9ucywKCQkJdWlTb3J0YWJs
ZSA9ICQuZXh0ZW5kKHt9LCB1aSwgeyBpdGVtOiBpbnN0LmVsZW1lbnQgfSk7CgkJaW5zdC5zb3J0
YWJsZXMgPSBbXTsKCQkkKG8uY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKSB7CgkJ
CXZhciBzb3J0YWJsZSA9ICQuZGF0YSh0aGlzLCAnc29ydGFibGUnKTsKCQkJaWYgKHNvcnRhYmxl
ICYmICFzb3J0YWJsZS5vcHRpb25zLmRpc2FibGVkKSB7CgkJCQlpbnN0LnNvcnRhYmxlcy5wdXNo
KHsKCQkJCQlpbnN0YW5jZTogc29ydGFibGUsCgkJCQkJc2hvdWxkUmV2ZXJ0OiBzb3J0YWJsZS5v
cHRpb25zLnJldmVydAoJCQkJfSk7CgkJCQlzb3J0YWJsZS5yZWZyZXNoUG9zaXRpb25zKCk7CS8v
IENhbGwgdGhlIHNvcnRhYmxlJ3MgcmVmcmVzaFBvc2l0aW9ucyBhdCBkcmFnIHN0YXJ0IHRvIHJl
ZnJlc2ggdGhlIGNvbnRhaW5lckNhY2hlIHNpbmNlIHRoZSBzb3J0YWJsZSBjb250YWluZXIgY2Fj
aGUgaXMgdXNlZCBpbiBkcmFnIGFuZCBuZWVkcyB0byBiZSB1cCB0byBkYXRlICh0aGlzIHdpbGwg
ZW5zdXJlIGl0J3MgaW5pdGlhbGlzZWQgYXMgd2VsbCBhcyBiZWluZyBrZXB0IGluIHN0ZXAgd2l0
aCBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IGhhdmUgaGFwcGVuZWQgb24gdGhlIHBhZ2UpLgoJCQkJ
c29ydGFibGUuX3RyaWdnZXIoImFjdGl2YXRlIiwgZXZlbnQsIHVpU29ydGFibGUpOwoJCQl9CgkJ
fSk7CgoJfSwKCXN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoKCQkvL0lmIHdlIGFyZSBzdGls
bCBvdmVyIHRoZSBzb3J0YWJsZSwgd2UgZmFrZSB0aGUgc3RvcCBldmVudCBvZiB0aGUgc29ydGFi
bGUsIGJ1dCBhbHNvIHJlbW92ZSBoZWxwZXIKCQl2YXIgaW5zdCA9ICQodGhpcykuZGF0YSgiZHJh
Z2dhYmxlIiksCgkJCXVpU29ydGFibGUgPSAkLmV4dGVuZCh7fSwgdWksIHsgaXRlbTogaW5zdC5l
bGVtZW50IH0pOwoKCQkkLmVhY2goaW5zdC5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkgewoJCQlpZih0
aGlzLmluc3RhbmNlLmlzT3ZlcikgewoKCQkJCXRoaXMuaW5zdGFuY2UuaXNPdmVyID0gMDsKCgkJ
CQlpbnN0LmNhbmNlbEhlbHBlclJlbW92YWwgPSB0cnVlOyAvL0Rvbid0IHJlbW92ZSB0aGUgaGVs
cGVyIGluIHRoZSBkcmFnZ2FibGUgaW5zdGFuY2UKCQkJCXRoaXMuaW5zdGFuY2UuY2FuY2VsSGVs
cGVyUmVtb3ZhbCA9IGZhbHNlOyAvL1JlbW92ZSBpdCBpbiB0aGUgc29ydGFibGUgaW5zdGFuY2Ug
KHNvIHNvcnRhYmxlIHBsdWdpbnMgbGlrZSByZXZlcnQgc3RpbGwgd29yaykKCgkJCQkvL1RoZSBz
b3J0YWJsZSByZXZlcnQgaXMgc3VwcG9ydGVkLCBhbmQgd2UgaGF2ZSB0byBzZXQgYSB0ZW1wb3Jh
cnkgZHJvcHBlZCB2YXJpYWJsZSBvbiB0aGUgZHJhZ2dhYmxlIHRvIHN1cHBvcnQgcmV2ZXJ0OiAn
dmFsaWQvaW52YWxpZCcKCQkJCWlmKHRoaXMuc2hvdWxkUmV2ZXJ0KSB0aGlzLmluc3RhbmNlLm9w
dGlvbnMucmV2ZXJ0ID0gdHJ1ZTsKCgkJCQkvL1RyaWdnZXIgdGhlIHN0b3Agb2YgdGhlIHNvcnRh
YmxlCgkJCQl0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AoZXZlbnQpOwoKCQkJCXRoaXMuaW5zdGFu
Y2Uub3B0aW9ucy5oZWxwZXIgPSB0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcjsKCgkJCQkv
L0lmIHRoZSBoZWxwZXIgaGFzIGJlZW4gdGhlIG9yaWdpbmFsIGl0ZW0sIHJlc3RvcmUgcHJvcGVy
dGllcyBpbiB0aGUgc29ydGFibGUKCQkJCWlmKGluc3Qub3B0aW9ucy5oZWxwZXIgPT0gJ29yaWdp
bmFsJykKCQkJCQl0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLmNzcyh7IHRvcDogJ2F1dG8nLCBs
ZWZ0OiAnYXV0bycgfSk7CgoJCQl9IGVsc2UgewoJCQkJdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxw
ZXJSZW1vdmFsID0gZmFsc2U7IC8vUmVtb3ZlIHRoZSBoZWxwZXIgaW4gdGhlIHNvcnRhYmxlIGlu
c3RhbmNlCgkJCQl0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJkZWFjdGl2YXRlIiwgZXZlbnQsIHVp
U29ydGFibGUpOwoJCQl9CgoJCX0pOwoKCX0sCglkcmFnOiBmdW5jdGlvbihldmVudCwgdWkpIHsK
CgkJdmFyIGluc3QgPSAkKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLCBzZWxmID0gdGhpczsKCgkJ
dmFyIGNoZWNrUG9zID0gZnVuY3Rpb24obykgewoJCQl2YXIgZHlDbGljayA9IHRoaXMub2Zmc2V0
LmNsaWNrLnRvcCwgZHhDbGljayA9IHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7CgkJCXZhciBoZWxw
ZXJUb3AgPSB0aGlzLnBvc2l0aW9uQWJzLnRvcCwgaGVscGVyTGVmdCA9IHRoaXMucG9zaXRpb25B
YnMubGVmdDsKCQkJdmFyIGl0ZW1IZWlnaHQgPSBvLmhlaWdodCwgaXRlbVdpZHRoID0gby53aWR0
aDsKCQkJdmFyIGl0ZW1Ub3AgPSBvLnRvcCwgaXRlbUxlZnQgPSBvLmxlZnQ7CgoJCQlyZXR1cm4g
JC51aS5pc092ZXIoaGVscGVyVG9wICsgZHlDbGljaywgaGVscGVyTGVmdCArIGR4Q2xpY2ssIGl0
ZW1Ub3AsIGl0ZW1MZWZ0LCBpdGVtSGVpZ2h0LCBpdGVtV2lkdGgpOwoJCX07CgoJCSQuZWFjaChp
bnN0LnNvcnRhYmxlcywgZnVuY3Rpb24oaSkgewoJCQkKCQkJLy9Db3B5IG92ZXIgc29tZSB2YXJp
YWJsZXMgdG8gYWxsb3cgY2FsbGluZyB0aGUgc29ydGFibGUncyBuYXRpdmUgX2ludGVyc2VjdHNX
aXRoCgkJCXRoaXMuaW5zdGFuY2UucG9zaXRpb25BYnMgPSBpbnN0LnBvc2l0aW9uQWJzOwoJCQl0
aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zID0gaW5zdC5oZWxwZXJQcm9wb3J0aW9uczsK
CQkJdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sgPSBpbnN0Lm9mZnNldC5jbGljazsKCQkJCgkJ
CWlmKHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVy
Q2FjaGUpKSB7CgoJCQkJLy9JZiBpdCBpbnRlcnNlY3RzLCB3ZSB1c2UgYSBsaXR0bGUgaXNPdmVy
IHZhcmlhYmxlIGFuZCBzZXQgaXQgb25jZSwgc28gb3VyIG1vdmUtaW4gc3R1ZmYgZ2V0cyBmaXJl
ZCBvbmx5IG9uY2UKCQkJCWlmKCF0aGlzLmluc3RhbmNlLmlzT3ZlcikgewoKCQkJCQl0aGlzLmlu
c3RhbmNlLmlzT3ZlciA9IDE7CgkJCQkJLy9Ob3cgd2UgZmFrZSB0aGUgc3RhcnQgb2YgZHJhZ2dp
bmcgZm9yIHRoZSBzb3J0YWJsZSBpbnN0YW5jZSwKCQkJCQkvL2J5IGNsb25pbmcgdGhlIGxpc3Qg
Z3JvdXAgaXRlbSwgYXBwZW5kaW5nIGl0IHRvIHRoZSBzb3J0YWJsZSBhbmQgdXNpbmcgaXQgYXMg
aW5zdC5jdXJyZW50SXRlbQoJCQkJCS8vV2UgY2FuIHRoZW4gZmlyZSB0aGUgc3RhcnQgZXZlbnQg
b2YgdGhlIHNvcnRhYmxlIHdpdGggb3VyIHBhc3NlZCBicm93c2VyIGV2ZW50LCBhbmQgb3VyIG93
biBoZWxwZXIgKHNvIGl0IGRvZXNuJ3QgY3JlYXRlIGEgbmV3IG9uZSkKCQkJCQl0aGlzLmluc3Rh
bmNlLmN1cnJlbnRJdGVtID0gJChzZWxmKS5jbG9uZSgpLmFwcGVuZFRvKHRoaXMuaW5zdGFuY2Uu
ZWxlbWVudCkuZGF0YSgic29ydGFibGUtaXRlbSIsIHRydWUpOwoJCQkJCXRoaXMuaW5zdGFuY2Uu
b3B0aW9ucy5faGVscGVyID0gdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcjsgLy9TdG9yZSBo
ZWxwZXIgb3B0aW9uIHRvIGxhdGVyIHJlc3RvcmUgaXQKCQkJCQl0aGlzLmluc3RhbmNlLm9wdGlv
bnMuaGVscGVyID0gZnVuY3Rpb24oKSB7IHJldHVybiB1aS5oZWxwZXJbMF07IH07CgoJCQkJCWV2
ZW50LnRhcmdldCA9IHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF07CgkJCQkJdGhpcy5pbnN0
YW5jZS5fbW91c2VDYXB0dXJlKGV2ZW50LCB0cnVlKTsKCQkJCQl0aGlzLmluc3RhbmNlLl9tb3Vz
ZVN0YXJ0KGV2ZW50LCB0cnVlLCB0cnVlKTsKCgkJCQkJLy9CZWNhdXNlIHRoZSBicm93c2VyIGV2
ZW50IGlzIHdheSBvZmYgdGhlIG5ldyBhcHBlbmRlZCBwb3J0bGV0LCB3ZSBtb2RpZnkgYSBjb3Vw
bGUgb2YgdmFyaWFibGVzIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMKCQkJCQl0aGlzLmluc3RhbmNl
Lm9mZnNldC5jbGljay50b3AgPSBpbnN0Lm9mZnNldC5jbGljay50b3A7CgkJCQkJdGhpcy5pbnN0
YW5jZS5vZmZzZXQuY2xpY2subGVmdCA9IGluc3Qub2Zmc2V0LmNsaWNrLmxlZnQ7CgkJCQkJdGhp
cy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQgLT0gaW5zdC5vZmZzZXQucGFyZW50LmxlZnQg
LSB0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdDsKCQkJCQl0aGlzLmluc3RhbmNlLm9m
ZnNldC5wYXJlbnQudG9wIC09IGluc3Qub2Zmc2V0LnBhcmVudC50b3AgLSB0aGlzLmluc3RhbmNl
Lm9mZnNldC5wYXJlbnQudG9wOwoKCQkJCQlpbnN0Ll90cmlnZ2VyKCJ0b1NvcnRhYmxlIiwgZXZl
bnQpOwoJCQkJCWluc3QuZHJvcHBlZCA9IHRoaXMuaW5zdGFuY2UuZWxlbWVudDsgLy9kcmFnZ2Fi
bGUgcmV2ZXJ0IG5lZWRzIHRoYXQKCQkJCQkvL2hhY2sgc28gcmVjZWl2ZS91cGRhdGUgY2FsbGJh
Y2tzIHdvcmsgKG1vc3RseSkKCQkJCQlpbnN0LmN1cnJlbnRJdGVtID0gaW5zdC5lbGVtZW50OwoJ
CQkJCXRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGUgPSBpbnN0OwoKCQkJCX0KCgkJCQkvL1Byb3Zp
ZGVkIHdlIGRpZCBhbGwgdGhlIHByZXZpb3VzIHN0ZXBzLCB3ZSBjYW4gZmlyZSB0aGUgZHJhZyBl
dmVudCBvZiB0aGUgc29ydGFibGUgb24gZXZlcnkgZHJhZ2dhYmxlIGRyYWcsIHdoZW4gaXQgaW50
ZXJzZWN0cyB3aXRoIHRoZSBzb3J0YWJsZQoJCQkJaWYodGhpcy5pbnN0YW5jZS5jdXJyZW50SXRl
bSkgdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKGV2ZW50KTsKCgkJCX0gZWxzZSB7CgoJCQkJLy9J
ZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIHRoZSBzb3J0YWJsZSwgYW5kIGl0IGludGVyc2Vj
dGVkIGJlZm9yZSwKCQkJCS8vd2UgZmFrZSB0aGUgZHJhZyBzdG9wIG9mIHRoZSBzb3J0YWJsZSwg
YnV0IG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlbW92ZSB0aGUgaGVscGVyIGJ5IHVzaW5nIGNhbmNl
bEhlbHBlclJlbW92YWwKCQkJCWlmKHRoaXMuaW5zdGFuY2UuaXNPdmVyKSB7CgoJCQkJCXRoaXMu
aW5zdGFuY2UuaXNPdmVyID0gMDsKCQkJCQl0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92
YWwgPSB0cnVlOwoJCQkJCQoJCQkJCS8vUHJldmVudCByZXZlcnRpbmcgb24gdGhpcyBmb3JjZWQg
c3RvcAoJCQkJCXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQgPSBmYWxzZTsKCQkJCQkKCQkJ
CQkvLyBUaGUgb3V0IGV2ZW50IG5lZWRzIHRvIGJlIHRyaWdnZXJlZCBpbmRlcGVuZGVudGx5CgkJ
CQkJdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcignb3V0JywgZXZlbnQsIHRoaXMuaW5zdGFuY2UuX3Vp
SGFzaCh0aGlzLmluc3RhbmNlKSk7CgkJCQkJCgkJCQkJdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9w
KGV2ZW50LCB0cnVlKTsKCQkJCQl0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyID0gdGhpcy5p
bnN0YW5jZS5vcHRpb25zLl9oZWxwZXI7CgoJCQkJCS8vTm93IHdlIHJlbW92ZSBvdXIgY3VycmVu
dEl0ZW0sIHRoZSBsaXN0IGdyb3VwIGNsb25lIGFnYWluLCBhbmQgdGhlIHBsYWNlaG9sZGVyLCBh
bmQgYW5pbWF0ZSB0aGUgaGVscGVyIGJhY2sgdG8gaXQncyBvcmlnaW5hbCBzaXplCgkJCQkJdGhp
cy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKTsKCQkJCQlpZih0aGlzLmluc3RhbmNlLnBs
YWNlaG9sZGVyKSB0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpOwoKCQkJCQlpbnN0
Ll90cmlnZ2VyKCJmcm9tU29ydGFibGUiLCBldmVudCk7CgkJCQkJaW5zdC5kcm9wcGVkID0gZmFs
c2U7IC8vZHJhZ2dhYmxlIHJldmVydCBuZWVkcyB0aGF0CgkJCQl9CgoJCQl9OwoKCQl9KTsKCgl9
Cn0pOwoKJC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiY3Vyc29yIiwgewoJc3RhcnQ6IGZ1
bmN0aW9uKGV2ZW50LCB1aSkgewoJCXZhciB0ID0gJCgnYm9keScpLCBvID0gJCh0aGlzKS5kYXRh
KCdkcmFnZ2FibGUnKS5vcHRpb25zOwoJCWlmICh0LmNzcygiY3Vyc29yIikpIG8uX2N1cnNvciA9
IHQuY3NzKCJjdXJzb3IiKTsKCQl0LmNzcygiY3Vyc29yIiwgby5jdXJzb3IpOwoJfSwKCXN0b3A6
IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCXZhciBvID0gJCh0aGlzKS5kYXRhKCdkcmFnZ2FibGUn
KS5vcHRpb25zOwoJCWlmIChvLl9jdXJzb3IpICQoJ2JvZHknKS5jc3MoImN1cnNvciIsIG8uX2N1
cnNvcik7Cgl9Cn0pOwoKJC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiaWZyYW1lRml4Iiwg
ewoJc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCXZhciBvID0gJCh0aGlzKS5kYXRhKCdk
cmFnZ2FibGUnKS5vcHRpb25zOwoJCSQoby5pZnJhbWVGaXggPT09IHRydWUgPyAiaWZyYW1lIiA6
IG8uaWZyYW1lRml4KS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkkKCc8ZGl2IGNsYXNzPSJ1aS1kcmFn
Z2FibGUtaWZyYW1lRml4IiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZjsiPjwvZGl2PicpCgkJCS5j
c3MoewoJCQkJd2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgrInB4IiwgaGVpZ2h0OiB0aGlzLm9mZnNl
dEhlaWdodCsicHgiLAoJCQkJcG9zaXRpb246ICJhYnNvbHV0ZSIsIG9wYWNpdHk6ICIwLjAwMSIs
IHpJbmRleDogMTAwMAoJCQl9KQoJCQkuY3NzKCQodGhpcykub2Zmc2V0KCkpCgkJCS5hcHBlbmRU
bygiYm9keSIpOwoJCX0pOwoJfSwKCXN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCSQoImRp
di51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHRoaXMpOyB9KTsgLy9SZW1vdmUgZnJhbWUgaGVscGVycwoJfQp9KTsK
CiQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwgIm9wYWNpdHkiLCB7CglzdGFydDogZnVuY3Rp
b24oZXZlbnQsIHVpKSB7CgkJdmFyIHQgPSAkKHVpLmhlbHBlciksIG8gPSAkKHRoaXMpLmRhdGEo
J2RyYWdnYWJsZScpLm9wdGlvbnM7CgkJaWYodC5jc3MoIm9wYWNpdHkiKSkgby5fb3BhY2l0eSA9
IHQuY3NzKCJvcGFjaXR5Iik7CgkJdC5jc3MoJ29wYWNpdHknLCBvLm9wYWNpdHkpOwoJfSwKCXN0
b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCXZhciBvID0gJCh0aGlzKS5kYXRhKCdkcmFnZ2Fi
bGUnKS5vcHRpb25zOwoJCWlmKG8uX29wYWNpdHkpICQodWkuaGVscGVyKS5jc3MoJ29wYWNpdHkn
LCBvLl9vcGFjaXR5KTsKCX0KfSk7CgokLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsICJzY3Jv
bGwiLCB7CglzdGFydDogZnVuY3Rpb24oZXZlbnQsIHVpKSB7CgkJdmFyIGkgPSAkKHRoaXMpLmRh
dGEoImRyYWdnYWJsZSIpOwoJCWlmKGkuc2Nyb2xsUGFyZW50WzBdICE9IGRvY3VtZW50ICYmIGku
c2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUgIT0gJ0hUTUwnKSBpLm92ZXJmbG93T2Zmc2V0ID0gaS5z
Y3JvbGxQYXJlbnQub2Zmc2V0KCk7Cgl9LAoJZHJhZzogZnVuY3Rpb24oZXZlbnQsIHVpKSB7CgoJ
CXZhciBpID0gJCh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSwgbyA9IGkub3B0aW9ucywgc2Nyb2xs
ZWQgPSBmYWxzZTsKCgkJaWYoaS5zY3JvbGxQYXJlbnRbMF0gIT0gZG9jdW1lbnQgJiYgaS5zY3Jv
bGxQYXJlbnRbMF0udGFnTmFtZSAhPSAnSFRNTCcpIHsKCgkJCWlmKCFvLmF4aXMgfHwgby5heGlz
ICE9ICd4JykgewoJCQkJaWYoKGkub3ZlcmZsb3dPZmZzZXQudG9wICsgaS5zY3JvbGxQYXJlbnRb
MF0ub2Zmc2V0SGVpZ2h0KSAtIGV2ZW50LnBhZ2VZIDwgby5zY3JvbGxTZW5zaXRpdml0eSkKCQkJ
CQlpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgPSBzY3JvbGxlZCA9IGkuc2Nyb2xsUGFyZW50
WzBdLnNjcm9sbFRvcCArIG8uc2Nyb2xsU3BlZWQ7CgkJCQllbHNlIGlmKGV2ZW50LnBhZ2VZIC0g
aS5vdmVyZmxvd09mZnNldC50b3AgPCBvLnNjcm9sbFNlbnNpdGl2aXR5KQoJCQkJCWkuc2Nyb2xs
UGFyZW50WzBdLnNjcm9sbFRvcCA9IHNjcm9sbGVkID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xs
VG9wIC0gby5zY3JvbGxTcGVlZDsKCQkJfQoKCQkJaWYoIW8uYXhpcyB8fCBvLmF4aXMgIT0gJ3kn
KSB7CgkJCQlpZigoaS5vdmVyZmxvd09mZnNldC5sZWZ0ICsgaS5zY3JvbGxQYXJlbnRbMF0ub2Zm
c2V0V2lkdGgpIC0gZXZlbnQucGFnZVggPCBvLnNjcm9sbFNlbnNpdGl2aXR5KQoJCQkJCWkuc2Ny
b2xsUGFyZW50WzBdLnNjcm9sbExlZnQgPSBzY3JvbGxlZCA9IGkuc2Nyb2xsUGFyZW50WzBdLnNj
cm9sbExlZnQgKyBvLnNjcm9sbFNwZWVkOwoJCQkJZWxzZSBpZihldmVudC5wYWdlWCAtIGkub3Zl
cmZsb3dPZmZzZXQubGVmdCA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCgkJCQkJaS5zY3JvbGxQYXJl
bnRbMF0uc2Nyb2xsTGVmdCA9IHNjcm9sbGVkID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVm
dCAtIG8uc2Nyb2xsU3BlZWQ7CgkJCX0KCgkJfSBlbHNlIHsKCgkJCWlmKCFvLmF4aXMgfHwgby5h
eGlzICE9ICd4JykgewoJCQkJaWYoZXZlbnQucGFnZVkgLSAkKGRvY3VtZW50KS5zY3JvbGxUb3Ao
KSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCgkJCQkJc2Nyb2xsZWQgPSAkKGRvY3VtZW50KS5zY3Jv
bGxUb3AoJChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgLSBvLnNjcm9sbFNwZWVkKTsKCQkJCWVsc2Ug
aWYoJCh3aW5kb3cpLmhlaWdodCgpIC0gKGV2ZW50LnBhZ2VZIC0gJChkb2N1bWVudCkuc2Nyb2xs
VG9wKCkpIDwgby5zY3JvbGxTZW5zaXRpdml0eSkKCQkJCQlzY3JvbGxlZCA9ICQoZG9jdW1lbnQp
LnNjcm9sbFRvcCgkKGRvY3VtZW50KS5zY3JvbGxUb3AoKSArIG8uc2Nyb2xsU3BlZWQpOwoJCQl9
CgoJCQlpZighby5heGlzIHx8IG8uYXhpcyAhPSAneScpIHsKCQkJCWlmKGV2ZW50LnBhZ2VYIC0g
JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIDwgby5zY3JvbGxTZW5zaXRpdml0eSkKCQkJCQlzY3Jv
bGxlZCA9ICQoZG9jdW1lbnQpLnNjcm9sbExlZnQoJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIC0g
by5zY3JvbGxTcGVlZCk7CgkJCQllbHNlIGlmKCQod2luZG93KS53aWR0aCgpIC0gKGV2ZW50LnBh
Z2VYIC0gJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkpCgkJ
CQkJc2Nyb2xsZWQgPSAkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCQoZG9jdW1lbnQpLnNjcm9sbExl
ZnQoKSArIG8uc2Nyb2xsU3BlZWQpOwoJCQl9CgoJCX0KCgkJaWYoc2Nyb2xsZWQgIT09IGZhbHNl
ICYmICQudWkuZGRtYW5hZ2VyICYmICFvLmRyb3BCZWhhdmlvdXIpCgkJCSQudWkuZGRtYW5hZ2Vy
LnByZXBhcmVPZmZzZXRzKGksIGV2ZW50KTsKCgl9Cn0pOwoKJC51aS5wbHVnaW4uYWRkKCJkcmFn
Z2FibGUiLCAic25hcCIsIHsKCXN0YXJ0OiBmdW5jdGlvbihldmVudCwgdWkpIHsKCgkJdmFyIGkg
PSAkKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLCBvID0gaS5vcHRpb25zOwoJCWkuc25hcEVsZW1l
bnRzID0gW107CgoJCSQoby5zbmFwLmNvbnN0cnVjdG9yICE9IFN0cmluZyA/ICggby5zbmFwLml0
ZW1zIHx8ICc6ZGF0YShkcmFnZ2FibGUpJyApIDogby5zbmFwKS5lYWNoKGZ1bmN0aW9uKCkgewoJ
CQl2YXIgJHQgPSAkKHRoaXMpOyB2YXIgJG8gPSAkdC5vZmZzZXQoKTsKCQkJaWYodGhpcyAhPSBp
LmVsZW1lbnRbMF0pIGkuc25hcEVsZW1lbnRzLnB1c2goewoJCQkJaXRlbTogdGhpcywKCQkJCXdp
ZHRoOiAkdC5vdXRlcldpZHRoKCksIGhlaWdodDogJHQub3V0ZXJIZWlnaHQoKSwKCQkJCXRvcDog
JG8udG9wLCBsZWZ0OiAkby5sZWZ0CgkJCX0pOwoJCX0pOwoKCX0sCglkcmFnOiBmdW5jdGlvbihl
dmVudCwgdWkpIHsKCgkJdmFyIGluc3QgPSAkKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLCBvID0g
aW5zdC5vcHRpb25zOwoJCXZhciBkID0gby5zbmFwVG9sZXJhbmNlOwoKCQl2YXIgeDEgPSB1aS5v
ZmZzZXQubGVmdCwgeDIgPSB4MSArIGluc3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsCgkJCXkx
ID0gdWkub2Zmc2V0LnRvcCwgeTIgPSB5MSArIGluc3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0
OwoKCQlmb3IgKHZhciBpID0gaW5zdC5zbmFwRWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBp
LS0pewoKCQkJdmFyIGwgPSBpbnN0LnNuYXBFbGVtZW50c1tpXS5sZWZ0LCByID0gbCArIGluc3Qu
c25hcEVsZW1lbnRzW2ldLndpZHRoLAoJCQkJdCA9IGluc3Quc25hcEVsZW1lbnRzW2ldLnRvcCwg
YiA9IHQgKyBpbnN0LnNuYXBFbGVtZW50c1tpXS5oZWlnaHQ7CgoJCQkvL1llcywgSSBrbm93LCB0
aGlzIGlzIGluc2FuZSA7KQoJCQlpZighKChsLWQgPCB4MSAmJiB4MSA8IHIrZCAmJiB0LWQgPCB5
MSAmJiB5MSA8IGIrZCkgfHwgKGwtZCA8IHgxICYmIHgxIDwgcitkICYmIHQtZCA8IHkyICYmIHky
IDwgYitkKSB8fCAobC1kIDwgeDIgJiYgeDIgPCByK2QgJiYgdC1kIDwgeTEgJiYgeTEgPCBiK2Qp
IHx8IChsLWQgPCB4MiAmJiB4MiA8IHIrZCAmJiB0LWQgPCB5MiAmJiB5MiA8IGIrZCkpKSB7CgkJ
CQlpZihpbnN0LnNuYXBFbGVtZW50c1tpXS5zbmFwcGluZykgKGluc3Qub3B0aW9ucy5zbmFwLnJl
bGVhc2UgJiYgaW5zdC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKGluc3QuZWxlbWVudCwgZXZl
bnQsICQuZXh0ZW5kKGluc3QuX3VpSGFzaCgpLCB7IHNuYXBJdGVtOiBpbnN0LnNuYXBFbGVtZW50
c1tpXS5pdGVtIH0pKSk7CgkJCQlpbnN0LnNuYXBFbGVtZW50c1tpXS5zbmFwcGluZyA9IGZhbHNl
OwoJCQkJY29udGludWU7CgkJCX0KCgkJCWlmKG8uc25hcE1vZGUgIT0gJ2lubmVyJykgewoJCQkJ
dmFyIHRzID0gTWF0aC5hYnModCAtIHkyKSA8PSBkOwoJCQkJdmFyIGJzID0gTWF0aC5hYnMoYiAt
IHkxKSA8PSBkOwoJCQkJdmFyIGxzID0gTWF0aC5hYnMobCAtIHgyKSA8PSBkOwoJCQkJdmFyIHJz
ID0gTWF0aC5hYnMociAtIHgxKSA8PSBkOwoJCQkJaWYodHMpIHVpLnBvc2l0aW9uLnRvcCA9IGlu
c3QuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiB0IC0gaW5zdC5oZWxwZXJQ
cm9wb3J0aW9ucy5oZWlnaHQsIGxlZnQ6IDAgfSkudG9wIC0gaW5zdC5tYXJnaW5zLnRvcDsKCQkJ
CWlmKGJzKSB1aS5wb3NpdGlvbi50b3AgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRp
dmUiLCB7IHRvcDogYiwgbGVmdDogMCB9KS50b3AgLSBpbnN0Lm1hcmdpbnMudG9wOwoJCQkJaWYo
bHMpIHVpLnBvc2l0aW9uLmxlZnQgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUi
LCB7IHRvcDogMCwgbGVmdDogbCAtIGluc3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggfSkubGVm
dCAtIGluc3QubWFyZ2lucy5sZWZ0OwoJCQkJaWYocnMpIHVpLnBvc2l0aW9uLmxlZnQgPSBpbnN0
Ll9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLCB7IHRvcDogMCwgbGVmdDogciB9KS5sZWZ0
IC0gaW5zdC5tYXJnaW5zLmxlZnQ7CgkJCX0KCgkJCXZhciBmaXJzdCA9ICh0cyB8fCBicyB8fCBs
cyB8fCBycyk7CgoJCQlpZihvLnNuYXBNb2RlICE9ICdvdXRlcicpIHsKCQkJCXZhciB0cyA9IE1h
dGguYWJzKHQgLSB5MSkgPD0gZDsKCQkJCXZhciBicyA9IE1hdGguYWJzKGIgLSB5MikgPD0gZDsK
CQkJCXZhciBscyA9IE1hdGguYWJzKGwgLSB4MSkgPD0gZDsKCQkJCXZhciBycyA9IE1hdGguYWJz
KHIgLSB4MikgPD0gZDsKCQkJCWlmKHRzKSB1aS5wb3NpdGlvbi50b3AgPSBpbnN0Ll9jb252ZXJ0
UG9zaXRpb25UbygicmVsYXRpdmUiLCB7IHRvcDogdCwgbGVmdDogMCB9KS50b3AgLSBpbnN0Lm1h
cmdpbnMudG9wOwoJCQkJaWYoYnMpIHVpLnBvc2l0aW9uLnRvcCA9IGluc3QuX2NvbnZlcnRQb3Np
dGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiBiIC0gaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWln
aHQsIGxlZnQ6IDAgfSkudG9wIC0gaW5zdC5tYXJnaW5zLnRvcDsKCQkJCWlmKGxzKSB1aS5wb3Np
dGlvbi5sZWZ0ID0gaW5zdC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIiwgeyB0b3A6IDAs
IGxlZnQ6IGwgfSkubGVmdCAtIGluc3QubWFyZ2lucy5sZWZ0OwoJCQkJaWYocnMpIHVpLnBvc2l0
aW9uLmxlZnQgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLCB7IHRvcDogMCwg
bGVmdDogciAtIGluc3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggfSkubGVmdCAtIGluc3QubWFy
Z2lucy5sZWZ0OwoJCQl9CgoJCQlpZighaW5zdC5zbmFwRWxlbWVudHNbaV0uc25hcHBpbmcgJiYg
KHRzIHx8IGJzIHx8IGxzIHx8IHJzIHx8IGZpcnN0KSkKCQkJCShpbnN0Lm9wdGlvbnMuc25hcC5z
bmFwICYmIGluc3Qub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChpbnN0LmVsZW1lbnQsIGV2ZW50LCAk
LmV4dGVuZChpbnN0Ll91aUhhc2goKSwgeyBzbmFwSXRlbTogaW5zdC5zbmFwRWxlbWVudHNbaV0u
aXRlbSB9KSkpOwoJCQlpbnN0LnNuYXBFbGVtZW50c1tpXS5zbmFwcGluZyA9ICh0cyB8fCBicyB8
fCBscyB8fCBycyB8fCBmaXJzdCk7CgoJCX07CgoJfQp9KTsKCiQudWkucGx1Z2luLmFkZCgiZHJh
Z2dhYmxlIiwgInN0YWNrIiwgewoJc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoKCQl2YXIg
byA9ICQodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9uczsKCgkJdmFyIGdyb3VwID0gJC5t
YWtlQXJyYXkoJChvLnN0YWNrKSkuc29ydChmdW5jdGlvbihhLGIpIHsKCQkJcmV0dXJuIChwYXJz
ZUludCgkKGEpLmNzcygiekluZGV4IiksMTApIHx8IDApIC0gKHBhcnNlSW50KCQoYikuY3NzKCJ6
SW5kZXgiKSwxMCkgfHwgMCk7CgkJfSk7CgkJaWYgKCFncm91cC5sZW5ndGgpIHsgcmV0dXJuOyB9
CgkJCgkJdmFyIG1pbiA9IHBhcnNlSW50KGdyb3VwWzBdLnN0eWxlLnpJbmRleCkgfHwgMDsKCQkk
KGdyb3VwKS5lYWNoKGZ1bmN0aW9uKGkpIHsKCQkJdGhpcy5zdHlsZS56SW5kZXggPSBtaW4gKyBp
OwoJCX0pOwoKCQl0aGlzWzBdLnN0eWxlLnpJbmRleCA9IG1pbiArIGdyb3VwLmxlbmd0aDsKCgl9
Cn0pOwoKJC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiekluZGV4IiwgewoJc3RhcnQ6IGZ1
bmN0aW9uKGV2ZW50LCB1aSkgewoJCXZhciB0ID0gJCh1aS5oZWxwZXIpLCBvID0gJCh0aGlzKS5k
YXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zOwoJCWlmKHQuY3NzKCJ6SW5kZXgiKSkgby5fekluZGV4
ID0gdC5jc3MoInpJbmRleCIpOwoJCXQuY3NzKCd6SW5kZXgnLCBvLnpJbmRleCk7Cgl9LAoJc3Rv
cDogZnVuY3Rpb24oZXZlbnQsIHVpKSB7CgkJdmFyIG8gPSAkKHRoaXMpLmRhdGEoImRyYWdnYWJs
ZSIpLm9wdGlvbnM7CgkJaWYoby5fekluZGV4KSAkKHVpLmhlbHBlcikuY3NzKCd6SW5kZXgnLCBv
Ll96SW5kZXgpOwoJfQp9KTsKCn0pKGpRdWVyeSk7Cl8QD3RleHQvamF2YXNjcmlwdNQFBgcIQEFC
Q18QR2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9mcmFtZXdvcmsvY29yZS9q
cy9GbHVpZERvY3VtZW50LmpzTxEEIWJwbGlzdDAw1AECAwQFBmJjWCR2ZXJzaW9uWCRvYmplY3Rz
WSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcXVUkbnVs
bN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNTJDExUiQ4ViRjbGFz
c1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagByABYAbgAYQAdMjECQlJidXTlMuYmFzZVtO
Uy5yZWxhdGl2ZYAAgASAA18QR2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9m
cmFtZXdvcmsvY29yZS9qcy9GbHVpZERvY3VtZW50Lmpz0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nl
c1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr5k1BDI0zM0EDU+R1dOUy5rZXlzWk5TLm9i
amVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVGgBGAEoATgBSAFYAWgBeAGIAZ
VlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdl
c15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKV8QD3Rl
eHQvamF2YXNjcmlwdF8QGiI0NDFlMDgtZjcwLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3Qg
MjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVieXRlc1Qz
OTUyVWNsb3Nl0iorWVpcTlNEaWN0aW9uYXJ5olkvEQ9wXxAPdGV4dC9qYXZhc2NyaXB00iorXl9f
EBFOU0hUVFBVUkxSZXNwb25zZaNgYS9fEBFOU0hUVFBVUkxSZXNwb25zZV1OU1VSTFJlc3BvbnNl
XxAPTlNLZXllZEFyY2hpdmVy0WRlXxATV2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAy
ADcAVwBdAHgAewB/AIIAhQCIAIwAjwCWAJkAnACfAKIApQCnAKkAqwCtAK8AsQCzALUAtwC5ALsA
vQDEAMwA2ADaANwA3gEoAS0BOAFBAUcBSgFQAVkBYgFkAWsBcwF+AYcBiQGLAY0BjwGRAZMBlQGX
AaABogGkAaYBqAGqAawBrgGwAbIBuQHGAcsB2QHeAewB+wIGAh8CMQJOAm4CjgKUApkCnwKkArEC
tAK3AskCzgLiAuYC+gMIAxoDHQMzAAAAAAAAAgEAAAAAAAAAZgAAAAAAAAAAAAAAAAAAAzVPEQ9w
LyoKQ29weXJpZ2h0IDIwMDctMjAxMCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQpDb3B5cmlnaHQg
MjAwNy0yMDA5IFVuaXZlcnNpdHkgb2YgVG9yb250bwpDb3B5cmlnaHQgMjAxMC0yMDExIEx1Y2Vu
ZG8gRGV2ZWxvcG1lbnQgTHRkLgpDb3B5cmlnaHQgMjAxMCBPQ0FEIFVuaXZlcnNpdHkKCkxpY2Vu
c2VkIHVuZGVyIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSAoRUNMKSwgVmVyc2lv
biAyLjAgb3IgdGhlIE5ldwpCU0QgbGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIG9uZSB0aGVzZQpMaWNlbnNlcy4KCllvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgRUNMIDIuMCBMaWNlbnNlIGFuZCBCU0QgTGljZW5zZSBhdApodHRw
czovL2dpdGh1Yi5jb20vZmx1aWQtcHJvamVjdC9pbmZ1c2lvbi9yYXcvbWFzdGVyL0luZnVzaW9u
LUxJQ0VOU0UudHh0CiovCgovKiogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB3aGljaCBk
ZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIGEgRE9NIGRvY3VtZW50CiAqIGJ1dCB3aGljaCBkbyBu
b3QgZGVwZW5kIG9uIHRoZSBjb250ZW50cyBvZiBGbHVpZC5qcyAqKi8KCi8vIERlY2xhcmUgZGVw
ZW5kZW5jaWVzCi8qZ2xvYmFsIGZsdWlkXzFfNDp0cnVlLCBqUXVlcnkqLwoKLy8gSlNMaW50IG9w
dGlvbnMgCi8qanNsaW50IHdoaXRlOiB0cnVlLCBmdW5jaW52b2tlOiB0cnVlLCB1bmRlZjogdHJ1
ZSwgbmV3Y2FwOiB0cnVlLCBub21lbjogdHJ1ZSwgcmVnZXhwOiB0cnVlLCBiaXR3aXNlOiB0cnVl
LCBicm93c2VyOiB0cnVlLCBmb3JpbjogdHJ1ZSwgbWF4ZXJyOiAxMDAsIGluZGVudDogNCAqLwoK
dmFyIGZsdWlkXzFfNCA9IGZsdWlkXzFfNCB8fCB7fTsKCihmdW5jdGlvbiAoJCwgZmx1aWQpIHsK
CiAgICAvLyBQcml2YXRlIGNvbnN0YW50cy4KICAgIHZhciBOQU1FU1BBQ0VfS0VZID0gImZsdWlk
LXNjb3BlZC1kYXRhIjsKCiAgICAvKioKICAgICAqIEdldHMgc3RvcmVkIHN0YXRlIGZyb20gdGhl
IGpRdWVyeSBpbnN0YW5jZSdzIGRhdGEgbWFwLgogICAgICogVGhpcyBmdW5jdGlvbiBpcyB1bnN1
cHBvcnRlZDogSXQgaXMgbm90IHJlYWxseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGltcGxlbWVudG9y
cy4KICAgICAqLwogICAgZmx1aWQuZ2V0U2NvcGVkRGF0YSA9IGZ1bmN0aW9uKHRhcmdldCwga2V5
KSB7CiAgICAgICAgdmFyIGRhdGEgPSAkKHRhcmdldCkuZGF0YShOQU1FU1BBQ0VfS0VZKTsKICAg
ICAgICByZXR1cm4gZGF0YSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDsKICAgIH07CgogICAgLyoq
CiAgICAgKiBTdG9yZXMgc3RhdGUgaW4gdGhlIGpRdWVyeSBpbnN0YW5jZSdzIGRhdGEgbWFwLiBV
bmxpa2UgalF1ZXJ5J3MgdmVyc2lvbiwKICAgICAqIGFjY2VwdHMgbXVsdGlwbGUtZWxlbWVudCBq
UXVlcmllcy4KICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdW5zdXBwb3J0ZWQ6IEl0IGlzIG5vdCBy
ZWFsbHkgaW50ZW5kZWQgZm9yIHVzZSBieSBpbXBsZW1lbnRvcnMuCiAgICAgKi8KICAgIGZsdWlk
LnNldFNjb3BlZERhdGEgPSBmdW5jdGlvbih0YXJnZXQsIGtleSwgdmFsdWUpIHsKICAgICAgICAk
KHRhcmdldCkuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSAkLmRhdGEo
dGhpcywgTkFNRVNQQUNFX0tFWSkgfHwge307CiAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVl
OwoKICAgICAgICAgICAgJC5kYXRhKHRoaXMsIE5BTUVTUEFDRV9LRVksIGRhdGEpOwogICAgICAg
IH0pOwogICAgfTsKCiAgICAvKiogR2xvYmFsIGZvY3VzIG1hbmFnZXIgLSBtYWtlcyB1c2Ugb2Yg
ImZvY3VzaW4iIGV2ZW50IHN1cHBvcnRlZCBpbiBqcXVlcnkgMS40LjIgb3IgbGF0ZXIuCiAgICAg
Ki8KCiAgICB2YXIgbGFzdEZvY3VzZWRFbGVtZW50ID0gbnVsbDsKICAgIAogICAgJChkb2N1bWVu
dCkuYmluZCgiZm9jdXNpbiIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICBsYXN0Rm9jdXNlZEVs
ZW1lbnQgPSBldmVudC50YXJnZXQ7CiAgICB9KTsKICAgIAogICAgZmx1aWQuZ2V0TGFzdEZvY3Vz
ZWRFbGVtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGxhc3RGb2N1c2VkRWxlbWVu
dDsKICAgIH0KCgogICAgdmFyIEVOQUJMRU1FTlRfS0VZID0gImVuYWJsZW1lbnQiOwoKICAgIC8q
KiBRdWVyaWVzIG9yIHNldHMgdGhlIGVuYWJsZWQgc3RhdHVzIG9mIGEgY29udHJvbC4gQW4gYWN0
aXZhdGFibGUgbm9kZQogICAgICogbWF5IGJlICJkaXNhYmxlZCIgaW4gd2hpY2ggY2FzZSBpdHMg
a2V5Ym9hcmQgYmluZGluZ3Mgd2lsbCBiZSBpbm9wZXJhYmxlCiAgICAgKiAoYnV0IHN0aWxsIHN0
b3JlZCkgdW50aWwgaXQgaXMgcmVlbmFibGVkIGFnYWluLgogICAgICogVGhpcyBmdW5jdGlvbiBp
cyB1bnN1cHBvcnRlZDogSXQgaXMgbm90IHJlYWxseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGltcGxl
bWVudG9ycy4KICAgICAqLwogICAgIAogICAgZmx1aWQuZW5hYmxlZCA9IGZ1bmN0aW9uKHRhcmdl
dCwgc3RhdGUpIHsKICAgICAgICB0YXJnZXQgPSAkKHRhcmdldCk7CiAgICAgICAgaWYgKHN0YXRl
ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmdldFNjb3BlZERhdGEo
dGFyZ2V0LCBFTkFCTEVNRU5UX0tFWSkgIT09IGZhbHNlOwogICAgICAgIH0KICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgJCgiKiIsIHRhcmdldCkuYWRkKHRhcmdldCkuZWFjaChmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIGlmIChmbHVpZC5nZXRTY29wZWREYXRhKHRoaXMsIEVOQUJMRU1F
TlRfS0VZKSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZmx1aWQuc2V0U2Nv
cGVkRGF0YSh0aGlzLCBFTkFCTEVNRU5UX0tFWSwgc3RhdGUpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgZWxzZSBpZiAoL3NlbGVjdHx0ZXh0YXJlYXxpbnB1dC9pLnRlc3QodGhp
cy5ub2RlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoImRpc2FibGVk
IiwgIXN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
IGZsdWlkLnNldFNjb3BlZERhdGEodGFyZ2V0LCBFTkFCTEVNRU5UX0tFWSwgc3RhdGUpOwogICAg
ICAgIH0KICAgIH07CiAgICAKICAgIGZsdWlkLmluaXRFbmFibGVtZW50ID0gZnVuY3Rpb24odGFy
Z2V0KSB7CiAgICAgICAgZmx1aWQuc2V0U2NvcGVkRGF0YSh0YXJnZXQsIEVOQUJMRU1FTlRfS0VZ
LCB0cnVlKTsKICAgIH07CiAgICAKICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHNp
bmNlIHNpbXVsYXRpb24gb2YgZm9jdXMgZXZlbnRzIGJ5IGpRdWVyeSB1bmRlciBJRQogICAgLy8g
aXMgbm90IHN1ZmZpY2llbnRseSBnb29kIHRvIGludGVyY2VwdCB0aGUgImZvY3VzaW4iIGJpbmRp
bmcuIEFueSBjb2RlIHdoaWNoIHRyaWdnZXJzCiAgICAvLyBmb2N1cyBvciBibHVyIHN5bnRoZXRp
Y2FsbHkgdGhyb3VnaG91dCB0aGUgZnJhbWV3b3JrIGFuZCBjbGllbnQgY29kZSBtdXN0IHVzZSB0
aGlzIGZ1bmN0aW9uLAogICAgLy8gZXNwZWNpYWxseSBpZiBjb3JyZWN0IGNyb3NzLXBsYXRmb3Jt
IGludGVyYWN0aW9uIGlzIHJlcXVpcmVkIHdpdGggdGhlICJkZWFkTWFuc0JsdXIiIGZ1bmN0aW9u
LgogICAgCiAgICBmdW5jdGlvbiBhcHBseU9wKG5vZGUsIGZ1bmMpIHsKICAgICAgICBub2RlID0g
JChub2RlKTsKICAgICAgICBub2RlLnRyaWdnZXIoImZsdWlkLSIrZnVuYyk7CiAgICAgICAgbm9k
ZVtmdW5jXSgpOwogICAgfQogICAgCiAgICAkLmVhY2goWyJmb2N1cyIsICJibHVyIl0sIGZ1bmN0
aW9uKGksIG5hbWUpIHsKICAgICAgICBmbHVpZFtuYW1lXSA9IGZ1bmN0aW9uKGVsZW0pIHsKICAg
ICAgICAgICAgYXBwbHlPcChlbGVtLCBuYW1lKTsKICAgICAgICB9CiAgICB9KTsKICAgIAp9KShq
UXVlcnksIGZsdWlkXzFfNCk7Cl8QD3RleHQvamF2YXNjcmlwdNQFBgcIRUZHSF8QTmh0dHA6Ly9m
bHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9mcmFtZXdvcmsvY29yZS9qcy9qcXVlcnkua2V5
Ym9hcmQtYTExeS5qc08RBCpicGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0c1kkYXJj
aGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hbXF1VJG51bGzdCQoL
DA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRS
JDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVs
YXRpdmWAAIAEgANfEE5odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3
b3JrL2NvcmUvanMvanF1ZXJ5LmtleWJvYXJkLWExMXkuanPSKissLVokY2xhc3NuYW1lWCRjbGFz
c2VzVU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAu44RmEMjTMzQQNT5HV05TLmtleXNaTlMu
b2JqZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaAF4AY
gBlWU2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQtUmFu
Z2VzXkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1MpXxAP
dGV4dC9qYXZhc2NyaXB0XxAbIjQ0MWUwZS01Nzk0LTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBP
Y3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVieXRl
c1UyMjQyMFVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxFXlF8QD3RleHQvamF2YXNjcmlwdNIq
K15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxSZXNw
b25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAj
AC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCpAKsArQCvALEAswC1ALcA
uQC7AL0AxADMANgA2gDcAN4BLwE0AT8BSAFOAVEBVwFgAWkBawFyAXoBhQGOAZABkgGUAZYBmAGa
AZwBngGnAakBqwGtAa8BsQGzAbUBtwG5AcABzQHSAeAB5QHzAgICDQImAjgCVgJ2ApYCnAKiAqgC
rQK6Ar0CwALSAtcC6wLvAwMDEQMjAyYDPAAAAAAAAAIBAAAAAAAAAGYAAAAAAAAAAAAAAAAAAAM+
TxFXlC8qCkNvcHlyaWdodCAyMDA4LTIwMTAgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKQ29weXJp
Z2h0IDIwMDgtMjAxMCBVbml2ZXJzaXR5IG9mIFRvcm9udG8KQ29weXJpZ2h0IDIwMTAtMjAxMSBM
dWNlbmRvIERldmVsb3BtZW50IEx0ZC4KQ29weXJpZ2h0IDIwMTAtMjAxMSBPQ0FEIFVuaXZlcnNp
dHkKCkxpY2Vuc2VkIHVuZGVyIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSAoRUNM
KSwgVmVyc2lvbiAyLjAgb3IgdGhlIE5ldwpCU0QgbGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIG9uZSB0aGVzZQpMaWNlbnNlcy4KCllv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgRUNMIDIuMCBMaWNlbnNlIGFuZCBCU0QgTGljZW5z
ZSBhdApodHRwczovL2dpdGh1Yi5jb20vZmx1aWQtcHJvamVjdC9pbmZ1c2lvbi9yYXcvbWFzdGVy
L0luZnVzaW9uLUxJQ0VOU0UudHh0CiovCgovLyBEZWNsYXJlIGRlcGVuZGVuY2llcwovKmdsb2Jh
bCBmbHVpZDp0cnVlLCBmbHVpZF8xXzQ6dHJ1ZSwgalF1ZXJ5Ki8KCi8vIEpTTGludCBvcHRpb25z
IAovKmpzbGludCB3aGl0ZTogdHJ1ZSwgZnVuY2ludm9rZTogdHJ1ZSwgdW5kZWY6IHRydWUsIG5l
d2NhcDogdHJ1ZSwgbm9tZW46IHRydWUsIHJlZ2V4cDogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgYnJv
d3NlcjogdHJ1ZSwgZm9yaW46IHRydWUsIG1heGVycjogMTAwLCBpbmRlbnQ6IDQgKi8KCnZhciBm
bHVpZF8xXzQgPSBmbHVpZF8xXzQgfHwge307CnZhciBmbHVpZCA9IGZsdWlkIHx8IGZsdWlkXzFf
NDsKCihmdW5jdGlvbiAoJCwgZmx1aWQpIHsKCiAgICAvLyAkKCkuZmx1aWQoInNlbGVjdGFibGUi
LCBhcmdzKQogICAgLy8gJCgpLmZsdWlkKCJzZWxlY3RhYmxlIi50aGF0KCkKICAgIC8vICQoKS5m
bHVpZCgicGFnZXIucGFnZXJCYXIiLCBhcmdzKQogICAgLy8gJCgpLmZsdWlkKCJyZW9yZGVyZXIi
LCBvcHRpb25zKQoKLyoqIENyZWF0ZSBhICJicmlkZ2UiIGZyb20gY29kZSB3cml0dGVuIGluIHRo
ZSBGbHVpZCBzdGFuZGFyZCAidGhhdC1pc3QiIHN0eWxlLAogKiAgdG8gdGhlIHN0YW5kYXJkIEpR
dWVyeSBVSSBwbHVnaW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmllZCBhdCBodHRwOi8vZG9jcy5qcXVl
cnkuY29tL1VJL0d1aWRlbGluZXMgLgogKiAgRXZlcnkgRmx1aWQgY29tcG9uZW50IGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIHRvcC1sZXZlbCBzdGFuZGFyZCBzaWduYXR1cmUgKEpRdWVyeWFibGUsIG9w
dGlvbnMpCiAqICB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCBpZGlvbWF0aWNhbGx5IHRvIHRo
ZSBKUXVlcnkgVUkgc3RhbmRhcmQgdmlhIHRoaXMgYWRhcHRlci4gCiAqICBBbnkgcmV0dXJuIHZh
bHVlIHdoaWNoIGlzIGEgcHJpbWl0aXZlIG9yIGFycmF5IHR5cGUgd2lsbCBiZWNvbWUgdGhlIHJl
dHVybiB2YWx1ZQogKiAgb2YgdGhlICJicmlkZ2VkIiBmdW5jdGlvbiAtIGhvd2V2ZXIsIHdoZXJl
IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGdlbmVyYWwgaGFzaAogKiAgKG9iamVjdCkgdGhpcyBp
cyBpbnRlcnByZXRlZCBhcyBmb3JtaW5nIHBhcnQgb2YgdGhlIEZsdWlkICJyZXR1cm4gdGhhdCIg
cGF0dGVybiwKICogIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBpbnN0ZWFkIGJlIGJyaWRnZWQgdG8g
InJldHVybiB0aGlzIiBhcyBwZXIgSlF1ZXJ5IHN0YW5kYXJkLAogKiAgcGVybWl0dGluZyBjaGFp
bmluZyB0byBvY2N1ci4gSG93ZXZlciwgYXMgYSBjb3VydGVzeSwgdGhlIHBhcnRpY3VsYXIgInRo
aXMiIHJldHVybmVkCiAqICB3aWxsIGJlIGF1Z21lbnRlZCB3aXRoIGEgZnVuY3Rpb24gdGhhdCgp
IHdoaWNoIHdpbGwgYWxsb3cgdGhlIG9yaWdpbmFsIHJldHVybgogKiAgdmFsdWUgdG8gYmUgcmV0
cmlldmVkIGlmIGRlc2lyZWQuCiAqICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSB1bmRl
ciB3aGljaCB0aGUgInBsdWdpbiBzcGFjZSIgaXMgdG8gYmUgaW5qZWN0ZWQgaW50bwogKiAgSlF1
ZXJ5CiAqICBAcGFyYW0ge09iamVjdH0gcGVlciBUaGUgcm9vdCBvZiB0aGUgbmFtZXNwYWNlIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIHBlZXIgb2JqZWN0LgogKi8KCiAgICBmbHVpZC50aGF0aXN0QnJp
ZGdlID0gZnVuY3Rpb24gKG5hbWUsIHBlZXIpIHsKCiAgICAgICAgdmFyIHRvZ28gPSBmdW5jdGlv
bihmdW5jbmFtZSkgewogICAgICAgICAgICB2YXIgc2VncyA9IGZ1bmNuYW1lLnNwbGl0KCIuIik7
CiAgICAgICAgICAgIHZhciBtb3ZlID0gcGVlcjsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBzZWdzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBtb3ZlID0gbW92ZVtzZWdz
W2ldXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYXJncyA9IFt0aGlzXTsKICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgICAgIGFyZ3Mg
PSBhcmdzLmNvbmNhdCgkLm1ha2VBcnJheShhcmd1bWVudHNbMV0pKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICB2YXIgcmV0ID0gbW92ZS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICAgICAg
dGhpcy50aGF0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mKHJldCk7CiAgICAgICAgICAg
IHJldHVybiAhcmV0IHx8IHR5cGUgPT09ICJzdHJpbmciIHx8IHR5cGUgPT09ICJudW1iZXIiIHx8
IHR5cGUgPT09ICJib29sZWFuIgogICAgICAgICAgICAgIHx8IHJldCAmJiByZXQubGVuZ3RoICE9
PSB1bmRlZmluZWQ/IHJldDogdGhpczsKICAgICAgICB9OwogICAgICAgICQuZm5bbmFtZV0gPSB0
b2dvOwogICAgICAgIHJldHVybiB0b2dvOwogICAgfTsKCiAgICBmbHVpZC50aGF0aXN0QnJpZGdl
KCJmbHVpZCIsIGZsdWlkKTsKICAgIGZsdWlkLnRoYXRpc3RCcmlkZ2UoImZsdWlkXzFfNCIsIGZs
dWlkXzFfNCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUYWJpbmRleCBub3JtYWxpemF0aW9uIC0g
Y29tcGVuc2F0ZSBmb3IgYnJvd3NlciBkaWZmZXJlbmNlcyBpbiBuYW1pbmcKICogYW5kIGZ1bmN0
aW9uIG9mICJ0YWJpbmRleCIgYXR0cmlidXRlIGFuZCB0YWJiaW5nIG9yZGVyLgogKi8KCiAgICAv
LyAtLSBQcml2YXRlIGZ1bmN0aW9ucyAtLQogICAgCiAgICAKICAgIHZhciBub3JtYWxpemVUYWJp
bmRleE5hbWUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gJC5icm93c2VyLm1zaWUgPyAi
dGFiSW5kZXgiIDogInRhYmluZGV4IjsKICAgIH07CgogICAgdmFyIGNhbkhhdmVEZWZhdWx0VGFi
aW5kZXggPSBmdW5jdGlvbihlbGVtZW50cykgewogICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA8
PSAwKSB7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQoKICAgICAgIHJldHVybiAk
KGVsZW1lbnRzWzBdKS5pcygiYSwgaW5wdXQsIGJ1dHRvbiwgc2VsZWN0LCBhcmVhLCB0ZXh0YXJl
YSwgb2JqZWN0Iik7CiAgICB9OwogICAgCiAgICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbihlbGVt
ZW50cykgewogICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPD0gMCkgewogICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFmbHVpZC50YWJpbmRleC5o
YXNBdHRyKGVsZW1lbnRzKSkgewogICAgICAgICAgICByZXR1cm4gY2FuSGF2ZURlZmF1bHRUYWJp
bmRleChlbGVtZW50cykgPyBOdW1iZXIoMCkgOiB1bmRlZmluZWQ7CiAgICAgICAgfQoKICAgICAg
ICAvLyBHZXQgdGhlIGF0dHJpYnV0ZSBhbmQgcmV0dXJuIGl0IGFzIGEgbnVtYmVyIHZhbHVlLgog
ICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnRzLmF0dHIobm9ybWFsaXplVGFiaW5kZXhOYW1lKCkp
OwogICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpOwogICAgfTsKCiAgICB2YXIgc2V0VmFsdWUg
PSBmdW5jdGlvbihlbGVtZW50cywgdG9JbmRleCkgewogICAgICAgIHJldHVybiBlbGVtZW50cy5l
YWNoKGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICAgICAgJChpdGVtKS5hdHRyKG5vcm1hbGl6
ZVRhYmluZGV4TmFtZSgpLCB0b0luZGV4KTsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8v
IC0tIFB1YmxpYyBBUEkgLS0KICAgIAogICAgLyoqCiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0
aGUgdGFiaW5kZXggYXR0cmlidXRlIGZvciB0aGUgZmlyc3QgaXRlbSwgb3Igc2V0cyB0aGUgdGFi
aW5kZXggdmFsdWUgb2YgYWxsIGVsZW1lbnRzCiAgICAgKiBpZiB0b0luZGV4IGlzIHNwZWNpZmll
ZC4KICAgICAqIAogICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB0b0luZGV4CiAgICAgKi8K
ICAgIGZsdWlkLnRhYmluZGV4ID0gZnVuY3Rpb24odGFyZ2V0LCB0b0luZGV4KSB7CiAgICAgICAg
dGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgICAgIGlmICh0b0luZGV4ICE9PSBudWxsICYmIHRvSW5k
ZXggIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByZXR1cm4gc2V0VmFsdWUodGFyZ2V0LCB0
b0luZGV4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWUodGFy
Z2V0KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgdGFiaW5k
ZXggYXR0cmlidXRlIGFsdG9nZXRoZXIgZnJvbSBlYWNoIGVsZW1lbnQuCiAgICAgKi8KICAgIGZs
dWlkLnRhYmluZGV4LnJlbW92ZSA9IGZ1bmN0aW9uKHRhcmdldCkgewogICAgICAgIHRhcmdldCA9
ICQodGFyZ2V0KTsKICAgICAgICByZXR1cm4gdGFyZ2V0LmVhY2goZnVuY3Rpb24oaSwgaXRlbSkg
ewogICAgICAgICAgICAkKGl0ZW0pLnJlbW92ZUF0dHIobm9ybWFsaXplVGFiaW5kZXhOYW1lKCkp
OwogICAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgYW4gZWxl
bWVudCBhY3R1YWxseSBoYXMgYSB0YWJpbmRleCBhdHRyaWJ1dGUgcHJlc2VudC4KICAgICAqLwog
ICAgZmx1aWQudGFiaW5kZXguaGFzQXR0ciA9IGZ1bmN0aW9uKHRhcmdldCkgewogICAgICAgIHRh
cmdldCA9ICQodGFyZ2V0KTsKICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA8PSAwKSB7CiAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRvZ28gPSB0YXJnZXQu
bWFwKAogICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1
dGVOb2RlID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5vcm1hbGl6ZVRhYmluZGV4TmFtZSgpKTsK
ICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOb2RlID8gYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQgOiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICApOwogICAgICAgIHJldHVy
biB0b2dvLmxlbmd0aCA9PT0gMT8gdG9nb1swXSA6IHRvZ287CiAgICB9OwoKICAgIC8qKgogICAg
ICogRGV0ZXJtaW5lcyBpZiBhbiBlbGVtZW50IGVpdGhlciBoYXMgYSB0YWJpbmRleCBhdHRyaWJ1
dGUgb3IgaXMgbmF0dXJhbGx5IHRhYi1mb2N1c3NhYmxlLgogICAgICovCiAgICBmbHVpZC50YWJp
bmRleC5oYXMgPSBmdW5jdGlvbih0YXJnZXQpIHsKICAgICAgICB0YXJnZXQgPSAkKHRhcmdldCk7
CiAgICAgICAgcmV0dXJuIGZsdWlkLnRhYmluZGV4Lmhhc0F0dHIodGFyZ2V0KSB8fCBjYW5IYXZl
RGVmYXVsdFRhYmluZGV4KHRhcmdldCk7CiAgICB9OwoKICAgIC8vIEtleWJvYXJkIG5hdmlnYXRp
b24KICAgIC8vIFB1YmxpYywgc3RhdGljIGNvbnN0YW50cyBuZWVkZWQgYnkgdGhlIHJlc3Qgb2Yg
dGhlIGxpYnJhcnkuCiAgICBmbHVpZC5hMTF5ID0gJC5hMTF5IHx8IHt9OwoKICAgIGZsdWlkLmEx
MXkub3JpZW50YXRpb24gPSB7CiAgICAgICAgSE9SSVpPTlRBTDogMCwKICAgICAgICBWRVJUSUNB
TDogMSwKICAgICAgICBCT1RIOiAyCiAgICB9OwoKICAgIHZhciBVUF9ET1dOX0tFWU1BUCA9IHsK
ICAgICAgICBuZXh0OiAkLnVpLmtleUNvZGUuRE9XTiwKICAgICAgICBwcmV2aW91czogJC51aS5r
ZXlDb2RlLlVQCiAgICB9OwoKICAgIHZhciBMRUZUX1JJR0hUX0tFWU1BUCA9IHsKICAgICAgICBu
ZXh0OiAkLnVpLmtleUNvZGUuUklHSFQsCiAgICAgICAgcHJldmlvdXM6ICQudWkua2V5Q29kZS5M
RUZUCiAgICB9OwoKICAgIC8vIFByaXZhdGUgZnVuY3Rpb25zLgogICAgdmFyIHVud3JhcCA9IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gZWxlbWVudC5qcXVlcnkgPyBlbGVtZW50
WzBdIDogZWxlbWVudDsgLy8gVW53cmFwIHRoZSBlbGVtZW50IGlmIGl0J3MgYSBqUXVlcnkuCiAg
ICB9OwoKCiAgICB2YXIgbWFrZUVsZW1lbnRzVGFiRm9jdXNzYWJsZSA9IGZ1bmN0aW9uKGVsZW1l
bnRzKSB7CiAgICAgICAgLy8gSWYgZWFjaCBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhIHRhYmluZGV4
LCBvciBoYXMgb25lIHNldCB0byBhIG5lZ2F0aXZlIHZhbHVlLCBzZXQgaXQgdG8gMC4KICAgICAg
ICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGlkeCwgaXRlbSkgewogICAgICAgICAgICBpdGVtID0g
JChpdGVtKTsKICAgICAgICAgICAgaWYgKCFpdGVtLmZsdWlkKCJ0YWJpbmRleC5oYXMiKSB8fCBp
dGVtLmZsdWlkKCJ0YWJpbmRleCIpIDwgMCkgewogICAgICAgICAgICAgICAgaXRlbS5mbHVpZCgi
dGFiaW5kZXgiLCAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICAvLyBQ
dWJsaWMgQVBJLgogICAgLyoqCiAgICAgKiBNYWtlcyBhbGwgbWF0Y2hlZCBlbGVtZW50cyBhdmFp
bGFibGUgaW4gdGhlIHRhYiBvcmRlciBieSBzZXR0aW5nIHRoZWlyIHRhYmluZGljZXMgdG8gIjAi
LgogICAgICovCiAgICBmbHVpZC50YWJiYWJsZSA9IGZ1bmN0aW9uKHRhcmdldCkgewogICAgICAg
IHRhcmdldCA9ICQodGFyZ2V0KTsKICAgICAgICBtYWtlRWxlbWVudHNUYWJGb2N1c3NhYmxlKHRh
cmdldCk7CiAgICB9OwoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKICAgICAqIFNlbGVjdGFibGUgZnVu
Y3Rpb25hbGl0eSAtIGdlb21ldHJpc2luZyBhIHNldCBvZiBub2RlcyBzdWNoIHRoYXQgdGhleQog
ICAgICogY2FuIGJlIG5hdmlnYXRlZCAoYnkgc2V0dGluZyBmb2N1cykgdXNpbmcgYSBzZXQgb2Yg
ZGlyZWN0aW9uYWwga2V5cwogICAgICovCgogICAgdmFyIENPTlRFWFRfS0VZID0gInNlbGVjdGlv
bkNvbnRleHQiOwogICAgdmFyIE5PX1NFTEVDVElPTiA9IC0zMjc2ODsKCiAgICB2YXIgY2xlYW5V
cFdoZW5MZWF2aW5nQ29udGFpbmVyID0gZnVuY3Rpb24oc2VsZWN0aW9uQ29udGV4dCkgewogICAg
ICAgIGlmIChzZWxlY3Rpb25Db250ZXh0LmFjdGl2ZUl0ZW1JbmRleCAhPT0gTk9fU0VMRUNUSU9O
KSB7CiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Db250ZXh0Lm9wdGlvbnMub25MZWF2ZUNvbnRh
aW5lcikgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uQ29udGV4dC5vcHRpb25zLm9uTGVhdmVD
b250YWluZXIoCiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRleHQuc2VsZWN0YWJsZXNb
c2VsZWN0aW9uQ29udGV4dC5hY3RpdmVJdGVtSW5kZXhdKTsKICAgICAgICAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb25Db250ZXh0Lm9wdGlvbnMub25VbnNlbGVjdCkgewogICAgICAgICAgICAgICAg
c2VsZWN0aW9uQ29udGV4dC5vcHRpb25zLm9uVW5zZWxlY3QoCiAgICAgICAgICAgICAgICBzZWxl
Y3Rpb25Db250ZXh0LnNlbGVjdGFibGVzW3NlbGVjdGlvbkNvbnRleHQuYWN0aXZlSXRlbUluZGV4
XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghc2VsZWN0aW9uQ29udGV4
dC5vcHRpb25zLnJlbWVtYmVyU2VsZWN0aW9uU3RhdGUpIHsKICAgICAgICAgICAgc2VsZWN0aW9u
Q29udGV4dC5hY3RpdmVJdGVtSW5kZXggPSBOT19TRUxFQ1RJT047CiAgICAgICAgfQogICAgfTsK
CiAgICAvKioKICAgICAqIERvZXMgdGhlIHdvcmsgb2Ygc2VsZWN0aW5nIGFuIGVsZW1lbnQgYW5k
IGRlbGVnYXRpbmcgdG8gdGhlIGNsaWVudCBoYW5kbGVyLgogICAgICovCiAgICB2YXIgZHJhd1Nl
bGVjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnRUb1NlbGVjdCwgaGFuZGxlcikgewogICAgICAgIGlm
IChoYW5kbGVyKSB7CiAgICAgICAgICAgIGhhbmRsZXIoZWxlbWVudFRvU2VsZWN0KTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qKgogICAgICogRG9lcyBkb2VzIHRoZSB3b3JrIG9mIHVuc2VsZWN0
aW5nIGFuIGVsZW1lbnQgYW5kIGRlbGVnYXRpbmcgdG8gdGhlIGNsaWVudCBoYW5kbGVyLgogICAg
ICovCiAgICB2YXIgZXJhc2VTZWxlY3Rpb24gPSBmdW5jdGlvbihzZWxlY3RlZEVsZW1lbnQsIGhh
bmRsZXIpIHsKICAgICAgICBpZiAoaGFuZGxlciAmJiBzZWxlY3RlZEVsZW1lbnQpIHsKICAgICAg
ICAgICAgaGFuZGxlcihzZWxlY3RlZEVsZW1lbnQpOwogICAgICAgIH0KICAgIH07CgogICAgdmFy
IHVuc2VsZWN0RWxlbWVudCA9IGZ1bmN0aW9uKHNlbGVjdGVkRWxlbWVudCwgc2VsZWN0aW9uQ29u
dGV4dCkgewogICAgICAgIGVyYXNlU2VsZWN0aW9uKHNlbGVjdGVkRWxlbWVudCwgc2VsZWN0aW9u
Q29udGV4dC5vcHRpb25zLm9uVW5zZWxlY3QpOwogICAgfTsKCiAgICB2YXIgc2VsZWN0RWxlbWVu
dCA9IGZ1bmN0aW9uKGVsZW1lbnRUb1NlbGVjdCwgc2VsZWN0aW9uQ29udGV4dCkgewogICAgICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSdyZSBiZWluZyBjYWxsZWQgcHJvZ3JhbW1hdGljYWxs
eSwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgY2xlYXIgYW55IHByZXZpb3VzIHNlbGVjdGlvbi4K
ICAgICAgICB1bnNlbGVjdEVsZW1lbnQoc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEVsZW1lbnQo
KSwgc2VsZWN0aW9uQ29udGV4dCk7CgogICAgICAgIGVsZW1lbnRUb1NlbGVjdCA9IHVud3JhcChl
bGVtZW50VG9TZWxlY3QpOwogICAgICAgIHZhciBuZXdJbmRleCA9IHNlbGVjdGlvbkNvbnRleHQu
c2VsZWN0YWJsZXMuaW5kZXgoZWxlbWVudFRvU2VsZWN0KTsKCiAgICAgICAgLy8gTmV4dCBjaGVj
ayBpZiB0aGUgZWxlbWVudCBpcyBhIGtub3duIHNlbGVjdGFibGUuIElmIG5vdCwgZG8gbm90aGlu
Zy4KICAgICAgICBpZiAobmV3SW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KCiAgICAgICAgLy8gU2VsZWN0IHRoZSBuZXcgZWxlbWVudC4KICAgICAgICBzZWxlY3Rp
b25Db250ZXh0LmFjdGl2ZUl0ZW1JbmRleCA9IG5ld0luZGV4OwogICAgICAgIGRyYXdTZWxlY3Rp
b24oZWxlbWVudFRvU2VsZWN0LCBzZWxlY3Rpb25Db250ZXh0Lm9wdGlvbnMub25TZWxlY3QpOwog
ICAgfTsKCiAgICB2YXIgc2VsZWN0YWJsZUZvY3VzSGFuZGxlciA9IGZ1bmN0aW9uKHNlbGVjdGlv
bkNvbnRleHQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgICAgIC8v
IEZMVUlELTM1OTA6IG5ld2VyIGJyb3dzZXJzIChGRiAzLjYsIFdlYmtpdCA0KSBoYXZlIGEgZm9y
bSBvZiAiYnVnIiBpbiB0aGF0IHRoZXkgd2lsbCBnbyBiYW5hbmFzCiAgICAgICAgICAgIC8vIG9u
IGF0dGVtcHRpbmcgdG8gbW92ZSBmb2N1cyBvZmYgYW4gZWxlbWVudCB3aGljaCBoYXMgdGFiaW5k
ZXggZHluYW1pY2FsbHkgc2V0IHRvIC0xLgogICAgICAgICAgICAkKGV2dC50YXJnZXQpLmZsdWlk
KCJ0YWJpbmRleCIsIDApOwogICAgICAgICAgICBzZWxlY3RFbGVtZW50KGV2dC50YXJnZXQsIHNl
bGVjdGlvbkNvbnRleHQpOwoKICAgICAgICAgICAgLy8gRm9yY2UgZm9jdXMgbm90IHRvIGJ1YmJs
ZSBvbiBzb21lIGJyb3dzZXJzLgogICAgICAgICAgICByZXR1cm4gZXZ0LnN0b3BQcm9wYWdhdGlv
bigpOwogICAgICAgIH07CiAgICB9OwoKICAgIHZhciBzZWxlY3RhYmxlQmx1ckhhbmRsZXIgPSBm
dW5jdGlvbihzZWxlY3Rpb25Db250ZXh0KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2dCkg
ewogICAgICAgICAgICAkKGV2dC50YXJnZXQpLmZsdWlkKCJ0YWJpbmRleCIsIHNlbGVjdGlvbkNv
bnRleHQub3B0aW9ucy5zZWxlY3RhYmxlc1RhYmluZGV4KTsKICAgICAgICAgICAgdW5zZWxlY3RF
bGVtZW50KGV2dC50YXJnZXQsIHNlbGVjdGlvbkNvbnRleHQpOwoKICAgICAgICAgICAgLy8gRm9y
Y2UgYmx1ciBub3QgdG8gYnViYmxlIG9uIHNvbWUgYnJvd3NlcnMuCiAgICAgICAgICAgIHJldHVy
biBldnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfTsKICAgIH07CgogICAgdmFyIHJlaWZ5
SW5kZXggPSBmdW5jdGlvbihzY190aGF0KSB7CiAgICAgICAgdmFyIGVsZW1lbnRzID0gc2NfdGhh
dC5zZWxlY3RhYmxlczsKICAgICAgICBpZiAoc2NfdGhhdC5hY3RpdmVJdGVtSW5kZXggPj0gZWxl
bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgIHNjX3RoYXQuYWN0aXZlSXRlbUluZGV4ID0gMDsK
ICAgICAgICB9CiAgICAgICAgaWYgKHNjX3RoYXQuYWN0aXZlSXRlbUluZGV4IDwgMCAmJiBzY190
aGF0LmFjdGl2ZUl0ZW1JbmRleCAhPT0gTk9fU0VMRUNUSU9OKSB7CiAgICAgICAgICAgIHNjX3Ro
YXQuYWN0aXZlSXRlbUluZGV4ID0gZWxlbWVudHMubGVuZ3RoIC0gMTsKICAgICAgICB9CiAgICAg
ICAgaWYgKHNjX3RoYXQuYWN0aXZlSXRlbUluZGV4ID49IDApIHsKICAgICAgICAgICAgZmx1aWQu
Zm9jdXMoZWxlbWVudHNbc2NfdGhhdC5hY3RpdmVJdGVtSW5kZXhdKTsKICAgICAgICB9CiAgICB9
OwoKICAgIHZhciBwcmVwYXJlU2hpZnQgPSBmdW5jdGlvbihzZWxlY3Rpb25Db250ZXh0KSB7CiAg
ICAgICAgLy8gRkxVSUQtMzU5MDogRkYgMy42IGFuZCBTYWZhcmkgNC54IHdvbid0IGZpcmUgYmx1
cigpIHdoZW4gcHJvZ3JhbW1hdGljYWxseSBtb3ZpbmcgZm9jdXMuCiAgICAgICAgdmFyIHNlbEVs
bSA9IHNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRFbGVtZW50KCk7CiAgICAgICAgaWYgKHNlbEVs
bSkgewogICAgICAgICAgICBmbHVpZC5ibHVyKHNlbEVsbSk7CiAgICAgICAgfQoKICAgICAgICB1
bnNlbGVjdEVsZW1lbnQoc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEVsZW1lbnQoKSwgc2VsZWN0
aW9uQ29udGV4dCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRleHQuYWN0aXZlSXRlbUluZGV4
ID09PSBOT19TRUxFQ1RJT04pIHsKICAgICAgICAgIHNlbGVjdGlvbkNvbnRleHQuYWN0aXZlSXRl
bUluZGV4ID0gLTE7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgZm9jdXNOZXh0RWxlbWVudCA9
IGZ1bmN0aW9uKHNlbGVjdGlvbkNvbnRleHQpIHsKICAgICAgICBwcmVwYXJlU2hpZnQoc2VsZWN0
aW9uQ29udGV4dCk7CiAgICAgICAgKytzZWxlY3Rpb25Db250ZXh0LmFjdGl2ZUl0ZW1JbmRleDsK
ICAgICAgICByZWlmeUluZGV4KHNlbGVjdGlvbkNvbnRleHQpOwogICAgfTsKCiAgICB2YXIgZm9j
dXNQcmV2aW91c0VsZW1lbnQgPSBmdW5jdGlvbihzZWxlY3Rpb25Db250ZXh0KSB7CiAgICAgICAg
cHJlcGFyZVNoaWZ0KHNlbGVjdGlvbkNvbnRleHQpOwogICAgICAgIC0tc2VsZWN0aW9uQ29udGV4
dC5hY3RpdmVJdGVtSW5kZXg7CiAgICAgICAgcmVpZnlJbmRleChzZWxlY3Rpb25Db250ZXh0KTsK
ICAgIH07CgogICAgdmFyIGFycm93S2V5SGFuZGxlciA9IGZ1bmN0aW9uKHNlbGVjdGlvbkNvbnRl
eHQsIGtleU1hcCwgdXNlckhhbmRsZXJzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGV2dCkg
ewogICAgICAgICAgICBpZiAoZXZ0LndoaWNoID09PSBrZXlNYXAubmV4dCkgewogICAgICAgICAg
ICAgICAgZm9jdXNOZXh0RWxlbWVudChzZWxlY3Rpb25Db250ZXh0KTsKICAgICAgICAgICAgICAg
IGV2dC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC53aGljaCA9
PT0ga2V5TWFwLnByZXZpb3VzKSB7CiAgICAgICAgICAgICAgICBmb2N1c1ByZXZpb3VzRWxlbWVu
dChzZWxlY3Rpb25Db250ZXh0KTsKICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgp
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH07CgogICAgdmFyIGdldEtleU1hcEZvckRp
cmVjdGlvbiA9IGZ1bmN0aW9uKGRpcmVjdGlvbikgewogICAgICAgIC8vIERldGVybWluZSB0aGUg
YXBwcm9wcmlhdGUgbWFwcGluZyBmb3IgbmV4dCBhbmQgcHJldmlvdXMgYmFzZWQgb24gdGhlIHNw
ZWNpZmllZCBkaXJlY3Rpb24uCiAgICAgICAgdmFyIGtleU1hcDsKICAgICAgICBpZiAoZGlyZWN0
aW9uID09PSBmbHVpZC5hMTF5Lm9yaWVudGF0aW9uLkhPUklaT05UQUwpIHsKICAgICAgICAgICAg
a2V5TWFwID0gTEVGVF9SSUdIVF9LRVlNQVA7CiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmIChk
aXJlY3Rpb24gPT09IGZsdWlkLmExMXkub3JpZW50YXRpb24uVkVSVElDQUwpIHsKICAgICAgICAg
ICAgLy8gQXNzdW1lIHZlcnRpY2FsIGluIGFueSBvdGhlciBjYXNlLgogICAgICAgICAgICBrZXlN
YXAgPSBVUF9ET1dOX0tFWU1BUDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBrZXlNYXA7CiAg
ICB9OwoKICAgIHZhciB0YWJLZXlIYW5kbGVyID0gZnVuY3Rpb24oc2VsZWN0aW9uQ29udGV4dCkg
ewogICAgICAgIHJldHVybiBmdW5jdGlvbihldnQpIHsKICAgICAgICAgICAgaWYgKGV2dC53aGlj
aCAhPT0gJC51aS5rZXlDb2RlLlRBQikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGNsZWFuVXBXaGVuTGVhdmluZ0NvbnRhaW5lcihzZWxlY3Rpb25D
b250ZXh0KTsKCiAgICAgICAgICAgIC8vIENhdGNoIFNoaWZ0LVRhYiBhbmQgbm90ZSB0aGF0IGZv
Y3VzIGlzIG9uIGl0cyB3YXkgb3V0IG9mIHRoZSBjb250YWluZXIuCiAgICAgICAgICAgIGlmIChl
dnQuc2hpZnRLZXkpIHsKICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbnRleHQuZm9jdXNJc0xl
YXZpbmdDb250YWluZXIgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH07Cgog
ICAgdmFyIGNvbnRhaW5lckZvY3VzSGFuZGxlciA9IGZ1bmN0aW9uKHNlbGVjdGlvbkNvbnRleHQp
IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgICAgIHZhciBzaG91bGRP
cmlnID0gc2VsZWN0aW9uQ29udGV4dC5vcHRpb25zLmF1dG9TZWxlY3RGaXJzdEl0ZW07CiAgICAg
ICAgICAgIHZhciBzaG91bGRTZWxlY3QgPSB0eXBlb2Yoc2hvdWxkT3JpZykgPT09ICJmdW5jdGlv
biIgPyAKICAgICAgICAgICAgICAgICBzaG91bGRPcmlnKCkgOiBzaG91bGRPcmlnOwoKICAgICAg
ICAgICAgLy8gT3ZlcnJpZGUgdGhlIGF1dG9zZWxlY3Rpb24gaWYgd2UncmUgb24gdGhlIHdheSBv
dXQgb2YgdGhlIGNvbnRhaW5lci4KICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRleHQuZm9j
dXNJc0xlYXZpbmdDb250YWluZXIpIHsKICAgICAgICAgICAgICAgIHNob3VsZFNlbGVjdCA9IGZh
bHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGlzIHRhcmdldCBjaGVjayB3b3Jr
cyBhcm91bmQgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgZm9jdXMgYnViYmxlcywgZXZlbiB0aG91
Z2ggaXQgc2hvdWxkbid0LgogICAgICAgICAgICBpZiAoc2hvdWxkU2VsZWN0ICYmIGV2dC50YXJn
ZXQgPT09IHNlbGVjdGlvbkNvbnRleHQuY29udGFpbmVyLmdldCgwKSkgewogICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvbkNvbnRleHQuYWN0aXZlSXRlbUluZGV4ID09PSBOT19TRUxFQ1RJT04p
IHsKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db250ZXh0LmFjdGl2ZUl0ZW1JbmRleCA9
IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbHVpZC5mb2N1cyhzZWxlY3Rp
b25Db250ZXh0LnNlbGVjdGFibGVzW3NlbGVjdGlvbkNvbnRleHQuYWN0aXZlSXRlbUluZGV4XSk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgLy8gRm9yY2UgZm9jdXMgbm90IHRvIGJ1YmJsZSBv
biBzb21lIGJyb3dzZXJzLgogICAgICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7
CiAgICAgICAgfTsKICAgIH07CgogICAgdmFyIGNvbnRhaW5lckJsdXJIYW5kbGVyID0gZnVuY3Rp
b24oc2VsZWN0aW9uQ29udGV4dCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbihldnQpIHsKICAg
ICAgICAgICAgc2VsZWN0aW9uQ29udGV4dC5mb2N1c0lzTGVhdmluZ0NvbnRhaW5lciA9IGZhbHNl
OwoKICAgICAgICAgICAgLy8gRm9yY2UgYmx1ciBub3QgdG8gYnViYmxlIG9uIHNvbWUgYnJvd3Nl
cnMuCiAgICAgICAgICAgIHJldHVybiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfTsK
ICAgIH07CgogICAgdmFyIG1ha2VFbGVtZW50c1NlbGVjdGFibGUgPSBmdW5jdGlvbihjb250YWlu
ZXIsIGRlZmF1bHRzLCB1c2VyT3B0aW9ucykgewoKICAgICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0
ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgdXNlck9wdGlvbnMpOwoKICAgICAgICB2YXIga2V5TWFw
ID0gZ2V0S2V5TWFwRm9yRGlyZWN0aW9uKG9wdGlvbnMuZGlyZWN0aW9uKTsKCiAgICAgICAgdmFy
IHNlbGVjdGFibGVFbGVtZW50cyA9IG9wdGlvbnMuc2VsZWN0YWJsZUVsZW1lbnRzPyBvcHRpb25z
LnNlbGVjdGFibGVFbGVtZW50cyA6CiAgICAgICAgICAgICAgY29udGFpbmVyLmZpbmQob3B0aW9u
cy5zZWxlY3RhYmxlU2VsZWN0b3IpOwogICAgICAgICAgCiAgICAgICAgLy8gQ29udGV4dCBzdG9y
ZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgaXRlbSh1bmRlZmluZWQgdG8gc3RhcnQpIGFuZCBsaXN0
IG9mIHNlbGVjdGFibGVzLgogICAgICAgIHZhciB0aGF0ID0gewogICAgICAgICAgICBjb250YWlu
ZXI6IGNvbnRhaW5lciwKICAgICAgICAgICAgYWN0aXZlSXRlbUluZGV4OiBOT19TRUxFQ1RJT04s
CiAgICAgICAgICAgIHNlbGVjdGFibGVzOiBzZWxlY3RhYmxlRWxlbWVudHMsCiAgICAgICAgICAg
IGZvY3VzSXNMZWF2aW5nQ29udGFpbmVyOiBmYWxzZSwKICAgICAgICAgICAgb3B0aW9uczogb3B0
aW9ucwogICAgICAgIH07CgogICAgICAgIHRoYXQuc2VsZWN0YWJsZXNVcGRhdGVkID0gZnVuY3Rp
b24oZm9jdXNlZEl0ZW0pIHsKICAgICAgICAgIC8vIFJlbW92ZSBzZWxlY3RhYmxlcyBmcm9tIHRo
ZSB0YWIgb3JkZXIgYW5kIGFkZCBmb2N1cy9ibHVyIGhhbmRsZXJzCiAgICAgICAgICAgIGlmICh0
eXBlb2YodGhhdC5vcHRpb25zLnNlbGVjdGFibGVzVGFiaW5kZXgpID09PSAibnVtYmVyIikgewog
ICAgICAgICAgICAgICAgdGhhdC5zZWxlY3RhYmxlcy5mbHVpZCgidGFiaW5kZXgiLCB0aGF0Lm9w
dGlvbnMuc2VsZWN0YWJsZXNUYWJpbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhh
dC5zZWxlY3RhYmxlcy51bmJpbmQoImZvY3VzLiIgKyBDT05URVhUX0tFWSk7CiAgICAgICAgICAg
IHRoYXQuc2VsZWN0YWJsZXMudW5iaW5kKCJibHVyLiIgKyBDT05URVhUX0tFWSk7CiAgICAgICAg
ICAgIHRoYXQuc2VsZWN0YWJsZXMuYmluZCgiZm9jdXMuIisgQ09OVEVYVF9LRVksIHNlbGVjdGFi
bGVGb2N1c0hhbmRsZXIodGhhdCkpOwogICAgICAgICAgICB0aGF0LnNlbGVjdGFibGVzLmJpbmQo
ImJsdXIuIiArIENPTlRFWFRfS0VZLCBzZWxlY3RhYmxlQmx1ckhhbmRsZXIodGhhdCkpOwogICAg
ICAgICAgICBpZiAoa2V5TWFwICYmIHRoYXQub3B0aW9ucy5ub0J1YmJsZUxpc3RlbmVycykgewog
ICAgICAgICAgICAgICAgdGhhdC5zZWxlY3RhYmxlcy51bmJpbmQoImtleWRvd24uIitDT05URVhU
X0tFWSk7CiAgICAgICAgICAgICAgICB0aGF0LnNlbGVjdGFibGVzLmJpbmQoImtleWRvd24uIitD
T05URVhUX0tFWSwgYXJyb3dLZXlIYW5kbGVyKHRoYXQsIGtleU1hcCkpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkgewogICAgICAgICAgICAgICAgc2VsZWN0RWxl
bWVudChmb2N1c2VkSXRlbSwgdGhhdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICByZWlmeUluZGV4KHRoYXQpOwogICAgICAgICAgICB9CiAgICAgICAg
fTsKCiAgICAgICAgdGhhdC5yZWZyZXNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICgh
dGhhdC5vcHRpb25zLnNlbGVjdGFibGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAgdGhyb3co
IkNhbm5vdCByZWZyZXNoIHNlbGVjdGFibGUgY29udGV4dCB3aGljaCB3YXMgbm90IGluaXRpYWxp
c2VkIGJ5IGEgc2VsZWN0b3IiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGF0LnNlbGVj
dGFibGVzID0gY29udGFpbmVyLmZpbmQob3B0aW9ucy5zZWxlY3RhYmxlU2VsZWN0b3IpOwogICAg
ICAgICAgICB0aGF0LnNlbGVjdGFibGVzVXBkYXRlZCgpOwogICAgICAgIH07CiAgICAgICAgCiAg
ICAgICAgdGhhdC5zZWxlY3RlZEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0
dXJuIHRoYXQuYWN0aXZlSXRlbUluZGV4IDwgMD8gbnVsbCA6IHRoYXQuc2VsZWN0YWJsZXNbdGhh
dC5hY3RpdmVJdGVtSW5kZXhdOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gQWRkIHZh
cmlvdXMgaGFuZGxlcnMgdG8gdGhlIGNvbnRhaW5lci4KICAgICAgICBpZiAoa2V5TWFwICYmICF0
aGF0Lm9wdGlvbnMubm9CdWJibGVMaXN0ZW5lcnMpIHsKICAgICAgICAgICAgY29udGFpbmVyLmtl
eWRvd24oYXJyb3dLZXlIYW5kbGVyKHRoYXQsIGtleU1hcCkpOwogICAgICAgIH0KICAgICAgICBj
b250YWluZXIua2V5ZG93bih0YWJLZXlIYW5kbGVyKHRoYXQpKTsKICAgICAgICBjb250YWluZXIu
Zm9jdXMoY29udGFpbmVyRm9jdXNIYW5kbGVyKHRoYXQpKTsKICAgICAgICBjb250YWluZXIuYmx1
cihjb250YWluZXJCbHVySGFuZGxlcih0aGF0KSk7CiAgICAgICAgCiAgICAgICAgdGhhdC5zZWxl
Y3RhYmxlc1VwZGF0ZWQoKTsKCiAgICAgICAgcmV0dXJuIHRoYXQ7CiAgICB9OwoKICAgIC8qKgog
ICAgICogTWFrZXMgYWxsIG1hdGNoZWQgZWxlbWVudHMgc2VsZWN0YWJsZSB3aXRoIHRoZSBhcnJv
dyBrZXlzLgogICAgICogU3VwcGx5IHlvdXIgb3duIGhhbmRsZXJzIG9iamVjdCB3aXRoIG9uU2Vs
ZWN0OiBhbmQgb25VbnNlbGVjdDogcHJvcGVydGllcyBmb3IgY3VzdG9tIGJlaGF2aW91ci4KICAg
ICAqIE9wdGlvbnMgcHJvdmlkZSBjb25maWd1cmFiaWxpdHksIGluY2x1ZGluZyBkaXJlY3Rpb246
IGFuZCBhdXRvU2VsZWN0Rmlyc3RJdGVtOgogICAgICogQ3VycmVudGx5IHN1cHBvcnRlZCBkaXJl
Y3Rpb25zIGFyZSBqUXVlcnkuYTExeS5kaXJlY3Rpb25zLkhPUklaT05UQUwgYW5kIFZFUlRJQ0FM
LgogICAgICovCiAgICBmbHVpZC5zZWxlY3RhYmxlID0gZnVuY3Rpb24odGFyZ2V0LCBvcHRpb25z
KSB7CiAgICAgICAgdGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgICAgIHZhciB0aGF0ID0gbWFrZUVs
ZW1lbnRzU2VsZWN0YWJsZSh0YXJnZXQsIGZsdWlkLnNlbGVjdGFibGUuZGVmYXVsdHMsIG9wdGlv
bnMpOwogICAgICAgIGZsdWlkLnNldFNjb3BlZERhdGEodGFyZ2V0LCBDT05URVhUX0tFWSwgdGhh
dCk7CiAgICAgICAgcmV0dXJuIHRoYXQ7CiAgICB9OwoKICAgIC8qKgogICAgICogU2VsZWN0cyB0
aGUgc3BlY2lmaWVkIGVsZW1lbnQuCiAgICAgKi8KICAgIGZsdWlkLnNlbGVjdGFibGUuc2VsZWN0
ID0gZnVuY3Rpb24odGFyZ2V0LCB0b1NlbGVjdCkgewogICAgICAgIGZsdWlkLmZvY3VzKHRvU2Vs
ZWN0KTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTZWxlY3RzIHRoZSBuZXh0IG1hdGNoZWQgZWxl
bWVudC4KICAgICAqLwogICAgZmx1aWQuc2VsZWN0YWJsZS5zZWxlY3ROZXh0ID0gZnVuY3Rpb24o
dGFyZ2V0KSB7CiAgICAgICAgdGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgICAgIGZvY3VzTmV4dEVs
ZW1lbnQoZmx1aWQuZ2V0U2NvcGVkRGF0YSh0YXJnZXQsIENPTlRFWFRfS0VZKSk7CiAgICB9OwoK
ICAgIC8qKgogICAgICogU2VsZWN0cyB0aGUgcHJldmlvdXMgbWF0Y2hlZCBlbGVtZW50LgogICAg
ICovCiAgICBmbHVpZC5zZWxlY3RhYmxlLnNlbGVjdFByZXZpb3VzID0gZnVuY3Rpb24odGFyZ2V0
KSB7CiAgICAgICAgdGFyZ2V0ID0gJCh0YXJnZXQpOwogICAgICAgIGZvY3VzUHJldmlvdXNFbGVt
ZW50KGZsdWlkLmdldFNjb3BlZERhdGEodGFyZ2V0LCBDT05URVhUX0tFWSkpOwogICAgfTsKCiAg
ICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtIHdyYXBwZWQg
YXMgYSBqUXVlcnkgb2JqZWN0LgogICAgICovCiAgICBmbHVpZC5zZWxlY3RhYmxlLmN1cnJlbnRT
ZWxlY3Rpb24gPSBmdW5jdGlvbih0YXJnZXQpIHsKICAgICAgICB0YXJnZXQgPSAkKHRhcmdldCk7
CiAgICAgICAgdmFyIHRoYXQgPSBmbHVpZC5nZXRTY29wZWREYXRhKHRhcmdldCwgQ09OVEVYVF9L
RVkpOwogICAgICAgIHJldHVybiAkKHRoYXQuc2VsZWN0ZWRFbGVtZW50KCkpOwogICAgfTsKCiAg
ICBmbHVpZC5zZWxlY3RhYmxlLmRlZmF1bHRzID0gewogICAgICAgIGRpcmVjdGlvbjogZmx1aWQu
YTExeS5vcmllbnRhdGlvbi5WRVJUSUNBTCwKICAgICAgICBzZWxlY3RhYmxlc1RhYmluZGV4OiAt
MSwKICAgICAgICBhdXRvU2VsZWN0Rmlyc3RJdGVtOiB0cnVlLAogICAgICAgIHJlbWVtYmVyU2Vs
ZWN0aW9uU3RhdGU6IHRydWUsCiAgICAgICAgc2VsZWN0YWJsZVNlbGVjdG9yOiAiLnNlbGVjdGFi
bGUiLAogICAgICAgIHNlbGVjdGFibGVFbGVtZW50czogbnVsbCwKICAgICAgICBvblNlbGVjdDog
bnVsbCwKICAgICAgICBvblVuc2VsZWN0OiBudWxsLAogICAgICAgIG9uTGVhdmVDb250YWluZXI6
IG51bGwKICAgIH07CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgKiAgQWN0aXZhdGlvbiBmdW5jdGlv
bmFsaXR5IC0gZGVjbGFyYXRpdmVseSBhc3NvY2lhdGluZyBhY3Rpb25zIHdpdGggCiAgICAgKiBh
IHNldCBvZiBrZXlib2FyZCBiaW5kaW5ncy4KICAgICAqLwoKICAgIHZhciBjaGVja0Zvck1vZGlm
aWVyID0gZnVuY3Rpb24oYmluZGluZywgZXZ0KSB7CiAgICAgICAgLy8gSWYgbm8gbW9kaWZpZXIg
d2FzIHNwZWNpZmllZCwganVzdCByZXR1cm4gdHJ1ZS4KICAgICAgICBpZiAoIWJpbmRpbmcubW9k
aWZpZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICB2YXIg
bW9kaWZpZXJLZXkgPSBiaW5kaW5nLm1vZGlmaWVyOwogICAgICAgIHZhciBpc0N0cmxLZXlQcmVz
ZW50ID0gbW9kaWZpZXJLZXkgJiYgZXZ0LmN0cmxLZXk7CiAgICAgICAgdmFyIGlzQWx0S2V5UHJl
c2VudCA9IG1vZGlmaWVyS2V5ICYmIGV2dC5hbHRLZXk7CiAgICAgICAgdmFyIGlzU2hpZnRLZXlQ
cmVzZW50ID0gbW9kaWZpZXJLZXkgJiYgZXZ0LnNoaWZ0S2V5OwoKICAgICAgICByZXR1cm4gaXND
dHJsS2V5UHJlc2VudCB8fCBpc0FsdEtleVByZXNlbnQgfHwgaXNTaGlmdEtleVByZXNlbnQ7CiAg
ICB9OwoKICAgIC8qKiBDb25zdHJ1Y3RzIGEgcmF3ICJrZXlkb3duIi1mYWNpbmcgaGFuZGxlciwg
Z2l2ZW4gYSBiaW5kaW5nIGVudHJ5LiBUaGlzCiAgICAgKiAgY2hlY2tzIHdoZXRoZXIgdGhlIGtl
eSBldmVudCBnZW51aW5lbHkgdHJpZ2dlcnMgdGhlIGV2ZW50IGFuZCBmb3J3YXJkcyBpdAogICAg
ICogIHRvIGFueSAiYWN0aXZhdGVIYW5kbGVyIiByZWdpc3RlcmVkIGluIHRoZSBiaW5kaW5nLiAK
ICAgICAqLwogICAgdmFyIG1ha2VBY3RpdmF0aW9uSGFuZGxlciA9IGZ1bmN0aW9uKGJpbmRpbmcp
IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgICAgIHZhciB0YXJnZXQg
PSBldnQudGFyZ2V0OwogICAgICAgICAgICBpZiAoIWZsdWlkLmVuYWJsZWQoZXZ0LnRhcmdldCkp
IHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQovLyBUaGUgZm9sbG93aW5n
ICdpZicgY2xhdXNlIHdvcmtzIGluIHRoZSByZWFsIHdvcmxkLCBidXQgdGhlcmUncyBhIGJ1ZyBp
biB0aGUgalF1ZXJ5IHNpbXVsYXRpb24KLy8gdGhhdCBjYXVzZXMga2V5Ym9hcmQgc2ltdWxhdGlv
biB0byBmYWlsIGluIFNhZmFyaSwgY2F1c2luZyBvdXIgdGVzdHMgdG8gZmFpbDoKLy8gICAgIGh0
dHA6Ly91aS5qcXVlcnkuY29tL2J1Z3MvdGlja2V0LzMyMjkKLy8gVGhlIHJlcGxhY2VtZW50ICdp
ZicgY2xhdXNlIHdvcmtzIGFyb3VuZCB0aGlzIGJ1Zy4KLy8gV2hlbiB0aGlzIGlzc3VlIGlzIHJl
c29sdmVkLCB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBjbGF1c2UuCi8vICAgICAg
ICAgICAgaWYgKGV2dC53aGljaCA9PT0gYmluZGluZy5rZXkgJiYgYmluZGluZy5hY3RpdmF0ZUhh
bmRsZXIgJiYgY2hlY2tGb3JNb2RpZmllcihiaW5kaW5nLCBldnQpKSB7CiAgICAgICAgICAgIHZh
ciBjb2RlID0gZXZ0LndoaWNoPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTsKICAgICAgICAgICAg
aWYgKGNvZGUgPT09IGJpbmRpbmcua2V5ICYmIGJpbmRpbmcuYWN0aXZhdGVIYW5kbGVyICYmIGNo
ZWNrRm9yTW9kaWZpZXIoYmluZGluZywgZXZ0KSkgewogICAgICAgICAgICAgICAgdmFyIGV2ZW50
ID0gJC5FdmVudCgiZmx1aWQtYWN0aXZhdGUiKTsKICAgICAgICAgICAgICAgICQoZXZ0LnRhcmdl
dCkudHJpZ2dlcihldmVudCwgW2JpbmRpbmcuYWN0aXZhdGVIYW5kbGVyXSk7CiAgICAgICAgICAg
ICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsKICAgICAgICAgICAgICAgICAg
ICBldnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH07CiAgICB9OwoKICAgIHZhciBtYWtlRWxlbWVudHNBY3RpdmF0YWJsZSA9IGZ1bmN0
aW9uKGVsZW1lbnRzLCBvbkFjdGl2YXRlSGFuZGxlciwgZGVmYXVsdEtleXMsIG9wdGlvbnMpIHsK
ICAgICAgICAvLyBDcmVhdGUgYmluZGluZ3MgZm9yIGVhY2ggZGVmYXVsdCBrZXkuCiAgICAgICAg
dmFyIGJpbmRpbmdzID0gW107CiAgICAgICAgJChkZWZhdWx0S2V5cykuZWFjaChmdW5jdGlvbihp
bmRleCwga2V5KSB7CiAgICAgICAgICAgIGJpbmRpbmdzLnB1c2goewogICAgICAgICAgICAgICAg
bW9kaWZpZXI6IG51bGwsCiAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAg
IGFjdGl2YXRlSGFuZGxlcjogb25BY3RpdmF0ZUhhbmRsZXIKICAgICAgICAgICAgfSk7CiAgICAg
ICAgfSk7CgogICAgICAgIC8vIE1lcmdlIHdpdGggYW55IGFkZGl0aW9uYWwga2V5IGJpbmRpbmdz
LgogICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWRkaXRpb25hbEJpbmRpbmdzKSB7CiAg
ICAgICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KG9wdGlvbnMuYWRkaXRpb25hbEJp
bmRpbmdzKTsKICAgICAgICB9CgogICAgICAgIGZsdWlkLmluaXRFbmFibGVtZW50KGVsZW1lbnRz
KTsKCiAgICAgICAgLy8gQWRkIGxpc3RlbmVycyBmb3IgZWFjaCBrZXkgYmluZGluZy4KICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmRpbmdzLmxlbmd0aDsgKysgaSkgewogICAgICAgICAg
ICB2YXIgYmluZGluZyA9IGJpbmRpbmdzW2ldOwogICAgICAgICAgICBlbGVtZW50cy5rZXlkb3du
KG1ha2VBY3RpdmF0aW9uSGFuZGxlcihiaW5kaW5nKSk7CiAgICAgICAgfQogICAgICAgIGVsZW1l
bnRzLmJpbmQoImZsdWlkLWFjdGl2YXRlIiwgZnVuY3Rpb24oZXZ0LCBoYW5kbGVyKSB7CiAgICAg
ICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8IG9uQWN0aXZhdGVIYW5kbGVyOwogICAgICAgICAg
ICByZXR1cm4gaGFuZGxlcj8gaGFuZGxlcihldnQpOiBudWxsOwogICAgICAgIH0pOwogICAgfTsK
CiAgICAvKioKICAgICAqIE1ha2VzIGFsbCBtYXRjaGVkIGVsZW1lbnRzIGFjdGl2YXRhYmxlIHdp
dGggdGhlIFNwYWNlIGFuZCBFbnRlciBrZXlzLgogICAgICogUHJvdmlkZSB5b3VyIG93biBoYW5k
bGVyIGZ1bmN0aW9uIGZvciBjdXN0b20gYmVoYXZpb3VyLgogICAgICogT3B0aW9ucyBhbGxvdyB5
b3UgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgYWRkaXRpb25hbEFjdGl2YXRpb25LZXlzLgogICAgICov
CiAgICBmbHVpZC5hY3RpdmF0YWJsZSA9IGZ1bmN0aW9uKHRhcmdldCwgZm4sIG9wdGlvbnMpIHsK
ICAgICAgICB0YXJnZXQgPSAkKHRhcmdldCk7CiAgICAgICAgbWFrZUVsZW1lbnRzQWN0aXZhdGFi
bGUodGFyZ2V0LCBmbiwgZmx1aWQuYWN0aXZhdGFibGUuZGVmYXVsdHMua2V5cywgb3B0aW9ucyk7
CiAgICB9OwoKICAgIC8qKgogICAgICogQWN0aXZhdGVzIHRoZSBzcGVjaWZpZWQgZWxlbWVudC4K
ICAgICAqLwogICAgZmx1aWQuYWN0aXZhdGUgPSBmdW5jdGlvbih0YXJnZXQpIHsKICAgICAgICAk
KHRhcmdldCkudHJpZ2dlcigiZmx1aWQtYWN0aXZhdGUiKTsKICAgIH07CgogICAgLy8gUHVibGlj
IERlZmF1bHRzLgogICAgZmx1aWQuYWN0aXZhdGFibGUuZGVmYXVsdHMgPSB7CiAgICAgICAga2V5
czogWyQudWkua2V5Q29kZS5FTlRFUiwgJC51aS5rZXlDb2RlLlNQQUNFXQogICAgfTsKCiAgCiAg
fSkoalF1ZXJ5LCBmbHVpZF8xXzQpOwpfEA90ZXh0L2phdmFzY3JpcHTUBQYHCEpLTE1fED9odHRw
Oi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2NvcmUvanMvRmx1aWQu
anNPEQQeYnBsaXN0MDDUAQIDBAUGYmNYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS
AAGGoK8QHQcIIigpMBsxMkhJSktMTU5PUFFSU1RVVldYW1xdVSRudWxs3QkKCwwNDg8QERITFBUW
FxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNzUiQ0UiQ5UiQwUiQ1UiQx
gAcQCBAHgAiAAhAAgBqAHIAFgBuABhAB0yMQJCUmJ1dOUy5iYXNlW05TLnJlbGF0aXZlgACABIAD
XxA/aHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2ZyYW1ld29yay9jb3JlL2pz
L0ZsdWlkLmpz0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVj
dCNBuNEALwZLuhDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIAN
gA6AD4AQqD9AQUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRh
Z11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0
aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QHCI0NDFlMDUt
MTIzN2EtNGFmMzNkMDEzZTQwMCJfEB1UaHUsIDEzIE9jdCAyMDExIDIwOjE2OjE2IEdNVF8QHVdl
ZCwgMTIgTWFyIDIwMTQgMjA6NTA6NTQgR01UVWJ5dGVzVTc0NjE4VWNsb3Nl0iorWVpcTlNEaWN0
aW9uYXJ5olkvEgABI3pfEA90ZXh0L2phdmFzY3JpcHTSKiteX18QEU5TSFRUUFVSTFJlc3BvbnNl
o2BhL18QEU5TSFRUUFVSTFJlc3BvbnNlXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLR
ZGVfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBXAF0AeAB7AH8AggCFAIgA
jACPAJYAmQCcAJ8AogClAKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9AMQAzADYANoA3ADeASABJQEw
ATkBPwFCAUgBUQFaAVwBYwFrAXYBfwGBAYMBhQGHAYkBiwGNAY8BmAGaAZwBngGgAaIBpAGmAagB
qgGxAb4BwwHRAdYB5AHzAf4CFwIpAkgCaAKIAo4ClAKaAp8CrAKvArQCxgLLAt8C4wL3AwUDFwMa
AzAAAAAAAAACAQAAAAAAAABmAAAAAAAAAAAAAAAAAAADMk8SAAEjei8qIQogKiBGbHVpZCBJbmZ1
c2lvbiB2MS40CiAqCiAqIEluZnVzaW9uIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBFZHVjYXRp
b25hbCBDb21tdW5pdHkgTGljZW5zZSAyLjAgYW5kIG5ldyBCU0QgbGljZW5zZXM6IAogKiBodHRw
Oi8vd2lraS5mbHVpZHByb2plY3Qub3JnL2Rpc3BsYXkvZmx1aWQvRmx1aWQrTGljZW5zaW5nCiAq
CiAqIEZvciBpbmZvcm1hdGlvbiBvbiBjb3B5cmlnaHQsIHNlZSB0aGUgaW5kaXZpZHVhbCBJbmZ1
c2lvbiBzb3VyY2UgY29kZSBmaWxlczogCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbHVpZC1wcm9q
ZWN0L2luZnVzaW9uLwogKi8KCi8qCkNvcHlyaWdodCAyMDA3LTIwMTAgVW5pdmVyc2l0eSBvZiBD
YW1icmlkZ2UKQ29weXJpZ2h0IDIwMDctMjAwOSBVbml2ZXJzaXR5IG9mIFRvcm9udG8KQ29weXJp
Z2h0IDIwMDctMjAwOSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5CkNvcHlyaWdo
dCAyMDEwLTIwMTEgTHVjZW5kbyBEZXZlbG9wbWVudCBMdGQuCkNvcHlyaWdodCAyMDEwIE9DQUQg
VW5pdmVyc2l0eQpDb3B5cmlnaHQgMjAxMSBDaGFybHkgTW9sdGVyCgpMaWNlbnNlZCB1bmRlciB0
aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCksIFZlcnNpb24gMi4wIG9yIHRo
ZSBOZXcKQlNEIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIEVDTCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2UgYXQKaHR0cHM6Ly9naXRodWIu
Y29tL2ZsdWlkLXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9JbmZ1c2lvbi1MSUNFTlNFLnR4
dAoqLwoKLy8gRGVjbGFyZSBkZXBlbmRlbmNpZXMKLypnbG9iYWwgY29uc29sZSwgd2luZG93LCBm
bHVpZDp0cnVlLCBmbHVpZF8xXzQ6dHJ1ZSwgalF1ZXJ5LCBvcGVyYSwgWUFIT08qLwoKLy8gSlNM
aW50IG9wdGlvbnMgCi8qanNsaW50IHdoaXRlOiB0cnVlLCBmdW5jaW52b2tlOiB0cnVlLCBjb250
aW51ZTogdHJ1ZSwganNsaW50b2s6IHRydWUsIHVuZGVmOiB0cnVlLCBuZXdjYXA6IHRydWUsIG5v
bWVuOiB0cnVlLCByZWdleHA6IHRydWUsIGJpdHdpc2U6IHRydWUsIGJyb3dzZXI6IHRydWUsIGZv
cmluOiB0cnVlLCBtYXhlcnI6IDEwMCwgaW5kZW50OiA0ICovCgp2YXIgZmx1aWRfMV80ID0gZmx1
aWRfMV80IHx8IHt9Owp2YXIgZmx1aWQgPSBmbHVpZCB8fCBmbHVpZF8xXzQ7CgooZnVuY3Rpb24g
KCQsIGZsdWlkKSB7CiAgICAKICAgIGZsdWlkLnZlcnNpb24gPSAiSW5mdXNpb24gMS40IjsKICAg
IAogICAgZmx1aWQuZW52aXJvbm1lbnQgPSB7CiAgICAgICAgZmx1aWQ6IGZsdWlkCiAgICB9Owog
ICAgdmFyIGdsb2JhbE9iamVjdCA9IHdpbmRvdyB8fCB7fTsKICAgIAogICAgdmFyIHNvZnRGYWls
dXJlID0gW3RydWVdOwogICAgCiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcGF0Y2hlZCBm
cm9tIEZsdWlkSW9DLmpzIGluIG9yZGVyIHRvIGRlc2NyaWJlIGNvbXBsZXggYWN0aXZpdGllcwog
ICAgZmx1aWQuZGVzY3JpYmVBY3Rpdml0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4g
W107CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIENhdXNlcyBhbiBlcnJvciBtZXNzYWdlIHRv
IGJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSBhbmQgYSByZWFsIHJ1bnRpbWUgZXJyb3IgdG8gYmUg
dGhyb3duLgogICAgICogCiAgICAgKiBAcGFyYW0ge1N0cmluZ3xFcnJvcn0gbWVzc2FnZSB0aGUg
ZXJyb3IgbWVzc2FnZSB0byBsb2cKICAgICAqIEBwYXJhbSAuLi4gQWRkaXRpb25hbCBhcmd1bWVu
dHMKICAgICAqLwogICAgZmx1aWQuZmFpbCA9IGZ1bmN0aW9uIChtZXNzYWdlIC8qLCAuLi4gKi8p
IHsgLy8ganNsaW50Om9rIC0gd2hpdGVzcGFjZSBpbiBhcmcgbGlzdAogICAgICAgIGZsdWlkLnNl
dExvZ2dpbmcodHJ1ZSk7CiAgICAgICAgZmx1aWQubG9nLmFwcGx5KG51bGwsIFsiQVNTRVJUSU9O
IEZBSUxFRDogIl0uY29uY2F0KGZsdWlkLm1ha2VBcnJheShhcmd1bWVudHMpKS5jb25jYXQoZmx1
aWQuZGVzY3JpYmVBY3Rpdml0eSgpKSk7CiAgICAgICAgaWYgKHNvZnRGYWlsdXJlWzBdKSB7CiAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBtZXNzYWdlLmZhaWwoKTsgLy8gSW50ZW50aW9uYWxseSBjYXVzZSBhIGJyb3dzZXIg
ZXJyb3IgYnkgaW52b2tpbmcgYSBub25leGlzdGVudCBmdW5jdGlvbi4KICAgICAgICB9CiAgICB9
OwogICAgCiAgICBmbHVpZC5wdXNoU29mdEZhaWx1cmUgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7
CiAgICAgICAgaWYgKHR5cGVvZiAoY29uZGl0aW9uKSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAg
ICAgIHNvZnRGYWlsdXJlLnVuc2hpZnQoY29uZGl0aW9uKTsKICAgICAgICB9IGVsc2UgaWYgKGNv
bmRpdGlvbiA9PT0gLTEpIHsKICAgICAgICAgICAgc29mdEZhaWx1cmUuc2hpZnQoKTsKICAgICAg
ICB9CiAgICB9OwogICAgCiAgICBmbHVpZC5ub3RyeWNhdGNoID0gZmFsc2U7CiAgICAKICAgIC8v
IEEgd3JhcHBlciBmb3IgdGhlIHRyeS9jYXRjaC9maW5hbGx5IGxhbmd1YWdlIGZlYXR1cmUsIHRv
IGFpZCBkZWJ1Z2dpbmcgb24gZW52aXJvbm1lbnRzCiAgICAvLyBzdWNoIGFzIElFLCB3aGVyZSBh
bnkgdHJ5IHdpbGwgZGVzdHJveSBzdGFjayBpbmZvcm1hdGlvbiBmb3IgZXJyb3JzCiAgICBmbHVp
ZC50cnlDYXRjaCA9IGZ1bmN0aW9uICh0cnlmdW4sIGNhdGNoZnVuLCBmaW5hbGx5ZnVuKSB7CiAg
ICAgICAgZmluYWxseWZ1biA9IGZpbmFsbHlmdW4gfHwgZmx1aWQuaWRlbnRpdHk7CiAgICAgICAg
aWYgKGZsdWlkLm5vdHJ5Y2F0Y2gpIHsKICAgICAgICAgICAgdmFyIHRvZ28gPSB0cnlmdW4oKTsK
ICAgICAgICAgICAgZmluYWxseWZ1bigpOwogICAgICAgICAgICByZXR1cm4gdG9nbzsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRyeWZ1
bigpOyAgCiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGlmIChjYXRj
aGZ1bikgewogICAgICAgICAgICAgICAgICAgIGNhdGNoZnVuKGUpOwogICAgICAgICAgICAgICAg
fSBlbHNlIHsgCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgKGUpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgZmluYWxseWZ1bigpOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gVE9ETzogcmVzY3VlZCBm
cm9tIGtldHRsZUNvdWNoREIuanMgLSBjbGVhbiB1cCBpbiB0aW1lCiAgICBmbHVpZC5leHBlY3Qg
PSBmdW5jdGlvbiAobmFtZSwgbWVtYmVycywgdGFyZ2V0KSB7CiAgICAgICAgZmx1aWQudHJhbnNm
b3JtKGZsdWlkLm1ha2VBcnJheShtZW1iZXJzKSwgZnVuY3Rpb24gKGtleSkgewogICAgICAgICAg
ICBpZiAodHlwZW9mIHRhcmdldFtrZXldID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAg
ICAgZmx1aWQuZmFpbChuYW1lICsgIiBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciAiICsga2V5
KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICAvLyBMb2dnaW5nCgogICAg
dmFyIGxvZ2dpbmc7CiAgICAgICAgCiAgICAvKiogUmV0dXJucyB3aGV0aGVyIGxvZ2dpbmcgaXMg
ZW5hYmxlZCAqKi8KICAgIGZsdWlkLmlzTG9nZ2luZyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBy
ZXR1cm4gbG9nZ2luZzsKICAgIH07CgogICAgLyoqIG1ldGhvZCB0byBhbGxvdyB1c2VyIHRvIGVu
YWJsZSBsb2dnaW5nIChvZmYgYnkgZGVmYXVsdCkgKi8KICAgIGZsdWlkLnNldExvZ2dpbmcgPSBm
dW5jdGlvbiAoZW5hYmxlZCkgewogICAgICAgIGlmICh0eXBlb2YgZW5hYmxlZCA9PT0gImJvb2xl
YW4iKSB7CiAgICAgICAgICAgIGxvZ2dpbmcgPSBlbmFibGVkOwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgIGxvZ2dpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE9uIHNv
bWUgZG9kZ3kgZW52aXJvbm1lbnRzIChub3RhYmx5IElFOSBhbmQgcmVjZW50IGFscGhhcyBvZiBG
aXJlYnVnIDEuOCksIAogICAgLy8gY29uc29sZS5sb2cvZGVidWcgYXJlIGluY29tcGxldGUgZnVu
Y3Rpb24gb2JqZWN0cyBhbmQgbmVlZCB0byBiZSBvcGVyYXRlZCB2aWEKICAgIC8vIHRoaXMgdHJp
Y2s6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQ3MjkzOC9kb2VzLWllOS1z
dXBwb3J0LWNvbnNvbGUtbG9nLWFuZC1pcy1pdC1hLXJlYWwtZnVuY3Rpb24KICAgIGZsdWlkLmFw
cGx5SG9zdEZ1bmN0aW9uID0gZnVuY3Rpb24gKG9iaiwgZnVuYywgYXJncykgewogICAgICAgIGlm
IChmdW5jLmFwcGx5KSB7CiAgICAgICAgICAgIGZ1bmMuYXBwbHkob2JqLCBhcmdzKTsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICB2YXIgYXBwbGllciA9IEZ1bmN0aW9uLnByb3RvdHlwZS5i
aW5kLmNhbGwoZnVuYywgb2JqKTsKICAgICAgICAgICAgYXBwbGllci5hcHBseShvYmosIGFyZ3Mp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoqIExvZyBhIG1lc3NhZ2UgdG8gYSBzdWl0YWJsZSBl
bnZpcm9ubWVudGFsIGNvbnNvbGUuIElmIHRoZSBzdGFuZGFyZCAiY29uc29sZSIgCiAgICAgKiBz
dHJlYW0gaXMgYXZhaWxhYmxlLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQgdGhlcmUgLSBvdGhl
cndpc2UgZWl0aGVyIHRoZQogICAgICogWUFIT08gbG9nZ2VyIG9yIHRoZSBPcGVyYSAicG9zdEVy
cm9yIiBzdHJlYW0gd2lsbCBiZSB1c2VkLiBMb2dnaW5nIG11c3QgZmlyc3QKICAgICAqIGJlIGVu
YWJsZWQgd2l0aCBhIGNhbGwgdG8gdGhlIGZsdWlkLnNldExvZ2dpbmcodHJ1ZSkgZnVuY3Rpb24u
CiAgICAgKi8KICAgIGZsdWlkLmxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlIC8qLCAuLi4gKi8pIHsg
Ly8ganNsaW50Om9rIC0gd2hpdGVzcGFjZSBpbiBhcmcgbGlzdAogICAgICAgIGlmIChsb2dnaW5n
KSB7CiAgICAgICAgICAgIHZhciBhcmcwID0gZmx1aWQucmVuZGVyVGltZXN0YW1wKG5ldyBEYXRl
KCkpICsgIjogICI7IAogICAgICAgICAgICB2YXIgYXJncyA9IFthcmcwXS5jb25jYXQoZmx1aWQu
bWFrZUFycmF5KGFyZ3VtZW50cykpOwogICAgICAgICAgICB2YXIgc3RyID0gYXJncy5qb2luKCIi
KTsKICAgICAgICAgICAgaWYgKHR5cGVvZiAoY29uc29sZSkgIT09ICJ1bmRlZmluZWQiKSB7CiAg
ICAgICAgICAgICAgICBpZiAoY29uc29sZS5kZWJ1ZykgewogICAgICAgICAgICAgICAgICAgIGZs
dWlkLmFwcGx5SG9zdEZ1bmN0aW9uKGNvbnNvbGUsIGNvbnNvbGUuZGVidWcsIGFyZ3MpOwogICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNvbnNvbGUubG9nKSA9PT0gImZ1bmN0aW9u
IikgewogICAgICAgICAgICAgICAgICAgIGZsdWlkLmFwcGx5SG9zdEZ1bmN0aW9uKGNvbnNvbGUs
IGNvbnNvbGUubG9nLCBhcmdzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coc3RyKTsgLy8gdGhpcyBicmFuY2ggZXhlY3V0ZXMgb24gb2xk
IElFLCBmdWxseSBzeW50aGV0aWMgY29uc29sZS5sb2cKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKFlBSE9PKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAg
ICAgICAgICAgIFlBSE9PLmxvZyhzdHIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAo
b3BlcmEpICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgb3BlcmEucG9zdEVycm9y
KHN0cik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvKioKICAgICAq
IFdyYXBzIGFuIG9iamVjdCBpbiBhIGpRdWVyeSBpZiBpdCBpc24ndCBhbHJlYWR5IG9uZS4gVGhp
cyBmdW5jdGlvbiBpcyB1c2VmdWwgc2luY2UKICAgICAqIGl0IGVuc3VyZXMgdG8gd3JhcCBhIG51
bGwgb3Igb3RoZXJ3aXNlIGZhbHN5IGFyZ3VtZW50IHRvIGl0c2VsZiwgcmF0aGVyIHRoYW4gdGhl
CiAgICAgKiBvZnRlbiB1bmhlbHBmdWwgalF1ZXJ5IGRlZmF1bHQgb2YgcmV0dXJuaW5nIHRoZSBv
dmVyYWxsIGRvY3VtZW50IG5vZGUuCiAgICAgKiAKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmog
dGhlIG9iamVjdCB0byB3cmFwIGluIGEgalF1ZXJ5CiAgICAgKi8KICAgIGZsdWlkLndyYXAgPSBm
dW5jdGlvbiAob2JqKSB7CiAgICAgICAgcmV0dXJuICgoIW9iaiB8fCBvYmouanF1ZXJ5KSA/IG9i
aiA6ICQob2JqKSk7IAogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBJZiBvYmogaXMgYSBqUXVl
cnksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGZpcnN0IERPTSBlbGVtZW50IHdpdGhp
biBpdC4KICAgICAqIAogICAgICogQHBhcmFtIHtqUXVlcnl9IG9iaiB0aGUgalF1ZXJ5IGluc3Rh
bmNlIHRvIHVud3JhcCBpbnRvIGEgcHVyZSBET00gZWxlbWVudAogICAgICovCiAgICBmbHVpZC51
bndyYXAgPSBmdW5jdGlvbiAob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmouanF1ZXJ5
ICYmIG9iai5sZW5ndGggPT09IDEgPyBvYmpbMF0gOiBvYmo7IC8vIFVud3JhcCB0aGUgZWxlbWVu
dCBpZiBpdCdzIGEgalF1ZXJ5LgogICAgfTsKICAgIAogICAgLy8gRnVuY3Rpb25hbCBwcm9ncmFt
bWluZyB1dGlsaXRpZXMuCiAgICAgICAgICAgICAgIAogICAgLyoqIEEgYmFzaWMgdXRpbGl0eSB0
aGF0IHJldHVybnMgaXRzIGFyZ3VtZW50IHVuY2hhbmdlZCAqLwogICAgCiAgICBmbHVpZC5pZGVu
dGl0eSA9IGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICByZXR1cm4gYXJnOwogICAgfTsKICAgIAog
ICAgLy8gRnJhbWV3b3JrIGFuZCBpbnN0YW50aWF0aW9uIGZ1bmN0aW9ucy4KCiAgICAKICAgIC8q
KiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBudWxs
IG9yIHVuZGVmaW5lZCAqKi8KICAgIGZsdWlkLmlzVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsK
ICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDsKICAg
IH07CiAgICAKICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0
aXZlIHR5cGUgKiovCiAgICBmbHVpZC5pc1ByaW1pdGl2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgewog
ICAgICAgIHZhciB2YWx1ZVR5cGUgPSB0eXBlb2YgKHZhbHVlKTsKICAgICAgICByZXR1cm4gIXZh
bHVlIHx8IHZhbHVlVHlwZSA9PT0gInN0cmluZyIgfHwgdmFsdWVUeXBlID09PSAiYm9vbGVhbiIg
fHwgdmFsdWVUeXBlID09PSAibnVtYmVyIiB8fCB2YWx1ZVR5cGUgPT09ICJmdW5jdGlvbiI7CiAg
ICB9OwogICAgCiAgICBmbHVpZC5pc0RPTU5vZGUgPSBmdW5jdGlvbiAob2JqKSB7CiAgICAgIC8v
IFRoaXMgY291bGQgYmUgbW9yZSBzb3VuZCwgYnV0IG1lc3N5OiAKICAgICAgLy8gaHR0cDovL3N0
YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zODQyODYvamF2YXNjcmlwdC1pc2RvbS1ob3ctZG8t
eW91LWNoZWNrLWlmLWEtamF2YXNjcmlwdC1vYmplY3QtaXMtYS1kb20tb2JqZWN0CiAgICAgICAg
cmV0dXJuIG9iaiAmJiB0eXBlb2YgKG9iai5ub2RlVHlwZSkgPT09ICJudW1iZXIiOyAgCiAgICB9
OwogICAgCiAgICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdXBwbGllZCBvYmplY3QgY2Fu
IGJlIHRyZWF0ZWQgYXMgYW4gYXJyYXksIGJ5IAogICAgICogaXRlcmF0aW5nIGFuIGluZGV4IHRv
d2FyZHMgaXRzIGxlbmd0aC4gVGhlIHRlc3QgZnVuY3Rpb25zIGJ5IGRldGVjdGluZwogICAgICog
YSBwcm9wZXJ0eSBuYW1lZCAibGVuZ3RoIiB3aGljaCBpcyBvZiB0eXBlICJudW1iZXIiLCBidXQg
ZXhjbHVkaW5nIG9iamVjdHMKICAgICAqIHdoaWNoIGFyZSB0aGVtc2VsdmVzIG9mIHByaW1pdGl2
ZSB0eXBlcyAoaW4gcGFydGljdWxhciBmdW5jdGlvbnMgYW5kIHN0cmluZ3MpCiAgICAgKi8KICAg
IGZsdWlkLmlzQXJyYXlhYmxlID0gZnVuY3Rpb24gKHRvdGVzdCkgewogICAgICAgIHJldHVybiB0
b3Rlc3QgJiYgIWZsdWlkLmlzUHJpbWl0aXZlKHRvdGVzdCkgJiYgdHlwZW9mICh0b3Rlc3QubGVu
Z3RoKSA9PT0gIm51bWJlciI7CiAgICB9OwogICAgCiAgICAvKiogUmV0dXJuIGFuIGVtcHR5IGNv
bnRhaW5lciBhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBhcmd1bWVudCAoZWl0aGVyIGFuCiAgICAg
KiBhcnJheSBvciBoYXNoICovCiAgICBmbHVpZC5mcmVzaENvbnRhaW5lciA9IGZ1bmN0aW9uICh0
b2NvcHkpIHsKICAgICAgICByZXR1cm4gZmx1aWQuaXNBcnJheWFibGUodG9jb3B5KSA/IFtdIDog
e307ICAgCiAgICB9OwogICAgCiAgICAvKiogUGVyZm9ybXMgYSBkZWVwIGNvcHkgKGNsb25lKSBv
ZiBpdHMgYXJndW1lbnQgKiovCiAgICAKICAgIGZsdWlkLmNvcHkgPSBmdW5jdGlvbiAodG9jb3B5
KSB7CiAgICAgICAgaWYgKGZsdWlkLmlzUHJpbWl0aXZlKHRvY29weSkpIHsKICAgICAgICAgICAg
cmV0dXJuIHRvY29weTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHRydWUsIGZs
dWlkLmZyZXNoQ29udGFpbmVyKHRvY29weSksIHRvY29weSk7CiAgICB9OwogICAgICAgICAgICAK
ICAgIC8qKiBDb3JyZWN0ZWQgdmVyc2lvbiBvZiBqUXVlcnkgbWFrZUFycmF5IHRoYXQgcmV0dXJu
cyBhbiBlbXB0eSBhcnJheSBvbiB1bmRlZmluZWQgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgKiovCiAg
ICBmbHVpZC5tYWtlQXJyYXkgPSBmdW5jdGlvbiAoYXJnKSB7CiAgICAgICAgaWYgKGFyZyA9PT0g
bnVsbCB8fCBhcmcgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICQubWFrZUFycmF5KGFyZyk7CiAgICAgICAg
fQogICAgfTsKICAgIAogICAgZnVuY3Rpb24gdHJhbnNmb3JtSW50ZXJuYWwoc291cmNlLCB0b2dv
LCBrZXksIGFyZ3MpIHsKICAgICAgICB2YXIgdHJhbnNpdCA9IHNvdXJjZVtrZXldOwogICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgYXJncy5sZW5ndGggLSAxOyArK2opIHsKICAgICAgICAgICAg
dHJhbnNpdCA9IGFyZ3NbaiArIDFdKHRyYW5zaXQsIGtleSk7CiAgICAgICAgfQogICAgICAgIHRv
Z29ba2V5XSA9IHRyYW5zaXQ7IAogICAgfQogICAgCiAgICAvKiogUmV0dXJuIGEgbGlzdCBvciBo
YXNoIG9mIG9iamVjdHMsIHRyYW5zZm9ybWVkIGJ5IG9uZSBvciBtb3JlIGZ1bmN0aW9ucy4gU2lt
aWxhciB0bwogICAgICogalF1ZXJ5Lm1hcCwgb25seSB3aWxsIGFjY2VwdCBhbiBhcmJpdHJhcnkg
bGlzdCBvZiB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgYW5kIGFsc28KICAgICAqIHdvcmtzIG9u
IG5vbi1hcnJheXMuCiAgICAgKiBAcGFyYW0gc291cmNlIHtBcnJheSBvciBPYmplY3R9IFRoZSBp
bml0aWFsIGNvbnRhaW5lciBvZiBvYmplY3RzIHRvIGJlIHRyYW5zZm9ybWVkLgogICAgICogQHBh
cmFtIGZuMSwgZm4yLCBldGMuIHtGdW5jdGlvbn0gQW4gYXJiaXRyYXJ5IG51bWJlciBvZiBvcHRp
b25hbCBmdXJ0aGVyIGFyZ3VtZW50cywKICAgICAqIGFsbCBvZiB0eXBlIEZ1bmN0aW9uLCBhY2Nl
cHRpbmcgdGhlIHNpZ25hdHVyZSAob2JqZWN0LCBpbmRleCksIHdoZXJlIG9iamVjdCBpcyB0aGUK
ICAgICAqIGxpc3QgbWVtYmVyIHRvIGJlIHRyYW5zZm9ybWVkLCBhbmQgaW5kZXggaXMgaXRzIGxp
c3QgaW5kZXguIEVhY2ggZnVuY3Rpb24gd2lsbCBiZQogICAgICogYXBwbGllZCBpbiB0dXJuIHRv
IGVhY2ggbGlzdCBtZW1iZXIsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHJldHVybiB2
YWx1ZQogICAgICogZnJvbSB0aGUgZnVuY3Rpb24uCiAgICAgKiBAcmV0dXJuIFRoZSBmaW5hbGx5
IHRyYW5zZm9ybWVkIGxpc3QsIHdoZXJlIGVhY2ggbWVtYmVyIGhhcyBiZWVuIHJlcGxhY2VkIGJ5
IHRoZQogICAgICogb3JpZ2luYWwgbWVtYmVyIGFjdGVkIG9uIGJ5IHRoZSBmdW5jdGlvbiBvciBm
dW5jdGlvbnMuCiAgICAgKi8KICAgIGZsdWlkLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChzb3VyY2Up
IHsKICAgICAgICB2YXIgdG9nbyA9IGZsdWlkLmZyZXNoQ29udGFpbmVyKHNvdXJjZSk7CiAgICAg
ICAgaWYgKGZsdWlkLmlzQXJyYXlhYmxlKHNvdXJjZSkpIHsKICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIHRyYW5zZm9y
bUludGVybmFsKHNvdXJjZSwgdG9nbywgaSwgYXJndW1lbnRzKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAg
ICAgICAgICAgIHRyYW5zZm9ybUludGVybmFsKHNvdXJjZSwgdG9nbywga2V5LCBhcmd1bWVudHMp
OwogICAgICAgICAgICB9CiAgICAgICAgfSAgCiAgICAgICAgcmV0dXJuIHRvZ287CiAgICB9Owog
ICAgCiAgICAvKiogQmV0dGVyIGpRdWVyeS5lYWNoIHdoaWNoIHdvcmtzIG9uIGhhc2hlcyBhcyB3
ZWxsIGFzIGhhdmluZyB0aGUgYXJndW1lbnRzCiAgICAgKiB0aGUgcmlnaHQgd2F5IHJvdW5kLiAK
ICAgICAqIEBwYXJhbSBzb3VyY2Uge0FycmF5YWJsZSBvciBPYmplY3R9IFRoZSBjb250YWluZXIg
dG8gYmUgaXRlcmF0ZWQgb3ZlcgogICAgICogQHBhcmFtIGZ1bmMge0Z1bmN0aW9ufSBBIGZ1bmN0
aW9uIGFjY2VwdGluZyAodmFsdWUsIGtleSkgZm9yIGVhY2ggaXRlcmF0ZWQKICAgICAqIG9iamVj
dC4gVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGEgdmFsdWUgdG8gdGVybWluYXRlIHRoZSBpdGVy
YXRpb24KICAgICAqLwogICAgZmx1aWQuZWFjaCA9IGZ1bmN0aW9uIChzb3VyY2UsIGZ1bmMpIHsK
ICAgICAgICBpZiAoZmx1aWQuaXNBcnJheWFibGUoc291cmNlKSkgewogICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgZnVu
Yyhzb3VyY2VbaV0sIGkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgewogICAgICAgICAgICAgICAgZnVuYyhzb3VyY2Vb
a2V5XSwga2V5KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8qKiBT
Y2FuIHRocm91Z2ggYSBsaXN0IG9yIGhhc2ggb2Ygb2JqZWN0cywgdGVybWluYXRpbmcgb24gdGhl
IGZpcnN0IG1lbWJlciB3aGljaAogICAgICogbWF0Y2hlcyBhIHByZWRpY2F0ZSBmdW5jdGlvbi4K
ICAgICAqIEBwYXJhbSBzb3VyY2Uge0FycmF5YWJsZSBvciBPYmplY3R9IFRoZSBsaXN0IG9yIGhh
c2ggb2Ygb2JqZWN0cyB0byBiZSBzZWFyY2hlZC4KICAgICAqIEBwYXJhbSBmdW5jIHtGdW5jdGlv
bn0gQSBwcmVkaWNhdGUgZnVuY3Rpb24sIGFjdGluZyBvbiBhIG1lbWJlci4gQSBwcmVkaWNhdGUg
d2hpY2gKICAgICAqIHJldHVybnMgYW55IHZhbHVlIHdoaWNoIGlzIG5vdCA8Y29kZT51bmRlZmlu
ZWQ8L2NvZGU+IHdpbGwgdGVybWluYXRlCiAgICAgKiB0aGUgc2VhcmNoLiBUaGUgZnVuY3Rpb24g
YWNjZXB0cyAob2JqZWN0LCBpbmRleCkuCiAgICAgKiBAcGFyYW0gZGVmbHQge09iamVjdH0gQSB2
YWx1ZSB0byBiZSByZXR1cm5lZCBpbiB0aGUgY2FzZSBubyBwcmVkaWNhdGUgZnVuY3Rpb24gbWF0
Y2hlcwogICAgICogYSBsaXN0IG1lbWJlci4gVGhlIGRlZmF1bHQgd2lsbCBiZSB0aGUgbmF0dXJh
bCB2YWx1ZSBvZiA8Y29kZT51bmRlZmluZWQ8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFRoZSBmaXJz
dCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uIHdoaWNoIGlzIG5vdCA8
Y29kZT51bmRlZmluZWQ8L2NvZGU+CiAgICAgKi8KICAgIGZsdWlkLmZpbmQgPSBmdW5jdGlvbiAo
c291cmNlLCBmdW5jLCBkZWZsdCkgewogICAgICAgIHZhciBkaXNwOwogICAgICAgIGlmIChmbHVp
ZC5pc0FycmF5YWJsZShzb3VyY2UpKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c291cmNlLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBkaXNwID0gZnVuYyhzb3VyY2Vb
aV0sIGkpOwogICAgICAgICAgICAgICAgaWYgKGRpc3AgIT09IHVuZGVmaW5lZCkgewogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkaXNwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgewog
ICAgICAgICAgICAgICAgZGlzcCA9IGZ1bmMoc291cmNlW2tleV0sIGtleSk7CiAgICAgICAgICAg
ICAgICBpZiAoZGlzcCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRpc3A7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
cmV0dXJuIGRlZmx0OwogICAgfTsKICAgIAogICAgLyoqIFNjYW4gdGhyb3VnaCBhIGxpc3Qgb2Yg
b2JqZWN0cywgImFjY3VtdWxhdGluZyIgYSB2YWx1ZSBvdmVyIHRoZW0gCiAgICAgKiAobWF5IGJl
IGEgc3RyYWlnaHRmb3J3YXJkICJzdW0iIG9yIHNvbWUgb3RoZXIgY2hhaW5lZCBjb21wdXRhdGlv
bikuCiAgICAgKiBAcGFyYW0gbGlzdCB7QXJyYXl9IFRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUg
YWNjdW11bGF0ZWQgb3Zlci4KICAgICAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IEFuICJhY2N1bXVs
YXRpb24gZnVuY3Rpb24iIGFjY2VwdGluZyB0aGUgc2lnbmF0dXJlIChvYmplY3QsIHRvdGFsLCBp
bmRleCkgd2hlcmUKICAgICAqIG9iamVjdCBpcyB0aGUgbGlzdCBtZW1iZXIsIHRvdGFsIGlzIHRo
ZSAicnVubmluZyB0b3RhbCIgb2JqZWN0ICh3aGljaCBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20g
dGhlIHByZXZpb3VzIGZ1bmN0aW9uKSwKICAgICAqIGFuZCBpbmRleCBpcyB0aGUgaW5kZXggbnVt
YmVyLgogICAgICogQHBhcmFtIGFyZyB7T2JqZWN0fSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhl
ICJydW5uaW5nIHRvdGFsIiBvYmplY3QuCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBmaW5h
bCBydW5uaW5nIHRvdGFsIG9iamVjdCBhcyByZXR1cm5lZCBmcm9tIHRoZSBmaW5hbCBpbnZvY2F0
aW9uIG9mIHRoZSBmdW5jdGlvbiBvbiB0aGUgbGFzdCBsaXN0IG1lbWJlci4KICAgICAqLwogICAg
Zmx1aWQuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChsaXN0LCBmbiwgYXJnKSB7CiAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGFyZyA9IGZu
KGxpc3RbaV0sIGFyZywgaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcmc7CiAgICB9Owog
ICAgCiAgICAvKiogQ2FuIHRocm91Z2ggYSBsaXN0IG9mIG9iamVjdHMsIHJlbW92aW5nIHRob3Nl
IHdoaWNoIG1hdGNoIGEgcHJlZGljYXRlLiBTaW1pbGFyIHRvCiAgICAgKiBqUXVlcnkuZ3JlcCwg
b25seSBhY3RzIG9uIHRoZSBsaXN0IGluLXBsYWNlIGJ5IHJlbW92YWwsIHJhdGhlciB0aGFuIGJ5
IGNyZWF0aW5nCiAgICAgKiBhIG5ldyBsaXN0IGJ5IGluY2x1c2lvbi4KICAgICAqIEBwYXJhbSBz
b3VyY2Uge0FycmF5fE9iamVjdH0gVGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBzY2FubmVkIG92
ZXIuCiAgICAgKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBBIHByZWRpY2F0ZSBmdW5jdGlvbiBkZXRl
cm1pbmluZyB3aGV0aGVyIGFuIGVsZW1lbnQgc2hvdWxkIGJlCiAgICAgKiByZW1vdmVkLiBUaGlz
IGFjY2VwdHMgdGhlIHN0YW5kYXJkIHNpZ25hdHVyZSAob2JqZWN0LCBpbmRleCkgYW5kIHJldHVy
bnMgYSAidHJ1dGh5IgogICAgICogcmVzdWx0IGluIG9yZGVyIHRvIGRldGVybWluZSB0aGF0IHRo
ZSBzdXBwbGllZCBvYmplY3Qgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4KICAgICAq
IEByZXR1cm4gVGhlIGxpc3QsIHRyYW5zZm9ybWVkIGJ5IHRoZSBvcGVyYXRpb24gb2YgcmVtb3Zp
bmcgdGhlIG1hdGNoZWQgZWxlbWVudHMuIFRoZQogICAgICogc3VwcGxpZWQgbGlzdCBpcyBtb2Rp
ZmllZCBieSB0aGlzIG9wZXJhdGlvbi4KICAgICAqLwogICAgZmx1aWQucmVtb3ZlX2lmID0gZnVu
Y3Rpb24gKHNvdXJjZSwgZm4pIHsKICAgICAgICBpZiAoZmx1aWQuaXNBcnJheWFibGUoc291cmNl
KSkgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgICAgaWYgKGZuKHNvdXJjZVtpXSwgaSkpIHsKICAgICAgICAgICAgICAg
ICAgICBzb3VyY2Uuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIC0taTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICAgICAgICAgIGlmIChmbihzb3VyY2Vba2V5
XSwga2V5KSkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2Vba2V5XTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gc291cmNl
OwogICAgfTsKICAgIAogICAgLyoqIEFjY2VwdHMgYW4gb2JqZWN0IHRvIGJlIGZpbHRlcmVkLCBh
bmQgYSBsaXN0IG9mIGtleXMuIEVpdGhlciBhbGwga2V5cyBub3QgcHJlc2VudCBpbgogICAgICog
dGhlIGxpc3QgYXJlIHJlbW92ZWQsIG9yIG9ubHkga2V5cyBwcmVzZW50IGluIHRoZSBsaXN0IGFy
ZSByZXR1cm5lZC4KICAgICAqIEBwYXJhbSB0b0ZpbHRlciB7QXJyYXl8T2JqZWN0fSBUaGUgb2Jq
ZWN0IHRvIGJlIGZpbHRlcmVkIC0gdGhpcyB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBvcGVyYXRp
b24KICAgICAqIEBwYXJhbSBrZXlzIHtBcnJheSBvZiBTdHJpbmd9IFRoZSBsaXN0IG9mIGtleXMg
dG8gb3BlcmF0ZSB3aXRoCiAgICAgKiBAcGFyYW0gZXhjbHVkZSB7Ym9vbGVhbn0gSWYgPGNvZGU+
dHJ1ZTwvY29kZT4sIHRoZSBrZXlzIGxpc3RlZCBhcmUgcmVtb3ZlZCByYXRoZXIgdGhhbiBpbmNs
dWRlZAogICAgICogQHJldHVybiB0aGUgZmlsdGVyZWQgb2JqZWN0ICh0aGUgc2FtZSBvYmplY3Qg
dGhhdCB3YXMgc3VwcGxpZWQgYXMgPGNvZGU+dG9GaWx0ZXI8L2NvZGU+CiAgICAgKi8KICAgIAog
ICAgZmx1aWQuZmlsdGVyS2V5cyA9IGZ1bmN0aW9uICh0b0ZpbHRlciwga2V5cywgZXhjbHVkZSkg
ewogICAgICAgIHJldHVybiBmbHVpZC5yZW1vdmVfaWYoJC5leHRlbmQoe30sIHRvRmlsdGVyKSwg
ZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGUgXiAoJC5p
bkFycmF5KGtleSwga2V5cykgPT09IC0xKTsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8q
KiBBIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIDxjb2RlPmZsdWlkLmZpbHRlcktleXM8L2NvZGU+
IHdpdGggdGhlIHBhcmFtZXRlciA8Y29kZT5leGNsdWRlPC9jb2RlPiBzZXQgdG8gPGNvZGU+dHJ1
ZTwvY29kZT4KICAgICAqICBSZXR1cm5zIHRoZSBzdXBwbGllZCBvYmplY3Qgd2l0aCBsaXN0ZWQg
a2V5cyByZW1vdmVkICovCgogICAgZmx1aWQuY2Vuc29yS2V5cyA9IGZ1bmN0aW9uICh0b0NlbnNv
ciwga2V5cykgewogICAgICAgIHJldHVybiBmbHVpZC5maWx0ZXJLZXlzKHRvQ2Vuc29yLCBrZXlz
LCB0cnVlKTsKICAgIH07CiAgICAKICAgIC8qKiBSZXR1cm4gdGhlIGtleXMgaW4gdGhlIHN1cHBs
aWVkIG9iamVjdCBhcyBhbiBhcnJheSAqKi8KICAgIGZsdWlkLmtleXMgPSBmdW5jdGlvbiAob2Jq
KSB7CiAgICAgICAgdmFyIHRvZ28gPSBbXTsKICAgICAgICBmbHVpZC5lYWNoKG9iaiwgZnVuY3Rp
b24gKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgdG9nby5wdXNoKGtleSk7CiAgICAgICAgfSk7
CiAgICAgICAgcmV0dXJuIHRvZ287CiAgICB9OwogICAgCiAgICAvKiogCiAgICAgKiBTZWFyY2hl
cyB0aHJvdWdoIHRoZSBzdXBwbGllZCBvYmplY3QsIGFuZCByZXR1cm5zIDxjb2RlPnRydWU8L2Nv
ZGU+IGlmIHRoZSBzdXBwbGllZCB2YWx1ZQogICAgICogY2FuIGJlIGZvdW5kIAogICAgICovCiAg
ICBmbHVpZC5jb250YWlucyA9IGZ1bmN0aW9uIChvYmosIHZhbHVlKSB7CiAgICAgICAgcmV0dXJu
IG9iaiA/IGZsdWlkLmZpbmQob2JqLCBmdW5jdGlvbiAodGhpc1ZhbHVlLCBrZXkpIHsKICAgICAg
ICAgICAgaWYgKHZhbHVlID09PSB0aGlzVmFsdWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSkgOiB1bmRlZmluZWQ7CiAgICB9OwogICAgCiAg
ICAvKiogCiAgICAgKiBTZWFyY2hlcyB0aHJvdWdoIHRoZSBzdXBwbGllZCBvYmplY3QgZm9yIHRo
ZSBmaXJzdCB2YWx1ZSB3aGljaCBtYXRjaGVzIHRoZSBvbmUgc3VwcGxpZWQuCiAgICAgKiBAcGFy
YW0gb2JqIHtPYmplY3R9IHRoZSBPYmplY3QgdG8gYmUgc2VhcmNoZWQgdGhyb3VnaAogICAgICog
QHBhcmFtIHZhbHVlIHtPYmplY3R9IHRoZSB2YWx1ZSB0byBiZSBmb3VuZC4gVGhpcyB3aWxsIGJl
IGNvbXBhcmVkIGFnYWluc3QgdGhlIG9iamVjdCdzCiAgICAgKiBtZW1iZXIgdXNpbmcgPT09IGVx
dWFsaXR5LgogICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgZmlyc3Qga2V5IHdob3NlIHZhbHVl
IG1hdGNoZXMgdGhlIG9uZSBzdXBwbGllZCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8KICAg
ICAqIHN1Y2gga2V5IGlzIGZvdW5kLgogICAgICovCiAgICBmbHVpZC5rZXlGb3JWYWx1ZSA9IGZ1
bmN0aW9uIChvYmosIHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGZsdWlkLmZpbmQob2JqLCBmdW5j
dGlvbiAodGhpc1ZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzVmFs
dWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBrZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9
KTsKICAgIH07CiAgICAKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgbm93IGRlcHJlY2F0
ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEluZnVzaW9uLiAK
ICAgICAqIFNlZSBmbHVpZC5rZXlGb3JWYWx1ZSBpbnN0ZWFkLgogICAgICovCiAgICBmbHVpZC5m
aW5kS2V5SW5PYmplY3QgPSBmbHVpZC5rZXlGb3JWYWx1ZTsKICAgIAogICAgLyoqIENvbnZlcnRz
IGFuIGFycmF5IGludG8gYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBlbGVtZW50cyBvZiB0
aGUgYXJyYXksIGVhY2ggd2l0aCB0aGUgdmFsdWUgInRydWUiCiAgICAgKi8gCiAgICAKICAgIGZs
dWlkLmFycmF5VG9IYXNoID0gZnVuY3Rpb24gKGFycmF5KSB7CiAgICAgICAgdmFyIHRvZ28gPSB7
fTsKICAgICAgICBmbHVpZC5lYWNoKGFycmF5LCBmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgICAg
dG9nb1tlbF0gPSB0cnVlOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0b2dvOwogICAgfTsK
ICAgIAogICAgLyoqIAogICAgICogQ2xlYXJzIGFuIG9iamVjdCBvciBhcnJheSBvZiBpdHMgY29u
dGVudHMuIEZvciBvYmplY3RzLCBlYWNoIHByb3BlcnR5IGlzIGRlbGV0ZWQuCiAgICAgKiAKICAg
ICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSB0YXJnZXQgdGhlIHRhcmdldCB0byBiZSBjbGVhcmVk
CiAgICAgKi8KICAgIGZsdWlkLmNsZWFyID0gZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgIGlm
IChmbHVpZC5pc0FycmF5YWJsZSh0YXJnZXQpKSB7CiAgICAgICAgICAgIHRhcmdldC5sZW5ndGgg
PSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdGFyZ2V0KSB7
CiAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0W2ldOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfTsKICAgICAgICAKICAgIC8vIE1vZGVsIGZ1bmN0aW9ucwogICAgZmx1aWQubW9kZWwg
PSB7fTsgLy8gY2Fubm90IGNhbGwgcmVnaXN0ZXJOYW1lc3BhY2UgeWV0IHNpbmNlIGl0IGRlcGVu
ZHMgb24gZmx1aWQubW9kZWwKICAgICAgIAogICAgLyoqIEFub3RoZXIgc3BlY2lhbCAibWFya2Vy
IG9iamVjdCIgcmVwcmVzZW50aW5nIHRoYXQgYSBkaXN0aW5ndWlzaGVkIAogICAgICogKHByb2Jh
Ymx5IGNvbnRleHQtZGVwZW5kZW50KSB2YWx1ZSBzaG91bGQgYmUgc3Vic3RpdHV0ZWQuCiAgICAg
Ki8KICAgIGZsdWlkLlZBTFVFID0ge3R5cGU6ICJmbHVpZC5tYXJrZXIiLCB2YWx1ZTogIlZBTFVF
In07CiAgICAKICAgIC8qKiBBbm90aGVyIHNwZWNpYWwgIm1hcmtlciBvYmplY3QiIHJlcHJlc2Vu
dGluZyB0aGF0IG5vIHZhbHVlIGlzIHByZXNlbnQgKHdoZXJlCiAgICAgKiBzaWduYWxsaW5nIHVz
aW5nIHRoZSB2YWx1ZSAidW5kZWZpbmVkIiBpcyBub3QgcG9zc2libGUpICovCiAgICBmbHVpZC5O
T19WQUxVRSA9IHt0eXBlOiAiZmx1aWQubWFya2VyIiwgdmFsdWU6ICJOT19WQUxVRSJ9OwogICAg
CiAgICAvKiogQSBtYXJrZXIgaW5kaWNhdGluZyB0aGF0IGEgdmFsdWUgcmVxdWlyZXMgdG8gYmUg
ZXhwYW5kZWQgYWZ0ZXIgY29tcG9uZW50IGNvbnN0cnVjdGlvbiBiZWdpbnMgKiovCiAgICBmbHVp
ZC5FWFBBTkQgPSB7dHlwZTogImZsdWlkLm1hcmtlciIsIHZhbHVlOiAiRVhQQU5EIn07CiAgICAv
KiogQSBtYXJrZXIgaW5kaWNhdGluZyB0aGF0IGEgdmFsdWUgcmVxdWlyZXMgdG8gYmUgZXhwYW5k
ZWQgaW1tZWRpYXRlbHkqKi8KICAgIGZsdWlkLkVYUEFORF9OT1cgPSB7dHlwZTogImZsdWlkLm1h
cmtlciIsIHZhbHVlOiAiRVhQQU5EX05PVyJ9OwogICAgCiAgICAvKiogRGV0ZXJtaW5lIHdoZXRo
ZXIgYW4gb2JqZWN0IGlzIGFueSBtYXJrZXIsIG9yIGEgcGFydGljdWxhciBtYXJrZXIgLSBvbWl0
IHRoZQogICAgICogMm5kIGFyZ3VtZW50IHRvIGRldGVjdCBhbnkgbWFya2VyCiAgICAgKi8KICAg
IGZsdWlkLmlzTWFya2VyID0gZnVuY3Rpb24gKHRvdGVzdCwgdHlwZSkgewogICAgICAgIGlmICgh
dG90ZXN0IHx8IHR5cGVvZiAodG90ZXN0KSAhPT0gJ29iamVjdCcgfHwgdG90ZXN0LnR5cGUgIT09
ICJmbHVpZC5tYXJrZXIiKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg
ICAgICAgaWYgKCF0eXBlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAg
ICAgICByZXR1cm4gdG90ZXN0ID09PSB0eXBlOwogICAgfTsKICAgCiAgICAvKiogQ29weSBhIHNv
dXJjZSAibW9kZWwiIG9udG8gYSB0YXJnZXQgKiovCiAgICBmbHVpZC5tb2RlbC5jb3B5TW9kZWwg
PSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgICBmbHVpZC5jbGVhcih0YXJnZXQp
OwogICAgICAgICQuZXh0ZW5kKHRydWUsIHRhcmdldCwgc291cmNlKTsKICAgIH07CiAgICAKICAg
IC8qKiBQYXJzZSBhbiBFTCBleHByZXNzaW9uIHNlcGFyYXRlZCBieSBwZXJpb2RzICguKSBpbnRv
IGl0cyBjb21wb25lbnQgc2VnbWVudHMuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gRUwgVGhlIEVM
IGV4cHJlc3Npb24gdG8gYmUgc3BsaXQKICAgICAqIEByZXR1cm4ge0FycmF5IG9mIFN0cmluZ30g
dGhlIGNvbXBvbmVudCBwYXRoIGV4cHJlc3Npb25zLgogICAgICogVE9ETzogVGhpcyBuZWVkcyB0
byBiZSB1cGdyYWRlZCB0byBoYW5kbGUgKHRoZSBzYW1lKSBlc2NhcGluZyBydWxlcyAoYXMgUlNG
KSwgc28gdGhhdAogICAgICogcGF0aCBzZWdtZW50cyBjb250YWluaW5nIHBlcmlvZHMgYW5kIGJh
Y2tzbGFzaGVzIGV0Yy4gY2FuIGJlIHByb2Nlc3NlZCwgYW5kIGJlIGhhcm1vbmlzZWQKICAgICAq
IHdpdGggdGhlIG1vcmUgY29tcGxleCBpbXBsZW1lbnRhdGlvbnMgaW4gZmx1aWQucGF0aFV0aWwo
ZGF0YSBiaW5kaW5nKS4KICAgICAqLwogICAgZmx1aWQubW9kZWwucGFyc2VFTCA9IGZ1bmN0aW9u
IChFTCkgewogICAgICAgIHJldHVybiBFTCA9PT0gIiIgPyBbXSA6IFN0cmluZyhFTCkuc3BsaXQo
Jy4nKTsKICAgIH07CiAgICAKICAgIC8qKiBDb21wb3NlIGFuIEVMIGV4cHJlc3Npb24gZnJvbSB0
d28gc2VwYXJhdGUgRUwgZXhwcmVzc2lvbnMuIFRoZSByZXR1cm5lZCAKICAgICAqIGV4cHJlc3Np
b24gd2lsbCBiZSB0aGUgb25lIHRoYXQgd2lsbCBuYXZpZ2F0ZSB0aGUgZmlyc3QgZXhwcmVzc2lv
biwgYW5kIHRoZW4KICAgICAqIHRoZSBzZWNvbmQsIGZyb20gdGhlIHZhbHVlIHJlYWNoZWQgYnkg
dGhlIGZpcnN0LiBFaXRoZXIgcHJlZml4IG9yIHN1ZmZpeCBtYXkgYmUKICAgICAqIHRoZSBlbXB0
eSBzdHJpbmcgKiovCiAgICAKICAgIGZsdWlkLm1vZGVsLmNvbXBvc2VQYXRoID0gZnVuY3Rpb24g
KHByZWZpeCwgc3VmZml4KSB7CiAgICAgICAgcmV0dXJuIHByZWZpeCA9PT0gIiIgPyBzdWZmaXgg
OiAoc3VmZml4ID09PSAiIiA/IHByZWZpeCA6IHByZWZpeCArICIuIiArIHN1ZmZpeCk7CiAgICB9
OwogICAgCiAgICAvKiogQ29tcG9zZSBhbnkgbnVtYmVyIG9mIHBhdGggc2VnbWVudHMsIG5vbmUg
b2Ygd2hpY2ggbWF5IGJlIGVtcHR5ICoqLwogICAgZmx1aWQubW9kZWwuY29tcG9zZVNlZ21lbnRz
ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAkLm1ha2VBcnJheShhcmd1bWVudHMpLmpv
aW4oIi4iKTsKICAgIH07CiAgICAKICAgIC8qKiBIZWxwZnVsIGFsaWFzIGZvciBvbGQtc3R5bGUg
QVBJICoqLwogICAgZmx1aWQucGF0aCA9IGZsdWlkLm1vZGVsLmNvbXBvc2VTZWdtZW50czsKICAg
IGZsdWlkLmNvbXBvc2VQYXRoID0gZmx1aWQubW9kZWwuY29tcG9zZVBhdGg7CgogICAgLyoqIFN0
YW5kYXJkIHN0cmF0ZWdpZXMgZm9yIHJlc29sdmluZyBwYXRoIHNlZ21lbnRzICoqLwogICAgZmx1
aWQubW9kZWwuZW52aXJvbm1lbnRTdHJhdGVneSA9IGZ1bmN0aW9uIChpbml0RW52aXJvbm1lbnQp
IHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgICAgICB2YXIgZW52aXJvbm1lbnQgPSBpbml0RW52aXJvbm1lbnQ7CiAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKHJvb3QsIHNlZ21lbnQsIGluZGV4KSB7CiAgICAgICAgICAg
ICAgICAgICAgdmFyIHRvZ287CiAgICAgICAgICAgICAgICAgICAgaWYgKGVudmlyb25tZW50ICYm
IGVudmlyb25tZW50W3NlZ21lbnRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ28gPSBl
bnZpcm9ubWVudFtzZWdtZW50XTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgZW52aXJvbm1lbnQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2dv
OyAKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfTsKCiAg
ICBmbHVpZC5tb2RlbC5kZWZhdWx0Q3JlYXRvclN0cmF0ZWd5ID0gZnVuY3Rpb24gKHJvb3QsIHNl
Z21lbnQpIHsKICAgICAgICBpZiAocm9vdFtzZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7CiAgICAg
ICAgICAgIHJvb3Rbc2VnbWVudF0gPSB7fTsKICAgICAgICAgICAgcmV0dXJuIHJvb3Rbc2VnbWVu
dF07CiAgICAgICAgfQogICAgfTsKICAgIAogICAgZmx1aWQubW9kZWwuZGVmYXVsdEZldGNoU3Ry
YXRlZ3kgPSBmdW5jdGlvbiAocm9vdCwgc2VnbWVudCkgewogICAgICAgIHJldHVybiBzZWdtZW50
ID09PSAiIiA/IHJvb3QgOiByb290W3NlZ21lbnRdOwogICAgfTsKICAgICAgICAKICAgIGZsdWlk
Lm1vZGVsLmZ1bmNSZXNvbHZlclN0cmF0ZWd5ID0gZnVuY3Rpb24gKHJvb3QsIHNlZ21lbnQpIHsK
ICAgICAgICBpZiAocm9vdC5yZXNvbHZlUGF0aFNlZ21lbnQpIHsKICAgICAgICAgICAgcmV0dXJu
IHJvb3QucmVzb2x2ZVBhdGhTZWdtZW50KHNlZ21lbnQpOwogICAgICAgIH0KICAgIH07CiAgICAK
ICAgIC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5tb2RlbC5hcHBs
eVN0cmF0ZWd5ID0gZnVuY3Rpb24gKHN0cmF0ZWd5LCByb290LCBzZWdtZW50LCBpbmRleCkgewog
ICAgICAgIGlmICh0eXBlb2YgKHN0cmF0ZWd5KSA9PT0gImZ1bmN0aW9uIikgeyAKICAgICAgICAg
ICAgcmV0dXJuIHN0cmF0ZWd5KHJvb3QsIHNlZ21lbnQsIGluZGV4KTsKICAgICAgICB9IGVsc2Ug
aWYgKHN0cmF0ZWd5ICYmIHN0cmF0ZWd5Lm5leHQpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmF0
ZWd5Lm5leHQocm9vdCwgc2VnbWVudCwgaW5kZXgpOwogICAgICAgIH0KICAgIH07CiAgICAKICAg
IC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5tb2RlbC5pbml0U3Ry
YXRlZ3kgPSBmdW5jdGlvbiAoYmFzZVN0cmF0ZWd5LCBpbmRleCwgb2xkU3RyYXRlZ2llcykgewog
ICAgICAgIHJldHVybiBiYXNlU3RyYXRlZ3kuaW5pdCA/IGJhc2VTdHJhdGVneS5pbml0KG9sZFN0
cmF0ZWdpZXMgPyBvbGRTdHJhdGVnaWVzW2luZGV4XSA6IHVuZGVmaW5lZCkgOiBiYXNlU3RyYXRl
Z3k7CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAg
Zmx1aWQubW9kZWwubWFrZVRydW5kbGVyID0gZnVuY3Rpb24gKHJvb3QsIGNvbmZpZywgb2xkU3Ry
YXRlZ2llcykgewogICAgICAgIHZhciB0aGF0ID0gewogICAgICAgICAgICByb290OiByb290LAog
ICAgICAgICAgICBzdHJhdGVnaWVzOiBmbHVpZC5pc0FycmF5YWJsZShjb25maWcpID8gY29uZmln
IDogCiAgICAgICAgICAgICAgICBmbHVpZC50cmFuc2Zvcm0oY29uZmlnLnN0cmF0ZWdpZXMsIGZ1
bmN0aW9uIChzdHJhdGVneSwgaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmx1
aWQubW9kZWwuaW5pdFN0cmF0ZWd5KHN0cmF0ZWd5LCBpbmRleCwgb2xkU3RyYXRlZ2llcyk7IAog
ICAgICAgICAgICAgICAgfSkKICAgICAgICB9OwogICAgICAgIHRoYXQudHJ1bmRsZSA9IGZ1bmN0
aW9uIChFTCwgdW5jZXNzKSB7CiAgICAgICAgICAgIHVuY2VzcyA9IHVuY2VzcyB8fCAwOwogICAg
ICAgICAgICB2YXIgbmV3VGhhdCA9IGZsdWlkLm1vZGVsLm1ha2VUcnVuZGxlcih0aGF0LnJvb3Qs
IGNvbmZpZywgdGhhdC5zdHJhdGVnaWVzKTsKICAgICAgICAgICAgbmV3VGhhdC5zZWdzID0gZmx1
aWQubW9kZWwucGFyc2VFTChFTCk7CiAgICAgICAgICAgIG5ld1RoYXQuaW5kZXggPSAwOwogICAg
ICAgICAgICBuZXdUaGF0LnN0ZXAobmV3VGhhdC5zZWdzLmxlbmd0aCAtIHVuY2Vzcyk7CiAgICAg
ICAgICAgIHJldHVybiBuZXdUaGF0OwogICAgICAgIH07CiAgICAgICAgdGhhdC5uZXh0ID0gZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICBpZiAoIXRoYXQucm9vdCkgewogICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBhY2NlcHRlZDsKICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0LnN0cmF0ZWdpZXMubGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGZsdWlkLm1vZGVsLmFwcGx5U3RyYXRlZ3kodGhhdC5z
dHJhdGVnaWVzW2ldLCB0aGF0LnJvb3QsIHRoYXQuc2Vnc1t0aGF0LmluZGV4XSwgdGhhdC5pbmRl
eCk7CiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWQgPT09IHVuZGVmaW5lZCkgewogICAgICAg
ICAgICAgICAgICAgIGFjY2VwdGVkID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaWYgKGFjY2VwdGVkID09PSBmbHVpZC5OT19WQUxVRSkgewogICAg
ICAgICAgICAgICAgYWNjZXB0ZWQgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgdGhhdC5yb290ID0gYWNjZXB0ZWQ7CiAgICAgICAgICAgICsrdGhhdC5pbmRleDsKICAgICAg
ICB9OwogICAgICAgIHRoYXQuc3RlcCA9IGZ1bmN0aW9uIChsaW1pdCkgewogICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKICAgICAgICAgICAgICAgIHRoYXQubmV4
dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoYXQubGFzdCA9IHRoYXQuc2Vnc1t0aGF0
LmluZGV4XTsKICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGF0OwogICAgfTsKCiAgICBmbHVp
ZC5tb2RlbC5kZWZhdWx0U2V0Q29uZmlnID0gewogICAgICAgIHN0cmF0ZWdpZXM6IFtmbHVpZC5t
b2RlbC5mdW5jUmVzb2x2ZXJTdHJhdGVneSwgZmx1aWQubW9kZWwuZGVmYXVsdEZldGNoU3RyYXRl
Z3ksIGZsdWlkLm1vZGVsLmRlZmF1bHRDcmVhdG9yU3RyYXRlZ3ldCiAgICB9OwogICAgCiAgICAv
LyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgLy8gY29yZSB0cnVuZGxpbmcgcmVj
dXJzaW9uIHBvaW50CiAgICBmbHVpZC5tb2RlbC50cnVuZGxlSW1wbCA9IGZ1bmN0aW9uICh0cnVu
ZGxlciwgRUwsIGNvbmZpZywgdW5jZXNzKSB7CiAgICAgICAgaWYgKHR5cGVvZiAoRUwpID09PSAi
c3RyaW5nIikgewogICAgICAgICAgICB0cnVuZGxlciA9IHRydW5kbGVyLnRydW5kbGUoRUwsIHVu
Y2Vzcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGtleSA9IEVMLnR5cGUgfHwg
ImRlZmF1bHQiOwogICAgICAgICAgICB2YXIgcmVzb2x2ZXIgPSBjb25maWcucmVzb2x2ZXJzW2tl
eV07CiAgICAgICAgICAgIGlmICghcmVzb2x2ZXIpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmZh
aWwoIlVuYWJsZSB0byBmaW5kIHJlc29sdmVyIG9mIHR5cGUgIiArIGtleSk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgdHJ1bmRsZXIgPSByZXNvbHZlcihFTCwgdHJ1bmRsZXIpIHx8IHt9Owog
ICAgICAgICAgICBpZiAoRUwucGF0aCAmJiB0cnVuZGxlci50cnVuZGxlICYmIHRydW5kbGVyLnJv
b3QgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdHJ1bmRsZXIgPSBmbHVpZC5tb2Rl
bC50cnVuZGxlSW1wbCh0cnVuZGxlciwgRUwucGF0aCwgY29uZmlnLCB1bmNlc3MpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVuZGxlcjsgIAogICAgfTsKICAgIAog
ICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAgIC8vIGVudHJ5IHBvaW50IGZv
ciBpbml0aWFsbHkgdW5iYXNlZCB0cnVuZGxpbmcKICAgIGZsdWlkLm1vZGVsLnRydW5kbGUgPSBm
dW5jdGlvbiAocm9vdCwgRUwsIGNvbmZpZywgdW5jZXNzKSB7CiAgICAgICAgRUwgPSBFTCB8fCAi
IjsKICAgICAgICBjb25maWcgPSBjb25maWcgfHwgZmx1aWQubW9kZWwuZGVmYXVsdEdldENvbmZp
ZzsKICAgICAgICB2YXIgdHJ1bmRsZXIgPSBmbHVpZC5tb2RlbC5tYWtlVHJ1bmRsZXIocm9vdCwg
Y29uZmlnKTsKICAgICAgICByZXR1cm4gZmx1aWQubW9kZWwudHJ1bmRsZUltcGwodHJ1bmRsZXIs
IEVMLCBjb25maWcsIHVuY2Vzcyk7CiAgICB9OwogICAgCiAgICBmbHVpZC5tb2RlbC5nZXRQZW51
bHRpbWF0ZSA9IGZ1bmN0aW9uIChyb290LCBFTCwgY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIGZs
dWlkLm1vZGVsLnRydW5kbGUocm9vdCwgRUwsIGNvbmZpZywgMSk7CiAgICB9OwogICAgCiAgICBm
bHVpZC5zZXQgPSBmdW5jdGlvbiAocm9vdCwgRUwsIG5ld1ZhbHVlLCBjb25maWcpIHsKICAgICAg
ICBjb25maWcgPSBjb25maWcgfHwgZmx1aWQubW9kZWwuZGVmYXVsdFNldENvbmZpZzsKICAgICAg
ICB2YXIgdHJ1bmRsZXIgPSBmbHVpZC5tb2RlbC5nZXRQZW51bHRpbWF0ZShyb290LCBFTCwgY29u
ZmlnKTsKICAgICAgICB0cnVuZGxlci5yb290W3RydW5kbGVyLmxhc3RdID0gbmV3VmFsdWU7CiAg
ICB9OwogICAgCiAgICBmbHVpZC5tb2RlbC5kZWZhdWx0R2V0Q29uZmlnID0gewogICAgICAgIHN0
cmF0ZWdpZXM6IFtmbHVpZC5tb2RlbC5mdW5jUmVzb2x2ZXJTdHJhdGVneSwgZmx1aWQubW9kZWwu
ZGVmYXVsdEZldGNoU3RyYXRlZ3ldCiAgICB9OwogICAgCiAgICAvKiogRXZhbHVhdGVzIGFuIEVM
IGV4cHJlc3Npb24gYnkgZmV0Y2hpbmcgYSBkb3Qtc2VwYXJhdGVkIGxpc3Qgb2YgbWVtYmVycwog
ICAgICogcmVjdXJzaXZlbHkgZnJvbSBhIHByb3ZpZGVkIHJvb3QuCiAgICAgKiBAcGFyYW0gcm9v
dCBUaGUgcm9vdCBkYXRhIHN0cnVjdHVyZSBpbiB3aGljaCB0aGUgRUwgZXhwcmVzc2lvbiBpcyB0
byBiZSBldmFsdWF0ZWQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBFTCBUaGUgRUwgZXhwcmVzc2lv
biB0byBiZSBldmFsdWF0ZWQKICAgICAqIEBwYXJhbSBlbnZpcm9ubWVudCBBbiBvcHRpb25hbCAi
ZW52aXJvbm1lbnQiIHdoaWNoLCBpZiBpdCBjb250YWlucyBhbnkgbWVtYmVycwogICAgICogYXQg
dG9wIGxldmVsLCB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgcm9vdCBkYXRhIHN0cnVjdHVy
ZS4KICAgICAqIEByZXR1cm4gVGhlIGZldGNoZWQgZGF0YSB2YWx1ZS4KICAgICAqLwogICAgCiAg
ICBmbHVpZC5nZXQgPSBmdW5jdGlvbiAocm9vdCwgRUwsIGNvbmZpZykgewogICAgICAgIHJldHVy
biBmbHVpZC5tb2RlbC50cnVuZGxlKHJvb3QsIEVMLCBjb25maWcpLnJvb3Q7CiAgICB9OwoKICAg
IC8vIFRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aWxsIGJlIG1haW50YWluZWQgZm9yIGEg
bnVtYmVyIG9mIHJlbGVhc2VzLCBwcm9iYWJseSB1bnRpbCBGbHVpZCAyLjAKICAgIGZsdWlkLm1v
ZGVsLnNldEJlYW5WYWx1ZSA9IGZsdWlkLnNldDsKICAgIGZsdWlkLm1vZGVsLmdldEJlYW5WYWx1
ZSA9IGZsdWlkLmdldDsKICAgIAogICAgZmx1aWQuZ2V0R2xvYmFsVmFsdWUgPSBmdW5jdGlvbiAo
cGF0aCwgZW52KSB7CiAgICAgICAgaWYgKHBhdGgpIHsKICAgICAgICAgICAgZW52ID0gZW52IHx8
IGZsdWlkLmVudmlyb25tZW50OwogICAgICAgICAgICB2YXIgZW52RmV0Y2hlciA9IGZsdWlkLm1v
ZGVsLmVudmlyb25tZW50U3RyYXRlZ3koZW52KTsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmdl
dChnbG9iYWxPYmplY3QsIHBhdGgsIHtzdHJhdGVnaWVzOiBbZW52RmV0Y2hlcl0uY29uY2F0KGZs
dWlkLm1vZGVsLmRlZmF1bHRHZXRDb25maWcuc3RyYXRlZ2llcyl9KTsKICAgICAgICB9CiAgICB9
OwogICAgCiAgICAvKioKICAgICAqIEFsbG93cyBmb3IgdGhlIGNhbGxpbmcgb2YgYSBmdW5jdGlv
biBmcm9tIGFuIEVMIGV4cHJlc3Npb24gImZ1bmN0aW9uUGF0aCIsIHdpdGggdGhlIGFyZ3VtZW50
cyAiYXJncyIsIHNjb3BlZCB0byBhbiBmcmFtZXdvcmsgdmVyc2lvbiAiZW52aXJvbm1lbnQiLgog
ICAgICogQHBhcmFtIHtPYmplY3R9IGZ1bmN0aW9uUGF0aCAtIEFuIEVMIGV4cHJlc3Npb24KICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIC0gQW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIGFw
cGxpZWQgdG8gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpZWQgaW4gZnVuY3Rpb25QYXRoCiAgICAgKiBA
cGFyYW0ge09iamVjdH0gZW52aXJvbm1lbnQgLSAob3B0aW9uYWwpIFRoZSBvYmplY3QgdG8gc2Nv
cGUgdGhlIGZ1bmN0aW9uUGF0aCB0byAgKHR5cGljYWxseSB0aGUgZnJhbWV3b3JrIHJvb3QgZm9y
IHZlcnNpb24gY29udHJvbCkKICAgICAqLwogICAgZmx1aWQuaW52b2tlR2xvYmFsRnVuY3Rpb24g
PSBmdW5jdGlvbiAoZnVuY3Rpb25QYXRoLCBhcmdzLCBlbnZpcm9ubWVudCkgewogICAgICAgIHZh
ciBmdW5jID0gZmx1aWQuZ2V0R2xvYmFsVmFsdWUoZnVuY3Rpb25QYXRoLCBlbnZpcm9ubWVudCk7
CiAgICAgICAgaWYgKCFmdW5jKSB7CiAgICAgICAgICAgIGZsdWlkLmZhaWwoIkVycm9yIGludm9r
aW5nIGdsb2JhbCBmdW5jdGlvbjogIiArIGZ1bmN0aW9uUGF0aCArICIgY291bGQgbm90IGJlIGxv
Y2F0ZWQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShu
dWxsLCBhcmdzKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICAvKiogUmVnaXN0ZXJzIGEgbmV3
IGdsb2JhbCBmdW5jdGlvbiBhdCBhIGdpdmVuIHBhdGggKGN1cnJlbnRseSBhc3N1bWVzIHRoYXQK
ICAgICAqIGl0IGxpZXMgd2l0aGluIHRoZSBmbHVpZCBuYW1lc3BhY2UpCiAgICAgKi8KICAgIAog
ICAgZmx1aWQucmVnaXN0ZXJHbG9iYWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jdGlvblBhdGgs
IGZ1bmMsIGVudikgewogICAgICAgIGVudiA9IGVudiB8fCBmbHVpZC5lbnZpcm9ubWVudDsKICAg
ICAgICB2YXIgZW52RmV0Y2hlciA9IGZsdWlkLm1vZGVsLmVudmlyb25tZW50U3RyYXRlZ3koZW52
KTsKICAgICAgICBmbHVpZC5zZXQoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblBhdGgsIGZ1bmMsIHtz
dHJhdGVnaWVzOiBbZW52RmV0Y2hlcl0uY29uY2F0KGZsdWlkLm1vZGVsLmRlZmF1bHRTZXRDb25m
aWcuc3RyYXRlZ2llcyl9KTsKICAgIH07CiAgICAKICAgIGZsdWlkLnNldEdsb2JhbFZhbHVlID0g
Zmx1aWQucmVnaXN0ZXJHbG9iYWxGdW5jdGlvbjsKICAgIAogICAgLyoqIEVuc3VyZXMgdGhhdCBh
biBlbnRyeSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBleGlzdHMgKiovCiAgICBmbHVpZC5yZWdp
c3Rlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYWltc3BhY2UsIGVudikgewogICAgICAgIGVudiA9
IGVudiB8fCBmbHVpZC5lbnZpcm9ubWVudDsKICAgICAgICB2YXIgZXhpc3RpbmcgPSBmbHVpZC5n
ZXRHbG9iYWxWYWx1ZShuYWltc3BhY2UsIGVudik7CiAgICAgICAgaWYgKCFleGlzdGluZykgewog
ICAgICAgICAgICBleGlzdGluZyA9IHt9OwogICAgICAgICAgICBmbHVpZC5zZXRHbG9iYWxWYWx1
ZShuYWltc3BhY2UsIGV4aXN0aW5nLCBlbnYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZXhp
c3Rpbmc7CiAgICB9OwogICAgCiAgICAvLyBzdHVicyBmb3IgdHdvIGZ1bmN0aW9ucyBpbiBGbHVp
ZERlYnVnZ2luZy5qcwogICAgZmx1aWQuZHVtcEVsID0gZmx1aWQuaWRlbnRpdHk7CiAgICBmbHVp
ZC5yZW5kZXJUaW1lc3RhbXAgPSBmbHVpZC5pZGVudGl0eTsKICAgIAogICAgCiAgICAvKioqIFRo
ZSBNb2RlbCBFdmVudHMgc3lzdGVtLiAqKiovCiAgICAKICAgIGZsdWlkLnJlZ2lzdGVyTmFtZXNw
YWNlKCJmbHVpZC5ldmVudCIpOwogICAgCiAgICBmbHVpZC5nZW5lcmF0ZVVuaXF1ZVByZWZpeCA9
IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAq
IDFlMTIpKS50b1N0cmluZygzNikgKyAiLSI7CiAgICB9OwogICAgCiAgICB2YXIgZmx1aWRfcHJl
Zml4ID0gZmx1aWQuZ2VuZXJhdGVVbmlxdWVQcmVmaXgoKTsgCiAgICAKICAgIHZhciBmbHVpZF9n
dWlkID0gMTsKICAgIAogICAgLyoqIEFsbG9jYXRlIGFuIHN0cmluZyB2YWx1ZSB0aGF0IHdpbGwg
YmUgdmVyeSBsaWtlbHkgdW5pcXVlIHdpdGhpbiB0aGlzIChicm93c2VyKSBwcm9jZXNzICoqLwog
ICAgCiAgICBmbHVpZC5hbGxvY2F0ZUd1aWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJu
IGZsdWlkX3ByZWZpeCArIChmbHVpZF9ndWlkKyspOwogICAgfTsKICAgIAogICAgZmx1aWQuZXZl
bnQuaWRlbnRpZnlMaXN0ZW5lciA9IGZ1bmN0aW9uIChsaXN0ZW5lcikgewogICAgICAgIGlmICh0
eXBlb2YgKGxpc3RlbmVyKSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyOyAKICAgICAgICB9CiAgICAgICAgaWYgKCFsaXN0ZW5lci4kJGd1aWQpIHsKICAgICAgICAg
ICAgbGlzdGVuZXIuJCRndWlkID0gZmx1aWQuYWxsb2NhdGVHdWlkKCk7CiAgICAgICAgfQogICAg
ICAgIHJldHVybiBsaXN0ZW5lci4kJGd1aWQ7CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRl
ZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuZXZlbnQubWFwUHJpb3JpdHkgPSBmdW5jdGlv
biAocHJpb3JpdHksIGNvdW50KSB7CiAgICAgICAgcmV0dXJuIChwcmlvcml0eSA9PT0gbnVsbCB8
fCBwcmlvcml0eSA9PT0gdW5kZWZpbmVkID8gLWNvdW50IDogCiAgICAgICAgICAgKHByaW9yaXR5
ID09PSAibGFzdCIgPyAtTnVtYmVyLk1BWF9WQUxVRSA6CiAgICAgICAgICAgICAgKHByaW9yaXR5
ID09PSAiZmlyc3QiID8gTnVtYmVyLk1BWF9WQUxVRSA6IHByaW9yaXR5KSkpOwogICAgfTsKICAg
IAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmV2ZW50Lmxp
c3RlbmVyQ29tcGFyYXRvciA9IGZ1bmN0aW9uIChyZWNBLCByZWNCKSB7CiAgICAgICAgcmV0dXJu
IHJlY0IucHJpb3JpdHkgLSByZWNBLnByaW9yaXR5OwogICAgfTsKICAgIAogICAgLy8gdW5zdXBw
b3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmV2ZW50LnNvcnRMaXN0ZW5lcnMgPSBm
dW5jdGlvbiAobGlzdGVuZXJzKSB7CiAgICAgICAgdmFyIHRvZ28gPSBbXTsKICAgICAgICBmbHVp
ZC5lYWNoKGxpc3RlbmVycywgZnVuY3Rpb24gKGxpc3RlbmVyKSB7CiAgICAgICAgICAgIHRvZ28u
cHVzaChsaXN0ZW5lcik7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRvZ28uc29ydChmbHVp
ZC5ldmVudC5saXN0ZW5lckNvbXBhcmF0b3IpOwogICAgfTsKICAgIC8qKiBDb25zdHJ1Y3QgYW4g
ImV2ZW50IGZpcmVyIiBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgYW5kIGRl
cmVnaXN0ZXIgCiAgICAgKiBsaXN0ZW5lcnMsIHRvIHdoaWNoICJldmVudHMiIGNhbiBiZSBmaXJl
ZC4gVGhlc2UgZXZlbnRzIGNvbnNpc3Qgb2YgYW4gYXJiaXRyYXJ5CiAgICAgKiBmdW5jdGlvbiBz
aWduYXR1cmUuIEdlbmVyYWwgZG9jdW1lbnRhdGlvbiBvbiB0aGUgRmx1aWQgZXZlbnRzIHN5c3Rl
bSBpcyBhdAogICAgICogaHR0cDovL3dpa2kuZmx1aWRwcm9qZWN0Lm9yZy9kaXNwbGF5L2ZsdWlk
L1RoZStGbHVpZCtFdmVudCtTeXN0ZW0gLgogICAgICogQHBhcmFtIHtCb29sZWFufSB1bmljYXN0
IElmIDxjb2RlPnRydWU8L2NvZGU+LCB0aGlzIGlzIGEgInVuaWNhc3QiIGV2ZW50IHdoaWNoIG1h
eSBvbmx5IGFjY2VwdAogICAgICogYSBzaW5nbGUgbGlzdGVuZXIuCiAgICAgKiBAcGFyYW0ge0Jv
b2xlYW59IHByZXZlbnRhYmxlIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZSByZXR1cm4gdmFsdWUg
b2YgZWFjaCBoYW5kbGVyIHdpbGwgCiAgICAgKiBiZSBjaGVja2VkIGZvciA8Y29kZT5mYWxzZTwv
Y29kZT4gaW4gd2hpY2ggY2FzZSBmdXJ0aGVyIGxpc3RlbmVycyB3aWxsIGJlIHNob3J0Y2lyY3Vp
dGVkLCBhbmQgdGhpcwogICAgICogd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGZpcmUoKQog
ICAgICovCiAgICAKICAgIGZsdWlkLmV2ZW50LmdldEV2ZW50RmlyZXIgPSBmdW5jdGlvbiAodW5p
Y2FzdCwgcHJldmVudGFibGUpIHsKICAgICAgICB2YXIgbGlzdGVuZXJzID0ge307CiAgICAgICAg
dmFyIHNvcnRlZExpc3RlbmVycyA9IFtdOwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGZpcmVU
b0xpc3RlbmVycyhsaXN0ZW5lcnMsIGFyZ3MsIHdyYXBwZXIpIHsKICAgICAgICAgICAgZm9yICh2
YXIgaSBpbiBsaXN0ZW5lcnMpIHsKICAgICAgICAgICAgICAgIHZhciBsaXNyZWMgPSBsaXN0ZW5l
cnNbaV07CiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXNyZWMubGlzdGVuZXI7CiAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIChsaXN0ZW5lcikgPT09ICJzdHJpbmciKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRnVuYyA9IGZsdWlkLmdldEdsb2JhbFZhbHVlKGxp
c3RlbmVyKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWxpc3RlbmVyRnVuYykgewogICAgICAg
ICAgICAgICAgICAgICAgICBmbHVpZC5mYWlsKCJVbmFibGUgdG8gbG9vayB1cCBuYW1lICIgKyBs
aXN0ZW5lciArICIgYXMgYSBnbG9iYWwgZnVuY3Rpb24iKTsgCiAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIgPSBsaXNyZWMubGlzdGVu
ZXIgPSBsaXN0ZW5lckZ1bmM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgaWYgKGxpc3JlYy5wcmVkaWNhdGUgJiYgIWxpc3JlYy5wcmVkaWNh
dGUobGlzdGVuZXIsIGFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBmbHVpZC50cnlDYXRjaChm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9ICh3cmFwcGVyID8gd3Jh
cHBlcihsaXN0ZW5lcikgOiBsaXN0ZW5lcikuYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZXZlbnRhYmxlICYmIHJldCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pY2FzdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChl
KSB7IC8vIGpzbGludDpvayAtIGZ1bmN0aW9uIHdpdGhpbiBhIGxvb3AsIG9ubHkgaW52b2tlZCBz
eW5jaHJvbm91c2x5CiAgICAgICAgICAgICAgICAgICAgZmx1aWQubG9nKCJGaXJlRXZlbnQgcmVj
ZWl2ZWQgZXhjZXB0aW9uICIgKyBlLm1lc3NhZ2UgKyAiIGUgIiArIGUgKyAiIGZpcmluZyB0byBs
aXN0ZW5lciAiICsgaSk7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgKGUpOyAgICAgICAKICAg
ICAgICAgICAgICAgIH0pOyAvLyBqc2xpbnQ6b2sgLSBmdW5jdGlvbiB3aXRoaW4gbG9vcAogICAg
ICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYWRkTGlzdGVuZXI6IGZ1bmN0
aW9uIChsaXN0ZW5lciwgbmFtZXNwYWNlLCBwcmVkaWNhdGUsIHByaW9yaXR5KSB7CiAgICAgICAg
ICAgICAgICBpZiAoIWxpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHVuaWNhc3QpIHsKICAgICAgICAgICAg
ICAgICAgICBuYW1lc3BhY2UgPSAidW5pY2FzdCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBpZiAoIW5hbWVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9
IGZsdWlkLmV2ZW50LmlkZW50aWZ5TGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGxpc3RlbmVyc1tuYW1lc3BhY2VdID0ge2xpc3RlbmVyOiBsaXN0
ZW5lciwgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHByaW9yaXR5OiAKICAgICAgICAgICAgICAgICAg
ICBmbHVpZC5ldmVudC5tYXBQcmlvcml0eShwcmlvcml0eSwgc29ydGVkTGlzdGVuZXJzLmxlbmd0
aCl9OwogICAgICAgICAgICAgICAgc29ydGVkTGlzdGVuZXJzID0gZmx1aWQuZXZlbnQuc29ydExp
c3RlbmVycyhsaXN0ZW5lcnMpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcmVtb3ZlTGlz
dGVuZXI6IGZ1bmN0aW9uIChsaXN0ZW5lcikgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAo
bGlzdGVuZXIpID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsaXN0
ZW5lcnNbbGlzdGVuZXJdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lci4kJGd1
aWQpIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgbGlzdGVuZXJzW2xpc3RlbmVyLiQkZ3Vp
ZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzb3J0ZWRMaXN0ZW5lcnMgPSBm
bHVpZC5ldmVudC5zb3J0TGlzdGVuZXJzKGxpc3RlbmVycyk7CiAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgIC8vIE5CIC0gdGhpcyBtZXRob2QgZXhpc3RzIGN1cnJlbnRseSBzb2xlbHkgZm9yIHRo
ZSBjb252ZW5pZW5jZSBvZiB0aGUgbmV3LAogICAgICAgICAgICAvLyB0cmFuc2FjdGlvbmFsIGNo
YW5nZUFwcGxpZXIuIEFzIGl0IGV4aXN0cyBpdCBpcyBoYXJkIHRvIGltYWdpbmUgdGhlIGZ1bmN0
aW9uCiAgICAgICAgICAgIC8vIGJlaW5nIGhlbHBmdWwgdG8gYW55IG90aGVyIGNsaWVudC4gV2Ug
bmVlZCB0byBnZXQgbW9yZSBleHBlcmllbmNlIG9uIHRoZSBraW5kcwogICAgICAgICAgICAvLyBv
ZiBsaXN0ZW5lcnMgdGhhdCBhcmUgdXNlZnVsLCBhbmQgdWx0aW1hdGVseSBmYWN0b3IgdGhpcyBt
ZXRob2QgYXdheS4KICAgICAgICAgICAgZmlyZVRvTGlzdGVuZXJzOiBmdW5jdGlvbiAobGlzdGVu
ZXJzLCBhcmdzLCB3cmFwcGVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmlyZVRvTGlzdGVu
ZXJzKGxpc3RlbmVycywgYXJncywgd3JhcHBlcik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAg
IGZpcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaXJlVG9MaXN0ZW5l
cnMoc29ydGVkTGlzdGVuZXJzLCBhcmd1bWVudHMpOwogICAgICAgICAgICB9CiAgICAgICAgfTsK
ICAgIH07CiAgICAKICAgIC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVp
ZC5ldmVudC5hZGRMaXN0ZW5lclRvRmlyZXIgPSBmdW5jdGlvbiAoZmlyZXIsIHZhbHVlLCBuYW1l
c3BhY2UpIHsKICAgICAgICBpZiAoZmx1aWQuaXNBcnJheWFibGUodmFsdWUpKSB7CiAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
ICAgIGZsdWlkLmV2ZW50LmFkZExpc3RlbmVyVG9GaXJlcihmaXJlciwgdmFsdWVbaV0sIG5hbWVz
cGFjZSk7IAogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9
PT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgKHZhbHVlKSA9PT0gInN0cmluZyIpIHsKICAgICAgICAg
ICAgZmlyZXIuYWRkTGlzdGVuZXIodmFsdWUsIG5hbWVzcGFjZSk7CiAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgZmly
ZXIuYWRkTGlzdGVuZXIodmFsdWUubGlzdGVuZXIsIG5hbWVzcGFjZSB8fCB2YWx1ZS5uYW1lc3Bh
Y2UsIHZhbHVlLnByZWRpY2F0ZSwgdmFsdWUucHJpb3JpdHkpOwogICAgICAgIH0KICAgIH07CiAg
ICAvKioKICAgICAqIEF0dGFjaGVzIHRoZSB1c2VyJ3MgbGlzdGVuZXJzIHRvIGEgc2V0IG9mIGV2
ZW50cy4KICAgICAqIAogICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50cyBhIGNvbGxlY3Rpb24g
b2YgbmFtZWQgZXZlbnQgZmlyZXJzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbGlzdGVuZXJzIG9w
dGlvbmFsIGxpc3RlbmVycyB0byBhZGQKICAgICAqLwogICAgZmx1aWQubWVyZ2VMaXN0ZW5lcnMg
PSBmdW5jdGlvbiAodGhhdCwgZXZlbnRzLCBsaXN0ZW5lcnMpIHsKICAgICAgICBmbHVpZC5lYWNo
KGxpc3RlbmVycywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgdmFyIGZpcmVy
LCBuYW1lc3BhY2U7CiAgICAgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAieyIpIHsKICAg
ICAgICAgICAgICAgIGlmICghZmx1aWQuZXhwYW5kT3B0aW9ucykgewogICAgICAgICAgICAgICAg
ICAgIGZsdWlkLmZhaWwoImZsdWlkLmV4cGFuZE9wdGlvbnMgY291bGQgbm90IGJlIGxvYWRlZCAt
IHBsZWFzZSBpbmNsdWRlIEZsdWlkSW9DLmpzIGluIG9yZGVyIHRvIG9wZXJhdGUgSW9DLWRyaXZl
biBldmVudCB3aXRoIGRlc2NyaXB0b3IgIiArIAogICAgICAgICAgICAgICAgICAgICAgICBrZXkp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmlyZXIgPSBmbHVpZC5leHBhbmRP
cHRpb25zKGtleSwgdGhhdCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2
YXIga2V5ZG90ID0ga2V5LmluZGV4T2YoIi4iKTsKICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICBpZiAoa2V5ZG90ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IGtl
eS5zdWJzdHJpbmcoa2V5ZG90ICsgMSk7CiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1
YnN0cmluZygwLCBrZXlkb3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYg
KCFldmVudHNba2V5XSkgewogICAgICAgICAgICAgICAgICAgIGZsdWlkLmZhaWwoIkxpc3RlbmVy
IHJlZ2lzdGVyZWQgZm9yIGV2ZW50ICIgKyBrZXkgKyAiIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGZv
ciB0aGlzIGNvbXBvbmVudCIpOwogICAgICAgICAgICAgICAgICAgIGV2ZW50c1trZXldID0gZmx1
aWQuZXZlbnQuZ2V0RXZlbnRGaXJlcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgZmlyZXIgPSBldmVudHNba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmbHVpZC5l
dmVudC5hZGRMaXN0ZW5lclRvRmlyZXIoZmlyZXIsIHZhbHVlLCBuYW1lc3BhY2UpOwogICAgICAg
IH0pOwogICAgfTsKICAgIAogICAgZnVuY3Rpb24gaW5pdEV2ZW50cyh0aGF0LCBldmVudHMsIHBh
c3MpIHsKICAgICAgICBmbHVpZC5lYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50U3BlYywgZXZl
bnRLZXkpIHsgCiAgICAgICAgICAgIHZhciBpc0lvQ0V2ZW50ID0gZXZlbnRTcGVjICYmICh0eXBl
b2YgKGV2ZW50U3BlYykgIT09ICJzdHJpbmciIHx8IGV2ZW50U3BlYy5jaGFyQXQoMCkgPT09ICJ7
Iik7CiAgICAgICAgICAgIHZhciBldmVudDsKICAgICAgICAgICAgaWYgKGlzSW9DRXZlbnQgJiYg
cGFzcyA9PT0gIklvQyIpIHsKICAgICAgICAgICAgICAgIGlmICghZmx1aWQuZXZlbnQucmVzb2x2
ZUV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgZmx1aWQuZmFpbCgiZmx1aWQuZXZlbnQucmVz
b2x2ZUV2ZW50IGNvdWxkIG5vdCBiZSBsb2FkZWQgLSBwbGVhc2UgaW5jbHVkZSBGbHVpZElvQy5q
cyBpbiBvcmRlciB0byBvcGVyYXRlIElvQy1kcml2ZW4gZXZlbnQgd2l0aCBkZXNjcmlwdG9yICIs
IAogICAgICAgICAgICAgICAgICAgICAgICBldmVudFNwZWMpOwogICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICBldmVudCA9IGZsdWlkLmV2ZW50LnJlc29sdmVFdmVu
dCh0aGF0LCBldmVudEtleSwgZXZlbnRTcGVjKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfSBlbHNlIGlmIChwYXNzID09PSAiZmxhdCIpIHsKICAgICAgICAgICAgICAgIGV2ZW50ID0g
Zmx1aWQuZXZlbnQuZ2V0RXZlbnRGaXJlcihldmVudFNwZWMgPT09ICJ1bmljYXN0IiwgZXZlbnRT
cGVjID09PSAicHJldmVudGFibGUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZXZl
bnQpIHsKICAgICAgICAgICAgICAgIHRoYXQuZXZlbnRzW2V2ZW50S2V5XSA9IGV2ZW50OwogICAg
ICAgICAgICB9IAogICAgICAgIH0pOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNldHMgdXAg
YSBjb21wb25lbnQncyBkZWNsYXJlZCBldmVudHMuCiAgICAgKiBFdmVudHMgYXJlIHNwZWNpZmll
ZCBpbiB0aGUgb3B0aW9ucyBvYmplY3QgYnkgbmFtZS4gVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVu
dCB0eXBlcyBvZiBldmVudHMgdGhhdCBjYW4gYmUKICAgICAqIHNwZWNpZmllZDogCiAgICAgKiAx
LiBhbiBvcmRpbmFyeSBtdWx0aWNhc3QgZXZlbnQsIHNwZWNpZmllZCBieSAibnVsbCIuIAogICAg
ICogMi4gYSB1bmljYXN0IGV2ZW50LCB3aGljaCBhbGxvd3Mgb25seSBvbmUgbGlzdGVuZXIgdG8g
YmUgcmVnaXN0ZXJlZAogICAgICogMy4gYSBwcmV2ZW50YWJsZSBldmVudAogICAgICogCiAgICAg
KiBAcGFyYW0ge09iamVjdH0gdGhhdCB0aGUgY29tcG9uZW50CiAgICAgKiBAcGFyYW0ge09iamVj
dH0gb3B0aW9ucyB0aGUgY29tcG9uZW50J3Mgb3B0aW9ucyBzdHJ1Y3R1cmUsIGNvbnRhaW5pbmcg
dGhlIGRlY2xhcmVkIGV2ZW50IG5hbWVzIGFuZCB0eXBlcwogICAgICovCiAgICBmbHVpZC5pbnN0
YW50aWF0ZUZpcmVycyA9IGZ1bmN0aW9uICh0aGF0LCBvcHRpb25zKSB7CiAgICAgICAgdGhhdC5l
dmVudHMgPSB7fTsKICAgICAgICAvLyBUT0RPOiBtYW51YWwgMi1waGFzZSBpbnN0YW50aWF0aW9u
IHNpbmNlIHdlIGhhdmUgbm8gR0lOR0VSIFdPUkxECiAgICAgICAgaW5pdEV2ZW50cyh0aGF0LCBv
cHRpb25zLmV2ZW50cywgImZsYXQiKTsgCiAgICAgICAgaW5pdEV2ZW50cyh0aGF0LCBvcHRpb25z
LmV2ZW50cywgIklvQyIpOwogICAgICAgIC8vIFRPRE86IG1hbnVhbGx5IGV4cGFuZCB0aGVzZSBs
YXRlIHNvIHRoYXQgbWVtYmVycyBhdHRhY2hlZCB0byBvdXJzZWx2ZXMgd2l0aCBwcmVJbml0RnVu
Y3Rpb24gY2FuIGJlIGRldGVjdGVkCiAgICAgICAgdmFyIGxpc3RlbmVycyA9IGZsdWlkLmV4cGFu
ZE9wdGlvbnMgPyBmbHVpZC5leHBhbmRPcHRpb25zKG9wdGlvbnMubGlzdGVuZXJzLCB0aGF0KSA6
IG9wdGlvbnMubGlzdGVuZXJzOwogICAgICAgIGZsdWlkLm1lcmdlTGlzdGVuZXJzKHRoYXQsIHRo
YXQuZXZlbnRzLCBsaXN0ZW5lcnMpOwogICAgfTsKICAgIAogICAgZmx1aWQubWVyZ2VMaXN0ZW5l
cnNQb2xpY3kgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgICB2YXIgdG9nbyA9
IHRhcmdldCB8fCB7fTsKICAgICAgICBmbHVpZC5lYWNoKHNvdXJjZSwgZnVuY3Rpb24gKGxpc3Rl
bmVycywga2V5KSB7CiAgICAgICAgICAgIHRvZ29ba2V5XSA9IGZsdWlkLm1ha2VBcnJheShzb3Vy
Y2Vba2V5XSkuY29uY2F0KGZsdWlkLm1ha2VBcnJheShsaXN0ZW5lcnMpKTsKICAgICAgICB9KTsK
ICAgICAgICByZXR1cm4gdG9nbzsKICAgIH07CiAgICAKICAgIC8qKiogREVGQVVMVFMgQU5EIE9Q
VElPTlMgTUVSR0lORyBTWVNURU0gKioqLwogICAgCiAgICB2YXIgZGVmYXVsdHNTdG9yZSA9IHt9
OwogICAgICAgIAogICAgdmFyIHJlc29sdmVHcmFkZXNJbXBsID0gZnVuY3Rpb24gKGdzLCBncmFk
ZU5hbWVzKSB7CiAgICAgICAgZ3JhZGVOYW1lcyA9IGZsdWlkLm1ha2VBcnJheShncmFkZU5hbWVz
KTsKICAgICAgICBmbHVpZC5lYWNoKGdyYWRlTmFtZXMsIGZ1bmN0aW9uIChncmFkZU5hbWUpIHsK
ICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBmbHVpZC5yYXdEZWZhdWx0cyhncmFkZU5hbWUpIHx8
IHt9OwogICAgICAgICAgICBncy5ncmFkZUhhc2hbZ3JhZGVOYW1lXSA9IHRydWU7CiAgICAgICAg
ICAgIGdzLmdyYWRlQ2hhaW4ucHVzaChncmFkZU5hbWUpOwogICAgICAgICAgICBncy5vcHRpb25z
Q2hhaW4ucHVzaChvcHRpb25zKTsKICAgICAgICAgICAgZmx1aWQuZWFjaChvcHRpb25zLmdyYWRl
TmFtZXMsIGZ1bmN0aW9uIChwYXJlbnQpIHsKICAgICAgICAgICAgICAgIGlmICghZ3MuZ3JhZGVI
YXNoW3BhcmVudF0pIHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlR3JhZGVzSW1wbChncywg
cGFyZW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAg
ICAgICAgcmV0dXJuIGdzOwogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkg
ZnVuY3Rpb24KICAgIGZsdWlkLnJlc29sdmVHcmFkZVN0cnVjdHVyZSA9IGZ1bmN0aW9uIChncmFk
ZU5hbWVzKSB7CiAgICAgICAgdmFyIGdyYWRlU3RydWN0ID0gewogICAgICAgICAgICBncmFkZUNo
YWluOiBbXSwKICAgICAgICAgICAgZ3JhZGVIYXNoOiB7fSwKICAgICAgICAgICAgb3B0aW9uc0No
YWluOiBbXQogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlc29sdmVHcmFkZXNJbXBsKGdyYWRl
U3RydWN0LCBncmFkZU5hbWVzKTsKICAgIH07CiAgICAKICAgIGZsdWlkLmxpZmVjeWNsZUZ1bmN0
aW9ucyA9IHsKICAgICAgICBwcmVJbml0RnVuY3Rpb246IHRydWUsCiAgICAgICAgcG9zdEluaXRG
dW5jdGlvbjogdHJ1ZSwKICAgICAgICBmaW5hbEluaXRGdW5jdGlvbjogdHJ1ZQogICAgfTsKICAg
IAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLm1lcmdlTGlm
ZWN5Y2xlRnVuY3Rpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgICBmbHVp
ZC5ldmVudC5hZGRMaXN0ZW5lclRvRmlyZXIodGFyZ2V0LCBzb3VyY2UpOwogICAgICAgIHJldHVy
biB0YXJnZXQ7CiAgICB9OwogICAgCiAgICBmbHVpZC5yb290TWVyZ2VQb2xpY3kgPSBmbHVpZC50
cmFuc2Zvcm0oZmx1aWQubGlmZWN5Y2xlRnVuY3Rpb25zLCBmdW5jdGlvbiAoKSB7CiAgICAgICAg
cmV0dXJuIGZsdWlkLm1lcmdlTGlmZWN5Y2xlRnVuY3Rpb247CiAgICB9KTsKICAgICAgICAKICAg
IC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5tYWtlTGlmZWN5Y2xl
RmlyZXJzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBmbHVpZC50cmFuc2Zvcm0oZmx1
aWQubGlmZWN5Y2xlRnVuY3Rpb25zLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBm
bHVpZC5ldmVudC5nZXRFdmVudEZpcmVyKCk7CiAgICAgICAgfSk7CiAgICB9OwogICAgCiAgICAv
LyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgZmx1aWQucmVzb2x2ZUdyYWRlID0g
ZnVuY3Rpb24gKGRlZmF1bHRzLCBncmFkZU5hbWVzKSB7CiAgICAgICAgdmFyIG1lcmdlQXJncyA9
IFtkZWZhdWx0c107CiAgICAgICAgaWYgKGdyYWRlTmFtZXMpIHsKICAgICAgICAgICAgdmFyIGdy
YWRlU3RydWN0ID0gZmx1aWQucmVzb2x2ZUdyYWRlU3RydWN0dXJlKGdyYWRlTmFtZXMpOwogICAg
ICAgICAgICBtZXJnZUFyZ3MgPSBncmFkZVN0cnVjdC5vcHRpb25zQ2hhaW4ucmV2ZXJzZSgpLmNv
bmNhdChtZXJnZUFyZ3MpLmNvbmNhdCh7Z3JhZGVOYW1lczogZ3JhZGVTdHJ1Y3QuZ3JhZGVDaGFp
bn0pOwogICAgICAgIH0KICAgICAgICBtZXJnZUFyZ3MgPSBbZmx1aWQucm9vdE1lcmdlUG9saWN5
LCBmbHVpZC5tYWtlTGlmZWN5Y2xlRmlyZXJzKCldLmNvbmNhdChtZXJnZUFyZ3MpOwogICAgICAg
IHZhciBtZXJnZWREZWZhdWx0cyA9IGZsdWlkLm1lcmdlLmFwcGx5KG51bGwsIG1lcmdlQXJncyk7
CiAgICAgICAgcmV0dXJuIG1lcmdlZERlZmF1bHRzOyAgCiAgICB9OwoKICAgIC8vIHVuc3VwcG9y
dGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5yZXNvbHZlR3JhZGVkT3B0aW9ucyA9IGZ1
bmN0aW9uIChjb21wb25lbnROYW1lKSB7CiAgICAgICAgdmFyIGRlZmF1bHRzID0gZmx1aWQucmF3
RGVmYXVsdHMoY29tcG9uZW50TmFtZSk7CiAgICAgICAgaWYgKCFkZWZhdWx0cykgewogICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJu
IGZsdWlkLnJlc29sdmVHcmFkZShkZWZhdWx0cywgZGVmYXVsdHMuZ3JhZGVOYW1lcyk7CiAgICAg
ICAgfQogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAg
IGZsdWlkLnJhd0RlZmF1bHRzID0gZnVuY3Rpb24gKGNvbXBvbmVudE5hbWUsIG9wdGlvbnMpIHsK
ICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBk
ZWZhdWx0c1N0b3JlW2NvbXBvbmVudE5hbWVdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
IGRlZmF1bHRzU3RvcmVbY29tcG9uZW50TmFtZV0gPSBvcHRpb25zOwogICAgICAgIH0KICAgIH07
CiAgICAKICAgICAgICAKICAgIGZsdWlkLmhhc0dyYWRlID0gZnVuY3Rpb24gKG9wdGlvbnMsIGdy
YWRlTmFtZSkgewogICAgICAgIHJldHVybiAhb3B0aW9ucyB8fCAhb3B0aW9ucy5ncmFkZU5hbWVz
ID8gZmFsc2UgOiBmbHVpZC5jb250YWlucyhvcHRpb25zLmdyYWRlTmFtZXMsIGdyYWRlTmFtZSk7
CiAgICB9OwogICAgCiAgICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYW5kIHN0b3JlcyBhIGNvbXBv
bmVudCdzIGRlZmF1bHQgc2V0dGluZ3MgY2VudHJhbGx5LgogICAgICogQHBhcmFtIHtib29sZWFu
fSAob3B0aW9ucykgaWYgdHJ1ZSwgbWFuaXB1bGF0ZSBhIGdsb2JhbCBvcHRpb24gKGZvciB0aGUg
aGVhZAogICAgICogICBjb21wb25lbnQpIHJhdGhlciB0aGFuIGluc3RhbmNlIG9wdGlvbnMuIE5C
IC0gdGhlIHVzZSBvZiAiZ2xvYmFsIG9wdGlvbnMiIAogICAgICogICBpcyBkZXByZWNhdGVkIGFu
ZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZnJhbWV3b3JrIGluIHJlbGVhc2UgMS41IAogICAg
ICogQHBhcmFtIHtTdHJpbmd9IGNvbXBvbmVudE5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVu
dAogICAgICogQHBhcmFtIHtPYmplY3R9IChvcHRpb25hbCkgYW4gY29udGFpbmVyIG9mIGtleS92
YWx1ZSBwYWlycyB0byBzZXQKICAgICAqLwogICAgIAogICAgZmx1aWQuZGVmYXVsdHMgPSBmdW5j
dGlvbiAoKSB7CiAgICAgICAgdmFyIG9mZnNldCA9IDA7CiAgICAgICAgaWYgKHR5cGVvZiBhcmd1
bWVudHNbMF0gPT09ICJib29sZWFuIikgewogICAgICAgICAgICBvZmZzZXQgPSAxOwogICAgICAg
IH0KICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IChvZmZzZXQgPT09IDAgPyAiIiA6ICIqLmds
b2JhbC0iKSArIGFyZ3VtZW50c1tvZmZzZXRdOwogICAgICAgIHZhciBvcHRpb25zID0gYXJndW1l
bnRzW29mZnNldCArIDFdOwogICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsKICAg
ICAgICAgICAgcmV0dXJuIGZsdWlkLnJlc29sdmVHcmFkZWRPcHRpb25zKGNvbXBvbmVudE5hbWUp
OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3B0
aW9ucykgewogICAgICAgICAgICAgICAgZmx1aWQuZmFpbCgiUHJvYmFibGUgZXJyb3IgaW4gb3B0
aW9ucyBzdHJ1Y3R1cmUgd2l0aCBvcHRpb24gbmFtZWQgXCJvcHRpb25zXCIgLSBwZXJoYXBzIHlv
dSBtZWFudCB0byB3cml0ZSB0aGVzZSBvcHRpb25zIGF0IHRvcCBsZXZlbCBpbiBmbHVpZC5kZWZh
dWx0cz8iKTsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGZsdWlkLnJhd0RlZmF1bHRzKGNv
bXBvbmVudE5hbWUsIG9wdGlvbnMpOwogICAgICAgICAgICBpZiAoZmx1aWQuaGFzR3JhZGUob3B0
aW9ucywgImF1dG9Jbml0IikpIHsKICAgICAgICAgICAgICAgIGZsdWlkLm1ha2VDb21wb25lbnQo
Y29tcG9uZW50TmFtZSwgZmx1aWQucmVzb2x2ZUdyYWRlZE9wdGlvbnMoY29tcG9uZW50TmFtZSkp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgZmx1aWQubWFrZUNvbXBv
bmVudCA9IGZ1bmN0aW9uIChjb21wb25lbnROYW1lLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKCFv
cHRpb25zLmluaXRGdW5jdGlvbiB8fCAhb3B0aW9ucy5ncmFkZU5hbWVzKSB7CiAgICAgICAgICAg
IGZsdWlkLmZhaWwoIkNhbm5vdCBhdXRvSW5pdCBjb21wb25lbnQgIiArIGNvbXBvbmVudE5hbWUg
KyAiIHdoaWNoIGRvZXMgbm90IGhhdmUgYW4gaW5pdEZ1bmN0aW9uIGFuZCBncmFkZU5hbWUgZGVm
aW5lZCIpOwogICAgICAgIH0KICAgICAgICB2YXIgY3JlYXRvciA9IGZ1bmN0aW9uICgpIHsKICAg
ICAgICAgICAgcmV0dXJuIGZsdWlkLmluaXRDb21wb25lbnQoY29tcG9uZW50TmFtZSwgYXJndW1l
bnRzKTsKICAgICAgICB9OwogICAgICAgIHZhciBleGlzdGluZyA9IGZsdWlkLmdldEdsb2JhbFZh
bHVlKGNvbXBvbmVudE5hbWUpOwogICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICAgICAk
LmV4dGVuZChjcmVhdG9yLCBleGlzdGluZyk7CiAgICAgICAgfQogICAgICAgIGZsdWlkLnNldEds
b2JhbFZhbHVlKGNvbXBvbmVudE5hbWUsIGNyZWF0b3IpOwogICAgfTsKICAgICAgICAKICAgIGZs
dWlkLm1ha2VDb21wb25lbnRzID0gZnVuY3Rpb24gKGNvbXBvbmVudHMsIGVudikgewogICAgICAg
IGZsdWlkLmVhY2goY29tcG9uZW50cywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsKICAgICAgICAg
ICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICBncmFkZU5hbWVzOiBmbHVpZC5tYWtl
QXJyYXkodmFsdWUpLmNvbmNhdChbImF1dG9Jbml0Il0pCiAgICAgICAgICAgIH07CiAgICAgICAg
ICAgIGZsdWlkLmRlZmF1bHRzKGtleSwgb3B0aW9ucyk7CiAgICAgICAgfSk7CiAgICB9OwogICAg
CiAgICAvLyBUaGUgYmFzZSBzeXN0ZW0gZ3JhZGUgZGVmaW5pdGlvbnMKICAgIAogICAgZmx1aWQu
ZGVmYXVsdHMoImZsdWlkLmxpdHRsZUNvbXBvbmVudCIsIHsKICAgICAgICBpbml0RnVuY3Rpb246
ICJmbHVpZC5pbml0TGl0dGxlQ29tcG9uZW50IiwKICAgICAgICBhcmd1bWVudE1hcDogewogICAg
ICAgICAgICBvcHRpb25zOiAwCiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIGZsdWlkLmRlZmF1
bHRzKCJmbHVpZC5ldmVudGVkQ29tcG9uZW50IiwgewogICAgICAgIGdyYWRlTmFtZXM6IFsiZmx1
aWQubGl0dGxlQ29tcG9uZW50Il0sCiAgICAgICAgbWVyZ2VQb2xpY3k6IHsKICAgICAgICAgICAg
bGlzdGVuZXJzOiAiZmx1aWQubWVyZ2VMaXN0ZW5lcnNQb2xpY3kiCiAgICAgICAgfQogICAgfSk7
CiAgICAKICAgICAgICAKICAgIGZsdWlkLnByZUluaXRNb2RlbENvbXBvbmVudCA9IGZ1bmN0aW9u
ICh0aGF0KSB7CiAgICAgICAgdGhhdC5tb2RlbCA9IHRoYXQub3B0aW9ucy5tb2RlbCB8fCB7fTsK
ICAgICAgICB0aGF0LmFwcGxpZXIgPSB0aGF0Lm9wdGlvbnMuYXBwbGllciB8fCBmbHVpZC5tYWtl
Q2hhbmdlQXBwbGllcih0aGF0Lm1vZGVsLCB0aGF0Lm9wdGlvbnMuY2hhbmdlQXBwbGllck9wdGlv
bnMpOwogICAgfTsKICAgIAogICAgZmx1aWQuZGVmYXVsdHMoImZsdWlkLm1vZGVsQ29tcG9uZW50
IiwgewogICAgICAgIGdyYWRlTmFtZXM6IFsiZmx1aWQubGl0dGxlQ29tcG9uZW50Il0sCiAgICAg
ICAgcHJlSW5pdEZ1bmN0aW9uOiB7CiAgICAgICAgICAgIG5hbWVzcGFjZTogInByZUluaXRNb2Rl
bENvbXBvbmVudCIsCiAgICAgICAgICAgIGxpc3RlbmVyOiAiZmx1aWQucHJlSW5pdE1vZGVsQ29t
cG9uZW50IgogICAgICAgIH0sCiAgICAgICAgbWVyZ2VQb2xpY3k6IHsKICAgICAgICAgICAgbW9k
ZWw6ICJwcmVzZXJ2ZSIsCiAgICAgICAgICAgIGFwcGxpZXI6ICJub21lcmdlIgogICAgICAgIH0K
ICAgIH0pOwogICAgCiAgICBmbHVpZC5kZWZhdWx0cygiZmx1aWQudmlld0NvbXBvbmVudCIsIHsK
ICAgICAgICBncmFkZU5hbWVzOiBbImZsdWlkLmxpdHRsZUNvbXBvbmVudCIsICJmbHVpZC5tb2Rl
bENvbXBvbmVudCIsICJmbHVpZC5ldmVudGVkQ29tcG9uZW50Il0sCiAgICAgICAgaW5pdEZ1bmN0
aW9uOiAiZmx1aWQuaW5pdFZpZXciLAogICAgICAgIGFyZ3VtZW50TWFwOiB7CiAgICAgICAgICAg
IGNvbnRhaW5lcjogMCwKICAgICAgICAgICAgb3B0aW9uczogMQogICAgICAgIH0KICAgIH0pOwog
ICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuZ3VhcmRD
aXJjdWxhcml0eSA9IGZ1bmN0aW9uIChzZWVuSWRzLCBzb3VyY2UsIG1lc3NhZ2UxLCBtZXNzYWdl
MikgewogICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLmlkKSB7CiAgICAgICAgICAgIGlmICgh
c2Vlbklkc1tzb3VyY2UuaWRdKSB7CiAgICAgICAgICAgICAgICBzZWVuSWRzW3NvdXJjZS5pZF0g
PSBzb3VyY2U7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vlbklkc1tzb3VyY2UuaWRdID09PSBz
b3VyY2UpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmZhaWwoIkNpcmN1bGFyaXR5IGluIG9wdGlv
bnMgIiArIG1lc3NhZ2UxICsgIiAtIGNvbXBvbmVudCB3aXRoIHR5cGVuYW1lICIgKyBzb3VyY2Uu
dHlwZU5hbWUgKyAiIGFuZCBpZCAiICsgc291cmNlLmlkIAogICAgICAgICAgICAgICAgICAgICsg
IiBoYXMgYWxyZWFkeSBiZWVuIHNlZW4iICsgbWVzc2FnZTIpOyAgCiAgICAgICAgICAgIH0KICAg
ICAgICB9ICAgICAgCiAgICB9OwogICAgICAgICAgICAgICAgCiAgICBmbHVpZC5tZXJnZVBvbGlj
eUlzID0gZnVuY3Rpb24gKHBvbGljeSwgdGVzdCkgewogICAgICAgIHJldHVybiB0eXBlb2YgKHBv
bGljeSkgPT09ICJzdHJpbmciICYmICQuaW5BcnJheSh0ZXN0LCBwb2xpY3kuc3BsaXQoL1xzKixc
cyovKSkgIT09IC0xOwogICAgfTsKICAgIAogICAgZnVuY3Rpb24gbWVyZ2VJbXBsKHBvbGljeSwg
YmFzZVBhdGgsIHRhcmdldCwgc291cmNlLCB0aGlzUG9saWN5LCByZWMpIHsKICAgICAgICBpZiAo
dHlwZW9mICh0aGlzUG9saWN5KSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aGlzUG9s
aWN5LmNhbGwobnVsbCwgdGFyZ2V0LCBzb3VyY2UpOwogICAgICAgICAgICByZXR1cm4gdGFyZ2V0
OwogICAgICAgIH0KICAgICAgICBpZiAoZmx1aWQubWVyZ2VQb2xpY3lJcyh0aGlzUG9saWN5LCAi
cmVwbGFjZSIpKSB7CiAgICAgICAgICAgIGZsdWlkLmNsZWFyKHRhcmdldCk7CiAgICAgICAgfQog
ICAgICAgIGZsdWlkLmd1YXJkQ2lyY3VsYXJpdHkocmVjLnNlZW5JZHMsIHNvdXJjZSwgIm1lcmdp
bmciLCAiIHdoZW4gZXZhbHVhdGluZyBwYXRoICIgKyBiYXNlUGF0aCArICIgLSBwbGVhc2UgcHJv
dGVjdCBjb21wb25lbnRzIGZyb20gbWVyZ2luZyB1c2luZyB0aGUgXCJub21lcmdlXCIgbWVyZ2Ug
cG9saWN5Iik7CiAgICAgIAogICAgICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7CiAgICAg
ICAgICAgIHZhciBwYXRoID0gKGJhc2VQYXRoID8gYmFzZVBhdGggKyAiLiIgOiAiIikgKyBuYW1l
OwogICAgICAgICAgICB2YXIgbmV3UG9saWN5ID0gcG9saWN5ICYmIHR5cGVvZiAocG9saWN5KSAh
PT0gInN0cmluZyIgPyBwb2xpY3lbcGF0aF0gOiBwb2xpY3k7CiAgICAgICAgICAgIHZhciB0aGlz
VGFyZ2V0ID0gdGFyZ2V0W25hbWVdOwogICAgICAgICAgICB2YXIgdGhpc1NvdXJjZSA9IHNvdXJj
ZVtuYW1lXTsKICAgICAgICAgICAgdmFyIHByaW1pdGl2ZVRhcmdldCA9IGZsdWlkLmlzUHJpbWl0
aXZlKHRoaXNUYXJnZXQpOwogICAgCiAgICAgICAgICAgIGlmICh0aGlzU291cmNlICE9PSB1bmRl
ZmluZWQpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzU291cmNlICE9PSBudWxsICYmIHR5cGVv
ZiAodGhpc1NvdXJjZSkgPT09ICJvYmplY3QiICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFm
bHVpZC5pc0RPTU5vZGUodGhpc1NvdXJjZSkgJiYgIXRoaXNTb3VyY2UuanF1ZXJ5ICYmIHRoaXNT
b3VyY2UgIT09IGZsdWlkLlZBTFVFICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFmbHVpZC5t
ZXJnZVBvbGljeUlzKG5ld1BvbGljeSwgInByZXNlcnZlIikgJiYgIWZsdWlkLm1lcmdlUG9saWN5
SXMobmV3UG9saWN5LCAibm9tZXJnZSIpICYmICFmbHVpZC5tZXJnZVBvbGljeUlzKG5ld1BvbGlj
eSwgIm5vZXhwYW5kIikpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVGFyZ2V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHRoaXNUYXJnZXQgPSBm
bHVpZC5mcmVzaENvbnRhaW5lcih0aGlzU291cmNlKQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBtZXJnZUltcGwocG9saWN5LCBwYXRoLCB0aGlzVGFyZ2V0LCB0aGlz
U291cmNlLCBuZXdQb2xpY3ksIHJlYyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgKG5ld1BvbGljeSkgPT09ICJmdW5jdGlvbiIpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gbmV3UG9saWN5LmNhbGwobnVsbCwg
dGhpc1RhcmdldCwgdGhpc1NvdXJjZSwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghZmx1aWQuaXNWYWx1ZSh0aGlzVGFyZ2V0KSB8fCAhZmx1aWQubWVyZ2VQb2xpY3lJcyhu
ZXdQb2xpY3ksICJyZXZlcnNlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzog
V2hlbiAiZ3JhZGVzIiBhcmUgaW1wbGVtZW50ZWQsIGdyYW5kZmF0aGVyIGluIGFueSBwYWlyZWQg
YXBwbGllciB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMKICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTkI6IG1lcmdlUG9saWN5IG9mICJwcmVzZXJ2ZSIgbm93IGNyZWF0ZXMgZGVwZW5kZW5j
eSBvbiBEYXRhQmluZGluZy5qcwogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0g
PSBmbHVpZC5pc1ZhbHVlKHRoaXNUYXJnZXQpICYmIGZsdWlkLm1lcmdlUG9saWN5SXMobmV3UG9s
aWN5LCAicHJlc2VydmUiKSA/IGZsdWlkLm1vZGVsLm1lcmdlTW9kZWwodGhpc1RhcmdldCwgdGhp
c1NvdXJjZSkgOiB0aGlzU291cmNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAg
fQogICAgCiAgICAvKiogTWVyZ2UgYSBjb2xsZWN0aW9uIG9mIG9wdGlvbnMgc3RydWN0dXJlcyBv
bnRvIGEgdGFyZ2V0LCBmb2xsb3dpbmcgYW4gb3B0aW9uYWwgcG9saWN5LgogICAgICogVGhpcyBm
dW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGF1dG9tYXRpY2FsbHksIGFzIGEgcmVzdWx0IG9m
IGFuIGludm9jYXRpb24gb2YKICAgICAqIDxjb2RlPmZsdWlkLmluaXRMaXR0bGVDb21wb25lbnQ8
L2NvZGU+LiBUaGUgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXhwbGFpbmVkIG1vcmUg
ZnVsbHkgb24KICAgICAqIHRoZSBwYWdlIGh0dHA6Ly93aWtpLmZsdWlkcHJvamVjdC5vcmcvZGlz
cGxheS9mbHVpZC9PcHRpb25zK01lcmdpbmcrZm9yK0ZsdWlkK0NvbXBvbmVudHMgLgogICAgICog
QHBhcmFtIHBvbGljeSB7T2JqZWN0L1N0cmluZ30gQSAicG9saWN5IG9iamVjdCIgc3BlY2lmaXlp
bmcgdGhlIHR5cGUgb2YgbWVyZ2UgdG8gYmUgcGVyZm9ybWVkLgogICAgICogSWYgcG9saWN5IGlz
IG9mIHR5cGUge1N0cmluZ30gaXQgc2hvdWxkIHRha2Ugb24gdGhlIHZhbHVlICJyZXZlcnNlIiBv
ciAicmVwbGFjZSIgcmVwcmVzZW50aW5nCiAgICAgKiBhIHN0YXRpYyBwb2xpY3kuIElmIGl0IGlz
IGFuCiAgICAgKiBPYmplY3QsIGl0IHNob3VsZCBjb250YWluIGEgbWFwcGluZyBvZiBFTCBwYXRo
cyBvbnRvIHRoZXNlIFN0cmluZyB2YWx1ZXMsIHJlcHJlc2VudGluZyBhCiAgICAgKiBmaW5lLWdy
YWluZWQgcG9saWN5LiBJZiBpdCBpcyBhbiBPYmplY3QsIHRoZSB2YWx1ZXMgbWF5IGFsc28gdGhl
bXNlbHZlcyBiZSBFTCBwYXRocyAKICAgICAqIHJlcHJlc2VudGluZyB0aGF0IGEgZGVmYXVsdCB2
YWx1ZSBpcyB0byBiZSB0YWtlbiBmcm9tIHRoYXQgcGF0aC4KICAgICAqIEBwYXJhbSB0YXJnZXQg
e09iamVjdH0gVGhlIG9wdGlvbnMgc3RydWN0dXJlIHdoaWNoIGlzIHRvIGJlIG1vZGlmaWVkIGJ5
IHJlY2VpdmluZyB0aGUgbWVyZ2UgcmVzdWx0cy4KICAgICAqIEBwYXJhbSBvcHRpb25zMSwgb3B0
aW9uczIsIC4uLi4ge09iamVjdH0gYW4gYXJiaXRyYXJ5IGxpc3Qgb2Ygb3B0aW9ucyBzdHJ1Y3R1
cmUgd2hpY2ggYXJlIHRvCiAgICAgKiBiZSBtZXJnZWQgIm9uIHRvcCBvZiIgdGhlIDxjb2RlPnRh
cmdldDwvY29kZT4uIFRoZXNlIHdpbGwgbm90IGJlIG1vZGlmaWVkLiAgICAKICAgICAqLwogICAg
CiAgICBmbHVpZC5tZXJnZSA9IGZ1bmN0aW9uIChwb2xpY3ksIHRhcmdldCkgewogICAgICAgIHZh
ciBwYXRoID0gIiI7CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVu
dHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsK
ICAgICAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCAmJiBzb3VyY2UgIT09IHVuZGVmaW5lZCkg
ewogICAgICAgICAgICAgICAgbWVyZ2VJbXBsKHBvbGljeSwgcGF0aCwgdGFyZ2V0LCBzb3VyY2Us
IHBvbGljeSA/IHBvbGljeVsiIl0gOiBudWxsLCB7c2Vlbklkczoge319KTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgICBpZiAocG9saWN5ICYmIHR5cGVvZiAocG9saWN5KSAhPT0gInN0
cmluZyIpIHsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBvbGljeSkgewogICAgICAgICAg
ICAgICAgdmFyIGVscmggPSBwb2xpY3lba2V5XTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
KGVscmgpID09PSAic3RyaW5nIiAmJiBlbHJoICE9PSAicmVwbGFjZSIgJiYgZWxyaCAhPT0gInBy
ZXNlcnZlIikgewogICAgICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGZsdWlkLmdldCh0
YXJnZXQsIGtleSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlID09PSBudWxsIHx8
IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gZmx1aWQuZ2V0KHRhcmdldCwgZWxyaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZs
dWlkLnNldCh0YXJnZXQsIGtleSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0
OyAgICAgCiAgICB9OwoKICAgIC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBm
bHVpZC50cmFuc2Zvcm1PcHRpb25zID0gZnVuY3Rpb24gKG1lcmdlQXJncywgdHJhbnNSZWMpIHsK
ICAgICAgICBmbHVpZC5leHBlY3QoIk9wdGlvbnMgdHJhbnNmb3JtYXRpb24gcmVjb3JkIiwgWyJ0
cmFuc2Zvcm1lciIsICJjb25maWciXSwgdHJhbnNSZWMpOwogICAgICAgIHZhciB0cmFuc0Z1bmMg
PSBmbHVpZC5nZXRHbG9iYWxWYWx1ZSh0cmFuc1JlYy50cmFuc2Zvcm1lcik7CiAgICAgICAgdmFy
IHRvZ28gPSBmbHVpZC50cmFuc2Zvcm0obWVyZ2VBcmdzLCBmdW5jdGlvbiAodmFsdWUsIGtleSkg
ewogICAgICAgICAgICByZXR1cm4ga2V5ID09PSAwID8gdmFsdWUgOiB0cmFuc0Z1bmMuY2FsbChu
dWxsLCB2YWx1ZSwgdHJhbnNSZWMuY29uZmlnKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4g
dG9nbzsKICAgIH07CiAgICAKICAgIC8vIHVuc3VwcG9ydGVyLCBOT04tQVBJIGZ1bmN0aW9uCiAg
ICBmbHVpZC5sYXN0VHJhbnNmb3JtYXRpb25SZWNvcmQgPSBmdW5jdGlvbiAoZXh0cmFBcmdzKSB7
CiAgICAgICAgZm9yICh2YXIgaSA9IGV4dHJhQXJncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkg
ewogICAgICAgICAgICBpZiAoZXh0cmFBcmdzW2ldICYmIGV4dHJhQXJnc1tpXS50cmFuc2Zvcm1P
cHRpb25zKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmFBcmdzW2ldLnRyYW5zZm9ybU9w
dGlvbnM7CiAgICAgICAgICAgIH0gCiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIE1l
cmdlcyB0aGUgY29tcG9uZW50J3MgZGVjbGFyZWQgZGVmYXVsdHMsIGFzIG9idGFpbmVkIGZyb20g
Zmx1aWQuZGVmYXVsdHMoKSwKICAgICAqIHdpdGggdGhlIHVzZXIncyBzcGVjaWZpZWQgb3ZlcnJp
ZGVzLgogICAgICogCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGhhdCB0aGUgaW5zdGFuY2UgdG8g
YXR0YWNoIHRoZSBvcHRpb25zIHRvCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcG9uZW50TmFt
ZSB0aGUgdW5pcXVlICJuYW1lIiBvZiB0aGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHVzZWQK
ICAgICAqIHRvIGZldGNoIHRoZSBkZWZhdWx0IG9wdGlvbnMgZnJvbSBzdG9yZS4gQnkgcmVjb21t
ZW5kYXRpb24sIHRoaXMgc2hvdWxkIGJlIHRoZSBnbG9iYWwKICAgICAqIG5hbWUgb2YgdGhlIGNv
bXBvbmVudCdzIGNyZWF0b3IgZnVuY3Rpb24uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXNlck9w
dGlvbnMgdGhlIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBj
b21wb25lbnQKICAgICAqLwogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAg
IGZsdWlkLm1lcmdlQ29tcG9uZW50T3B0aW9ucyA9IGZ1bmN0aW9uICh0aGF0LCBjb21wb25lbnRO
YW1lLCB1c2VyT3B0aW9ucywgbG9jYWxPcHRpb25zKSB7CiAgICAgICAgdmFyIGRlZmF1bHRzID0g
Zmx1aWQuZGVmYXVsdHMoY29tcG9uZW50TmFtZSk7CiAgICAgICAgdmFyIG1lcmdlUG9saWN5ID0g
JC5leHRlbmQoe30sIGZsdWlkLnJvb3RNZXJnZVBvbGljeSwgZGVmYXVsdHMgPyBkZWZhdWx0cy5t
ZXJnZVBvbGljeSA6IHt9KTsKICAgICAgICB2YXIgZGVmYXVsdEdyYWRlcyA9IGRlZmF1bHRzICYm
IGRlZmF1bHRzLmdyYWRlTmFtZXM7CiAgICAgICAgdmFyIG1lcmdlQXJnczsKICAgICAgICBpZiAo
IWRlZmF1bHRHcmFkZXMpIHsKICAgICAgICAgICAgZGVmYXVsdHMgPSBmbHVpZC5jZW5zb3JLZXlz
KGRlZmF1bHRzLCBmbHVpZC5rZXlzKGZsdWlkLmxpZmVjeWNsZUZ1bmN0aW9ucykpOwogICAgICAg
ICAgICBtZXJnZUFyZ3MgPSBbbWVyZ2VQb2xpY3ksIGxvY2FsT3B0aW9uc107CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgbWVyZ2VBcmdzID0gW21lcmdlUG9saWN5XTsKICAgICAgICB9CiAg
ICAgICAgdmFyIGV4dHJhQXJnczsKICAgICAgICBpZiAoZmx1aWQuZXhwYW5kQ29tcG9uZW50T3B0
aW9ucykgewogICAgICAgICAgICBleHRyYUFyZ3MgPSBmbHVpZC5leHBhbmRDb21wb25lbnRPcHRp
b25zKGRlZmF1bHRzLCB1c2VyT3B0aW9ucywgdGhhdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgZXh0cmFBcmdzID0gW2RlZmF1bHRzLCB1c2VyT3B0aW9uc107CiAgICAgICAgfQogICAg
ICAgIHZhciB0cmFuc1JlYyA9IGZsdWlkLmxhc3RUcmFuc2Zvcm1hdGlvblJlY29yZChleHRyYUFy
Z3MpOwogICAgICAgIGlmICh0cmFuc1JlYykgewogICAgICAgICAgICBleHRyYUFyZ3MgPSBmbHVp
ZC50cmFuc2Zvcm1PcHRpb25zKGV4dHJhQXJncywgdHJhbnNSZWMpOwogICAgICAgIH0KICAgICAg
ICBtZXJnZUFyZ3MgPSBtZXJnZUFyZ3MuY29uY2F0KGV4dHJhQXJncyk7CiAgICAgICAgdGhhdC5v
cHRpb25zID0gZmx1aWQubWVyZ2UuYXBwbHkobnVsbCwgbWVyZ2VBcmdzKTsKICAgIH07CiAgICAK
ICAgIC8vIFRoZSBGbHVpZCBDb21wb25lbnQgU3lzdGVtIHByb3BlciAgIAogICAgICAgICAgICAK
ICAgIC8qKiBBIHNwZWNpYWwgIm1hcmtlciBvYmplY3QiIHdoaWNoIGlzIHJlY29nbmlzZWQgYXMg
b25lIG9mIHRoZSBhcmd1bWVudHMgdG8gCiAgICAgKiBmbHVpZC5pbml0U3ViY29tcG9uZW50cy4g
VGhpcyBvYmplY3QgaXMgcmVjb2duaXNlZCBieSByZWZlcmVuY2UgZXF1YWxpdHkgLSAKICAgICAq
IHdoZXJlIGl0IGlzIGZvdW5kLCBpdCBpcyByZXBsYWNlZCBpbiB0aGUgYWN0dWFsIGFyZ3VtZW50
IHBvc2l0aW9uIHN1cHBsaWVkCiAgICAgKiB0byB0aGUgc3BlY2lmaWMgc3ViY29tcG9uZW50IGlu
c3RhbmNlLCB3aXRoIHRoZSBwYXJ0aWN1bGFyIG9wdGlvbnMgYmxvY2sKICAgICAqIGZvciB0aGF0
IGluc3RhbmNlIGF0dGFjaGVkIHRvIHRoZSBvdmVyYWxsICJ0aGF0IiBvYmplY3QuCiAgICAgKiBO
T1RFOiBUaGUgdXNlIG9mIHRoaXMgbWFya2VyIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdGhl
IEZsdWlkIDEuNCByZWxlYXNlIGluIAogICAgICogZmF2b3VyIG9mIHRoZSBjb250ZXh0dWFsIEVM
IHBhdGggIntvcHRpb25zfSIgLSBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKICAgICAq
IHJlbGVhc2Ugb2YgdGhlIGZyYW1ld29yay4KICAgICAqLwogICAgZmx1aWQuQ09NUE9ORU5UX09Q
VElPTlMgPSB7dHlwZTogImZsdWlkLm1hcmtlciIsIHZhbHVlOiAiQ09NUE9ORU5UX09QVElPTlMi
fTsKICAgIAogICAgLyoqIENvbnN0cnVjdCBhIGR1bW15IG9yICJwbGFjZWhvbGRlciIgc3ViY29t
cG9uZW50LCB0aGF0IG9wdGlvbmFsbHkgcHJvdmlkZXMgZW1wdHkKICAgICAqIGltcGxlbWVudGF0
aW9ucyBmb3IgYSBzZXQgb2YgbWV0aG9kcy4KICAgICAqLwogICAgZmx1aWQuZW1wdHlTdWJjb21w
b25lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHZhciB0aGF0ID0ge307CiAgICAg
ICAgb3B0aW9ucyA9ICQubWFrZUFycmF5KG9wdGlvbnMpOwogICAgICAgIHZhciBlbXB0eSA9IGZ1
bmN0aW9uICgpIHt9OwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7
ICsraSkgewogICAgICAgICAgICB0aGF0W29wdGlvbnNbaV1dID0gZW1wdHk7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiB0aGF0OwogICAgfTsKICAgIAogICAgLyoqIENvbXB1dGUgYSAibmlja25h
bWUiIGdpdmVuIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVuYW1lLCBieSByZXR1cm5pbmcgdGhlIGxh
c3QgcGF0aAogICAgICogc2VnbWVudC4KICAgICAqLwogICAgCiAgICBmbHVpZC5jb21wdXRlTmlj
a05hbWUgPSBmdW5jdGlvbiAodHlwZU5hbWUpIHsKICAgICAgICB2YXIgc2VncyA9IGZsdWlkLm1v
ZGVsLnBhcnNlRUwodHlwZU5hbWUpOwogICAgICAgIHJldHVybiBzZWdzW3NlZ3MubGVuZ3RoIC0g
MV07CiAgICB9OwogICAgICAgIAogICAgLyoqIENyZWF0ZSBhICJ0eXBlIHRhZyIgY29tcG9uZW50
IHdpdGggbm8gc3RhdGUgYnV0IHNpbXBseSBhIHR5cGUgbmFtZSBhbmQgaWQuIFRoZSBtb3N0IAog
ICAgICogIG1pbmltYWwgZm9ybSBvZiBGbHVpZCBjb21wb25lbnQgKi8KICAgICAgIAogICAgZmx1
aWQudHlwZVRhZyA9IGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgcmV0dXJuIG5hbWUgPyB7CiAg
ICAgICAgICAgIHR5cGVOYW1lOiBuYW1lLAogICAgICAgICAgICBpZDogZmx1aWQuYWxsb2NhdGVH
dWlkKCkKICAgICAgICB9IDogbnVsbDsKICAgIH07CiAgICAKICAgIC8qKiBBIGNvbWJpbmVkICJj
b21wb25lbnQgYW5kIGdyYWRlIG5hbWUiIHdoaWNoIGFsbG93cyB0eXBlIHRhZ3MgdG8gYmUgZGVj
bGFyYXRpdmVseSBjb25zdHJ1Y3RlZAogICAgICogZnJvbSBvcHRpb25zIG1hdGVyaWFsICovCiAg
ICAKICAgIGZsdWlkLnR5cGVGb3VudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdmFy
IHRoYXQgPSBmbHVpZC5pbml0TGl0dGxlQ29tcG9uZW50KCJmbHVpZC50eXBlRm91bnQiLCBvcHRp
b25zKTsKICAgICAgICByZXR1cm4gZmx1aWQudHlwZVRhZyh0aGF0Lm9wdGlvbnMudGFyZ2V0VHlw
ZU5hbWUpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3ICJsaXR0bGUg
Y29tcG9uZW50IjogYSB0aGF0LWlzdCBvYmplY3Qgd2l0aCBvcHRpb25zIG1lcmdlZCBpbnRvIGl0
IGJ5IHRoZSBmcmFtZXdvcmsuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBhIGNvbnZlbmllbmNlIGZv
ciBjcmVhdGluZyBzbWFsbCBvYmplY3RzIHRoYXQgaGF2ZSBvcHRpb25zIGJ1dCBkb24ndCByZXF1
aXJlIGZ1bGwKICAgICAqIFZpZXctbGlrZSBmZWF0dXJlcyBzdWNoIGFzIHRoZSBET00gQmluZGVy
IG9yIGV2ZW50cwogICAgICogCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZSB0aGUgbmFtZSBv
ZiB0aGUgbGl0dGxlIGNvbXBvbmVudCB0byBjcmVhdGUKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBv
cHRpb25zIHVzZXItc3VwcGxpZWQgb3B0aW9ucyB0byBtZXJnZSB3aXRoIHRoZSBkZWZhdWx0cwog
ICAgICovCiAgICAvLyBOT1RFOiB0aGUgM3JkIGFyZ3VtZW50IGxvY2FsT3B0aW9ucyBpcyBOT1Qg
dG8gYmUgYWR2ZXJ0aXNlZCBhcyBwYXJ0IG9mIHRoZSBzdGFibGUgQVBJLCBpdCBpcyBwcmVzZW50
CiAgICAvLyBqdXN0IHRvIGFsbG93IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2hpbHN0IGdyYWRl
IHNwZWNpZmljYXRpb25zIGFyZSBub3QgbWFuZGF0b3J5CiAgICBmbHVpZC5pbml0TGl0dGxlQ29t
cG9uZW50ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMsIGxvY2FsT3B0aW9ucykgewogICAgICAg
IHZhciB0aGF0ID0gZmx1aWQudHlwZVRhZyhuYW1lKTsKICAgICAgICAvLyBUT0RPOiBuaWNrTmFt
ZSBtdXN0IGJlIGF2YWlsYWJsZSBlYXJsaWVyIHRoYW4gb3RoZXIgbWVyZ2VkIG9wdGlvbnMgc28g
dGhhdCBjb21wb25lbnQgbWF5IHJlc29sdmUgdG8gaXRzZWxmCiAgICAgICAgdGhhdC5uaWNrTmFt
ZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5uaWNrTmFtZSA/IG9wdGlvbnMubmlja05hbWUgOiBmbHVp
ZC5jb21wdXRlTmlja05hbWUodGhhdC50eXBlTmFtZSk7CiAgICAgICAgbG9jYWxPcHRpb25zID0g
bG9jYWxPcHRpb25zIHx8IHtncmFkZU5hbWVzOiAiZmx1aWQubGl0dGxlQ29tcG9uZW50In07CiAg
ICAgICAgbG9jYWxPcHRpb25zID0gZmx1aWQucmVzb2x2ZUdyYWRlKHt9LCBsb2NhbE9wdGlvbnMu
Z3JhZGVOYW1lcyk7CiAgICAgICAgCiAgICAgICAgZmx1aWQubWVyZ2VDb21wb25lbnRPcHRpb25z
KHRoYXQsIG5hbWUsIG9wdGlvbnMsIGxvY2FsT3B0aW9ucyk7CiAgICAgICAgdGhhdC5vcHRpb25z
LnByZUluaXRGdW5jdGlvbi5maXJlKHRoYXQpOwoKICAgICAgICBpZiAoZmx1aWQuaGFzR3JhZGUo
dGhhdC5vcHRpb25zLCAiZmx1aWQuZXZlbnRlZENvbXBvbmVudCIpKSB7CiAgICAgICAgICAgIGZs
dWlkLmluc3RhbnRpYXRlRmlyZXJzKHRoYXQsIHRoYXQub3B0aW9ucyk7CiAgICAgICAgfQogICAg
ICAgIGlmICghZmx1aWQuaGFzR3JhZGUodGhhdC5vcHRpb25zLCAiYXV0b0luaXQiKSkgewogICAg
ICAgICAgICBmbHVpZC5jbGVhckxpZmVjeWNsZUZ1bmN0aW9ucyh0aGF0Lm9wdGlvbnMpOwogICAg
ICAgIH0KICAgICAgICByZXR1cm4gdGhhdDsKICAgIH07CiAgICAKICAgIGZsdWlkLmNsZWFyTGlm
ZWN5Y2xlRnVuY3Rpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICBmbHVpZC5lYWNo
KGZsdWlkLmxpZmVjeWNsZUZ1bmN0aW9ucywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsKICAgICAg
ICAgICAgZGVsZXRlIG9wdGlvbnNba2V5XTsKICAgICAgICB9KTsKICAgICAgICBkZWxldGUgb3B0
aW9ucy5pbml0RnVuY3Rpb247IAogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1B
UEkgZnVuY3Rpb24KICAgIC8vIE5PVEU6IHRoaXMgZnVuY3Rpb24gcmVwcmVzZW50cyBhIHRlbXBv
cmFyeSBzdHJhdGVneSB1bnRpbCB3ZSBoYXZlIG1vcmUgaW50ZWdyYXRlZCBJb0MgZGVidWdnaW5n
LgogICAgLy8gSXQgcHJlc2VydmVzIHRoZSBjdXJyZW50IGZyYW1ld29yayBiZWhhdmlvdXIgZm9y
IHRoZSAxLjQgcmVsZWFzZSwgYnV0IHByb3ZpZGVzIGEgbW9yZSBpbmZvcm1hdGl2ZQogICAgLy8g
ZGlhZ25vc3RpYyAtIGluIGZhY3QsIGl0IGlzIHBlcmZlY3RseSBhY2NlcHRhYmxlIGZvciBhIGNv
bXBvbmVudCdzIGNyZWF0b3IgdG8gcmV0dXJuIG5vIHZhbHVlIGFuZAogICAgLy8gdGhlIGZhaWx1
cmUgaXMgcmVhbGx5IGluIGFzc3VtcHRpb25zIGluIGZsdWlkLmluaXRDb21wb25lbnQuIFJldmlz
aXQgdGhpcyBpc3N1ZSBmb3IgMS41CiAgICBmbHVpZC5kaWFnbm9zZUZhaWxlZFZpZXcgPSBmdW5j
dGlvbihjb21wb25lbnROYW1lLCB0aGF0LCBvcHRpb25zLCBhcmdzKSB7CiAgICAgICAgaWYgKCF0
aGF0ICYmIGZsdWlkLmhhc0dyYWRlKG9wdGlvbnMsICJmbHVpZC52aWV3Q29tcG9uZW50IikpIHsK
ICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGZsdWlkLndyYXAoYXJnc1sxXSk7CiAgICAgICAg
ICAgIHZhciBtZXNzYWdlMSA9ICJJbnN0YW50aWF0aW9uIG9mIGF1dG9Jbml0IGNvbXBvbmVudCB3
aXRoIHR5cGUgIiArIGNvbXBvbmVudE5hbWUgKyAiIGZhaWxlZCwgc2luY2UgIgogICAgICAgICAg
ICBpZiAoY29udGFpbmVyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgZmx1aWQuZmFp
bChtZXNzYWdlMSArICJzZWxlY3RvciBcIiIsIGFyZ3NbMV0sICJcIiBkaWQgbm90IG1hdGNoIGFu
eSBtYXJrdXAgaW4gdGhlIGRvY3VtZW50Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICBmbHVpZC5mYWlsKG1lc3NhZ2UxICsgIiBjb21wb25lbnQgY3Jl
YXRvciBmdW5jdGlvbiBkaWQgbm90IHJldHVybiBhIHZhbHVlIik7CiAgICAgICAgICAgIH0gIAog
ICAgICAgIH0gIAogICAgfTsKICAgIAogICAgZmx1aWQuaW5pdENvbXBvbmVudCA9IGZ1bmN0aW9u
IChjb21wb25lbnROYW1lLCBpbml0QXJncykgewogICAgICAgIHZhciBvcHRpb25zID0gZmx1aWQu
ZGVmYXVsdHMoY29tcG9uZW50TmFtZSk7CiAgICAgICAgaWYgKCFvcHRpb25zLmdyYWRlTmFtZXMp
IHsKICAgICAgICAgICAgZmx1aWQuZmFpbCgiQ2Fubm90IGluaXRpYWxpc2UgY29tcG9uZW50ICIg
KyBjb21wb25lbnROYW1lICsgIiB3aGljaCBoYXMgbm8gZ3JhZGVOYW1lIHJlZ2lzdGVyZWQiKTsK
ICAgICAgICB9CiAgICAgICAgdmFyIGFyZ3MgPSBbY29tcG9uZW50TmFtZV0uY29uY2F0KGZsdWlk
Lm1ha2VBcnJheShpbml0QXJncykpOyAvLyBUT0RPOiBzdXBwb3J0IGRpZmZlcmVudCBpbml0RnVu
Y3Rpb24gdmFyaWFudHMKICAgICAgICB2YXIgdGhhdCA9IGZsdWlkLmludm9rZUdsb2JhbEZ1bmN0
aW9uKG9wdGlvbnMuaW5pdEZ1bmN0aW9uLCBhcmdzKTsKICAgICAgICBmbHVpZC5kaWFnbm9zZUZh
aWxlZFZpZXcoY29tcG9uZW50TmFtZSwgdGhhdCwgb3B0aW9ucywgYXJncyk7CiAgICAgICAgdGhh
dC5vcHRpb25zLnBvc3RJbml0RnVuY3Rpb24uZmlyZSh0aGF0KTsKICAgICAgICBpZiAoZmx1aWQu
aW5pdERlcGVuZGVudHMpIHsKICAgICAgICAgICAgZmx1aWQuaW5pdERlcGVuZGVudHModGhhdCk7
CiAgICAgICAgfQogICAgICAgIHRoYXQub3B0aW9ucy5maW5hbEluaXRGdW5jdGlvbi5maXJlKHRo
YXQpOwogICAgICAgIGZsdWlkLmNsZWFyTGlmZWN5Y2xlRnVuY3Rpb25zKHRoYXQub3B0aW9ucyk7
CiAgICAgICAgcmV0dXJuIHRoYXQub3B0aW9ucy5yZXR1cm5lZFBhdGggPyBmbHVpZC5nZXQodGhh
dCwgdGhhdC5vcHRpb25zLnJldHVybmVkUGF0aCkgOiB0aGF0OwogICAgfTsKCiAgICAvLyB1bnN1
cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuaW5pdFN1YmNvbXBvbmVudEltcGwg
PSBmdW5jdGlvbiAodGhhdCwgZW50cnksIGFyZ3MpIHsKICAgICAgICB2YXIgdG9nbzsKICAgICAg
ICBpZiAodHlwZW9mIChlbnRyeSkgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdmFyIGVu
dHJ5VHlwZSA9IHR5cGVvZiAoZW50cnkpID09PSAic3RyaW5nIiA/IGVudHJ5IDogZW50cnkudHlw
ZTsKICAgICAgICAgICAgdmFyIGdsb2JEZWYgPSBmbHVpZC5kZWZhdWx0cyh0cnVlLCBlbnRyeVR5
cGUpOwogICAgICAgICAgICBmbHVpZC5tZXJnZSgicmV2ZXJzZSIsIHRoYXQub3B0aW9ucywgZ2xv
YkRlZik7CiAgICAgICAgICAgIHRvZ28gPSBlbnRyeVR5cGUgPT09ICJmbHVpZC5lbXB0eVN1YmNv
bXBvbmVudCIgPwogICAgICAgICAgICAgICAgZmx1aWQuZW1wdHlTdWJjb21wb25lbnQoZW50cnku
b3B0aW9ucykgOiAKICAgICAgICAgICAgICAgIGZsdWlkLmludm9rZUdsb2JhbEZ1bmN0aW9uKGVu
dHJ5VHlwZSwgYXJncyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9nbyA9IGVudHJ5
LmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJldHVybmVkT3B0aW9u
cyA9IHRvZ28gPyB0b2dvLnJldHVybmVkT3B0aW9ucyA6IG51bGw7CiAgICAgICAgaWYgKHJldHVy
bmVkT3B0aW9ucykgewogICAgICAgICAgICBmbHVpZC5tZXJnZSh0aGF0Lm9wdGlvbnMubWVyZ2VQ
b2xpY3ksIHRoYXQub3B0aW9ucywgcmV0dXJuZWRPcHRpb25zKTsKICAgICAgICAgICAgaWYgKHJl
dHVybmVkT3B0aW9ucy5saXN0ZW5lcnMpIHsKICAgICAgICAgICAgICAgIGZsdWlkLm1lcmdlTGlz
dGVuZXJzKHRoYXQsIHRoYXQuZXZlbnRzLCByZXR1cm5lZE9wdGlvbnMubGlzdGVuZXJzKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9nbzsKICAgIH07CiAgICAKICAg
IC8qKiBJbml0aWFsaXNlIGFsbCB0aGUgInN1YmNvbXBvbmVudHMiIHdoaWNoIGFyZSBjb25maWd1
cmVkIHRvIGJlIGF0dGFjaGVkIHRvIAogICAgICogdGhlIHN1cHBsaWVkIHRvcC1sZXZlbCBjb21w
b25lbnQsIHdoaWNoIHNoYXJlIGEgcGFydGljdWxhciAiY2xhc3MgbmFtZSIuCiAgICAgKiBAcGFy
YW0ge0NvbXBvbmVudH0gdGhhdCBUaGUgdG9wLWxldmVsIGNvbXBvbmVudCBmb3Igd2hpY2ggc3Vi
LWNvbXBvbmVudHMgYXJlCiAgICAgKiB0byBiZSBpbnN0YW50aWF0ZWQuIEl0IGNvbnRhaW5zIHNw
ZWNpZmljYXRpb25zIGZvciB0aGVzZSBzdWJjb21wb25lbnRzIGluIGl0cwogICAgICogPGNvZGU+
b3B0aW9uczwvY29kZT4gc3RydWN0dXJlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFt
ZSBUaGUgImNsYXNzIG5hbWUiIG9yICJjYXRlZ29yeSIgZm9yIHRoZSBzdWJjb21wb25lbnRzIHRv
CiAgICAgKiBiZSBpbnN0YW50aWF0ZWQuIEEgY2xhc3MgbmFtZSBzcGVjaWZpZXMgYW4gb3ZlcmFs
bCAiZnVuY3Rpb24iIGZvciBhIGNsYXNzIG9mIAogICAgICogc3ViY29tcG9uZW50cyBhbmQgcmVw
cmVzZW50cyBhIGNhdGVnb3J5IHdoaWNoIGFjY2VwdCB0aGUgc2FtZSBzaWduYXR1cmUgb2YKICAg
ICAqIGluc3RhbnRpYXRpb24gYXJndW1lbnRzLgogICAgICogQHBhcmFtIHtBcnJheSBvZiBPYmpl
Y3R9IGFyZ3MgVGhlIGluc3RhbnRpYXRpb24gYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBlYWNo
IAogICAgICogY29uc3RydWN0ZWQgc3ViY29tcG9uZW50LiBUaGVzZSB3aWxsIHR5cGljYWxseSBi
ZSBtZW1iZXJzIGRlcml2ZWQgZnJvbSB0aGUKICAgICAqIHRvcC1sZXZlbCA8Y29kZT50aGF0PC9j
b2RlPiBvciBwZXJoYXBzIGdsb2JhbGx5IGRpc2NvdmVyZWQgZnJvbSBlbHNld2hlcmUuIE9uZQog
ICAgICogb2YgdGhlc2UgYXJndW1lbnRzIG1heSBiZSA8Y29kZT5mbHVpZC5DT01QT05FTlRfT1BU
SU9OUzwvY29kZT4gaW4gd2hpY2ggY2FzZSB0aGlzCiAgICAgKiBwbGFjZWhvbGRlciBhcmd1bWVu
dCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGluc3RhbmNlLXNwZWNpZmljIG9wdGlvbnMgY29uZmlndXJl
ZAogICAgICogaW50byB0aGUgbWVtYmVyIG9mIHRoZSB0b3AtbGV2ZWwgPGNvZGU+b3B0aW9uczwv
Y29kZT4gc3RydWN0dXJlIG5hbWVkIGZvciB0aGUKICAgICAqIDxjb2RlPmNsYXNzTmFtZTwvY29k
ZT4KICAgICAqIEByZXR1cm4ge0FycmF5IG9mIE9iamVjdH0gVGhlIGluc3RhbnRpYXRlZCBzdWJj
b21wb25lbnRzLCBvbmUgZm9yIGVhY2ggbWVtYmVyCiAgICAgKiBvZiA8Y29kZT50aGF0Lm9wdGlv
bnNbY2xhc3NOYW1lXTwvY29kZT4uCiAgICAgKi8KICAgIAogICAgZmx1aWQuaW5pdFN1YmNvbXBv
bmVudHMgPSBmdW5jdGlvbiAodGhhdCwgY2xhc3NOYW1lLCBhcmdzKSB7CiAgICAgICAgdmFyIGVu
dHJ5ID0gdGhhdC5vcHRpb25zW2NsYXNzTmFtZV07CiAgICAgICAgaWYgKCFlbnRyeSkgewogICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBlbnRyaWVzID0gJC5tYWtlQXJy
YXkoZW50cnkpOwogICAgICAgIHZhciBvcHRpbmRleCA9IC0xOwogICAgICAgIHZhciB0b2dvID0g
W107CiAgICAgICAgYXJncyA9ICQubWFrZUFycmF5KGFyZ3MpOwogICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBpZiAoYXJnc1tpXSA9PT0g
Zmx1aWQuQ09NUE9ORU5UX09QVElPTlMpIHsKICAgICAgICAgICAgICAgIG9wdGluZGV4ID0gaTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcy5s
ZW5ndGg7ICsraSkgewogICAgICAgICAgICBlbnRyeSA9IGVudHJpZXNbaV07CiAgICAgICAgICAg
IGlmIChvcHRpbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGFyZ3Nbb3B0aW5kZXhdID0g
ZW50cnkub3B0aW9uczsKICAgICAgICAgICAgfQogICAgICAgICAgICB0b2dvW2ldID0gZmx1aWQu
aW5pdFN1YmNvbXBvbmVudEltcGwodGhhdCwgZW50cnksIGFyZ3MpOwogICAgICAgIH0KICAgICAg
ICByZXR1cm4gdG9nbzsKICAgIH07CiAgICAgICAgCiAgICBmbHVpZC5pbml0U3ViY29tcG9uZW50
ID0gZnVuY3Rpb24gKHRoYXQsIGNsYXNzTmFtZSwgYXJncykgewogICAgICAgIHJldHVybiBmbHVp
ZC5pbml0U3ViY29tcG9uZW50cyh0aGF0LCBjbGFzc05hbWUsIGFyZ3MpWzBdOwogICAgfTsKCgog
IC8vICoqKiogVklFVy1ERVBFTkRFTlQgREVGSU5JVElPTlMgQkVMT1cgSEVSRQoKICAgIGZsdWlk
LmNoZWNrVHJ5Q2F0Y2hQYXJhbWV0ZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGxvY2F0
aW9uID0gd2luZG93LmxvY2F0aW9uIHx8IHsgc2VhcmNoOiAiIiwgcHJvdG9jb2w6ICJmaWxlOiIg
fTsKICAgICAgICB2YXIgR0VUUGFyYW1zID0gbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpLnNwbGl0
KCcmJyk7CiAgICAgICAgcmV0dXJuIGZsdWlkLmNvbnRhaW5zKEdFVFBhcmFtcywgIm5vdHJ5Y2F0
Y2giKTsKICAgIH07CiAgICAKICAgIGZsdWlkLm5vdHJ5Y2F0Y2ggPSBmbHVpZC5jaGVja1RyeUNh
dGNoUGFyYW1ldGVyKCk7CiAgICAKICAgIC8qKgogICAgICogRmV0Y2hlcyBhIHNpbmdsZSBjb250
YWluZXIgZWxlbWVudCBhbmQgcmV0dXJucyBpdCBhcyBhIGpRdWVyeS4KICAgICAqIAogICAgICog
QHBhcmFtIHtTdHJpbmd8fGpRdWVyeXx8ZWxlbWVudH0gY29udGFpbmVyU3BlYyBhbiBpZCBzdHJp
bmcsIGEgc2luZ2xlLWVsZW1lbnQgalF1ZXJ5LCBvciBhIERPTSBlbGVtZW50IHNwZWNpZnlpbmcg
YSB1bmlxdWUgY29udGFpbmVyCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZhbGxpYmxlIDxjb2Rl
PnRydWU8L2NvZGU+IGlmIGFuIGVtcHR5IGNvbnRhaW5lciBpcyB0byBiZSByZXBvcnRlZCBhcyBh
IHZhbGlkIGNvbmRpdGlvbgogICAgICogQHJldHVybiBhIHNpbmdsZS1lbGVtZW50IGpRdWVyeSBv
ZiBjb250YWluZXIKICAgICAqLwogICAgZmx1aWQuY29udGFpbmVyID0gZnVuY3Rpb24gKGNvbnRh
aW5lclNwZWMsIGZhbGxpYmxlKSB7CiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGZsdWlkLndyYXAo
Y29udGFpbmVyU3BlYyk7CiAgICAgICAgaWYgKGZhbGxpYmxlICYmICghY29udGFpbmVyIHx8IGNv
bnRhaW5lci5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg
IH0KICAgICAgICAKICAgICAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gaWYgd2UndmUgZ290IG1v
cmUgb3IgbGVzcyB0aGFuIG9uZSBlbGVtZW50LgogICAgICAgIGlmICghY29udGFpbmVyIHx8ICFj
b250YWluZXIuanF1ZXJ5IHx8IGNvbnRhaW5lci5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAg
aWYgKHR5cGVvZiAoY29udGFpbmVyU3BlYykgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAg
ICBjb250YWluZXJTcGVjID0gY29udGFpbmVyLnNlbGVjdG9yOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHZhciBjb3VudCA9IGNvbnRhaW5lci5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGNvbnRh
aW5lci5sZW5ndGggOiAwOwogICAgICAgICAgICBmbHVpZC5mYWlsKChjb3VudCA+IDEgPyAiTW9y
ZSB0aGFuIG9uZSAoIiArIGNvdW50ICsgIikgY29udGFpbmVyIGVsZW1lbnRzIHdlcmUiCiAgICAg
ICAgICAgICAgICAgICAgOiAiTm8gY29udGFpbmVyIGVsZW1lbnQgd2FzIikgKyAiIGZvdW5kIGZv
ciBzZWxlY3RvciAiICsgY29udGFpbmVyU3BlYyk7CiAgICAgICAgfQogICAgICAgIGlmICghZmx1
aWQuaXNET01Ob2RlKGNvbnRhaW5lclswXSkpIHsKICAgICAgICAgICAgZmx1aWQuZmFpbCgiZmx1
aWQuY29udGFpbmVyIHdhcyBzdXBwbGllZCBhIG5vbi1qUXVlcnlhYmxlIGVsZW1lbnQiKTsgIAog
ICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gY29udGFpbmVyOwogICAgfTsKICAgIAog
ICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IERPTSBCaW5kZXIgaW5zdGFuY2UsIHVzZWQgdG8g
bG9jYXRlIGVsZW1lbnRzIGluIHRoZSBET00gYnkgbmFtZS4KICAgICAqIAogICAgICogQHBhcmFt
IHtPYmplY3R9IGNvbnRhaW5lciB0aGUgcm9vdCBlbGVtZW50IGluIHdoaWNoIHRvIGxvY2F0ZSBu
YW1lZCBlbGVtZW50cwogICAgICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdG9ycyBhIGNvbGxlY3Rp
b24gb2YgbmFtZWQgalF1ZXJ5IHNlbGVjdG9ycwogICAgICovCiAgICBmbHVpZC5jcmVhdGVEb21C
aW5kZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBzZWxlY3RvcnMpIHsKICAgICAgICB2YXIgY2Fj
aGUgPSB7fSwgdGhhdCA9IHt9OwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIGNhY2hlS2V5KG5h
bWUsIHRoaXNDb250YWluZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmFsbG9jYXRlU2lt
cGxlSWQodGhpc0NvbnRhaW5lcikgKyAiLSIgKyBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVu
Y3Rpb24gcmVjb3JkKG5hbWUsIHRoaXNDb250YWluZXIsIHJlc3VsdCkgewogICAgICAgICAgICBj
YWNoZVtjYWNoZUtleShuYW1lLCB0aGlzQ29udGFpbmVyKV0gPSByZXN1bHQ7CiAgICAgICAgfQoK
ICAgICAgICB0aGF0LmxvY2F0ZSA9IGZ1bmN0aW9uIChuYW1lLCBsb2NhbENvbnRhaW5lcikgewog
ICAgICAgICAgICB2YXIgc2VsZWN0b3IsIHRoaXNDb250YWluZXIsIHRvZ287CiAgICAgICAgICAg
IAogICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tuYW1lXTsKICAgICAgICAgICAgdGhp
c0NvbnRhaW5lciA9IGxvY2FsQ29udGFpbmVyID8gbG9jYWxDb250YWluZXIgOiBjb250YWluZXI7
CiAgICAgICAgICAgIGlmICghdGhpc0NvbnRhaW5lcikgewogICAgICAgICAgICAgICAgZmx1aWQu
ZmFpbCgiRE9NIGJpbmRlciBpbnZva2VkIGZvciBzZWxlY3RvciAiICsgbmFtZSArICIgd2l0aG91
dCBjb250YWluZXIiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFzZWxlY3Rvcikg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNDb250YWluZXI7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlmICh0eXBlb2YgKHNlbGVjdG9yKSA9PT0gImZ1bmN0aW9uIikgewogICAgICAg
ICAgICAgICAgdG9nbyA9ICQoc2VsZWN0b3IuY2FsbChudWxsLCBmbHVpZC51bndyYXAodGhpc0Nv
bnRhaW5lcikpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRvZ28gPSAk
KHNlbGVjdG9yLCB0aGlzQ29udGFpbmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
dG9nby5nZXQoMCkgPT09IGRvY3VtZW50KSB7CiAgICAgICAgICAgICAgICB0b2dvID0gW107CiAg
ICAgICAgICAgICAgICAvL2ZsdWlkLmZhaWwoIlNlbGVjdG9yICIgKyBuYW1lICsgIiB3aXRoIHZh
bHVlICIgKyBzZWxlY3RvcnNbbmFtZV0gKwogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAi
IGRpZCBub3QgZmluZCBhbnkgZWxlbWVudHMgd2l0aCBjb250YWluZXIgIiArIGZsdWlkLmR1bXBF
bChjb250YWluZXIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXRvZ28uc2VsZWN0
b3IpIHsKICAgICAgICAgICAgICAgIHRvZ28uc2VsZWN0b3IgPSBzZWxlY3RvcjsKICAgICAgICAg
ICAgICAgIHRvZ28uY29udGV4dCA9IHRoaXNDb250YWluZXI7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgdG9nby5zZWxlY3Rvck5hbWUgPSBuYW1lOwogICAgICAgICAgICByZWNvcmQobmFtZSwg
dGhpc0NvbnRhaW5lciwgdG9nbyk7CiAgICAgICAgICAgIHJldHVybiB0b2dvOwogICAgICAgIH07
CiAgICAgICAgdGhhdC5mYXN0TG9jYXRlID0gZnVuY3Rpb24gKG5hbWUsIGxvY2FsQ29udGFpbmVy
KSB7CiAgICAgICAgICAgIHZhciB0aGlzQ29udGFpbmVyID0gbG9jYWxDb250YWluZXIgPyBsb2Nh
bENvbnRhaW5lciA6IGNvbnRhaW5lcjsKICAgICAgICAgICAgdmFyIGtleSA9IGNhY2hlS2V5KG5h
bWUsIHRoaXNDb250YWluZXIpOwogICAgICAgICAgICB2YXIgdG9nbyA9IGNhY2hlW2tleV07CiAg
ICAgICAgICAgIHJldHVybiB0b2dvID8gdG9nbyA6IHRoYXQubG9jYXRlKG5hbWUsIGxvY2FsQ29u
dGFpbmVyKTsKICAgICAgICB9OwogICAgICAgIHRoYXQuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIGNhY2hlID0ge307CiAgICAgICAgfTsKICAgICAgICB0aGF0LnJlZnJlc2ggPSBm
dW5jdGlvbiAobmFtZXMsIGxvY2FsQ29udGFpbmVyKSB7CiAgICAgICAgICAgIHZhciB0aGlzQ29u
dGFpbmVyID0gbG9jYWxDb250YWluZXIgPyBsb2NhbENvbnRhaW5lciA6IGNvbnRhaW5lcjsKICAg
ICAgICAgICAgaWYgKHR5cGVvZiBuYW1lcyA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAg
IG5hbWVzID0gW25hbWVzXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpc0NvbnRh
aW5lci5sZW5ndGggPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdGhpc0NvbnRhaW5l
ciA9IFt0aGlzQ29udGFpbmVyXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IHRoaXNDb250YWluZXIubGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgICAgICAg
ICB0aGF0LmxvY2F0ZShuYW1lc1tpXSwgdGhpc0NvbnRhaW5lcltqXSk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHRoYXQucmVzb2x2ZVBhdGhTZWdt
ZW50ID0gdGhhdC5sb2NhdGU7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoYXQ7CiAgICB9Owog
ICAgCiAgICAvKiogRXhwZWN0IHRoYXQgalF1ZXJ5IHNlbGVjdG9yIHF1ZXJ5IGhhcyByZXN1bHRl
ZCBpbiBhIG5vbi1lbXB0eSBzZXQgb2YgCiAgICAgKiByZXN1bHRzLiBJZiBub25lIGFyZSBmb3Vu
ZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgd2l0aCBhIGRpYWdub3N0aWMgbWVzc2FnZSwgCiAg
ICAgKiB3aXRoIHRoZSBzdXBwbGllZCBtZXNzYWdlIHByZXBlbmRlZC4KICAgICAqLwogICAgZmx1
aWQuZXhwZWN0RmlsbGVkU2VsZWN0b3IgPSBmdW5jdGlvbiAocmVzdWx0LCBtZXNzYWdlKSB7CiAg
ICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID09PSAwICYmIHJlc3VsdC5qcXVlcnkp
IHsKICAgICAgICAgICAgZmx1aWQuZmFpbChtZXNzYWdlICsgIjogc2VsZWN0b3IgXCIiICsgcmVz
dWx0LnNlbGVjdG9yICsgIlwiIHdpdGggbmFtZSAiICsgcmVzdWx0LnNlbGVjdG9yTmFtZSArCiAg
ICAgICAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCBubyByZXN1bHRzIGluIGNvbnRleHQgIiAr
IGZsdWlkLmR1bXBFbChyZXN1bHQuY29udGV4dCkpOwogICAgICAgIH0KICAgIH07CiAgICAKICAg
IC8qKiAKICAgICAqIFRoZSBjZW50cmFsIGluaXRpYWxpYXRpb24gbWV0aG9kIGNhbGxlZCBhcyB0
aGUgZmlyc3QgYWN0IG9mIGV2ZXJ5IEZsdWlkCiAgICAgKiBjb21wb25lbnQuIFRoaXMgZnVuY3Rp
b24gYXV0b21hdGljYWxseSBtZXJnZXMgdXNlciBvcHRpb25zIHdpdGggZGVmYXVsdHMsCiAgICAg
KiBhdHRhY2hlcyBhIERPTSBCaW5kZXIgdG8gdGhlIGluc3RhbmNlLCBhbmQgY29uZmlndXJlcyBl
dmVudHMuCiAgICAgKiAKICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21wb25lbnROYW1lIFRoZSB1
bmlxdWUgIm5hbWUiIG9mIHRoZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdXNlZAogICAgICog
dG8gZmV0Y2ggdGhlIGRlZmF1bHQgb3B0aW9ucyBmcm9tIHN0b3JlLiBCeSByZWNvbW1lbmRhdGlv
biwgdGhpcyBzaG91bGQgYmUgdGhlIGdsb2JhbAogICAgICogbmFtZSBvZiB0aGUgY29tcG9uZW50
J3MgY3JlYXRvciBmdW5jdGlvbi4KICAgICAqIEBwYXJhbSB7alF1ZXJ5YWJsZX0gY29udGFpbmVy
IEEgc3BlY2lmaWVyIGZvciB0aGUgc2luZ2xlIHJvb3QgImNvbnRhaW5lciBub2RlIiBpbiB0aGUK
ICAgICAqIERPTSB3aGljaCB3aWxsIGhvdXNlIGFsbCB0aGUgbWFya3VwIGZvciB0aGlzIGNvbXBv
bmVudC4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1c2VyT3B0aW9ucyBUaGUgY29uZmlndXJhdGlv
biBvcHRpb25zIGZvciB0aGlzIGNvbXBvbmVudC4KICAgICAqLwogICAgIC8vIDR0aCBhcmd1bWVu
dCBpcyBOT1QgU1VQUE9SVEVELCBzZWUgY29tbWVudHMgZm9yIGluaXRMaXR0bGVDb21wb25lbnQK
ICAgIGZsdWlkLmluaXRWaWV3ID0gZnVuY3Rpb24gKGNvbXBvbmVudE5hbWUsIGNvbnRhaW5lciwg
dXNlck9wdGlvbnMsIGxvY2FsT3B0aW9ucykgewogICAgICAgIGZsdWlkLmV4cGVjdEZpbGxlZFNl
bGVjdG9yKGNvbnRhaW5lciwgIkVycm9yIGluc3RhbnRpYXRpbmcgY29tcG9uZW50IHdpdGggbmFt
ZSBcIiIgKyBjb21wb25lbnROYW1lKTsKICAgICAgICBjb250YWluZXIgPSBmbHVpZC5jb250YWlu
ZXIoY29udGFpbmVyLCB0cnVlKTsKICAgICAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgdmFyIHRoYXQgPSBmbHVpZC5pbml0TGl0
dGxlQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIHVzZXJPcHRpb25zLCBsb2NhbE9wdGlvbnMgfHwg
e2dyYWRlTmFtZXM6IFsiZmx1aWQudmlld0NvbXBvbmVudCJdfSk7IAogICAgICAgIHRoYXQuY29u
dGFpbmVyID0gY29udGFpbmVyOwogICAgICAgIGZsdWlkLmluaXREb21CaW5kZXIodGhhdCk7Cgog
ICAgICAgIHJldHVybiB0aGF0OwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEg
bmV3IERPTSBCaW5kZXIgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGFuZCBt
aXhlcyBpdCBpbi4KICAgICAqIAogICAgICogQHBhcmFtIHtPYmplY3R9IHRoYXQgdGhlIGNvbXBv
bmVudCBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIG5ldyBET00gQmluZGVyIHRvCiAgICAgKi8KICAg
IGZsdWlkLmluaXREb21CaW5kZXIgPSBmdW5jdGlvbiAodGhhdCkgewogICAgICAgIHRoYXQuZG9t
ID0gZmx1aWQuY3JlYXRlRG9tQmluZGVyKHRoYXQuY29udGFpbmVyLCB0aGF0Lm9wdGlvbnMuc2Vs
ZWN0b3JzKTsKICAgICAgICB0aGF0LmxvY2F0ZSA9IHRoYXQuZG9tLmxvY2F0ZTsgICAgICAKICAg
IH07CgogICAgLy8gRE9NIFV0aWxpdGllcy4KICAgIAogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUg
bmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCB0aGF0IHBhc3NlcyB0aGUgdGVzdAogICAg
ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IERPTSBlbGVtZW50CiAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSB0ZXN0IEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYW4gZWxlbWVudCBhcyBhIHBhcmFt
ZXRlciBhbmQgcmV0dXJuIHRydWUgb3IgZmFsc2UgZm9yIHNvbWUgdGVzdAogICAgICovCiAgICBm
bHVpZC5maW5kQW5jZXN0b3IgPSBmdW5jdGlvbiAoZWxlbWVudCwgdGVzdCkgewogICAgICAgIGVs
ZW1lbnQgPSBmbHVpZC51bndyYXAoZWxlbWVudCk7CiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHsK
ICAgICAgICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVu
dE5vZGU7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgalF1
ZXJ5IG9iamVjdCBnaXZlbiB0aGUgaWQgb2YgYSBET00gbm9kZS4gSW4gdGhlIGNhc2UgdGhlIGVs
ZW1lbnQKICAgICAqIGlzIG5vdCBmb3VuZCwgd2lsbCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KICAg
ICAqLwogICAgZmx1aWQuakJ5SWQgPSBmdW5jdGlvbiAoaWQsIGRva2t1bWVudCkgewogICAgICAg
IGRva2t1bWVudCA9IGRva2t1bWVudCAmJiBkb2trdW1lbnQubm9kZVR5cGUgPT09IDkgPyBkb2tr
dW1lbnQgOiBkb2N1bWVudDsKICAgICAgICB2YXIgZWxlbWVudCA9IGZsdWlkLmJ5SWQoaWQsIGRv
a2t1bWVudCk7CiAgICAgICAgdmFyIHRvZ28gPSBlbGVtZW50ID8gJChlbGVtZW50KSA6IFtdOwog
ICAgICAgIHRvZ28uc2VsZWN0b3IgPSAiIyIgKyBpZDsKICAgICAgICB0b2dvLmNvbnRleHQgPSBk
b2trdW1lbnQ7CiAgICAgICAgcmV0dXJuIHRvZ287CiAgICB9OwogICAgCiAgICAvKioKICAgICAq
IFJldHVybnMgYW4gRE9NIGVsZW1lbnQgcXVpY2tseSwgZ2l2ZW4gYW4gaWQKICAgICAqIAogICAg
ICogQHBhcmFtIHtPYmplY3R9IGlkIHRoZSBpZCBvZiB0aGUgRE9NIG5vZGUgdG8gZmluZAogICAg
ICogQHBhcmFtIHtEb2N1bWVudH0gZG9ra3VtZW50IHRoZSBkb2N1bWVudCBpbiB3aGljaCBpdCBp
cyB0byBiZSBmb3VuZCAoaWYgbGVmdCBlbXB0eSwgdXNlIHRoZSBjdXJyZW50IGRvY3VtZW50KQog
ICAgICogQHJldHVybiBUaGUgRE9NIGVsZW1lbnQgd2l0aCB0aGlzIGlkLCBvciBudWxsLCBpZiBu
b25lIGV4aXN0cyBpbiB0aGUgZG9jdW1lbnQuCiAgICAgKi8KICAgIGZsdWlkLmJ5SWQgPSBmdW5j
dGlvbiAoaWQsIGRva2t1bWVudCkgewogICAgICAgIGRva2t1bWVudCA9IGRva2t1bWVudCAmJiBk
b2trdW1lbnQubm9kZVR5cGUgPT09IDkgPyBkb2trdW1lbnQgOiBkb2N1bWVudDsKICAgICAgICB2
YXIgZWwgPSBkb2trdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgIGlmIChlbCkgewog
ICAgICAgIC8vIFVzZSBlbGVtZW50IGlkIHByb3BlcnR5IGhlcmUgcmF0aGVyIHRoYW4gYXR0cmli
dXRlLCB0byB3b3JrIGFyb3VuZCBGTFVJRC0zOTUzCiAgICAgICAgICAgIGlmIChlbC5pZCAhPT0g
aWQpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmZhaWwoIlByb2JsZW0gaW4gZG9jdW1lbnQgc3Ry
dWN0dXJlIC0gcGlja2VkIHVwIGVsZW1lbnQgIiArCiAgICAgICAgICAgICAgICAgICAgZmx1aWQu
ZHVtcEVsKGVsKSArICIgZm9yIGlkICIgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgIiB3aXRo
b3V0IHRoaXMgaWQgLSBtb3N0IGxpa2VseSB0aGUgZWxlbWVudCBoYXMgYSBuYW1lIHdoaWNoIGNv
bmZsaWN0cyB3aXRoIHRoaXMgaWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4g
ZWw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQog
ICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSBh
IGpRdWVyeSBvciBwdXJlIERPTSBlbGVtZW50LgogICAgICogCiAgICAgKiBAcGFyYW0ge2pRdWVy
eXx8RWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byByZXR1cm4gdGhlIGlkIGF0dHJpYnV0
ZSBmb3IKICAgICAqLwogICAgZmx1aWQuZ2V0SWQgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogICAg
ICAgIHJldHVybiBmbHVpZC51bndyYXAoZWxlbWVudCkuaWQ7CiAgICB9OwogICAgCiAgICAvKiog
CiAgICAgKiBBbGxvY2F0ZSBhbiBpZCB0byB0aGUgc3VwcGxpZWQgZWxlbWVudCBpZiBpdCBoYXMg
bm9uZSBhbHJlYWR5LCBieSBhIHNpbXBsZQogICAgICogc2NoZW1lIHJlc3VsdGluZyBpbiBpZHMg
ImZsdWlkLWlkLW5ubm4iIHdoZXJlIG5ubm4gaXMgYW4gaW5jcmVhc2luZyBpbnRlZ2VyLgogICAg
ICovCiAgICAKICAgIGZsdWlkLmFsbG9jYXRlU2ltcGxlSWQgPSBmdW5jdGlvbiAoZWxlbWVudCkg
ewogICAgICAgIHZhciBzaW1wbGVJZCA9ICJmbHVpZC1pZC0iICsgZmx1aWQuYWxsb2NhdGVHdWlk
KCk7CiAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAgICAgICAgIHJldHVybiBzaW1wbGVJZDsK
ICAgICAgICB9CiAgICAgICAgZWxlbWVudCA9IGZsdWlkLnVud3JhcChlbGVtZW50KTsKICAgICAg
ICBpZiAoIWVsZW1lbnQuaWQpIHsKICAgICAgICAgICAgZWxlbWVudC5pZCA9IHNpbXBsZUlkOwog
ICAgICAgIH0KICAgICAgICByZXR1cm4gZWxlbWVudC5pZDsKICAgIH07CiAgICAKCiAgICAvLyBN
ZXNzYWdlIHJlc29sdXRpb24gYW5kIHRlbXBsYXRpbmcKICAgCiAgIAogICAgLyoqCiAgICAqIENv
bnZlcnRzIGEgc3RyaW5nIHRvIGEgcmVnZXhwIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyBnaXZl
biBpbiBwYXJhbWV0ZXJzCiAgICAqIEBwYXJhbSB7U3RyaW5nfSBhIHN0cmluZyB0aGF0IGhhcyB0
byBiZSB0dXJuZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgKiBAcGFyYW0ge1N0cmlu
Z30gdGhlIGZsYWdzIHRvIHByb3ZpZGUgdG8gdGhlIHJlZyBleHAgCiAgICAqLwogICAgZmx1aWQu
c3RyaW5nVG9SZWdFeHAgPSBmdW5jdGlvbiAoc3RyLCBmbGFncykgewogICAgICAgIHJldHVybiBu
ZXcgUmVnRXhwKHN0ci5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAiXFwk
JiIpLCBmbGFncyk7CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFNpbXBsZSBzdHJpbmcgdGVt
cGxhdGUgc3lzdGVtLiAKICAgICAqIFRha2VzIGEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcg
dG9rZW5zIGluIHRoZSBmb3JtIG9mICIldmFsdWUiLgogICAgICogUmV0dXJucyBhIG5ldyBzdHJp
bmcgd2l0aCB0aGUgdG9rZW5zIHJlcGxhY2VkIGJ5IHRoZSBzcGVjaWZpZWQgdmFsdWVzLgogICAg
ICogS2V5cyBhbmQgdmFsdWVzIGNhbiBiZSBvZiBhbnkgZGF0YSB0eXBlIHRoYXQgY2FuIGJlIGNv
ZXJjZWQgaW50byBhIHN0cmluZy4gQXJyYXlzIHdpbGwgd29yayBoZXJlIGFzIHdlbGwuCiAgICAg
KiAKICAgICAqIEBwYXJhbSB7U3RyaW5nfSAgICB0ZW1wbGF0ZSAgICBhIHN0cmluZyAoY2FuIGJl
IEhUTUwpIHRoYXQgY29udGFpbnMgdG9rZW5zIGVtYmVkZGVkIGludG8gaXQKICAgICAqIEBwYXJh
bSB7b2JqZWN0fSAgICB2YWx1ZXMgICAgICAgIGEgY29sbGVjdGlvbiBvZiB0b2tlbiBrZXlzIGFu
ZCB2YWx1ZXMKICAgICAqLwogICAgZmx1aWQuc3RyaW5nVGVtcGxhdGUgPSBmdW5jdGlvbiAodGVt
cGxhdGUsIHZhbHVlcykgewogICAgICAgIHZhciBuZXdTdHJpbmcgPSB0ZW1wbGF0ZTsKICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7CiAgICAgICAgICAgIHZhciByZSA9IGZsdWlkLnN0
cmluZ1RvUmVnRXhwKCIlIiArIGtleSwgImciKTsKICAgICAgICAgICAgbmV3U3RyaW5nID0gbmV3
U3RyaW5nLnJlcGxhY2UocmUsIHZhbHVlc1trZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IG5ld1N0cmluZzsKICAgIH07CiAgICAKCiAgICBmbHVpZC5tZXNzYWdlUmVzb2x2ZXIgPSBmdW5j
dGlvbiAob3B0aW9ucykgewogICAgICAgIHZhciB0aGF0ID0gZmx1aWQuaW5pdExpdHRsZUNvbXBv
bmVudCgiZmx1aWQubWVzc2FnZVJlc29sdmVyIiwgb3B0aW9ucyk7CiAgICAgICAgdGhhdC5tZXNz
YWdlQmFzZSA9IHRoYXQub3B0aW9ucy5wYXJzZUZ1bmModGhhdC5vcHRpb25zLm1lc3NhZ2VCYXNl
KTsKICAgICAgICAKICAgICAgICB0aGF0Lmxvb2t1cCA9IGZ1bmN0aW9uIChtZXNzYWdlY29kZXMp
IHsKICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gZmx1aWQubWVzc2FnZVJlc29sdmVyLnJlc29s
dmVPbmUodGhhdC5tZXNzYWdlQmFzZSwgbWVzc2FnZWNvZGVzKTsKICAgICAgICAgICAgaWYgKHJl
c29sdmVkID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmbHVpZC5maW5k
KHRoYXQub3B0aW9ucy5wYXJlbnRzLCBmdW5jdGlvbiAocGFyZW50KSB7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudC5sb29rdXAobWVzc2FnZWNvZGVzKTsKICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHt0ZW1wbGF0
ZTogcmVzb2x2ZWQsIHJlc29sdmVGdW5jOiB0aGF0Lm9wdGlvbnMucmVzb2x2ZUZ1bmN9OwogICAg
ICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGF0LnJlc29sdmUgPSBmdW5jdGlvbiAobWVz
c2FnZWNvZGVzLCBhcmdzKSB7CiAgICAgICAgICAgIGlmICghbWVzc2FnZWNvZGVzKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gIltObyBtZXNzYWdlY29kZXMgcHJvdmlkZWRdIjsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBtZXNzYWdlY29kZXMgPSBmbHVpZC5tYWtlQXJyYXkobWVzc2FnZWNv
ZGVzKTsKICAgICAgICAgICAgdmFyIGxvb2tlZCA9IHRoYXQubG9va3VwKG1lc3NhZ2Vjb2Rlcyk7
CiAgICAgICAgICAgIHJldHVybiBsb29rZWQgPyBsb29rZWQucmVzb2x2ZUZ1bmMobG9va2VkLnRl
bXBsYXRlLCBhcmdzKSA6CiAgICAgICAgICAgICAgICAiW01lc3NhZ2Ugc3RyaW5nIGZvciBrZXkg
IiArIG1lc3NhZ2Vjb2Rlc1swXSArICIgbm90IGZvdW5kXSI7CiAgICAgICAgfTsKICAgICAgICAK
ICAgICAgICByZXR1cm4gdGhhdDsgIAogICAgfTsKICAgIAogICAgZmx1aWQuZGVmYXVsdHMoImZs
dWlkLm1lc3NhZ2VSZXNvbHZlciIsIHsKICAgICAgICBtZXJnZVBvbGljeTogewogICAgICAgICAg
ICBtZXNzYWdlQmFzZTogInByZXNlcnZlIiAgCiAgICAgICAgfSwKICAgICAgICByZXNvbHZlRnVu
YzogZmx1aWQuc3RyaW5nVGVtcGxhdGUsCiAgICAgICAgcGFyc2VGdW5jOiBmbHVpZC5pZGVudGl0
eSwKICAgICAgICBtZXNzYWdlQmFzZToge30sCiAgICAgICAgcGFyZW50czogW10KICAgIH0pOwog
ICAgCiAgICBmbHVpZC5tZXNzYWdlUmVzb2x2ZXIucmVzb2x2ZU9uZSA9IGZ1bmN0aW9uIChtZXNz
YWdlQmFzZSwgbWVzc2FnZWNvZGVzKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNz
YWdlY29kZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgdmFyIGNvZGUgPSBtZXNzYWdlY29k
ZXNbaV07CiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZUJhc2VbY29kZV07CiAgICAg
ICAgICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVy
biBtZXNzYWdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgICAgICAgIAogICAg
LyoqIENvbnZlcnRzIGEgZGF0YSBzdHJ1Y3R1cmUgY29uc2lzdGluZyBvZiBhIG1hcHBpbmcgb2Yg
a2V5cyB0byBtZXNzYWdlIHN0cmluZ3MsCiAgICAgKiBpbnRvIGEgIm1lc3NhZ2VMb2NhdG9yIiBm
dW5jdGlvbiB3aGljaCBtYXBzIGFuIGFycmF5IG9mIG1lc3NhZ2UgY29kZXMsIHRvIGJlIAogICAg
ICogdHJpZWQgaW4gc2VxdWVuY2UgdW50aWwgYSBrZXkgaXMgZm91bmQsIGFuZCBhbiBhcnJheSBv
ZiBzdWJzdGl0dXRpb24gYXJndW1lbnRzLAogICAgICogaW50byBhIHN1YnN0aXR1dGVkIG1lc3Nh
Z2Ugc3RyaW5nLgogICAgICovCiAgICBmbHVpZC5tZXNzYWdlTG9jYXRvciA9IGZ1bmN0aW9uICht
ZXNzYWdlQmFzZSwgcmVzb2x2ZUZ1bmMpIHsKICAgICAgICB2YXIgcmVzb2x2ZXIgPSBmbHVpZC5t
ZXNzYWdlUmVzb2x2ZXIoe21lc3NhZ2VCYXNlOiBtZXNzYWdlQmFzZSwgcmVzb2x2ZUZ1bmM6IHJl
c29sdmVGdW5jfSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlY29kZXMsIGFyZ3Mp
IHsKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUobWVzc2FnZWNvZGVzLCBhcmdz
KTsKICAgICAgICB9OwogICAgfTsKCn0pKGpRdWVyeSwgZmx1aWRfMV80KTsKXxAPdGV4dC9qYXZh
c2NyaXB01AUGBwhPUFFSXxBLaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2Zy
YW1ld29yay9jb3JlL2pzL0ZsdWlkRE9NVXRpbGl0aWVzLmpzTxEEJmJwbGlzdDAw1AECAwQFBmJj
WCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAbMTJISUpLTE1O
T1BRUlNUVVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJS
JDdSJDNTJDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagByABYAbgAYQ
AdMjECQlJidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QS2h0dHA6Ly9mbHVpZHByb2plY3Qu
b3JnL3JlbGVhc2VzLzEuNC9mcmFtZXdvcmsvY29yZS9qcy9GbHVpZERPTVV0aWxpdGllcy5qc9Iq
KywtWiRjbGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiLi9VTlNVUkxYTlNPYmplY3QjQbjRAC8HvF4Q
yNMzNBA1PkdXTlMua2V5c1pOUy5vYmplY3RzqDY3ODk6Ozw9gAmACoALgAyADYAOgA+AEKg/QEFC
Q0RFRoARgBKAE4AUgBWAFoAXgBiAGVZTZXJ2ZXJcQ29udGVudC1UeXBlVEV0YWddTGFzdC1Nb2Rp
ZmllZFREYXRlXUFjY2VwdC1SYW5nZXNeQ29udGVudC1MZW5ndGhaQ29ubmVjdGlvbl8QFkFwYWNo
ZS8yLjIuMTUgKENlbnRPUylfEA90ZXh0L2phdmFzY3JpcHRfEBsiNDQxZTA2LTEzNDgtNGFmMzNk
MDEzZTQwMCJfEB1UaHUsIDEzIE9jdCAyMDExIDIwOjE2OjE2IEdNVF8QHVdlZCwgMTIgTWFyIDIw
MTQgMjA6NTA6NTUgR01UVWJ5dGVzVDQ5MzZVY2xvc2XSKitZWlxOU0RpY3Rpb25hcnmiWS8RE0hf
EA90ZXh0L2phdmFzY3JpcHTSKiteX18QEU5TSFRUUFVSTFJlc3BvbnNlo2BhL18QEU5TSFRUUFVS
TFJlc3BvbnNlXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRZGVfEBNXZWJSZXNvdXJj
ZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBXAF0AeAB7AH8AggCFAIgAjACPAJYAmQCcAJ8AogCl
AKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9AMQAzADYANoA3ADeASwBMQE8AUUBSwFOAVQBXQFmAWgB
bwF3AYIBiwGNAY8BkQGTAZUBlwGZAZsBpAGmAagBqgGsAa4BsAGyAbQBtgG9AcoBzwHdAeIB8AH/
AgoCIwI1AlMCcwKTApkCngKkAqkCtgK5ArwCzgLTAucC6wL/Aw0DHwMiAzgAAAAAAAACAQAAAAAA
AABmAAAAAAAAAAAAAAAAAAADOk8RE0gvKgpDb3B5cmlnaHQgMjAwOC0yMDEwIFVuaXZlcnNpdHkg
b2YgQ2FtYnJpZGdlCkNvcHlyaWdodCAyMDA4LTIwMDkgVW5pdmVyc2l0eSBvZiBUb3JvbnRvCgpM
aWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCksIFZl
cnNpb24gMi4wIG9yIHRoZSBOZXcKQlNEIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVDTCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2UgYXQK
aHR0cHM6Ly9naXRodWIuY29tL2ZsdWlkLXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9JbmZ1
c2lvbi1MSUNFTlNFLnR4dAoqLwoKLy8gRGVjbGFyZSBkZXBlbmRlbmNpZXMKLypnbG9iYWwgZmx1
aWRfMV80OnRydWUsIGpRdWVyeSAqLwoKLy8gSlNMaW50IG9wdGlvbnMgCi8qanNsaW50IHdoaXRl
OiB0cnVlLCBmdW5jaW52b2tlOiB0cnVlLCB1bmRlZjogdHJ1ZSwgbmV3Y2FwOiB0cnVlLCBub21l
bjogdHJ1ZSwgcmVnZXhwOiB0cnVlLCBiaXR3aXNlOiB0cnVlLCBicm93c2VyOiB0cnVlLCBmb3Jp
bjogdHJ1ZSwgbWF4ZXJyOiAxMDAsIGluZGVudDogNCAqLwoKdmFyIGZsdWlkXzFfNCA9IGZsdWlk
XzFfNCB8fCB7fTsKCihmdW5jdGlvbiAoJCwgZmx1aWQpIHsKICAgIAogICAgZmx1aWQuZG9tID0g
Zmx1aWQuZG9tIHx8IHt9OwogICAgCiAgICAvLyBOb2RlIHdhbGtlciBmdW5jdGlvbiBmb3IgaXRl
cmF0ZURvbS4KICAgIHZhciBnZXROZXh0Tm9kZSA9IGZ1bmN0aW9uIChpdGVyYXRvcikgewogICAg
ICAgIGlmIChpdGVyYXRvci5ub2RlLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgaXRlcmF0b3Iu
bm9kZSA9IGl0ZXJhdG9yLm5vZGUuZmlyc3RDaGlsZDsKICAgICAgICAgICAgaXRlcmF0b3IuZGVw
dGggKz0gMTsKICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yOwogICAgICAgIH0KICAgICAgICB3
aGlsZSAoaXRlcmF0b3Iubm9kZSkgewogICAgICAgICAgICBpZiAoaXRlcmF0b3Iubm9kZS5uZXh0
U2libGluZykgewogICAgICAgICAgICAgICAgaXRlcmF0b3Iubm9kZSA9IGl0ZXJhdG9yLm5vZGUu
bmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaXRlcmF0b3Iubm9kZSA9IGl0ZXJhdG9yLm5vZGUucGFyZW50Tm9kZTsK
ICAgICAgICAgICAgaXRlcmF0b3IuZGVwdGggLT0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBXYWxrcyB0aGUgRE9NLCBhcHBs
eWluZyB0aGUgc3BlY2lmaWVkIGFjY2VwdG9yIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudC4KICAg
ICAqIFRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgYWNjZXB0b3IsIGFsbG93aW5nIGZv
ciBxdWljayBkZWxldGlvbiBvZiBlbGVtZW50cyBhbmQgdGhlaXIgY2hpbGRyZW4uCiAgICAgKiBS
ZXR1cm4gImRlbGV0ZSIgZnJvbSB5b3VyIGFjY2VwdG9yIGZ1bmN0aW9uIGlmIHlvdSB3YW50IHRv
IGRlbGV0ZSB0aGUgZWxlbWVudCBpbiBxdWVzdGlvbi4KICAgICAqIFJldHVybiAic3RvcCIgdG8g
dGVybWluYXRlIGl0ZXJhdGlvbi4gCiAgICAgCiAgICAgKiBJbXBsZW1lbnRhdGlvbiBub3RlIC0g
dGhpcyB1dGlsaXR5IGV4aXN0cyBtYWlubHkgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIEl0IHdh
cyBsYXN0IHRlc3RlZAogICAgICogY2FyZWZ1bGx5IHNvbWUgdGltZSBhZ28gKGFyb3VuZCBqUXVl
cnkgMS4yKSBidXQgYXQgdGhhdCB0aW1lIHdhcyBhcm91bmQgMy00eCBmYXN0ZXIgYXQgcmF3IERP
TQogICAgICogZmlsdHJhdGlvbiB0YXNrcyB0aGFuIHRoZSBqUXVlcnkgZXF1aXZhbGVudHMsIHdo
aWNoIHdhcyBhbiBpbXBvcnRhbnQgc291cmNlIG9mIHBlcmZvcm1hbmNlIGxvc3MgaW4gdGhlCiAg
ICAgKiBSZW9yZGVyZXIgY29tcG9uZW50LiBHZW5lcmFsIGNsaWVudHMgb2YgdGhlIGZyYW1ld29y
ayBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIHdpdGggY2F1dGlvbiBpZiBhdCBhbGwsIGFuZAogICAg
ICogdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBzaG91bGQgYmUgcmVhc3Nlc3NlZCB3aGVuIHdlIGhh
dmUgdGltZS4gCiAgICAgKiAKICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSB0aGUgbm9kZSB0
byBzdGFydCB3YWxraW5nIGZyb20KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFjY2VwdG9yIHRo
ZSBmdW5jdGlvbiB0byBpbnZva2Ugd2l0aCBlYWNoIERPTSBlbGVtZW50CiAgICAgKiBAcGFyYW0g
e0Jvb2xlYW59IGFsbG5vZGVzIFVzZSA8Y29kZT50cnVlPC9jb2RlPiB0byBjYWxsIGFjY2VwdG9y
IG9uIGFsbCBub2RlcywgCiAgICAgKiByYXRoZXIgdGhhbiBqdXN0IGVsZW1lbnQgbm9kZXMgKHR5
cGUgMSkKICAgICAqLwogICAgZmx1aWQuZG9tLml0ZXJhdGVEb20gPSBmdW5jdGlvbiAobm9kZSwg
YWNjZXB0b3IsIGFsbE5vZGVzKSB7CiAgICAgICAgdmFyIGN1cnJlbnROb2RlID0ge25vZGU6IG5v
ZGUsIGRlcHRoOiAwfTsKICAgICAgICB2YXIgcHJldk5vZGUgPSBub2RlOwogICAgICAgIHZhciBj
b25kaXRpb247CiAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlLm5vZGUgIT09IG51bGwgJiYgY3Vy
cmVudE5vZGUuZGVwdGggPj0gMCAmJiBjdXJyZW50Tm9kZS5kZXB0aCA8IGZsdWlkLmRvbS5pdGVy
YXRlRG9tLkRPTV9CQUlMX0RFUFRIKSB7CiAgICAgICAgICAgIGNvbmRpdGlvbiA9IG51bGw7CiAg
ICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlLm5vZGVUeXBlID09PSAxIHx8IGFsbE5vZGVz
KSB7CiAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBhY2NlcHRvcihjdXJyZW50Tm9kZS5ub2Rl
LCBjdXJyZW50Tm9kZS5kZXB0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvbmRp
dGlvbikgewogICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gImRlbGV0ZSIpIHsKICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
Y3VycmVudE5vZGUubm9kZSk7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubm9kZSA9
IHByZXZOb2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoY29u
ZGl0aW9uID09PSAic3RvcCIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudE5v
ZGUubm9kZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwcmV2
Tm9kZSA9IGN1cnJlbnROb2RlLm5vZGU7CiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gZ2V0TmV4
dE5vZGUoY3VycmVudE5vZGUpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIFdvcmsgYXJv
dW5kIElFIGNpcmN1bGFyIERPTSBpc3N1ZS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXggRE9NIGRl
cHRoIG9uIElFLgogICAgLy8gaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS9tczc2MTM5MihWUy44NSkuYXNweAogICAgZmx1aWQuZG9tLml0ZXJhdGVEb20uRE9NX0JBSUxf
REVQVEggPSAyNTY7CiAgICAKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQg
Y29udGFpbmVyIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQgb2YgY29udGFpbmVlLgogICAgICogCiAg
ICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciB0aGUgcG90ZW50aWFsIHBhcmVudAogICAg
ICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZWUgdGhlIGNoaWxkIGluIHF1ZXN0aW9uCiAgICAg
Ki8KICAgIGZsdWlkLmRvbS5pc0NvbnRhaW5lciA9IGZ1bmN0aW9uIChjb250YWluZXIsIGNvbnRh
aW5lZSkgewogICAgICAgIGZvciAoOyBjb250YWluZWU7IGNvbnRhaW5lZSA9IGNvbnRhaW5lZS5w
YXJlbnROb2RlKSB7CiAgICAgICAgICAgIGlmIChjb250YWluZXIgPT09IGNvbnRhaW5lZSkgewog
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgICAgIAogICAgLyoqIFJldHVybiB0aGUgZWxlbWVu
dCB0ZXh0IGZyb20gdGhlIHN1cHBsaWVkIERPTSBub2RlIGFzIGEgc2luZ2xlIFN0cmluZy4KICAg
ICAqIEltcGxlbWVudGF0aW9uIG5vdGUgLSB0aGlzIGlzIGEgc3BlY2lhbC1wdXJwb3NlIHV0aWxp
dHkgdXNlZCBpbiB0aGUgZnJhbWV3b3JrIGluIGp1c3Qgb25lCiAgICAgKiBwb3NpdGlvbiBpbiB0
aGUgUmVvcmRlcmVyLiBJdCBvbmx5IHBlcmZvcm1zIGEgInNoYWxsb3ciIHRyYXZlcnNhbCBvZiB0
aGUgdGV4dCBhbmQgd2FzIGludGVuZGVkCiAgICAgKiBhcyBhIHF1aWNrIGFuZCBkaXJ0eSBtZWFu
cyBvZiBleHRyYWN0aW5nIGVsZW1lbnQgbGFiZWxzIHdoZXJlIHRoZSB1c2VyIGhhZCBub3QgZXhw
bGljaXRseSBwcm92aWRlZCBvbmUuCiAgICAgKiBJdCBzaG91bGQgbm90IGJlIHVzZWQgYnkgZ2Vu
ZXJhbCB1c2VycyBvZiB0aGUgZnJhbWV3b3JrIGFuZCBpdHMgcHJlc2VuY2UgaGVyZSBuZWVkcyB0
byBiZSAKICAgICAqIHJlYXNzZXNzZWQuCiAgICAgKi8KICAgIGZsdWlkLmRvbS5nZXRFbGVtZW50
VGV4dCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAgdmFyIG5vZGVzID0gZWxlbWVudC5j
aGlsZE5vZGVzOwogICAgICAgIHZhciB0ZXh0ID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICB2YXIgY2hpbGQgPSBub2Rlc1tp
XTsKICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSB7CiAgICAgICAgICAgICAg
ICB0ZXh0ID0gdGV4dCArIGNoaWxkLm5vZGVWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgICByZXR1cm4gdGV4dDsgCiAgICB9OwogICAgCn0pKGpRdWVyeSwgZmx1aWRfMV80KTsK
XxAPdGV4dC9qYXZhc2NyaXB01AUGBwhUVVZXXxBDaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVs
ZWFzZXMvMS40L2ZyYW1ld29yay9jb3JlL2pzL0ZsdWlkVmlldy5qc08RBB5icGxpc3QwMNQBAgME
BQZiY1gkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElK
S0xNTk9QUVJTVFVWV1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEw
UiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWA
G4AGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEENodHRwOi8vZmx1aWRwcm9q
ZWN0Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2NvcmUvanMvRmx1aWRWaWV3Lmpz0iorLC1a
JGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr8tTRDI0zM0
EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVG
gBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVk
VERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIu
Mi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGyI0NDFlMGItMTUwMy00YWYzM2QwMTNl
NDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAy
MDo1MDo1NCBHTVRVYnl0ZXNUNTM3OVVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEVA18QD3Rl
eHQvamF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVz
cG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVz
cG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCp
AKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BJAEpATQBPQFDAUYBTAFVAV4BYAFnAW8B
egGDAYUBhwGJAYsBjQGPAZEBkwGcAZ4BoAGiAaQBpgGoAaoBrAGuAbUBwgHHAdUB2gHoAfcCAgIb
Ai0CSwJrAosCkQKWApwCoQKuArECtALGAssC3wLjAvcDBQMXAxoDMAAAAAAAAAIBAAAAAAAAAGYA
AAAAAAAAAAAAAAAAAAMyTxEVAy8qCkNvcHlyaWdodCAyMDEwLTIwMTEgTHVjZW5kbyBEZXZlbG9w
bWVudCBMdGQuCkNvcHlyaWdodCAyMDEwLTIwMTEgT0NBRCBVbml2ZXJzaXR5CgpMaWNlbnNlZCB1
bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCksIFZlcnNpb24gMi4w
IG9yIHRoZSBOZXcKQlNEIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIEVDTCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2UgYXQKaHR0cHM6Ly9n
aXRodWIuY29tL2ZsdWlkLXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9JbmZ1c2lvbi1MSUNF
TlNFLnR4dAoqLwoKLyoqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgd2hpY2ggZGVwZW5k
IG9uIHRoZSBwcmVzZW5jZSBvZiBhIERPTSBkb2N1bWVudAogKiAgYW5kIHdoaWNoIGRlcGVuZCBv
biB0aGUgY29udGVudHMgb2YgRmx1aWQuanMgKiovCgovLyBEZWNsYXJlIGRlcGVuZGVuY2llcwov
Kmdsb2JhbCBmbHVpZF8xXzQ6dHJ1ZSwgalF1ZXJ5Ki8KCi8vIEpTTGludCBvcHRpb25zIAovKmpz
bGludCB3aGl0ZTogdHJ1ZSwgZnVuY2ludm9rZTogdHJ1ZSwgdW5kZWY6IHRydWUsIG5ld2NhcDog
dHJ1ZSwgbm9tZW46IHRydWUsIHJlZ2V4cDogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgYnJvd3Nlcjog
dHJ1ZSwgZm9yaW46IHRydWUsIG1heGVycjogMTAwLCBpbmRlbnQ6IDQgKi8KCnZhciBmbHVpZF8x
XzQgPSBmbHVpZF8xXzQgfHwge307CgooZnVuY3Rpb24gKCQsIGZsdWlkKSB7CgogICAgZmx1aWQu
ZGVmYXVsdHMoImZsdWlkLmFyaWFMYWJlbGxlciIsIHsKICAgICAgICBsYWJlbEF0dHJpYnV0ZTog
ImFyaWEtbGFiZWwiLAogICAgICAgIGxpdmVSZWdpb25NYXJrdXA6ICI8ZGl2IGNsYXNzPVwibGl2
ZVJlZ2lvbiBmbC1vZmZTY3JlZW4taGlkZGVuXCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9kaXY+
IiwKICAgICAgICBsaXZlUmVnaW9uSWQ6ICJmbHVpZC1hcmlhTGFiZWxsZXItbGl2ZVJlZ2lvbiIs
CiAgICAgICAgaW52b2tlcnM6IHsKICAgICAgICAgICAgZ2VuZXJhdGVMaXZlRWxlbWVudDoge2Z1
bmNOYW1lOiAiZmx1aWQuYXJpYUxhYmVsbGVyLmdlbmVyYXRlTGl2ZUVsZW1lbnQiLCBhcmdzOiBb
InthcmlhTGFiZWxsZXJ9Il19CiAgICAgICAgfQogICAgfSk7CiAKICAgIGZsdWlkLmFyaWFMYWJl
bGxlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHRoYXQgPSBm
bHVpZC5pbml0VmlldygiZmx1aWQuYXJpYUxhYmVsbGVyIiwgZWxlbWVudCwgb3B0aW9ucyk7CiAg
ICAgICAgZmx1aWQuaW5pdERlcGVuZGVudHModGhhdCk7CgogICAgICAgIHRoYXQudXBkYXRlID0g
ZnVuY3Rpb24gKG5ld09wdGlvbnMpIHsKICAgICAgICAgICAgbmV3T3B0aW9ucyA9IG5ld09wdGlv
bnMgfHwgdGhhdC5vcHRpb25zOwogICAgICAgICAgICB0aGF0LmNvbnRhaW5lci5hdHRyKHRoYXQu
b3B0aW9ucy5sYWJlbEF0dHJpYnV0ZSwgbmV3T3B0aW9ucy50ZXh0KTsKICAgICAgICAgICAgaWYg
KG5ld09wdGlvbnMuZHluYW1pY0xhYmVsKSB7CiAgICAgICAgICAgICAgICB2YXIgbGl2ZSA9IGZs
dWlkLmpCeUlkKHRoYXQub3B0aW9ucy5saXZlUmVnaW9uSWQpOyAKICAgICAgICAgICAgICAgIGlm
IChsaXZlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGxpdmUgPSB0aGF0Lmdl
bmVyYXRlTGl2ZUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxp
dmUudGV4dChuZXdPcHRpb25zLnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAg
ICAKICAgICAgICB0aGF0LnVwZGF0ZSgpOwogICAgICAgIHJldHVybiB0aGF0OwogICAgfTsKICAg
IAogICAgZmx1aWQuYXJpYUxhYmVsbGVyLmdlbmVyYXRlTGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiAo
dGhhdCkgewogICAgICAgIHZhciBsaXZlRWwgPSAkKHRoYXQub3B0aW9ucy5saXZlUmVnaW9uTWFy
a3VwKTsKICAgICAgICBsaXZlRWwucHJvcCgiaWQiLCB0aGF0Lm9wdGlvbnMubGl2ZVJlZ2lvbklk
KTsKICAgICAgICAkKCJib2R5IikuYXBwZW5kKGxpdmVFbCk7CiAgICAgICAgcmV0dXJuIGxpdmVF
bDsKICAgIH07CiAgICAKICAgIHZhciBMQUJFTF9LRVkgPSAiYXJpYS1sYWJlbGxpbmciOwogICAg
CiAgICBmbHVpZC5nZXRBcmlhTGFiZWxsZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogICAgICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgICAgIHZhciB0aGF0ID0gZmx1aWQuZ2V0U2NvcGVk
RGF0YShlbGVtZW50LCBMQUJFTF9LRVkpOwogICAgICAgIHJldHVybiB0aGF0OyAgICAgIAogICAg
fTsKICAgIAogICAgLyoqIE1hbmFnZXMgYW4gQVJJQS1tZWRpYXRlZCBsYWJlbCBhdHRhY2hlZCB0
byBhIGdpdmVuIERPTSBlbGVtZW50LiBBbgogICAgICogYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0
ZSBhbmQgdGFyZ2V0IG5vZGUgaXMgZmFicmljYXRlZCBpbiB0aGUgZG9jdW1lbnQKICAgICAqIGlm
IHRoZXkgZG8gbm90IGV4aXN0IGFscmVhZHksIGFuZCBhICJsaXR0bGUgY29tcG9uZW50IiBpcyBy
ZXR1cm5lZCBleHBvc2luZyBhIG1ldGhvZAogICAgICogInVwZGF0ZSIgdGhhdCBhbGxvd3MgdGhl
IHRleHQgdG8gYmUgdXBkYXRlZC4gKi8KICAgIAogICAgZmx1aWQudXBkYXRlQXJpYUxhYmVsID0g
ZnVuY3Rpb24gKGVsZW1lbnQsIHRleHQsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gJC5l
eHRlbmQoe30sIG9wdGlvbnMgfHwge30sIHt0ZXh0OiB0ZXh0fSk7CiAgICAgICAgdmFyIHRoYXQg
PSBmbHVpZC5nZXRBcmlhTGFiZWxsZXIoZWxlbWVudCk7CiAgICAgICAgaWYgKCF0aGF0KSB7CiAg
ICAgICAgICAgIHRoYXQgPSBmbHVpZC5hcmlhTGFiZWxsZXIoZWxlbWVudCwgb3B0aW9ucyk7CiAg
ICAgICAgICAgIGZsdWlkLnNldFNjb3BlZERhdGEoZWxlbWVudCwgTEFCRUxfS0VZLCB0aGF0KTsK
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGF0LnVwZGF0ZShvcHRpb25zKTsKICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIHRoYXQ7CiAgICB9OwogICAgCiAgICAvKiogU2V0cyBhbiBpbnRl
cmF0aW9uIG9uIGEgdGFyZ2V0IGNvbnRyb2wsIHdoaWNoIG1vcmFsbHkgbWFuYWdlcyBhICJibHVy
IiBmb3IKICAgICAqIGEgcG9zc2libHkgY29tcG9zaXRlIHJlZ2lvbi4KICAgICAqIEEgdGltZWQg
Ymx1ciBsaXN0ZW5lciBpcyBzZXQgb24gdGhlIGNvbnRyb2wsIHdoaWNoIHdhaXRzIGZvciBhIHNo
b3J0IHBlcmlvZCBvZgogICAgICogdGltZSAob3B0aW9ucy5kZWxheSwgZGVmYXVsdHMgdG8gMTUw
bXMpIHRvIGRpc2NvdmVyIHdoZXRoZXIgdGhlIHJlYXNvbiBmb3IgdGhlIAogICAgICogYmx1ciBp
bnRlcmFjdGlvbiBpcyB0aGF0IGVpdGhlciBhIGZvY3VzIG9yIGNsaWNrIGlzIGJlaW5nIHNlcnZp
Y2VkIG9uIGEgbm9taW5hdGVkCiAgICAgKiBzZXQgb2YgImV4Y2x1c2lvbnMiIChvcHRpb25zLmV4
Y2x1c2lvbnMsIGEgZnJlZSBoYXNoIG9mIGVsZW1lbnRzIG9yIGpRdWVyaWVzKS4gCiAgICAgKiBJ
ZiBubyBzdWNoIGV2ZW50IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGUgd2luZG93LCBvcHRpb25zLmhh
bmRsZXIgd2lsbCBiZSBjYWxsZWQKICAgICAqIHdpdGggdGhlIGFyZ3VtZW50ICJjb250cm9sIiwg
dG8gc2VydmljZSB3aGF0ZXZlciBpbnRlcmFjdGlvbiBpcyByZXF1aXJlZCBvZiB0aGUKICAgICAq
IGJsdXIuCiAgICAgKi8KICAgIAogICAgZmx1aWQuZGVhZE1hbnNCbHVyID0gZnVuY3Rpb24gKGNv
bnRyb2wsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgdGhhdCA9IGZsdWlkLmluaXRMaXR0bGVDb21w
b25lbnQoImZsdWlkLmRlYWRNYW5zQmx1ciIsIG9wdGlvbnMpOwogICAgICAgIHRoYXQuYmx1clBl
bmRpbmcgPSBmYWxzZTsKICAgICAgICB0aGF0Lmxhc3RDYW5jZWwgPSAwOwogICAgICAgICQoY29u
dHJvbCkuYmluZCgiZm9jdXNvdXQiLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgZmx1
aWQubG9nKCJTdGFydGluZyBibHVyIHRpbWVyIGZvciBlbGVtZW50ICIgKyBmbHVpZC5kdW1wRWwo
ZXZlbnQudGFyZ2V0KSk7CiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUo
KTsKICAgICAgICAgICAgZmx1aWQubG9nKCJiYWNrIGRlbGF5OiAiICsgKG5vdyAtIHRoYXQubGFz
dENhbmNlbCkpOwogICAgICAgICAgICBpZiAobm93IC0gdGhhdC5sYXN0Q2FuY2VsID4gdGhhdC5v
cHRpb25zLmJhY2tEZWxheSkgewogICAgICAgICAgICAgICAgdGhhdC5ibHVyUGVuZGluZyA9IHRy
dWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICBpZiAodGhhdC5ibHVyUGVuZGluZykgewogICAgICAgICAgICAgICAgICAg
IHRoYXQub3B0aW9ucy5oYW5kbGVyKGNvbnRyb2wpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9LCB0aGF0Lm9wdGlvbnMuZGVsYXkpOwogICAgICAgIH0pOwogICAgICAgIHRoYXQuY2Fu
Y2VsbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGZsdWlkLmxvZygiQ2FuY2Vs
bGF0aW9uIHRocm91Z2ggIiArIGV2ZW50LnR5cGUgKyAiIG9uICIgKyBmbHVpZC5kdW1wRWwoZXZl
bnQudGFyZ2V0KSk7IAogICAgICAgICAgICB0aGF0Lmxhc3RDYW5jZWwgPSBuZXcgRGF0ZSgpLmdl
dFRpbWUoKTsKICAgICAgICAgICAgdGhhdC5ibHVyUGVuZGluZyA9IGZhbHNlOwogICAgICAgIH07
CiAgICAgICAgZmx1aWQuZWFjaCh0aGF0Lm9wdGlvbnMuZXhjbHVzaW9ucywgZnVuY3Rpb24gKGV4
Y2x1c2lvbikgewogICAgICAgICAgICBleGNsdXNpb24gPSAkKGV4Y2x1c2lvbik7CiAgICAgICAg
ICAgIGZsdWlkLmVhY2goZXhjbHVzaW9uLCBmdW5jdGlvbiAoZXhjbHVkZUVsKSB7CiAgICAgICAg
ICAgICAgICAkKGV4Y2x1ZGVFbCkuYmluZCgiZm9jdXNpbiIsIHRoYXQuY2FuY2VsbGVyKS4KICAg
ICAgICAgICAgICAgICAgICBiaW5kKCJmbHVpZC1mb2N1cyIsIHRoYXQuY2FuY2VsbGVyKS4KICAg
ICAgICAgICAgICAgICAgICBjbGljayh0aGF0LmNhbmNlbGxlcikubW91c2Vkb3duKHRoYXQuY2Fu
Y2VsbGVyKTsKICAgIC8vIE1vdXNlZG93biBpcyBhZGRlZCBmb3IgRkxVSUQtNDIxMiwgYXMgYSBy
ZXN1bHQgb2YgQ2hyb21lIGJ1ZyA2NzU5LCAxNDIwNAogICAgICAgICAgICB9KTsKICAgICAgICB9
KTsKICAgICAgICByZXR1cm4gdGhhdDsKICAgIH07CgogICAgZmx1aWQuZGVmYXVsdHMoImZsdWlk
LmRlYWRNYW5zQmx1ciIsIHsKICAgICAgICBkZWxheTogMTUwLAogICAgICAgIGJhY2tEZWxheTog
MTAwCiAgICB9KTsKICAgIAp9KShqUXVlcnksIGZsdWlkXzFfNCk7Cl8QD3RleHQvamF2YXNjcmlw
dNQFBgcIWVpbXF8QRWh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9mcmFtZXdv
cmsvY29yZS9qcy9EYXRhQmluZGluZy5qc08RBCFicGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lvblgk
b2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hb
XF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIk
OFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYnV05T
LmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEEVodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNl
cy8xLjQvZnJhbWV3b3JrL2NvcmUvanMvRGF0YUJpbmRpbmcuanPSKissLVokY2xhc3NuYW1lWCRj
bGFzc2VzVU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAu5BvKEMjTMzQQNT5HV05TLmtleXNa
TlMub2JqZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaA
F4AYgBlWU2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQt
UmFuZ2VzXkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1Mp
XxAPdGV4dC9qYXZhc2NyaXB0XxAbIjQ0MWUwNC01Y2ExLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAx
MyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU0IEdNVFVi
eXRlc1UyMzcxM1VjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxFcoV8QD3RleHQvamF2YXNjcmlw
dNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxS
ZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEA
GgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCpAKsArQCvALEAswC1
ALcAuQC7AL0AxADMANgA2gDcAN4BJgErATYBPwFFAUgBTgFXAWABYgFpAXEBfAGFAYcBiQGLAY0B
jwGRAZMBlQGeAaABogGkAaYBqAGqAawBrgGwAbcBxAHJAdcB3AHqAfkCBAIdAi8CTQJtAo0CkwKZ
Ap8CpAKxArQCtwLJAs4C4gLmAvoDCAMaAx0DMwAAAAAAAAIBAAAAAAAAAGYAAAAAAAAAAAAAAAAA
AAM1TxFcoS8qCkNvcHlyaWdodCAyMDA4LTIwMTAgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKQ29w
eXJpZ2h0IDIwMDgtMjAwOSBVbml2ZXJzaXR5IG9mIFRvcm9udG8KQ29weXJpZ2h0IDIwMTAtMjAx
MSBMdWNlbmRvIERldmVsb3BtZW50IEx0ZC4KQ29weXJpZ2h0IDIwMTAgT0NBRCBVbml2ZXJzaXR5
CgpMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCks
IFZlcnNpb24gMi4wIG9yIHRoZSBOZXcKQlNEIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVDTCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2Ug
YXQKaHR0cHM6Ly9naXRodWIuY29tL2ZsdWlkLXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9J
bmZ1c2lvbi1MSUNFTlNFLnR4dAoqLwoKLy8gRGVjbGFyZSBkZXBlbmRlbmNpZXMKLypnbG9iYWwg
Zmx1aWRfMV80OnRydWUsIGpRdWVyeSovCgovLyBKU0xpbnQgb3B0aW9ucyAKLypqc2xpbnQgd2hp
dGU6IHRydWUsIGZ1bmNpbnZva2U6IHRydWUsIHVuZGVmOiB0cnVlLCBuZXdjYXA6IHRydWUsIG5v
bWVuOiB0cnVlLCByZWdleHA6IHRydWUsIGJpdHdpc2U6IHRydWUsIGJyb3dzZXI6IHRydWUsIGZv
cmluOiB0cnVlLCBtYXhlcnI6IDEwMCwgaW5kZW50OiA0ICovCgp2YXIgZmx1aWRfMV80ID0gZmx1
aWRfMV80IHx8IHt9OwoKKGZ1bmN0aW9uICgkLCBmbHVpZCkgewogICAgCiAgICBmbHVpZC5CSU5E
SU5HX1JPT1RfS0VZID0gImZsdWlkLWJpbmRpbmctcm9vdCI7CiAgICAKICAgIC8qKiBSZWN1cnNp
dmVseSBmaW5kIGFueSBkYXRhIHN0b3JlZCB1bmRlciBhIGdpdmVuIG5hbWUgZnJvbSBhIG5vZGUg
dXB3YXJkcwogICAgICogaW4gaXRzIERPTSBoaWVyYXJjaHkgKiovCiAgICAgCiAgICBmbHVpZC5m
aW5kRGF0YSA9IGZ1bmN0aW9uIChlbGVtLCBuYW1lKSB7CiAgICAgICAgd2hpbGUgKGVsZW0pIHsK
ICAgICAgICAgICAgdmFyIGRhdGEgPSAkLmRhdGEoZWxlbSwgbmFtZSk7CiAgICAgICAgICAgIGlm
IChkYXRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlOwogICAgICAgIH0KICAgIH07CiAgCiAgICBm
bHVpZC5iaW5kRm9zc2lscyA9IGZ1bmN0aW9uIChub2RlLCBkYXRhLCBmb3NzaWxzKSB7CiAgICAg
ICAgJC5kYXRhKG5vZGUsIGZsdWlkLkJJTkRJTkdfUk9PVF9LRVksIHtkYXRhOiBkYXRhLCBmb3Nz
aWxzOiBmb3NzaWxzfSk7CiAgICB9OwogICAgICAgIAogICAgZmx1aWQuYm91bmRQYXRoRm9yTm9k
ZSA9IGZ1bmN0aW9uIChub2RlLCBmb3NzaWxzKSB7CiAgICAgICAgbm9kZSA9IGZsdWlkLnVud3Jh
cChub2RlKTsKICAgICAgICB2YXIga2V5ID0gbm9kZS5uYW1lIHx8IG5vZGUuaWQ7CiAgICAgICAg
dmFyIHJlY29yZCA9IGZvc3NpbHNba2V5XTsKICAgICAgICByZXR1cm4gcmVjb3JkID8gcmVjb3Jk
LkVMOiBudWxsOwogICAgfTsKICAKICAgIGZsdWlkLmZpbmRGb3JtID0gZnVuY3Rpb24gKG5vZGUp
IHsKICAgICAgICByZXR1cm4gZmx1aWQuZmluZEFuY2VzdG9yKG5vZGUsIGZ1bmN0aW9uIChlbGVt
ZW50KSB7CiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
PT09ICJmb3JtIjsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8qKiBBIGdlbmVyYWxpc2F0
aW9uIG9mIGpRdWVyeS52YWwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSBvZiBhY3F1aXJp
bmcgYW5kCiAgICAgKiBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBjbHVzdGVyZWQgcmFkaW8gYnV0dG9u
L2NoZWNrYm94IHNldHMsIHBvdGVudGlhbGx5LCBnaXZlbgogICAgICogYSBub2RlIGNvcnJlc3Bv
bmRpbmcgdG8ganVzdCBvbmUgZWxlbWVudC4KICAgICAqLwogICAgZmx1aWQudmFsdWUgPSBmdW5j
dGlvbiAobm9kZUluLCBuZXdWYWx1ZSkgewogICAgICAgIHZhciBub2RlID0gZmx1aWQudW53cmFw
KG5vZGVJbik7CiAgICAgICAgdmFyIG11bHRpcGxlID0gZmFsc2U7CiAgICAgICAgaWYgKG5vZGUu
bm9kZVR5cGUgPT09IHVuZGVmaW5lZCAmJiBub2RlLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAg
bm9kZSA9IG5vZGVbMF07CiAgICAgICAgICAgIG11bHRpcGxlID0gdHJ1ZTsKICAgICAgICB9CiAg
ICAgICAgaWYgKCJpbnB1dCIgIT09IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSB8fCAhIC9y
YWRpb3xjaGVja2JveC8udGVzdChub2RlLnR5cGUpKSB7CiAgICAgICAgICAgIC8vIHJlc2lzdCBj
aGFuZ2VzIHRvIGNvbnRyYWN0IG9mIGpRdWVyeS52YWwoKSBpbiBqUXVlcnkgMS41LjEgKHNlZSBG
TFVJRC00MTEzKQogICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgPT09IHVuZGVmaW5lZD8gJChu
b2RlKS52YWwoKSA6ICQobm9kZSkudmFsKG5ld1ZhbHVlKTsKICAgICAgICB9CiAgICAgICAgdmFy
IG5hbWUgPSBub2RlLm5hbWU7CiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkgewogICAg
ICAgICAgICBmbHVpZC5mYWlsKCJDYW5ub3QgYWNxdWlyZSB2YWx1ZSBmcm9tIG5vZGUgIiArIGZs
dWlkLmR1bXBFbChub2RlKSArICIgd2hpY2ggZG9lcyBub3QgaGF2ZSBuYW1lIGF0dHJpYnV0ZSBz
ZXQiKTsKICAgICAgICB9CiAgICAgICAgdmFyIGVsZW1lbnRzOwogICAgICAgIGlmIChtdWx0aXBs
ZSkgewogICAgICAgICAgICBlbGVtZW50cyA9IG5vZGVJbjsKICAgICAgICB9CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFt
ZSk7CiAgICAgICAgICAgIHZhciBzY29wZSA9IGZsdWlkLmZpbmRGb3JtKG5vZGUpOwogICAgICAg
ICAgICBlbGVtZW50cyA9ICQuZ3JlcChlbGVtZW50cywgCiAgICAgICAgICAgIGZ1bmN0aW9uIChl
bGVtZW50KSB7CiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lICE9PSBuYW1lKSB7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgcmV0dXJuICFzY29wZSB8fCBmbHVpZC5kb20uaXNDb250YWluZXIoc2NvcGUsIGVs
ZW1lbnQpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1ZhbHVlICE9
PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZihuZXdWYWx1ZSkgPT09ICJib29s
ZWFuIikgewogICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAobmV3VmFsdWUgPyAidHJ1ZSIgOiAi
ZmFsc2UiKTsKICAgICAgICAgICAgfQogICAgICAgICAgLy8galF1ZXJ5IGdldHMgdGhpcyBwYXJ0
aWFsbHkgcmlnaHQsIGJ1dCB3aGVuIGRlYWxpbmcgd2l0aCByYWRpbyBidXR0b24gYXJyYXkgd2ls
bAogICAgICAgICAgLy8gc2V0IGFsbCBvZiB0aGVpciB2YWx1ZXMgdG8gIm5ld1ZhbHVlIiByYXRo
ZXIgdGhhbiBzZXR0aW5nIHRoZSBjaGVja2VkIHByb3BlcnR5CiAgICAgICAgICAvLyBvZiB0aGUg
Y29ycmVzcG9uZGluZyBjb250cm9sLiAKICAgICAgICAgICAgJC5lYWNoKGVsZW1lbnRzLCBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSAobmV3VmFsdWUgaW5zdGFu
Y2VvZiBBcnJheSA/IAogICAgICAgICAgICAgICAgICAgICQuaW5BcnJheSh0aGlzLnZhbHVlLCBu
ZXdWYWx1ZSkgIT09IC0xIDogbmV3VmFsdWUgPT09IHRoaXMudmFsdWUpOwogICAgICAgICAgICB9
KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIHRoaXMgcGFydCBqUXVlcnkgd2lsbCBub3Qg
ZG8gLSBleHRyYWN0aW5nIHZhbHVlIGZyb20gPGlucHV0PiBhcnJheQogICAgICAgICAgICB2YXIg
Y2hlY2tlZCA9ICQubWFwKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUgOiBudWxsOwogICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gInJhZGlvIiA/IGNo
ZWNrZWRbMF0gOiBjaGVja2VkOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8qKiAiQXV0b21h
dGljYWxseSIgYXBwbHkgdG8gd2hhdGV2ZXIgcGFydCBvZiB0aGUgZGF0YSBtb2RlbCBpcwogICAg
ICogcmVsZXZhbnQsIHRoZSBjaGFuZ2VkIHZhbHVlIHJlY2VpdmVkIGF0IHRoZSBnaXZlbiBET00g
bm9kZSovCiAgICBmbHVpZC5hcHBseUNoYW5nZSA9IGZ1bmN0aW9uIChub2RlLCBuZXdWYWx1ZSwg
YXBwbGllcikgewogICAgICAgIG5vZGUgPSBmbHVpZC51bndyYXAobm9kZSk7CiAgICAgICAgaWYg
KG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgbmV3VmFsdWUgPSBmbHVpZC52
YWx1ZShub2RlKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IHVuZGVm
aW5lZCAmJiBub2RlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbm9kZSA9IG5vZGVbMF07CiAg
ICAgICAgfSAvLyBhc3N1bWUgaGVyZSB0aGF0IHRoZXkgc2hhcmUgbmFtZSBhbmQgcGFyZW50CiAg
ICAgICAgdmFyIHJvb3QgPSBmbHVpZC5maW5kRGF0YShub2RlLCBmbHVpZC5CSU5ESU5HX1JPT1Rf
S0VZKTsKICAgICAgICBpZiAoIXJvb3QpIHsKICAgICAgICAgICAgZmx1aWQuZmFpbCgiQm91bmQg
ZGF0YSBjb3VsZCBub3QgYmUgZGlzY292ZXJlZCBpbiBhbnkgbm9kZSBhYm92ZSAiICsgZmx1aWQu
ZHVtcEVsKG5vZGUpKTsKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7CiAg
ICAgICAgdmFyIGZvc3NpbCA9IHJvb3QuZm9zc2lsc1tuYW1lXTsKICAgICAgICBpZiAoIWZvc3Np
bCkgewogICAgICAgICAgICBmbHVpZC5mYWlsKCJObyBmb3NzaWwgZGlzY292ZXJlZCBmb3IgbmFt
ZSAiICsgbmFtZSArICIgaW4gZm9zc2lsIHJlY29yZCBhYm92ZSAiICsgZmx1aWQuZHVtcEVsKG5v
ZGUpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZihmb3NzaWwub2xkdmFsdWUpID09PSAi
Ym9vbGVhbiIpIHsgLy8gZGVhbCB3aXRoIHRoZSBjYXNlIG9mIGFuICJpc29sYXRlZCBjaGVja2Jv
eCIKICAgICAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZVswXSA/IHRydWU6IGZhbHNlOwogICAg
ICAgIH0KICAgICAgICB2YXIgRUwgPSByb290LmZvc3NpbHNbbmFtZV0uRUw7CiAgICAgICAgaWYg
KGFwcGxpZXIpIHsKICAgICAgICAgICAgYXBwbGllci5maXJlQ2hhbmdlUmVxdWVzdCh7cGF0aDog
RUwsIHZhbHVlOiBuZXdWYWx1ZSwgc291cmNlOiBub2RlLmlkfSk7CiAgICAgICAgfQogICAgICAg
IGVsc2UgewogICAgICAgICAgICBmbHVpZC5zZXQocm9vdC5kYXRhLCBFTCwgbmV3VmFsdWUpOwog
ICAgICAgIH0gICAgCiAgICB9OwogICAKICAgIC8vIEltcGxlbWVudGF0aW9uIG5vdGVzOiBUaGUg
RUwgcGF0aCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIGhlcmUgYXJlIHNvbWV3aGF0IG1vcmUgdGhv
cm91Z2gKICAgIC8vIGFuZCBleHBlbnNpdmUgdmVyc2lvbnMgb2YgdGhvc2UgcHJvdmlkZWQgaW4g
Rmx1aWQuanMgLSB0aGVyZSBpcyBzb21lIGR1cGxpY2F0aW9uIG9mIAogICAgLy8gZnVuY3Rpb25h
bGl0eS4gVGhpcyBpcyBhIHRyYWRlb2ZmIGJldHdlZW4gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5j
ZSAtIHRoZSB2ZXJzaW9ucyBpbgogICAgLy8gRmx1aWQuanMgYXJlIHRoZSBtb3N0IGZyZXF1ZW50
bHkgdXNlZCBhbmQgZG8gbm90IGltcGxlbWVudCBlc2NhcGluZyBvZiBjaGFyYWN0ZXJzIC4KICAg
IC8vIGFzIFwuIGFuZCBcIGFzIFxcIGFzIHRoZSB2ZXJzaW9ucyBoZXJlLiBUaGUgaW1wbGVtZW50
YXRpb25zIGhlcmUgYXJlIG5vdCBxdWl0ZSBjb21wbGV0ZQogICAgLy8gb3IgdmVyeSBwZXJmb3Jt
YW50IGFuZCBhcmUgbGVmdCBoZXJlIHBhcnRpYWxseSBhcyBhbiBpbXBsZW1lbnRhdGlvbiBub3Rl
LiBQcm9ibGVtcyB3aWxsCiAgICAvLyBhcmlzZSBpZiBjbGllbnRzIG1hbmlwdWxhdGUgSlNPTiBz
dHJ1Y3R1cmVzIGNvbnRhaW5pbmcgIi4iIGNoYXJhY3RlcnMgaW4ga2V5cyBhcyBpZiB0aGV5CiAg
ICAvLyBhcmUgbW9kZWxzLCB0cmVhdGluZyB0aGVzZSBpcyBiZXN0IGxlZnQgdW50aWwgdGhlIGNh
c2VzIHdoZXJlIHRoZXkgb2NjdXIuIFRoZSBub3cgc3RhbmRhcmQKICAgIC8vIHV0aWxpdGllcyBm
bHVpZC5wYXRoKCksIGZsdWlkLnBhcnNlRUwgYW5kIGZsdWlkLmNvbXBvc2VQYXRoIGFyZSB0aGUg
b25lcyByZWNvbW1lbmRlZCBmb3IKICAgIC8vIGdlbmVyYWwgdXNlcnMgYW5kIHRoZWlyIGltcGxl
bWVudGF0aW9uIGNhbiBiZSB1cGdyYWRlZCBpZiByZXF1aXJlZC4KICAgCiAgICBmbHVpZC5wYXRo
VXRpbCA9IHt9OwogICAKICAgIHZhciBnZXRQYXRoU2VnbWVudEltcGwgPSBmdW5jdGlvbiAoYWNj
ZXB0LCBwYXRoLCBpKSB7CiAgICAgICAgdmFyIHNlZ21lbnQgPSBudWxsOyAvLyBUT0RPOiByZXdy
aXRlIHRoaXMgd2l0aCByZWdleGVzIGFuZCByZXBsYWNlcwogICAgICAgIGlmIChhY2NlcHQpIHsK
ICAgICAgICAgICAgc2VnbWVudCA9ICIiOwogICAgICAgIH0KICAgICAgICB2YXIgZXNjYXBlZCA9
IGZhbHNlOwogICAgICAgIHZhciBsaW1pdCA9IHBhdGgubGVuZ3RoOwogICAgICAgIGZvciAoOyBp
IDwgbGltaXQ7ICsraSkgewogICAgICAgICAgICB2YXIgYyA9IHBhdGguY2hhckF0KGkpOwogICAg
ICAgICAgICBpZiAoIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgIGlmIChjID09PSAnLicpIHsK
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGMgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlZ21lbnQg
IT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBzZWdtZW50ICs9IGM7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBl
c2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCAhPT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgICAgIGFjY2VwdCArPSBjOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZWdtZW50ICE9PSBudWxsKSB7CiAgICAgICAg
ICAgIGFjY2VwdFswXSA9IHNlZ21lbnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAg
fTsKICAgIAogICAgdmFyIGdsb2JhbEFjY2VwdCA9IFtdOyAvLyBUT0RPOiBzZXJpb3VzIHJlZW50
cmFuY3kgcmlzayBoZXJlLCB3aHkgaXMgdGhpcyBpbXBsIGxpa2UgdGhpcz8KICAgIAogICAgZmx1
aWQucGF0aFV0aWwuZ2V0UGF0aFNlZ21lbnQgPSBmdW5jdGlvbiAocGF0aCwgaSkgewogICAgICAg
IGdldFBhdGhTZWdtZW50SW1wbChnbG9iYWxBY2NlcHQsIHBhdGgsIGkpOwogICAgICAgIHJldHVy
biBnbG9iYWxBY2NlcHRbMF07CiAgICB9OyAKICAKICAgIGZsdWlkLnBhdGhVdGlsLmdldEhlYWRQ
YXRoID0gZnVuY3Rpb24gKHBhdGgpIHsKICAgICAgICByZXR1cm4gZmx1aWQucGF0aFV0aWwuZ2V0
UGF0aFNlZ21lbnQocGF0aCwgMCk7CiAgICB9OwogIAogICAgZmx1aWQucGF0aFV0aWwuZ2V0RnJv
bUhlYWRQYXRoID0gZnVuY3Rpb24gKHBhdGgpIHsKICAgICAgICB2YXIgZmlyc3Rkb3QgPSBnZXRQ
YXRoU2VnbWVudEltcGwobnVsbCwgcGF0aCwgMCk7CiAgICAgICAgcmV0dXJuIGZpcnN0ZG90ID09
PSBwYXRoLmxlbmd0aCA/IG51bGwKICAgICAgICAgICAgOiBwYXRoLnN1YnN0cmluZyhmaXJzdGRv
dCArIDEpOwogICAgfTsKICAgIAogICAgZnVuY3Rpb24gbGFzdERvdEluZGV4KHBhdGgpIHsKICAg
ICAgICAvLyBUT0RPOiBwcm9wZXIgZXNjYXBpbmcgcnVsZXMKICAgICAgICByZXR1cm4gcGF0aC5s
YXN0SW5kZXhPZigiLiIpOwogICAgfQogICAgCiAgICBmbHVpZC5wYXRoVXRpbC5nZXRUb1RhaWxQ
YXRoID0gZnVuY3Rpb24gKHBhdGgpIHsKICAgICAgICB2YXIgbGFzdGRvdCA9IGxhc3REb3RJbmRl
eChwYXRoKTsKICAgICAgICByZXR1cm4gbGFzdGRvdCA9PT0gLTEgPyBudWxsIDogcGF0aC5zdWJz
dHJpbmcoMCwgbGFzdGRvdCk7CiAgICB9OwoKICAvKiogUmV0dXJucyB0aGUgdmVyeSBsYXN0IHBh
dGggY29tcG9uZW50IG9mIGEgYmVhbiBwYXRoICovCiAgICBmbHVpZC5wYXRoVXRpbC5nZXRUYWls
UGF0aCA9IGZ1bmN0aW9uIChwYXRoKSB7CiAgICAgICAgdmFyIGxhc3Rkb3QgPSBsYXN0RG90SW5k
ZXgocGF0aCk7CiAgICAgICAgcmV0dXJuIGZsdWlkLnBhdGhVdGlsLmdldFBhdGhTZWdtZW50KHBh
dGgsIGxhc3Rkb3QgKyAxKTsKICAgIH07CiAgICAKICAgIHZhciBjb21wb3NlU2VnbWVudCA9IGZ1
bmN0aW9uIChwcmVmaXgsIHRvYXBwZW5kKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
b2FwcGVuZC5sZW5ndGg7ICsraSkgewogICAgICAgICAgICB2YXIgYyA9IHRvYXBwZW5kLmNoYXJB
dChpKTsKICAgICAgICAgICAgaWYgKGMgPT09ICcuJyB8fCBjID09PSAnXFwnIHx8IGMgPT09ICd9
JykgewogICAgICAgICAgICAgICAgcHJlZml4ICs9ICdcXCc7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgcHJlZml4ICs9IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcmVmaXg7CiAgICB9
OwogICAgCiAgICAvKioKICAgICAqIENvbXBvc2UgYSBwcmVmaXggYW5kIHN1ZmZpeCBFTCBwYXRo
LCB3aGVyZSB0aGUgcHJlZml4IGlzIGFscmVhZHkgZXNjYXBlZC4KICAgICAqIFByZWZpeCBtYXkg
YmUgZW1wdHksIGJ1dCBub3QgbnVsbC4gVGhlIHN1ZmZpeCB3aWxsIGJlY29tZSBlc2NhcGVkLgog
ICAgICovCiAgICBmbHVpZC5wYXRoVXRpbC5jb21wb3NlUGF0aCA9IGZ1bmN0aW9uIChwcmVmaXgs
IHN1ZmZpeCkgewogICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAg
IHByZWZpeCArPSAnLic7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb21wb3NlU2VnbWVudChw
cmVmaXgsIHN1ZmZpeCk7CiAgICB9OyAgICAKICAgCiAgICBmbHVpZC5wYXRoVXRpbC5tYXRjaFBh
dGggPSBmdW5jdGlvbiAoc3BlYywgcGF0aCkgewogICAgICAgIHZhciB0b2dvID0gIiI7CiAgICAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKCFzcGVjIHx8IHBhdGggPT09ICIiKSB7
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXBh
dGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIHZhciBzcGVjaGVhZCA9IGZsdWlkLnBhdGhVdGlsLmdldEhlYWRQYXRoKHNwZWMpOwogICAg
ICAgICAgICB2YXIgcGF0aGhlYWQgPSBmbHVpZC5wYXRoVXRpbC5nZXRIZWFkUGF0aChwYXRoKTsK
ICAgICAgICAgICAgLy8gaWYgd2UgZmFpbCB0byBtYXRjaCBvbiBhIHNwZWNpZmljIGNvbXBvbmVu
dCwgZmFpbC4KICAgICAgICAgICAgaWYgKHNwZWNoZWFkICE9PSAiKiIgJiYgc3BlY2hlYWQgIT09
IHBhdGhoZWFkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQog
ICAgICAgICAgICB0b2dvID0gZmx1aWQucGF0aFV0aWwuY29tcG9zZVBhdGgodG9nbywgcGF0aGhl
YWQpOwogICAgICAgICAgICBzcGVjID0gZmx1aWQucGF0aFV0aWwuZ2V0RnJvbUhlYWRQYXRoKHNw
ZWMpOwogICAgICAgICAgICBwYXRoID0gZmx1aWQucGF0aFV0aWwuZ2V0RnJvbUhlYWRQYXRoKHBh
dGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9nbzsKICAgIH07CiAgICAKICAgIGZsdWlk
Lm1vZGVsLm1lcmdlTW9kZWwgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGFwcGxpZXIpIHsK
ICAgICAgICB2YXIgY29weVNvdXJjZSA9IGZsdWlkLmNvcHkoc291cmNlKTsKICAgICAgICBhcHBs
aWVyID0gYXBwbGllciB8fCBmbHVpZC5tYWtlQ2hhbmdlQXBwbGllcihzb3VyY2UpOwogICAgICAg
IGlmICghZmx1aWQuaXNQcmltaXRpdmUodGFyZ2V0KSkgewogICAgICAgICAgICBhcHBsaWVyLmZp
cmVDaGFuZ2VSZXF1ZXN0KHt0eXBlOiAiQUREIiwgcGF0aDogIiIsIHZhbHVlOiB0YXJnZXR9KTsK
ICAgICAgICB9CiAgICAgICAgYXBwbGllci5maXJlQ2hhbmdlUmVxdWVzdCh7dHlwZTogIk1FUkdF
IiwgcGF0aDogIiIsIHZhbHVlOiBjb3B5U291cmNlfSk7CiAgICAgICAgcmV0dXJuIHNvdXJjZTsg
CiAgICB9OwogICAgICAgIAogICAgICAKICAgIGZsdWlkLm1vZGVsLmlzTnVsbENoYW5nZSA9IGZ1
bmN0aW9uIChtb2RlbCwgcmVxdWVzdCwgcmVzb2x2ZXJHZXRDb25maWcpIHsKICAgICAgICBpZiAo
cmVxdWVzdC50eXBlID09PSAiQUREIikgewogICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBmbHVp
ZC5nZXQobW9kZWwsIHJlcXVlc3QucGF0aCwgcmVzb2x2ZXJHZXRDb25maWcpOwogICAgICAgICAg
ICBpZiAoZXhpc3RpbmcgPT09IHJlcXVlc3QudmFsdWUpIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIC8qKiBBcHBsaWVzIHRo
ZSBzdXBwbGllZCBDaGFuZ2VSZXF1ZXN0IG9iamVjdCBkaXJlY3RseSB0byB0aGUgc3VwcGxpZWQg
bW9kZWwuCiAgICAgKi8KICAgIGZsdWlkLm1vZGVsLmFwcGx5Q2hhbmdlUmVxdWVzdCA9IGZ1bmN0
aW9uIChtb2RlbCwgcmVxdWVzdCwgcmVzb2x2ZXJTZXRDb25maWcpIHsKICAgICAgICB2YXIgcGVu
ID0gZmx1aWQubW9kZWwuZ2V0UGVudWx0aW1hdGUobW9kZWwsIHJlcXVlc3QucGF0aCwgcmVzb2x2
ZXJTZXRDb25maWcgfHwgZmx1aWQubW9kZWwuZGVmYXVsdFNldENvbmZpZyk7CiAgICAgICAgCiAg
ICAgICAgaWYgKHJlcXVlc3QudHlwZSA9PT0gIkFERCIgfHwgcmVxdWVzdC50eXBlID09PSAiTUVS
R0UiKSB7CiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnBhdGggPT09ICIiIHx8IHJlcXVlc3QudHlw
ZSA9PT0gIk1FUkdFIikgewogICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudHlwZSA9PT0gIkFE
RCIpIHsKICAgICAgICAgICAgICAgICAgICBmbHVpZC5jbGVhcihwZW4ucm9vdCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCByZXF1ZXN0LnBhdGggPT09
ICIiID8gcGVuLnJvb3Q6IHBlbi5yb290W3Blbi5sYXN0XSwgcmVxdWVzdC52YWx1ZSk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwZW4ucm9vdFtwZW4u
bGFzdF0gPSByZXF1ZXN0LnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKHJlcXVlc3QudHlwZSA9PT0gIkRFTEVURSIpIHsKICAgICAgICAgICAgaWYgKHJlcXVl
c3QucGF0aCA9PT0gIiIpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmNsZWFyKHBlbi5yb290KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBw
ZW4ucm9vdFtwZW4ubGFzdF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAg
ICAvLyBVdGlsaXR5IHNoYXJlZCBiZXR3ZWVuIGNoYW5nZUFwcGxpZXIgYW5kIHN1cGVyQXBwbGll
cgogICAgCiAgICBmdW5jdGlvbiBiaW5kUmVxdWVzdENoYW5nZSh0aGF0KSB7CiAgICAgICAgdGhh
dC5yZXF1ZXN0Q2hhbmdlID0gZnVuY3Rpb24gKHBhdGgsIHZhbHVlLCB0eXBlKSB7CiAgICAgICAg
ICAgIHZhciBjaGFuZ2VSZXF1ZXN0ID0gewogICAgICAgICAgICAgICAgcGF0aDogcGF0aCwKICAg
ICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUKICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgdGhhdC5maXJlQ2hhbmdlUmVxdWVzdChjaGFuZ2VSZXF1
ZXN0KTsKICAgICAgICB9OwogICAgfQogICAgCiAgCiAgICBmbHVpZC5tYWtlQ2hhbmdlQXBwbGll
ciA9IGZ1bmN0aW9uIChtb2RlbCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OwogICAgICAgIHZhciBiYXNlRXZlbnRzID0gewogICAgICAgICAgICBndWFyZHM6IGZs
dWlkLmV2ZW50LmdldEV2ZW50RmlyZXIoZmFsc2UsIHRydWUpLAogICAgICAgICAgICBwb3N0R3Vh
cmRzOiBmbHVpZC5ldmVudC5nZXRFdmVudEZpcmVyKGZhbHNlLCB0cnVlKSwKICAgICAgICAgICAg
bW9kZWxDaGFuZ2VkOiBmbHVpZC5ldmVudC5nZXRFdmVudEZpcmVyKGZhbHNlLCBmYWxzZSkKICAg
ICAgICB9OwogICAgICAgIHZhciB0aGF0ID0gewogICAgICAgICAgICBtb2RlbDogbW9kZWwKICAg
ICAgICB9OwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIG1ha2VHdWFyZFdyYXBwZXIoY3VsbFVu
Y2hhbmdlZCkgewogICAgICAgICAgICBpZiAoIWN1bGxVbmNoYW5nZWQpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB0b2dvID0gZnVu
Y3Rpb24gKGd1YXJkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vZGVsLCBj
aGFuZ2VSZXF1ZXN0LCBpbnRlcm5hbEFwcGxpZXIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIg
b2xkUmV0ID0gZ3VhcmQobW9kZWwsIGNoYW5nZVJlcXVlc3QsIGludGVybmFsQXBwbGllcik7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKG9sZFJldCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdWlkLm1vZGVsLmlz
TnVsbENoYW5nZShtb2RlbCwgY2hhbmdlUmVxdWVzdCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvZ28uY3VsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiB0
b2dvOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGxpc3RlbmVyLCBz
cGVjKSB7CiAgICAgICAgICAgIHZhciBwYXRoU3BlYyA9IHNwZWM7CiAgICAgICAgICAgIHZhciB0
cmFuc2FjdGlvbmFsID0gZmFsc2U7CiAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IE51bWJlci5N
QVhfVkFMVUU7CiAgICAgICAgICAgIGlmICh0eXBlb2YgKHNwZWMpICE9PSAic3RyaW5nIikgewog
ICAgICAgICAgICAgICAgcGF0aFNwZWMgPSBzcGVjLnBhdGg7CiAgICAgICAgICAgICAgICB0cmFu
c2FjdGlvbmFsID0gc3BlYy50cmFuc2FjdGlvbmFsOwogICAgICAgICAgICAgICAgaWYgKHNwZWMu
cHJpb3JpdHkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0g
c3BlYy5wcmlvcml0eTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChwYXRoU3BlYy5jaGFyQXQoMCkgPT09ICIhIikg
ewogICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWwgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgIHBhdGhTcGVjID0gcGF0aFNwZWMuc3Vic3RyaW5nKDEpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2hhbmdlUGF0aCwg
ZmlyZVNwZWMsIGFjY3VtKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGZsdWlkLmV2ZW50
LmlkZW50aWZ5TGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICAgICAgICAgdmFyIGV4aXN0ID0g
ZmlyZVNwZWMuZ3VpZHNbZ3VpZF07CiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gZmx1aWQucGF0aFV0aWwubWF0Y2hQYXRoKHBhdGhT
cGVjLCBjaGFuZ2VQYXRoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZVBhdGg6IGNoYW5nZVBhdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoU3BlYzogcGF0aFNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXN0ZW5lcjogbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTog
cHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsOiB0cmFu
c2FjdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhY2N1bSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmFjY3Vt
dWxhdGUgPSBbYWNjdW1dOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcmVTcGVjLmd1aWRzW2d1aWRdID0gcmVjb3JkOwogICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY29sbGVjdGlvbiA9IHRyYW5zYWN0aW9uYWwgPyAidHJhbnNMaXN0ZW5lcnMi
OiAibGlzdGVuZXJzIjsKICAgICAgICAgICAgICAgICAgICAgICAgZmlyZVNwZWNbY29sbGVjdGlv
bl0ucHVzaChyZWNvcmQpOwogICAgICAgICAgICAgICAgICAgICAgICBmaXJlU3BlYy5hbGwucHVz
aChyZWNvcmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGFjY3VtKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlz
dC5hY2N1bXVsYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LmFjY3VtdWxhdGUg
PSBbXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZXhpc3QuYWNj
dW11bGF0ZS5wdXNoKGFjY3VtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAg
ICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gZmlyZUZyb21TcGVjKG5hbWUsIGZpcmVT
cGVjLCBhcmdzLCBjYXRlZ29yeSwgd3JhcHBlcikgewogICAgICAgICAgICByZXR1cm4gYmFzZUV2
ZW50c1tuYW1lXS5maXJlVG9MaXN0ZW5lcnMoZmlyZVNwZWNbY2F0ZWdvcnldLCBhcmdzLCB3cmFw
cGVyKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gZmlyZUNvbXBhcmF0b3Io
cmVjQSwgcmVjQikgewogICAgICAgICAgICByZXR1cm4gcmVjQS5wcmlvcml0eSAtIHJlY0IucHJp
b3JpdHk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBwcmVwYXJlRmlyZUV2ZW50KG5hbWUs
IGNoYW5nZVBhdGgsIGZpcmVTcGVjLCBhY2N1bSkgewogICAgICAgICAgICBiYXNlRXZlbnRzW25h
bWVdLmZpcmUoY2hhbmdlUGF0aCwgZmlyZVNwZWMsIGFjY3VtKTsKICAgICAgICAgICAgZmlyZVNw
ZWMuYWxsLnNvcnQoZmlyZUNvbXBhcmF0b3IpOwogICAgICAgICAgICBmaXJlU3BlYy5saXN0ZW5l
cnMuc29ydChmaXJlQ29tcGFyYXRvcik7CiAgICAgICAgICAgIGZpcmVTcGVjLnRyYW5zTGlzdGVu
ZXJzLnNvcnQoZmlyZUNvbXBhcmF0b3IpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5j
dGlvbiBtYWtlRmlyZVNwZWMoKSB7CiAgICAgICAgICAgIHJldHVybiB7Z3VpZHM6IHt9LCBhbGw6
IFtdLCBsaXN0ZW5lcnM6IFtdLCB0cmFuc0xpc3RlbmVyczogW119OwogICAgICAgIH0KICAgICAg
ICAKICAgICAgICBmdW5jdGlvbiBnZXRGaXJlU3BlYyhuYW1lLCBjaGFuZ2VQYXRoKSB7CiAgICAg
ICAgICAgIHZhciBmaXJlU3BlYyA9IG1ha2VGaXJlU3BlYygpOwogICAgICAgICAgICBwcmVwYXJl
RmlyZUV2ZW50KG5hbWUsIGNoYW5nZVBhdGgsIGZpcmVTcGVjKTsKICAgICAgICAgICAgcmV0dXJu
IGZpcmVTcGVjOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBmaXJlRXZlbnQo
bmFtZSwgY2hhbmdlUGF0aCwgYXJncywgd3JhcHBlcikgewogICAgICAgICAgICB2YXIgZmlyZVNw
ZWMgPSBnZXRGaXJlU3BlYyhuYW1lLCBjaGFuZ2VQYXRoKTsKICAgICAgICAgICAgcmV0dXJuIGZp
cmVGcm9tU3BlYyhuYW1lLCBmaXJlU3BlYywgYXJncywgImFsbCIsIHdyYXBwZXIpOwogICAgICAg
IH0KICAgICAgICAKICAgICAgICBmdW5jdGlvbiBhZGFwdExpc3RlbmVyKHRoYXQsIG5hbWUpIHsK
ICAgICAgICAgICAgdGhhdFtuYW1lXSA9IHsKICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyOiBm
dW5jdGlvbiAoc3BlYywgbGlzdGVuZXIsIG5hbWVzcGFjZSkgewogICAgICAgICAgICAgICAgICAg
IGJhc2VFdmVudHNbbmFtZV0uYWRkTGlzdGVuZXIod3JhcExpc3RlbmVyKGxpc3RlbmVyLCBzcGVj
KSwgbmFtZXNwYWNlKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZW1vdmVM
aXN0ZW5lcjogZnVuY3Rpb24gKGxpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgICAgYmFzZUV2
ZW50c1tuYW1lXS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGFkYXB0TGlzdGVuZXIodGhhdCwgImd1YXJk
cyIpOwogICAgICAgIGFkYXB0TGlzdGVuZXIodGhhdCwgInBvc3RHdWFyZHMiKTsKICAgICAgICBh
ZGFwdExpc3RlbmVyKHRoYXQsICJtb2RlbENoYW5nZWQiKTsKICAgICAgICAKICAgICAgICBmdW5j
dGlvbiBwcmVGaXJlQ2hhbmdlUmVxdWVzdChjaGFuZ2VSZXF1ZXN0KSB7CiAgICAgICAgICAgIGlm
ICghY2hhbmdlUmVxdWVzdC50eXBlKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VSZXF1ZXN0LnR5
cGUgPSAiQUREIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGJhcmVBcHBs
aWVyID0gewogICAgICAgICAgICBmaXJlQ2hhbmdlUmVxdWVzdDogZnVuY3Rpb24gKGNoYW5nZVJl
cXVlc3QpIHsKICAgICAgICAgICAgICAgIHRoYXQuZmlyZUNoYW5nZVJlcXVlc3QoY2hhbmdlUmVx
dWVzdCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGJpbmRSZXF1ZXN0
Q2hhbmdlKGJhcmVBcHBsaWVyKTsKCiAgICAgICAgdGhhdC5maXJlQ2hhbmdlUmVxdWVzdCA9IGZ1
bmN0aW9uIChjaGFuZ2VSZXF1ZXN0LCBkZWZlYXRHdWFyZHMpIHsKICAgICAgICAgICAgcHJlRmly
ZUNoYW5nZVJlcXVlc3QoY2hhbmdlUmVxdWVzdCk7CiAgICAgICAgICAgIHZhciBndWFyZEZpcmVT
cGVjID0gZGVmZWF0R3VhcmRzID8gbnVsbCA6IGdldEZpcmVTcGVjKCJndWFyZHMiLCBjaGFuZ2VS
ZXF1ZXN0LnBhdGgpOwogICAgICAgICAgICBpZiAoZ3VhcmRGaXJlU3BlYyAmJiBndWFyZEZpcmVT
cGVjLnRyYW5zTGlzdGVuZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHZhciBhdGlv
biA9IHRoYXQuaW5pdGlhdGUoKTsKICAgICAgICAgICAgICAgIGF0aW9uLmZpcmVDaGFuZ2VSZXF1
ZXN0KGNoYW5nZVJlcXVlc3QsIGd1YXJkRmlyZVNwZWMpOwogICAgICAgICAgICAgICAgYXRpb24u
Y29tbWl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICBpZiAoIWRlZmVhdEd1YXJkcykgewogICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMg
dXNlIG9mICJsaXN0ZW5lcnMiIHNlZW1zIHBvaW50bGVzcyBzaW5jZSB3ZSBoYXZlIGp1c3QgdmVy
aWZpZWQgdGhhdCB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25hbCBsaXN0ZW5lcnMKICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJldmVudCA9IGZpcmVGcm9tU3BlYygiZ3VhcmRzIiwgZ3VhcmRGaXJl
U3BlYywgW21vZGVsLCBjaGFuZ2VSZXF1ZXN0LCBiYXJlQXBwbGllcl0sICJsaXN0ZW5lcnMiKTsK
ICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBvbGRNb2RlbCA9IG1vZGVsOwogICAgICAgICAg
ICAgICAgaWYgKCFvcHRpb25zLnRoaW4pIHsKICAgICAgICAgICAgICAgICAgICBvbGRNb2RlbCA9
IHt9OwogICAgICAgICAgICAgICAgICAgIGZsdWlkLm1vZGVsLmNvcHlNb2RlbChvbGRNb2RlbCwg
bW9kZWwpOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBmbHVpZC5tb2RlbC5hcHBseUNoYW5nZVJlcXVlc3QobW9kZWwsIGNoYW5nZVJlcXVlc3Qs
IG9wdGlvbnMucmVzb2x2ZXJTZXRDb25maWcpOwogICAgICAgICAgICAgICAgZmlyZUV2ZW50KCJt
b2RlbENoYW5nZWQiLCBjaGFuZ2VSZXF1ZXN0LnBhdGgsIFttb2RlbCwgb2xkTW9kZWwsIFtjaGFu
Z2VSZXF1ZXN0XV0pOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICBi
aW5kUmVxdWVzdENoYW5nZSh0aGF0KTsKCiAgICAgICAgZnVuY3Rpb24gZmlyZUFnZ2xvbWVyYXRl
ZChldmVudE5hbWUsIGZvcm1OYW1lLCBjaGFuZ2VzLCBhcmdzLCBhY2Nwb3MpIHsKICAgICAgICAg
ICAgdmFyIGZpcmVTcGVjID0gbWFrZUZpcmVTcGVjKCk7CiAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7ICsrIGkpIHsKICAgICAgICAgICAgICAgIHByZXBhcmVG
aXJlRXZlbnQoZXZlbnROYW1lLCBjaGFuZ2VzW2ldLnBhdGgsIGZpcmVTcGVjLCBjaGFuZ2VzW2ld
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZpcmVTcGVj
W2Zvcm1OYW1lXS5sZW5ndGg7ICsrIGopIHsKICAgICAgICAgICAgICAgIHZhciBzcGVjID0gZmly
ZVNwZWNbZm9ybU5hbWVdW2pdOwogICAgICAgICAgICAgICAgaWYgKGFjY3BvcykgewogICAgICAg
ICAgICAgICAgICAgIGFyZ3NbYWNjcG9zXSA9IHNwZWMuYWNjdW11bGF0ZTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHZhciByZXQgPSBzcGVjLmxpc3RlbmVyLmFwcGx5KG51bGws
IGFyZ3MpOwogICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIHRoYXQuaW5pdGlhdGUgPSBmdW5jdGlvbiAobmV3TW9kZWwpIHsKICAg
ICAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOwogICAgICAgICAgICB2YXIgY2hhbmdlcyA9
IFtdOwogICAgICAgICAgICBpZiAob3B0aW9ucy50aGluKSB7CiAgICAgICAgICAgICAgICBuZXdN
b2RlbCA9IG1vZGVsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgbmV3TW9kZWwgPSBuZXdNb2RlbCB8fCB7fTsKICAgICAgICAgICAgICAgIGZsdWlkLm1v
ZGVsLmNvcHlNb2RlbChuZXdNb2RlbCwgbW9kZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IC8vIHRoZSBndWFyZCBpbiB0aGUgaW5uZXIgd29ybGQgaXMgZ2l2ZW4gYSBwcml2YXRlIGFwcGxp
ZXIgdG8gImZhc3QgdHJhY2siCiAgICAgICAgICAgIC8vIGFuZCBnbG9iIGNvbGxhdGVyYWwgY2hh
bmdlcyBpdCByZXF1aXJlcwogICAgICAgICAgICB2YXIgaW50ZXJuYWxBcHBsaWVyID0gCiAgICAg
ICAgICAgICAge2ZpcmVDaGFuZ2VSZXF1ZXN0OiBmdW5jdGlvbiAoY2hhbmdlUmVxdWVzdCkgewog
ICAgICAgICAgICAgICAgICAgIHByZUZpcmVDaGFuZ2VSZXF1ZXN0KGNoYW5nZVJlcXVlc3QpOwog
ICAgICAgICAgICAgICAgICAgIGZsdWlkLm1vZGVsLmFwcGx5Q2hhbmdlUmVxdWVzdChuZXdNb2Rl
bCwgY2hhbmdlUmVxdWVzdCwgb3B0aW9ucy5yZXNvbHZlclNldENvbmZpZyk7CiAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZVJlcXVlc3QpOwogICAgICAgICAgICAgICAgfX07
CiAgICAgICAgICAgIGJpbmRSZXF1ZXN0Q2hhbmdlKGludGVybmFsQXBwbGllcik7CiAgICAgICAg
ICAgIHZhciBhdGlvbiA9IHsKICAgICAgICAgICAgICAgIGNvbW1pdDogZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICAgICAgICAgIHZhciBvbGRNb2RlbDsKICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuY2VsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGZpcmVBZ2dsb21l
cmF0ZWQoInBvc3RHdWFyZHMiLCAidHJhbnNMaXN0ZW5lcnMiLCBjaGFuZ2VzLCBbbmV3TW9kZWws
IG51bGwsIGludGVybmFsQXBwbGllcl0sIDEpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXQg
PT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhpbikgewog
ICAgICAgICAgICAgICAgICAgICAgICBvbGRNb2RlbCA9IG1vZGVsOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
b2xkTW9kZWwgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgZmx1aWQubW9kZWwuY29weU1v
ZGVsKG9sZE1vZGVsLCBtb2RlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsdWlkLmNsZWFy
KG1vZGVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgZmx1aWQubW9kZWwuY29weU1vZGVsKG1v
ZGVsLCBuZXdNb2RlbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IGZpcmVBZ2dsb21lcmF0ZWQoIm1vZGVsQ2hhbmdlZCIsICJhbGwiLCBjaGFuZ2VzLCBbbW9kZWws
IG9sZE1vZGVsLCBudWxsXSwgMik7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ZmlyZUNoYW5nZVJlcXVlc3Q6IGZ1bmN0aW9uIChjaGFuZ2VSZXF1ZXN0KSB7CiAgICAgICAgICAg
ICAgICAgICAgcHJlRmlyZUNoYW5nZVJlcXVlc3QoY2hhbmdlUmVxdWVzdCk7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuY3VsbFVuY2hhbmdlZCAmJiBmbHVpZC5tb2RlbC5pc051bGxD
aGFuZ2UobW9kZWwsIGNoYW5nZVJlcXVlc3QsIG9wdGlvbnMucmVzb2x2ZXJHZXRDb25maWcpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IAog
ICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gbWFrZUd1YXJkV3JhcHBlcihvcHRpb25z
LmN1bGxVbmNoYW5nZWQpOwogICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ZW50ID0gZmlyZUV2
ZW50KCJndWFyZHMiLCBjaGFuZ2VSZXF1ZXN0LnBhdGgsIFtuZXdNb2RlbCwgY2hhbmdlUmVxdWVz
dCwgaW50ZXJuYWxBcHBsaWVyXSwgd3JhcHBlcik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBy
ZXZlbnQgPT09IGZhbHNlICYmICEod3JhcHBlciAmJiB3cmFwcGVyLmN1bGxlZCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEod3JhcHBlciAmJiB3cmFwcGVyLmN1bGxlZCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsdWlkLm1vZGVsLmFwcGx5Q2hhbmdlUmVxdWVzdChuZXdNb2RlbCwgY2hh
bmdlUmVxdWVzdCwgb3B0aW9ucy5yZXNvbHZlclNldENvbmZpZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlUmVxdWVzdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH07CiAgICAgICAgICAgIGJpbmRSZXF1ZXN0Q2hhbmdlKGF0aW9uKTsKCiAgICAgICAgICAg
IHJldHVybiBhdGlvbjsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHJldHVybiB0aGF0Owog
ICAgfTsKICAgIAogICAgZmx1aWQubWFrZVN1cGVyQXBwbGllciA9IGZ1bmN0aW9uICgpIHsKICAg
ICAgICB2YXIgc3ViQXBwbGllcnMgPSBbXTsKICAgICAgICB2YXIgdGhhdCA9IHt9OwogICAgICAg
IHRoYXQuYWRkU3ViQXBwbGllciA9IGZ1bmN0aW9uIChwYXRoLCBzdWJBcHBsaWVyKSB7CiAgICAg
ICAgICAgIHN1YkFwcGxpZXJzLnB1c2goe3BhdGg6IHBhdGgsIHN1YkFwcGxpZXI6IHN1YkFwcGxp
ZXJ9KTsKICAgICAgICB9OwogICAgICAgIHRoYXQuZmlyZUNoYW5nZVJlcXVlc3QgPSBmdW5jdGlv
biAocmVxdWVzdCkgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YkFwcGxpZXJz
Lmxlbmd0aDsgKysgaSkgewogICAgICAgICAgICAgICAgdmFyIHBhdGggPSBzdWJBcHBsaWVyc1tp
XS5wYXRoOwogICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucGF0aC5pbmRleE9mKHBhdGgpID09
PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnBhdGggPSByZXF1ZXN0LnBhdGguc3Vi
c3RyaW5nKHBhdGgubGVuZ3RoICsgMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YlJlcXVl
c3QgPSBmbHVpZC5jb3B5KHJlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgIHN1YlJlcXVlc3Qu
cGF0aCA9IHN1YnBhdGg7CiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogRGVhbCB3aXRoIHRo
ZSBhcyB5ZXQgdW5zdXBwb3J0ZWQgY2FzZSBvZiBhbiBFTCBydmFsdWUgREFSCiAgICAgICAgICAg
ICAgICAgICAgc3ViQXBwbGllcnNbaV0uc3ViQXBwbGllci5maXJlQ2hhbmdlUmVxdWVzdChzdWJS
ZXF1ZXN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAg
ICAgYmluZFJlcXVlc3RDaGFuZ2UodGhhdCk7CiAgICAgICAgcmV0dXJuIHRoYXQ7CiAgICB9Owog
ICAgCiAgICBmbHVpZC5hdHRhY2hNb2RlbCA9IGZ1bmN0aW9uIChiYXNlTW9kZWwsIHBhdGgsIG1v
ZGVsKSB7CiAgICAgICAgdmFyIHNlZ3MgPSBmbHVpZC5tb2RlbC5wYXJzZUVMKHBhdGgpOwogICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyArKyBpKSB7CiAgICAgICAg
ICAgIHZhciBzZWcgPSBzZWdzW2ldOwogICAgICAgICAgICB2YXIgc3ViTW9kZWwgPSBiYXNlTW9k
ZWxbc2VnXTsKICAgICAgICAgICAgaWYgKCFzdWJNb2RlbCkgewogICAgICAgICAgICAgICAgYmFz
ZU1vZGVsW3NlZ10gPSBzdWJNb2RlbCA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJh
c2VNb2RlbCA9IHN1Yk1vZGVsOwogICAgICAgIH0KICAgICAgICBiYXNlTW9kZWxbc2Vnc1tzZWdz
Lmxlbmd0aCAtIDFdXSA9IG1vZGVsOwogICAgfTsKICAgIAogICAgZmx1aWQuYXNzZW1ibGVNb2Rl
bCA9IGZ1bmN0aW9uIChtb2RlbFNwZWMpIHsKICAgICAgICB2YXIgbW9kZWwgPSB7fTsKICAgICAg
ICB2YXIgc3VwZXJBcHBsaWVyID0gZmx1aWQubWFrZVN1cGVyQXBwbGllcigpOwogICAgICAgIHZh
ciB0b2dvID0ge21vZGVsOiBtb2RlbCwgYXBwbGllcjogc3VwZXJBcHBsaWVyfTsKICAgICAgICBm
b3IgKHZhciBwYXRoIGluIG1vZGVsU3BlYykgewogICAgICAgICAgICB2YXIgcmVjID0gbW9kZWxT
cGVjW3BhdGhdOwogICAgICAgICAgICBmbHVpZC5hdHRhY2hNb2RlbChtb2RlbCwgcGF0aCwgcmVj
Lm1vZGVsKTsKICAgICAgICAgICAgaWYgKHJlYy5hcHBsaWVyKSB7CiAgICAgICAgICAgICAgICBz
dXBlckFwcGxpZXIuYWRkU3ViQXBwbGllcihwYXRoLCByZWMuYXBwbGllcik7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvZ287CiAgICB9OwoKfSkoalF1ZXJ5LCBmbHVp
ZF8xXzQpOwpfEA90ZXh0L2phdmFzY3JpcHTUBQYHCF5fYGFfEEJodHRwOi8vZmx1aWRwcm9qZWN0
Lm9yZy9yZWxlYXNlcy8xLjQvZnJhbWV3b3JrL2NvcmUvanMvRmx1aWRJb0MuanNPEQQeYnBsaXN0
MDDUAQIDBAUGYmNYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QHQcIIigp
MBsxMkhJSktMTU5PUFFSU1RVVldYW1xdVSRudWxs3QkKCwwNDg8QERITFBUWFxgZGhscHR4fFyAh
UiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNzUiQ0UiQ5UiQwUiQ1UiQxgAcQCBAHgAiAAhAA
gBqAHIAFgBuABhAB0yMQJCUmJ1dOUy5iYXNlW05TLnJlbGF0aXZlgACABIADXxBCaHR0cDovL2Zs
dWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2ZyYW1ld29yay9jb3JlL2pzL0ZsdWlkSW9DLmpz
0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALr9h
uxDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9A
QUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1v
ZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBh
Y2hlLzIuMi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGyI0NDFlMDktZDVhOC00YWYz
M2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIg
MjAxNCAyMDo1MDo1NCBHTVRVYnl0ZXNVNTQ2OTZVY2xvc2XSKitZWlxOU0RpY3Rpb25hcnmiWS8R
1ahfEA90ZXh0L2phdmFzY3JpcHTSKiteX18QEU5TSFRUUFVSTFJlc3BvbnNlo2BhL18QEU5TSFRU
UFVSTFJlc3BvbnNlXU5TVVJMUmVzcG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRZGVfEBNXZWJSZXNv
dXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIANwBXAF0AeAB7AH8AggCFAIgAjACPAJYAmQCcAJ8A
ogClAKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9AMQAzADYANoA3ADeASMBKAEzATwBQgFFAUsBVAFd
AV8BZgFuAXkBggGEAYYBiAGKAYwBjgGQAZIBmwGdAZ8BoQGjAaUBpwGpAasBrQG0AcEBxgHUAdkB
5wH2AgECGgIsAkoCagKKApAClgKcAqECrgKxArQCxgLLAt8C4wL3AwUDFwMaAzAAAAAAAAACAQAA
AAAAAABmAAAAAAAAAAAAAAAAAAADMk8R1agvKgpDb3B5cmlnaHQgMjAxMSBPQ0FEIFVuaXZlcnNp
dHkKQ29weXJpZ2h0IDIwMTAtMjAxMSBMdWNlbmRvIERldmVsb3BtZW50IEx0ZC4KCkxpY2Vuc2Vk
IHVuZGVyIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSAoRUNMKSwgVmVyc2lvbiAy
LjAgb3IgdGhlIE5ldwpCU0QgbGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIG9uZSB0aGVzZQpMaWNlbnNlcy4KCllvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgRUNMIDIuMCBMaWNlbnNlIGFuZCBCU0QgTGljZW5zZSBhdApodHRwczov
L2dpdGh1Yi5jb20vZmx1aWQtcHJvamVjdC9pbmZ1c2lvbi9yYXcvbWFzdGVyL0luZnVzaW9uLUxJ
Q0VOU0UudHh0CiovCgovLyBEZWNsYXJlIGRlcGVuZGVuY2llcwovKmdsb2JhbCBmbHVpZF8xXzQ6
dHJ1ZSwgalF1ZXJ5Ki8KCi8vIEpTTGludCBvcHRpb25zIAovKmpzbGludCB3aGl0ZTogdHJ1ZSwg
ZnVuY2ludm9rZTogdHJ1ZSwgY29udGludWU6IHRydWUsIGVsc2VjYXRjaDogdHJ1ZSwgb3BlcmF0
b3I6IHRydWUsIGpzbGludG9rOnRydWUsIHVuZGVmOiB0cnVlLCBuZXdjYXA6IHRydWUsIHJlZ2V4
cDogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgYnJvd3NlcjogdHJ1ZSwgZm9yaW46IHRydWUsIG1heGVy
cjogMTAwLCBpbmRlbnQ6IDQgKi8KCnZhciBmbHVpZF8xXzQgPSBmbHVpZF8xXzQgfHwge307Cgoo
ZnVuY3Rpb24gKCQsIGZsdWlkKSB7CgogICAgLyoqIFRoZSBGbHVpZCAiSW9DIFN5c3RlbSBwcm9w
ZXIiIC0gcmVzb2x1dGlvbiBvZiByZWZlcmVuY2VzIGFuZCAKICAgICAqIGNvbXBsZXRlbHkgYXV0
b21hdGVkIGluc3RhbnRpYXRpb24gb2YgZGVjbGFyYXRpdmVseSBkZWZpbmVkCiAgICAgKiBjb21w
b25lbnQgdHJlZXMgKi8gCiAgICAKICAgIHZhciBpbkNyZWF0aW9uTWFya2VyID0gIl9fQ1VSUkVO
VExZX0lOX0NSRUFUSU9OX18iOwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5j
dGlvbgogICAgZmx1aWQuaXNGaXJlQnJlYWsgPSBmdW5jdGlvbihjb21wb25lbnQpIHsKICAgICAg
ICByZXR1cm4gY29tcG9uZW50Lm9wdGlvbnMgJiYgY29tcG9uZW50Lm9wdGlvbnNbImZsdWlkLnZp
c2l0Q29tcG9uZW50cy5maXJlQnJlYWsiXTsKICAgIH07CiAgICAKICAgIC8vIHVuc3VwcG9ydGVk
LCBub24tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC52aXNpdENvbXBvbmVudENoaWxkcmVuID0gZnVu
Y3Rpb24odGhhdCwgdmlzaXRvciwgb3B0aW9ucywgdXAsIGRvd24pIHsKICAgICAgICBvcHRpb25z
ID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoYXQpIHsKICAgICAg
ICAgICAgdmFyIGNvbXBvbmVudCA9IHRoYXRbbmFtZV07CiAgICAgICAgICAgIC8vRXZlcnkgY29t
cG9uZW50ICpzaG91bGQqIGhhdmUgYW4gaWQsIGJ1dCBzb21lIGNsaWVudHMgbWF5IG5vdCB5ZXQg
YmUgY29tcGxpYW50CiAgICAgICAgICAgIC8vaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQudHlw
ZU5hbWUgJiYgIWNvbXBvbmVudC5pZCkgewogICAgICAgICAgICAvLyAgICBmbHVpZC5mYWlsKCJO
byBpZCIpOwogICAgICAgICAgICAvL30KICAgICAgICAgICAgaWYgKCFjb21wb25lbnQgfHwgIWNv
bXBvbmVudC50eXBlTmFtZSB8fCAoY29tcG9uZW50LmlkICYmIG9wdGlvbnMudmlzaXRlZCAmJiBv
cHRpb25zLnZpc2l0ZWRbY29tcG9uZW50LmlkXSkpIHtjb250aW51ZTsgfQogICAgICAgICAgICBp
ZiAob3B0aW9ucy52aXNpdGVkKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zLnZpc2l0ZWRbY29t
cG9uZW50LmlkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHZpc2l0b3Io
Y29tcG9uZW50LCBuYW1lLCBvcHRpb25zLCB1cCwgZG93bikpIHsKICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZmx1aWQuaXNGaXJlQnJl
YWsoY29tcG9uZW50KSAmJiAhb3B0aW9ucy5mbGF0KSB7CiAgICAgICAgICAgICAgICBmbHVpZC52
aXNpdENvbXBvbmVudENoaWxkcmVuKGNvbXBvbmVudCwgdmlzaXRvciwgb3B0aW9ucywgdXAsIGRv
d24gKyAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIHRoYXRT
dGFjayBjb250YWlucyBhbiBpbmNyZWFzaW5nIGxpc3Qgb2YgTU9SRSBTUEVDSUZJQyB0aGF0cy4K
ICAgIHZhciB2aXNpdENvbXBvbmVudHMgPSBmdW5jdGlvbih0aGF0U3RhY2ssIHZpc2l0b3IsIG9w
dGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7CiAgICAgICAgICAgIHZpc2l0
ZWQ6IHt9LAogICAgICAgICAgICBmbGF0OiB0cnVlCiAgICAgICAgfTsKICAgICAgICB2YXIgdXAg
PSAwOwogICAgICAgIGZvciAodmFyIGkgPSB0aGF0U3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyAt
LWkpIHsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGF0U3RhY2tbaV07CiAgICAgICAgICAgIGlm
IChmbHVpZC5pc0ZpcmVCcmVhayh0aGF0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGF0LnR5cGVOYW1lKSB7CiAgICAgICAgICAgICAg
ICBvcHRpb25zLnZpc2l0ZWRbdGhhdC5pZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKHZp
c2l0b3IodGhhdCwgIiIsIG9wdGlvbnMsIDAsIDApKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmbHVp
ZC52aXNpdENvbXBvbmVudENoaWxkcmVuKHRoYXQsIHZpc2l0b3IsIG9wdGlvbnMsIHVwLCAxKSkg
ewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICsrdXA7
CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLy8gQW4gRUwgc2VnbWVudCByZXNvbHZlciBzdHJh
dGVneSB0aGF0IHdpbGwgYXR0ZW1wdCB0byB0cmlnZ2VyIGNyZWF0aW9uIG9mCiAgICAvLyBjb21w
b25lbnRzIHRoYXQgaXQgZGlzY292ZXJzIGFsb25nIHRoZSBFTCBwYXRoLCBpZiB0aGV5IGhhdmUg
YmVlbiBkZWZpbmVkIGJ1dCBub3QgeWV0CiAgICAvLyBjb25zdHJ1Y3RlZC4gU3ByaW5nLCBlYXQg
eW91ciBoZWFydCBvdXQhIFdvdCBubyBTUFItMjA0OD8KICAgIAogICAgZnVuY3Rpb24gbWFrZUdp
bmdlclN0cmF0ZWd5KGluc3RhbnRpYXRvciwgdGhhdCwgdGhhdFN0YWNrKSB7CiAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKGNvbXBvbmVudCwgdGhpc1NlZykgewogICAgICAgICAgICB2YXIgYXR2YWwg
PSBjb21wb25lbnRbdGhpc1NlZ107CiAgICAgICAgICAgIGlmIChhdHZhbCA9PT0gdW5kZWZpbmVk
KSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyZW50UGF0aCA9IGluc3RhbnRpYXRvci5pZFRvUGF0
aFtjb21wb25lbnQuaWRdOwogICAgICAgICAgICAgICAgYXR2YWwgPSBpbnN0YW50aWF0b3IucGF0
aFRvQ29tcG9uZW50W2ZsdWlkLmNvbXBvc2VQYXRoKHBhcmVudFBhdGgsIHRoaXNTZWcpXTsKICAg
ICAgICAgICAgICAgIC8vIGlmIGl0IHdhcyBub3QgYXR0YWNoZWQgdG8gdGhlIGNvbXBvbmVudCwg
YnV0IGl0IGlzIGluIHRoZSBpbnN0YW50aWF0b3IsIGl0IE1VU1QgYmUgaW4gY3JlYXRpb24gLSBw
cmVwYXJlIHRvIGZhaWwKICAgICAgICAgICAgICAgIGlmIChhdHZhbCkgewogICAgICAgICAgICAg
ICAgICAgIGF0dmFsW2luQ3JlYXRpb25NYXJrZXJdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0g
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dmFsICE9PSB1bmRlZmluZWQpIHsKICAg
ICAgICAgICAgICAgIGlmIChhdHZhbFtpbkNyZWF0aW9uTWFya2VyXSkgewogICAgICAgICAgICAg
ICAgICAgIGZsdWlkLmZhaWwoIkNvbXBvbmVudCAiICsgZmx1aWQuZHVtcFRoYXQoYXR2YWwpICsg
IiBhdCBwYXRoIFwiIiArIHRoaXNTZWcgCiAgICAgICAgICAgICAgICAgICAgICAgICsgIlwiIG9m
IHBhcmVudCAiICsgZmx1aWQuZHVtcFRoYXQoY29tcG9uZW50KSArICIgY2Fubm90IGJlIHVzZWQg
Zm9yIGxvb2t1cCIgCiAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzaW5jZSBpdCBpcyBzdGls
bCBpbiBjcmVhdGlvbi4gUGxlYXNlIHJlb3JnYW5pc2UgeW91ciBkZXBlbmRlbmNpZXMgc28gdGhh
dCB0aGV5IG5vIGxvbmdlciBjb250YWluIGNpcmN1bGFyIHJlZmVyZW5jZXMiKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
IGlmIChmbHVpZC5nZXQoY29tcG9uZW50LCBmbHVpZC5wYXRoKCJvcHRpb25zIiwgImNvbXBvbmVu
dHMiLCB0aGlzU2VnLCAidHlwZSIpKSkgewogICAgICAgICAgICAgICAgICAgIGZsdWlkLmluaXRE
ZXBlbmRlbnQoY29tcG9uZW50LCB0aGlzU2VnKTsKICAgICAgICAgICAgICAgICAgICBhdHZhbCA9
IGNvbXBvbmVudFt0aGlzU2VnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICByZXR1cm4gYXR2YWw7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgLy8gdW5zdXBw
b3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmR1bXBUaGF0ID0gZnVuY3Rpb24odGhh
dCwgaW5zdGFudGlhdG9yKSB7CiAgICAgICAgcmV0dXJuICJ7IHR5cGVOYW1lOiBcIiIgKyB0aGF0
LnR5cGVOYW1lICsgIlwiIGlkOiAiICsgdGhhdC5pZCArICJ9IjsKICAgIH07CiAgICAKICAgICAg
ICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuZHVtcFRoYXRTdGFj
ayA9IGZ1bmN0aW9uKHRoYXRTdGFjaywgaW5zdGFudGlhdG9yKSB7CiAgICAgICAgdmFyIHRvZ28g
PSBmbHVpZC50cmFuc2Zvcm0odGhhdFN0YWNrLCBmdW5jdGlvbih0aGF0KSB7CiAgICAgICAgICAg
IHZhciBwYXRoID0gaW5zdGFudGlhdG9yLmlkVG9QYXRoW3RoYXQuaWRdOwogICAgICAgICAgICBy
ZXR1cm4gZmx1aWQuZHVtcFRoYXQodGhhdCkgKyAocGF0aD8gKCIgLSBwYXRoOiAiICsgcGF0aCkg
OiAiIik7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRvZ28uam9pbigiXG4iKTsKICAgIH07
CgogICAgLy8gUmV0dXJuIGFuIGFycmF5IG9mIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgY3VycmVu
dCBhY3Rpdml0eQogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlk
LmRlc2NyaWJlQWN0aXZpdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZmx1aWQudGhy
ZWFkTG9jYWwoKS5hY3Rpdml0eVN0YWNrIHx8IFtdOwogICAgfTsKICAgIAogICAgLy8gRXhlY3V0
ZSB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGFjdGl2aXR5IGRlc2Ny
aXB0aW9uIHB1c2hlZCBvbnRvIHRoZSBzdGFjawogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkg
ZnVuY3Rpb24KICAgIGZsdWlkLnB1c2hBY3Rpdml0eSA9IGZ1bmN0aW9uKGZ1bmMsIG1lc3NhZ2Up
IHsKICAgICAgICBpZiAoIW1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKTsKICAg
ICAgICB9CiAgICAgICAgdmFyIHJvb3QgPSBmbHVpZC50aHJlYWRMb2NhbCgpOwogICAgICAgIGlm
ICghcm9vdC5hY3Rpdml0eVN0YWNrKSB7CiAgICAgICAgICAgIHJvb3QuYWN0aXZpdHlTdGFjayA9
IFtdOwogICAgICAgIH0KICAgICAgICB2YXIgZnJhbWVzID0gZmx1aWQubWFrZUFycmF5KG1lc3Nh
Z2UpOwogICAgICAgIGZyYW1lcy5wdXNoKCJcbiIpOwogICAgICAgIGZyYW1lcy51bnNoaWZ0KCJc
biIpOwogICAgICAgIHJvb3QuYWN0aXZpdHlTdGFjayA9IGZyYW1lcy5jb25jYXQocm9vdC5hY3Rp
dml0eVN0YWNrKTsKICAgICAgICByZXR1cm4gZmx1aWQudHJ5Q2F0Y2goZnVuYywgbnVsbCwgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgIHJvb3QuYWN0aXZpdHlTdGFjayA9IHJvb3QuYWN0aXZpdHlT
dGFjay5zbGljZShmcmFtZXMubGVuZ3RoKTsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8v
IFJldHVybiBhIGZ1bmN0aW9uIHdyYXBwZWQgYnkgdGhlIGFjdGl2aXR5IG9mIGRlc2NyaWJpbmcg
aXRzIGFjdGl2aXR5CiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1
aWQud3JhcEFjdGl2aXR5ID0gZnVuY3Rpb24oZnVuYywgbWVzc2FnZVNwZWMpIHsKICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gZmx1aWQubWFrZUFycmF5
KGFyZ3VtZW50cyk7CiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZmx1aWQudHJhbnNmb3JtKGZs
dWlkLm1ha2VBcnJheShtZXNzYWdlU3BlYyksIGZ1bmN0aW9uKHNwZWNFbCkgewogICAgICAgICAg
ICAgICAgaWYgKHNwZWNFbC5pbmRleE9mKCJhcmd1bWVudHMuIikgPT09IDApIHsKICAgICAgICAg
ICAgICAgICAgICB2YXIgZWwgPSBzcGVjRWwuc3Vic3RyaW5nKCJhcmd1bWVudHMuIi5sZW5ndGgp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVpZC5nZXQoYXJncywgZWwpOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNwZWNFbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
IHJldHVybiBmbHVpZC5wdXNoQWN0aXZpdHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICAgICAgfSwgbWVzc2FnZSk7CiAg
ICAgICAgfTsKICAgIH07CgogICAgdmFyIGxvY2FsUmVjb3JkRXhwZWN0ZWQgPSAvYXJndW1lbnRz
fG9wdGlvbnN8Y29udGFpbmVyLzsKCiAgICBmdW5jdGlvbiBtYWtlU3RhY2tGZXRjaGVyKGluc3Rh
bnRpYXRvciwgcGFyZW50VGhhdCwgbG9jYWxSZWNvcmQsIGV4cGFuZE9wdGlvbnMpIHsKICAgICAg
ICBleHBhbmRPcHRpb25zID0gZXhwYW5kT3B0aW9ucyB8fCB7fTsKICAgICAgICB2YXIgdGhhdFN0
YWNrID0gaW5zdGFudGlhdG9yLmdldEZ1bGxTdGFjayhwYXJlbnRUaGF0KTsKICAgICAgICB2YXIg
ZmV0Y2hTdHJhdGVnaWVzID0gW2ZsdWlkLm1vZGVsLmZ1bmNSZXNvbHZlclN0cmF0ZWd5LCBtYWtl
R2luZ2VyU3RyYXRlZ3koaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0LCB0aGF0U3RhY2spXTsgCiAg
ICAgICAgdmFyIGZldGNoZXIgPSBmdW5jdGlvbihwYXJzZWQpIHsKICAgICAgICAgICAgdmFyIGNv
bnRleHQgPSBwYXJzZWQuY29udGV4dDsKICAgICAgICAgICAgaWYgKGxvY2FsUmVjb3JkICYmIGxv
Y2FsUmVjb3JkRXhwZWN0ZWQudGVzdChjb250ZXh0KSkgewogICAgICAgICAgICAgICAgdmFyIGZl
dGNoZWQgPSBmbHVpZC5nZXQobG9jYWxSZWNvcmRbY29udGV4dF0sIHBhcnNlZC5wYXRoKTsKICAg
ICAgICAgICAgICAgIHJldHVybiAoY29udGV4dCA9PT0gImFyZ3VtZW50cyIgfHwgZXhwYW5kT3B0
aW9ucy5kaXJlY3QpPyBmZXRjaGVkIDogewogICAgICAgICAgICAgICAgICAgIG1hcmtlcjogY29u
dGV4dCA9PT0gIm9wdGlvbnMiPyBmbHVpZC5FWFBBTkQgOiBmbHVpZC5FWFBBTkRfTk9XLAogICAg
ICAgICAgICAgICAgICAgIHZhbHVlOiBmZXRjaGVkCiAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIHZhciBmb3VuZENvbXBvbmVudDsKICAgICAgICAgICAgdmlzaXRD
b21wb25lbnRzKHRoYXRTdGFjaywgZnVuY3Rpb24oY29tcG9uZW50LCBuYW1lLCBvcHRpb25zLCB1
cCwgZG93bikgewogICAgICAgICAgICAgICAgaWYgKGNvbnRleHQgPT09IG5hbWUgfHwgY29udGV4
dCA9PT0gY29tcG9uZW50LnR5cGVOYW1lIHx8IGNvbnRleHQgPT09IGNvbXBvbmVudC5uaWNrTmFt
ZSkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kQ29tcG9uZW50ID0gY29tcG9uZW50OwogICAg
ICAgICAgICAgICAgICAgIGlmIChkb3duID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBm
bHVpZC5sb2coIioqKldBUk5JTkc6IHZhbHVlIHJlc29sdXRpb24gZm9yIGNvbnRleHQgIiArIGNv
bnRleHQgKyAiIGZvdW5kIGF0IGRlcHRoICIgKyBkb3duICsgIjogdGhpcyBtYXkgbm90IGJlIHN1
cHBvcnRlZCBpbiBmdXR1cmUiKTsgICAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFlPVVIgVklTSVQgSVMgQVQgQU4gRU5EISEKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmbHVpZC5nZXQoY29tcG9uZW50LCBmbHVp
ZC5wYXRoKCJvcHRpb25zIiwgImNvbXBvbmVudHMiLCBjb250ZXh0LCAidHlwZSIpKSAmJiAhY29t
cG9uZW50W2NvbnRleHRdKSB7CiAgICAgICAgICAgICAgICAgICAgZm91bmRDb21wb25lbnQgPSBm
bHVpZC5nZXQoY29tcG9uZW50LCBjb250ZXh0LCB7c3RyYXRlZ2llczogZmV0Y2hTdHJhdGVnaWVz
fSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIWZvdW5kQ29tcG9uZW50ICYmIHBhcnNlZC5w
YXRoICE9PSAiIikgewogICAgICAgICAgICAgICAgdmFyIHJlZiA9IGZsdWlkLnJlbmRlckNvbnRl
eHRSZWZlcmVuY2UocGFyc2VkKTsKICAgICAgICAgICAgICAgIGZsdWlkLmxvZygiRmFpbGVkIHRv
IHJlc29sdmUgcmVmZXJlbmNlICIgKyByZWYgKyAiOiB0aGF0U3RhY2sgY29udGFpbnNcbiIgKyBm
bHVpZC5kdW1wVGhhdFN0YWNrKHRoYXRTdGFjaywgaW5zdGFudGlhdG9yKSk7CiAgICAgICAgICAg
ICAgICBmbHVpZC5mYWlsKCJGYWlsZWQgdG8gcmVzb2x2ZSByZWZlcmVuY2UgIiArIHJlZiArICIg
LSBjb3VsZCBub3QgbWF0Y2ggY29udGV4dCB3aXRoIG5hbWUgIiAKICAgICAgICAgICAgICAgICAg
ICArIGNvbnRleHQgKyAiIGZyb20gY29tcG9uZW50IHJvb3Qgb2YgdHlwZSAiICsgdGhhdFN0YWNr
WzBdLnR5cGVOYW1lLCAiXG5pbnN0YW50aWF0b3IgY29udGVudHM6ICIsIGluc3RhbnRpYXRvcik7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmdldChmb3VuZENvbXBvbmVu
dCwgcGFyc2VkLnBhdGgsIGZldGNoU3RyYXRlZ2llcyk7CiAgICAgICAgfTsKICAgICAgICByZXR1
cm4gZmV0Y2hlcjsKICAgIH0KICAgICAKICAgIGZ1bmN0aW9uIG1ha2VTdGFja1Jlc29sdmVyT3B0
aW9ucyhpbnN0YW50aWF0b3IsIHBhcmVudFRoYXQsIGxvY2FsUmVjb3JkLCBleHBhbmRPcHRpb25z
KSB7CiAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHt9LCBmbHVpZC5kZWZhdWx0cygiZmx1aWQucmVz
b2x2ZUVudmlyb25tZW50IiksIHsKICAgICAgICAgICAgZmV0Y2hlcjogbWFrZVN0YWNrRmV0Y2hl
cihpbnN0YW50aWF0b3IsIHBhcmVudFRoYXQsIGxvY2FsUmVjb3JkLCBleHBhbmRPcHRpb25zKQog
ICAgICAgIH0pOyAKICAgIH0KICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rp
b24KICAgIGZsdWlkLmluc3RhbnRpYXRvciA9IGZ1bmN0aW9uKGZyZWVJbnN0YW50aWF0b3IpIHsK
ICAgICAgICAvLyBOQjogV2UgbWF5IG5vdCB1c2UgdGhlIG9wdGlvbnMgbWVyZ2luZyBmcmFtZXdv
cmsgaXRzZWxmIGhlcmUsIHNpbmNlICJ3aXRoSW5zdGFudGlhdG9yIiBiZWxvdwogICAgICAgIC8v
IHdpbGwgYmxvdyB1cCwgYXMgaXQgdHJpZXMgdG8gcmVzb2x2ZSB0aGUgaW5zdGFudGlhdG9yIHdo
aWNoIHdlIGFyZSBpbnN0YW50aWF0aW5nICpOT1cqCiAgICAgICAgdmFyIHByZVRoYXQgPSB7CiAg
ICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICJmbHVpZC52aXNpdENvbXBvbmVu
dHMuZmlyZUJyZWFrIjogdHJ1ZSAgICAgICAgIAogICAgICAgICAgICB9LAogICAgICAgICAgICBp
ZFRvUGF0aDoge30sCiAgICAgICAgICAgIHBhdGhUb0NvbXBvbmVudDoge30sCiAgICAgICAgICAg
IHN0YWNrQ291bnQ6IDAsCiAgICAgICAgICAgIG5pY2tOYW1lOiAiaW5zdGFudGlhdG9yIgogICAg
ICAgIH07CiAgICAgICAgdmFyIHRoYXQgPSBmbHVpZC50eXBlVGFnKCJmbHVpZC5pbnN0YW50aWF0
b3IiKTsKICAgICAgICB0aGF0ID0gJC5leHRlbmQodGhhdCwgcHJlVGhhdCk7CgogICAgICAgIHRo
YXQuc3RhY2sgPSBmdW5jdGlvbihjb3VudCkgewogICAgICAgICAgICByZXR1cm4gdGhhdC5zdGFj
a0NvdW50ICs9IGNvdW50OwogICAgICAgIH07CiAgICAgICAgdGhhdC5nZXRUaGF0U3RhY2sgPSBm
dW5jdGlvbihjb21wb25lbnQpIHsKICAgICAgICAgICAgdmFyIHBhdGggPSB0aGF0LmlkVG9QYXRo
W2NvbXBvbmVudC5pZF0gfHwgIiI7CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBmbHVpZC5tb2Rl
bC5wYXJzZUVMKHBhdGgpOwogICAgICAgICAgICB2YXIgdG9nbyA9IGZsdWlkLnRyYW5zZm9ybShw
YXJzZWQsIGZ1bmN0aW9uKHZhbHVlLCBpKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyZW50UGF0
aCA9IGZsdWlkLm1vZGVsLmNvbXBvc2VTZWdtZW50cy5hcHBseShudWxsLCBwYXJzZWQuc2xpY2Uo
MCwgaSArIDEpKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGF0LnBhdGhUb0NvbXBvbmVudFtw
YXJlbnRQYXRoXTsgICAgCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgcm9vdCA9IHRo
YXQucGF0aFRvQ29tcG9uZW50WyIiXTsKICAgICAgICAgICAgaWYgKHJvb3QpIHsKICAgICAgICAg
ICAgICAgIHRvZ28udW5zaGlmdChyb290KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1
cm4gdG9nbzsKICAgICAgICB9OwogICAgICAgIHRoYXQuZ2V0RW52aXJvbm1lbnRhbFN0YWNrID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB0b2dvID0gW2ZsdWlkLnN0YXRpY0Vudmlyb25t
ZW50XTsKICAgICAgICAgICAgaWYgKCFmcmVlSW5zdGFudGlhdG9yKSB7CiAgICAgICAgICAgICAg
ICB0b2dvLnB1c2goZmx1aWQudGhyZWFkTG9jYWwoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuIHRvZ287CiAgICAgICAgfTsKICAgICAgICB0aGF0LmdldEZ1bGxTdGFjayA9IGZ1
bmN0aW9uKGNvbXBvbmVudCkgewogICAgICAgICAgICB2YXIgdGhhdFN0YWNrID0gY29tcG9uZW50
PyB0aGF0LmdldFRoYXRTdGFjayhjb21wb25lbnQpIDogW107CiAgICAgICAgICAgIHJldHVybiB0
aGF0LmdldEVudmlyb25tZW50YWxTdGFjaygpLmNvbmNhdCh0aGF0U3RhY2spOwogICAgICAgIH07
CiAgICAgICAgZnVuY3Rpb24gcmVjb3JkQ29tcG9uZW50KGNvbXBvbmVudCwgcGF0aCkgewogICAg
ICAgICAgICB0aGF0LmlkVG9QYXRoW2NvbXBvbmVudC5pZF0gPSBwYXRoOwogICAgICAgICAgICBp
ZiAodGhhdC5wYXRoVG9Db21wb25lbnRbcGF0aF0pIHsKICAgICAgICAgICAgICAgIGZsdWlkLmZh
aWwoIkVycm9yIGR1cmluZyBpbnN0YW50aWF0aW9uIC0gcGF0aCAiICsgcGF0aCArICIgd2hpY2gg
aGFzIGp1c3QgY3JlYXRlZCBjb21wb25lbnQgIiArIGZsdWlkLmR1bXBUaGF0KGNvbXBvbmVudCkg
CiAgICAgICAgICAgICAgICAgICAgKyAiIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3IgY29tcG9u
ZW50ICIgKyBmbHVpZC5kdW1wVGhhdCh0aGF0LnBhdGhUb0NvbXBvbmVudFtwYXRoXSkgKyAiIC0g
dGhpcyBpcyBhIGNpcmN1bGFyIGluc3RhbnRpYXRpb24gb3Igb3RoZXIgb3ZlcnNpZ2h0LiIKICAg
ICAgICAgICAgICAgICAgICArICIgUGxlYXNlIGNsZWFyIHRoZSBjb21wb25lbnQgdXNpbmcgaW5z
dGFudGlhdG9yLmNsZWFyQ29tcG9uZW50KCkgYmVmb3JlIHJldXNpbmcgdGhlIHBhdGguIik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgdGhhdC5wYXRoVG9Db21wb25lbnRbcGF0aF0gPSBjb21w
b25lbnQ7ICAgICAgICAgIAogICAgICAgIH0KICAgICAgICB0aGF0LnJlY29yZFJvb3QgPSBmdW5j
dGlvbihjb21wb25lbnQpIHsKICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQu
aWQgJiYgIXRoYXQucGF0aFRvQ29tcG9uZW50WyIiXSkgewogICAgICAgICAgICAgICAgcmVjb3Jk
Q29tcG9uZW50KGNvbXBvbmVudCwgIiIpOwogICAgICAgICAgICB9ICAKICAgICAgICB9OwogICAg
ICAgIHRoYXQucHVzaFVwY29taW5nSW5zdGFudGlhdGlvbiA9IGZ1bmN0aW9uKHBhcmVudCwgbmFt
ZSkgewogICAgICAgICAgICB0aGF0LmV4cGVjdGVkUGFyZW50ID0gcGFyZW50OwogICAgICAgICAg
ICB0aGF0LmV4cGVjdGVkTmFtZSA9IG5hbWU7CiAgICAgICAgfTsKICAgICAgICB0aGF0LnJlY29y
ZENvbXBvbmVudCA9IGZ1bmN0aW9uKGNvbXBvbmVudCkgewogICAgICAgICAgICBpZiAodGhhdC5l
eHBlY3RlZE5hbWUpIHsKICAgICAgICAgICAgICAgIHRoYXQucmVjb3JkS25vd25Db21wb25lbnQo
dGhhdC5leHBlY3RlZFBhcmVudCwgY29tcG9uZW50LCB0aGF0LmV4cGVjdGVkTmFtZSk7CiAgICAg
ICAgICAgICAgICBkZWxldGUgdGhhdC5leHBlY3RlZE5hbWU7CiAgICAgICAgICAgICAgICBkZWxl
dGUgdGhhdC5leHBlY3RlZFBhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRoYXQucmVjb3JkUm9vdChjb21wb25lbnQpOwogICAgICAgICAgICB9
CiAgICAgICAgfTsKICAgICAgICB0aGF0LmNsZWFyQ29tcG9uZW50ID0gZnVuY3Rpb24oY29tcG9u
ZW50LCBuYW1lLCBjaGlsZCwgb3B0aW9ucywgbm9Nb2RUcmVlKSB7CiAgICAgICAgICAgIG9wdGlv
bnMgPSBvcHRpb25zIHx8IHt2aXNpdGVkOiB7fSwgZmxhdDogdHJ1ZX07CiAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQgfHwgY29tcG9uZW50W25hbWVdOwogICAgICAgICAgICBmbHVpZC52aXNpdENv
bXBvbmVudENoaWxkcmVuKGNoaWxkLCBmdW5jdGlvbihnY2hpbGQsIGdjaGlsZG5hbWUpIHsKICAg
ICAgICAgICAgICAgIHRoYXQuY2xlYXJDb21wb25lbnQoY2hpbGQsIGdjaGlsZG5hbWUsIG51bGws
IG9wdGlvbnMsIG5vTW9kVHJlZSk7CiAgICAgICAgICAgIH0sIG9wdGlvbnMpOwogICAgICAgICAg
ICB2YXIgcGF0aCA9IHRoYXQuaWRUb1BhdGhbY2hpbGQuaWRdOwogICAgICAgICAgICBkZWxldGUg
dGhhdC5pZFRvUGF0aFtjaGlsZC5pZF07CiAgICAgICAgICAgIGRlbGV0ZSB0aGF0LnBhdGhUb0Nv
bXBvbmVudFtwYXRoXTsKICAgICAgICAgICAgaWYgKCFub01vZFRyZWUpIHsKICAgICAgICAgICAg
ICAgIGRlbGV0ZSBjb21wb25lbnRbbmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAg
ICAgIHRoYXQucmVjb3JkS25vd25Db21wb25lbnQgPSBmdW5jdGlvbihwYXJlbnQsIGNvbXBvbmVu
dCwgbmFtZSkgewogICAgICAgICAgICB2YXIgcGFyZW50UGF0aCA9IHRoYXQuaWRUb1BhdGhbcGFy
ZW50LmlkXSB8fCAiIjsKICAgICAgICAgICAgdmFyIHBhdGggPSBmbHVpZC5tb2RlbC5jb21wb3Nl
UGF0aChwYXJlbnRQYXRoLCBuYW1lKTsKICAgICAgICAgICAgcmVjb3JkQ29tcG9uZW50KGNvbXBv
bmVudCwgcGF0aCk7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gdGhhdDsKICAgIH07CiAgICAK
ICAgIGZsdWlkLmZyZWVJbnN0YW50aWF0b3IgPSBmbHVpZC5pbnN0YW50aWF0b3IodHJ1ZSk7CiAg
ICAKICAgIC8vIHVuc3VwcG9ydGVkLCBub24tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5hcmdNYXBU
b0RlbWFuZHMgPSBmdW5jdGlvbihhcmdNYXApIHsKICAgICAgICB2YXIgdG9nbyA9IFtdOwogICAg
ICAgIGZsdWlkLmVhY2goYXJnTWFwLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAg
IHRvZ29bdmFsdWVdID0gInsiICsga2V5ICsgIn0iOyAgCiAgICAgICAgfSk7CiAgICAgICAgcmV0
dXJuIHRvZ287CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlv
bgogICAgZmx1aWQubWFrZVBhc3NBcmdzU3BlYyA9IGZ1bmN0aW9uKGluaXRBcmdzKSB7CiAgICAg
ICAgcmV0dXJuIGZsdWlkLnRyYW5zZm9ybShpbml0QXJncywgZnVuY3Rpb24oYXJnLCBpbmRleCkg
ewogICAgICAgICAgICByZXR1cm4gInthcmd1bWVudHN9LiIgKyBpbmRleDsKICAgICAgICB9KTsK
ICAgIH07CiAgICAKICAgIGZ1bmN0aW9uIG1lcmdlVG9NZXJnZUFsbChvcHRpb25zKSB7CiAgICAg
ICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5tZXJnZU9wdGlvbnMpIHsKICAgICAgICAgICAgb3B0
aW9ucy5tZXJnZUFsbE9wdGlvbnMgPSBbIntvcHRpb25zfSJdLmNvbmNhdChmbHVpZC5tYWtlQXJy
YXkob3B0aW9ucy5tZXJnZU9wdGlvbnMpKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0
aW9uIHVwZ3JhZGVNZXJnZU9wdGlvbnMoZGVtYW5kc3BlYykgewogICAgICAgIG1lcmdlVG9NZXJn
ZUFsbChkZW1hbmRzcGVjKTsKICAgICAgICBpZiAoZGVtYW5kc3BlYy5tZXJnZUFsbE9wdGlvbnMp
IHsKICAgICAgICAgICAgaWYgKGRlbWFuZHNwZWMub3B0aW9ucykgewogICAgICAgICAgICAgICAg
Zmx1aWQuZmFpbCgiZGVtYW5kc3BlYyAiLCBkZW1hbmRzcGVjLCAKICAgICAgICAgICAgICAgICAg
ICAiIGlzIGludmFsaWQgLSBjYW5ub3Qgc3BlY2lmeSBsaXRlcmFsIG9wdGlvbnMgdG9nZXRoZXIg
d2l0aCBtZXJnZU9wdGlvbnMgb3IgbWVyZ2VBbGxPcHRpb25zIik7IAogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGRlbWFuZHNwZWMub3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgIG1lcmdlQWxs
T3B0aW9uczogZGVtYW5kc3BlYy5tZXJnZUFsbE9wdGlvbnMKICAgICAgICAgICAgfTsKICAgICAg
ICB9CiAgICAgICAgaWYgKGRlbWFuZHNwZWMub3B0aW9ucykgewogICAgICAgICAgICBkZWxldGUg
ZGVtYW5kc3BlYy5vcHRpb25zLm1lcmdlT3B0aW9uczsKICAgICAgICB9CiAgICB9CiAgICAKICAg
IC8qKiBHaXZlbiBhIGNvbmNyZXRlIGFyZ3VtZW50IGxpc3QgYW5kL29yIG9wdGlvbnMsIGRldGVy
bWluZSB0aGUgZmluYWwgY29uY3JldGUKICAgICAqICJpbnZvY2F0aW9uIHNwZWNpZmljYXRpb24i
IHdoaWNoIGlzIGNvZGVkIGJ5IHRoZSBzdXBwbGllZCBkZW1hbmRzcGVjIGluIHRoZSAKICAgICAq
IGVudmlyb25tZW50ICJ0aGF0U3RhY2siIC0gdGhlIHJldHVybiBpcyBhIHBhY2thZ2Ugb2YgY29u
Y3JldGUgZ2xvYmFsIGZ1bmN0aW9uIG5hbWUKICAgICAqIGFuZCBhcmd1bWVudCBsaXN0IHdoaWNo
IGlzIHN1aXRhYmxlIHRvIGJlIGV4ZWN1dGVkIGRpcmVjdGx5IGJ5IGZsdWlkLmludm9rZUdsb2Jh
bEZ1bmN0aW9uLgogICAgICovCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgog
ICAgZmx1aWQuZW1ib2R5RGVtYW5kcyA9IGZ1bmN0aW9uKGluc3RhbnRpYXRvciwgcGFyZW50VGhh
dCwgZGVtYW5kc3BlYywgaW5pdEFyZ3MsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKICAgICAgICAKICAgICAgICB1cGdyYWRlTWVyZ2VPcHRpb25zKGRlbWFuZHNw
ZWMpOwogICAgICAgIHZhciBvbGRPcHRpb25zID0gZmx1aWQuZ2V0KG9wdGlvbnMsICJjb21wb25l
bnRSZWNvcmQub3B0aW9ucyIpOwogICAgICAgIG9wdGlvbnMuY29tcG9uZW50UmVjb3JkID0gJC5l
eHRlbmQodHJ1ZSwge30sIG9wdGlvbnMuY29tcG9uZW50UmVjb3JkLCAKICAgICAgICAgICAgZmx1
aWQuY2Vuc29yS2V5cyhkZW1hbmRzcGVjLCBbImFyZ3MiLCAiZnVuY05hbWUiLCAicmVnaXN0ZXJl
ZEZyb20iXSkpOwogICAgICAgIHZhciBtZXJnZUFsbFplcm8gPSBmbHVpZC5nZXQob3B0aW9ucywg
ImNvbXBvbmVudFJlY29yZC5vcHRpb25zLm1lcmdlQWxsT3B0aW9ucy4wIik7CiAgICAgICAgaWYg
KG1lcmdlQWxsWmVybyA9PT0gIntvcHRpb25zfSIpIHsKICAgICAgICAgICAgZmx1aWQuc2V0KG9w
dGlvbnMsICJjb21wb25lbnRSZWNvcmQub3B0aW9ucy5tZXJnZUFsbE9wdGlvbnMuMCIsIG9sZE9w
dGlvbnMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgZGVtYW5kcyA9ICQubWFrZUFy
cmF5KGRlbWFuZHNwZWMuYXJncyk7CiAgICAgICAgdmFyIHVwRGVmYXVsdHMgPSBmbHVpZC5kZWZh
dWx0cyhkZW1hbmRzcGVjLmZ1bmNOYW1lKTsgLy8gSSBjYW4gU0VFIGludG8gVElNRSEhCiAgICAg
ICAgdmFyIGFyZ01hcCA9IHVwRGVmYXVsdHM/IHVwRGVmYXVsdHMuYXJndW1lbnRNYXAgOiBudWxs
OwogICAgICAgIHZhciBpbmZlck1hcCA9IGZhbHNlOwogICAgICAgIGlmICghYXJnTWFwICYmICh1
cERlZmF1bHRzIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29tcG9uZW50UmVjb3JkKSkgJiYgIW9w
dGlvbnMucGFzc0FyZ3MpIHsKICAgICAgICAgICAgaW5mZXJNYXAgPSB0cnVlOwogICAgICAgICAg
ICAvLyBpbmZlciB0aGF0IGl0IG11c3QgYmUgYSBsaXR0bGUgY29tcG9uZW50IGlmIHdlIGhhdmUg
YW55IHJlYXNvbiB0byBiZWxpZXZlIGl0IGlzIGEgY29tcG9uZW50CiAgICAgICAgICAgIGlmIChk
ZW1hbmRzLmxlbmd0aCA8IDIpIHsKICAgICAgICAgICAgICAgIGFyZ01hcCA9IGZsdWlkLnJhd0Rl
ZmF1bHRzKCJmbHVpZC5saXR0bGVDb21wb25lbnQiKS5hcmd1bWVudE1hcDsKICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGFyZ01hcCA9IHtvcHRpb25zOiBk
ZW1hbmRzLmxlbmd0aCAtIDF9OyAvLyB3aWxkIGd1ZXNzIGluIHRoZSBvbGQgc3R5bGUKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAg
ICBpZiAoZGVtYW5kcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29t
cG9uZW50UmVjb3JkICYmIGFyZ01hcCkgewogICAgICAgICAgICAgICAgZGVtYW5kcyA9IGZsdWlk
LmFyZ01hcFRvRGVtYW5kcyhhcmdNYXApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ug
aWYgKG9wdGlvbnMucGFzc0FyZ3MpIHsKICAgICAgICAgICAgICAgIGRlbWFuZHMgPSBmbHVpZC5t
YWtlUGFzc0FyZ3NTcGVjKGluaXRBcmdzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICB2YXIgbG9jYWxSZWNvcmQgPSAkLmV4dGVuZCh7ImFyZ3VtZW50cyI6IGluaXRBcmdzfSwgZmx1
aWQuY2Vuc29yS2V5cyhvcHRpb25zLmNvbXBvbmVudFJlY29yZCwgWyJ0eXBlIl0pKTsKICAgICAg
ICBmbHVpZC5lYWNoKGFyZ01hcCwgZnVuY3Rpb24oaW5kZXgsIG5hbWUpIHsKICAgICAgICAgICAg
aWYgKGluaXRBcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGxvY2FsUmVjb3JkW25h
bWVdID0gbG9jYWxSZWNvcmRbImFyZ3VtZW50cyJdW2luZGV4XTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBpZiAoZGVtYW5kc3BlY1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmIGxvY2FsUmVjb3Jk
W25hbWVdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGxvY2FsUmVjb3JkW25hbWVd
ID0gZGVtYW5kc3BlY1tuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIG1l
cmdlVG9NZXJnZUFsbChsb2NhbFJlY29yZC5vcHRpb25zKTsKICAgICAgICBtZXJnZVRvTWVyZ2VB
bGwoYXJnTWFwICYmIGRlbWFuZHNbYXJnTWFwLm9wdGlvbnNdKTsKICAgICAgICB2YXIgdXBzdHJl
YW1Mb2NhbFJlY29yZCA9ICQuZXh0ZW5kKHt9LCBsb2NhbFJlY29yZCk7CiAgICAgICAgaWYgKG9w
dGlvbnMuY29tcG9uZW50UmVjb3JkLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAg
ICB1cHN0cmVhbUxvY2FsUmVjb3JkLm9wdGlvbnMgPSBvcHRpb25zLmNvbXBvbmVudFJlY29yZC5v
cHRpb25zOwogICAgICAgIH0KICAgICAgICB2YXIgZXhwYW5kT3B0aW9ucyA9IG1ha2VTdGFja1Jl
c29sdmVyT3B0aW9ucyhpbnN0YW50aWF0b3IsIHBhcmVudFRoYXQsIGxvY2FsUmVjb3JkKTsKICAg
ICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGlmIChkZW1hbmRzKSB7CiAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZGVtYW5kcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAg
dmFyIGFyZyA9IGRlbWFuZHNbaV07CiAgICAgICAgICAgICAgICAvLyBXZWFrIGRldGVjdGlvbiBz
aW5jZSB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoaXMgbWF0ZXJpYWwgaGFzIG5vdCBiZWVuIGNvcGll
ZAogICAgICAgICAgICAgICAgaWYgKGZsdWlkLmlzTWFya2VyKGFyZykgJiYgYXJnLnZhbHVlID09
PSBmbHVpZC5DT01QT05FTlRfT1BUSU9OUy52YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGFy
ZyA9ICJ7b3B0aW9uc30iOwogICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5IGZvciBub24tdXNlcnMgb2YgR1JBREVTIC0gbGFzdC1kaXRjaCBjaGFuY2UgdG8gY29y
cmVjdCB0aGUgaW5mZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgaWYgKGluZmVyTWFwKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ01hcCA9IHtvcHRpb25zOiBpfTsKICAgICAgICAgICAg
ICAgICAgICB9IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZihh
cmcpID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgIGlmIChhcmcuY2hhckF0KDAp
ID09PSAiQCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3BvcyA9IGFyZy5zdWJz
dHJpbmcoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9ICJ7YXJndW1lbnRzfS4iICsg
YXJncG9zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGlmICghYXJnTWFwIHx8IGFyZ01hcC5vcHRpb25zICE9PSBpKSB7CiAgICAgICAgICAg
ICAgICAgICAgLy8gZGVmZXIgZXhwYW5zaW9uIHJlcXVpcmVkIGlmIGl0IGlzIG5vbi1wc2V1ZG9h
cmd1bWVudHMgZGVtYW5kcyBhbmQgdGhpcyBhcmd1bWVudCAqaXMqIHRoZSBvcHRpb25zCiAgICAg
ICAgICAgICAgICAgICAgYXJnc1tpXSA9IGZsdWlkLmV4cGFuZGVyLmV4cGFuZExpZ2h0KGFyZywg
ZXhwYW5kT3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsg
Ly8gSXQgaXMgdGhlIGNvbXBvbmVudCBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgaWYgKGFy
ZyAmJiB0eXBlb2YoYXJnKSA9PT0gIm9iamVjdCIgJiYgIWFyZy50YXJnZXRUeXBlTmFtZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICBhcmcudGFyZ2V0VHlwZU5hbWUgPSBkZW1hbmRzcGVjLmZ1
bmNOYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBlbnN1
cmUgdG8gY29weSB0aGUgYXJnIHNpbmNlIGl0IGlzIGFuIGFsaWFzIG9mIHRoZSBkZW1hbmQgYmxv
Y2sgbWF0ZXJpYWwgKEZMVUlELTQyMjMpCiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdpbGwg
YmUgZGVzdHJ1Y3RpdmVseSBleHBhbmRlZAogICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSB7
bWFya2VyOiBmbHVpZC5FWFBBTkQsIHZhbHVlOiBmbHVpZC5jb3B5KGFyZyksIGxvY2FsUmVjb3Jk
OiB1cHN0cmVhbUxvY2FsUmVjb3JkfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGlmIChhcmdzW2ldICYmIGZsdWlkLmlzTWFya2VyKGFyZ3NbaV0ubWFya2VyLCBmbHVpZC5FWFBB
TkRfTk9XKSkgewogICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBmbHVpZC5leHBhbmRlci5l
eHBhbmRMaWdodChhcmdzW2ldLnZhbHVlLCBleHBhbmRPcHRpb25zKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYXJn
cyA9IGluaXRBcmdzPyBpbml0QXJncyA6IFtdOwogICAgICAgIH0KCiAgICAgICAgdmFyIHRvZ28g
PSB7CiAgICAgICAgICAgIGFyZ3M6IGFyZ3MsCiAgICAgICAgICAgIGZ1bmNOYW1lOiBkZW1hbmRz
cGVjLmZ1bmNOYW1lCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gdG9nbzsKICAgIH07CiAgICAK
ICAgIHZhciBhbGlhc1RhYmxlID0ge307CiAgICAKICAgIGZsdWlkLmFsaWFzID0gZnVuY3Rpb24o
ZGVtYW5kaW5nTmFtZSwgYWxpYXNOYW1lKSB7CiAgICAgICAgaWYgKGFsaWFzTmFtZSkgewogICAg
ICAgICAgICBhbGlhc1RhYmxlW2RlbWFuZGluZ05hbWVdID0gYWxpYXNOYW1lOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzVGFibGVbZGVtYW5kaW5nTmFt
ZV07CiAgICAgICAgfQogICAgfTsKICAgCiAgICB2YXIgZGVwZW5kZW50U3RvcmUgPSB7fTsKICAg
IAogICAgZnVuY3Rpb24gc2VhcmNoRGVtYW5kcyhkZW1hbmRpbmdOYW1lLCBjb250ZXh0TmFtZXMp
IHsKICAgICAgICB2YXIgZXhpc3QgPSBkZXBlbmRlbnRTdG9yZVtkZW1hbmRpbmdOYW1lXSB8fCBb
XTsKb3V0ZXI6ICBmb3IgKHZhciBpID0gMDsgaSA8IGV4aXN0Lmxlbmd0aDsgKytpKSB7CiAgICAg
ICAgICAgIHZhciByZWMgPSBleGlzdFtpXTsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBjb250ZXh0TmFtZXMubGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgICAgIGlmIChyZWMuY29u
dGV4dHNbal0gIT09IGNvbnRleHROYW1lc1tqXSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlIG91dGVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJl
dHVybiByZWMuc3BlYzsgLy8ganNsaW50Om9rCiAgICAgICAgfQogICAgfQogICAgCiAgICBmbHVp
ZC5kZW1hbmRzID0gZnVuY3Rpb24oZGVtYW5kaW5nTmFtZSwgY29udGV4dE5hbWUsIHNwZWMpIHsK
ICAgICAgICB2YXIgY29udGV4dE5hbWVzID0gJC5tYWtlQXJyYXkoY29udGV4dE5hbWUpLnNvcnQo
KTsgCiAgICAgICAgaWYgKCFzcGVjKSB7CiAgICAgICAgICAgIHJldHVybiBzZWFyY2hEZW1hbmRz
KGRlbWFuZGluZ05hbWUsIGNvbnRleHROYW1lcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYg
KHNwZWMubGVuZ3RoKSB7CiAgICAgICAgICAgIHNwZWMgPSB7YXJnczogc3BlY307CiAgICAgICAg
fQogICAgICAgIGlmIChmbHVpZC5nZXRDYWxsZXJJbmZvKSB7CiAgICAgICAgICAgIHZhciBjYWxs
ZXJJbmZvID0gZmx1aWQuZ2V0Q2FsbGVySW5mbyg1KTsKICAgICAgICAgICAgaWYgKGNhbGxlcklu
Zm8pIHsKICAgICAgICAgICAgICAgIHNwZWMucmVnaXN0ZXJlZEZyb20gPSBjYWxsZXJJbmZvOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBleGlzdCA9IGRlcGVuZGVudFN0b3Jl
W2RlbWFuZGluZ05hbWVdOwogICAgICAgIGlmICghZXhpc3QpIHsKICAgICAgICAgICAgZXhpc3Qg
PSBbXTsKICAgICAgICAgICAgZGVwZW5kZW50U3RvcmVbZGVtYW5kaW5nTmFtZV0gPSBleGlzdDsK
ICAgICAgICB9CiAgICAgICAgZXhpc3QucHVzaCh7Y29udGV4dHM6IGNvbnRleHROYW1lcywgc3Bl
Yzogc3BlY30pOwogICAgfTsKCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgog
ICAgZmx1aWQuY29tcGFyZURlbWFuZHMgPSBmdW5jdGlvbihzcGVjYSwgc3BlY2IpIHsKICAgICAg
ICB2YXIgcDEgPSBzcGVjYS51bmNlc3MgLSBzcGVjYi51bmNlc3M7CiAgICAgICAgcmV0dXJuIHAx
ID09PSAwPyBzcGVjYi5pbnRlcnNlY3QgLSBzcGVjYS5pbnRlcnNlY3QgOiBwMTsKICAgIH07CiAg
ICAKICAgIC8vIHVuc3VwcG9ydGVkLCBub24tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5pc0RlbWFu
ZExvZ2dpbmcgPSBmdW5jdGlvbihkZW1hbmRpbmdOYW1lcykgewogICAgICAgIHJldHVybiBmbHVp
ZC5pc0xvZ2dpbmcoKSAmJiBkZW1hbmRpbmdOYW1lc1swXSAhPT0gImZsdWlkLnRocmVhZExvY2Fs
IjsKICAgIH07CiAgICAKICAgIC8vIHVuc3VwcG9ydGVkLCBub24tQVBJIGZ1bmN0aW9uCiAgICBm
bHVpZC5sb2NhdGVBbGxEZW1hbmRzID0gZnVuY3Rpb24oaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0
LCBkZW1hbmRpbmdOYW1lcykgewogICAgICAgIHZhciBkZW1hbmRMb2dnaW5nID0gZmx1aWQuaXNE
ZW1hbmRMb2dnaW5nKGRlbWFuZGluZ05hbWVzKTsKICAgICAgICBpZiAoZGVtYW5kTG9nZ2luZykg
ewogICAgICAgICAgICBmbHVpZC5sb2coIlJlc29sdmluZyBkZW1hbmRzIGZvciBmdW5jdGlvbiBu
YW1lcyAiLCBkZW1hbmRpbmdOYW1lcywgIiBpbiBjb250ZXh0IG9mICIgKwogICAgICAgICAgICAg
ICAgKHBhcmVudFRoYXQ/ICJjb21wb25lbnQgIiArIHBhcmVudFRoYXQudHlwZU5hbWUgOiAibm8g
Y29tcG9uZW50IikpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgY29udGV4dE5hbWVz
ID0ge307CiAgICAgICAgdmFyIHZpc2l0ZWQgPSBbXTsKICAgICAgICB2YXIgdGhhdFN0YWNrID0g
aW5zdGFudGlhdG9yLmdldEZ1bGxTdGFjayhwYXJlbnRUaGF0KTsKICAgICAgICB2aXNpdENvbXBv
bmVudHModGhhdFN0YWNrLCBmdW5jdGlvbihjb21wb25lbnQsIHhuYW1lLCBvcHRpb25zLCB1cCwg
ZG93bikgewogICAgICAgICAgICBjb250ZXh0TmFtZXNbY29tcG9uZW50LnR5cGVOYW1lXSA9IHRy
dWU7CiAgICAgICAgICAgIHZpc2l0ZWQucHVzaChjb21wb25lbnQpOwogICAgICAgIH0pOwogICAg
ICAgIGlmIChkZW1hbmRMb2dnaW5nKSB7CiAgICAgICAgICAgIGZsdWlkLmxvZygiQ29tcG9uZW50
cyBpbiBzY29wZSBmb3IgcmVzb2x1dGlvbjpcbiIgKyBmbHVpZC5kdW1wVGhhdFN0YWNrKHZpc2l0
ZWQsIGluc3RhbnRpYXRvcikpOyAgCiAgICAgICAgfQogICAgICAgIHZhciBtYXRjaGVzID0gW107
CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZW1hbmRpbmdOYW1lcy5sZW5ndGg7ICsraSkg
ewogICAgICAgICAgICB2YXIgcmVjID0gZGVwZW5kZW50U3RvcmVbZGVtYW5kaW5nTmFtZXNbaV1d
IHx8IFtdOwogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlYy5sZW5ndGg7ICsraikg
ewogICAgICAgICAgICAgICAgdmFyIHNwZWMgPSByZWNbal07CiAgICAgICAgICAgICAgICB2YXIg
cmVjb3JkID0ge3NwZWM6IHNwZWMsIGludGVyc2VjdDogMCwgdW5jZXNzOiAwfTsKICAgICAgICAg
ICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3BlYy5jb250ZXh0cy5sZW5ndGg7ICsraykgewog
ICAgICAgICAgICAgICAgICAgIHJlY29yZFtjb250ZXh0TmFtZXNbc3BlYy5jb250ZXh0c1trXV0/
ICJpbnRlcnNlY3QiIDogInVuY2VzcyJdICs9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBpZiAoc3BlYy5jb250ZXh0cy5sZW5ndGggPT09IDApIHsgLy8gYWxsb3cgd2VhayBw
cmlvcml0eSBmb3IgY29udGV4dGxlc3MgbWF0Y2hlcwogICAgICAgICAgICAgICAgICAgIHJlY29y
ZC5pbnRlcnNlY3QrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFRPRE86
IFBvdGVudGlhbGx5IG1vcmUgc3VidGxlIGFsZ29yaXRobSBoZXJlIC0gYWxzbyBhbWJpZ3VpdHkg
cmVwb3J0cyAgCiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2gocmVjb3JkKTsgCiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgbWF0Y2hlcy5zb3J0KGZsdWlkLmNvbXBhcmVEZW1hbmRz
KTsKICAgICAgICByZXR1cm4gbWF0Y2hlczsgICAKICAgIH07CgogICAgLy8gdW5zdXBwb3J0ZWQs
IG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmxvY2F0ZURlbWFuZHMgPSBmdW5jdGlvbihpbnN0
YW50aWF0b3IsIHBhcmVudFRoYXQsIGRlbWFuZGluZ05hbWVzKSB7CiAgICAgICAgdmFyIG1hdGNo
ZXMgPSBmbHVpZC5sb2NhdGVBbGxEZW1hbmRzKGluc3RhbnRpYXRvciwgcGFyZW50VGhhdCwgZGVt
YW5kaW5nTmFtZXMpOwogICAgICAgIHZhciBkZW1hbmRzcGVjID0gbWF0Y2hlcy5sZW5ndGggPT09
IDAgfHwgbWF0Y2hlc1swXS5pbnRlcnNlY3QgPT09IDA/IG51bGwgOiBtYXRjaGVzWzBdLnNwZWMu
c3BlYzsKICAgICAgICBpZiAoZmx1aWQuaXNEZW1hbmRMb2dnaW5nKGRlbWFuZGluZ05hbWVzKSkg
ewogICAgICAgICAgICBpZiAoZGVtYW5kc3BlYykgewogICAgICAgICAgICAgICAgZmx1aWQubG9n
KCJMb2NhdGVkICIgKyBtYXRjaGVzLmxlbmd0aCArICIgcG90ZW50aWFsIG1hdGNoIiArIChtYXRj
aGVzLmxlbmd0aCA9PT0gMT8gIiIgOiAiZXMiKSArICIsIHNlbGVjdGVkIGJlc3QgbWF0Y2ggd2l0
aCAiICsgbWF0Y2hlc1swXS5pbnRlcnNlY3QgCiAgICAgICAgICAgICAgICAgICAgKyAiIG1hdGNo
ZWQgY29udGV4dCBuYW1lczogIiwgZGVtYW5kc3BlYyk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmbHVpZC5sb2coIk5vIG1hdGNoZXMgZm91bmQgZm9y
IGRlbWFuZHMsIHVzaW5nIGRpcmVjdCBpbXBsZW1lbnRhdGlvbiIpOwogICAgICAgICAgICB9CiAg
ICAgICAgfSAgCiAgICAgICAgcmV0dXJuIGRlbWFuZHNwZWM7CiAgICB9OwogICAgCiAgICAvKiog
RGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBkZW1hbmQgc3BlY2lmaWNhdGlvbiBoZWxkIGluIHRo
ZSBmbHVpZC5kZW1hbmRzIGVudmlyb25tZW50IAogICAgICogcmVsYXRpdmUgdG8gInRoYXRTdGFj
ayIgZm9yIHRoZSBmdW5jdGlvbiBuYW1lKHMpIGZ1bmNOYW1lcy4KICAgICAqLwogICAgLy8gdW5z
dXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmRldGVybWluZURlbWFuZHMgPSBm
dW5jdGlvbiAoaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0LCBmdW5jTmFtZXMpIHsKICAgICAgICBm
dW5jTmFtZXMgPSAkLm1ha2VBcnJheShmdW5jTmFtZXMpOwogICAgICAgIHZhciBuZXdGdW5jTmFt
ZSA9IGZ1bmNOYW1lc1swXTsKICAgICAgICB2YXIgZGVtYW5kc3BlYyA9IGZsdWlkLmxvY2F0ZURl
bWFuZHMoaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0LCBmdW5jTmFtZXMpIHx8IHt9OwogICAgICAg
IGlmIChkZW1hbmRzcGVjLmZ1bmNOYW1lKSB7CiAgICAgICAgICAgIG5ld0Z1bmNOYW1lID0gZGVt
YW5kc3BlYy5mdW5jTmFtZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGFsaWFzVG8g
PSBmbHVpZC5hbGlhcyhuZXdGdW5jTmFtZSk7CiAgICAgICAgCiAgICAgICAgaWYgKGFsaWFzVG8p
IHsKICAgICAgICAgICAgbmV3RnVuY05hbWUgPSBhbGlhc1RvOwogICAgICAgICAgICBmbHVpZC5s
b2coIkZvbGxvd2luZyByZWRpcmVjdCBmcm9tIGZ1bmN0aW9uIG5hbWUgIiArIG5ld0Z1bmNOYW1l
ICsgIiB0byAiICsgYWxpYXNUbyk7CiAgICAgICAgICAgIHZhciBkZW1hbmRzcGVjMiA9IGZsdWlk
LmxvY2F0ZURlbWFuZHMoaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0LCBbYWxpYXNUb10pOwogICAg
ICAgICAgICBpZiAoZGVtYW5kc3BlYzIpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmVhY2goZGVt
YW5kc3BlYzIsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAo
bG9jYWxSZWNvcmRFeHBlY3RlZC50ZXN0KGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Zmx1aWQuZmFpbCgiRXJyb3IgaW4gZGVtYW5kcyBibG9jayAiLCBkZW1hbmRzcGVjMiwgIiAtIGNv
bnRlbnQgd2l0aCBrZXkgXCIiICsga2V5IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAi
XCIgaXMgbm90IHN1cHBvcnRlZCBzaW5jZSB0aGlzIGRlbWFuZHMgYmxvY2sgd2FzIHJlc29sdmVk
IHZpYSBhbiBhbGlhcyBmcm9tIFwiIiArIG5ld0Z1bmNOYW1lICsgIlwiIik7CiAgICAgICAgICAg
ICAgICAgICAgfSAgCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChkZW1h
bmRzcGVjMi5mdW5jTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5ld0Z1bmNOYW1lID0gZGVt
YW5kc3BlYzIuZnVuY05hbWU7CiAgICAgICAgICAgICAgICAgICAgZmx1aWQubG9nKCJGb2xsb3dl
ZCBmaW5hbCBpbm5lciBkZW1hbmRzIHRvIGZ1bmN0aW9uIG5hbWUgXCIiICsgbmV3RnVuY05hbWUg
KyAiXCIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICAKICAgICAgICByZXR1cm4gZmx1aWQubWVyZ2UobnVsbCwge2Z1bmNOYW1lOiBuZXdGdW5jTmFt
ZSwgYXJnczogZmx1aWQubWFrZUFycmF5KGRlbWFuZHNwZWMuYXJncyl9LCBmbHVpZC5jZW5zb3JL
ZXlzKGRlbWFuZHNwZWMsIFsiZnVuY05hbWUiLCAiYXJncyJdKSk7CiAgICB9OwogICAgCiAgICAv
LyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1aWQucmVzb2x2ZURlbWFuZHMg
PSBmdW5jdGlvbihpbnN0YW50aWF0b3IsIHBhcmVudFRoYXQsIGZ1bmNOYW1lcywgaW5pdEFyZ3Ms
IG9wdGlvbnMpIHsKICAgICAgICB2YXIgZGVtYW5kc3BlYyA9IGZsdWlkLmRldGVybWluZURlbWFu
ZHMoaW5zdGFudGlhdG9yLCBwYXJlbnRUaGF0LCBmdW5jTmFtZXMpOwogICAgICAgIHJldHVybiBm
bHVpZC5lbWJvZHlEZW1hbmRzKGluc3RhbnRpYXRvciwgcGFyZW50VGhhdCwgZGVtYW5kc3BlYywg
aW5pdEFyZ3MsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAgLy8gVE9ETzogbWFrZSBhICpzbGln
aHRseSogbW9yZSBwZXJmb3JtYW50IHZlcnNpb24gb2YgZmx1aWQuaW52b2tlIHRoYXQgcGVyaGFw
cyBjYWNoZXMgdGhlIGRlbWFuZHMKICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBzdWNjZXNzZnVsIGlu
dm9jYXRpb24KICAgIGZsdWlkLmludm9rZSA9IGZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgYXJncywg
dGhhdCwgZW52aXJvbm1lbnQpIHsKICAgICAgICBhcmdzID0gZmx1aWQubWFrZUFycmF5KGFyZ3Mp
OwogICAgICAgIHJldHVybiBmbHVpZC53aXRoSW5zdGFudGlhdG9yKHRoYXQsIGZ1bmN0aW9uKGlu
c3RhbnRpYXRvcikgewogICAgICAgICAgICB2YXIgaW52b2tlU3BlYyA9IGZsdWlkLnJlc29sdmVE
ZW1hbmRzKGluc3RhbnRpYXRvciwgdGhhdCwgZnVuY3Rpb25OYW1lLCBhcmdzLCB7cGFzc0FyZ3M6
IHRydWV9KTsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmludm9rZUdsb2JhbEZ1bmN0aW9uKGlu
dm9rZVNwZWMuZnVuY05hbWUsIGludm9rZVNwZWMuYXJncywgZW52aXJvbm1lbnQpOwogICAgICAg
IH0pOwogICAgfTsKICAgIAogICAgZmx1aWQuaW52b2tlID0gZmx1aWQud3JhcEFjdGl2aXR5KGZs
dWlkLmludm9rZSwgWyIgICAgd2hpbGUgaW52b2tpbmcgZnVuY3Rpb24gd2l0aCBuYW1lIFwiIiwg
ImFyZ3VtZW50cy4wIiwgIlwiIGZyb20gY29tcG9uZW50IiwgImFyZ3VtZW50cy4yIl0pOyAKICAg
IAogICAgLyoqIE1ha2UgYSBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBvbmx5ICJzdGF0aWMgcmVk
aXNwYXRjaCIgb2YgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIG5hbWUgLSAKICAgICAqIHRoYXQgaXMs
IHRha2luZyBvbmx5IGFjY291bnQgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSAic3RhdGljIGVudmly
b25tZW50Ii4gU2luY2UgdGhlIHN0YXRpYwogICAgICogZW52aXJvbm1lbnQgaXMgYXNzdW1lZCB0
byBiZSBjb25zdGFudCwgdGhlIGRpc3BhdGNoIG9mIHRoZSBjYWxsIHdpbGwgYmUgZXZhbHVhdGVk
IGF0IHRoZQogICAgICogdGltZSB0aGlzIGNhbGwgaXMgbWFkZSwgYXMgYW4gb3B0aW1pc2F0aW9u
LgogICAgICovCiAgICAKICAgIGZsdWlkLm1ha2VGcmVlSW52b2tlciA9IGZ1bmN0aW9uKGZ1bmN0
aW9uTmFtZSwgZW52aXJvbm1lbnQpIHsKICAgICAgICB2YXIgZGVtYW5kU3BlYyA9IGZsdWlkLmRl
dGVybWluZURlbWFuZHMoZmx1aWQuZnJlZUluc3RhbnRpYXRvciwgbnVsbCwgZnVuY3Rpb25OYW1l
KTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBpbnZva2VTcGVj
ID0gZmx1aWQuZW1ib2R5RGVtYW5kcyhmbHVpZC5mcmVlSW5zdGFudGlhdG9yLCBudWxsLCBkZW1h
bmRTcGVjLCBhcmd1bWVudHMsIHtwYXNzQXJnczogdHJ1ZX0pOwogICAgICAgICAgICByZXR1cm4g
Zmx1aWQuaW52b2tlR2xvYmFsRnVuY3Rpb24oaW52b2tlU3BlYy5mdW5jTmFtZSwgaW52b2tlU3Bl
Yy5hcmdzLCBlbnZpcm9ubWVudCk7CiAgICAgICAgfTsKICAgIH07CiAgICAKICAgIGZsdWlkLm1h
a2VJbnZva2VyID0gZnVuY3Rpb24oaW5zdGFudGlhdG9yLCB0aGF0LCBkZW1hbmRzcGVjLCBmdW5j
dGlvbk5hbWUsIGVudmlyb25tZW50KSB7CiAgICAgICAgZGVtYW5kc3BlYyA9IGRlbWFuZHNwZWMg
fHwgZmx1aWQuZGV0ZXJtaW5lRGVtYW5kcyhpbnN0YW50aWF0b3IsIHRoYXQsIGZ1bmN0aW9uTmFt
ZSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgYXJncyA9IGFy
Z3VtZW50czsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLnB1c2hBY3Rpdml0eShmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgIHZhciBpbnZva2VTcGVjID0gZmx1aWQuZW1ib2R5RGVtYW5kcyhp
bnN0YW50aWF0b3IsIHRoYXQsIGRlbWFuZHNwZWMsIGFyZ3MsIHtwYXNzQXJnczogdHJ1ZX0pOwog
ICAgICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmludm9rZUdsb2JhbEZ1bmN0aW9uKGludm9rZVNw
ZWMuZnVuY05hbWUsIGludm9rZVNwZWMuYXJncywgZW52aXJvbm1lbnQpOwogICAgICAgICAgICB9
LCBbIiAgICB3aGlsZSBpbnZva2luZyBpbnZva2VyIHdpdGggbmFtZSAiICsgZnVuY3Rpb25OYW1l
ICsgIiBvbiBjb21wb25lbnQiLCB0aGF0XSk7CiAgICAgICAgfTsKICAgIH07CiAgICAKICAgIC8v
IHVuc3VwcG9ydGVkLCBub24tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5ldmVudC5kaXNwYXRjaExp
c3RlbmVyID0gZnVuY3Rpb24oaW5zdGFudGlhdG9yLCB0aGF0LCBsaXN0ZW5lciwgZXZlbnROYW1l
LCBldmVudFNwZWMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZh
ciBkZW1hbmRzcGVjID0gZmx1aWQuZGV0ZXJtaW5lRGVtYW5kcyhpbnN0YW50aWF0b3IsIHRoYXQs
IGV2ZW50TmFtZSk7CiAgICAgICAgICAgIGlmIChkZW1hbmRzcGVjLmFyZ3MubGVuZ3RoID09PSAw
ICYmIGV2ZW50U3BlYy5hcmdzKSB7CiAgICAgICAgICAgICAgICBkZW1hbmRzcGVjLmFyZ3MgPSBl
dmVudFNwZWMuYXJnczsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmVzb2x2ZWQgPSBm
bHVpZC5lbWJvZHlEZW1hbmRzKGluc3RhbnRpYXRvciwgdGhhdCwgZGVtYW5kc3BlYywgYXJndW1l
bnRzLCB7cGFzc0FyZ3M6IHRydWUsIGNvbXBvbmVudE9wdGlvbnM6IGV2ZW50U3BlY30pOyAKICAg
ICAgICAgICAgbGlzdGVuZXIuYXBwbHkobnVsbCwgcmVzb2x2ZWQuYXJncyk7CiAgICAgICAgfTsg
CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1
aWQuZXZlbnQucmVzb2x2ZUV2ZW50ID0gZnVuY3Rpb24odGhhdCwgZXZlbnROYW1lLCBldmVudFNw
ZWMpIHsKICAgICAgICByZXR1cm4gZmx1aWQud2l0aEluc3RhbnRpYXRvcih0aGF0LCBmdW5jdGlv
bihpbnN0YW50aWF0b3IpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZihldmVudFNwZWMpID09PSAi
c3RyaW5nIikgewogICAgICAgICAgICAgICAgdmFyIGZpcmVyID0gZmx1aWQuZXhwYW5kT3B0aW9u
cyhldmVudFNwZWMsIHRoYXQpOwogICAgICAgICAgICAgICAgaWYgKCFmaXJlcikgewogICAgICAg
ICAgICAgICAgICAgIGZsdWlkLmZhaWwoIkVycm9yIGluIGZsdWlkLmV2ZW50LnJlc29sdmVFdmVu
dCAtIGNvbnRleHQgcGF0aCAiICsgZXZlbnRTcGVjICsgIiBjb3VsZCBub3QgYmUgbG9va2VkIHVw
IHRvIGEgdmFsaWQgZXZlbnQgZmlyZXIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHJldHVybiBmaXJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgIHZhciBldmVudCA9IGV2ZW50U3BlYy5ldmVudDsKICAgICAgICAgICAgICAgIHZh
ciBvcmlnaW47CiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgZmx1aWQuZmFpbCgiRXZlbnQgc3BlY2lmaWNhdGlvbiBmb3IgZXZlbnQgd2l0aCBuYW1lICIg
KyBldmVudE5hbWUgKyAiIGRvZXMgbm90IGluY2x1ZGUgYSBiYXNlIGV2ZW50IHNwZWNpZmljYXRp
b24iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChldmVudC5jaGFyQXQo
MCkgPT09ICJ7IikgewogICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IGZsdWlkLmV4cGFuZE9w
dGlvbnMoZXZlbnQsIHRoYXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gdGhhdC5ldmVudHNbZXZlbnRdOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFvcmlnaW4pIHsKICAgICAgICAgICAg
ICAgICAgICBmbHVpZC5mYWlsKCJFcnJvciBpbiBldmVudCBzcGVjaWZpY2F0aW9uIC0gY291bGQg
bm90IHJlc29sdmUgYmFzZSBldmVudCByZWZlcmVuY2UgIiArIGV2ZW50ICsgIiB0byBhbiBldmVu
dCBmaXJlciIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGZpcmVyID0g
e307IC8vIGpzbGludDpvayAtIGFscmVhZHkgZGVmaW5lZAogICAgICAgICAgICAgICAgZmx1aWQu
ZWFjaChbImZpcmUiLCAicmVtb3ZlTGlzdGVuZXIiXSwgZnVuY3Rpb24obWV0aG9kKSB7CiAgICAg
ICAgICAgICAgICAgICAgZmlyZXJbbWV0aG9kXSA9IGZ1bmN0aW9uKCkge29yaWdpblttZXRob2Rd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7fTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgZmlyZXIuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lciwgbmFtZXNwYWNlLCBw
cmVkaWNhdGUsIHByaW9yaXR5KSB7CiAgICAgICAgICAgICAgICAgICAgb3JpZ2luLmFkZExpc3Rl
bmVyKGZsdWlkLmV2ZW50LmRpc3BhdGNoTGlzdGVuZXIoaW5zdGFudGlhdG9yLCB0aGF0LCBsaXN0
ZW5lciwgZXZlbnROYW1lLCBldmVudFNwZWMpLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1l
c3BhY2UsIHByZWRpY2F0ZSwgcHJpb3JpdHkpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgIHJldHVybiBmaXJlcjsKICAgICAgICAgICAgfQogICAgICAgIH0pOyAKICAgIH07CiAg
ICAKICAgICAgICAKICAgIGZsdWlkLnJlZ2lzdGVyTmFtZXNwYWNlKCJmbHVpZC5leHBhbmRlciIp
OwogICAgCiAgICAvKiogcmVzY3VlIHRoYXQgcGFydCBvZiBhIGNvbXBvbmVudCdzIG9wdGlvbnMg
d2hpY2ggc2hvdWxkIG5vdCBiZSBzdWJqZWN0IHRvCiAgICAgKiBvcHRpb25zIGV4cGFuc2lvbiB2
aWEgSW9DIC0gdGhpcyBpbml0aWFsbHkgY29uc2lzdHMgb2YgImNvbXBvbmVudHMiIGFuZCAibWVy
Z2VQb2xpY3kiIAogICAgICogYnV0IHdpbGwgYmUgZXhwYW5kZWQgYnkgdGhlIHNldCBvZiBwYXRo
cyBzcGVjaWZpZWQgYXMgIm5vZXhwYW5kIiB3aXRoaW4gIm1lcmdlUG9saWN5IiAKICAgICAqLwog
ICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmV4cGFuZGVyLnBy
ZXNlcnZlRnJvbUV4cGFuc2lvbiA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICB2YXIgcHJl
c2VydmUgPSB7fTsKICAgICAgICB2YXIgcHJlc2VydmVMaXN0ID0gZmx1aWQuYXJyYXlUb0hhc2go
WyJtZXJnZVBvbGljeSIsICJtZXJnZUFsbE9wdGlvbnMiLCAiY29tcG9uZW50cyIsICJpbnZva2Vy
cyIsICJldmVudHMiLCAibGlzdGVuZXJzIiwgInRyYW5zZm9ybU9wdGlvbnMiXSk7CiAgICAgICAg
Zmx1aWQuZWFjaChvcHRpb25zLm1lcmdlUG9saWN5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAg
ICAgICAgICAgIGlmIChmbHVpZC5tZXJnZVBvbGljeUlzKHZhbHVlLCAibm9leHBhbmQiKSkgewog
ICAgICAgICAgICAgICAgcHJlc2VydmVMaXN0W2tleV0gPSB0cnVlOwogICAgICAgICAgICB9CiAg
ICAgICAgfSk7CiAgICAgICAgZmx1aWQuZWFjaChwcmVzZXJ2ZUxpc3QsIGZ1bmN0aW9uKHh2YWx1
ZSwgcGF0aCkgewogICAgICAgICAgICB2YXIgcGVuID0gZmx1aWQubW9kZWwuZ2V0UGVudWx0aW1h
dGUob3B0aW9ucywgcGF0aCk7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBlbi5yb290W3Blbi5s
YXN0XTsKICAgICAgICAgICAgZGVsZXRlIHBlbi5yb290W3Blbi5sYXN0XTsKICAgICAgICAgICAg
Zmx1aWQuc2V0KHByZXNlcnZlLCBwYXRoLCB2YWx1ZSk7ICAKICAgICAgICB9KTsKICAgICAgICBy
ZXR1cm4gewogICAgICAgICAgICByZXN0b3JlOiBmdW5jdGlvbih0YXJnZXQpIHsKICAgICAgICAg
ICAgICAgIGZsdWlkLmVhY2gocHJlc2VydmVMaXN0LCBmdW5jdGlvbih4dmFsdWUsIHBhdGgpIHsK
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJlc2VydmVkID0gZmx1aWQuZ2V0KHByZXNlcnZlLCBw
YXRoKTsKICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVkICE9PSB1bmRlZmluZWQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZmx1aWQuc2V0KHRhcmdldCwgcGF0aCwgcHJlc2VydmVk
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
fQogICAgICAgIH07CiAgICB9OwogICAgCiAgICAvKiogRXhwYW5kIGEgc2V0IG9mIGNvbXBvbmVu
dCBvcHRpb25zIHdpdGggcmVzcGVjdCB0byBhIHNldCBvZiAiZXhwYW5kZXJzIiAoZXNzZW50aWFs
bHkgb25seQogICAgICogIGRlZmVycmVkQ2FsbCkgLSAgVGhpcyBzdWJzdGl0dXRpb24gaXMgZGVz
dHJ1Y3RpdmUgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvcHRpb25zIGFyZSBhbHJlYWR5
ICJsaXZlIiBhcyB0aGUKICAgICAqICByZXN1bHQgb2YgZW52aXJvbm1lbnRhbCBzdWJzdGl0dXRp
b25zLiBOb3RlIHRoYXQgb3B0aW9ucyBjb250YWluZWQgaW5zaWRlICJjb21wb25lbnRzIiB3aWxs
IG5vdCBiZSBleHBhbmRlZAogICAgICogIGJ5IHRoaXMgY2FsbCBkaXJlY3RseSB0byBhdm9pZCBs
aW5lYXJseSBpbmNyZWFzaW5nIGV4cGFuc2lvbiBkZXB0aCBpZiB0aGlzIGNhbGwgaXMgb2NjdXJp
bmcgYXMgYSByZXN1bHQgb2YKICAgICAqICAiaW5pdERlcGVuZGVudHMiICovCiAgICAgLy8gVE9E
TzogVGhpcyBuZWVkcyB0byBiZSBpbnRlZ3JhdGVkIHdpdGggImVtYm9keURlbWFuZHMiIGFib3Zl
IHdoaWNoIG1ha2VzIGEgY2FsbCB0byAicmVzb2x2ZUVudmlyb25tZW50IiBkaXJlY3RseQogICAg
IC8vIGJ1dCB3aXRoIHZlcnkgc2ltaWxhcmx5IGRlcml2ZWQgb3B0aW9ucyAobWFrZVN0YWNrUmVz
b2x2ZXJPcHRpb25zKQogICAgZmx1aWQuZXhwYW5kT3B0aW9ucyA9IGZ1bmN0aW9uKGFyZ3MsIHRo
YXQsIGxvY2FsUmVjb3JkLCBvdXRlckV4cGFuZE9wdGlvbnMpIHsKICAgICAgICBpZiAoIWFyZ3Mp
IHsKICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmbHVp
ZC53aXRoSW5zdGFudGlhdG9yKHRoYXQsIGZ1bmN0aW9uKGluc3RhbnRpYXRvcikgewogICAgICAg
ICAgICAvL2ZsdWlkLmxvZygiZXhwYW5kT3B0aW9ucyBmb3IgIiArIHRoYXQudHlwZU5hbWUgKyAi
IGV4ZWN1dGluZyB3aXRoIGluc3RhbnRpYXRvciAiICsgaW5zdGFudGlhdG9yLmlkKTsKICAgICAg
ICAgICAgdmFyIGV4cGFuZE9wdGlvbnMgPSBtYWtlU3RhY2tSZXNvbHZlck9wdGlvbnMoaW5zdGFu
dGlhdG9yLCB0aGF0LCBsb2NhbFJlY29yZCwgb3V0ZXJFeHBhbmRPcHRpb25zKTsKICAgICAgICAg
ICAgZXhwYW5kT3B0aW9ucy5ub0NvcHkgPSB0cnVlOyAvLyBJdCBpcyBzdGlsbCBwb3NzaWJsZSBh
IG1vZGVsIG1heSBiZSBmZXRjaGVkIGV2ZW4gdGhvdWdoIGl0IGlzIHByZXNlcnZlZAogICAgICAg
ICAgICB2YXIgcHJlczsKICAgICAgICAgICAgaWYgKCFmbHVpZC5pc0FycmF5YWJsZShhcmdzKSAm
JiAhZmx1aWQuaXNQcmltaXRpdmUoYXJncykpIHsKICAgICAgICAgICAgICAgIHByZXMgPSBmbHVp
ZC5leHBhbmRlci5wcmVzZXJ2ZUZyb21FeHBhbnNpb24oYXJncyk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgdmFyIGV4cGFuZGVkID0gZmx1aWQuZXhwYW5kZXIuZXhwYW5kTGlnaHQoYXJncywg
ZXhwYW5kT3B0aW9ucyk7CiAgICAgICAgICAgIGlmIChwcmVzKSB7CiAgICAgICAgICAgICAgICBw
cmVzLnJlc3RvcmUoZXhwYW5kZWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBl
eHBhbmRlZDsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8vIHVuc3VwcG9ydGVkLCBub24t
QVBJIGZ1bmN0aW9uICAgIAogICAgZmx1aWQubG9jYXRlVHJhbnNmb3JtYXRpb25SZWNvcmQgPSBm
dW5jdGlvbih0aGF0KSB7CiAgICAgICAgcmV0dXJuIGZsdWlkLndpdGhJbnN0YW50aWF0b3IodGhh
dCwgZnVuY3Rpb24oaW5zdGFudGlhdG9yKSB7CiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gZmx1
aWQubG9jYXRlQWxsRGVtYW5kcyhpbnN0YW50aWF0b3IsIHRoYXQsIFsiZmx1aWQudHJhbnNmb3Jt
T3B0aW9ucyJdKTsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLmZpbmQobWF0Y2hlcywgZnVuY3Rp
b24obWF0Y2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC51bmNlc3MgPT09IDAgJiYg
Zmx1aWQuY29udGFpbnMobWF0Y2guc3BlYy5jb250ZXh0cywgdGhhdC50eXBlTmFtZSk/IG1hdGNo
LnNwZWMuc3BlYyA6IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9
OwogICAgCiAgICAvLyAKICAgIGZsdWlkLmhhc2hUb0FycmF5ID0gZnVuY3Rpb24oaGFzaCkgewog
ICAgICAgIHZhciB0b2dvID0gW107CiAgICAgICAgZmx1aWQuZWFjaChoYXNoLCBmdW5jdGlvbih2
YWx1ZSwga2V5KSB7CiAgICAgICAgICAgIHRvZ28ucHVzaChrZXkpOwogICAgICAgIH0pOwogICAg
ICAgIHJldHVybiB0b2dvOwogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkg
ZnVuY3Rpb24gICAgCiAgICBmbHVpZC5sb2NhbFJlY29yZEV4cGVjdGVkID0gWyJ0eXBlIiwgIm9w
dGlvbnMiLCAiYXJndW1lbnRzIiwgIm1lcmdlT3B0aW9ucyIsCiAgICAgICAgIm1lcmdlQWxsT3B0
aW9ucyIsICJjcmVhdGVPbkV2ZW50IiwgInByaW9yaXR5Il07CiAgICAvLyB1bnN1cHBvcnRlZCwg
bm9uLUFQSSBmdW5jdGlvbiAgICAKICAgIGZsdWlkLmNoZWNrQ29tcG9uZW50UmVjb3JkID0gZnVu
Y3Rpb24oZGVmYXVsdHMsIGxvY2FsUmVjb3JkKSB7CiAgICAgICAgdmFyIGV4cGVjdGVkID0gZmx1
aWQuYXJyYXlUb0hhc2goZmx1aWQubG9jYWxSZWNvcmRFeHBlY3RlZCk7CiAgICAgICAgZmx1aWQu
ZWFjaChkZWZhdWx0cy5hcmd1bWVudE1hcCwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAg
ICAgICBleHBlY3RlZFtrZXldID0gdHJ1ZTsKICAgICAgICB9KTsKICAgICAgICBmbHVpZC5lYWNo
KGxvY2FsUmVjb3JkLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgIGlmICghZXhw
ZWN0ZWRba2V5XSkgewogICAgICAgICAgICAgICAgZmx1aWQuZmFpbCgiUHJvYmFibGUgZXJyb3Ig
aW4gc3ViY29tcG9uZW50IHJlY29yZCAtIGtleSBcIiIgKyBrZXkgKyAKICAgICAgICAgICAgICAg
ICAgICAiXCIgZm91bmQsIHdoZXJlIHRoZSBvbmx5IGxlZ2FsIG9wdGlvbnMgYXJlICIgKyAKICAg
ICAgICAgICAgICAgICAgICBmbHVpZC5oYXNoVG9BcnJheShleHBlY3RlZCkuam9pbigiLCAiKSk7
CiAgICAgICAgICAgIH0gIAogICAgICAgIH0pOwogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0
ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlkLmV4cGFuZENvbXBvbmVudE9wdGlvbnMgPSBm
dW5jdGlvbihkZWZhdWx0cywgdXNlck9wdGlvbnMsIHRoYXQpIHsKICAgICAgICBpZiAodXNlck9w
dGlvbnMgJiYgdXNlck9wdGlvbnMubG9jYWxSZWNvcmQpIHsKICAgICAgICAgICAgZmx1aWQuY2hl
Y2tDb21wb25lbnRSZWNvcmQoZGVmYXVsdHMsIHVzZXJPcHRpb25zLmxvY2FsUmVjb3JkKTsKICAg
ICAgICB9CiAgICAgICAgZGVmYXVsdHMgPSBmbHVpZC5leHBhbmRPcHRpb25zKGZsdWlkLmNvcHko
ZGVmYXVsdHMpLCB0aGF0KTsKICAgICAgICB2YXIgbG9jYWxSZWNvcmQgPSB7fTsKICAgICAgICBp
ZiAodXNlck9wdGlvbnMgJiYgdXNlck9wdGlvbnMubWFya2VyID09PSBmbHVpZC5FWFBBTkQpIHsK
ICAgICAgICAgICAgLy8gVE9ETzogU29tZXdoYXQgcGVycGxleGluZy4uLiB0aGUgbG9jYWwgcmVj
b3JkIGl0c2VsZiwgYnkgYW55IHJvdXRlIHdlIGNvdWxkIGdldCBoZXJlLCBjb25zaXN0cyBvZiB1
bmV4cGFuZGVkCiAgICAgICAgICAgIC8vIG1hdGVyaWFsIHRha2VuIGZyb20gImNvbXBvbmVudE9w
dGlvbnMiCiAgICAgICAgICAgIHZhciBsb2NhbE9wdGlvbnMgPSBmbHVpZC5nZXQodXNlck9wdGlv
bnMsICJsb2NhbFJlY29yZC5vcHRpb25zIik7CiAgICAgICAgICAgIGlmIChsb2NhbE9wdGlvbnMp
IHsKICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZXJnZVBvbGljeSkg
ewogICAgICAgICAgICAgICAgICAgIGxvY2FsT3B0aW9ucy5tZXJnZVBvbGljeSA9IGRlZmF1bHRz
Lm1lcmdlUG9saWN5OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbG9jYWxSZWNv
cmQub3B0aW9ucyA9IGZsdWlkLmV4cGFuZE9wdGlvbnMobG9jYWxPcHRpb25zLCB0aGF0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBsb2NhbFJlY29yZFsiYXJndW1lbnRzIl0gPSBmbHVpZC5n
ZXQodXNlck9wdGlvbnMsICJsb2NhbFJlY29yZC5hcmd1bWVudHMiKTsKICAgICAgICAgICAgdmFy
IHRvRXhwYW5kID0gdXNlck9wdGlvbnMudmFsdWU7CiAgICAgICAgICAgIHVzZXJPcHRpb25zID0g
Zmx1aWQuZXhwYW5kT3B0aW9ucyh0b0V4cGFuZCwgdGhhdCwgbG9jYWxSZWNvcmQsIHtkaXJlY3Q6
IHRydWV9KTsKICAgICAgICB9CiAgICAgICAgbG9jYWxSZWNvcmQuZGlyZWN0T3B0aW9ucyA9IHVz
ZXJPcHRpb25zOwogICAgICAgIGlmICghbG9jYWxSZWNvcmQub3B0aW9ucykgewogICAgICAgICAg
ICAvLyBDYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBkZW1hbmRzIGJsb2NrIGFuZCBl
dmVyeXRoaW5nIGlzIGluIHRoZSBzdWJjb21wb25lbnQgcmVjb3JkIC0gCiAgICAgICAgICAgIC8v
IGluIHRoaXMgY2FzZSwgZW1ib2R5RGVtYW5kcyB3aWxsIG5vdCBjb25zdHJ1Y3QgYSBsb2NhbFJl
Y29yZCBhbmQgd2hhdCB0aGUgdXNlciByZWZlcnMgdG8gYnkgIm9wdGlvbnMiCiAgICAgICAgICAg
IC8vIGlzIHJlYWxseSB3aGF0IHdlIHByb3Blcmx5IGNhbGwgImRpcmVjdE9wdGlvbnMiLgogICAg
ICAgICAgICBsb2NhbFJlY29yZC5vcHRpb25zID0gdXNlck9wdGlvbnM7CiAgICAgICAgfQogICAg
ICAgIHZhciBtZXJnZU9wdGlvbnMgPSAodXNlck9wdGlvbnMgJiYgdXNlck9wdGlvbnMubWVyZ2VB
bGxPcHRpb25zKSB8fCBbIntkaXJlY3RPcHRpb25zfSJdOwogICAgICAgIHZhciB0b2dvID0gZmx1
aWQudHJhbnNmb3JtKG1lcmdlT3B0aW9ucywgZnVuY3Rpb24ocGF0aCkgewogICAgICAgICAgICAv
LyBBdm9pZCB1c2Ugb2YgZXhwYW5kT3B0aW9ucyBpbiBzaW1wbGUgY2FzZSB0byBhdm9pZCBpbmZp
bml0ZSByZWN1cnNpb24gd2hlbiBjb25zdHJ1Y3RpbmcgaW5zdGFudGlhdG9yCiAgICAgICAgICAg
IHJldHVybiBwYXRoID09PSAie2RpcmVjdE9wdGlvbnN9Ij8gbG9jYWxSZWNvcmQuZGlyZWN0T3B0
aW9ucyA6IGZsdWlkLmV4cGFuZE9wdGlvbnMocGF0aCwgdGhhdCwgbG9jYWxSZWNvcmQsIHtkaXJl
Y3Q6IHRydWV9KTsgCiAgICAgICAgfSk7CiAgICAgICAgdmFyIHRyYW5zUmVjID0gZmx1aWQubG9j
YXRlVHJhbnNmb3JtYXRpb25SZWNvcmQodGhhdCk7CiAgICAgICAgaWYgKHRyYW5zUmVjKSB7CiAg
ICAgICAgICAgIHRvZ29bMF0udHJhbnNmb3JtT3B0aW9ucyA9IHRyYW5zUmVjLm9wdGlvbnM7CiAg
ICAgICAgfQogICAgICAgIHJldHVybiBbZGVmYXVsdHNdLmNvbmNhdCh0b2dvKTsKICAgIH07CiAg
ICAKICAgIGZsdWlkLmV4cGFuZENvbXBvbmVudE9wdGlvbnMgPSBmbHVpZC53cmFwQWN0aXZpdHko
Zmx1aWQuZXhwYW5kQ29tcG9uZW50T3B0aW9ucywgCiAgICAgICAgWyIgICAgd2hpbGUgZXhwYW5k
aW5nIGNvbXBvbmVudCBvcHRpb25zICIsICJhcmd1bWVudHMuMS52YWx1ZSIsICIgd2l0aCByZWNv
cmQgIiwgImFyZ3VtZW50cy4xIiwgIiBmb3IgY29tcG9uZW50ICIsICJhcmd1bWVudHMuMiJdKTsK
ICAgIAogICAgLy8gVGhlIGNhc2Ugd2l0aG91dCB0aGUgaW5zdGFudGlhdG9yIGlzIGZyb20gdGhl
IGdpbmdlciBzdHJhdGVneSAtIHRoaXMgbG9naWMgaXMgc3RpbGwgYSBsaXR0bGUgcmFnZ2VkCiAg
ICBmbHVpZC5pbml0RGVwZW5kZW50ID0gZnVuY3Rpb24odGhhdCwgbmFtZSwgdXNlckluc3RhbnRp
YXRvciwgZGlyZWN0QXJncykgewogICAgICAgIGlmICghdGhhdCB8fCB0aGF0W25hbWVdKSB7IHJl
dHVybjsgfQogICAgICAgIGZsdWlkLmxvZygiQmVnaW5uaW5nIGluc3RhbnRpYXRpb24gb2YgY29t
cG9uZW50IHdpdGggbmFtZSBcIiIgKyBuYW1lICsgIlwiIGFzIGNoaWxkIG9mICIgKyBmbHVpZC5k
dW1wVGhhdCh0aGF0KSk7CiAgICAgICAgZGlyZWN0QXJncyA9IGRpcmVjdEFyZ3MgfHwgW107CiAg
ICAgICAgdmFyIHJvb3QgPSBmbHVpZC50aHJlYWRMb2NhbCgpOwogICAgICAgIGlmICh1c2VySW5z
dGFudGlhdG9yKSB7CiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHJvb3RbImZsdWlkLmluc3Rh
bnRpYXRvciJdOwogICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcgIT09IHVzZXJJ
bnN0YW50aWF0b3IpIHsKICAgICAgICAgICAgICAgIGZsdWlkLmZhaWwoIkVycm9yIGluIGluaXRE
ZXBlbmRlbnQ6IHVzZXIgaW5zdGFudGlhdG9yIHN1cHBsaWVkIHdpdGggaWQgIiArIHVzZXJJbnN0
YW50aWF0b3IuaWQgCiAgICAgICAgICAgICAgICAgICAgKyAiIHdoaWNoIGRpZmZlcnMgZnJvbSB0
aGF0IGZvciBjdXJyZW50bHkgYWN0aXZlIGluc3RhbnRpYXRpb24gd2l0aCBpZCAiICsgZXhpc3Rp
bmcuaWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
cm9vdFsiZmx1aWQuaW5zdGFudGlhdG9yIl0gPSB1c2VySW5zdGFudGlhdG9yOwogICAgICAgICAg
ICAgICAgLy8gZmx1aWQubG9nKCIqKiogaW5pdERlcGVuZGVudCBmb3IgIiArIHRoYXQudHlwZU5h
bWUgKyAiIG1lbWJlciAiICsgbmFtZSArICIgd2FzIHN1cHBsaWVkIFVTRVIgaW5zdGFudGlhdG9y
IHdpdGggaWQgIiArIHVzZXJJbnN0YW50aWF0b3IuaWQgKyAiIC0gU1RPUkVEIik7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRoYXQub3B0
aW9ucy5jb21wb25lbnRzW25hbWVdOwogICAgICAgIGZsdWlkLndpdGhJbnN0YW50aWF0b3IodGhh
dCwgZnVuY3Rpb24oaW5zdGFudGlhdG9yKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YoY29tcG9u
ZW50KSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHRoYXRbbmFtZV0gPSBmbHVpZC5l
eHBhbmRPcHRpb25zKFtjb21wb25lbnRdLCB0aGF0KVswXTsgLy8gVE9ETzogZXhwb3NlIG1vcmUg
c2Vuc2libGUgc2VtYW50aWMgZm9yIGV4cGFuZE9wdGlvbnMgCiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnR5cGUpIHsKICAgICAgICAgICAgICAgIHZhciBpbnZv
a2VTcGVjID0gZmx1aWQucmVzb2x2ZURlbWFuZHMoaW5zdGFudGlhdG9yLCB0aGF0LCBbY29tcG9u
ZW50LnR5cGUsIG5hbWVdLCBkaXJlY3RBcmdzLCB7Y29tcG9uZW50UmVjb3JkOiBjb21wb25lbnR9
KTsKICAgICAgICAgICAgICAgIGluc3RhbnRpYXRvci5wdXNoVXBjb21pbmdJbnN0YW50aWF0aW9u
KHRoYXQsIG5hbWUpOwogICAgICAgICAgICAgICAgZmx1aWQudHJ5Q2F0Y2goZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgICAgdGhhdFtpbkNyZWF0aW9uTWFya2VyXSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmx1aWQuaW5pdFN1YmNvbXBvbmVudEltcGwo
dGhhdCwge3R5cGU6IGludm9rZVNwZWMuZnVuY05hbWV9LCBpbnZva2VTcGVjLmFyZ3MpOwogICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBleGlzdGluZyBpbnN0YW50aWF0b3IgcmVjb3JkIHdpbGwg
YmUgcHJvdmlzaW9uYWwsIGFkanVzdCBpdCB0byB0YWtlIGFjY291bnQgb2YgdGhlIHRydWUgcmV0
dXJuCiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSW5zdGFudGlhdG9yIGNvbnRlbnRzIGFy
ZSBnZW5lcmFsbHkgZXh0cmVtZWx5IGluY29tcGxldGUKICAgICAgICAgICAgICAgICAgICB2YXIg
cGF0aCA9IGZsdWlkLmNvbXBvc2VQYXRoKGluc3RhbnRpYXRvci5pZFRvUGF0aFt0aGF0LmlkXSB8
fCAiIiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gaW5zdGFudGlh
dG9yLnBhdGhUb0NvbXBvbmVudFtwYXRoXTsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3Rp
bmcgJiYgZXhpc3RpbmcgIT09IGluc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RhbnRpYXRvci5jbGVhckNvbXBvbmVudCh0aGF0LCBuYW1lLCBleGlzdGluZywgbnVsbCwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5j
ZSAmJiBpbnN0YW5jZS50eXBlTmFtZSAmJiBpbnN0YW5jZS5pZCAmJiBpbnN0YW5jZSAhPT0gZXhp
c3RpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdG9yLnJlY29yZEtub3du
Q29tcG9uZW50KHRoYXQsIGluc3RhbmNlLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgdGhhdFtuYW1lXSA9IGluc3RhbmNlOwogICAgICAgICAgICAgICAg
fSwgbnVsbCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoYXRbaW5D
cmVhdGlvbk1hcmtlcl07CiAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdG9yLnB1c2hVcGNv
bWluZ0luc3RhbnRpYXRpb24oKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGVsc2UgeyAKICAgICAgICAgICAgICAgIHRoYXRbbmFtZV0gPSBjb21wb25lbnQ7
CiAgICAgICAgICAgIH0KICAgICAgICB9LCBbIiAgICB3aGlsZSBpbnN0YW50aWF0aW5nIGRlcGVu
ZGVudCBjb21wb25lbnQgd2l0aCBuYW1lIFwiIiArIG5hbWUgKyAiXCIgd2l0aCByZWNvcmQgIiwg
Y29tcG9uZW50LCAiIGFzIGNoaWxkIG9mICIsIHRoYXRdKTsKICAgICAgICBmbHVpZC5sb2coIkZp
bmlzaGVkIGluc3RhbnRpYXRpb24gb2YgY29tcG9uZW50IHdpdGggbmFtZSBcIiIgKyBuYW1lICsg
IlwiIGFzIGNoaWxkIG9mICIgKyBmbHVpZC5kdW1wVGhhdCh0aGF0KSk7CiAgICB9OwogICAgCiAg
ICAvLyBOT04tQVBJIGZ1bmN0aW9uCiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHN0YXRlZnVsIGFu
ZCBNVVNUIE5PVCBiZSBjYWxsZWQgYnkgY2xpZW50IGNvZGUKICAgIGZsdWlkLndpdGhJbnN0YW50
aWF0b3IgPSBmdW5jdGlvbih0aGF0LCBmdW5jLCBtZXNzYWdlKSB7CiAgICAgICAgdmFyIHJvb3Qg
PSBmbHVpZC50aHJlYWRMb2NhbCgpOwogICAgICAgIHZhciBpbnN0YW50aWF0b3IgPSByb290WyJm
bHVpZC5pbnN0YW50aWF0b3IiXTsKICAgICAgICBpZiAoIWluc3RhbnRpYXRvcikgewogICAgICAg
ICAgICBpbnN0YW50aWF0b3IgPSByb290WyJmbHVpZC5pbnN0YW50aWF0b3IiXSA9IGZsdWlkLmlu
c3RhbnRpYXRvcigpOwogICAgICAgICAgICAvL2ZsdWlkLmxvZygiQ3JlYXRlZCBuZXcgaW5zdGFu
dGlhdG9yIHdpdGggaWQgIiArIGluc3RhbnRpYXRvci5pZCArICIgaW4gb3JkZXIgdG8gb3BlcmF0
ZSBvbiBjb21wb25lbnQgIiArIHR5cGVOYW1lKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZs
dWlkLnB1c2hBY3Rpdml0eShmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLnRy
eUNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKHRoYXQpIHsKICAgICAgICAg
ICAgICAgICAgICBpbnN0YW50aWF0b3IucmVjb3JkQ29tcG9uZW50KHRoYXQpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgaW5zdGFudGlhdG9yLnN0YWNrKDEpOwogICAgICAgICAg
ICAgICAgLy9mbHVpZC5sb2coIkluc3RhbnRpYXRvciBzdGFjayArMSB0byAiICsgaW5zdGFudGlh
dG9yLnN0YWNrQ291bnQgKyAiIGZvciAiICsgdHlwZU5hbWUpOwogICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmMoaW5zdGFudGlhdG9yKTsKICAgICAgICAgICAgfSwgbnVsbCwgZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBpbnN0YW50aWF0b3Iuc3RhY2soLTEpOwogICAg
ICAgICAgICAgICAgLy9mbHVpZC5sb2coIkluc3RhbnRpYXRvciBzdGFjayAtMSB0byAiICsgaW5z
dGFudGlhdG9yLnN0YWNrQ291bnQgKyAiIGZvciAiICsgdHlwZU5hbWUpOwogICAgICAgICAgICAg
ICAgaWYgKGNvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgLy9mbHVpZC5sb2coIkNs
ZWFyaW5nIGluc3RhbnRpYXRvciB3aXRoIGlkICIgKyBpbnN0YW50aWF0b3IuaWQgKyAiIGZyb20g
dGhyZWFkTG9jYWwgZm9yIGVuZCBvZiAiICsgdHlwZU5hbWUpOwogICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSByb290WyJmbHVpZC5pbnN0YW50aWF0b3IiXTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfSk7CiAgICAgICAgfSwgbWVzc2FnZSk7CiAgICB9OwogICAgCiAgICAvLyB1bnN1
cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuYmluZERlZmVycmVkQ29tcG9uZW50
ID0gZnVuY3Rpb24odGhhdCwgY29tcG9uZW50TmFtZSwgY29tcG9uZW50LCBpbnN0YW50aWF0b3Ip
IHsKICAgICAgICB2YXIgZXZlbnRzID0gZmx1aWQubWFrZUFycmF5KGNvbXBvbmVudC5jcmVhdGVP
bkV2ZW50KTsKICAgICAgICBmbHVpZC5lYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnROYW1lKSB7
CiAgICAgICAgICAgIHRoYXQuZXZlbnRzW2V2ZW50TmFtZV0uYWRkTGlzdGVuZXIoZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICBpZiAodGhhdFtjb21wb25lbnROYW1lXSkgewogICAgICAgICAg
ICAgICAgICAgIGluc3RhbnRpYXRvci5jbGVhckNvbXBvbmVudCh0aGF0LCBjb21wb25lbnROYW1l
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZsdWlkLmluaXREZXBlbmRlbnQo
dGhhdCwgY29tcG9uZW50TmFtZSwgaW5zdGFudGlhdG9yKTsKICAgICAgICAgICAgfSwgbnVsbCwg
bnVsbCwgY29tcG9uZW50LnByaW9yaXR5KTsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIC8v
IHVuc3VwcG9ydGVkLCBub24tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5wcmlvcml0eUZvckNvbXBv
bmVudCA9IGZ1bmN0aW9uKGNvbXBvbmVudCkgewogICAgICAgIHJldHVybiBjb21wb25lbnQucHJp
b3JpdHk/IGNvbXBvbmVudC5wcmlvcml0eSA6IAogICAgICAgICAgICAoY29tcG9uZW50LnR5cGUg
PT09ICJmbHVpZC50eXBlRm91bnQiIHx8IGZsdWlkLmhhc0dyYWRlKGZsdWlkLmRlZmF1bHRzKGNv
bXBvbmVudC50eXBlKSwgImZsdWlkLnR5cGVGb3VudCIpKT8KICAgICAgICAgICAgImZpcnN0IiA6
IHVuZGVmaW5lZDsgIAogICAgfTsKICAgIAogICAgZmx1aWQuaW5pdERlcGVuZGVudHMgPSBmdW5j
dGlvbih0aGF0KSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGF0Lm9wdGlvbnM7CiAgICAgICAg
dmFyIGNvbXBvbmVudHMgPSBvcHRpb25zLmNvbXBvbmVudHMgfHwge307CiAgICAgICAgdmFyIGNv
bXBvbmVudFNvcnQgPSB7fTsKICAgICAgICBmbHVpZC53aXRoSW5zdGFudGlhdG9yKHRoYXQsIGZ1
bmN0aW9uKGluc3RhbnRpYXRvcikgewogICAgICAgICAgICBmbHVpZC5lYWNoKGNvbXBvbmVudHMs
IGZ1bmN0aW9uKGNvbXBvbmVudCwgbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKCFjb21wb25l
bnQuY3JlYXRlT25FdmVudCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IGZs
dWlkLnByaW9yaXR5Rm9yQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICAgICAgICAgICAgICAgICAg
Y29tcG9uZW50U29ydFtuYW1lXSA9IHtrZXk6IG5hbWUsIHByaW9yaXR5OiBmbHVpZC5ldmVudC5t
YXBQcmlvcml0eShwcmlvcml0eSwgMCl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZmx1aWQuYmluZERlZmVycmVkQ29tcG9uZW50
KHRoYXQsIG5hbWUsIGNvbXBvbmVudCwgaW5zdGFudGlhdG9yKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBjb21wb25lbnRMaXN0ID0gZmx1aWQuZXZl
bnQuc29ydExpc3RlbmVycyhjb21wb25lbnRTb3J0KTsKICAgICAgICAgICAgZmx1aWQuZWFjaChj
b21wb25lbnRMaXN0LCBmdW5jdGlvbihlbnRyeSkgewogICAgICAgICAgICAgICAgZmx1aWQuaW5p
dERlcGVuZGVudCh0aGF0LCBlbnRyeS5rZXkpOyAgCiAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICB2YXIgaW52b2tlcnMgPSBvcHRpb25zLmludm9rZXJzIHx8IHt9OwogICAgICAgICAgICBmb3Ig
KHZhciBuYW1lIGluIGludm9rZXJzKSB7CiAgICAgICAgICAgICAgICB2YXIgaW52b2tlcmVjID0g
aW52b2tlcnNbbmFtZV07CiAgICAgICAgICAgICAgICB2YXIgZnVuY05hbWUgPSB0eXBlb2YoaW52
b2tlcmVjKSA9PT0gInN0cmluZyI/IGludm9rZXJlYyA6IG51bGw7CiAgICAgICAgICAgICAgICB0
aGF0W25hbWVdID0gZmx1aWQud2l0aEluc3RhbnRpYXRvcih0aGF0LCBmdW5jdGlvbihpbnN0YW50
aWF0b3IpIHsKICAgICAgICAgICAgICAgICAgICBmbHVpZC5sb2coIkJlZ2lubmluZyBpbnN0YW50
aWF0aW9uIG9mIGludm9rZXIgd2l0aCBuYW1lIFwiIiArIG5hbWUgKyAiXCIgYXMgY2hpbGQgb2Yg
IiArIGZsdWlkLmR1bXBUaGF0KHRoYXQpKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmx1
aWQubWFrZUludm9rZXIoaW5zdGFudGlhdG9yLCB0aGF0LCBmdW5jTmFtZT8gbnVsbCA6IGludm9r
ZXJlYywgZnVuY05hbWUpOwogICAgICAgICAgICAgICAgfSwgWyIgICAgd2hpbGUgaW5zdGFudGlh
dGluZyBpbnZva2VyIHdpdGggbmFtZSBcIiIgKyBuYW1lICsgIlwiIHdpdGggcmVjb3JkICIsIGlu
dm9rZXJlYywgIiBhcyBjaGlsZCBvZiAiLCB0aGF0XSk7IC8vIGpzbGludDpvawogICAgICAgICAg
ICAgICAgZmx1aWQubG9nKCJGaW5pc2hlZCBpbnN0YW50aWF0aW9uIG9mIGludm9rZXIgd2l0aCBu
YW1lIFwiIiArIG5hbWUgKyAiXCIgYXMgY2hpbGQgb2YgIiArIGZsdWlkLmR1bXBUaGF0KHRoYXQp
KTsgCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07ICAgCiAgICAgICAgCiAgICBmbHVp
ZC5zdGF0aWNFbnZpcm9ubWVudCA9IGZsdWlkLnR5cGVUYWcoImZsdWlkLnN0YXRpY0Vudmlyb25t
ZW50Iik7CiAgICAKICAgIGZsdWlkLnN0YXRpY0Vudmlyb25tZW50LmVudmlyb25tZW50Q2xhc3Mg
PSBmbHVpZC50eXBlVGFnKCJmbHVpZC5icm93c2VyIik7CiAgICAKICAgIC8vIGZsdWlkLmVudmly
b25tZW50YWxSb290LmVudmlyb25tZW50Q2xhc3MgPSBmbHVpZC50eXBlVGFnKCJmbHVpZC5yaGlu
byIpOwogICAgCiAgICBmbHVpZC5kZW1hbmRzKCJmbHVpZC50aHJlYWRMb2NhbCIsICJmbHVpZC5i
cm93c2VyIiwge2Z1bmNOYW1lOiAiZmx1aWQuc2luZ2xlVGhyZWFkTG9jYWwifSk7CgogICAgdmFy
IHNpbmdsZVRocmVhZExvY2FsID0gZmx1aWQudHlwZVRhZygiZmx1aWQuZHluYW1pY0Vudmlyb25t
ZW50Iik7CiAgICAKICAgIGZsdWlkLnNpbmdsZVRocmVhZExvY2FsID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgcmV0dXJuIHNpbmdsZVRocmVhZExvY2FsOwogICAgfTsKCiAgICBmbHVpZC50aHJlYWRM
b2NhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIHF1aWNrIGltcGxlbWVudGF0aW9uIHNpbmNl
IHRoaXMgaXMgbm90IHZlcnkgZHluYW1pYywgYSBoYXphcmQgdG8gZGVidWdnaW5nLCBhbmQgdXNl
ZCBmcmVxdWVudGx5IHdpdGhpbiBJb0MgaXRzZWxmCiAgICAgICAgdmFyIGRlbWFuZHMgPSBmbHVp
ZC5sb2NhdGVEZW1hbmRzKGZsdWlkLmZyZWVJbnN0YW50aWF0b3IsIG51bGwsIFsiZmx1aWQudGhy
ZWFkTG9jYWwiXSk7CiAgICAgICAgcmV0dXJuIGZsdWlkLmludm9rZUdsb2JhbEZ1bmN0aW9uKGRl
bWFuZHMuZnVuY05hbWUsIGFyZ3VtZW50cyk7CiAgICB9OwoKICAgIGZ1bmN0aW9uIGFwcGx5TG9j
YWxDaGFuZ2UoYXBwbGllciwgdHlwZSwgcGF0aCwgdmFsdWUpIHsKICAgICAgICB2YXIgY2hhbmdl
ID0gewogICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICBwYXRoOiBwYXRoLAogICAg
ICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICB9OwogICAgICAgIGFwcGxpZXIuZmlyZUNoYW5n
ZVJlcXVlc3QoY2hhbmdlKTsKICAgIH0KCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5j
dGlvbgogICAgZmx1aWQud2l0aEVudmlyb25tZW50ID0gZnVuY3Rpb24oZW52QWRkLCBmdW5jLCBw
cmVmaXgpIHsKICAgICAgICBwcmVmaXggPSBwcmVmaXggfHwgIiI7CiAgICAgICAgdmFyIHJvb3Qg
PSBmbHVpZC50aHJlYWRMb2NhbCgpOwogICAgICAgIHZhciBhcHBsaWVyID0gZmx1aWQubWFrZUNo
YW5nZUFwcGxpZXIocm9vdCwge3RoaW46IHRydWV9KTsKICAgICAgICByZXR1cm4gZmx1aWQudHJ5
Q2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbnZBZGQpIHsK
ICAgICAgICAgICAgICAgIGFwcGx5TG9jYWxDaGFuZ2UoYXBwbGllciwgIkFERCIsIGZsdWlkLm1v
ZGVsLmNvbXBvc2VQYXRoKHByZWZpeCwga2V5KSwgZW52QWRkW2tleV0pOwogICAgICAgICAgICB9
CiAgICAgICAgICAgICQuZXh0ZW5kKHJvb3QsIGVudkFkZCk7CiAgICAgICAgICAgIHJldHVybiBm
dW5jKCk7CiAgICAgICAgfSwgbnVsbCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFy
IGtleSBpbiBlbnZBZGQpIHsgLy8ganNsaW50Om9rIGR1cGxpY2F0ZSAidmFsdWUiCiAgICAgICAg
ICAgICAgLy8gVE9ETzogVGhpcyBjb3VsZCBiZSBtdWNoIGJldHRlciB0aHJvdWdoIGkpIHJlZmFj
dG9yaW5nIHRoZSBDaGFuZ2VBcHBsaWVyIHNvIHdlIGNvdWxkIG5hdHVyYWxseSB1c2UgInJvbGxi
YWNrIiBzZW1hbnRpY3MgCiAgICAgICAgICAgICAgLy8gYW5kL29yIGltcGxlbWVudGluZyB0aGlz
IG1hdGVyaWFsIHVzaW5nIHNvbWUgZm9ybSBvZiAicHJvdG90eXBlIGNoYWluIgogICAgICAgICAg
ICAgICAgYXBwbHlMb2NhbENoYW5nZShhcHBsaWVyLCAiREVMRVRFIiwgZmx1aWQubW9kZWwuY29t
cG9zZVBhdGgocHJlZml4LCBrZXkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsK
ICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24gIAogICAgZmx1aWQubWFr
ZUVudmlyb25tZW50RmV0Y2hlciA9IGZ1bmN0aW9uKHByZWZpeCwgZGlyZWN0TW9kZWwpIHsKICAg
ICAgICByZXR1cm4gZnVuY3Rpb24ocGFyc2VkKSB7CiAgICAgICAgICAgIHZhciBlbnYgPSBmbHVp
ZC5nZXQoZmx1aWQudGhyZWFkTG9jYWwoKSwgcHJlZml4KTsKICAgICAgICAgICAgcmV0dXJuIGZs
dWlkLmZldGNoQ29udGV4dFJlZmVyZW5jZShwYXJzZWQsIGRpcmVjdE1vZGVsLCBlbnYpOwogICAg
ICAgIH07CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbiAg
CiAgICBmbHVpZC5leHRyYWN0RUwgPSBmdW5jdGlvbihzdHJpbmcsIG9wdGlvbnMpIHsKICAgICAg
ICBpZiAob3B0aW9ucy5FTHN0eWxlID09PSAiQUxMIikgewogICAgICAgICAgICByZXR1cm4gc3Ry
aW5nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChvcHRpb25zLkVMc3R5bGUubGVuZ3RoID09
PSAxKSB7CiAgICAgICAgICAgIGlmIChzdHJpbmcuY2hhckF0KDApID09PSBvcHRpb25zLkVMc3R5
bGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDEpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuRUxzdHlsZSA9PT0gIiR7
fSIpIHsKICAgICAgICAgICAgdmFyIGkxID0gc3RyaW5nLmluZGV4T2YoIiR7Iik7CiAgICAgICAg
ICAgIHZhciBpMiA9IHN0cmluZy5sYXN0SW5kZXhPZigifSIpOwogICAgICAgICAgICBpZiAoaTEg
PT09IDAgJiYgaTIgIT09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnN1YnN0
cmluZygyLCBpMik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICAvLyB1
bnN1cHBvcnRlZCwgbm9uLUFQSSBmdW5jdGlvbgogICAgZmx1aWQuZXh0cmFjdEVMV2l0aENvbnRl
eHQgPSBmdW5jdGlvbihzdHJpbmcsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgRUwgPSBmbHVpZC5l
eHRyYWN0RUwoc3RyaW5nLCBvcHRpb25zKTsKICAgICAgICBpZiAoRUwgJiYgRUwuY2hhckF0KDAp
ID09PSAieyIpIHsKICAgICAgICAgICAgcmV0dXJuIGZsdWlkLnBhcnNlQ29udGV4dFJlZmVyZW5j
ZShFTCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBFTD8ge3BhdGg6IEVMfSA6IEVMOwog
ICAgfTsKCiAgICBmbHVpZC5wYXJzZUNvbnRleHRSZWZlcmVuY2UgPSBmdW5jdGlvbihyZWZlcmVu
Y2UsIGluZGV4LCBkZWxpbWl0ZXIpIHsKICAgICAgICB2YXIgZW5kY3BvcyA9IHJlZmVyZW5jZS5p
bmRleE9mKCJ9IiwgaW5kZXggKyAxKTsKICAgICAgICBpZiAoZW5kY3BvcyA9PT0gLTEpIHsKICAg
ICAgICAgICAgZmx1aWQuZmFpbCgiQ2Fubm90IHBhcnNlIGNvbnRleHQgcmVmZXJlbmNlIFwiIiAr
IHJlZmVyZW5jZSArICJcIjogTWFsZm9ybWVkIGNvbnRleHQgcmVmZXJlbmNlIHdpdGhvdXQgfSIp
OwogICAgICAgIH0KICAgICAgICB2YXIgY29udGV4dCA9IHJlZmVyZW5jZS5zdWJzdHJpbmcoaW5k
ZXggKyAxLCBlbmRjcG9zKTsKICAgICAgICB2YXIgZW5kcG9zID0gZGVsaW1pdGVyPyByZWZlcmVu
Y2UuaW5kZXhPZihkZWxpbWl0ZXIsIGVuZGNwb3MgKyAxKSA6IHJlZmVyZW5jZS5sZW5ndGg7CiAg
ICAgICAgdmFyIHBhdGggPSByZWZlcmVuY2Uuc3Vic3RyaW5nKGVuZGNwb3MgKyAxLCBlbmRwb3Mp
OwogICAgICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gIi4iKSB7CiAgICAgICAgICAgIHBhdGgg
PSBwYXRoLnN1YnN0cmluZygxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHtjb250ZXh0OiBj
b250ZXh0LCBwYXRoOiBwYXRoLCBlbmRwb3M6IGVuZHBvc307CiAgICB9OwogICAgCiAgICBmbHVp
ZC5yZW5kZXJDb250ZXh0UmVmZXJlbmNlID0gZnVuY3Rpb24ocGFyc2VkKSB7CiAgICAgICAgcmV0
dXJuICJ7IiArIHBhcnNlZC5jb250ZXh0ICsgIn0iICsgcGFyc2VkLnBhdGg7ICAKICAgIH07CiAg
ICAKICAgIGZsdWlkLmZldGNoQ29udGV4dFJlZmVyZW5jZSA9IGZ1bmN0aW9uKHBhcnNlZCwgZGly
ZWN0TW9kZWwsIGVudikgewogICAgICAgIHZhciBiYXNlID0gcGFyc2VkLmNvbnRleHQ/IGVudltw
YXJzZWQuY29udGV4dF0gOiBkaXJlY3RNb2RlbDsKICAgICAgICBpZiAoIWJhc2UpIHsKICAgICAg
ICAgICAgcmV0dXJuIGJhc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmbHVpZC5nZXQoYmFz
ZSwgcGFyc2VkLnBhdGgpOwogICAgfTsKICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkg
ZnVuY3Rpb24KICAgIGZsdWlkLnJlc29sdmVDb250ZXh0VmFsdWUgPSBmdW5jdGlvbihzdHJpbmcs
IG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucy5iYXJlQ29udGV4dFJlZnMgJiYgc3RyaW5n
LmNoYXJBdCgwKSA9PT0gInsiKSB7CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBmbHVpZC5wYXJz
ZUNvbnRleHRSZWZlcmVuY2Uoc3RyaW5nLCAwKTsKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMu
ZmV0Y2hlcihwYXJzZWQpOyAgICAgICAgCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wdGlv
bnMuRUxzdHlsZSAmJiBvcHRpb25zLkVMc3R5bGUgIT09ICIke30iKSB7CiAgICAgICAgICAgIHZh
ciBwYXJzZWQgPSBmbHVpZC5leHRyYWN0RUxXaXRoQ29udGV4dChzdHJpbmcsIG9wdGlvbnMpOyAv
LyBqc2xpbnQ6b2sKICAgICAgICAgICAgaWYgKHBhcnNlZCkgewogICAgICAgICAgICAgICAgcmV0
dXJuIG9wdGlvbnMuZmV0Y2hlcihwYXJzZWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHdoaWxlICh0eXBlb2Yoc3RyaW5nKSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdmFy
IGkxID0gc3RyaW5nLmluZGV4T2YoIiR7Iik7CiAgICAgICAgICAgIHZhciBpMiA9IHN0cmluZy5p
bmRleE9mKCJ9IiwgaTEgKyAyKTsKICAgICAgICAgICAgaWYgKGkxICE9PSAtMSAmJiBpMiAhPT0g
LTEpIHsKICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7IC8vIGpzbGludDpvawogICAgICAgICAg
ICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaTEgKyAyKSA9PT0gInsiKSB7CiAgICAgICAgICAgICAg
ICAgICAgcGFyc2VkID0gZmx1aWQucGFyc2VDb250ZXh0UmVmZXJlbmNlKHN0cmluZywgaTEgKyAy
LCAifSIpOwogICAgICAgICAgICAgICAgICAgIGkyID0gcGFyc2VkLmVuZHBvczsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHBhcnNl
ZCA9IHtwYXRoOiBzdHJpbmcuc3Vic3RyaW5nKGkxICsgMiwgaTIpfTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHZhciBzdWJzID0gb3B0aW9ucy5mZXRjaGVyKHBhcnNlZCk7CiAg
ICAgICAgICAgICAgICB2YXIgYWxsID0gKGkxID09PSAwICYmIGkyID09PSBzdHJpbmcubGVuZ3Ro
IC0gMSk7IAogICAgICAgICAgICAgICAgLy8gVE9ETzogdGVzdCBjYXNlIGZvciBhbGwgdW5kZWZp
bmVkIHN1YnN0aXR1dGlvbgogICAgICAgICAgICAgICAgaWYgKHN1YnMgPT09IHVuZGVmaW5lZCB8
fCBzdWJzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnM7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJpbmcgPSBhbGw/IHN1YnMgOiBzdHJpbmcu
c3Vic3RyaW5nKDAsIGkxKSArIHN1YnMgKyBzdHJpbmcuc3Vic3RyaW5nKGkyICsgMSk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgfTsKICAgIAogICAg
Zmx1aWQucmVzb2x2ZUNvbnRleHRWYWx1ZSA9IGZsdWlkLndyYXBBY3Rpdml0eShmbHVpZC5yZXNv
bHZlQ29udGV4dFZhbHVlLCAKICAgICAgICBbIiAgICB3aGlsZSByZXNvbHZpbmcgY29udGV4dCB2
YWx1ZSAiLCAiYXJndW1lbnRzLjAiXSk7CiAgICAKICAgIGZ1bmN0aW9uIHJlc29sdmVFbnZpcm9u
bWVudEltcGwob2JqLCBvcHRpb25zKSB7CiAgICAgICAgZmx1aWQuZ3VhcmRDaXJjdWxhcml0eShv
cHRpb25zLnNlZW5JZHMsIG9iaiwgImV4cGFuc2lvbiIsIAogICAgICAgICAgICAgIiAtIHBsZWFz
ZSBlbnN1cmUgb3B0aW9ucyBhcmUgbm90IGNpcmN1bGFybHkgY29ubmVjdGVkLCBvciBwcm90ZWN0
IGZyb20gZXhwYW5zaW9uIHVzaW5nIHRoZSBcIm5vZXhwYW5kXCIgcG9saWN5IG9yIGV4cGFuZGVy
Iik7CiAgICAgICAgZnVuY3Rpb24gcmVjdXJzZShhcmcpIHsKICAgICAgICAgICAgcmV0dXJuIHJl
c29sdmVFbnZpcm9ubWVudEltcGwoYXJnLCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgaWYg
KHR5cGVvZihvYmopID09PSAic3RyaW5nIiAmJiAhb3B0aW9ucy5ub1ZhbHVlKSB7CiAgICAgICAg
ICAgIHJldHVybiBmbHVpZC5yZXNvbHZlQ29udGV4dFZhbHVlKG9iaiwgb3B0aW9ucyk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKGZsdWlkLmlzUHJpbWl0aXZlKG9iaikgfHwgb2JqLm5vZGVU
eXBlICE9PSB1bmRlZmluZWQgfHwgb2JqLmpxdWVyeSkgewogICAgICAgICAgICByZXR1cm4gb2Jq
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChvcHRpb25zLmZpbHRlcikgewogICAgICAgICAg
ICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob2JqLCByZWN1cnNlLCBvcHRpb25zKTsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAob3B0aW9ucy5ub0NvcHk/IGZsdWlk
LmVhY2ggOiBmbHVpZC50cmFuc2Zvcm0pKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFbnZpcm9ubWVudEltcGwodmFsdWUsIG9wdGlvbnMp
OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZsdWlkLmRlZmF1bHRz
KCJmbHVpZC5yZXNvbHZlRW52aXJvbm1lbnQiLCB7CiAgICAgICAgRUxzdHlsZTogICAgICIke30i
LAogICAgICAgIHNlZW5JZHM6ICAgICB7fSwKICAgICAgICBiYXJlQ29udGV4dFJlZnM6IHRydWUK
ICAgIH0pOwogICAgCiAgICBmbHVpZC5yZXNvbHZlRW52aXJvbm1lbnQgPSBmdW5jdGlvbihvYmos
IG9wdGlvbnMpIHsKICAgICAgICAvLyBEb24ndCBjcmVhdGUgYSBjb21wb25lbnQgaGVyZSBzaW5j
ZSB0aGlzIGZ1bmN0aW9uIGlzIGl0c2VsZiB1c2VkIGluIHRoZSAKICAgICAgICAvLyBjb21wb25l
bnQgZXhwYW5zaW9uIHBhdGh3YXkgLSBhdm9pZCBhbGwgZXhwYW5zaW9uIGluIGFueSBjYXNlIHRv
IGhlYWQgb2ZmIEZMVUlELTQzMDEKICAgICAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30s
IGZsdWlkLnJhd0RlZmF1bHRzKCJmbHVpZC5yZXNvbHZlRW52aXJvbm1lbnQiKSwgb3B0aW9ucyk7
CiAgICAgICAgcmV0dXJuIHJlc29sdmVFbnZpcm9ubWVudEltcGwob2JqLCBvcHRpb25zKTsKICAg
IH07CgogICAgLyoqICJsaWdodCIgZXhwYW5kZXJzLCBzdGFydGluZyB3aXRoIHN1cHBvcnQgZnVu
Y3Rpb25zIGZvciB0aGUgImRlZmVycmVkRmV0Y2hlciIgZXhwYW5kZXIgKiovCgogICAgZmx1aWQu
ZXhwYW5kZXIuZGVmZXJyZWRDYWxsID0gZnVuY3Rpb24odGFyZ2V0LCBzb3VyY2UsIHJlY3Vyc2Up
IHsKICAgICAgICB2YXIgZXhwYW5kZXIgPSBzb3VyY2UuZXhwYW5kZXI7CiAgICAgICAgdmFyIGFy
Z3MgPSAoIWV4cGFuZGVyLmFyZ3MgfHwgZmx1aWQuaXNBcnJheWFibGUoZXhwYW5kZXIuYXJncykp
PyBleHBhbmRlci5hcmdzIDogJC5tYWtlQXJyYXkoZXhwYW5kZXIuYXJncyk7CiAgICAgICAgYXJn
cyA9IHJlY3Vyc2UoYXJncyk7IAogICAgICAgIHJldHVybiBmbHVpZC5pbnZva2VHbG9iYWxGdW5j
dGlvbihleHBhbmRlci5mdW5jLCBhcmdzKTsKICAgIH07CiAgICAKICAgIGZsdWlkLmRlZmVycmVk
Q2FsbCA9IGZsdWlkLmV4cGFuZGVyLmRlZmVycmVkQ2FsbDsgLy8gcHV0IGluIHRvcCBuYW1lc3Bh
Y2UgZm9yIGNvbnZlbmllbmNlCiAgICAKICAgIGZsdWlkLmRlZmVycmVkSW52b2tlQ2FsbCA9IGZ1
bmN0aW9uKHRhcmdldCwgc291cmNlLCByZWN1cnNlKSB7CiAgICAgICAgdmFyIGV4cGFuZGVyID0g
c291cmNlLmV4cGFuZGVyOwogICAgICAgIHZhciBhcmdzID0gKCFleHBhbmRlci5hcmdzIHx8IGZs
dWlkLmlzQXJyYXlhYmxlKGV4cGFuZGVyLmFyZ3MpKT8gZXhwYW5kZXIuYXJncyA6ICQubWFrZUFy
cmF5KGV4cGFuZGVyLmFyZ3MpOwogICAgICAgIGFyZ3MgPSByZWN1cnNlKGFyZ3MpOyAgCiAgICAg
ICAgcmV0dXJuIGZsdWlkLmludm9rZShleHBhbmRlci5mdW5jLCBhcmdzKTsKICAgIH07CiAgICAK
ICAgIC8vIFRoZSAibm9leHBhbmQiIGV4cGFuZGVyIHdoaWNoIHNpbXBseSB1bndyYXBzIG9uZSBs
ZXZlbCBvZiBleHBhbnNpb24gYW5kIGNlYXNlcy4KICAgIGZsdWlkLmV4cGFuZGVyLm5vZXhwYW5k
ID0gZnVuY3Rpb24odGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgICByZXR1cm4gJC5leHRlbmQodGFy
Z2V0LCBzb3VyY2UuZXhwYW5kZXIudHJlZSk7CiAgICB9OwogIAogICAgZmx1aWQubm9leHBhbmQg
PSBmbHVpZC5leHBhbmRlci5ub2V4cGFuZDsgLy8gVE9ETzogY2hlY2sgbmFtaW5nIGFuZCBuYW1l
c3BhY2luZwogIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkgZnVuY3Rpb24KICAgIGZsdWlk
LmV4cGFuZGVyLmxpZ2h0RmlsdGVyID0gZnVuY3Rpb24gKG9iaiwgcmVjdXJzZSwgb3B0aW9ucykg
ewogICAgICAgIHZhciB0b2dvOwogICAgICAgIGlmIChmbHVpZC5pc0FycmF5YWJsZShvYmopKSB7
CiAgICAgICAgICAgIHRvZ28gPSBvcHRpb25zLm5vQ29weT8gb2JqIDogW107CiAgICAgICAgICAg
IGZsdWlkLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7dG9nb1trZXldID0gcmVjdXJz
ZSh2YWx1ZSk7fSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0b2dvID0g
b3B0aW9ucy5ub0NvcHk/IG9iaiA6IHt9OwogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2Jq
KSB7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTsKICAgICAgICAgICAgICAg
IHZhciBleHBhbmRlcjsKICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICJleHBhbmRlciIgJiYg
IShvcHRpb25zLmV4cGFuZE9ubHkgJiYgb3B0aW9ucy5leHBhbmRPbmx5W3ZhbHVlLnR5cGVdKSkg
ewogICAgICAgICAgICAgICAgICAgIGV4cGFuZGVyID0gZmx1aWQuZ2V0R2xvYmFsVmFsdWUodmFs
dWUudHlwZSk7ICAKICAgICAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZXIpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVyLmNhbGwobnVsbCwgdG9nbywgb2JqLCByZWN1
cnNlLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAiZXhwYW5kZXIiIHx8ICFleHBhbmRlcikgewogICAg
ICAgICAgICAgICAgICAgIHRvZ29ba2V5XSA9IHJlY3Vyc2UodmFsdWUpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcHRpb25zLm5vQ29w
eT8gb2JqIDogdG9nbzsKICAgIH07CiAgICAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIG5vbi1BUEkg
ZnVuY3Rpb24KICAgIGZsdWlkLmV4cGFuZGVyLmV4cGFuZExpZ2h0ID0gZnVuY3Rpb24gKHNvdXJj
ZSwgZXhwYW5kT3B0aW9ucykgewogICAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIGV4
cGFuZE9wdGlvbnMpOwogICAgICAgIG9wdGlvbnMuZmlsdGVyID0gZmx1aWQuZXhwYW5kZXIubGln
aHRGaWx0ZXI7CiAgICAgICAgcmV0dXJuIGZsdWlkLnJlc29sdmVFbnZpcm9ubWVudChzb3VyY2Us
IG9wdGlvbnMpOyAgICAgICAKICAgIH07CiAgICAgICAgICAKfSkoalF1ZXJ5LCBmbHVpZF8xXzQp
OwpfEA90ZXh0L2phdmFzY3JpcHTUBQYHCGNkZWZfEFVodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9y
ZWxlYXNlcy8xLjQvY29tcG9uZW50cy9yZW9yZGVyZXIvanMvUmVvcmRlcmVyRE9NVXRpbGl0aWVz
LmpzTxEEL2JwbGlzdDAw1AECAwQFBmJjWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQkdG9w
EgABhqCvEB0HCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcXVUkbnVsbN0JCgsMDQ4PEBESExQV
FhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNTJDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIk
MYAHEAgQB4AIgAIQAIAagByABYAbgAYQAdMjECQlJidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASA
A18QVWh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9jb21wb25lbnRzL3Jlb3Jk
ZXJlci9qcy9SZW9yZGVyZXJET01VdGlsaXRpZXMuanPSKissLVokY2xhc3NuYW1lWCRjbGFzc2Vz
VU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAu4qpcEMjTMzQQNT5HV05TLmtleXNaTlMub2Jq
ZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaAEYASgBOAFIAVgBaAF4AYgBlW
U2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRURGF0ZV1BY2NlcHQtUmFuZ2Vz
XkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4yLjE1IChDZW50T1MpXxAPdGV4
dC9qYXZhc2NyaXB0XxAaIjRlMDM1OS1kZWQtNGFmMzNkMDEzZTQwMCJfEB1UaHUsIDEzIE9jdCAy
MDExIDIwOjE2OjE2IEdNVF8QHVdlZCwgMTIgTWFyIDIwMTQgMjA6NTA6NTQgR01UVWJ5dGVzVDM1
NjVVY2xvc2XSKitZWlxOU0RpY3Rpb25hcnmiWS8RDe1fEA90ZXh0L2phdmFzY3JpcHTSKiteX18Q
EU5TSFRUUFVSTFJlc3BvbnNlo2BhL18QEU5TSFRUUFVSTFJlc3BvbnNlXU5TVVJMUmVzcG9uc2Vf
EA9OU0tleWVkQXJjaGl2ZXLRZGVfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoAIwAtADIA
NwBXAF0AeAB7AH8AggCFAIgAjACPAJYAmQCcAJ8AogClAKcAqQCrAK0ArwCxALMAtQC3ALkAuwC9
AMQAzADYANoA3ADeATYBOwFGAU8BVQFYAV4BZwFwAXIBeQGBAYwBlQGXAZkBmwGdAZ8BoQGjAaUB
rgGwAbIBtAG2AbgBugG8Ab4BwAHHAdQB2QHnAewB+gIJAhQCLQI/AlwCfAKcAqICpwKtArICvwLC
AsUC1wLcAvAC9AMIAxYDKAMrA0EAAAAAAAACAQAAAAAAAABmAAAAAAAAAAAAAAAAAAADQ08RDe0v
KgpDb3B5cmlnaHQgMjAwOC0yMDEwIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCkNvcHlyaWdodCAy
MDA4LTIwMTAgVW5pdmVyc2l0eSBvZiBUb3JvbnRvCgpMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0
aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCksIFZlcnNpb24gMi4wIG9yIHRoZSBOZXcKQlNE
IGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVD
TCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2UgYXQKaHR0cHM6Ly9naXRodWIuY29tL2ZsdWlk
LXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9JbmZ1c2lvbi1MSUNFTlNFLnR4dAoqLwoKLy8g
RGVjbGFyZSBkZXBlbmRlbmNpZXMKLypnbG9iYWwgZmx1aWRfMV80OnRydWUsIGpRdWVyeSovCgov
LyBKU0xpbnQgb3B0aW9ucyAKLypqc2xpbnQgd2hpdGU6IHRydWUsIGZ1bmNpbnZva2U6IHRydWUs
IHVuZGVmOiB0cnVlLCBuZXdjYXA6IHRydWUsIG5vbWVuOiB0cnVlLCByZWdleHA6IHRydWUsIGJp
dHdpc2U6IHRydWUsIGJyb3dzZXI6IHRydWUsIGZvcmluOiB0cnVlLCBtYXhlcnI6IDEwMCwgaW5k
ZW50OiA0ICovCgp2YXIgZmx1aWRfMV80ID0gZmx1aWRfMV80IHx8IHt9OwoKKGZ1bmN0aW9uICgk
LCBmbHVpZCkgewogICAgLyoqIAogICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgcG9zaXRpb24g
b2YgYSBzdXBwbGllZCBET00gbm9kZSBpbiBwaXhlbHMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbiB0
YWtlbiBmcm9tIHF1aXJrc21vZGUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9maW5kcG9z
Lmh0bWwKICAgICAqLwogICAgZmx1aWQuZG9tLmNvbXB1dGVBYnNvbHV0ZVBvc2l0aW9uID0gZnVu
Y3Rpb24gKGVsZW1lbnQpIHsKICAgICAgICB2YXIgY3VybGVmdCA9IDAsIGN1cnRvcCA9IDA7CiAg
ICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAg
ICAgICAgICAgIGN1cmxlZnQgKz0gZWxlbWVudC5vZmZzZXRMZWZ0OwogICAgICAgICAgICAgICAg
Y3VydG9wICs9IGVsZW1lbnQub2Zmc2V0VG9wOwogICAgICAgICAgICAgICAgZWxlbWVudCA9IGVs
ZW1lbnQub2Zmc2V0UGFyZW50OwogICAgICAgICAgICB9IHdoaWxlIChlbGVtZW50KTsKICAgICAg
ICAgICAgcmV0dXJuIFtjdXJsZWZ0LCBjdXJ0b3BdOwogICAgICAgIH0KICAgIH07CiAgICAKICAg
IC8qKiAKICAgICAqIENsZWFuc2UgdGhlIGNoaWxkcmVuIG9mIGEgRE9NIG5vZGUgYnkgcmVtb3Zp
bmcgYWxsIDxzY3JpcHQ+IHRhZ3MuCiAgICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50
IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZXNlIGJsb2NrcyBhcmUKICAgICAqIHJlZXZhbHVhdGVk
IGlmIHRoZSBub2RlIHdlcmUgcmVhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQuIAogICAgICovCiAg
ICBmbHVpZC5kb20uY2xlYW5zZVNjcmlwdHMgPSBmdW5jdGlvbiAoZWxlbWVudCkgewogICAgICAg
IHZhciBjbGVhbnNlZCA9ICQuZGF0YShlbGVtZW50LCBmbHVpZC5kb20uY2xlYW5zZVNjcmlwdHMu
TUFSS0VSKTsKICAgICAgICBpZiAoIWNsZWFuc2VkKSB7CiAgICAgICAgICAgIGZsdWlkLmRvbS5p
dGVyYXRlRG9tKGVsZW1lbnQsIGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJzY3JpcHQiID8gImRlbGV0ZSIgOiBu
dWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJC5kYXRhKGVsZW1lbnQsIGZsdWlkLmRv
bS5jbGVhbnNlU2NyaXB0cy5NQVJLRVIsIHRydWUpOwogICAgICAgIH0KICAgIH07ICAKICAgIGZs
dWlkLmRvbS5jbGVhbnNlU2NyaXB0cy5NQVJLRVIgPSAiZmx1aWQtc2NyaXB0cy1jbGVhbnNlZCI7
CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIG5ld0NoaWxkIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2Yg
cmVmQ2hpbGQuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3Q2hpbGQKICAgICAqIEBwYXJhbSB7
T2JqZWN0fSByZWZDaGlsZAogICAgICovCiAgICBmbHVpZC5kb20uaW5zZXJ0QWZ0ZXIgPSBmdW5j
dGlvbiAobmV3Q2hpbGQsIHJlZkNoaWxkKSB7CiAgICAgICAgdmFyIG5leHRTaWIgPSByZWZDaGls
ZC5uZXh0U2libGluZzsKICAgICAgICBpZiAoIW5leHRTaWIpIHsKICAgICAgICAgICAgcmVmQ2hp
bGQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChuZXdDaGlsZCk7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgcmVmQ2hpbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIG5leHRT
aWIpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0
aW9ucyB0YWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vV2hpdGVzcGFj
ZV9pbl90aGVfRE9NCiAgICAvKioKICAgICAqIERldGVybWluZSB3aGV0aGVyIGEgbm9kZSdzIHRl
eHQgY29udGVudCBpcyBlbnRpcmVseSB3aGl0ZXNwYWNlLgogICAgICoKICAgICAqIEBwYXJhbSBu
b2RlICBBIG5vZGUgaW1wbGVtZW50aW5nIHRoZSB8Q2hhcmFjdGVyRGF0YXwgaW50ZXJmYWNlIChp
LmUuLAogICAgICogICAgICAgICAgICAgIGEgfFRleHR8LCB8Q29tbWVudHwsIG9yIHxDREFUQVNl
Y3Rpb258IG5vZGUKICAgICAqIEByZXR1cm4gICAgIFRydWUgaWYgYWxsIG9mIHRoZSB0ZXh0IGNv
bnRlbnQgb2YgfG5vZHwgaXMgd2hpdGVzcGFjZSwKICAgICAqICAgICAgICAgICAgIG90aGVyd2lz
ZSBmYWxzZS4KICAgICAqLwogICAgZmx1aWQuZG9tLmlzV2hpdGVzcGFjZU5vZGUgPSBmdW5jdGlv
biAobm9kZSkgewogICAgICAgLy8gVXNlIEVDTUEtMjYyIEVkaXRpb24gMyBTdHJpbmcgYW5kIFJl
Z0V4cCBmZWF0dXJlcwogICAgICAgIHJldHVybiAhKC9bXlx0XG5cciBdLy50ZXN0KG5vZGUuZGF0
YSkpOwogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgYSBub2RlIHNob3Vs
ZCBiZSBpZ25vcmVkIGJ5IHRoZSBpdGVyYXRvciBmdW5jdGlvbnMuCiAgICAgKgogICAgICogQHBh
cmFtIG5vZCAgQW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgRE9NMSB8Tm9kZXwgaW50ZXJmYWNl
LgogICAgICogQHJldHVybiAgICAgdHJ1ZSBpZiB0aGUgbm9kZSBpczoKICAgICAqICAgICAgICAg
ICAgICAgIDEpIEEgfFRleHR8IG5vZGUgdGhhdCBpcyBhbGwgd2hpdGVzcGFjZQogICAgICogICAg
ICAgICAgICAgICAgMikgQSB8Q29tbWVudHwgbm9kZQogICAgICogICAgICAgICAgICAgYW5kIG90
aGVyd2lzZSBmYWxzZS4KICAgICAqLwogICAgZmx1aWQuZG9tLmlzSWdub3JhYmxlTm9kZSA9IGZ1
bmN0aW9uIChub2RlKSB7CiAgICAgICAgcmV0dXJuIChub2RlLm5vZGVUeXBlID09PSA4KSB8fCAv
LyBBIGNvbW1lbnQgbm9kZQogICAgICAgICAgICAoKG5vZGUubm9kZVR5cGUgPT09IDMpICYmIGZs
dWlkLmRvbS5pc1doaXRlc3BhY2VOb2RlKG5vZGUpKTsgLy8gYSB0ZXh0IG5vZGUsIGFsbCB3cwog
ICAgfTsKCn0pKGpRdWVyeSwgZmx1aWRfMV80KTsKXxAPdGV4dC9qYXZhc2NyaXB01AUGBwhoaWpr
XxBQaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRl
cmVyL2pzL0dlb21ldHJpY01hbmFnZXIuanNPEQQsYnBsaXN0MDDUAQIDBAUGYmNYJHZlcnNpb25Y
JG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8QHQcIIigpMBsxMkhJSktMTU5PUFFSU1RVVldY
W1xdVSRudWxs3QkKCwwNDg8QERITFBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFS
JDhWJGNsYXNzUiQ0UiQ5UiQwUiQ1UiQxgAcQCBAHgAiAAhAAgBqAHIAFgBuABhAB0yMQJCUmJ1dO
Uy5iYXNlW05TLnJlbGF0aXZlgACABIADXxBQaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFz
ZXMvMS40L2NvbXBvbmVudHMvcmVvcmRlcmVyL2pzL0dlb21ldHJpY01hbmFnZXIuanPSKissLVok
Y2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAu4UzLEMjTMzQQ
NT5HV05TLmtleXNaTlMub2JqZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaA
EYASgBOAFIAVgBaAF4AYgBlWU2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRU
RGF0ZV1BY2NlcHQtUmFuZ2VzXkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4y
LjE1IChDZW50T1MpXxAPdGV4dC9qYXZhc2NyaXB0XxAbIjRlMDM1NC02NjA1LTRhZjMzZDAxM2U0
MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIw
OjUwOjU0IEdNVFVieXRlc1UyNjExN1VjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxFmBV8QD3Rl
eHQvamF2YXNjcmlwdNIqK15fXxARTlNIVFRQVVJMUmVzcG9uc2WjYGEvXxARTlNIVFRQVVJMUmVz
cG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFkZV8QE1dlYlJlc291cmNlUmVz
cG9uc2WAAQAIABEAGgAjAC0AMgA3AFcAXQB4AHsAfwCCAIUAiACMAI8AlgCZAJwAnwCiAKUApwCp
AKsArQCvALEAswC1ALcAuQC7AL0AxADMANgA2gDcAN4BMQE2AUEBSgFQAVMBWQFiAWsBbQF0AXwB
hwGQAZIBlAGWAZgBmgGcAZ4BoAGpAasBrQGvAbEBswG1AbcBuQG7AcIBzwHUAeIB5wH1AgQCDwIo
AjoCWAJ4ApgCngKkAqoCrwK8Ar8CwgLUAtkC7QLxAwUDEwMlAygDPgAAAAAAAAIBAAAAAAAAAGYA
AAAAAAAAAAAAAAAAAANATxFmBS8qCkNvcHlyaWdodCAyMDA4LTIwMTAgVW5pdmVyc2l0eSBvZiBD
YW1icmlkZ2UKQ29weXJpZ2h0IDIwMDgtMjAxMCBVbml2ZXJzaXR5IG9mIFRvcm9udG8KQ29weXJp
Z2h0IDIwMTAgT0NBRCBVbml2ZXJzaXR5CkNvcHlyaWdodCAyMDEwIEx1Y2VuZG8gRGV2ZWxvcG1l
bnQgTHRkLgoKTGljZW5zZWQgdW5kZXIgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNl
IChFQ0wpLCBWZXJzaW9uIDIuMCBvciB0aGUgTmV3CkJTRCBsaWNlbnNlLiBZb3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggb25lIHRoZXNlCkxpY2Vuc2Vz
LgoKWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFQ0wgMi4wIExpY2Vuc2UgYW5kIEJTRCBM
aWNlbnNlIGF0Cmh0dHBzOi8vZ2l0aHViLmNvbS9mbHVpZC1wcm9qZWN0L2luZnVzaW9uL3Jhdy9t
YXN0ZXIvSW5mdXNpb24tTElDRU5TRS50eHQKKi8KCi8vIERlY2xhcmUgZGVwZW5kZW5jaWVzCi8q
Z2xvYmFsIHdpbmRvdywgZmx1aWRfMV80OnRydWUsIGpRdWVyeSovCgovLyBKU0xpbnQgb3B0aW9u
cyAKLypqc2xpbnQgd2hpdGU6IHRydWUsIGZ1bmNpbnZva2U6IHRydWUsIHVuZGVmOiB0cnVlLCBu
ZXdjYXA6IHRydWUsIG5vbWVuOiB0cnVlLCByZWdleHA6IHRydWUsIGJpdHdpc2U6IHRydWUsIGJy
b3dzZXI6IHRydWUsIGZvcmluOiB0cnVlLCBtYXhlcnI6IDEwMCwgaW5kZW50OiA0ICovCgp2YXIg
Zmx1aWRfMV80ID0gZmx1aWRfMV80IHx8IHt9OwoKKGZ1bmN0aW9uICgkLCBmbHVpZCkgewogICAg
CiAgICBmbHVpZC5vcmllbnRhdGlvbiA9IHsKICAgICAgICBIT1JJWk9OVEFMOiA0LAogICAgICAg
IFZFUlRJQ0FMOiAxCiAgICB9OwogICAgCiAgICBmbHVpZC5yZWN0U2lkZXMgPSB7CiAgICAgICAg
Ly8gYWdyZWUgd2l0aCBmbHVpZC5vcmllbnRhdGlvbgogICAgICAgIDQ6IFsibGVmdCIsICJyaWdo
dCJdLAogICAgICAgIDE6IFsidG9wIiwgImJvdHRvbSJdLAogICAgICAgIC8vIGFncmVlIHdpdGgg
Zmx1aWQuZGlyZWN0aW9uCiAgICAgICAgODogInRvcCIsCiAgICAgICAgMTI6ICJib3R0b20iLAog
ICAgICAgIDI6ICJsZWZ0IiwKICAgICAgICAzOiAicmlnaHQiCiAgICB9OwogICAgCiAgICAvKioK
ICAgICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uLCByZWxhdGl2ZSB0byBhIGdpdmVuIGRyb3AgdGFy
Z2V0LCB0aGF0IGEgZHJhZ2dlZCBpdGVtIHNob3VsZCBiZSBkcm9wcGVkLgogICAgICovCiAgICBm
bHVpZC5wb3NpdGlvbiA9IHsKICAgICAgICBCRUZPUkU6IC0xLAogICAgICAgIEFGVEVSOiAxLAog
ICAgICAgIElOU0lERTogMiwKICAgICAgICBSRVBMQUNFOiAzCiAgICB9OwogICAgCiAgICAvKioK
ICAgICAqIEZvciBpbmNyZW1lbnRpbmcvZGVjcmVtZW50aW5nIGEgY291bnQgb3IgaW5kZXgsIG9y
IG1vdmluZyBpbiBhIHJlY3RpbGluZWFyIGRpcmVjdGlvbi4KICAgICAqLwogICAgZmx1aWQuZGly
ZWN0aW9uID0gewogICAgICAgIE5FWFQ6IDEsCiAgICAgICAgUFJFVklPVVM6IC0xLAogICAgICAg
IFVQOiA4LAogICAgICAgIERPV046IDEyLAogICAgICAgIExFRlQ6IDIsCiAgICAgICAgUklHSFQ6
IDMKICAgIH07CiAgICAKICAgIGZsdWlkLmRpcmVjdGlvblNpZ24gPSBmdW5jdGlvbiAoZGlyZWN0
aW9uKSB7CiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gZmx1aWQuZGlyZWN0aW9uLlVQIHx8
IGRpcmVjdGlvbiA9PT0gZmx1aWQuZGlyZWN0aW9uLkxFRlQgPyAKICAgICAgICAgICAgZmx1aWQu
ZGlyZWN0aW9uLlBSRVZJT1VTIDogZmx1aWQuZGlyZWN0aW9uLk5FWFQ7CiAgICB9OwogICAgCiAg
ICBmbHVpZC5kaXJlY3Rpb25BeGlzID0gZnVuY3Rpb24gKGRpcmVjdGlvbikgewogICAgICAgIHJl
dHVybiBkaXJlY3Rpb24gPT09IGZsdWlkLmRpcmVjdGlvbi5MRUZUIHx8IGRpcmVjdGlvbiA9PT0g
Zmx1aWQuZGlyZWN0aW9uLlJJR0hUID8KICAgICAgICAgICAgMCA6IDE7IAogICAgfTsKICAgIAog
ICAgZmx1aWQuZGlyZWN0aW9uT3JpZW50YXRpb24gPSBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7CiAg
ICAgICAgcmV0dXJuIGZsdWlkLmRpcmVjdGlvbkF4aXMoZGlyZWN0aW9uKSA/IGZsdWlkLm9yaWVu
dGF0aW9uLlZFUlRJQ0FMIDogZmx1aWQub3JpZW50YXRpb24uSE9SSVpPTlRBTDsKICAgIH07CiAg
ICAKICAgIGZsdWlkLmtleWNvZGVEaXJlY3Rpb24gPSB7CiAgICAgICAgdXA6IGZsdWlkLmRpcmVj
dGlvbi5VUCwKICAgICAgICBkb3duOiBmbHVpZC5kaXJlY3Rpb24uRE9XTiwKICAgICAgICBsZWZ0
OiBmbHVpZC5kaXJlY3Rpb24uTEVGVCwKICAgICAgICByaWdodDogZmx1aWQuZGlyZWN0aW9uLlJJ
R0hUCiAgICB9OwogICAgCiAgICAvLyBtb3ZlcyBhIHNpbmdsZSBub2RlIGluIHRoZSBET00gdG8g
YSBuZXcgcG9zaXRpb24gcmVsYXRpdmUgdG8gYW5vdGhlcgogICAgZmx1aWQubW92ZURvbSA9IGZ1
bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgcG9zaXRpb24pIHsKICAgICAgICBzb3VyY2UgPSBmbHVp
ZC51bndyYXAoc291cmNlKTsKICAgICAgICB0YXJnZXQgPSBmbHVpZC51bndyYXAodGFyZ2V0KTsK
ICAgICAgICAKICAgICAgICB2YXIgc2NhbjsKICAgICAgICAvLyBmbHVpZC5sb2coIm1vdmVEb20g
c291cmNlICIgKyBmbHVpZC5kdW1wRWwoc291cmNlKSArICIgdGFyZ2V0ICIgKyBmbHVpZC5kdW1w
RWwodGFyZ2V0KSArICIgcG9zaXRpb24gIiArIHBvc2l0aW9uKTsgICAgIAogICAgICAgIGlmIChw
b3NpdGlvbiA9PT0gZmx1aWQucG9zaXRpb24uSU5TSURFKSB7CiAgICAgICAgICAgIHRhcmdldC5h
cHBlbmRDaGlsZChzb3VyY2UpOwogICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IGZsdWlk
LnBvc2l0aW9uLkJFRk9SRSkgewogICAgICAgICAgICBmb3IgKHNjYW4gPSB0YXJnZXQucHJldmlv
dXNTaWJsaW5nOzsgc2NhbiA9IHNjYW4ucHJldmlvdXNTaWJsaW5nKSB7CiAgICAgICAgICAgICAg
ICBpZiAoIXNjYW4gfHwgIWZsdWlkLmRvbS5pc0lnbm9yYWJsZU5vZGUoc2NhbikpIHsKICAgICAg
ICAgICAgICAgICAgICBpZiAoc2NhbiAhPT0gc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGZsdWlkLmRvbS5jbGVhbnNlU2NyaXB0cyhzb3VyY2UpOwogICAgICAgICAgICAgICAgICAg
ICAgICB0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc291cmNlLCB0YXJnZXQpOyAgICAK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBm
bHVpZC5wb3NpdGlvbi5BRlRFUikgewogICAgICAgICAgICBmb3IgKHNjYW4gPSB0YXJnZXQubmV4
dFNpYmxpbmc7OyBzY2FuID0gc2Nhbi5uZXh0U2libGluZykgewogICAgICAgICAgICAgICAgaWYg
KCFzY2FuIHx8ICFmbHVpZC5kb20uaXNJZ25vcmFibGVOb2RlKHNjYW4pKSB7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKHNjYW4gIT09IHNvdXJjZSkgewogICAgICAgICAgICAgICAgICAgICAgICBm
bHVpZC5kb20uY2xlYW5zZVNjcmlwdHMoc291cmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
Zmx1aWQuZG9tLmluc2VydEFmdGVyKHNvdXJjZSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmbHVpZC5mYWlsKCJVbnJlY29nbmlz
ZWQgcG9zaXRpb24gc3VwcGxpZWQgdG8gZmx1aWQubW92ZURvbTogIiArIHBvc2l0aW9uKTsKICAg
ICAgICB9CiAgICB9OwogICAgCiAgICAvLyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgog
ICAgZmx1aWQubm9ybWFsaXNlUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24sIHNhbWVzcGFu
LCB0YXJnZXRpLCBzb3VyY2VpKSB7CiAgICAgICAgLy8gY29udmVydCBhIFJFUExBQ0UgaW50byBh
IHByaW1pdGl2ZSBCRUZPUkUvQUZURVIKICAgICAgICBpZiAocG9zaXRpb24gPT09IGZsdWlkLnBv
c2l0aW9uLlJFUExBQ0UpIHsKICAgICAgICAgICAgcG9zaXRpb24gPSBzYW1lc3BhbiAmJiB0YXJn
ZXRpID49IHNvdXJjZWkgPyBmbHVpZC5wb3NpdGlvbi5BRlRFUiA6IGZsdWlkLnBvc2l0aW9uLkJF
Rk9SRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgfTsKICAgIAogICAg
Zmx1aWQucGVybXV0ZURvbSA9IGZ1bmN0aW9uIChlbGVtZW50LCB0YXJnZXQsIHBvc2l0aW9uLCBz
b3VyY2VlbGVtZW50cywgdGFyZ2V0ZWxlbWVudHMpIHsKICAgICAgICBlbGVtZW50ID0gZmx1aWQu
dW53cmFwKGVsZW1lbnQpOwogICAgICAgIHRhcmdldCA9IGZsdWlkLnVud3JhcCh0YXJnZXQpOwog
ICAgICAgIHZhciBzb3VyY2VpID0gJC5pbkFycmF5KGVsZW1lbnQsIHNvdXJjZWVsZW1lbnRzKTsK
ICAgICAgICBpZiAoc291cmNlaSA9PT0gLTEpIHsKICAgICAgICAgICAgZmx1aWQuZmFpbCgiRXJy
b3IgaW4gcGVybXV0ZURvbTogc291cmNlIGVsZW1lbnQgIiArIGZsdWlkLmR1bXBFbChlbGVtZW50
KSArIAogICAgICAgICAgICAgICAgIiBub3QgZm91bmQgaW4gc291cmNlIGxpc3QgIiArIGZsdWlk
LmR1bXBFbChzb3VyY2VlbGVtZW50cykpOwogICAgICAgIH0KICAgICAgICB2YXIgdGFyZ2V0aSA9
ICQuaW5BcnJheSh0YXJnZXQsIHRhcmdldGVsZW1lbnRzKTsKICAgICAgICBpZiAodGFyZ2V0aSA9
PT0gLTEpIHsKICAgICAgICAgICAgZmx1aWQuZmFpbCgiRXJyb3IgaW4gcGVybXV0ZURvbTogdGFy
Z2V0IGVsZW1lbnQgIiArIGZsdWlkLmR1bXBFbCh0YXJnZXQpICsgCiAgICAgICAgICAgICAgICAi
IG5vdCBmb3VuZCBpbiBzb3VyY2UgbGlzdCAiICsgZmx1aWQuZHVtcEVsKHRhcmdldGVsZW1lbnRz
KSk7CiAgICAgICAgfQogICAgICAgIHZhciBzYW1lc3BhbiA9IHNvdXJjZWVsZW1lbnRzID09PSB0
YXJnZXRlbGVtZW50czsKICAgICAgICBwb3NpdGlvbiA9IGZsdWlkLm5vcm1hbGlzZVBvc2l0aW9u
KHBvc2l0aW9uLCBzYW1lc3BhbiwgdGFyZ2V0aSwgc291cmNlaSk7CgogICAgICAgIC8vZmx1aWQu
bG9nKCJwZXJtdXRlRG9tIHNvdXJjZWkgIiArIHNvdXJjZWkgKyAiIHRhcmdldGkgIiArIHRhcmdl
dGkpOwogICAgICAgIC8vIGNhY2hlIHRoZSBvbGQgbmVpZ2hib3VyaG9vZCBvZiB0aGUgZWxlbWVu
dCBmb3IgdGhlIGZpbmFsIG1vdmUKICAgICAgICB2YXIgb2xkbiA9IHt9OwogICAgICAgIG9sZG5b
Zmx1aWQucG9zaXRpb24uQUZURVJdID0gZWxlbWVudC5uZXh0U2libGluZzsKICAgICAgICBvbGRu
W2ZsdWlkLnBvc2l0aW9uLkJFRk9SRV0gPSBlbGVtZW50LnByZXZpb3VzU2libGluZzsKICAgICAg
ICBmbHVpZC5tb3ZlRG9tKHNvdXJjZWVsZW1lbnRzW3NvdXJjZWldLCB0YXJnZXRlbGVtZW50c1t0
YXJnZXRpXSwgcG9zaXRpb24pOwogICAgICAgIAogICAgICAgIC8vIHBlcmZvcm0gdGhlIGxlZnR3
YXJkLW1vdmluZywgQUZURVIgc2hpZnQKICAgICAgICB2YXIgZnJvbnRsaW1pdCA9IHNhbWVzcGFu
ID8gdGFyZ2V0aSAtIDEgOiBzb3VyY2VlbGVtZW50cy5sZW5ndGggLSAyOwogICAgICAgIHZhciBp
OwogICAgICAgIGlmIChwb3NpdGlvbiA9PT0gZmx1aWQucG9zaXRpb24uQkVGT1JFICYmIHNhbWVz
cGFuKSB7IAogICAgICAgICAgICAvLyB3ZSBjYW5ub3QgZG8gc2tpcCBwcm9jZXNzaW5nIGlmIHRo
ZSBlbGVtZW50IHdhcyAiZnVzZWQgYWdhaW5zdCB0aGUgZ3JhaW4iIAogICAgICAgICAgICBmcm9u
dGxpbWl0LS07CiAgICAgICAgfQogICAgICAgIGlmICghc2FtZXNwYW4gfHwgdGFyZ2V0aSA+IHNv
dXJjZWkpIHsKICAgICAgICAgICAgZm9yIChpID0gZnJvbnRsaW1pdDsgaSA+IHNvdXJjZWk7IC0t
aSkgewogICAgICAgICAgICAgICAgZmx1aWQubW92ZURvbShzb3VyY2VlbGVtZW50c1tpICsgMV0s
IHNvdXJjZWVsZW1lbnRzW2ldLCBmbHVpZC5wb3NpdGlvbi5BRlRFUik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgaWYgKHNvdXJjZWkgKyAxIDwgc291cmNlZWxlbWVudHMubGVuZ3RoKSB7CiAg
ICAgICAgICAgICAgICBmbHVpZC5tb3ZlRG9tKHNvdXJjZWVsZW1lbnRzW3NvdXJjZWkgKyAxXSwg
b2xkbltmbHVpZC5wb3NpdGlvbi5BRlRFUl0sIGZsdWlkLnBvc2l0aW9uLkJFRk9SRSk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gcGVyZm9ybSB0aGUgcmlnaHR3YXJkLW1vdmlu
ZywgQkVGT1JFIHNoaWZ0CiAgICAgICAgdmFyIGJhY2tsaW1pdCA9IHNhbWVzcGFuID8gc291cmNl
aSAtIDEgOiB0YXJnZXRlbGVtZW50cy5sZW5ndGggLSAxOwogICAgICAgIGlmIChwb3NpdGlvbiA9
PT0gZmx1aWQucG9zaXRpb24uQUZURVIpIHsgCiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBkbyBz
a2lwIHByb2Nlc3NpbmcgaWYgdGhlIGVsZW1lbnQgd2FzICJmdXNlZCBhZ2FpbnN0IHRoZSBncmFp
biIgCiAgICAgICAgICAgIHRhcmdldGkrKzsKICAgICAgICB9CiAgICAgICAgaWYgKCFzYW1lc3Bh
biB8fCB0YXJnZXRpIDwgc291cmNlaSkgewogICAgICAgICAgICBmb3IgKGkgPSB0YXJnZXRpOyBp
IDwgYmFja2xpbWl0OyArK2kpIHsKICAgICAgICAgICAgICAgIGZsdWlkLm1vdmVEb20odGFyZ2V0
ZWxlbWVudHNbaV0sIHRhcmdldGVsZW1lbnRzW2kgKyAxXSwgZmx1aWQucG9zaXRpb24uQkVGT1JF
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYmFja2xpbWl0ID49IDAgJiYgYmFja2xp
bWl0IDwgdGFyZ2V0ZWxlbWVudHMubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgZmx1aWQu
bW92ZURvbSh0YXJnZXRlbGVtZW50c1tiYWNrbGltaXRdLCBvbGRuW2ZsdWlkLnBvc2l0aW9uLkJF
Rk9SRV0sIGZsdWlkLnBvc2l0aW9uLkFGVEVSKTsKICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAKICAgICAgICB9CgogICAgfTsKICAKICAgIHZhciBjdXJDc3MgPSBmdW5jdGlvbiAoYSwgbmFt
ZSkgewogICAgICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKGEsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSkgOiAKICAgICAgICAg
ICAgYS5jdXJyZW50U3R5bGVbbmFtZV07CiAgICB9OwogICAgCiAgICB2YXIgaXNBdHRhY2hlZCA9
IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5ub2RlTmFtZSkg
ewogICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gIkJPRFkiKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlID0gbm9kZS5w
YXJlbnROb2RlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgCiAg
ICB2YXIgZ2VuZXJhbEhpZGRlbiA9IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgcmV0dXJuICJoaWRk
ZW4iID09PSBhLnR5cGUgfHwgY3VyQ3NzKGEsICJkaXNwbGF5IikgPT09ICJub25lIiB8fCBjdXJD
c3MoYSwgInZpc2liaWxpdHkiKSA9PT0gImhpZGRlbiIgfHwgIWlzQXR0YWNoZWQoYSk7CiAgICB9
OwogICAgCgogICAgdmFyIGNvbXB1dGVHZW9tZXRyeSA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcmll
bnRhdGlvbiwgZGlzcG9zaXRpb24pIHsKICAgICAgICB2YXIgZWxlbSA9IHt9OwogICAgICAgIGVs
ZW0uZWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgICAgZWxlbS5vcmllbnRhdGlvbiA9IG9yaWVudGF0
aW9uOwogICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PT0gZmx1aWQucG9zaXRpb24uSU5TSURFKSB7
CiAgICAgICAgICAgIGVsZW0ucG9zaXRpb24gPSBkaXNwb3NpdGlvbjsKICAgICAgICB9CiAgICAg
ICAgaWYgKGdlbmVyYWxIaWRkZW4oZWxlbWVudCkpIHsKICAgICAgICAgICAgZWxlbS5jbGF6eiA9
ICJoaWRkZW4iOwogICAgICAgIH0KICAgICAgICB2YXIgcG9zID0gZmx1aWQuZG9tLmNvbXB1dGVB
YnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQpIHx8IFswLCAwXTsKICAgICAgICB2YXIgd2lkdGggPSBl
bGVtZW50Lm9mZnNldFdpZHRoOwogICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhl
aWdodDsKICAgICAgICBlbGVtLnJlY3QgPSB7bGVmdDogcG9zWzBdLCB0b3A6IHBvc1sxXX07CiAg
ICAgICAgZWxlbS5yZWN0LnJpZ2h0ID0gcG9zWzBdICsgd2lkdGg7CiAgICAgICAgZWxlbS5yZWN0
LmJvdHRvbSA9IHBvc1sxXSArIGhlaWdodDsKICAgICAgICByZXR1cm4gZWxlbTsKICAgIH07CiAg
ICAKICAgIC8vIEEgInN1aXRhYmxlIGxhcmdlIiB2YWx1ZSBmb3IgdGhlIHNlbnRpbmVsIGJsb2Nr
cyBhdCB0aGUgZW5kcyBvZiBzcGFucwogICAgdmFyIFNFTlRJTkVMX0RJTUVOU0lPTiA9IDEwMDAw
OwoKICAgIGZ1bmN0aW9uIGR1bXByZWN0KHJlY3QpIHsKICAgICAgICByZXR1cm4gIlJlY3QgdG9w
OiAiICsgcmVjdC50b3AgKwogICAgICAgICAgICAgICAgICIgbGVmdDogIiArIHJlY3QubGVmdCAr
IAogICAgICAgICAgICAgICAiIGJvdHRvbTogIiArIHJlY3QuYm90dG9tICsKICAgICAgICAgICAg
ICAgICIgcmlnaHQ6ICIgKyByZWN0LnJpZ2h0OwogICAgfQoKICAgIGZ1bmN0aW9uIGR1bXBlbGVt
KGNhY2hlZWxlbSkgewogICAgICAgIGlmICghY2FjaGVlbGVtIHx8ICFjYWNoZWVsZW0ucmVjdCkg
ewogICAgICAgICAgICByZXR1cm4gIm51bGwiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
IHJldHVybiBkdW1wcmVjdChjYWNoZWVsZW0ucmVjdCkgKyAiIHBvc2l0aW9uOiAiICsKICAgICAg
ICAgICAgICAgIGNhY2hlZWxlbS5wb3NpdGlvbiArCiAgICAgICAgICAgICAgICAiIGZvciAiICsK
ICAgICAgICAgICAgICAgIGZsdWlkLmR1bXBFbChjYWNoZWVsZW0uZWxlbWVudCk7CiAgICAgICAg
fQogICAgfQogICAgCiAgIAogICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAg
IGZsdWlkLmRyb3BNYW5hZ2VyID0gZnVuY3Rpb24gKCkgeyAKICAgICAgICB2YXIgdGFyZ2V0cyA9
IFtdOwogICAgICAgIHZhciBjYWNoZSA9IHt9OwogICAgICAgIHZhciB0aGF0ID0ge307ICAgICAg
ICAKICAgICAgICAKICAgICAgICB2YXIgbGFzdENsb3Nlc3Q7ICAgICAgICAgICAgICAKICAgICAg
ICB2YXIgbGFzdEdlb21ldHJ5OwogICAgICAgIHZhciBkaXNwbGFjZW1lbnRYLCBkaXNwbGFjZW1l
bnRZOwogICAgICAgIAogICAgICAgIHRoYXQudXBkYXRlR2VvbWV0cnkgPSBmdW5jdGlvbiAoZ2Vv
bWV0cmljSW5mbykgewogICAgICAgICAgICBsYXN0R2VvbWV0cnkgPSBnZW9tZXRyaWNJbmZvOwog
ICAgICAgICAgICB0YXJnZXRzID0gW107CiAgICAgICAgICAgIGNhY2hlID0ge307CiAgICAgICAg
ICAgIHZhciBtYXBwZXIgPSBnZW9tZXRyaWNJbmZvLmVsZW1lbnRNYXBwZXI7CiAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cmljSW5mby5leHRlbnRzLmxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICAgICB2YXIgdGhpc0luZm8gPSBnZW9tZXRyaWNJbmZvLmV4dGVudHNbaV07
CiAgICAgICAgICAgICAgICB2YXIgb3JpZW50YXRpb24gPSB0aGlzSW5mby5vcmllbnRhdGlvbjsK
ICAgICAgICAgICAgICAgIHZhciBzaWRlcyA9IGZsdWlkLnJlY3RTaWRlc1tvcmllbnRhdGlvbl07
CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzRWxlbWVudCA9IGZ1
bmN0aW9uIChlbGVtZW50LCBzZW50Qiwgc2VudEYsIGRpc3Bvc2l0aW9uLCBqKSB7CiAgICAgICAg
ICAgICAgICAgICAgdmFyIGNhY2hlZWxlbSA9IGNvbXB1dGVHZW9tZXRyeShlbGVtZW50LCBvcmll
bnRhdGlvbiwgZGlzcG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgIGNhY2hlZWxlbS5vd25l
ciA9IHRoaXNJbmZvOwogICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWVsZW0uY2xhenogIT09
ICJoaWRkZW4iICYmIG1hcHBlcikgewogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWVsZW0u
Y2xhenogPSBtYXBwZXIoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIGNhY2hlW2ZsdWlkLmRyb3BNYW5hZ2VyLmNhY2hlS2V5KGVsZW1lbnQpXSA9IGNh
Y2hlZWxlbTsKICAgICAgICAgICAgICAgICAgICB2YXIgYmFja0NsYXNzID0gZmx1aWQuZHJvcE1h
bmFnZXIuZ2V0UmVsYXRpdmVDbGFzcyh0aGlzSW5mby5lbGVtZW50cywgaiwgZmx1aWQucG9zaXRp
b24uQkVGT1JFLCBjYWNoZWVsZW0uY2xhenosIG1hcHBlcik7IAogICAgICAgICAgICAgICAgICAg
IHZhciBmcm9udENsYXNzID0gZmx1aWQuZHJvcE1hbmFnZXIuZ2V0UmVsYXRpdmVDbGFzcyh0aGlz
SW5mby5lbGVtZW50cywgaiwgZmx1aWQucG9zaXRpb24uQUZURVIsIGNhY2hlZWxlbS5jbGF6eiwg
bWFwcGVyKTsgCiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09PSBmbHVpZC5w
b3NpdGlvbi5JTlNJREUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c1t0YXJnZXRz
Lmxlbmd0aF0gPSBjYWNoZWVsZW07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZmx1aWQuZHJvcE1hbmFnZXIuc3BsaXRFbGVtZW50KHRhcmdldHMs
IHNpZGVzLCBjYWNoZWVsZW0sIGRpc3Bvc2l0aW9uLCBiYWNrQ2xhc3MsIGZyb250Q2xhc3MpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggc2Vu
dGluZWwgYmxvY2tzIGJ5IGNyZWF0aW5nIG5lYXItY29waWVzIG9mIHRoZSBlbmQgZWxlbWVudHMK
ICAgICAgICAgICAgICAgICAgICBpZiAoc2VudEIgJiYgZ2VvbWV0cmljSW5mby5zZW50aW5lbGl6
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBmbHVpZC5kcm9wTWFuYWdlci5zZW50aW5lbGl6
ZUVsZW1lbnQodGFyZ2V0cywgc2lkZXMsIGNhY2hlZWxlbSwgMSwgZGlzcG9zaXRpb24sIGJhY2tD
bGFzcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChzZW50
RiAmJiBnZW9tZXRyaWNJbmZvLnNlbnRpbmVsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGZsdWlkLmRyb3BNYW5hZ2VyLnNlbnRpbmVsaXplRWxlbWVudCh0YXJnZXRzLCBzaWRlcywgY2Fj
aGVlbGVtLCAwLCBkaXNwb3NpdGlvbiwgZnJvbnRDbGFzcyk7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIC8vZmx1aWQubG9nKGR1bXBlbGVtKGNhY2hlZWxlbSkpOwog
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWVsZW07CiAgICAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgYWxsSGlkZGVuID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpc0luZm8uZWxlbWVudHMubGVuZ3Ro
OyArK2opIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXNJbmZvLmVsZW1l
bnRzW2pdOwogICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZWVsZW0gPSBwcm9jZXNzRWxlbWVu
dChlbGVtZW50LCBqID09PSAwLCBqID09PSB0aGlzSW5mby5lbGVtZW50cy5sZW5ndGggLSAxLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdWlkLnBvc2l0aW9uLklOVEVSTEVBVkVELCBq
KTsKICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVlbGVtLmNsYXp6ICE9PSAiaGlkZGVuIikg
ewogICAgICAgICAgICAgICAgICAgICAgICBhbGxIaWRkZW4gPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYWxsSGlkZGVu
ICYmIHRoaXNJbmZvLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
RWxlbWVudCh0aGlzSW5mby5wYXJlbnRFbGVtZW50LCB0cnVlLCB0cnVlLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsdWlkLnBvc2l0aW9uLklOU0lERSk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0gICAKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoYXQuc3RhcnRE
cmFnID0gZnVuY3Rpb24gKGV2ZW50LCBoYW5kbGVQb3MsIGhhbmRsZVdpZHRoLCBoYW5kbGVIZWln
aHQpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZU1pZFggPSBoYW5kbGVQb3NbMF0gKyBoYW5kbGVX
aWR0aCAvIDI7CiAgICAgICAgICAgIHZhciBoYW5kbGVNaWRZID0gaGFuZGxlUG9zWzFdICsgaGFu
ZGxlSGVpZ2h0IC8gMjsKICAgICAgICAgICAgdmFyIGRYID0gaGFuZGxlTWlkWCAtIGV2ZW50LnBh
Z2VYOwogICAgICAgICAgICB2YXIgZFkgPSBoYW5kbGVNaWRZIC0gZXZlbnQucGFnZVk7CiAgICAg
ICAgICAgIHRoYXQudXBkYXRlR2VvbWV0cnkobGFzdEdlb21ldHJ5KTsKICAgICAgICAgICAgbGFz
dENsb3Nlc3QgPSBudWxsOwogICAgICAgICAgICBkaXNwbGFjZW1lbnRYID0gZFg7CiAgICAgICAg
ICAgIGRpc3BsYWNlbWVudFkgPSBkWTsKICAgICAgICAgICAgJCgiYm9keSIpLmJpbmQoIm1vdXNl
bW92ZS5mbHVpZC1kcm9wTWFuYWdlciIsIHRoYXQubW91c2VNb3ZlKTsKICAgICAgICB9OwogICAg
ICAgIAogICAgICAgIHRoYXQubGFzdFBvc2l0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICByZXR1cm4gbGFzdENsb3Nlc3Q7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGF0LmVu
ZERyYWcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoImJvZHkiKS51bmJpbmQoIm1vdXNl
bW92ZS5mbHVpZC1kcm9wTWFuYWdlciIpOwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhh
dC5tb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgIHZhciB4ID0gZXZ0LnBh
Z2VYICsgZGlzcGxhY2VtZW50WDsKICAgICAgICAgICAgdmFyIHkgPSBldnQucGFnZVkgKyBkaXNw
bGFjZW1lbnRZOwogICAgICAgICAgICAvL2ZsdWlkLmxvZygiTW91c2UgeCAiICsgeCArICIgeSAi
ICsgeSApOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGNsb3Nlc3RUYXJnZXQgPSB0aGF0
LmNsb3Nlc3RUYXJnZXQoeCwgeSwgbGFzdENsb3Nlc3QpOwogICAgICAgICAgICBpZiAoY2xvc2Vz
dFRhcmdldCAmJiBjbG9zZXN0VGFyZ2V0ICE9PSBmbHVpZC5kcm9wTWFuYWdlci5OT19DSEFOR0Up
IHsKICAgICAgICAgICAgICAgIGxhc3RDbG9zZXN0ID0gY2xvc2VzdFRhcmdldDsKICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgIHRoYXQuZHJvcENoYW5nZUZpcmVyLmZpcmUoY2xvc2VzdFRh
cmdldCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoYXQuZHJv
cENoYW5nZUZpcmVyID0gZmx1aWQuZXZlbnQuZ2V0RXZlbnRGaXJlcigpOwogICAgICAgIAogICAg
ICAgIHZhciBibGFua0hvbGRlciA9IHsKICAgICAgICAgICAgZWxlbWVudDogbnVsbAogICAgICAg
IH07CiAgICAgICAgCiAgICAgICAgdGhhdC5jbG9zZXN0VGFyZ2V0ID0gZnVuY3Rpb24gKHgsIHks
IGxhc3RDbG9zZXN0KSB7CiAgICAgICAgICAgIHZhciBtaW5kaXN0YW5jZSA9IE51bWJlci5NQVhf
VkFMVUU7CiAgICAgICAgICAgIHZhciBtaW5lbGVtID0gYmxhbmtIb2xkZXI7CiAgICAgICAgICAg
IHZhciBtaW5sb2NrZWRkaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUU7CiAgICAgICAgICAgIHZh
ciBtaW5sb2NrZWRlbGVtID0gYmxhbmtIb2xkZXI7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGFyZ2V0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgdmFyIGNhY2hlZWxl
bSA9IHRhcmdldHNbaV07CiAgICAgICAgICAgICAgICBpZiAoY2FjaGVlbGVtLmNsYXp6ID09PSAi
aGlkZGVuIikgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gZmx1aWQuZ2VvbS5taW5Qb2ludFJlY3Rh
bmdsZSh4LCB5LCBjYWNoZWVsZW0ucmVjdCk7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGVlbGVt
LmNsYXp6ID09PSAibG9ja2VkIikgewogICAgICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8
IG1pbmxvY2tlZGRpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxvY2tlZGRp
c3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxvY2tlZGVsZW0g
PSBjYWNoZWVsZW07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBtaW5kaXN0YW5jZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICBtaW5kaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAg
ICAgICAgICAgICBtaW5lbGVtID0gY2FjaGVlbGVtOwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPT09IDApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGlmICghbWluZWxlbSkgewogICAgICAgICAgICAgICAgcmV0
dXJuIG1pbmVsZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1pbmxvY2tlZGRpc3Rh
bmNlID49IG1pbmRpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICBtaW5sb2NrZWRlbGVtID0gYmxh
bmtIb2xkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9mbHVpZC5sb2coIlBSRTogbWlu
ZGlzdGFuY2UgIiArIG1pbmRpc3RhbmNlICsgIiBlbGVtZW50ICIgKyAKICAgICAgICAgICAgLy8g
ICBmbHVpZC5kdW1wRWwobWluZWxlbS5lbGVtZW50KSArICIgbWlubG9ja2VkZGlzdGFuY2UgIiAr
IG1pbmxvY2tlZGRpc3RhbmNlCiAgICAgICAgICAgIC8vICAgICsgIiBsb2NrZWQgZWxlbSAiICsg
ZHVtcGVsZW0obWlubG9ja2VkZWxlbSkpOwogICAgICAgICAgICBpZiAobGFzdENsb3Nlc3QgJiYg
bGFzdENsb3Nlc3QucG9zaXRpb24gPT09IG1pbmVsZW0ucG9zaXRpb24gJiYKICAgICAgICAgICAg
ICAgICAgICBmbHVpZC51bndyYXAobGFzdENsb3Nlc3QuZWxlbWVudCkgPT09IGZsdWlkLnVud3Jh
cChtaW5lbGVtLmVsZW1lbnQpICYmCiAgICAgICAgICAgICAgICAgICAgZmx1aWQudW53cmFwKGxh
c3RDbG9zZXN0LmxvY2tlZGVsZW0pID09PSBmbHVpZC51bndyYXAobWlubG9ja2VkZWxlbS5lbGVt
ZW50KQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZsdWlk
LmRyb3BNYW5hZ2VyLk5PX0NIQU5HRTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL2ZsdWlk
LmxvZygibWluZGlzdGFuY2UgIiArIG1pbmRpc3RhbmNlICsgIiBtaW5sb2NrZWRkaXN0YW5jZSAi
ICsgbWlubG9ja2VkZGlzdGFuY2UpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAg
ICAgcG9zaXRpb246IG1pbmVsZW0ucG9zaXRpb24sCiAgICAgICAgICAgICAgICBlbGVtZW50OiBt
aW5lbGVtLmVsZW1lbnQsCiAgICAgICAgICAgICAgICBsb2NrZWRlbGVtOiBtaW5sb2NrZWRlbGVt
LmVsZW1lbnQKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoYXQu
c2h1ZmZsZVByb2plY3RGcm9tID0gZnVuY3Rpb24gKGVsZW1lbnQsIGRpcmVjdGlvbiwgaW5jbHVk
ZUxvY2tlZCwgZGlzYWJsZVdyYXApIHsKICAgICAgICAgICAgdmFyIHRvZ28gPSB0aGF0LnByb2pl
Y3RGcm9tKGVsZW1lbnQsIGRpcmVjdGlvbiwgaW5jbHVkZUxvY2tlZCwgZGlzYWJsZVdyYXApOwog
ICAgICAgICAgICBpZiAodG9nbykgewogICAgICAgICAgICAgICAgdG9nby5wb3NpdGlvbiA9IGZs
dWlkLnBvc2l0aW9uLlJFUExBQ0U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRv
Z287CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGF0LnByb2plY3RGcm9tID0gZnVuY3Rp
b24gKGVsZW1lbnQsIGRpcmVjdGlvbiwgaW5jbHVkZUxvY2tlZCwgZGlzYWJsZVdyYXApIHsKICAg
ICAgICAgICAgdGhhdC51cGRhdGVHZW9tZXRyeShsYXN0R2VvbWV0cnkpOwogICAgICAgICAgICB2
YXIgY2FjaGVlbGVtID0gY2FjaGVbZmx1aWQuZHJvcE1hbmFnZXIuY2FjaGVLZXkoZWxlbWVudCld
OwogICAgICAgICAgICB2YXIgcHJvamVjdGVkID0gZmx1aWQuZ2VvbS5wcm9qZWN0RnJvbShjYWNo
ZWVsZW0ucmVjdCwgZGlyZWN0aW9uLCB0YXJnZXRzLCBpbmNsdWRlTG9ja2VkLCBkaXNhYmxlV3Jh
cCk7CiAgICAgICAgICAgIGlmICghcHJvamVjdGVkLmNhY2hlZWxlbSkgewogICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJldHBvcyA9IHBy
b2plY3RlZC5jYWNoZWVsZW0ucG9zaXRpb247CiAgICAgICAgICAgIHJldHVybiB7ZWxlbWVudDog
cHJvamVjdGVkLmNhY2hlZWxlbS5lbGVtZW50LCAKICAgICAgICAgICAgICAgICAgICAgcG9zaXRp
b246IHJldHBvcyA/IHJldHBvcyA6IGZsdWlkLnBvc2l0aW9uLkJFRk9SRSAKICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHRoYXQubG9naWNhbEZyb20g
PSBmdW5jdGlvbiAoZWxlbWVudCwgZGlyZWN0aW9uLCBpbmNsdWRlTG9ja2VkLCBkaXNhYmxlV3Jh
cCkgewogICAgICAgICAgICB2YXIgb3JkZXJhYmxlcyA9IHRoYXQuZ2V0T3duaW5nU3BhbihlbGVt
ZW50LCBmbHVpZC5wb3NpdGlvbi5JTlRFUkxFQVZFRCwgaW5jbHVkZUxvY2tlZCk7CiAgICAgICAg
ICAgIHJldHVybiB7ZWxlbWVudDogZmx1aWQuZHJvcE1hbmFnZXIuZ2V0UmVsYXRpdmVFbGVtZW50
KGVsZW1lbnQsIGRpcmVjdGlvbiwgb3JkZXJhYmxlcywgZGlzYWJsZVdyYXApLCAKICAgICAgICAg
ICAgICAgIHBvc2l0aW9uOiBmbHVpZC5wb3NpdGlvbi5SRVBMQUNFfTsKICAgICAgICB9OwogICAg
ICAgICAgIAogICAgICAgIHRoYXQubG9ja2VkV3JhcEZyb20gPSBmdW5jdGlvbiAoZWxlbWVudCwg
ZGlyZWN0aW9uLCBpbmNsdWRlTG9ja2VkLCBkaXNhYmxlV3JhcCkgewogICAgICAgICAgICB2YXIg
YmFzZSA9IHRoYXQubG9naWNhbEZyb20oZWxlbWVudCwgZGlyZWN0aW9uLCBpbmNsdWRlTG9ja2Vk
LCBkaXNhYmxlV3JhcCk7CiAgICAgICAgICAgIHZhciBzZWxlY3RhYmxlcyA9IHRoYXQuZ2V0T3du
aW5nU3BhbihlbGVtZW50LCBmbHVpZC5wb3NpdGlvbi5JTlRFUkxFQVZFRCwgaW5jbHVkZUxvY2tl
ZCk7CiAgICAgICAgICAgIHZhciBhbGxFbGVtZW50cyA9IGNhY2hlW2ZsdWlkLmRyb3BNYW5hZ2Vy
LmNhY2hlS2V5KGVsZW1lbnQpXS5vd25lci5lbGVtZW50czsKICAgICAgICAgICAgaWYgKGluY2x1
ZGVMb2NrZWQgfHwgc2VsZWN0YWJsZXNbMF0gPT09IGFsbEVsZW1lbnRzWzBdKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gYmFzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGlyZWN0
RWxlbWVudCA9IGZsdWlkLmRyb3BNYW5hZ2VyLmdldFJlbGF0aXZlRWxlbWVudChlbGVtZW50LCBk
aXJlY3Rpb24sIGFsbEVsZW1lbnRzLCBkaXNhYmxlV3JhcCk7CiAgICAgICAgICAgIGlmIChsYXN0
R2VvbWV0cnkuZWxlbWVudE1hcHBlcihkaXJlY3RFbGVtZW50KSA9PT0gImxvY2tlZCIpIHsKICAg
ICAgICAgICAgICAgIGJhc2UuZWxlbWVudCA9IG51bGw7CiAgICAgICAgICAgICAgICBiYXNlLmNs
YXp6ID0gImxvY2tlZCI7ICAKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYmFzZTsK
ICAgICAgICB9OyAKICAgICAgICAKICAgICAgICB0aGF0LmdldE93bmluZ1NwYW4gPSBmdW5jdGlv
biAoZWxlbWVudCwgcG9zaXRpb24sIGluY2x1ZGVMb2NrZWQpIHsKICAgICAgICAgICAgdmFyIG93
bmVyID0gY2FjaGVbZmx1aWQuZHJvcE1hbmFnZXIuY2FjaGVLZXkoZWxlbWVudCldLm93bmVyOyAK
ICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gcG9zaXRpb24gPT09IGZsdWlkLnBvc2l0aW9uLklO
U0lERSA/IFtvd25lci5wYXJlbnRFbGVtZW50XSA6IG93bmVyLmVsZW1lbnRzOwogICAgICAgICAg
ICBpZiAoIWluY2x1ZGVMb2NrZWQgJiYgbGFzdEdlb21ldHJ5LmVsZW1lbnRNYXBwZXIpIHsKICAg
ICAgICAgICAgICAgIGVsZW1lbnRzID0gJC5tYWtlQXJyYXkoZWxlbWVudHMpOwogICAgICAgICAg
ICAgICAgZmx1aWQucmVtb3ZlX2lmKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkgewogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsYXN0R2VvbWV0cnkuZWxlbWVudE1hcHBlcihlbGVtZW50
KSA9PT0gImxvY2tlZCI7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICByZXR1cm4gZWxlbWVudHM7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGF0Lmdl
b21ldHJpY01vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCwgdGFyZ2V0LCBwb3NpdGlvbikgewogICAg
ICAgICAgICB2YXIgc291cmNlRWxlbWVudHMgPSB0aGF0LmdldE93bmluZ1NwYW4oZWxlbWVudCwg
bnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgIHZhciB0YXJnZXRFbGVtZW50cyA9IHRoYXQuZ2V0T3du
aW5nU3Bhbih0YXJnZXQsIHBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgICAgZmx1aWQucGVybXV0
ZURvbShlbGVtZW50LCB0YXJnZXQsIHBvc2l0aW9uLCBzb3VyY2VFbGVtZW50cywgdGFyZ2V0RWxl
bWVudHMpOwogICAgICAgIH07ICAgICAgICAgICAgICAKICAgICAgICAKICAgICAgICByZXR1cm4g
dGhhdDsKICAgIH07ICAgIAogICAKIAogICAgZmx1aWQuZHJvcE1hbmFnZXIuTk9fQ0hBTkdFID0g
Im5vIGNoYW5nZSI7CiAgICAKICAgIGZsdWlkLmRyb3BNYW5hZ2VyLmNhY2hlS2V5ID0gZnVuY3Rp
b24gKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gZmx1aWQuYWxsb2NhdGVTaW1wbGVJZChlbGVt
ZW50KTsKICAgIH07CiAgICAKICAgIGZsdWlkLmRyb3BNYW5hZ2VyLnNlbnRpbmVsaXplRWxlbWVu
dCA9IGZ1bmN0aW9uICh0YXJnZXRzLCBzaWRlcywgY2FjaGVlbGVtLCBmYywgZGlzcG9zaXRpb24s
IGNsYXp6KSB7CiAgICAgICAgdmFyIGVsZW1Db3B5ID0gJC5leHRlbmQodHJ1ZSwge30sIGNhY2hl
ZWxlbSk7CiAgICAgICAgZWxlbUNvcHkucmVjdFtzaWRlc1tmY11dID0gZWxlbUNvcHkucmVjdFtz
aWRlc1sxIC0gZmNdXSArIChmYyA/IDEgOiAtMSk7CiAgICAgICAgZWxlbUNvcHkucmVjdFtzaWRl
c1sxIC0gZmNdXSA9IChmYyA/IC0xIDogMSkgKiBTRU5USU5FTF9ESU1FTlNJT047CiAgICAgICAg
ZWxlbUNvcHkucG9zaXRpb24gPSBkaXNwb3NpdGlvbiA9PT0gZmx1aWQucG9zaXRpb24uSU5TSURF
ID8KICAgICAgICAgICAgZGlzcG9zaXRpb24gOiAoZmMgPyBmbHVpZC5wb3NpdGlvbi5CRUZPUkUg
OiBmbHVpZC5wb3NpdGlvbi5BRlRFUik7CiAgICAgICAgZWxlbUNvcHkuY2xhenogPSBjbGF6ejsK
ICAgICAgICB0YXJnZXRzW3RhcmdldHMubGVuZ3RoXSA9IGVsZW1Db3B5OwogICAgfTsKICAgIAog
ICAgZmx1aWQuZHJvcE1hbmFnZXIuc3BsaXRFbGVtZW50ID0gZnVuY3Rpb24gKHRhcmdldHMsIHNp
ZGVzLCBjYWNoZWVsZW0sIGRpc3Bvc2l0aW9uLCBjbGF6ejEsIGNsYXp6MikgewogICAgICAgIHZh
ciBlbGVtMSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBjYWNoZWVsZW0pOwogICAgICAgIHZhciBlbGVt
MiA9ICQuZXh0ZW5kKHRydWUsIHt9LCBjYWNoZWVsZW0pOwogICAgICAgIHZhciBtaWRwb2ludCA9
IChlbGVtMS5yZWN0W3NpZGVzWzBdXSArIGVsZW0xLnJlY3Rbc2lkZXNbMV1dKSAvIDI7CiAgICAg
ICAgZWxlbTEucmVjdFtzaWRlc1sxXV0gPSBtaWRwb2ludDsgCiAgICAgICAgZWxlbTEucG9zaXRp
b24gPSBmbHVpZC5wb3NpdGlvbi5CRUZPUkU7CiAgICAgICAgCiAgICAgICAgZWxlbTIucmVjdFtz
aWRlc1swXV0gPSBtaWRwb2ludDsgCiAgICAgICAgZWxlbTIucG9zaXRpb24gPSBmbHVpZC5wb3Np
dGlvbi5BRlRFUjsKICAgICAgICAKICAgICAgICBlbGVtMS5jbGF6eiA9IGNsYXp6MTsKICAgICAg
ICBlbGVtMi5jbGF6eiA9IGNsYXp6MjsKICAgICAgICB0YXJnZXRzW3RhcmdldHMubGVuZ3RoXSA9
IGVsZW0xOwogICAgICAgIHRhcmdldHNbdGFyZ2V0cy5sZW5ndGhdID0gZWxlbTI7CiAgICB9Owog
ICAgCiAgICAvLyBFeHBhbmQgdGhpcyBjb25maWd1cmF0aW9uIHBvaW50IGlmIHdlIGV2ZXIgZ28g
YmFjayB0byBhIGZ1bGwgInBlcm1pc3Npb25zIiBtb2RlbAogICAgZmx1aWQuZHJvcE1hbmFnZXIu
Z2V0UmVsYXRpdmVDbGFzcyA9IGZ1bmN0aW9uICh0aGlzRWxlbWVudHMsIGluZGV4LCByZWxhdGl2
ZSwgdGhpc2NsYXp6LCBtYXBwZXIpIHsKICAgICAgICBpbmRleCArPSByZWxhdGl2ZTsKICAgICAg
ICBpZiAoaW5kZXggPCAwICYmIHRoaXNjbGF6eiA9PT0gImxvY2tlZCIpIHsKICAgICAgICAgICAg
cmV0dXJuICJsb2NrZWQiOwogICAgICAgIH0KICAgICAgICBpZiAoaW5kZXggPj0gdGhpc0VsZW1l
bnRzLmxlbmd0aCB8fCBtYXBwZXIgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVsYXRpdmUgPSB0aGlzRWxlbWVudHNbaW5k
ZXhdOwogICAgICAgICAgICByZXR1cm4gbWFwcGVyKHJlbGF0aXZlKSA9PT0gImxvY2tlZCIgJiYg
dGhpc2NsYXp6ID09PSAibG9ja2VkIiA/ICJsb2NrZWQiIDogbnVsbDsKICAgICAgICB9CiAgICB9
OwogICAgCiAgICBmbHVpZC5kcm9wTWFuYWdlci5nZXRSZWxhdGl2ZUVsZW1lbnQgPSBmdW5jdGlv
biAoZWxlbWVudCwgZGlyZWN0aW9uLCBlbGVtZW50cywgZGlzYWJsZVdyYXApIHsKICAgICAgICB2
YXIgZm9sZGVkID0gZmx1aWQuZGlyZWN0aW9uU2lnbihkaXJlY3Rpb24pOwogICAgICAgIAogICAg
ICAgIHZhciBpbmRleCA9ICQoZWxlbWVudHMpLmluZGV4KGVsZW1lbnQpICsgZm9sZGVkOwogICAg
ICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgICAgaW5kZXggKz0gZWxlbWVudHMubGVuZ3Ro
OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBkaXNhYmxlIHdyYXAKICAgICAgICBpZiAo
ZGlzYWJsZVdyYXApIHsgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChpbmRleCA9
PT0gZWxlbWVudHMubGVuZ3RoIHx8IGluZGV4ID09PSAoZWxlbWVudHMubGVuZ3RoICsgZm9sZGVk
KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgICAKICAgICAgICBpbmRleCAlPSBlbGVtZW50cy5sZW5ndGg7CiAgICAgICAg
cmV0dXJuIGVsZW1lbnRzW2luZGV4XTsgICAgICAgICAgICAgIAogICAgfTsKICAgIAogICAgZmx1
aWQuZ2VvbSA9IGZsdWlkLmdlb20gfHwge307CiAgICAKICAgIC8vIFRoZXNlIGRpc3RhbmNlIGFs
Z29yaXRobXMgaGF2ZSBiZWVuIHRha2VuIGZyb20KICAgIC8vIGh0dHA6Ly93d3cuY3MubWNnaWxs
LmNhL35jczY0NC9Hb2RmcmllZC8yMDA1L0ZhbGwvZnphbWFsL2NvbmNlcHRzLmh0bQogICAgCiAg
ICAvKiogUmV0dXJucyB0aGUgbWluaW11bSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBwb2lu
dCBhbmQgYSByZWN0YW5nbGUgKiovCiAgICBmbHVpZC5nZW9tLm1pblBvaW50UmVjdGFuZ2xlID0g
ZnVuY3Rpb24gKHgsIHksIHJlY3RhbmdsZSkgewogICAgICAgIHZhciBkeCA9IHggPCByZWN0YW5n
bGUubGVmdCA/IChyZWN0YW5nbGUubGVmdCAtIHgpIDogCiAgICAgICAgICAgICAgICAgICh4ID4g
cmVjdGFuZ2xlLnJpZ2h0ID8gKHggLSByZWN0YW5nbGUucmlnaHQpIDogMCk7CiAgICAgICAgdmFy
IGR5ID0geSA8IHJlY3RhbmdsZS50b3AgPyAocmVjdGFuZ2xlLnRvcCAtIHkpIDogCiAgICAgICAg
ICAgICAgICAgICh5ID4gcmVjdGFuZ2xlLmJvdHRvbSA/ICh5IC0gcmVjdGFuZ2xlLmJvdHRvbSkg
OiAwKTsKICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7CiAgICB9OwogICAgCiAgICAv
KiogUmV0dXJucyB0aGUgbWluaW11bSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gdHdvIHJlY3Rh
bmdsZXMgKiovCiAgICBmbHVpZC5nZW9tLm1pblJlY3RSZWN0ID0gZnVuY3Rpb24gKHJlY3QxLCBy
ZWN0MikgewogICAgICAgIHZhciBkeCA9IHJlY3QxLnJpZ2h0IDwgcmVjdDIubGVmdCA/IHJlY3Qy
LmxlZnQgLSByZWN0MS5yaWdodCA6IAogICAgICAgICAgICAgICAgIHJlY3QyLnJpZ2h0IDwgcmVj
dDEubGVmdCA/IHJlY3QxLmxlZnQgLSByZWN0Mi5yaWdodCA6IDA7CiAgICAgICAgdmFyIGR5ID0g
cmVjdDEuYm90dG9tIDwgcmVjdDIudG9wID8gcmVjdDIudG9wIC0gcmVjdDEuYm90dG9tIDogCiAg
ICAgICAgICAgICAgICAgcmVjdDIuYm90dG9tIDwgcmVjdDEudG9wID8gcmVjdDEudG9wIC0gcmVj
dDIuYm90dG9tIDogMDsKICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7CiAgICB9Owog
ICAgCiAgICB2YXIgbWFrZVBlbkNvbGxlY3QgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJu
IHsKICAgICAgICAgICAgbWluZGlzdDogTnVtYmVyLk1BWF9WQUxVRSwKICAgICAgICAgICAgbWlu
cmRpc3Q6IE51bWJlci5NQVhfVkFMVUUKICAgICAgICB9OwogICAgfTsKCiAgICAvKiogRGV0ZXJt
aW5lIHRoZSBvbmUgYW1vbmdzdCBhIHNldCBvZiByZWN0YW5nbGUgdGFyZ2V0cyB3aGljaCBpcyB0
aGUgImJlc3QgZml0IgogICAgICogZm9yIGFuIGF4aWFsIG1vdGlvbiBmcm9tIGEgImJhc2UgcmVj
dGFuZ2xlIiAoY29tbW9ubHkgYXJpc2luZyBmcm9tIHRoZSBjYXNlCiAgICAgKiBvZiBjdXJzb3Ig
a2V5IG5hdmlnYXRpb24pLgogICAgICogQHBhcmFtIHtSZWN0YW5nbGV9IGJhc2VyZWN0IFRoZSBi
YXNlIHJlY3RhbmdsIGZyb20gd2hpY2ggdGhlIG1vdGlvbiBpcyB0byBiZSByZWZlcnJlZAogICAg
ICogQHBhcmFtIHtmbHVpZC5kaXJlY3Rpb259IGRpcmVjdGlvbiAgVGhlIGRpcmVjdGlvbiBvZiBt
b3Rpb24KICAgICAqIEBwYXJhbSB7QXJyYXkgb2YgUmVjdGFuZ2xlIGhvbGRlcnN9IHRhcmdldHMg
QW4gYXJyYXkgb2Ygb2JqZWN0cyAiY2FjaGUgZWxlbWVudHMiIAogICAgICogZm9yIHdoaWNoIHRo
ZSBtZW1iZXIgPGNvZGU+cmVjdDwvY29kZT4gaXMgdGhlIGhvbGRlciBvZiB0aGUgcmVjdGFuZ2xl
IHRvIGJlIHRlc3RlZC4KICAgICAqIEBwYXJhbSBkaXNhYmxlV3JhcCB3aGljaCBpcyB1c2VkIHRv
IGVuYWJsZSBvciBkaXNhYmxlIHdyYXBwaW5nIG9mIGVsZW1lbnRzCiAgICAgKiBAcmV0dXJuIFRo
ZSBjYWNoZSBlbGVtZW50IHdoaWNoIGlzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvciB0aGUgcmVx
dWVzdGVkIG1vdGlvbi4KICAgICAqLwogICAgZmx1aWQuZ2VvbS5wcm9qZWN0RnJvbSA9IGZ1bmN0
aW9uIChiYXNlcmVjdCwgZGlyZWN0aW9uLCB0YXJnZXRzLCBmb3JTZWxlY3Rpb24sIGRpc2FibGVX
cmFwKSB7CiAgICAgICAgdmFyIGF4aXMgPSBmbHVpZC5kaXJlY3Rpb25BeGlzKGRpcmVjdGlvbik7
CiAgICAgICAgdmFyIGZyb250U2lkZSA9IGZsdWlkLnJlY3RTaWRlc1tkaXJlY3Rpb25dOwogICAg
ICAgIHZhciBiYWNrU2lkZSA9IGZsdWlkLnJlY3RTaWRlc1theGlzICogMTUgKyA1IC0gZGlyZWN0
aW9uXTsKICAgICAgICB2YXIgZGlyU2lnbiA9IGZsdWlkLmRpcmVjdGlvblNpZ24oZGlyZWN0aW9u
KTsKICAgICAgICAKICAgICAgICB2YXIgcGVucmVjdCA9IHtsZWZ0OiAoNyAqIGJhc2VyZWN0Lmxl
ZnQgKyAxICogYmFzZXJlY3QucmlnaHQpIC8gOCwKICAgICAgICAgICAgICAgICAgICAgICByaWdo
dDogKDUgKiBiYXNlcmVjdC5sZWZ0ICsgMyAqIGJhc2VyZWN0LnJpZ2h0KSAvIDgsCiAgICAgICAg
ICAgICAgICAgICAgICAgdG9wOiAoNyAqIGJhc2VyZWN0LnRvcCArIDEgKiBiYXNlcmVjdC5ib3R0
b20pIC8gOCwKICAgICAgICAgICAgICAgICAgICAgICBib3R0b206ICg1ICogYmFzZXJlY3QudG9w
ICsgMyAqIGJhc2VyZWN0LmJvdHRvbSkgLyA4fTsKICAgICAgICAgCiAgICAgICAgcGVucmVjdFtm
cm9udFNpZGVdID0gZGlyU2lnbiAqIFNFTlRJTkVMX0RJTUVOU0lPTjsKICAgICAgICBwZW5yZWN0
W2JhY2tTaWRlXSA9IC1wZW5yZWN0W2Zyb250U2lkZV07CiAgICAgICAgCiAgICAgICAgZnVuY3Rp
b24gYWNjUGVuKGNvbGxlY3QsIGNhY2hlZWxlbSwgYmFja1NpZ24pIHsKICAgICAgICAgICAgdmFy
IHRoaXNyZWN0ID0gY2FjaGVlbGVtLnJlY3Q7CiAgICAgICAgICAgIHZhciBwZGlzdCA9IGZsdWlk
Lmdlb20ubWluUmVjdFJlY3QocGVucmVjdCwgdGhpc3JlY3QpOwogICAgICAgICAgICB2YXIgcmRp
c3QgPSAtZGlyU2lnbiAqIGJhY2tTaWduICogKGJhc2VyZWN0W2JhY2tTaWduID09PSAxID8gZnJv
bnRTaWRlIDogYmFja1NpZGVdIC0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXNyZWN0W2JhY2tTaWduID09PSAxID8gYmFja1NpZGUgOiBmcm9udFNp
ZGVdKTsKICAgICAgICAgICAgLy8gZmx1aWQubG9nKCJwZGlzdDogIiArIHBkaXN0ICsgIiByZGlz
dDogIiArIHJkaXN0KTsKICAgICAgICAgICAgLy8gdGhlIG9kZGl0eSBpbiB0aGUgcmRpc3QgY29t
cGFyaXNvbiBpcyBpbnRlbmRlZCB0byBleHByZXNzICJoYWxmLW9wZW4iLW5lc3Mgb2YgcmVjdGFu
Z2xlcwogICAgICAgICAgICAvLyAoYmFja1NpZ24gPT09IDEgPyAwIDogMSkgLSB0aGlzIGlzIG5v
dyBnb25lIC0gbXVzdCBiZSBwb3NzaWJsZSB0byBtb3ZlIHRvIHBlcnBlbmRpY3VsYXJseSBhYnV0
dGluZyByZWdpb25zCiAgICAgICAgICAgIGlmIChwZGlzdCA8PSBjb2xsZWN0Lm1pbmRpc3QgJiYg
cmRpc3QgPj0gMCkgewogICAgICAgICAgICAgICAgaWYgKHBkaXN0ID09PSBjb2xsZWN0Lm1pbmRp
c3QgJiYgcmRpc3QgKiBiYWNrU2lnbiA+IGNvbGxlY3QubWlucmRpc3QpIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb2xsZWN0
Lm1pbnJkaXN0ID0gcmRpc3QgKiBiYWNrU2lnbjsKICAgICAgICAgICAgICAgIGNvbGxlY3QubWlu
ZGlzdCA9IHBkaXN0OwogICAgICAgICAgICAgICAgY29sbGVjdC5taW5lbGVtID0gY2FjaGVlbGVt
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBjb2xsZWN0ID0gbWFrZVBlbkNv
bGxlY3QoKTsKICAgICAgICB2YXIgYmFja2NvbGxlY3QgPSBtYWtlUGVuQ29sbGVjdCgpOwogICAg
ICAgIHZhciBsb2NrZWRjb2xsZWN0ID0gbWFrZVBlbkNvbGxlY3QoKTsKCiAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHZhciBlbGVt
ID0gdGFyZ2V0c1tpXTsKICAgICAgICAgICAgdmFyIGlzUHVyZSA9IGVsZW0ub3duZXIgJiYgZWxl
bS5lbGVtZW50ID09PSBlbGVtLm93bmVyLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChl
bGVtLmNsYXp6ID09PSAiaGlkZGVuIiB8fCAoZm9yU2VsZWN0aW9uICYmIGlzUHVyZSkpIHsKICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFmb3JTZWxlY3Rp
b24gJiYgZWxlbS5jbGF6eiA9PT0gImxvY2tlZCIpIHsKICAgICAgICAgICAgICAgIGFjY1Blbihs
b2NrZWRjb2xsZWN0LCBlbGVtLCAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgIGFjY1Blbihjb2xsZWN0LCBlbGVtLCAxKTsKICAgICAgICAgICAgICAgIGFjY1BlbihiYWNr
Y29sbGVjdCwgZWxlbSwgLTEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vZmx1aWQubG9n
KCJFbGVtZW50ICIgKyBpICsgIiAiICsgZHVtcGVsZW0oZWxlbSkgKyAiIG1pbmRpc3QgIiArIGNv
bGxlY3QubWluZGlzdCk7CiAgICAgICAgfQogICAgICAgIHZhciB3cmFwID0gIWNvbGxlY3QubWlu
ZWxlbSB8fCBiYWNrY29sbGVjdC5taW5kaXN0IDwgY29sbGVjdC5taW5kaXN0OwogICAgICAgIAog
ICAgICAgIC8vIGRpc2FibGUgd3JhcAogICAgICAgIHdyYXAgPSB3cmFwICYmICFkaXNhYmxlV3Jh
cDsgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICB2YXIgbWluY29sbGVjdCA9IHdyYXAg
PyBiYWNrY29sbGVjdCA6IGNvbGxlY3Q7ICAgICAgICAKICAgICAgICAKICAgICAgICB2YXIgdG9n
byA9IHsKICAgICAgICAgICAgd3JhcHBlZDogd3JhcCwKICAgICAgICAgICAgY2FjaGVlbGVtOiBt
aW5jb2xsZWN0Lm1pbmVsZW0KICAgICAgICB9OwogICAgICAgIGlmIChsb2NrZWRjb2xsZWN0Lm1p
bmRpc3QgPCBtaW5jb2xsZWN0Lm1pbmRpc3QpIHsKICAgICAgICAgICAgdG9nby5sb2NrZWRlbGVt
ID0gbG9ja2VkY29sbGVjdC5taW5lbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9nbzsK
ICAgIH07Cn0pKGpRdWVyeSwgZmx1aWRfMV80KTsKXxAPdGV4dC9qYXZhc2NyaXB01AUGBwhtbm9w
XxBJaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRl
cmVyL2pzL1Jlb3JkZXJlci5qc08RBCVicGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lvblgkb2JqZWN0
c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hbXF1VJG51
bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xh
c3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYnV05TLmJhc2Vb
TlMucmVsYXRpdmWAAIAEgANfEElodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQv
Y29tcG9uZW50cy9yZW9yZGVyZXIvanMvUmVvcmRlcmVyLmpz0iorLC1aJGNsYXNzbmFtZVgkY2xh
c3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALwcNDxDI0zM0EDU+R1dOUy5rZXlzWk5T
Lm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9AQUJDREVGgBGAEoATgBSAFYAWgBeA
GIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJh
bmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKV8Q
D3RleHQvamF2YXNjcmlwdF8QGyI0ZTAzNTgtODgyOC00YWYzM2QwMTNlNDAwIl8QHVRodSwgMTMg
T2N0IDIwMTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAyMDo1MDo1NSBHTVRVYnl0
ZXNVMzQ4NTZVY2xvc2XSKitZWlxOU0RpY3Rpb25hcnmiWS8RiChfEA90ZXh0L2phdmFzY3JpcHTS
KiteX18QEU5TSFRUUFVSTFJlc3BvbnNlo2BhL18QEU5TSFRUUFVSTFJlc3BvbnNlXU5TVVJMUmVz
cG9uc2VfEA9OU0tleWVkQXJjaGl2ZXLRZGVfEBNXZWJSZXNvdXJjZVJlc3BvbnNlgAEACAARABoA
IwAtADIANwBXAF0AeAB7AH8AggCFAIgAjACPAJYAmQCcAJ8AogClAKcAqQCrAK0ArwCxALMAtQC3
ALkAuwC9AMQAzADYANoA3ADeASoBLwE6AUMBSQFMAVIBWwFkAWYBbQF1AYABiQGLAY0BjwGRAZMB
lQGXAZkBogGkAaYBqAGqAawBrgGwAbIBtAG7AcgBzQHbAeAB7gH9AggCIQIzAlECcQKRApcCnQKj
AqgCtQK4ArsCzQLSAuYC6gL+AwwDHgMhAzcAAAAAAAACAQAAAAAAAABmAAAAAAAAAAAAAAAAAAAD
OU8RiCgvKgpDb3B5cmlnaHQgMjAwNy0yMDA5IFVuaXZlcnNpdHkgb2YgVG9yb250bwpDb3B5cmln
aHQgMjAwNy0yMDEwIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCkNvcHlyaWdodCAyMDEwLTIwMTEg
T0NBRCBVbml2ZXJzaXR5CkNvcHlyaWdodCAyMDEwLTIwMTEgTHVjZW5kbyBEZXZlbG9wbWVudCBM
dGQuCgpMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVD
TCksIFZlcnNpb24gMi4wIG9yIHRoZSBOZXcKQlNEIGxpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVDTCAyLjAgTGljZW5zZSBhbmQgQlNEIExpY2Vu
c2UgYXQKaHR0cHM6Ly9naXRodWIuY29tL2ZsdWlkLXByb2plY3QvaW5mdXNpb24vcmF3L21hc3Rl
ci9JbmZ1c2lvbi1MSUNFTlNFLnR4dAoqLwoKLy8gRGVjbGFyZSBkZXBlbmRlbmNpZXMKLypnbG9i
YWwgZmx1aWRfMV80OnRydWUsIGpRdWVyeSovCgovLyBKU0xpbnQgb3B0aW9ucyAKLypqc2xpbnQg
d2hpdGU6IHRydWUsIGZ1bmNpbnZva2U6IHRydWUsIHVuZGVmOiB0cnVlLCBuZXdjYXA6IHRydWUs
IG5vbWVuOiB0cnVlLCByZWdleHA6IHRydWUsIGJpdHdpc2U6IHRydWUsIGJyb3dzZXI6IHRydWUs
IGZvcmluOiB0cnVlLCBtYXhlcnI6IDEwMCwgaW5kZW50OiA0ICovCgp2YXIgZmx1aWRfMV80ID0g
Zmx1aWRfMV80IHx8IHt9OwoKKGZ1bmN0aW9uICgkLCBmbHVpZCkgewogICAgCiAgICB2YXIgZGVm
YXVsdEF2YXRhckNyZWF0b3IgPSBmdW5jdGlvbiAoaXRlbSwgY3NzQ2xhc3MsIGRyb3BXYXJuaW5n
KSB7CiAgICAgICAgZmx1aWQuZG9tLmNsZWFuc2VTY3JpcHRzKGZsdWlkLnVud3JhcChpdGVtKSk7
CiAgICAgICAgdmFyIGF2YXRhciA9ICQoaXRlbSkuY2xvbmUoKTsKICAgICAgICAKICAgICAgICBm
bHVpZC5kb20uaXRlcmF0ZURvbShhdmF0YXIuZ2V0KDApLCBmdW5jdGlvbiAobm9kZSkgewogICAg
ICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsKICAgICAgICAgICAgaWYgKG5vZGUu
dGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiKSB7CiAgICAgICAgICAgICAgICBub2Rl
LnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0pOwogICAgICAgIAogICAgICAgIGF2YXRhci5yZW1vdmVQcm9wKCJpZCIpOwogICAgICAg
IGF2YXRhci5yZW1vdmVDbGFzcygidWktZHJvcHBhYmxlIik7CiAgICAgICAgYXZhdGFyLmFkZENs
YXNzKGNzc0NsYXNzKTsKICAgICAgICAKICAgICAgICBpZiAoZHJvcFdhcm5pbmcpIHsKICAgICAg
ICAgICAgLy8gV2lsbCBhICdkaXYnIGFsd2F5cyBiZSB2YWxpZCBpbiB0aGlzIHBvc2l0aW9uPwog
ICAgICAgICAgICB2YXIgYXZhdGFyQ29udGFpbmVyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKSk7CiAgICAgICAgICAgIGF2YXRhckNvbnRhaW5lci5hcHBlbmQoYXZhdGFyKTsKICAg
ICAgICAgICAgYXZhdGFyQ29udGFpbmVyLmFwcGVuZChkcm9wV2FybmluZyk7CiAgICAgICAgICAg
IGF2YXRhciA9IGF2YXRhckNvbnRhaW5lcjsKICAgICAgICB9CiAgICAgICAgJCgiYm9keSIpLmFw
cGVuZChhdmF0YXIpOwogICAgICAgIGlmICghJC5icm93c2VyLnNhZmFyaSkgewogICAgICAgICAg
ICAvLyBGTFVJRC0xNTk3OiBTYWZhcmkgYXBwZWFycyBpbmNhcGFibGUgb2YgY29ycmVjdGx5IGRl
dGVybWluaW5nIHRoZSBkaW1lbnNpb25zIG9mIGVsZW1lbnRzCiAgICAgICAgICAgIGF2YXRhci5j
c3MoImRpc3BsYXkiLCAiYmxvY2siKS53aWR0aChpdGVtLm9mZnNldFdpZHRoKS5oZWlnaHQoaXRl
bS5vZmZzZXRIZWlnaHQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJC5icm93c2Vy
Lm9wZXJhKSB7IC8vIEZMVUlELTE0OTAuIFdpdGhvdXQgdGhpcyBkZXRlY3QsIGN1ckNTUyBleHBs
b2RlcyBvbiB0aGUgYXZhdGFyIG9uIEZpcmVmb3guCiAgICAgICAgICAgIGF2YXRhci5oaWRlKCk7
CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdmF0YXI7CiAgICB9OwogICAgCiAgICBmdW5jdGlv
biBiaW5kSGFuZGxlcnNUb0NvbnRhaW5lcihjb250YWluZXIsIGtleURvd25IYW5kbGVyLCBrZXlV
cEhhbmRsZXIsIG1vdXNlTW92ZUhhbmRsZXIpIHsKICAgICAgICB2YXIgYWN0dWFsS2V5RG93biA9
IGtleURvd25IYW5kbGVyOwogICAgICAgIHZhciBhZHZhbmNlZFByZXZlbnRpb24gPSBmYWxzZTsK
CiAgICAgICAgLy8gRkxVSUQtMTU5OCBhbmQgb3RoZXJzOiBPcGVyYSB3aWxsIHJlZnVzZSB0byBo
b25vdXIgYSAicHJldmVudERlZmF1bHQiIG9uIGEga2V5ZG93bi4KICAgICAgICAvLyBodHRwOi8v
Zm9ydW1zLmRldnNoZWQuY29tL2phdmFzY3JpcHQtZGV2ZWxvcG1lbnQtMTE1L29ua2V5ZG93bi1w
cmV2ZW50ZGVmYXVsdC1vcGVyYS00ODUzNzEuaHRtbAogICAgICAgIGlmICgkLmJyb3dzZXIub3Bl
cmEpIHsKICAgICAgICAgICAgY29udGFpbmVyLmtleXByZXNzKGZ1bmN0aW9uIChldnQpIHsKICAg
ICAgICAgICAgICAgIGlmIChhZHZhbmNlZFByZXZlbnRpb24pIHsKICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlZFByZXZlbnRpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBldnQucHJl
dmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhY3R1YWxLZXlEb3duID0gZnVu
Y3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgdmFyIG9sZHJldCA9IGtleURvd25IYW5kbGVy
KGV2dCk7CiAgICAgICAgICAgICAgICBpZiAob2xkcmV0ID09PSBmYWxzZSkgewogICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2VkUHJldmVudGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5rZXlkb3duKGFjdHVhbEtl
eURvd24pOwogICAgICAgIGNvbnRhaW5lci5rZXl1cChrZXlVcEhhbmRsZXIpOwogICAgfQogICAg
CiAgICBmdW5jdGlvbiBhZGRSb2xlc1RvQ29udGFpbmVyKHRoYXQpIHsKICAgICAgICB0aGF0LmNv
bnRhaW5lci5hdHRyKCJyb2xlIiwgdGhhdC5vcHRpb25zLmNvbnRhaW5lclJvbGUuY29udGFpbmVy
KTsKICAgICAgICB0aGF0LmNvbnRhaW5lci5hdHRyKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsICJm
YWxzZSIpOwogICAgICAgIHRoYXQuY29udGFpbmVyLmF0dHIoImFyaWEtcmVhZG9ubHkiLCAiZmFs
c2UiKTsKICAgICAgICB0aGF0LmNvbnRhaW5lci5hdHRyKCJhcmlhLWRpc2FibGVkIiwgImZhbHNl
Iik7CiAgICAgICAgLy8gRkxVSUQtMzcwNzogV2UgcmVxdWlyZSB0byBoYXZlIEJPVEggYXBwbGlj
YXRpb24gcm9sZSBhcyB3ZWxsIGFzIG91ciBuYW1lZCByb2xlCiAgICAgICAgLy8gVGhpcyBob3dl
dmVyIGJyZWFrcyB0aGUgY29tcG9uZW50IGNvbXBsZXRlbHkgdW5kZXIgTlZEQSBhbmQgY2F1c2Vz
IGl0IHRvIHBlcnBldHVhbGx5IGRyb3AgYmFjayBpbnRvICJicm93c2UgbW9kZSIKICAgICAgICAv
L3RoYXQuY29udGFpbmVyLndyYXAoIjxkaXYgcm9sZT1cImFwcGxpY2F0aW9uXCI+PC9kaXY+Iik7
CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGNyZWF0ZUF2YXRhcklkKHBhcmVudElkKSB7CiAgICAg
ICAgLy8gR2VuZXJhdGluZyB0aGUgYXZhdGFyJ3MgaWQgdG8gYmUgY29udGFpbmVySWRfYXZhdGFy
CiAgICAgICAgLy8gVGhpcyBpcyBzYWZlIHNpbmNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgYXZh
dGFyIGF0IGEgdGltZQogICAgICAgIHJldHVybiBwYXJlbnRJZCArICJfYXZhdGFyIjsKICAgIH0K
ICAgIAogICAgdmFyIGFkYXB0S2V5c2V0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAg
aWYgKG9wdGlvbnMua2V5c2V0cyAmJiAhKG9wdGlvbnMua2V5c2V0cyBpbnN0YW5jZW9mIEFycmF5
KSkgewogICAgICAgICAgICBvcHRpb25zLmtleXNldHMgPSBbb3B0aW9ucy5rZXlzZXRzXTsgICAg
CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBAcGFyYW0gY29udGFpbmVyIC0g
QSBqUXVlcnlhYmxlIGRlc2lnbmF0b3IgZm9yIHRoZSByb290IG5vZGUgb2YgdGhlIHJlb3JkZXJl
ciAoYSBzZWxlY3RvciwgYSBET00gbm9kZSwgb3IgYSBqUXVlcnkgaW5zdGFuY2UpCiAgICAgKiBA
cGFyYW0gb3B0aW9ucyAtIGFuIG9iamVjdCBjb250YWluaW5nIGFueSBvZiB0aGUgYXZhaWxhYmxl
IG9wdGlvbnM6CiAgICAgKiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclJvbGUgLSBpbmRpY2F0
ZXMgdGhlIHJvbGUsIG9yIGdlbmVyYWwgdXNlLCBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgUmVv
cmRlcmVyCiAgICAgKiAgICAgICAgICAgICAgICAgIGtleXNldHMgLSBhbiBvYmplY3QgY29udGFp
bmluZyBzZXRzIG9mIGtleWNvZGVzIHRvIHVzZSBmb3IgZGlyZWN0aW9uYWwgbmF2aWdhdGlvbi4g
TXVzdCBjb250YWluOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXIg
LSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4sIGluZGljYXRpbmcgd2hldGhlciBv
ciBub3QgdGhlIHJlcXVpcmVkIG1vZGlmaWVyKHMpIGFyZSBhY3RpdmF0ZWQKICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3duCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodAogICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdAogICAgICogICAgICAgICAgICAgICAgICBzdHls
ZXMgLSBhbiBvYmplY3QgY29udGFpbmluZyBjbGFzcyBuYW1lcyBmb3Igc3R5bGluZyB0aGUgUmVv
cmRlcmVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3R5
bGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkCiAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZwogICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXIKICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRyb3BNYXJrZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1vdXNlRHJhZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhdGFyCiAgICAgKiAgICAgICAgICAgICAgICAgIGF2YXRhckNyZWF0b3IgLSBhIGZ1bmN0
aW9uIHRoYXQgcmV0dXJucyBhIHZhbGlkIERPTSBub2RlIHRvIGJlIHVzZWQgYXMgdGhlIGRyYWdn
aW5nIGF2YXRhcgogICAgICovCiAgICBmbHVpZC5yZW9yZGVyZXIgPSBmdW5jdGlvbiAoY29udGFp
bmVyLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKCFjb250YWluZXIpIHsKICAgICAgICAgICAgZmx1
aWQuZmFpbCgiUmVvcmRlcmVyIGluaXRpYWxpc2VkIHdpdGggbm8gY29udGFpbmVyIik7CiAgICAg
ICAgfQogICAgICAgIHZhciB0aGF0UmVvcmRlcmVyID0gZmx1aWQuaW5pdFZpZXcoImZsdWlkLnJl
b3JkZXJlciIsIGNvbnRhaW5lciwgb3B0aW9ucyk7CiAgICAgICAgb3B0aW9ucyA9IHRoYXRSZW9y
ZGVyZXIub3B0aW9uczsKICAgICAgICAgICAgICAgIAogICAgICAgIHZhciBkcm9wTWFuYWdlciA9
IGZsdWlkLmRyb3BNYW5hZ2VyKCk7ICAgCiAgICAgICAgICAgICAgICAKICAgICAgICB0aGF0UmVv
cmRlcmVyLmxheW91dEhhbmRsZXIgPSBmbHVpZC5pbml0U3ViY29tcG9uZW50KHRoYXRSZW9yZGVy
ZXIsCiAgICAgICAgICAgICJsYXlvdXRIYW5kbGVyIiwgW3RoYXRSZW9yZGVyZXIuY29udGFpbmVy
LCBvcHRpb25zLCBkcm9wTWFuYWdlciwgdGhhdFJlb3JkZXJlci5kb21dKTsKICAgICAgICAKICAg
ICAgICB0aGF0UmVvcmRlcmVyLmFjdGl2ZUl0ZW0gPSB1bmRlZmluZWQ7CgogICAgICAgIGFkYXB0
S2V5c2V0cyhvcHRpb25zKTsKIAogICAgICAgIHZhciBrYkRyb3BXYXJuaW5nID0gdGhhdFJlb3Jk
ZXJlci5sb2NhdGUoImRyb3BXYXJuaW5nIik7CiAgICAgICAgdmFyIG1vdXNlRHJvcFdhcm5pbmc7
CiAgICAgICAgaWYgKGtiRHJvcFdhcm5pbmcpIHsKICAgICAgICAgICAgbW91c2VEcm9wV2Fybmlu
ZyA9IGtiRHJvcFdhcm5pbmcuY2xvbmUoKTsKICAgICAgICB9CgogICAgICAgIHZhciBpc01vdmUg
PSBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgIHZhciBrZXlzZXRzID0gb3B0aW9ucy5rZXlz
ZXRzOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNldHMubGVuZ3RoOyBpKysp
IHsKICAgICAgICAgICAgICAgIGlmIChrZXlzZXRzW2ldLm1vZGlmaWVyKGV2dCkpIHsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB2
YXIgaXNBY3RpdmVJdGVtTW92YWJsZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJu
ICQuaW5BcnJheSh0aGF0UmVvcmRlcmVyLmFjdGl2ZUl0ZW0sIHRoYXRSZW9yZGVyZXIuZG9tLmZh
c3RMb2NhdGUoIm1vdmFibGVzIikpID49IDA7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB2
YXIgc2V0RHJvcEVmZmVjdHMgPSBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgdGhhdFJl
b3JkZXJlci5kb20uZmFzdExvY2F0ZSgiZHJvcFRhcmdldHMiKS5hdHRyKCJhcmlhLWRyb3BlZmZl
Y3QiLCB2YWx1ZSk7CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB2YXIgc3R5bGVzID0gb3B0
aW9ucy5zdHlsZXM7CiAgICAgICAgCiAgICAgICAgdmFyIG5vTW9kaWZpZXIgPSBmdW5jdGlvbiAo
ZXZ0KSB7CiAgICAgICAgICAgIHJldHVybiAoIWV2dC5jdHJsS2V5ICYmICFldnQuYWx0S2V5ICYm
ICFldnQuc2hpZnRLZXkgJiYgIWV2dC5tZXRhS2V5KTsKICAgICAgICB9OwogICAgICAgIAogICAg
ICAgIHZhciBoYW5kbGVEaXJlY3Rpb25LZXlEb3duID0gZnVuY3Rpb24gKGV2dCkgewogICAgICAg
ICAgICB2YXIgaXRlbSA9IHRoYXRSZW9yZGVyZXIuYWN0aXZlSXRlbTsKICAgICAgICAgICAgaWYg
KCFpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICB2YXIga2V5c2V0cyA9IG9wdGlvbnMua2V5c2V0czsKICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIg
a2V5c2V0ID0ga2V5c2V0c1tpXTsKICAgICAgICAgICAgICAgIHZhciBrZXlkaXIgPSBmbHVpZC5r
ZXlGb3JWYWx1ZShrZXlzZXQsIGV2dC5rZXlDb2RlKTsKICAgICAgICAgICAgICAgIGlmICgha2V5
ZGlyKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB2YXIgaXNNb3ZlbWVudCA9IGtleXNldC5tb2RpZmllcihldnQpOwogICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgZGlybnVtID0gZmx1aWQua2V5Y29kZURp
cmVjdGlvbltrZXlkaXJdOwogICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlSXRlbSA9IHRoYXRS
ZW9yZGVyZXIubGF5b3V0SGFuZGxlci5nZXRSZWxhdGl2ZVBvc2l0aW9uKGl0ZW0sIGRpcm51bSwg
IWlzTW92ZW1lbnQpOyAgCiAgICAgICAgICAgICAgICBpZiAoIXJlbGF0aXZlSXRlbSkgewogICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICBpZiAoaXNNb3ZlbWVudCkgewogICAgICAgICAgICAgICAgICAg
IHZhciBwcmV2ZW50ID0gdGhhdFJlb3JkZXJlci5ldmVudHMub25CZWdpbk1vdmUuZmlyZShpdGVt
KTsKICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudCA9PT0gZmFsc2UpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICBpZiAoa2JEcm9wV2FybmluZy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWxhdGl2ZUl0ZW0uY2xhenogPT09ICJsb2NrZWQiKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGF0UmVvcmRlcmVyLmV2ZW50cy5vblNob3dLZXlib2Fy
ZERyb3BXYXJuaW5nLmZpcmUoaXRlbSwga2JEcm9wV2FybmluZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrYkRyb3BXYXJuaW5nLnNob3coKTsgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2JEcm9wV2FybmluZy5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlSXRlbS5lbGVt
ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRSZW9yZGVyZXIucmVxdWVzdE1vdmVt
ZW50KHJlbGF0aXZlSXRlbSwgaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9Nb2RpZmllcihldnQpKSB7CiAgICAgICAg
ICAgICAgICAgICAgaXRlbS5ibHVyKCk7CiAgICAgICAgICAgICAgICAgICAgJChyZWxhdGl2ZUl0
ZW0uZWxlbWVudCkuZm9jdXMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICB9OwoKICAgICAgICAvLyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgogICAgICAgIHRo
YXRSZW9yZGVyZXIuaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAg
aWYgKCF0aGF0UmVvcmRlcmVyLmFjdGl2ZUl0ZW0gfHwgdGhhdFJlb3JkZXJlci5hY3RpdmVJdGVt
ICE9PSBldnQudGFyZ2V0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICAvLyBJZiB0aGUga2V5IHByZXNzZWQgaXMgY3RybCwgYW5kIHRoZSBh
Y3RpdmUgaXRlbSBpcyBtb3ZhYmxlIHdlIHdhbnQgdG8gcmVzdHlsZSB0aGUgYWN0aXZlIGl0ZW0u
CiAgICAgICAgICAgIHZhciBqQWN0aXZlSXRlbSA9ICQodGhhdFJlb3JkZXJlci5hY3RpdmVJdGVt
KTsKICAgICAgICAgICAgaWYgKCFqQWN0aXZlSXRlbS5oYXNDbGFzcyhzdHlsZXMuZHJhZ2dpbmcp
ICYmIGlzTW92ZShldnQpKSB7CiAgICAgICAgICAgICAgIC8vIERvbid0IHRyZWF0IHRoZSBhY3Rp
dmUgaXRlbSBhcyBkcmFnZ2luZyB1bmxlc3MgaXQgaXMgYSBtb3ZhYmxlLgogICAgICAgICAgICAg
ICAgaWYgKGlzQWN0aXZlSXRlbU1vdmFibGUoKSkgewogICAgICAgICAgICAgICAgICAgIGpBY3Rp
dmVJdGVtLnJlbW92ZUNsYXNzKHN0eWxlcy5zZWxlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAg
akFjdGl2ZUl0ZW0uYWRkQ2xhc3Moc3R5bGVzLmRyYWdnaW5nKTsKICAgICAgICAgICAgICAgICAg
ICBqQWN0aXZlSXRlbS5hdHRyKCJhcmlhLWdyYWJiZWQiLCAidHJ1ZSIpOwogICAgICAgICAgICAg
ICAgICAgIHNldERyb3BFZmZlY3RzKCJtb3ZlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gVGhlIG9u
bHkgb3RoZXIga2V5cyB3ZSBsaXN0ZW4gZm9yIGFyZSB0aGUgYXJyb3dzLgogICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlRGlyZWN0aW9uS2V5RG93bihldnQpOwogICAgICAgIH07CgogICAgICAgIC8v
IHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICAgICAgdGhhdFJlb3JkZXJlci5oYW5k
bGVLZXlVcCA9IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgaWYgKCF0aGF0UmVvcmRlcmVy
LmFjdGl2ZUl0ZW0gfHwgdGhhdFJlb3JkZXJlci5hY3RpdmVJdGVtICE9PSBldnQudGFyZ2V0KSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2
YXIgakFjdGl2ZUl0ZW0gPSAkKHRoYXRSZW9yZGVyZXIuYWN0aXZlSXRlbSk7CiAgICAgICAgICAg
IAogICAgICAgICAgICAvLyBIYW5kbGUgYSBrZXkgdXAgZXZlbnQgZm9yIHRoZSBtb2RpZmllcgog
ICAgICAgICAgICBpZiAoakFjdGl2ZUl0ZW0uaGFzQ2xhc3Moc3R5bGVzLmRyYWdnaW5nKSAmJiAh
aXNNb3ZlKGV2dCkpIHsKICAgICAgICAgICAgICAgIGlmIChrYkRyb3BXYXJuaW5nKSB7CiAgICAg
ICAgICAgICAgICAgICAga2JEcm9wV2FybmluZy5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBqQWN0aXZlSXRlbS5yZW1vdmVDbGFzcyhzdHlsZXMuZHJhZ2dpbmcpOwog
ICAgICAgICAgICAgICAgakFjdGl2ZUl0ZW0uYWRkQ2xhc3Moc3R5bGVzLnNlbGVjdGVkKTsKICAg
ICAgICAgICAgICAgIGpBY3RpdmVJdGVtLmF0dHIoImFyaWEtZ3JhYmJlZCIsICJmYWxzZSIpOwog
ICAgICAgICAgICAgICAgc2V0RHJvcEVmZmVjdHMoIm5vbmUiKTsKICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgIH07CgogICAgICAgIHZhciBkcm9wTWFya2VyOwoKICAgICAgICB2YXIg
Y3JlYXRlRHJvcE1hcmtlciA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7CiAgICAgICAgICAgIHZhciBk
cm9wTWFya2VyID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTsKICAgICAgICAg
ICAgZHJvcE1hcmtlci5hZGRDbGFzcyhvcHRpb25zLnN0eWxlcy5kcm9wTWFya2VyKTsKICAgICAg
ICAgICAgZHJvcE1hcmtlci5oaWRlKCk7CiAgICAgICAgICAgIHJldHVybiBkcm9wTWFya2VyOwog
ICAgICAgIH07CiAgICAgICAgLy8gdW5zdXBwb3J0ZWQsIE5PTi1BUEkgZnVuY3Rpb24KICAgICAg
ICB0aGF0UmVvcmRlcmVyLnJlcXVlc3RNb3ZlbWVudCA9IGZ1bmN0aW9uIChyZXF1ZXN0ZWRQb3Np
dGlvbiwgaXRlbSkgewogICAgICAgICAgICBpdGVtID0gZmx1aWQudW53cmFwKGl0ZW0pOwogICAg
ICAgICAgLy8gVGVtcG9yYXJ5IGNlbnNvcmluZyB0byBnZXQgYXJvdW5kIE1vZHVsZUxheW91dCBp
bmFiaWxpdHkgdG8gdXBkYXRlIHJlbGF0aXZlIHRvIHNlbGYuCiAgICAgICAgICAgIGlmICghcmVx
dWVzdGVkUG9zaXRpb24gfHwgZmx1aWQudW53cmFwKHJlcXVlc3RlZFBvc2l0aW9uLmVsZW1lbnQp
ID09PSBpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgdmFyIGFjdGl2ZUl0ZW0gPSAkKHRoYXRSZW9yZGVyZXIuYWN0aXZlSXRlbSk7CiAgICAg
ICAgICAgIAogICAgICAgICAgICAvLyBGaXhlcyBGTFVJRC0zMjg4LgogICAgICAgICAgICAvLyBO
ZWVkIHRvIHVuYmluZCB0aGUgYmx1ciBldmVudCBhcyBzYWZhcmkgd2lsbCBjYWxsIGJsdXIgb24g
bW92ZW1lbnRzLgogICAgICAgICAgICAvLyBUaGlzIGNhdXNlZCB0aGUgdXNlciB0byBoYXZlIHRv
IGRvdWJsZSB0YXAgdGhlIGFycm93IGtleXMgdG8gbW92ZS4KICAgICAgICAgICAgYWN0aXZlSXRl
bS51bmJpbmQoImJsdXIuZmx1aWQucmVvcmRlcmVyIik7CiAgICAgICAgICAgIAogICAgICAgICAg
ICB0aGF0UmVvcmRlcmVyLmV2ZW50cy5vbk1vdmUuZmlyZShpdGVtLCByZXF1ZXN0ZWRQb3NpdGlv
bik7CiAgICAgICAgICAgIGRyb3BNYW5hZ2VyLmdlb21ldHJpY01vdmUoaXRlbSwgcmVxdWVzdGVk
UG9zaXRpb24uZWxlbWVudCwgcmVxdWVzdGVkUG9zaXRpb24ucG9zaXRpb24pOwogICAgICAgICAg
ICAvLyQodGhhdFJlb3JkZXJlci5hY3RpdmVJdGVtKS5yZW1vdmVDbGFzcyhvcHRpb25zLnN0eWxl
cy5zZWxlY3RlZCk7CiAgICAgICAgICAgCiAgICAgICAgICAgIC8vIHJlZm9jdXMgb24gdGhlIGFj
dGl2ZSBpdGVtIGJlY2F1c2UgbW92aW5nIHBsYWNlcyBmb2N1cyBvbiB0aGUgYm9keQogICAgICAg
ICAgICBhY3RpdmVJdGVtLmZvY3VzKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGF0UmVv
cmRlcmVyLnJlZnJlc2goKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRyb3BNYW5hZ2VyLnVw
ZGF0ZUdlb21ldHJ5KHRoYXRSZW9yZGVyZXIubGF5b3V0SGFuZGxlci5nZXRHZW9tZXRyaWNJbmZv
KCkpOwoKICAgICAgICAgICAgdGhhdFJlb3JkZXJlci5ldmVudHMuYWZ0ZXJNb3ZlLmZpcmUoaXRl
bSwgcmVxdWVzdGVkUG9zaXRpb24sIHRoYXRSZW9yZGVyZXIuZG9tLmZhc3RMb2NhdGUoIm1vdmFi
bGVzIikpOwogICAgICAgIH07CgogICAgICAgIHZhciBob3ZlclN0eWxlSGFuZGxlciA9IGZ1bmN0
aW9uIChpdGVtLCBzdGF0ZSkgewogICAgICAgICAgICB0aGF0UmVvcmRlcmVyLmRvbS5mYXN0TG9j
YXRlKCJncmFiSGFuZGxlIiwgaXRlbSlbc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNz
Il0oc3R5bGVzLmhvdmVyKTsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIFRha2Vz
IGEgJCBvYmplY3QgYW5kIGFkZHMgJ21vdmFibGUnIGZ1bmN0aW9uYWxpdHkgdG8gaXQKICAgICAg
ICAgKi8KICAgICAgICBmdW5jdGlvbiBpbml0TW92YWJsZShpdGVtKSB7CiAgICAgICAgICAgIHZh
ciBzdHlsZXMgPSBvcHRpb25zLnN0eWxlczsKICAgICAgICAgICAgaXRlbS5hdHRyKCJhcmlhLWdy
YWJiZWQiLCAiZmFsc2UiKTsKCiAgICAgICAgICAgIGl0ZW0ubW91c2VvdmVyKAogICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHRoYXRSZW9yZGVyZXIuZXZl
bnRzLm9uSG92ZXIuZmlyZShpdGVtLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgKTsKICAgICAgICAKICAgICAgICAgICAgaXRlbS5tb3VzZW91dCgKICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB0aGF0UmVvcmRlcmVyLmV2ZW50cy5v
bkhvdmVyLmZpcmUoaXRlbSwgZmFsc2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAp
OwogICAgICAgICAgICB2YXIgYXZhdGFyOwogICAgICAgIAogICAgICAgICAgICB0aGF0UmVvcmRl
cmVyLmRvbS5mYXN0TG9jYXRlKCJncmFiSGFuZGxlIiwgaXRlbSkuZHJhZ2dhYmxlKHsKICAgICAg
ICAgICAgICAgIHJlZnJlc2hQb3NpdGlvbnM6IGZhbHNlLAogICAgICAgICAgICAgICAgc2Nyb2xs
OiB0cnVlLAogICAgICAgICAgICAgICAgaGVscGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
ICAgICAgICAgdmFyIGRyb3BXYXJuaW5nRWw7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vdXNl
RHJvcFdhcm5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZHJvcFdhcm5pbmdFbCA9IG1v
dXNlRHJvcFdhcm5pbmdbMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIGF2YXRhciA9ICQob3B0aW9ucy5hdmF0YXJDcmVhdG9yKGl0ZW1bMF0sIHN0eWxlcy5hdmF0
YXIsIGRyb3BXYXJuaW5nRWwpKTsKICAgICAgICAgICAgICAgICAgICBhdmF0YXIucHJvcCgiaWQi
LCBjcmVhdGVBdmF0YXJJZCh0aGF0UmVvcmRlcmVyLmNvbnRhaW5lci5pZCkpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhdmF0YXI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcmV2
ZW50ID0gdGhhdFJlb3JkZXJlci5ldmVudHMub25CZWdpbk1vdmUuZmlyZShpdGVtKTsKICAgICAg
ICAgICAgICAgICAgICBpZiAocHJldmVudCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICB2YXIgaGFuZGxlID0gdGhhdFJlb3JkZXJlci5kb20uZmFzdExvY2F0ZSgiZ3JhYkhhbmRs
ZSIsIGl0ZW0pWzBdOwogICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVQb3MgPSBmbHVpZC5k
b20uY29tcHV0ZUFic29sdXRlUG9zaXRpb24oaGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICB2
YXIgaGFuZGxlV2lkdGggPSBoYW5kbGUub2Zmc2V0V2lkdGg7CiAgICAgICAgICAgICAgICAgICAg
dmFyIGhhbmRsZUhlaWdodCA9IGhhbmRsZS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgICAgICAgICAg
ICAgaXRlbS5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQ2xhc3Mob3B0
aW9ucy5zdHlsZXMuc2VsZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2xhc3Mo
b3B0aW9ucy5zdHlsZXMubW91c2VEcmFnKTsKICAgICAgICAgICAgICAgICAgICBpdGVtLmF0dHIo
ImFyaWEtZ3JhYmJlZCIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICAgICAgc2V0RHJvcEVmZmVj
dHMoIm1vdmUiKTsKICAgICAgICAgICAgICAgICAgICBkcm9wTWFuYWdlci5zdGFydERyYWcoZSwg
aGFuZGxlUG9zLCBoYW5kbGVXaWR0aCwgaGFuZGxlSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAg
ICBhdmF0YXIuc2hvdygpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN0b3A6
IGZ1bmN0aW9uIChlLCB1aSkgewogICAgICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQ2xhc3Mo
b3B0aW9ucy5zdHlsZXMubW91c2VEcmFnKTsKICAgICAgICAgICAgICAgICAgICBpdGVtLmFkZENs
YXNzKG9wdGlvbnMuc3R5bGVzLnNlbGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAkKHRoYXRS
ZW9yZGVyZXIuYWN0aXZlSXRlbSkuYXR0cigiYXJpYS1ncmFiYmVkIiwgImZhbHNlIik7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hcmtlck5vZGUgPSBmbHVpZC51bndyYXAoZHJvcE1hcmtlcik7
CiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlck5vZGUucGFyZW50Tm9kZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICBtYXJrZXJOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWFya2Vy
Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGF2YXRhci5o
aWRlKCk7CiAgICAgICAgICAgICAgICAgICAgdWkuaGVscGVyID0gbnVsbDsKICAgICAgICAgICAg
ICAgICAgICBzZXREcm9wRWZmZWN0cygibm9uZSIpOwogICAgICAgICAgICAgICAgICAgIGRyb3BN
YW5hZ2VyLmVuZERyYWcoKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICB0aGF0UmVvcmRlcmVyLnJlcXVlc3RNb3ZlbWVudChkcm9wTWFuYWdlci5sYXN0UG9zaXRpb24o
KSwgaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1cyBvbiB0aGUgYWN0aXZlIGl0
ZW0gYmVjYXVzZSBtb3ZpbmcgcGxhY2VzIGZvY3VzIG9uIHRoZSBib2R5CiAgICAgICAgICAgICAg
ICAgICAgdGhhdFJlb3JkZXJlci5hY3RpdmVJdGVtLmZvY3VzKCk7CiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgaGFuZGxlOiB0aGF0UmVvcmRlcmVyLmRvbS5mYXN0TG9jYXRlKCJn
cmFiSGFuZGxlIiwgaXRlbSkKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgICAgIAog
ICAgICAgIGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGVkVG9EZWZhdWx0KGpJdGVtLCBzdHlsZXMpIHsK
ICAgICAgICAgICAgakl0ZW0ucmVtb3ZlQ2xhc3Moc3R5bGVzLnNlbGVjdGVkKTsKICAgICAgICAg
ICAgakl0ZW0ucmVtb3ZlQ2xhc3Moc3R5bGVzLmRyYWdnaW5nKTsKICAgICAgICAgICAgakl0ZW0u
YWRkQ2xhc3Moc3R5bGVzLmRlZmF1bHRTdHlsZSk7CiAgICAgICAgICAgIGpJdGVtLmF0dHIoImFy
aWEtc2VsZWN0ZWQiLCAiZmFsc2UiKTsKICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgdmFy
IHNlbGVjdEl0ZW0gPSBmdW5jdGlvbiAoYW5JdGVtKSB7CiAgICAgICAgICAgIHRoYXRSZW9yZGVy
ZXIuZXZlbnRzLm9uU2VsZWN0LmZpcmUoYW5JdGVtKTsKICAgICAgICAgICAgdmFyIHN0eWxlcyA9
IG9wdGlvbnMuc3R5bGVzOwogICAgICAgICAgICAvLyBTZXQgdGhlIHByZXZpb3VzIGFjdGl2ZSBp
dGVtIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3RhdGUuCiAgICAgICAgICAgIGlmICh0aGF0UmVvcmRl
cmVyLmFjdGl2ZUl0ZW0gJiYgdGhhdFJlb3JkZXJlci5hY3RpdmVJdGVtICE9PSBhbkl0ZW0pIHsK
ICAgICAgICAgICAgICAgIGNoYW5nZVNlbGVjdGVkVG9EZWZhdWx0KCQodGhhdFJlb3JkZXJlci5h
Y3RpdmVJdGVtKSwgc3R5bGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUaGVuIHNl
bGVjdCB0aGUgbmV3IGl0ZW0uCiAgICAgICAgICAgIHRoYXRSZW9yZGVyZXIuYWN0aXZlSXRlbSA9
IGFuSXRlbTsKICAgICAgICAgICAgdmFyIGpJdGVtID0gJChhbkl0ZW0pOwogICAgICAgICAgICBq
SXRlbS5yZW1vdmVDbGFzcyhzdHlsZXMuZGVmYXVsdFN0eWxlKTsKICAgICAgICAgICAgakl0ZW0u
YWRkQ2xhc3Moc3R5bGVzLnNlbGVjdGVkKTsKICAgICAgICAgICAgakl0ZW0uYXR0cigiYXJpYS1z
ZWxlY3RlZCIsICJ0cnVlIik7CiAgICAgICAgfTsKICAgCiAgICAgICAgdmFyIGluaXRTZWxlY3Rh
YmxlcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZUJsdXIgPSBmdW5jdGlv
biAoZXZ0KSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VTZWxlY3RlZFRvRGVmYXVsdCgkKHRoaXMp
LCBvcHRpb25zLnN0eWxlcyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZXZ0LnN0b3BQcm9wYWdh
dGlvbigpOwogICAgICAgICAgICB9OwogICAgICAgIAogICAgICAgICAgICB2YXIgaGFuZGxlRm9j
dXMgPSBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKHRoaXMpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIGV2dC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAg
fTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBzZWxlY3RhYmxlcyA9IHRoYXRSZW9yZGVy
ZXIuZG9tLmZhc3RMb2NhdGUoInNlbGVjdGFibGVzIik7CiAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc2VsZWN0YWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIHZhciBz
ZWxlY3RhYmxlID0gJChzZWxlY3RhYmxlc1tpXSk7CiAgICAgICAgICAgICAgICBpZiAoISQuZGF0
YShzZWxlY3RhYmxlWzBdLCAiZmx1aWQucmVvcmRlcmVyLnNlbGVjdGFibGUtaW5pdGlhbGlzZWQi
KSkgeyAKICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLmFkZENsYXNzKHN0eWxlcy5kZWZh
dWx0U3R5bGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLmJp
bmQoImJsdXIuZmx1aWQucmVvcmRlcmVyIiwgaGFuZGxlQmx1cik7CiAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0YWJsZS5mb2N1cyhoYW5kbGVGb2N1cyk7CiAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0YWJsZS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBoYW5kbGUgPSBmbHVpZC51bndyYXAodGhhdFJlb3JkZXJlci5kb20uZmFzdExvY2F0ZSgiZ3Jh
YkhhbmRsZSIsIHRoaXMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdWlkLmRvbS5p
c0NvbnRhaW5lcihoYW5kbGUsIGV2dC50YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkKHRoaXMpLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBz
ZWxlY3RhYmxlLmF0dHIoInJvbGUiLCBvcHRpb25zLmNvbnRhaW5lclJvbGUuaXRlbSk7CiAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0YWJsZS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwgImZhbHNlIik7
CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZS5hdHRyKCJhcmlhLWRpc2FibGVkIiwgImZh
bHNlIik7CiAgICAgICAgICAgICAgICAgICAgJC5kYXRhKHNlbGVjdGFibGVbMF0sICJmbHVpZC5y
ZW9yZGVyZXIuc2VsZWN0YWJsZS1pbml0aWFsaXNlZCIsIHRydWUpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdGhhdFJlb3JkZXJlci5zZWxlY3RhYmxl
Q29udGV4dCkgewogICAgICAgICAgICAgICAgdGhhdFJlb3JkZXJlci5zZWxlY3RhYmxlQ29udGV4
dCA9IGZsdWlkLnNlbGVjdGFibGUodGhhdFJlb3JkZXJlci5jb250YWluZXIsIHsKICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RhYmxlRWxlbWVudHM6IHNlbGVjdGFibGVzLAogICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGFibGVzVGFiaW5kZXg6IHRoYXRSZW9yZGVyZXIub3B0aW9ucy5zZWxlY3Rh
Ymxlc1RhYmluZGV4LAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogbnVsbAogICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgCiAgICAgICAgdmFyIGRy
b3BDaGFuZ2VMaXN0ZW5lciA9IGZ1bmN0aW9uIChkcm9wVGFyZ2V0KSB7CiAgICAgICAgICAgIGZs
dWlkLm1vdmVEb20oZHJvcE1hcmtlciwgZHJvcFRhcmdldC5lbGVtZW50LCBkcm9wVGFyZ2V0LnBv
c2l0aW9uKTsKICAgICAgICAgICAgZHJvcE1hcmtlci5jc3MoImRpc3BsYXkiLCAiIik7CiAgICAg
ICAgICAgIGlmIChtb3VzZURyb3BXYXJuaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAoZHJvcFRh
cmdldC5sb2NrZWRlbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgbW91c2VEcm9wV2FybmluZy5z
aG93KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1vdXNl
RHJvcFdhcm5pbmcuaGlkZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfTsKICAgIAogICAgICAgIHZhciBpbml0SXRlbXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIHZhciBtb3ZhYmxlcyA9IHRoYXRSZW9yZGVyZXIuZG9tLmZhc3RMb2NhdGUoIm1vdmFibGVz
Iik7CiAgICAgICAgICAgIHZhciBkcm9wVGFyZ2V0cyA9IHRoYXRSZW9yZGVyZXIuZG9tLmZhc3RM
b2NhdGUoImRyb3BUYXJnZXRzIik7CiAgICAgICAgICAgIGluaXRTZWxlY3RhYmxlcygpOwogICAg
ICAgIAogICAgICAgICAgICAvLyBTZXR1cCBtb3ZhYmxlcwogICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1vdmFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgaXRl
bSA9IG1vdmFibGVzW2ldOwogICAgICAgICAgICAgICAgaWYgKCEkLmRhdGEoaXRlbSwgImZsdWlk
LnJlb3JkZXJlci5tb3ZhYmxlLWluaXRpYWxpc2VkIikpIHsgCiAgICAgICAgICAgICAgICAgICAg
aW5pdE1vdmFibGUoJChpdGVtKSk7CiAgICAgICAgICAgICAgICAgICAgJC5kYXRhKGl0ZW0sICJm
bHVpZC5yZW9yZGVyZXIubW92YWJsZS1pbml0aWFsaXNlZCIsIHRydWUpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJbiBvcmRlciB0byBjcmVhdGUgdmFs
aWQgaHRtbCwgdGhlIGRyb3AgbWFya2VyIGlzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5vZGUgYmVp
bmcgZHJhZ2dlZC4KICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgY29uZnVzaW5nIFVJIGlu
IGNhc2VzIHN1Y2ggYXMgYW4gb3JkZXJlZCBsaXN0LiAKICAgICAgICAgICAgLy8gZHJvcCBtYXJr
ZXIgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgbWFkZSBwbHVnZ2FibGUuIAogICAgICAgICAgICBp
ZiAobW92YWJsZXMubGVuZ3RoID4gMCAmJiAhZHJvcE1hcmtlcikgewogICAgICAgICAgICAgICAg
ZHJvcE1hcmtlciA9IGNyZWF0ZURyb3BNYXJrZXIobW92YWJsZXNbMF0udGFnTmFtZSk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGRyb3BNYW5hZ2VyLnVwZGF0ZUdlb21l
dHJ5KHRoYXRSZW9yZGVyZXIubGF5b3V0SGFuZGxlci5nZXRHZW9tZXRyaWNJbmZvKCkpOwogICAg
ICAgICAgICAKICAgICAgICAgICAgZHJvcE1hbmFnZXIuZHJvcENoYW5nZUZpcmVyLmFkZExpc3Rl
bmVyKGRyb3BDaGFuZ2VMaXN0ZW5lciwgImZsdWlkLlJlb3JkZXJlciIpOwogICAgICAgICAgICAv
LyBTZXQgdXAgZHJvcFRhcmdldHMKICAgICAgICAgICAgZHJvcFRhcmdldHMuYXR0cigiYXJpYS1k
cm9wZWZmZWN0IiwgIm5vbmUiKTsgIAoKICAgICAgICB9OwoKCiAgICAgICAgLy8gRmluYWwgaW5p
dGlhbGl6YXRpb24gb2YgdGhlIFJlb3JkZXJlciBhdCB0aGUgZW5kIG9mIHRoZSBjb25zdHJ1Y3Rp
b24gcHJvY2VzcyAKICAgICAgICBpZiAodGhhdFJlb3JkZXJlci5jb250YWluZXIpIHsKICAgICAg
ICAgICAgYmluZEhhbmRsZXJzVG9Db250YWluZXIodGhhdFJlb3JkZXJlci5jb250YWluZXIsIAog
ICAgICAgICAgICAgICAgdGhhdFJlb3JkZXJlci5oYW5kbGVLZXlEb3duLAogICAgICAgICAgICAg
ICAgdGhhdFJlb3JkZXJlci5oYW5kbGVLZXlVcCk7CiAgICAgICAgICAgIGFkZFJvbGVzVG9Db250
YWluZXIodGhhdFJlb3JkZXJlcik7CiAgICAgICAgICAgIGZsdWlkLnRhYmJhYmxlKHRoYXRSZW9y
ZGVyZXIuY29udGFpbmVyKTsKICAgICAgICAgICAgaW5pdEl0ZW1zKCk7CiAgICAgICAgfQoKICAg
ICAgICBpZiAob3B0aW9ucy5hZnRlck1vdmVDYWxsYmFja1VybCkgewogICAgICAgICAgICB0aGF0
UmVvcmRlcmVyLmV2ZW50cy5hZnRlck1vdmUuYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgICAgdmFyIGxheW91dEhhbmRsZXIgPSB0aGF0UmVvcmRlcmVyLmxheW91dEhhbmRs
ZXI7CiAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBsYXlvdXRIYW5kbGVyLmdldE1vZGVsID8g
bGF5b3V0SGFuZGxlci5nZXRNb2RlbCgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy5hY3F1aXJlTW9kZWwodGhhdFJlb3JkZXJlcik7CiAgICAgICAgICAgICAgICAkLnBvc3Qob3B0
aW9ucy5hZnRlck1vdmVDYWxsYmFja1VybCwgSlNPTi5zdHJpbmdpZnkobW9kZWwpKTsKICAgICAg
ICAgICAgfSwgInBvc3RNb2RlbCIpOwogICAgICAgIH0KICAgICAgICB0aGF0UmVvcmRlcmVyLmV2
ZW50cy5vbkhvdmVyLmFkZExpc3RlbmVyKGhvdmVyU3R5bGVIYW5kbGVyLCAic3R5bGUiKTsKCiAg
ICAgICAgdGhhdFJlb3JkZXJlci5yZWZyZXNoID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0
aGF0UmVvcmRlcmVyLmRvbS5yZWZyZXNoKCJtb3ZhYmxlcyIpOwogICAgICAgICAgICB0aGF0UmVv
cmRlcmVyLmRvbS5yZWZyZXNoKCJzZWxlY3RhYmxlcyIpOwogICAgICAgICAgICB0aGF0UmVvcmRl
cmVyLmRvbS5yZWZyZXNoKCJncmFiSGFuZGxlIiwgdGhhdFJlb3JkZXJlci5kb20uZmFzdExvY2F0
ZSgibW92YWJsZXMiKSk7CiAgICAgICAgICAgIHRoYXRSZW9yZGVyZXIuZG9tLnJlZnJlc2goInN0
eWxpc3RpY09mZnNldCIsIHRoYXRSZW9yZGVyZXIuZG9tLmZhc3RMb2NhdGUoIm1vdmFibGVzIikp
OwogICAgICAgICAgICB0aGF0UmVvcmRlcmVyLmRvbS5yZWZyZXNoKCJkcm9wVGFyZ2V0cyIpOwog
ICAgICAgICAgICB0aGF0UmVvcmRlcmVyLmV2ZW50cy5vblJlZnJlc2guZmlyZSgpOwogICAgICAg
ICAgICBpbml0SXRlbXMoKTsKICAgICAgICAgICAgdGhhdFJlb3JkZXJlci5zZWxlY3RhYmxlQ29u
dGV4dC5zZWxlY3RhYmxlcyA9IHRoYXRSZW9yZGVyZXIuZG9tLmZhc3RMb2NhdGUoInNlbGVjdGFi
bGVzIik7CiAgICAgICAgICAgIHRoYXRSZW9yZGVyZXIuc2VsZWN0YWJsZUNvbnRleHQuc2VsZWN0
YWJsZXNVcGRhdGVkKHRoYXRSZW9yZGVyZXIuYWN0aXZlSXRlbSk7CiAgICAgICAgfTsKICAgICAg
ICAKICAgICAgICBmbHVpZC5pbml0RGVwZW5kZW50cyh0aGF0UmVvcmRlcmVyKTsKCiAgICAgICAg
dGhhdFJlb3JkZXJlci5yZWZyZXNoKCk7CgogICAgICAgIHJldHVybiB0aGF0UmVvcmRlcmVyOwog
ICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBDb25zdGFudHMgZm9yIGtleSBjb2RlcyBpbiBldmVu
dHMuCiAgICAgKi8gICAgCiAgICBmbHVpZC5yZW9yZGVyZXIua2V5cyA9IHsKICAgICAgICBUQUI6
IDksCiAgICAgICAgRU5URVI6IDEzLAogICAgICAgIFNISUZUOiAxNiwKICAgICAgICBDVFJMOiAx
NywKICAgICAgICBBTFQ6IDE4LAogICAgICAgIE1FVEE6IDE5LAogICAgICAgIFNQQUNFOiAzMiwK
ICAgICAgICBMRUZUOiAzNywKICAgICAgICBVUDogMzgsCiAgICAgICAgUklHSFQ6IDM5LAogICAg
ICAgIERPV046IDQwLAogICAgICAgIGk6IDczLAogICAgICAgIGo6IDc0LAogICAgICAgIGs6IDc1
LAogICAgICAgIG06IDc3CiAgICB9OwogICAgCiAgICAvKioKICAgICAqIFRoZSBkZWZhdWx0IGtl
eSBzZXRzIGZvciB0aGUgUmVvcmRlcmVyLiBTaG91bGQgYmUgbW92ZWQgaW50byB0aGUgcHJvcGVy
IGNvbXBvbmVudCBkZWZhdWx0cy4KICAgICAqLwogICAgZmx1aWQucmVvcmRlcmVyLmRlZmF1bHRL
ZXlzZXRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgbW9kaWZpZXIgOiBmdW5jdGlvbiAoZXZ0
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXZ0LmN0cmxLZXk7CiAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgIHVwIDogZmx1aWQucmVvcmRlcmVyLmtleXMuVVAsCiAgICAgICAgICAgIGRvd24g
OiBmbHVpZC5yZW9yZGVyZXIua2V5cy5ET1dOLAogICAgICAgICAgICByaWdodCA6IGZsdWlkLnJl
b3JkZXJlci5rZXlzLlJJR0hULAogICAgICAgICAgICBsZWZ0IDogZmx1aWQucmVvcmRlcmVyLmtl
eXMuTEVGVAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtb2RpZmllciA6IGZ1bmN0
aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBldnQuY3RybEtleTsKICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgdXAgOiBmbHVpZC5yZW9yZGVyZXIua2V5cy5pLAogICAgICAgICAg
ICBkb3duIDogZmx1aWQucmVvcmRlcmVyLmtleXMubSwKICAgICAgICAgICAgcmlnaHQgOiBmbHVp
ZC5yZW9yZGVyZXIua2V5cy5rLAogICAgICAgICAgICBsZWZ0IDogZmx1aWQucmVvcmRlcmVyLmtl
eXMuagogICAgICAgIH0KICAgIF07CiAgICAKICAgIC8qKgogICAgICogVGhlc2Ugcm9sZXMgYXJl
IHVzZWQgdG8gYWRkIEFSSUEgcm9sZXMgdG8gb3JkZXJhYmxlIGl0ZW1zLiBUaGlzIGxpc3QgY2Fu
IGJlIGV4dGVuZGVkIGFzIG5lZWRlZCwKICAgICAqIGJ1dCB0aGUgdmFsdWVzIG9mIHRoZSBjb250
YWluZXIgYW5kIGl0ZW0gcm9sZXMgbXVzdCBtYXRjaCBBUklBLXNwZWNpZmllZCByb2xlcy4KICAg
ICAqLyAgCiAgICBmbHVpZC5yZW9yZGVyZXIucm9sZXMgPSB7CiAgICAgICAgR1JJRDogeyBjb250
YWluZXI6ICJncmlkIiwgaXRlbTogImdyaWRjZWxsIiB9LAogICAgICAgIExJU1Q6IHsgY29udGFp
bmVyOiAibGlzdCIsIGl0ZW06ICJsaXN0aXRlbSIgfSwKICAgICAgICBSRUdJT05TOiB7IGNvbnRh
aW5lcjogIm1haW4iLCBpdGVtOiAiYXJ0aWNsZSIgfQogICAgfTsKICAgIAogICAgLy8gU2ltcGxp
ZmllZCBBUEkgZm9yIHJlb3JkZXJpbmcgbGlzdHMgYW5kIGdyaWRzLgogICAgdmFyIHNpbXBsZUlu
aXQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBsYXlvdXRIYW5kbGVyLCBvcHRpb25zKSB7CiAgICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5sYXlvdXRIYW5kbGVy
ID0gbGF5b3V0SGFuZGxlcjsKICAgICAgICByZXR1cm4gZmx1aWQucmVvcmRlcmVyKGNvbnRhaW5l
ciwgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICBmbHVpZC5yZW9yZGVyTGlzdCA9IGZ1bmN0aW9u
IChjb250YWluZXIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gc2ltcGxlSW5pdChjb250YWlu
ZXIsICJmbHVpZC5saXN0TGF5b3V0SGFuZGxlciIsIG9wdGlvbnMpOwogICAgfTsKICAgIAogICAg
Zmx1aWQucmVvcmRlckdyaWQgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBvcHRpb25zKSB7CiAgICAg
ICAgcmV0dXJuIHNpbXBsZUluaXQoY29udGFpbmVyLCAiZmx1aWQuZ3JpZExheW91dEhhbmRsZXIi
LCBvcHRpb25zKTsgCiAgICB9OwogICAgCiAgICBmbHVpZC5yZW9yZGVyZXIuU0hVRkZMRV9HRU9N
RVRSSUNfU1RSQVRFR1kgPSAic2h1ZmZsZVByb2plY3RGcm9tIjsKICAgIGZsdWlkLnJlb3JkZXJl
ci5HRU9NRVRSSUNfU1RSQVRFR1kgICAgICAgICA9ICJwcm9qZWN0RnJvbSI7CiAgICBmbHVpZC5y
ZW9yZGVyZXIuTE9HSUNBTF9TVFJBVEVHWSAgICAgICAgICAgPSAibG9naWNhbEZyb20iOwogICAg
Zmx1aWQucmVvcmRlcmVyLldSQVBfTE9DS0VEX1NUUkFURUdZICAgICAgID0gImxvY2tlZFdyYXBG
cm9tIjsKICAgIGZsdWlkLnJlb3JkZXJlci5OT19TVFJBVEVHWSA9IG51bGw7CiAgICAKICAgIC8v
IHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICBmbHVpZC5yZW9yZGVyZXIucmVsYXRp
dmVJbmZvR2V0dGVyID0gZnVuY3Rpb24gKG9yaWVudGF0aW9uLCBjb1N0cmF0ZWd5LCBjb250cmFT
dHJhdGVneSwgZHJvcE1hbmFnZXIsIGRvbSwgZGlzYWJsZVdyYXApIHsKICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gKGl0ZW0sIGRpcmVjdGlvbiwgZm9yU2VsZWN0aW9uKSB7CiAgICAgICAgICAgIHZh
ciBkaXJvcmllbnQgPSBmbHVpZC5kaXJlY3Rpb25PcmllbnRhdGlvbihkaXJlY3Rpb24pOwogICAg
ICAgICAgICB2YXIgc3RyYXRlZ3kgPSBkaXJvcmllbnQgPT09IG9yaWVudGF0aW9uID8gY29TdHJh
dGVneSA6IGNvbnRyYVN0cmF0ZWd5OwogICAgICAgICAgICByZXR1cm4gc3RyYXRlZ3kgIT09IG51
bGwgPyBkcm9wTWFuYWdlcltzdHJhdGVneV0oaXRlbSwgZGlyZWN0aW9uLCBmb3JTZWxlY3Rpb24s
IGRpc2FibGVXcmFwKSA6IG51bGw7CiAgICAgICAgfTsKICAgIH07CiAgICAKICAgIGZsdWlkLmRl
ZmF1bHRzKCJmbHVpZC5yZW9yZGVyZXIiLCB7CiAgICAgICAgc3R5bGVzOiB7CiAgICAgICAgICAg
IGRlZmF1bHRTdHlsZTogImZsLXJlb3JkZXJlci1tb3ZhYmxlLWRlZmF1bHQiLAogICAgICAgICAg
ICBzZWxlY3RlZDogImZsLXJlb3JkZXJlci1tb3ZhYmxlLXNlbGVjdGVkIiwKICAgICAgICAgICAg
ZHJhZ2dpbmc6ICJmbC1yZW9yZGVyZXItbW92YWJsZS1kcmFnZ2luZyIsCiAgICAgICAgICAgIG1v
dXNlRHJhZzogImZsLXJlb3JkZXJlci1tb3ZhYmxlLWRyYWdnaW5nIiwKICAgICAgICAgICAgaG92
ZXI6ICJmbC1yZW9yZGVyZXItbW92YWJsZS1ob3ZlciIsCiAgICAgICAgICAgIGRyb3BNYXJrZXI6
ICJmbC1yZW9yZGVyZXItZHJvcE1hcmtlciIsCiAgICAgICAgICAgIGF2YXRhcjogImZsLXJlb3Jk
ZXJlci1hdmF0YXIiCiAgICAgICAgfSwKICAgICAgICBzZWxlY3RvcnM6IHsKICAgICAgICAgICAg
ZHJvcFdhcm5pbmc6ICIuZmxjLXJlb3JkZXJlci1kcm9wV2FybmluZyIsCiAgICAgICAgICAgIG1v
dmFibGVzOiAiLmZsYy1yZW9yZGVyZXItbW92YWJsZSIsCiAgICAgICAgICAgIGdyYWJIYW5kbGU6
ICIiLAogICAgICAgICAgICBzdHlsaXN0aWNPZmZzZXQ6ICIiCiAgICAgICAgfSwKICAgICAgICBh
dmF0YXJDcmVhdG9yOiBkZWZhdWx0QXZhdGFyQ3JlYXRvciwKICAgICAgICBrZXlzZXRzOiBmbHVp
ZC5yZW9yZGVyZXIuZGVmYXVsdEtleXNldHMsCiAgICAgICAgbGF5b3V0SGFuZGxlcjogewogICAg
ICAgICAgICB0eXBlOiAiZmx1aWQubGlzdExheW91dEhhbmRsZXIiCiAgICAgICAgfSwKICAgICAg
ICAKICAgICAgICBldmVudHM6IHsKICAgICAgICAgICAgb25TaG93S2V5Ym9hcmREcm9wV2Fybmlu
ZzogbnVsbCwKICAgICAgICAgICAgb25TZWxlY3Q6IG51bGwsCiAgICAgICAgICAgIG9uQmVnaW5N
b3ZlOiAicHJldmVudGFibGUiLAogICAgICAgICAgICBvbk1vdmU6IG51bGwsCiAgICAgICAgICAg
IGFmdGVyTW92ZTogbnVsbCwKICAgICAgICAgICAgb25Ib3ZlcjogbnVsbCwKICAgICAgICAgICAg
b25SZWZyZXNoOiBudWxsCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBtZXJnZVBvbGljeTog
ewogICAgICAgICAgICBrZXlzZXRzOiAicmVwbGFjZSIsCiAgICAgICAgICAgICJzZWxlY3RvcnMu
bGFiZWxTb3VyY2UiOiAic2VsZWN0b3JzLmdyYWJIYW5kbGUiLAogICAgICAgICAgICAic2VsZWN0
b3JzLnNlbGVjdGFibGVzIjogInNlbGVjdG9ycy5tb3ZhYmxlcyIsCiAgICAgICAgICAgICJzZWxl
Y3RvcnMuZHJvcFRhcmdldHMiOiAic2VsZWN0b3JzLm1vdmFibGVzIgogICAgICAgIH0sCiAgICAg
ICAgY29tcG9uZW50czogewogICAgICAgICAgICBsYWJlbGxlcjogewogICAgICAgICAgICAgICAg
dHlwZTogImZsdWlkLnJlb3JkZXJlci5sYWJlbGxlciIsCiAgICAgICAgICAgICAgICBvcHRpb25z
OiB7CiAgICAgICAgICAgICAgICAgICAgZG9tOiAie3Jlb3JkZXJlcn0uZG9tIiwKICAgICAgICAg
ICAgICAgICAgICBnZXRHZW9tZXRyaWNJbmZvOiAie3Jlb3JkZXJlcn0ubGF5b3V0SGFuZGxlci5n
ZXRHZW9tZXRyaWNJbmZvIiwKICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogIntyZW9y
ZGVyZXJ9Lm9wdGlvbnMub3JpZW50YXRpb24iLAogICAgICAgICAgICAgICAgICAgIGxheW91dFR5
cGU6ICJ7cmVvcmRlcmVyfS5vcHRpb25zLmxheW91dEhhbmRsZXIiIC8vIFRPRE8sIGdldCByaWQg
b2YgImdsb2JhbCBkZWZhdWx0cyIKICAgICAgICAgICAgICAgIH0gICAgICAgICAgCiAgICAgICAg
ICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8vIFRoZSB1c2VyIG9wdGlvbiB0byBl
bmFibGUgb3IgZGlzYWJsZSB3cmFwcGluZyBvZiBlbGVtZW50cyB3aXRoaW4gdGhlIGNvbnRhaW5l
cgogICAgICAgIGRpc2FibGVXcmFwOiBmYWxzZSAgICAgICAgCiAgICAgICAgCiAgICB9KTsKCgog
ICAgLyoqKioqKioqKioqKioqKioqKioKICAgICAqIExheW91dCBIYW5kbGVycyAqCiAgICAgKioq
KioqKioqKioqKioqKioqKi8KCiAgICAvLyB1bnN1cHBvcnRlZCwgTk9OLUFQSSBmdW5jdGlvbgog
ICAgZmx1aWQucmVvcmRlcmVyLm1ha2VHZW9tZXRyaWNJbmZvR2V0dGVyID0gZnVuY3Rpb24gKG9y
aWVudGF0aW9uLCBzZW50aW5lbGl6ZSwgZG9tKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgdmFyIHRoYXQgPSB7CiAgICAgICAgICAgICAgICBzZW50aW5lbGl6ZTog
c2VudGluZWxpemUsCiAgICAgICAgICAgICAgICBleHRlbnRzOiBbewogICAgICAgICAgICAgICAg
ICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICBlbGVtZW50
czogZG9tLmZhc3RMb2NhdGUoImRyb3BUYXJnZXRzIikKICAgICAgICAgICAgICAgIH1dLAogICAg
ICAgICAgICAgICAgZWxlbWVudE1hcHBlcjogZnVuY3Rpb24gKGVsZW1lbnQpIHsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJC5pbkFycmF5KGVsZW1lbnQsIGRvbS5mYXN0TG9jYXRlKCJtb3Zh
YmxlcyIpKSA9PT0gLTEgPyAibG9ja2VkIiA6IG51bGw7CiAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgZWxlbWVudEluZGV4ZXI6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAg
ICAgICAgICAgICAgdmFyIHNlbGVjdGFibGVzID0gZG9tLmZhc3RMb2NhdGUoInNlbGVjdGFibGVz
Iik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudENsYXNzOiB0aGF0LmVsZW1lbnRNYXBwZXIoZWxlbWVudCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4OiAkLmluQXJyYXkoZWxlbWVudCwgc2VsZWN0YWJsZXMpLAogICAgICAg
ICAgICAgICAgICAgICAgICBsZW5ndGg6IHNlbGVjdGFibGVzLmxlbmd0aAogICAgICAgICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJl
dHVybiB0aGF0OwogICAgICAgIH07CiAgICB9OwogICAgCiAgICBmbHVpZC5kZWZhdWx0cyh0cnVl
LCAiZmx1aWQubGlzdExheW91dEhhbmRsZXIiLCAKICAgICAgICB7CiAgICAgICAgICAgIG9yaWVu
dGF0aW9uOiAgICAgICAgIGZsdWlkLm9yaWVudGF0aW9uLlZFUlRJQ0FMLAogICAgICAgICAgICBj
b250YWluZXJSb2xlOiAgICAgICBmbHVpZC5yZW9yZGVyZXIucm9sZXMuTElTVCwKICAgICAgICAg
ICAgc2VsZWN0YWJsZXNUYWJpbmRleDogLTEsCiAgICAgICAgICAgIHNlbnRpbmVsaXplOiAgICAg
ICAgIHRydWUKICAgICAgICB9KTsKICAgIAogICAgLy8gUHVibGljIGxheW91dCBoYW5kbGVycy4K
ICAgIGZsdWlkLmxpc3RMYXlvdXRIYW5kbGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgb3B0aW9u
cywgZHJvcE1hbmFnZXIsIGRvbSkgewogICAgICAgIHZhciB0aGF0ID0ge307CgogICAgICAgIHRo
YXQuZ2V0UmVsYXRpdmVQb3NpdGlvbiA9IAogICAgICAgICAgICBmbHVpZC5yZW9yZGVyZXIucmVs
YXRpdmVJbmZvR2V0dGVyKG9wdGlvbnMub3JpZW50YXRpb24sIAogICAgICAgICAgICAgICAgICAg
IGZsdWlkLnJlb3JkZXJlci5MT0dJQ0FMX1NUUkFURUdZLCBudWxsLCBkcm9wTWFuYWdlciwgZG9t
LCBvcHRpb25zLmRpc2FibGVXcmFwKTsKICAgICAgICAKICAgICAgICB0aGF0LmdldEdlb21ldHJp
Y0luZm8gPSBmbHVpZC5yZW9yZGVyZXIubWFrZUdlb21ldHJpY0luZm9HZXR0ZXIob3B0aW9ucy5v
cmllbnRhdGlvbiwgb3B0aW9ucy5zZW50aW5lbGl6ZSwgZG9tKTsKICAgICAgICAKICAgICAgICBy
ZXR1cm4gdGhhdDsKICAgIH07IC8vIEVuZCBMaXN0TGF5b3V0SGFuZGxlcgoKICAgIGZsdWlkLmRl
ZmF1bHRzKHRydWUsICJmbHVpZC5ncmlkTGF5b3V0SGFuZGxlciIsIAogICAgICAgIHsKICAgICAg
ICAgICAgb3JpZW50YXRpb246ICAgICAgICAgZmx1aWQub3JpZW50YXRpb24uSE9SSVpPTlRBTCwK
ICAgICAgICAgICAgY29udGFpbmVyUm9sZTogICAgICAgZmx1aWQucmVvcmRlcmVyLnJvbGVzLkdS
SUQsCiAgICAgICAgICAgIHNlbGVjdGFibGVzVGFiaW5kZXg6IC0xLAogICAgICAgICAgICBzZW50
aW5lbGl6ZTogICAgICAgICBmYWxzZQogICAgICAgIH0pOwogICAgLyoKICAgICAqIEl0ZW1zIGlu
IHRoZSBMaWdodGJveCBhcmUgc3RvcmVkIGluIGEgbGlzdCwgYnV0IHRoZXkgYXJlIHZpc3VhbGx5
IHByZXNlbnRlZCBhcyBhIGdyaWQgdGhhdAogICAgICogY2hhbmdlcyBkaW1lbnNpb25zIHdoZW4g
dGhlIHdpbmRvdyBjaGFuZ2VzIHNpemUuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSB1c2VyIHByZXNz
ZXMgdGhlIHVwIG9yCiAgICAgKiBkb3duIGFycm93IGtleSwgd2hhdCBsaWVzIGFib3ZlIG9yIGJl
bG93IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgd2luZG93IHNpemUuCiAgICAgKiAKICAgICAqIFRo
ZSBHcmlkTGF5b3V0SGFuZGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgY2hhbmdlcyB0
byB0aGlzIHZpcnR1YWwgJ2dyaWQnIG9mIGl0ZW1zCiAgICAgKiBpbiB0aGUgd2luZG93LCBhbmQg
b2YgaW5mb3JtaW5nIHRoZSBMaWdodGJveCBvZiB3aGljaCBpdGVtcyBzdXJyb3VuZCBhIGdpdmVu
IGl0ZW0uCiAgICAgKi8KICAgIGZsdWlkLmdyaWRMYXlvdXRIYW5kbGVyID0gZnVuY3Rpb24gKGNv
bnRhaW5lciwgb3B0aW9ucywgZHJvcE1hbmFnZXIsIGRvbSkgewogICAgICAgIHZhciB0aGF0ID0g
e307CgogICAgICAgIHRoYXQuZ2V0UmVsYXRpdmVQb3NpdGlvbiA9IAogICAgICAgICAgICBmbHVp
ZC5yZW9yZGVyZXIucmVsYXRpdmVJbmZvR2V0dGVyKG9wdGlvbnMub3JpZW50YXRpb24sIAogICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZGlzYWJsZVdyYXAgPyBmbHVpZC5yZW9yZGVyZXIuU0hVRkZM
RV9HRU9NRVRSSUNfU1RSQVRFR1kgOiBmbHVpZC5yZW9yZGVyZXIuTE9HSUNBTF9TVFJBVEVHWSwg
Zmx1aWQucmVvcmRlcmVyLlNIVUZGTEVfR0VPTUVUUklDX1NUUkFURUdZLCAKICAgICAgICAgICAg
ICAgICBkcm9wTWFuYWdlciwgZG9tLCBvcHRpb25zLmRpc2FibGVXcmFwKTsKICAgICAgICAKICAg
ICAgICB0aGF0LmdldEdlb21ldHJpY0luZm8gPSBmbHVpZC5yZW9yZGVyZXIubWFrZUdlb21ldHJp
Y0luZm9HZXR0ZXIob3B0aW9ucy5vcmllbnRhdGlvbiwgb3B0aW9ucy5zZW50aW5lbGl6ZSwgZG9t
KTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhhdDsKICAgIH07IC8vIEVuZCBvZiBHcmlkTGF5
b3V0SGFuZGxlcgoKICAgIGZsdWlkLmRlZmF1bHRzKCJmbHVpZC5yZW9yZGVyZXIubGFiZWxsZXIi
LCB7CiAgICAgICAgc3RyaW5nczogewogICAgICAgICAgICBvdmVyYWxsVGVtcGxhdGU6ICIlcmVj
ZW50U3RhdHVzICVpdGVtICVwb3NpdGlvbiAlbW92YWJsZSIsCiAgICAgICAgICAgIHBvc2l0aW9u
OiAgICAgICAgIiVpbmRleCBvZiAlbGVuZ3RoIiwKICAgICAgICAgICAgcG9zaXRpb25fbW9kdWxl
TGF5b3V0SGFuZGxlcjogIiVpbmRleCBvZiAlbGVuZ3RoIGluICVtb2R1bGVDZWxsICVtb2R1bGVJ
bmRleCBvZiAlbW9kdWxlTGVuZ3RoIiwKICAgICAgICAgICAgbW9kdWxlQ2VsbF8wOiAgICAicm93
IiwgLy8gTkIsIHRoZXNlIGtleXMgbXVzdCBhZ3JlZSB3aXRoIGZsdWlkLmExMXkub3JpZW50YXRp
b24gY29uc3RhbnRzCiAgICAgICAgICAgIG1vZHVsZUNlbGxfMTogICAgImNvbHVtbiIsCiAgICAg
ICAgICAgIG1vdmFibGU6ICAgICAgICAgIm1vdmFibGUiLAogICAgICAgICAgICBmaXhlZDogICAg
ICAgICAgICJmaXhlZCIsCiAgICAgICAgICAgIHJlY2VudFN0YXR1czogICAgIm1vdmVkIGZyb20g
cG9zaXRpb24gJXBvc2l0aW9uIgogICAgICAgIH0sCiAgICAgICAgY29tcG9uZW50czogewogICAg
ICAgICAgICByZXNvbHZlcjogewogICAgICAgICAgICAgICAgdHlwZTogImZsdWlkLm1lc3NhZ2VS
ZXNvbHZlciIsCiAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZUJhc2U6ICJ7bGFiZWxsZXJ9Lm9wdGlvbnMuc3RyaW5ncyIKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgaW52b2tlcnM6IHsKICAgICAgICAg
ICAgcmVuZGVyTGFiZWw6IHsKICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiAiZmx1aWQucmVvcmRl
cmVyLmxhYmVsbGVyLnJlbmRlckxhYmVsIiwKICAgICAgICAgICAgICAgIGFyZ3M6IFsie2xhYmVs
bGVyfSIsICJAMCIsICJAMSJdCiAgICAgICAgICAgIH0gIAogICAgICAgIH0KICAgIH0pOwoKICAg
IC8vIHVuc3VwcG9ydGVkLCBOT04tQVBJIGZ1bmN0aW9uCiAgICAvLyBDb252ZXJ0IGZyb20gMC1i
YXNlZCB0byAxLWJhc2VkIGluZGljZXMgZm9yIGFubm91bmNlbWVudAogICAgZmx1aWQucmVvcmRl
cmVyLmluZGV4UmViYXNlciA9IGZ1bmN0aW9uIChpbmRpY2VzKSB7CiAgICAgICAgaW5kaWNlcy5p
bmRleCsrOwogICAgICAgIGlmIChpbmRpY2VzLm1vZHVsZUluZGV4ICE9PSB1bmRlZmluZWQpIHsK
ICAgICAgICAgICAgaW5kaWNlcy5tb2R1bGVJbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1
cm4gaW5kaWNlczsKICAgIH07CgogICAgLyoqKioqKioqKioqKioKICAgICAqIExhYmVsbGluZyAq
CiAgICAgKioqKioqKioqKioqKi8KICAgICAKICAgIGZsdWlkLnJlb3JkZXJlci5sYWJlbGxlciA9
IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdmFyIHRoYXQgPSBmbHVpZC5pbml0TGl0dGxl
Q29tcG9uZW50KCJmbHVpZC5yZW9yZGVyZXIubGFiZWxsZXIiLCBvcHRpb25zKTsKICAgICAgICBm
bHVpZC5pbml0RGVwZW5kZW50cyh0aGF0KTsKICAgICAgICB0aGF0LmRvbSA9IHRoYXQub3B0aW9u
cy5kb207CiAgICAgICAgCiAgICAgICAgdGhhdC5tb2R1bGVDZWxsID0gdGhhdC5yZXNvbHZlci5y
ZXNvbHZlKCJtb2R1bGVDZWxsXyIgKyB0aGF0Lm9wdGlvbnMub3JpZW50YXRpb24pOwogICAgICAg
IHZhciBsYXlvdXRUeXBlID0gZmx1aWQuY29tcHV0ZU5pY2tOYW1lKHRoYXQub3B0aW9ucy5sYXlv
dXRUeXBlKTsKICAgICAgICB0aGF0LnBvc2l0aW9uVGVtcGxhdGUgPSB0aGF0LnJlc29sdmVyLmxv
b2t1cChbInBvc2l0aW9uXyIgKyBsYXlvdXRUeXBlLCAicG9zaXRpb24iXSk7CiAgICAgICAgCiAg
ICAgICAgdmFyIG1vdmVkTWFwID0ge307CiAgICAgICAgCiAgICAgICAgdGhhdC5yZXR1cm5lZE9w
dGlvbnMgPSB7CiAgICAgICAgICAgIGxpc3RlbmVyczogewogICAgICAgICAgICAgICAgb25SZWZy
ZXNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGFibGVzID0g
dGhhdC5kb20ubG9jYXRlKCJzZWxlY3RhYmxlcyIpOwogICAgICAgICAgICAgICAgICAgIGZsdWlk
LmVhY2goc2VsZWN0YWJsZXMsIGZ1bmN0aW9uIChzZWxlY3RhYmxlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBsYWJlbE9wdGlvbnMgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGlkID0gZmx1aWQuYWxsb2NhdGVTaW1wbGVJZChzZWxlY3RhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1vdmVkID0gbW92ZWRNYXBbaWRdOwogICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbGFiZWwgPSB0aGF0LnJlbmRlckxhYmVsKHNlbGVjdGFibGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcGxhaW5MYWJlbCA9IGxhYmVsOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobW92ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVkLm5ld1Jl
bmRlciA9IHBsYWluTGFiZWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IHRo
YXQucmVuZGVyTGFiZWwoc2VsZWN0YWJsZSwgbW92ZWQub2xkUmVuZGVyLnBvc2l0aW9uKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQoc2VsZWN0YWJsZSkub25lKCJmb2N1c291dCIsIGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW92ZWRNYXBb
aWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRMYWJlbCA9
IG1vdmVkTWFwW2lkXS5uZXdSZW5kZXIubGFiZWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBtb3ZlZE1hcFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsdWlkLnVwZGF0ZUFyaWFMYWJlbChzZWxlY3RhYmxlLCBvbGRMYWJlbCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbE9wdGlvbnMuZHluYW1pY0xh
YmVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICBmbHVpZC51cGRhdGVBcmlhTGFiZWwoc2VsZWN0YWJsZSwgbGFiZWwubGFiZWwsIGxhYmVs
T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgb25Nb3ZlOiBmdW5jdGlvbiAoaXRlbSwgbmV3UG9zaXRpb24pIHsKICAgICAg
ICAgICAgICAgICAgICBmbHVpZC5jbGVhcihtb3ZlZE1hcCk7IC8vIGlmIHdlIHNvbWVob3cgd2Vy
ZSBmb29sZWQgaW50byBtaXNzaW5nIGEgZGVmb2N1cywgYXQgbGVhc3QgY2xlYXIgdGhlIG1hcCBv
biBhIDJuZCBtb3ZlCiAgICAgICAgICAgICAgICAgICAgdmFyIG1vdmluZ0lkID0gZmx1aWQuYWxs
b2NhdGVTaW1wbGVJZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICBtb3ZlZE1hcFttb3ZpbmdJ
ZF0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFJlbmRlcjogdGhhdC5yZW5kZXJMYWJl
bChpdGVtKQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGF0OwogICAgfTsKICAgIAogICAgZmx1
aWQucmVvcmRlcmVyLmxhYmVsbGVyLnJlbmRlckxhYmVsID0gZnVuY3Rpb24gKHRoYXQsIHNlbGVj
dGFibGUsIHJlY2VudFBvc2l0aW9uKSB7CiAgICAgICAgdmFyIGdlb20gPSB0aGF0Lm9wdGlvbnMu
Z2V0R2VvbWV0cmljSW5mbygpOwogICAgICAgIHZhciBpbmRpY2VzID0gZmx1aWQucmVvcmRlcmVy
LmluZGV4UmViYXNlcihnZW9tLmVsZW1lbnRJbmRleGVyKHNlbGVjdGFibGUpKTsKICAgICAgICBp
bmRpY2VzLm1vZHVsZUNlbGwgPSB0aGF0Lm1vZHVsZUNlbGw7CiAgICAgICAgICAgIAogICAgICAg
IHZhciBlbGVtZW50Q2xhc3MgPSBnZW9tLmVsZW1lbnRNYXBwZXIoc2VsZWN0YWJsZSk7CiAgICAg
ICAgdmFyIGxhYmVsU291cmNlID0gdGhhdC5kb20ubG9jYXRlKCJsYWJlbFNvdXJjZSIsIHNlbGVj
dGFibGUpOwogICAgICAgIHZhciByZWNlbnRTdGF0dXM7CiAgICAgICAgaWYgKHJlY2VudFBvc2l0
aW9uKSB7CiAgICAgICAgICAgIHJlY2VudFN0YXR1cyA9IHRoYXQucmVzb2x2ZXIucmVzb2x2ZSgi
cmVjZW50U3RhdHVzIiwge3Bvc2l0aW9uOiByZWNlbnRQb3NpdGlvbn0pOwogICAgICAgIH0KICAg
ICAgICB2YXIgdG9wTW9kZWwgPSB7CiAgICAgICAgICAgIGl0ZW06IHR5cGVvZiAobGFiZWxTb3Vy
Y2UpID09PSAic3RyaW5nIiA/IGxhYmVsU291cmNlIDogZmx1aWQuZG9tLmdldEVsZW1lbnRUZXh0
KGZsdWlkLnVud3JhcChsYWJlbFNvdXJjZSkpLAogICAgICAgICAgICBwb3NpdGlvbjogdGhhdC5w
b3NpdGlvblRlbXBsYXRlLnJlc29sdmVGdW5jKHRoYXQucG9zaXRpb25UZW1wbGF0ZS50ZW1wbGF0
ZSwgaW5kaWNlcyksCiAgICAgICAgICAgIG1vdmFibGU6IHRoYXQucmVzb2x2ZXIucmVzb2x2ZShl
bGVtZW50Q2xhc3MgPT09ICJsb2NrZWQiID8gImZpeGVkIiA6ICJtb3ZhYmxlIiksCiAgICAgICAg
ICAgIHJlY2VudFN0YXR1czogcmVjZW50U3RhdHVzIHx8ICIiCiAgICAgICAgfTsKICAgICAgICAK
ICAgICAgICB2YXIgdGVtcGxhdGUgPSB0aGF0LnJlc29sdmVyLmxvb2t1cChbIm92ZXJhbGxUZW1w
bGF0ZSJdKTsKICAgICAgICB2YXIgbGFiZWwgPSB0ZW1wbGF0ZS5yZXNvbHZlRnVuYyh0ZW1wbGF0
ZS50ZW1wbGF0ZSwgdG9wTW9kZWwpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHBvc2l0
aW9uOiB0b3BNb2RlbC5wb3NpdGlvbiwKICAgICAgICAgICAgbGFiZWw6IGxhYmVsCiAgICAgICAg
fTsKICAgIH07Cgp9KShqUXVlcnksIGZsdWlkXzFfNCk7Cl8QD3RleHQvamF2YXNjcmlwdNQFBgcI
cnN0dV8QTmh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9jb21wb25lbnRzL3Jl
b3JkZXJlci9qcy9JbWFnZVJlb3JkZXJlci5qc08RBClicGxpc3QwMNQBAgMEBQZiY1gkdmVyc2lv
blgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAdBwgiKCkwGzEySElKS0xNTk9QUVJTVFVW
V1hbXF1VJG51bGzdCQoLDA0ODxAREhMUFRYXGBkaGxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQx
MVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAIEAeACIACEACAGoAcgAWAG4AGEAHTIxAkJSYn
V05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEE5odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxl
YXNlcy8xLjQvY29tcG9uZW50cy9yZW9yZGVyZXIvanMvSW1hZ2VSZW9yZGVyZXIuanPSKissLVok
Y2xhc3NuYW1lWCRjbGFzc2VzVU5TVVJMoi4vVU5TVVJMWE5TT2JqZWN0I0G40QAvBQMQEMjTMzQQ
NT5HV05TLmtleXNaTlMub2JqZWN0c6g2Nzg5Ojs8PYAJgAqAC4AMgA2ADoAPgBCoP0BBQkNERUaA
EYASgBOAFIAVgBaAF4AYgBlWU2VydmVyXENvbnRlbnQtVHlwZVRFdGFnXUxhc3QtTW9kaWZpZWRU
RGF0ZV1BY2NlcHQtUmFuZ2VzXkNvbnRlbnQtTGVuZ3RoWkNvbm5lY3Rpb25fEBZBcGFjaGUvMi4y
LjE1IChDZW50T1MpXxAPdGV4dC9qYXZhc2NyaXB0XxAbIjRlMDM1NS0xODA3LTRhZjMzZDAxM2U0
MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIw
OjUwOjU0IEdNVFVieXRlc1Q2MTUxVWNsb3Nl0iorWVpcTlNEaWN0aW9uYXJ5olkvERgHXxAPdGV4
dC9qYXZhc2NyaXB00iorXl9fEBFOU0hUVFBVUkxSZXNwb25zZaNgYS9fEBFOU0hUVFBVUkxSZXNw
b25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0WRlXxATV2ViUmVzb3VyY2VSZXNw
b25zZYABAAgAEQAaACMALQAyADcAVwBdAHgAewB/AIIAhQCIAIwAjwCWAJkAnACfAKIApQCnAKkA
qwCtAK8AsQCzALUAtwC5ALsAvQDEAMwA2ADaANwA3gEvATQBPwFIAU4BUQFXAWABaQFrAXIBegGF
AY4BkAGSAZQBlgGYAZoBnAGeAacBqQGrAa0BrwGxAbMBtQG3AbkBwAHNAdIB4AHlAfMCAgINAiYC
OAJWAnYClgKcAqECpwKsArkCvAK/AtEC1gLqAu4DAgMQAyIDJQM7AAAAAAAAAgEAAAAAAAAAZgAA
AAAAAAAAAAAAAAAAAz1PERgHLyoKQ29weXJpZ2h0IDIwMDgtMjAwOSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZQpDb3B5cmlnaHQgMjAwOC0yMDA5IFVuaXZlcnNpdHkgb2YgVG9yb250bwpDb3B5cmln
aHQgMjAxMC0yMDExIEx1Y2VuZG8gRGV2ZWxvcG1lbnQgTHRkLgpDb3B5cmlnaHQgMjAxMSBPQ0FE
IFVuaXZlcnNpdHkKCkxpY2Vuc2VkIHVuZGVyIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGlj
ZW5zZSAoRUNMKSwgVmVyc2lvbiAyLjAgb3IgdGhlIE5ldwpCU0QgbGljZW5zZS4gWW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIG9uZSB0aGVzZQpMaWNl
bnNlcy4KCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgRUNMIDIuMCBMaWNlbnNlIGFuZCBC
U0QgTGljZW5zZSBhdApodHRwczovL2dpdGh1Yi5jb20vZmx1aWQtcHJvamVjdC9pbmZ1c2lvbi9y
YXcvbWFzdGVyL0luZnVzaW9uLUxJQ0VOU0UudHh0CiovCgovLyBEZWNsYXJlIGRlcGVuZGVuY2ll
cwovKmdsb2JhbCBmbHVpZF8xXzQ6dHJ1ZSwgalF1ZXJ5Ki8KCi8vIEpTTGludCBvcHRpb25zIAov
KmpzbGludCB3aGl0ZTogdHJ1ZSwgZnVuY2ludm9rZTogdHJ1ZSwgdW5kZWY6IHRydWUsIG5ld2Nh
cDogdHJ1ZSwgbm9tZW46IHRydWUsIHJlZ2V4cDogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgYnJvd3Nl
cjogdHJ1ZSwgZm9yaW46IHRydWUsIG1heGVycjogMTAwLCBpbmRlbnQ6IDQgKi8KCnZhciBmbHVp
ZF8xXzQgPSBmbHVpZF8xXzQgfHwge307CgooZnVuY3Rpb24gKCQsIGZsdWlkKSB7CiAgICAKICAg
IHZhciBkZXJpdmVMaWdodGJveENlbGxCYXNlID0gZnVuY3Rpb24gKG5hbWViYXNlLCBpbmRleCkg
ewogICAgICAgIHJldHVybiBuYW1lYmFzZSArICJsaWdodGJveC1jZWxsOiIgKyBpbmRleCArICI6
IjsKICAgIH07CiAgICAgICAgICAgIAogICAgdmFyIGFkZFRodW1ibmFpbEFjdGl2YXRlSGFuZGxl
ciA9IGZ1bmN0aW9uIChjb250YWluZXIpIHsKICAgICAgICB2YXIgZW50ZXJLZXlIYW5kbGVyID0g
ZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICBpZiAoZXZ0LndoaWNoID09PSBmbHVpZC5yZW9y
ZGVyZXIua2V5cy5FTlRFUikgewogICAgICAgICAgICAgICAgdmFyIHRodW1ibmFpbEFuY2hvcnMg
PSAkKCJhIiwgZXZ0LnRhcmdldCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbiA9
IHRodW1ibmFpbEFuY2hvcnMuYXR0cigiaHJlZiIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsK
ICAgICAgICAKICAgICAgICBjb250YWluZXIua2V5cHJlc3MoZW50ZXJLZXlIYW5kbGVyKTsKICAg
IH07CiAgICAKICAgIC8vIEN1c3RvbSBxdWVyeSBtZXRob2Qgc2Vla3MgYWxsIHRhZ3MgZGVzY2Vu
ZGVkIGZyb20gYSBnaXZlbiByb290IHdpdGggYSAKICAgIC8vIHBhcnRpY3VsYXIgdGFnIG5hbWUs
IHdob3NlIGlkIG1hdGNoZXMgYSByZWdleC4KICAgIHZhciBzZWVrTm9kZXNCeUlkID0gZnVuY3Rp
b24gKHJvb3Rub2RlLCB0YWduYW1lLCBpZG1hdGNoKSB7CiAgICAgICAgdmFyIGlucHV0cyA9IHJv
b3Rub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ25hbWUpOwogICAgICAgIHZhciB0b2dvID0g
W107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpICs9IDEpIHsK
ICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRzW2ldOwogICAgICAgICAgICB2YXIgaWQgPSBp
bnB1dC5pZDsKICAgICAgICAgICAgaWYgKGlkICYmIGlkLm1hdGNoKGlkbWF0Y2gpKSB7CiAgICAg
ICAgICAgICAgICB0b2dvLnB1c2goaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHJldHVybiB0b2dvOwogICAgfTsKICAgIAogICAgdmFyIGNyZWF0ZUltYWdlQ2VsbEZpbmRl
ciA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBjb250YWluZXJJZCkgewogICAgICAgIHBhcmVudE5v
ZGUgPSBmbHVpZC51bndyYXAocGFyZW50Tm9kZSk7CiAgICAgICAgCiAgICAgICAgdmFyIGxpZ2h0
Ym94Q2VsbE5hbWVQYXR0ZXJuID0gIl4iICsgZGVyaXZlTGlnaHRib3hDZWxsQmFzZShjb250YWlu
ZXJJZCwgIlswLTldKyIpICsgIiQiOwogICAgICAgIAogICAgICAgIHJldHVybiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIC8vIFRoaXMgb3JkZXJhYmxlIGZpbmRlciBhc3N1bWVzIHRoYXQgdGhl
IGxpZ2h0Ym94IHRodW1ibmFpbHMgYXJlICdkaXYnIGVsZW1lbnRzCiAgICAgICAgICAgIHJldHVy
biBzZWVrTm9kZXNCeUlkKHBhcmVudE5vZGUsICJkaXYiLCBsaWdodGJveENlbGxOYW1lUGF0dGVy
bik7CiAgICAgICAgfTsKICAgIH07CiAgICAKICAgIHZhciBzZWVrRm9ybSA9IGZ1bmN0aW9uIChj
b250YWluZXIpIHsKICAgICAgICByZXR1cm4gZmx1aWQuZmluZEFuY2VzdG9yKGNvbnRhaW5lciwg
ZnVuY3Rpb24gKGVsZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuICQoZWxlbWVudCkuaXMoImZv
cm0iKTsKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIHZhciBzZWVrSW5wdXRzID0gZnVuY3Rp
b24gKGNvbnRhaW5lciwgcmVvcmRlcmZvcm0pIHsKICAgICAgICByZXR1cm4gc2Vla05vZGVzQnlJ
ZChyZW9yZGVyZm9ybSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlucHV0IiwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4iICsgZGVyaXZlTGlnaHRib3hDZWxsQmFzZShj
b250YWluZXIucHJvcCgiaWQiKSwgIlteOl0qIikgKyAicmVvcmRlci1pbmRleCQiKTsKICAgIH07
CiAgICAKICAgIHZhciBtYXBJZHNUb05hbWVzID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgcmVvcmRl
cmZvcm0pIHsKICAgICAgICB2YXIgaW5wdXRzID0gc2Vla0lucHV0cyhjb250YWluZXIsIHJlb3Jk
ZXJmb3JtKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykg
ewogICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dHNbaV07CiAgICAgICAgICAgIHZhciBuYW1l
ID0gaW5wdXQubmFtZTsKICAgICAgICAgICAgaW5wdXQubmFtZSA9IG5hbWUgfHwgaW5wdXQuaWQ7
CiAgICAgICAgfQogICAgfTsKICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZGVmYXVsdCBh
ZnRlck1vdmUgbGlzdGVuZXIgdXNpbmcgdGhlIGlkLWJhc2VkLCBmb3JtLWRyaXZlbiBzY2hlbWUg
Zm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgc2VydmVyLgogICAgICogSXQgaXMgaW1wbGVtZW50
ZWQgYnkgbmVzdGluZyBoaWRkZW4gZm9ybSBmaWVsZHMgaW5zaWRlIGVhY2ggdGh1bWJuYWlsIGNv
bnRhaW5lci4gVGhlIHZhbHVlIG9mIHRoZXNlIGZvcm0gZWxlbWVudHMKICAgICAqIHJlcHJlc2Vu
dCB0aGUgb3JkZXIgZm9yIGVhY2ggaW1hZ2UuIFRoaXMgZGVmYXVsdCBsaXN0ZW5lciBzdWJtaXRz
IHRoZSBmb3JtJ3MgZGVmYXVsdCAKICAgICAqIGFjdGlvbiB2aWEgQUpBWC4KICAgICAqIAogICAg
ICogQHBhcmFtIHtqUXVlcnlhYmxlfSBjb250YWluZXIgdGhlIEltYWdlIFJlb3JkZXJlcidzIGNv
bnRhaW5lciBlbGVtZW50IAogICAgICovCiAgICB2YXIgY3JlYXRlSURBZnRlck1vdmVMaXN0ZW5l
ciA9IGZ1bmN0aW9uIChjb250YWluZXIpIHsKICAgICAgICB2YXIgcmVvcmRlcmZvcm0gPSBzZWVr
Rm9ybShjb250YWluZXIpOwogICAgICAgIG1hcElkc1RvTmFtZXMoY29udGFpbmVyLCByZW9yZGVy
Zm9ybSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
dmFyIGlucHV0cywgaTsKICAgICAgICAgICAgaW5wdXRzID0gc2Vla0lucHV0cyhjb250YWluZXIs
IHJlb3JkZXJmb3JtKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBp
bnB1dHMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgIGlucHV0c1tpXS52YWx1ZSA9
IGk7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYgKHJlb3JkZXJmb3JtICYm
IHJlb3JkZXJmb3JtLmFjdGlvbikgewogICAgICAgICAgICAgICAgdmFyIG9yZGVyID0gJChyZW9y
ZGVyZm9ybSkuc2VyaWFsaXplKCk7CiAgICAgICAgICAgICAgICAkLnBvc3QocmVvcmRlcmZvcm0u
YWN0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICBvcmRlciwKICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbiAodHlwZSwgZGF0YSwgZXZ0KSB7IC8qIE5vLW9wIHJlc3BvbnNlICovIH0p
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH07CgogICAgCiAgICB2YXIgc2V0RGVmYXVs
dFZhbHVlID0gZnVuY3Rpb24gKHRhcmdldCwgcGF0aCwgdmFsdWUpIHsKICAgICAgICB2YXIgcHJl
dmlvdXNWYWx1ZSA9IGZsdWlkLmdldCh0YXJnZXQsIHBhdGgpOwogICAgICAgIHZhciB2YWx1ZVRv
U2V0ID0gcHJldmlvdXNWYWx1ZSB8fCB2YWx1ZTsKICAgICAgICBmbHVpZC5zZXQodGFyZ2V0LCBw
YXRoLCB2YWx1ZVRvU2V0KTsKICAgIH07CiAgICAKICAgIC8vIFB1YmxpYyBMaWdodGJveCBBUEkK
ICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBMaWdodGJveCBpbnN0YW5jZSBmcm9tIHRoZSBz
cGVjaWZpZWQgcGFyYW1ldGVycywgcHJvdmlkaW5nIGZ1bGwgY29udHJvbCBvdmVyIGhvdwogICAg
ICogdGhlIExpZ2h0Ym94IGlzIGNvbmZpZ3VyZWQuCiAgICAgKiAKICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBjb250YWluZXIgCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAKICAgICAqLwog
ICAgZmx1aWQucmVvcmRlckltYWdlcyA9IGZ1bmN0aW9uIChjb250YWluZXIsIG9wdGlvbnMpIHsK
ICAgICAgIC8vIFRPRE86IGZpeCB1cCB0aGlzIG5vbnN0YW5kYXJkIHdvcmtmbG93IG9uY2Ugd2Ug
SW9DLWlmeSByZW9yZGVyZXIgYW5kIGltcGxlbWVudCBzdGFuZGFyZAogICAgICAgLy8gd3JhcHBl
ciBmYWNpbGl0eQogICAgICAgIHZhciBkZWZhdWx0cyA9IGZsdWlkLmRlZmF1bHRzKCJmbHVpZC5y
ZW9yZGVySW1hZ2VzIik7CiAgICAgICAgdmFyIG1lcmdlZE9wdGlvbnMgPSBmbHVpZC5tZXJnZShk
ZWZhdWx0cy5tZXJnZVBvbGljeSwge30sIGRlZmF1bHRzLCBvcHRpb25zKTsKICAgICAgICBjb250
YWluZXIgPSBmbHVpZC5jb250YWluZXIoY29udGFpbmVyKTsKICAgICAgICAKICAgICAgICAvLyBJ
ZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSB0aGVpciBvd24gYWZ0ZXJNb3ZlIG9yIG1vdmFibGVz
IG9wdGlvbnMsCiAgICAgICAgLy8gc2V0IHVwIGRlZmF1bHRzIGZvciB0aGVtIHVzaW5nIHRoZSBv
bGQgaWQtYmFzZWQgc2NoZW1lLgogICAgICAgIC8vIEJhY2t3YXJkcyBBUEkgY29tcGF0aWJsaXR5
LiBSZW1vdmUgcmVmZXJlbmNlcyB0byBhZnRlck1vdmVDYWxsYmFjayBieSBJbmZ1c2lvbiAxLjUu
CiAgICAgICAgc2V0RGVmYXVsdFZhbHVlKG1lcmdlZE9wdGlvbnMsICJsaXN0ZW5lcnMuYWZ0ZXJN
b3ZlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZE9wdGlvbnMuYWZ0ZXJNb3ZlQ2Fs
bGJhY2sgfHwgY3JlYXRlSURBZnRlck1vdmVMaXN0ZW5lcihjb250YWluZXIpKTsKICAgICAgICBz
ZXREZWZhdWx0VmFsdWUobWVyZ2VkT3B0aW9ucywgInNlbGVjdG9ycy5tb3ZhYmxlcyIsIAogICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVJbWFnZUNlbGxGaW5kZXIoY29udGFpbmVyLCBjb250
YWluZXIucHJvcCgiaWQiKSkpOwogICAgICAgIAogICAgICAgIHZhciByZW9yZGVyZXIgPSBmbHVp
ZC5yZW9yZGVyZXIoY29udGFpbmVyLCBtZXJnZWRPcHRpb25zKTsKICAgICAgICAKICAgICAgICBm
bHVpZC50YWJpbmRleCgkKCJhIiwgY29udGFpbmVyKSwgLTEpOwogICAgICAgIGFkZFRodW1ibmFp
bEFjdGl2YXRlSGFuZGxlcihjb250YWluZXIpOwogICAgICAgIAogICAgICAgIHJldHVybiByZW9y
ZGVyZXI7CiAgICB9OwogICAKICAgIC8vIFRoaXMgZnVuY3Rpb24gbm93IGRlcHJlY2F0ZWQuIFBs
ZWFzZSB1c2UgZmx1aWQucmVvcmRlckltYWdlcygpIGluc3RlYWQuCiAgICBmbHVpZC5saWdodGJv
eCA9IGZsdWlkLnJlb3JkZXJJbWFnZXM7CiAgICAKICAgIGZsdWlkLmRlZmF1bHRzKCJmbHVpZC5y
ZW9yZGVySW1hZ2VzIiwgewogICAgICAgIGxheW91dEhhbmRsZXI6ICJmbHVpZC5ncmlkTGF5b3V0
SGFuZGxlciIsCgogICAgICAgIHNlbGVjdG9yczogewogICAgICAgICAgICBsYWJlbFNvdXJjZTog
Ii5mbGMtcmVvcmRlcmVyLWltYWdlVGl0bGUiCiAgICAgICAgfQogICAgfSk7Cgp9KShqUXVlcnks
IGZsdWlkXzFfNCk7Cl8QD3RleHQvamF2YXNjcmlwdNQFBgcId3h5el8QXGh0dHA6Ly9mbHVpZHBy
b2plY3Qub3JnL3JlbGVhc2VzLzEuNC9kZW1vcy9yZW9yZGVyZXIvaW1hZ2VSZW9yZGVyZXIvanMv
aW1hZ2VSZW9yZGVyZXJEZW1vLmpzTxEENmJwbGlzdDAw1AECAwQFBmJjWCR2ZXJzaW9uWCRvYmpl
Y3RzWSRhcmNoaXZlclQkdG9wEgABhqCvEB0HCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcXVUk
bnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNTJDExUiQ4ViRj
bGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagByABYAbgAYQAdMjECQlJidXTlMuYmFz
ZVtOUy5yZWxhdGl2ZYAAgASAA18QXGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEu
NC9kZW1vcy9yZW9yZGVyZXIvaW1hZ2VSZW9yZGVyZXIvanMvaW1hZ2VSZW9yZGVyZXJEZW1vLmpz
0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIuL1VOU1VSTFhOU09iamVjdCNBuNEALuJa
BBDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD9A
QUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1v
ZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBh
Y2hlLzIuMi4xNSAoQ2VudE9TKV8QD3RleHQvamF2YXNjcmlwdF8QGiI0ZTA1NDgtNDI2LTRhZjMz
ZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAy
MDE0IDIwOjUwOjU0IEdNVFVieXRlc1QxMDYyVWNsb3Nl0iorWVpcTlNEaWN0aW9uYXJ5olkvEQQm
XxAPdGV4dC9qYXZhc2NyaXB00iorXl9fEBFOU0hUVFBVUkxSZXNwb25zZaNgYS9fEBFOU0hUVFBV
UkxSZXNwb25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0WRlXxATV2ViUmVzb3Vy
Y2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAVwBdAHgAewB/AIIAhQCIAIwAjwCWAJkAnACfAKIA
pQCnAKkAqwCtAK8AsQCzALUAtwC5ALsAvQDEAMwA2ADaANwA3gE9AUIBTQFWAVwBXwFlAW4BdwF5
AYABiAGTAZwBngGgAaIBpAGmAagBqgGsAbUBtwG5AbsBvQG/AcEBwwHFAccBzgHbAeAB7gHzAgEC
EAIbAjQCRgJjAoMCowKpAq4CtAK5AsYCyQLMAt4C4wL3AvsDDwMdAy8DMgNIAAAAAAAAAgEAAAAA
AAAAZgAAAAAAAAAAAAAAAAAAA0pPEQQmLyoKQ29weXJpZ2h0IDIwMDctMjAwOSBVbml2ZXJzaXR5
IG9mIENhbWJyaWRnZQpDb3B5cmlnaHQgMjAwNy0yMDA5IFVuaXZlcnNpdHkgb2YgVG9yb250bwpD
b3B5cmlnaHQgMjAwNy0yMDA5IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkKQ29w
eXJpZ2h0IDIwMTAgT0NBRCBVbml2ZXJzaXR5CgpMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9u
YWwgQ29tbXVuaXR5IExpY2Vuc2UgKEVDTCksIFZlcnNpb24gMi4wIG9yIHRoZSBOZXcKQlNEIGxp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCBvbmUgdGhlc2UKTGljZW5zZXMuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVDTCAy
LjAgTGljZW5zZSBhbmQgQlNEIExpY2Vuc2UgYXQKaHR0cHM6Ly9naXRodWIuY29tL2ZsdWlkLXBy
b2plY3QvaW5mdXNpb24vcmF3L21hc3Rlci9JbmZ1c2lvbi1MSUNFTlNFLnR4dAoqLwoKLy8gRGVj
bGFyZSBkZXBlbmRlbmNpZXMKLypnbG9iYWwgZGVtbzp0cnVlLCBmbHVpZCwgalF1ZXJ5Ki8KCi8v
IEpTTGludCBvcHRpb25zIAovKmpzbGludCB3aGl0ZTogdHJ1ZSwgZnVuY2ludm9rZTogdHJ1ZSwg
dW5kZWY6IHRydWUsIG5ld2NhcDogdHJ1ZSwgbm9tZW46IHRydWUsIHJlZ2V4cDogdHJ1ZSwgYml0
d2lzZTogdHJ1ZSwgYnJvd3NlcjogdHJ1ZSwgZm9yaW46IHRydWUsIG1heGVycjogMTAwLCBpbmRl
bnQ6IDQgKi8KCnZhciBkZW1vID0gZGVtbyB8fCB7fTsKKGZ1bmN0aW9uICgkLCBmbHVpZCkgewog
ICAgICAgIAogICAgZGVtby5mb3JtQmFzZWRJbWFnZVJlb3JkZXJlciA9IGZ1bmN0aW9uICgpIHsK
ICAgICAgICB2YXIgcmVvcmRlcmVyID0gZmx1aWQucmVvcmRlckltYWdlcygiLmZsYy1pbWFnZVJl
b3JkZXJlciIsIHsKICAgICAgICAgICAgc2VsZWN0b3JzOiB7CiAgICAgICAgICAgICAgICBtb3Zh
YmxlczogIi5mbGMtaW1hZ2VSZW9yZGVyZXItaXRlbSIKICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgZGlzYWJsZVdyYXA6IHRydWUKICAgICAgICB9KTsgIAogICAgfTsKfSkoalF1ZXJ5LCBmbHVp
ZCk7XxAPdGV4dC9qYXZhc2NyaXB01AUGBwh8fX5/XxBQaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcv
cmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRlcmVyL2ltYWdlcy9EcmFnb25mcnVpdC5qcGdP
EQQPYnBsaXN0MDDUAQIDBAUGYWJYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGG
oK8QHAcIIigpMBsxMkhJSktMTU5PUFFSU1RVVldYW1xVJG51bGzdCQoLDA0ODxAREhMUFRYXGBka
GxwdHh8XICFSJDZTJDEwUiQyUiQ3UiQzUyQxMVIkOFYkY2xhc3NSJDRSJDlSJDBSJDVSJDGABxAI
EAeACIACEACAGoAbgAWAEoAGEAHTIxAkJSYnV05TLmJhc2VbTlMucmVsYXRpdmWAAIAEgANfEFBo
dHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvY29tcG9uZW50cy9yZW9yZGVyZXIv
aW1hZ2VzL0RyYWdvbmZydWl0LmpwZ9IqKywtWiRjbGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiLi9V
TlNVUkxYTlNPYmplY3QjQbjRAC9iSzQQyNMzNBA1PkdXTlMua2V5c1pOUy5vYmplY3RzqDY3ODk6
Ozw9gAmACoALgAyADYAOgA+AEKg/H0FCQ0RFRoARgBKAE4AUgBWAFoAXgBiAGVZTZXJ2ZXJcQ29u
dGVudC1UeXBlVEV0YWddTGFzdC1Nb2RpZmllZFREYXRlXUFjY2VwdC1SYW5nZXNeQ29udGVudC1M
ZW5ndGhaQ29ubmVjdGlvbl8QFkFwYWNoZS8yLjIuMTUgKENlbnRPUylaaW1hZ2UvanBlZ18QGyI0
ZTAzNDktMTEwMS00YWYzM2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIwMTEgMjA6MTY6MTYgR01U
XxAdV2VkLCAxMiBNYXIgMjAxNCAyMDo1MDo1NSBHTVRVYnl0ZXNUNDM1M1VjbG9zZdIqK1laXE5T
RGljdGlvbmFyeaJZLxERAdIqK11eXxARTlNIVFRQVVJMUmVzcG9uc2WjX2AvXxARTlNIVFRQVVJM
UmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFjZF8QE1dlYlJlc291cmNl
UmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFYAXAB3AHoAfgCBAIQAhwCLAI4AlQCYAJsAngChAKQA
pgCoAKoArACuALAAsgC0ALYAuAC6ALwAwwDLANcA2QDbAN0BMAE1AUABSQFPAVIBWAFhAWoBbAFz
AXsBhgGPAZEBkwGVAZcBmQGbAZ0BnwGoAaoBrAGuAbABsgG0AbYBuAG6AcEBzgHTAeEB5gH0AgMC
DgInAjICUAJwApAClgKbAqECpgKzArYCuQK+AtIC1gLqAvgDCgMNAyMAAAAAAAACAQAAAAAAAABl
AAAAAAAAAAAAAAAAAAADJU8REQH/2P/gABBKRklGAAEBAQBIAEgAAP/bAEMACAYGBwYFCAcHBwkJ
CAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMB
CQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMv/AABEIAGQAlgMBIQACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAEBQMGAAECB//E
ADcQAAIBAwIEAwUHBAIDAAAAAAECAwAEERIhBRMxQSJRYQYUMnGBI0KRobHB4VJi0fAz8YKy0v/E
ABkBAAMBAQEAAAAAAAAAAAAAAAECAwQABf/EACURAAICAgICAgIDAQAAAAAAAAABAhEDIRIxBEET
IjJRI2Fxwf/aAAwDAQACEQMRAD8A9GdEiXVp+gFbjiDKeYuM9AKxvujQQXUVy0r8lSVUDcbb0AGv
luAjFw7EDH8VCampa6LR4tbCpLO2lhW3mjlLxjCkr39DXMXCIBF9vAinqHX4s0ZQTlYFNqNDKCMB
AF8QHc0FxBWmK2xwOa2Nh0Xqf99ar6JewlolSAlkGAOhFU68v5veCiaUO52HaoZZNdF8ST7FbpIs
hcFs/wB3SmvCeJzr9jHaveSEeNBgIvlkmu8eHORp+NTW3S9sbyLx+4jMnMs7VAPhALYHzoPm8fht
HZXguoWBwQuksCOqnoRXofFGgwn4L+jT/wBv/gbwbjttdMtodcN1GMNFJ128qMTickl60AXGnIrN
KLjoy58Pxza7XoPUtIobOT8q75kvXSDnsKZIzs0zA41I30rK4B2FUjB6dqwsc6U2Y/gB50xx3gQp
jVsK4ijB+0HjY/ePb1oVboIFecWtrSUqAZnHdCMA+WaCX2ksZLp0uVlh0NpBK6h+W9JFqUnFGrD4
s8qfHsbw3ETQCWCVJoz95TmglvBJdyzsudB5aLg9ep/ai7RncXF09M3NdtKjpgqCOmKVjhMPuLzs
+XLElifhArJNOTLw10JbeEcWnkAl5VhF8Tk4aTt9BmnNlbiAMialij8JihIzE22AR3bfJPTAr0PH
xfHBL2HzMtfxR9d/6M7i4SG3DzQzNG22yf8AGCO47/zXN5ac2ySENoAx9wNjHQ7+WKueemV7i9on
ERz7MSLewgSxSBCAwz0z36Uz9mbxb9jKTpd0yVPXOdx9DUskb2eipPJ4++4lk5WnAXfNbZHCnScG
pmI0EcDDYJ86yiACW51DbH0Peuue8BCsVLv9f9ApUx6IbziQsrRnZAWGw1b5J7/vVQe/u71lNxM7
xZHgx1HoBQlGzd4mFSi5M6ubtDCsVtEyKpJ1t8RNBrEpUnGFXemhBQVnqePD4YW+2biuZrRuZbzO
jHrp7/Md6svA+LwS6be4BSUnZ85Vj+xoypkfMwLLHnH8kM7yaPOFwO2f4qvXUsnF7g8PgbNtGQZm
zgMey5rPijzyWYMC4pzfoc2cSfYyGGSNAhjETRgb52z5dKMNsHnJeVcHxKirgr65r0DzZScnbBp3
Njru2j5saqsahMl8atyfkDnbepL24RLVucgEBHidiANzjGPrXCglykKW8MEiK6FlUgtp3XcYA9e3
pVbE78K4pJNBkAyrKo6DxAhhjyyp/GhLo3eHtuP7PQIbuK4tormP4HQPmuY7pHkZcEZwevSsjlTo
i4NWS8z16eVZTiFedDZpls/2g9zRUETMTNOjLIVxhjnC0i0O9iD2iuxzRACQqDJGepP8UBbyIIAN
JLNtt1p0/Z6+BccKOmYLEMdCM4zQfNZiTjG3SnkzRYBPPy33Xcg5HlWWl3qkUHzGBnG9KnaKpurH
y30rW0kAYmdE1KGbcfXvTzg3DFgsYBpWSRQZGy22sjY/zRxQStnleW1DFS9sOjK2iNJI4URRgCPm
FlHc/PfbJqCLiTTyc61RJNT8tssUKjTkZyNz222q55BLdvGpk0cwSoNYx1JP3QTtvgD61FNMy2Ed
zJE4CINcbZkbfsMdTnG9AINeTSlWWPQswAeMk5DLnxb4wO486rd5MATE7vITADrkYFmIc4bbbp+t
CXRq8NXkLV7JXDScLeBjqRemewP85pxCvK1Oq6mBx8xmssk+Q2bU2gtNLA5wRmsqhnFEKe9XHvU2
cIMRp5HzouaROSScZx5UjGR53xO6E9xJKxA1knf8vyqKzuU0FMAuHBUjbqMU6X1PbimsaRHLfxwK
dgCTggjBFQycShVOYvxAbDPeu/JFWuSF0szSgzaUBJOMnrUdtKMklRqG+c0t6Oixsk7q8M2rBfJU
dyBgH89vpVotrxHgRvtG0+KPltgg+X1GRTY5bMnkwU8Y14jBFNHLAzYEqKzRlAdKg+WN8nqD60qu
o5FURRwyyQRxho3jc4dmycZJ+HOP+queGQcLjKwzXYZZHIVHj1NIhk2OWJ3wNtx605sLfNq0uucS
TPzW5mQV/twTsB5UTjiZhcwFZAowCjwkgj64/T1qicenVONNFCmlbaJY9C9gNyBj50s+jf4C+7f9
Fo9jrsi6EQOoSLggfdHUGrNfXiWSnW51N8Kg1nb0L5C/kIuF37TNIFJ09QTvWUqk6JOKskeaNAqB
sL004O5qC/kSKzmIbxcsk/hRZ0NtHmvGrgpIEBOc4wDQ1hcHmBjsTjbPSmT0e1F6oIu+Hs9wrxsS
g3zk4APb5UFcQ2+slpDqG+U6H5edJGSWgQdaOJbUs4ALBgoyM+e9CNKY30RMC2cZNc2n0O3WzQ4x
KJ9F0SZVUJGy7DSO2PP9aPteKPGdCtIY2xsHxgn070qtMRSSVF/4HxVuKcODIAZx/wArMuVbbG/f
oKYHlRxQXUrEK0enkshG5wR4e2MVri7R4meHDI4mWTx3dqkkyGP3saTbyAkA43A26YrtrNo4Zecy
xiRtQEGQVPTOfPpTERab+KMP4pWjtwC0zLnI3G5PU7b/ADrzK4uXubySck5lkLEAb7nYftSZHo9P
wlUZSLt7Hw3F1NIbdkVo0J1FR6D6irfPwl54Uae4Ak+HYZ27CsxHLK5WTw2xgTlwcvbyHWspkRdE
duky5kkfGfu9l8hQ3FCX4bc4A+A10ug4/wAkecy+6SRidnLO6b98fKhYoQhLFgE7N50i/HR7CTpH
FzdsgKBtS7eE75qD3yURSEJq0sNK5xkn/qk12LP9i9uI3+Wdrgp/aowaGjunZvjIydzinil2LGTf
Zq4hE+NMmo+ZGMGpYrZ21PgFc4GnYbelF9B4pu2W32WeSOcJJrXHiyr4yR0z/uKs9nfzFmt2kRmg
BBlYkkEjIBz1O++/aq4H9Tz/ADkvktfoKl4w7TwLHPGqB1DMu5Zv6CO2Rg0RxDiIiTnmQ6F04Ggs
Ou52371dGOioe1HGEaNrG1K6dWqdxtqP9P8AmqeH1TwgZySWA+Qx+pqGR26PZjD48Kj7Z6h7D2Yj
sbiU5CkiMYPXG5/WrascYONTZx0Y1JJGHK/szCsZxpXceRrKJIB5x0kBj4vPtS+/kkNuLePQZJTp
77L3NB7Yy0eYTQNZXt9w9tpImLD5HcUtad0uFGo4z0PzoR6o9fHLlG0GK5kVSd26H6bVubMES5Hj
Jyd++On0FTRzQouJA5IXfzNCF8HGarEn0E8wJFkEFutMI5dKqD0UAUr7DC2HWPEVgnLltOFO6rk/
h3qxW1ylzO06nUrBSjF8qcZ3A+vXvVsPRg81fZP+iaV4ivNdVaZS2NO2c/wBSDintTLGXghce8nw
lkYlY1/+qq3SF8TD8k1fSK894XQ5Y6R/p+tMeBWMvEr1IlU63wB/avUms7PQzS3Z6lDGvDUEVuzK
oQEA98dc0zivEnt1LOoJypOe4qcX6Z5097JWkjjGnmgdCKyn5JexKYplvEt7d5pXwqjJI7Utt7qZ
zzpFw8m5B+4vZa5jIXccgsZX98m0x3CLoMqn4l/pYdx+lU67s0urhXs3EmW+FQcgdCSPL1oXRs8f
Ioxphgs5bSD3iRfCuoj1JJxSi5M0o5jnGQMnsoP7mpLZqvQquZTGxU+H0PX60OG+9mrIk2rCrWN5
vtTgIDgf3H/FT3E4iHibGN6D7DGVRbILPiKx3gnkRmVM4VTuD5mmq+0yx28UccUzOnVjp8Q8vSrQ
qKFl4zzpSsDvPaC8uyVDC1iPUIcsRS0SoBpU4HU570spWUUI4Y8Y9ki3ChgvxHso3q8eyWq3YXzu
A52VV3AHc+tJLSM2Saqi+ySc/DjuARt9a3ykFpIcbgatj3peFuzLyrRHA5kY6HxpGMZ7VlIkESzX
C3d4wbPJtyAVPRn9flXCjlan1F3c5JJ6eQqgBZxO5Q61kEZUqVYuNt6pXGLu54HfxTW+iRHGteuM
HsSOtMkmwttIccM9p4+MWKQiFoXjcI0bHWvTYg/jsaC488ll4M6ZR949Fz3+Z/KpOPGfE0xyt4+R
T5nGskzBz61xAXkmAVtKE4ZvIVprRmTt97LFLxS1tbYLGQdK4FVu74hNcuSdl7Cp4sb7Y+bNS4xB
Q7qdQYg/OphezYwzuf8AyNaHFMzRzTh0zYu5ey5rYup38PQd8ChwQ3zzZZ/ZzhiXcjGZAVBBIPQ/
Or3bWgs0AjXQgyFC9OtSkcmWK24gFiUFASAO/rR3DpHuLaYuADuBv50qd6OapEtraAFmmOk9M5xm
soLHo5zK5HDHZ2kcEasSBksdyT3JPr1ric6YiwX8K5joqfFZI59Ucc2hkUibIyFB3x60iDzXFits
0YURApGz+EFCepPUAZrk/wBjOmjaJZcNlEcF0JIoxqLBfiY9f2AqPi3GEvbUpIuqQjwYGSB64ocX
KfItJqOPiVh1jTbUSfLqakikl06IwFU9yN60VfZi5VqIRDw95PG2TnuaZW/AhcbY69KDkckbk9mn
/pYY74qAezk+tVxvpLY/D/NcpnOIRF7POmC4P0Fbs+Ea5C2ARqbGe4yR+1By0co7LfacPbhsblQm
p+mDjGwNWG1SV7FtYO2SCDnFIMS2U6LcKZMsM7+H1p/A8duk2jcZzpx0oROkQTC04xaaLwyIEkyv
KkKHpWUeaF4sQy3VxzBHLEUXPx6tsVqUGSH7NhuPiHQVP+iq/ZWbvn6ZtKxkudSlkB/P96qc/EzJ
IYJLnUw2DqfBt86dQsPycRVK9y7lVkVx5qNq5SyupDtq37CrJJEJzlLsIh4PMWxobI67UzXhZt7V
pWUjA2yO/aucrAlQ5suGHlIB49utObXhrlBiEjvmpsogw27HKGNhj8603DRNcyMARpUL0+p/aksb
RyLXQTrGQmMg+YofhnDW91tZDH8SBj8ySf3oJugtKx5NaiYgacAZ3x8qIgkigbQCDrzkjp50b9i1
6OoIhKjaU0sDuT27/hTJJOSPtHCjbLE7HOwpVYWBvBKr81IdasMePIb5n5/tWUGmdaEXGJpI5UhD
eELnfuSalstSWsvjZhp6HG1Mls69HN1bxNHuoxjGKpHDuDWd7dcRaVG+zkUKFOOozVIvsWSug+24
BYBgAj7j+r1qSLh8MMiBNQ1MQd/SjdgaoYm1jjsjKpbXjqT61X5Cby/gtpGYRMwLBT1wGP7CihSz
8EUSW8pYDwyFAMdAKsEMaoF0jbNIx0SmGNpGkK+IYA9K3aRqZZ2I35h/9RQCVjjTMlhLKjMj80HK
nGc5/wAU9sI0HCbVwoysaqPlgUEvqc39iVWNxKYX2SVCrBdsZ8vKgJ7VLCzjiiLERAqC5yTuOtDt
BWmTQyv7npzsxwflRkszGziJwfGo6eTChHs6S0NOr5I8/wBayqkz/9laaW1hZ2UvanBlZ9QFBgcI
gYKDf18QS2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9jb21wb25lbnRzL3Jl
b3JkZXJlci9pbWFnZXMvQmFuYW5hLmpwZ08RBAlicGxpc3QwMNQBAgMEBQZhYlgkdmVyc2lvblgk
b2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAcBwgiKCkwGzEySElKS0xNTk9QUVJTVFVWV1hb
XFUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNTJDExUiQ4
ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagBuABYASgAYQAdMjECQlJidXTlMu
YmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QS2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2Vz
LzEuNC9jb21wb25lbnRzL3Jlb3JkZXJlci9pbWFnZXMvQmFuYW5hLmpwZ9IqKywtWiRjbGFzc25h
bWVYJGNsYXNzZXNVTlNVUkyiLi9VTlNVUkxYTlNPYmplY3QjQbjRAC9ill8QyNMzNBA1PkdXTlMu
a2V5c1pOUy5vYmplY3RzqDY3ODk6Ozw9gAmACoALgAyADYAOgA+AEKg/H0FCQ0RFRoARgBKAE4AU
gBWAFoAXgBiAGVZTZXJ2ZXJcQ29udGVudC1UeXBlVEV0YWddTGFzdC1Nb2RpZmllZFREYXRlXUFj
Y2VwdC1SYW5nZXNeQ29udGVudC1MZW5ndGhaQ29ubmVjdGlvbl8QFkFwYWNoZS8yLjIuMTUgKENl
bnRPUylaaW1hZ2UvanBlZ18QGiI0ZTAzNDYtNmFjLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBP
Y3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU1IEdNVFVieXRl
c1QxNzA4VWNsb3Nl0iorWVpcTlNEaWN0aW9uYXJ5olkvEQas0iorXV5fEBFOU0hUVFBVUkxSZXNw
b25zZaNfYC9fEBFOU0hUVFBVUkxSZXNwb25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hp
dmVy0WNkXxATV2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAVgBcAHcAegB+AIEA
hACHAIsAjgCVAJgAmwCeAKEApACmAKgAqgCsAK4AsACyALQAtgC4ALoAvADDAMsA1wDZANsA3QEr
ATABOwFEAUoBTQFTAVwBZQFnAW4BdgGBAYoBjAGOAZABkgGUAZYBmAGaAaMBpQGnAakBqwGtAa8B
sQGzAbUBvAHJAc4B3AHhAe8B/gIJAiICLQJKAmoCigKQApUCmwKgAq0CsAKzArgCzALQAuQC8gME
AwcDHQAAAAAAAAIBAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAMfTxEGrP/Y/+AAEEpGSUYAAQIAAGQA
ZAAA/+wAEUR1Y2t5AAEABAAAABYAAP/uAA5BZG9iZQBkwAAAAAH/2wCEABIODg4PDhQPDxQdExAT
HSEZFBQZISIXFxkXFyImHSAgICAdJiYsLjAuLCY7Oz8/OztBQUFBQUFBQUFBQUFBQUEBExMTFRgV
GhYWGhkUGBQZIBkbGxkgLyAgIyAgLzsrJiYmJis7NTkwMDA5NUFBOztBQUFBQUFBQUFBQUFBQUFB
Qf/AABEIAH0AvAMBIgACEQEDEQH/xACJAAEAAgMBAQAAAAAAAAAAAAAAAgUDBAYBBwEBAQEBAQAA
AAAAAAAAAAAAAAIBAwQQAAIBAwEFBgYBBAMAAAAAAAABAhEDBDEhQWESBVFxkSIyQoGhUhMUBsGx
0WIVcjNDEQEAAgEBBwMEAwAAAAAAAAAAAQIRAyExQVFhEwShEiJxgZEUMkJS/9oADAMBAAIRAxEA
PwDuAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3rHVP8AWWI3FFTnclyxTdEuLAsgUHRet3cq7+PlNSnO
rtyiuVbNY0L8zPEAAaAAAAAAAAAAAAAAAAAAAAAAAABzn7ZGE7NmL9Xnp8jozkf2bIU8xWl/5RSf
fLzGW3Cp6Ssm1k2ORp3lNKMl/k6UPohx/wCt4/3c37jWy1Fy+L8qOwJ4TIAAsAAAAAAAAAAAAAAA
AAAAAAAAjO5C3BzuSUYR2uT2JALlyFq3K5N0hBNyfBHz3MvyyMid2Ws5OXiW3W+tPJX2MbZjp+eT
2OdP4OcllWk6ybino2tTla2dkDtf1mxyYly89bkqL/jBf3ZeFT+uXrd3pVrkdeVyUu9ycv6Mtjpj
YAANAAAAAAAAAAAAAAAAAAAADUyuoWsdOK89z6Vu7ybWisZtOBmv5FrHtu5ddFuW9vgcp1XqN3Kb
TfLaXpgv6viSzcu5dk7lyVexbl3FLduu5JqOnaeWdabzs2VhWELkuZNPQxyhGapKNUToz1KptbGH
Sfqc+X79j20jKK7qo6c5j9Ytv716e5QS8XX+Dpz0Z+KQx3cizZ/7JqL7N/gUn7P1C/i27GNa8kMu
TjO6nSUVGjou8rI3p8tZNSb1ZGrqTTGIzMqrXLop9VtVpbg58X5UQ/2V16QivFnPSy7kfSk+88t5
+Un57cKb6Sf9jyzras8Yh19lXRrqF76I/MmuoS91vwZR2+oJ+qFPjUzxzLL1dCO/qx/ZvsryXMeo
W36oyj8zJHMx37qd6ZTxv2paSRkUovemVHlakb8Szt1XCv2XpOPiiaaejqUtIvUUS2rYXHmTxr6s
7XVdAplKS0k18SXPc+uXizf3I/zP5Z2p5rcVRTOdz65eLIOr1bE+ZHCnqdrquJ37MPVNL4mrc6la
j6IuT7dEVzSMU5xWroc7eZef4xFfVvbj6s9/Ov3dnNyR7I7CuvXFFNs8u5CXp2mncm5OrOE2tac2
mZV7cMF2Vy8/P5Y7oox8qWxE5PU8hHmew6QzBC22+Bt2sZS3E7Nh6JF1g4PPLb6VtkzpWJmYiGTi
G50jFWPjuVPNcdfgtCwCSSotED3e34+3o5Z25aPVOmWep46s3G4uEue3JbpJNfyUV3pt/HXLNbFp
LczqzyUYyTjJVT1TJ1NP3xvxMNrbDiLsJQ9tWQUW91DqcjpkXttbV9L1K65guLo00+J4b0tXfH3d
omJ3KflYTaLCWI+wxvEktDkpq1ZNXJLRmV2JdhB2X2GNSjkXFpJk1l3V7jD9pjkZmIGys25wJfm3
OBqcjHKxiBtvNucCDy7r30NflY5GMQJyv3HrIxSk2e/ba3Elak9xsQxhdWQcWzdjjN6meGJwKiGK
xYsp7KUj2G3j4LW4s7WLWiSqywsYKW2ezhvOtKWtsiEzMQ1MTBcnpRb2W9uEbcVGK2IlGKiqRVEt
wPbp6cUjnPNytbIADokAAA8lGMlSSTXE9BgwSxLEvbTuZilgw9r8TcBznRpO+sfbYqL2jirpYEt1
H3GGWC17GW4OU+LSd0zCu5PRRvEXZQg8NapbWX7SepB2rb1iiJ8WeFvyru9FF+JwIrHhL00ku1NN
F5LFsS9UK04shHAxYJRhDlS0UW1qT+rfnVvcr1U/4nAl+IuwufxbK3PxZ7+Pa+n5sfq351Z3I6qZ
Yq7CccZdhcKzaXtRJRS0SXcVHjTxtDJ1I5KyGHJ6R8dhsww4r1v4I2wda6FI3/JM3n6IwhCCpFUJ
AUO0RjZGxAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/9nUBQYHCIWGh39fEE9odHRwOi8v
Zmx1aWRwcm9qZWN0Lm9yZy9yZWxlYXNlcy8xLjQvY29tcG9uZW50cy9yZW9yZGVyZXIvaW1hZ2Vz
L0JsYWNrYmVycnkuanBnTxEEDmJwbGlzdDAw1AECAwQFBmFiWCR2ZXJzaW9uWCRvYmplY3RzWSRh
cmNoaXZlclQkdG9wEgABhqCvEBwHCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcVSRudWxs3QkK
CwwNDg8QERITFBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNzUiQ0
UiQ5UiQwUiQ1UiQxgAcQCBAHgAiAAhAAgBqAG4AFgBKABhAB0yMQJCUmJ1dOUy5iYXNlW05TLnJl
bGF0aXZlgACABIADXxBPaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBv
bmVudHMvcmVvcmRlcmVyL2ltYWdlcy9CbGFja2JlcnJ5LmpwZ9IqKywtWiRjbGFzc25hbWVYJGNs
YXNzZXNVTlNVUkyiLi9VTlNVUkxYTlNPYmplY3QjQbjRAC9iFqUQyNMzNBA1PkdXTlMua2V5c1pO
Uy5vYmplY3RzqDY3ODk6Ozw9gAmACoALgAyADYAOgA+AEKg/H0FCQ0RFRoARgBKAE4AUgBWAFoAX
gBiAGVZTZXJ2ZXJcQ29udGVudC1UeXBlVEV0YWddTGFzdC1Nb2RpZmllZFREYXRlXUFjY2VwdC1S
YW5nZXNeQ29udGVudC1MZW5ndGhaQ29ubmVjdGlvbl8QFkFwYWNoZS8yLjIuMTUgKENlbnRPUyla
aW1hZ2UvanBlZ18QGyI0ZTAzNDctMTA5MS00YWYzM2QwMTNlNDAwIl8QHVRodSwgMTMgT2N0IDIw
MTEgMjA6MTY6MTYgR01UXxAdV2VkLCAxMiBNYXIgMjAxNCAyMDo1MDo1NSBHTVRVYnl0ZXNUNDI0
MVVjbG9zZdIqK1laXE5TRGljdGlvbmFyeaJZLxEQkdIqK11eXxARTlNIVFRQVVJMUmVzcG9uc2Wj
X2AvXxARTlNIVFRQVVJMUmVzcG9uc2VdTlNVUkxSZXNwb25zZV8QD05TS2V5ZWRBcmNoaXZlctFj
ZF8QE1dlYlJlc291cmNlUmVzcG9uc2WAAQAIABEAGgAjAC0AMgA3AFYAXAB3AHoAfgCBAIQAhwCL
AI4AlQCYAJsAngChAKQApgCoAKoArACuALAAsgC0ALYAuAC6ALwAwwDLANcA2QDbAN0BLwE0AT8B
SAFOAVEBVwFgAWkBawFyAXoBhQGOAZABkgGUAZYBmAGaAZwBngGnAakBqwGtAa8BsQGzAbUBtwG5
AcABzQHSAeAB5QHzAgICDQImAjECTwJvAo8ClQKaAqACpQKyArUCuAK9AtEC1QLpAvcDCQMMAyIA
AAAAAAACAQAAAAAAAABlAAAAAAAAAAAAAAAAAAADJE8REJH/2P/gABBKRklGAAECAABkAGQAAP/s
ABFEdWNreQABAAQAAAAqAAD/7gAOQWRvYmUAZMAAAAAB/9sAhAALCAgICAgLCAgLEAoJChATDgsL
DhMWERETEREWFRESEhISERUVGRobGhkVISEkJCEhMC8vLzA2NjY2NjY2NjY2AQwKCgwNDA8NDQ8T
Dg4OExQODw8OFBoSEhQSEhoiGBUVFRUYIh4gGxsbIB4lJSIiJSUvLywvLzY2NjY2NjY2Njb/wAAR
CACWAHcDASIAAhEBAxEB/8QAgwAAAgMBAQEBAAAAAAAAAAAABAUAAwYCBwEIAQADAQEAAAAAAAAA
AAAAAAAAAQIDBBAAAgEDAwMDAwMDBAMBAAAAAQIDABEEIRIFMUETUSIGYTIUcYGRoUIjsTMVB1KC
kkMRAAMAAgIDAAIDAAAAAAAAAAABESECMRJBUWGBA6HBE//aAAwDAQACEQMRAD8AV4YyoHGZM3tP
b0rvP5WDOj/HjF3Y2NLU5wSQ+J1sel67xcWFEOQNXve1D9I6ddvYyj+Kq0Ie9ri9hWe5Ph4IvJtG
x1vqKeN8rWFDAAdy6A0Onk5CFppUuG6kVLtiNdVo9X2/Bid5B2eld+MMoNW8rhrh5JEZ9jagHtQZ
la1gapM5Xhul9lTpVkcjftQYJNXxyBRY0AmGRZTQyB0PuHemX5kkqgN7SepFIlYE60R+WVAQC9u9
NFU02K0QjXcw9vXWjxLCHDIwIOhrKIxK+4anqaZYocJYG6joaYmPXx4ZdFUEN1rJ8/xIxpfJD36r
TqLPkxZBGwurdD6GqeQ3Ttdze/SihKZADQ1KaDAYS9NDrUqRdQpYxNdzoAL2FXgTxr7GIUjUUslz
rxBIjZvUV0nIukW2S+4ik+DXRq5NXiQ8bJg722sSPcD1BrjByUUGOBrAabTWf4yYHIVpmIjJ1FaT
MOOiq+MFZxqCPSpWysZq9G12XBmOexJxIZT7gT27UhII0ItXoMOH/wAkjCQWvWZ5/iv+OcL1DdKu
HPtrcidWAGtckm+lfK7VS1IzPiuRVkTXbWq9ljauthAvQNUZfkMqBVsT60VhZMyewm99bUqhJ3Cm
sCoHUjqKdLSo2jUZFtwNxRUeIZCLiiOJwHybNb9K0uJwj6FlqW2OpGcTitwZtvQE/wBKlbuLhwIn
G3Uqf9KlLJHY8FQok9m1W9XZbRSEBNKrCB5Du63qTQlPcNRVTNKrWrQRjggAdKMhzvxpAj3ZW0/S
l0MrAdbGuWcmQMT/ADR1XJX+uyUTwajF51cY7APZ1FKfkOec9la2i9KHVS/aw9a7OOZRbrRs8wa1
urYlsatS4pvHxJftRacET2tRTJameK3PSuwptanWTxq4lw6MSBc2Umwppx3xlszDyORwpYJo8SMS
zRvIEcXBbYLj7tNO1F9F9Iq3DO4mG8pBVTWt4b4y0rrLOQqXFyxsKEweRyPj6zy/iRS4k4XdFkqJ
CtxpZh9pvRPJEzcBH8hObGnklEYwhfcLaXAb+tqAai5hv8WPg+JEcU+REkj2CrcEk/S1P1GJGhkZ
lRFG5i3tsPU3ryST5Zx3KcQeOxuMTGnVf8mVIxdvIveLaL7u+taL4XGPk/B5eFnSSSyREx+ZpGdr
Wuu5D2oZn1xWzZry/FNjtkRzh4F0aVQSoHck+gqV48mVyeFzrfGNxkSWX8RotfGPL/jEm0a+3dex
qURB1Xszk2K8ExDi1fZkLINK9Q5T4pHMSyr/AEpDL8UddAp/ipWxpgx2LCp1Ya1c2MrtYC9aeL4r
MW0U/wAU7wfh21TLIPtBPT0p0KkZCHjmKAtoPrpVmTDHxoBlG9mG4Kp7frU5SWPFKzRSeTKSS4jP
QWOg21xyXyuPmI5ZM7Fjhy1jClYl2oQDtFhc663NJ5LwsW/wN8KF5eEk5fxxxxqSEVpFEj7fu8aN
91vQUmlgnyYmy8VvKjNpuc7lt6qOlVR4yPxUGXj6SRXZ2Ugtfv8Ap9KmTynDS8eJ8Uy4HN467GtZ
4MtL/wD6dNrgGjqJ79cqDfij8e5Li8iHM5NuJ5qHcyyzENC+2/s0Go9Qf2pFx/F/kRjkJHWWJ9xb
HW9iVP2+n1pdiYP5WM+fM48cb7Wj1BOlzqP1pofBx8H/ACHAyy5OCQPz8OYf5IGJsDuUbWU9mA/W
nCO2b4YdFn43DcjBnZ2OOQwZLCTFnN9OosPtutLuSy+M5TksvLw4vxsRSDBjgaMSTe0fRTb00pUw
zOXyRFixPM7sfDGNTr2Fd4wzOMyp8KfDcZrDxeOQFWjJ6naRTQntWa3PXj+V+OpyPHri8ZzHE3Jj
iIiafHt7tBbc4OtqyceRyeVNJmYheA2CyyQsUAv6kEVdBiYeHlqOXVp4OrLE21yO+xul6Izv+O4n
JkXjZJZcDKjWbDeYAOL/AHJIBodRa9MmR5LMnhMvDx8fnE5BMyLIbxTTRsyzQSuPZ5N1ja/9wNql
C5nNYeTDjmPATHyoHVpJI2IjlRddrxfbe/epRihfFwfoU44bqK5/AjbqtMAgFfSLVEQqwKPAiX+0
VlPlfy7K4GcYvHYaZAX/AH3cnS/YAVuQK8P+Zchn4nyzNieNmjZvalibqRoR+1MesucgfNEZOCMk
qEkZvI6iwJL9Ldx1oaTCT/jIJE906R7iwA6NqU/a9VjxcgsjzO0RkFokBspEdgSR3J6UAnJZXHyt
A7bkIsQ3uIHbWj4aPGQjJixV438/ByY8PKA25WBuYCVegkhvfX/yW+nUV8fjsbjocXKJXLeUKzxN
/ttfXaO/0pJslnkKRAytqbKCf6UXDlpHiPA6ETfakhuQAe30/amyE8/BjlNgY+XDkxhMfF5FWeTB
Riwx3BZNjX126Bh9KWiYSZKxQykRyEJbVbhjaxt2qYGCud53lk2pAm71LN6VXky4hhhWDHMORFcS
ShyRIOqna32sPppQFc+DvloxiyRrGBAFG0FDawHpQEvNZGTn4s+e/wCSMVfCHf3Ex3NtxPW19KFy
MvLzygkVnMY1Cgm4HVqpxsc5k4hjNix9q9Tbvr9KPAPbiDbI5iSHLlXDVZIJLB4pEEiN/wCrA/yK
DxYxl5jSJGsUcIMrRm7ICuoWzdie1dJgY65zY2ZljCQK22UK0i3A9obbqA3c0Pg5MeO7iZPIjC4F
yBuX7b26in4E3nI7myeAyuNjkj404vK45EjTws0kMtjciWN77b/TSpSrG5DLgjnWLI8McwKyRBiN
4P8AaQOv71KeAxael/F/+wJzHNHy/ICOQe7FRo12kanadL27ddK9M47Oi5TAx+Qg/wBrIQOoPbsR
+xr8+8hkcTmHFOLjri5i+2bbqj+jEHvXoPBfOuN47jYoDKzPAApx9T31C36UmgaPS6wH/Z7YUGEs
8BVOZUAqyj3+AH33NbvHnhyoUyIHEkUgDKw1FeXf9s8VmQZWP8gxyXxmTwZEZ1VSL7dPRhUiXJ5/
Pnofx5wiqXDCROw1+5fTrSudXY+QHyDoXANr/rX1/HdRbct7t6hb9KKM80kM2Ej3gLb4Vbst7/6U
yrTnisqTEmsgt5AVe9up+3WhZlkjlKsPde5Xr/NqrZZUIcgrroaJyMbOTGTKl2+KUe1lKkn9ba0C
uJnBMDIWIujABZAQNSNfSq4o9+TGrKCGcey/UX6XFEcdBx7wSyZm8uDZFTS2l70HZom3bSjCzIp/
WgeYqNuRz3j5JJMdTjGGwBjOxulvuX6UviePHzg8xEq3uzL7bE63FuljUOSssu9I7zOdCxuAT3FT
JxCkwhEnnnbV9t7Bj/bc9aBN3gjv5JWmk2hSSQGNwf41qiGPzTJHe29gCfS5q+CJUjyFlhDTCyIW
Ntjd/wB6k0YxHibcWZlu2lgO3tpieeQiCLAiypceWP8AJicGNJtxTYT0lG3rt62OlSqUliTcyyhQ
3UBdT9DUoHj4ab5D8d4jDzsfI47JduPnsZQdXTXW1Fc98S4vjePTlOE5GTJlUhpVkt9jdxb0rLyZ
7PaN2O2xC3NWYk2XksmBHLY5P+Paze3Xpc9qeBxezdQ/JcTH4rHk4rIbCzIwvmXyE7iOp2NdTc16
F8b5mD5TwEWZkxIS+6HKhYbk8iGzWDdj1rwh+L/FabH5AyQZ8R2rAFBBtrvL/wDj+levfGoYuC4S
DCjcSu95pZV6M8ljcfS1gKnYGqZ7/tHgcbEhw+Q4jETHWMsmT4UCgg2KlgK8vUTbiYl337W6Xr36
af8AJVkkAdGFirag1leU4SMhhjRKite4UAVK2BI8rfGkaA5TSqUV9oU9bj6Vap8uOiC7JGSQOmpp
3l/GcuAnxi8RN9p7GgZeJnUADqO3anRwAidIJWYttF7gWuf4qB455dxuVZv8rf3Ed7Gim4nLa7Mv
ubv3qv8AFyoA0LRtZtG00NMPgPIiJI+QtkUN7Yx2U/WrFkVpDNES5HuKKNaIx+GyMq4RDb1au34u
bFuji19DbvRQWrFqfks7Oi7txuw6i9HJgZiwyZMkYkdl2xsx0UHrp+nSn3FpiLjMsigN06VYkc8o
MSMNhPtFtbUZLX69ZlumR/GCIQ3ulbRR0UfX61K1EvHPEUvH/uMFv9SbVKfjgP8AJWUQRtjQx5GJ
NCJnktsl/uRh6VzBiSmFHgUs5uWYaW9K7yQsYZ4VZzJr5CLKAfrVflyIGjiEgVktZVO4Nf6igzwm
Wu2Tk2MzM7pZRe9/S1elcZM8OHj47G7QxIn/AMgCsfxWNPM7zNH7VI29/d3rRRM8YG42qNyzT481
xqenWucrkceEXa1hSGPkT9qkXH1pTyxmyFJSTQdQKla0Ovsdz8rizki4KgdKFV8baXRbi+ulZTGm
ML66jvWhjljEAtpuGtaa6obSR3JPhiULa5Paqs/x+H2W3W0FK+QdYJUlQXv1FVS8gNl3620p9Qx4
DOLyQpIkOoqcnOkkgAsBQPHMmQ7MTa3ar+RijaIkaOo0IpzAWMsSGHxXbv6UKvJnBnWyF0Hf0FUY
AndNre4HpRbYLIAH6H1ppEt0Om5/DaNHDXIZWI9CDepWemwE/MS2g3C/81KBZC2Q5kAhUhUAsNvp
TLhvhpyLTSsVjv8Aew1sB/bXokHxTCx7+OFUB7ADqO9W564/H4jHRbCs0wb9CNcTj+Px0x4bBUGl
+pPcmkHM5iINsNtx70sy8+eednLnbc7QOwoSeYvYk3pl66w+4+S6StvY+6iHzVRWLsKHEIZdxoPJ
wvIQVJv6VSQbM5JMrEqbXOlXLnz46eOQXA6NR2BxqlBu1NUcjhmFtftNEFSiPKOY9j0FGS4UbRHf
pcUlRjjy70PTtRrcqJY7E2I0IpkgSyS4M9kN1NGvJkZEd1HXsaBMiSzrfoD1p/DAipuPSgKTg5oR
eOYbXXsaaZk8DxMumg0rJ8hP+PP5IDY96Gblcib2saVByjW5mfyA2ERuf21qUDi5ISCaNx96ttb6
2qVQXyfoTNeVIWOMnke3tUEDX/2IrzX5DJ8hk3HOiMEOuilW0+u0mpUrJB+v8f2ZWQWHtN6FkMtx
7f06VKlM1QfDvaIbxt/r/pXD7lcbfeP4/wBalSrRDGkF9o2dfShOWMxjtIth66VKlMkQnx2PegZv
v9tSpUbAzpN2lutNY2zvCPa23tqKlShAhdlbyf8AILDveuYhB3N6lSmS+S0XuQNY+5+lSpUoK8H/
2dQFBgcIiYqLf18QS2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3JlbGVhc2VzLzEuNC9jb21wb25l
bnRzL3Jlb3JkZXJlci9pbWFnZXMvQ2hlcnJ5LmpwZ08RBAlicGxpc3QwMNQBAgMEBQZhYlgkdmVy
c2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxAcBwgiKCkwGzEySElKS0xNTk9QUVJT
VFVWV1hbXFUkbnVsbN0JCgsMDQ4PEBESExQVFhcYGRobHB0eHxcgIVIkNlMkMTBSJDJSJDdSJDNT
JDExUiQ4ViRjbGFzc1IkNFIkOVIkMFIkNVIkMYAHEAgQB4AIgAIQAIAagBuABYASgAYQAdMjECQl
JidXTlMuYmFzZVtOUy5yZWxhdGl2ZYAAgASAA18QS2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3Jl
bGVhc2VzLzEuNC9jb21wb25lbnRzL3Jlb3JkZXJlci9pbWFnZXMvQ2hlcnJ5LmpwZ9IqKywtWiRj
bGFzc25hbWVYJGNsYXNzZXNVTlNVUkyiLi9VTlNVUkxYTlNPYmplY3QjQbjRAC9i3DwQyNMzNBA1
PkdXTlMua2V5c1pOUy5vYmplY3RzqDY3ODk6Ozw9gAmACoALgAyADYAOgA+AEKg/H0FCQ0RFRoAR
gBKAE4AUgBWAFoAXgBiAGVZTZXJ2ZXJcQ29udGVudC1UeXBlVEV0YWddTGFzdC1Nb2RpZmllZFRE
YXRlXUFjY2VwdC1SYW5nZXNeQ29udGVudC1MZW5ndGhaQ29ubmVjdGlvbl8QFkFwYWNoZS8yLjIu
MTUgKENlbnRPUylaaW1hZ2UvanBlZ18QGiI0ZTAzNDgtZDFmLTRhZjMzZDAxM2U0MDAiXxAdVGh1
LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU1IEdN
VFVieXRlc1QzMzU5VWNsb3Nl0iorWVpcTlNEaWN0aW9uYXJ5olkvEQ0f0iorXV5fEBFOU0hUVFBV
UkxSZXNwb25zZaNfYC9fEBFOU0hUVFBVUkxSZXNwb25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXll
ZEFyY2hpdmVy0WNkXxATV2ViUmVzb3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAVgBcAHcA
egB+AIEAhACHAIsAjgCVAJgAmwCeAKEApACmAKgAqgCsAK4AsACyALQAtgC4ALoAvADDAMsA1wDZ
ANsA3QErATABOwFEAUoBTQFTAVwBZQFnAW4BdgGBAYoBjAGOAZABkgGUAZYBmAGaAaMBpQGnAakB
qwGtAa8BsQGzAbUBvAHJAc4B3AHhAe8B/gIJAiICLQJKAmoCigKQApUCmwKgAq0CsAKzArgCzALQ
AuQC8gMEAwcDHQAAAAAAAAIBAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAMfTxENH//Y/+AAEEpGSUYA
AQEBAEgASAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMc
HCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAlgBkAwESAAIRAQMRAf/EABwA
AAICAwEBAAAAAAAAAAAAAAQFAwYAAQIHCP/EADMQAAIBAwMDAwMDAwMFAAAAAAECAwAEERIhMQUT
QSJRYQYUcTKBkSNCsRWh0TNSYsHh/8QAGgEAAgMBAQAAAAAAAAAAAAAAAwQAAQIFBv/EACYRAAIC
AQQBBAIDAAAAAAAAAAABAhEDBBIhMUEFEyJRFPAykaH/2gAMAwEAAhEDEQA/APR7w+vetXX/AFDT
mPoQyvkFNYaKAM5rajJqiJDGxGwqWyXAFL5WOYY8DBRtWwdqWY0YawmqIRS/pNZKfQa1EqXQhvid
davD/UpzH0IZXyB4NSCi2CREQc1NipZKCbIGpLMHbFL5WM4UMl4FbA2pVjiOSK2ahBZOcyGoZJSX
NPxXBzZu2Zj4rgOSa0ZJFGK0pJIGaotDazPpFCxdUsLVhHNdRK/sWpTIx7FGTXQ5oD/WeniLufdR
lc4yGoIfa/oPqup9bdHkvGtxMwK59ZX0n96lo37ORK6Hk5whpLL9T9MkwgmOWGRkcitRasHPHOui
K6JMhpSv1D068vDBFOC/j2pyEo9WI5cOVfJxdBuTWsqeCD+DRBczU3vWAA1ZBnYqSAa7sf0ilcrH
MK4GHisPFLjJweaw81CCRkBPNJb76igtbnsBGd84AXk068sI8NiUdLlmrURlPcRWyF5GwKpPU+uL
OwLalcPgRnz7UGeqS/iO4PS5zfzHt91yMW8skc/bEY3yNya876hc3FzcmOU6X1Y0j9JFKz1M2djT
ek4lTkOJb+5tIGkkhDtKdRckE/vSP7yWeJ4tCqpwNWr9IHx5oO9nTWmimrXARJ1GVSUZyiBgTigD
HL3RrDNsGGV5H4rLmxiOnj9B81+yTn7cFYmOCccmu7aGC6e3SGGUuT/VyPSKltk9qEVTX9kLLc3T
JBHKSc+nnJzzTs9GjlI15XBwvqwc/mpTMb8ddCJZLlb3Jk7bRDSTGvFPP9PEWuKGAg41ZYHDH81a
bRVY2qoXWX1D1Dpt53p5HZWPqQ+1auow0gjaCRWPIK7D8HgitrLNdMFPRafIvlFUXKw+sLC6RMrI
rk7qRuB7/ivNHjeCTXGzY9xziix1c12IZfQsL5gfQ1hpMasDsRmvJPpn63uenzdqdzJBjGhjuPwa
08ymc+fpuXD1ye0EjFI+ifUNn1xH7BKyJ+qNuRVC0oOPaHJYZqMjfmoUeP8AWu4L83UDjV/2+xoO
/wC/Bbuk8odpsadIwRnxQMjk3Z2dPBRW3sRXc5lupHkZgTjIbyfNZJBcrD94VMkGcam3BPHHtWOe
zpwSjx5JYmkvykRCIuQiAbY/mh7VSzAYVg39jN5rNsPCMapcDC36c81zJaMcSRerUDkb8GrL0npq
2lmXRXaVwGYgDUcf21pRBzz7XUewO26XNrZ5HNzL29Az6VTGNs+9WuKKJCpJVC2+ksBkn/Na2i71
DZUJrp0u5raKOb7hWCRIvH7++TVztbF4hL35Hm1ZOtwFA9l23xVbWwn5MIpUrf74FzlbOFHukzIQ
qnS2AzbnAz7b1DYXV1IlxH1W3LRYBbvKCA4Jzp+MVad9A5Q2NOfN/T/eCe/6dLfWtvcW1xGnp1du
QHS4I2PwaTdR6y1xaL2rohQP6Yj9Jk/8iBwPio2qNYseRSdcIKmh7NiI7llMoXDMDtz/AMUvu7xZ
LFVucFtI1nON/faqvg3FPfz/AIKrr0dxnkDucBSV4GMYxQN1ciUEAgAcZ/5rA1FvyLpBpwQCDnnN
RySc4J5qJkmk0W/6K6+vTusR97GiT0k58fNVSANHMGG2N6NCdHL1WmjNH0qpDqHVsgjINUv6c+pl
PRYVnf1p6f2o6VnAnjcZUzzaeSUQHW4kZAGxngfFQXAe4ZW7XqiX16uOeDSrZ6DFGuQBJnTChm7W
c6cnB/atayJHxnSc5x4FYse2qTthdmumVW2JyNweK7tZYLaUNPb9+PT6RqxufNUgjtR4Vl76fcKb
Z31sxz6NSbKcYBHnGTVY6R1YRvN6zBEXBRRvpHmiKQpkwPhomVoJYrkdQLG7JIEj77jbHxvU99DB
dy/dR3McfcALKVJBPv8ABrDTG45oNJv4teBvadcM/TrKWTSrp/T2UszkbFR8nGardy9qLRLaKQhU
buFz5atW0gDxwlN1wmO5OrCe3LFlbdlO2nHwRVMu7xNAiiYhPJ+arca9iN2iWe8ht3ZLYHnZm8fi
l0amVy2MAbbeTVJG55VFcsLkleZE1sARnLDk/muPtttUjaSfGa1tYH8iK6BWVySBvR8cIPDA/k1N
jMPUga2xIwx54oySPSccN7Gr2Mz79g4TBwd6JWDYAcCrUQU8gfZ3Rit9Ocb0EzLGdJOKPF8CE427
B52ful2OTjbBxWSQIkDP9xHqU7x59X7e9LU0dCDRHaW1zeTCCBQThn3Pgc1u3vJrKVZYHwwXTjGQ
R5BqlV8h7lt+JAjuQqZIHiu+4Hcto05Oce1VQb3W1RIc28mknONz81HL68k7nFRlxn4YXcz3EcnZ
mDKwwdJ+eKFlkluGV5JSzKAozyAON6haddkiXktuzhZCoddLDSDt+9QmLBBZyahUpx+iNlJm0hWG
eAece9T24/qgMxLk4wPAq1GwGTPtQbbottbGVwCOEX5oLqN1i4S3jOoKNI/JNGVI5WbPfLDRfpkn
tDPk4yf96XtG8ZYugxxlTxWXJNgYZk3QZLcqQCAjL50jBFKxIVfIPHIqufA9GLGcc6l9DHUh4z4o
JSCgOMEcVpOzUkkMFkKMV9qltzG6qWIz5raF5TSJobTvx62XJNO7GwuLq37kK4TOBRFBiks6TKTK
jF30rk8sQNqIvRLbzyKAuXByDuMf+qBKNHRxZNytAJZlBUeRW0R1hkYuuNlZc74PnehtDMZ/RyH0
+2D71zkFAoA2Oc43qqN7iQS85rQh1DYHepRNx13cY3wDWkg1YzmrojkiRUaSRSCdOB5/mi7ZQuAR
+BWlEDOb6RwIpkYEL+rhqYy6TCNW49q3GCfYpklIrAJedmYnXnI+aOvITDLqUAht/kVTVcGXiU1Z
ZejW8F7ZLGwDAjA/4pP0bqRtnzuEJ3pXJjl3EUy6eUOYkV/097G7khfwfSfceKt/UYIeudLZliH3
cYzGwGMj2q8Wa+JBcWr6jIpmglQBTrpvR2ldQ+eabSSDTzG+hdFn6jdIgBCZ3b2r0vo1jb2VsoGN
Xk0VTroQyZNwzsbC2srSOCMDSoqYdvHNVbfYA8U6vCjEyD9R5HvRl5bK7AZ5FN5ccZ8gNPqJ4nw+
CquwDsORjYnxRF1aMhZhuAaSnhcTt4dbCaBUYIu6gnI5rWAOdz70LaOLJZKm4H+a6i9TZIHjiqo1
vJiCADnOKnKaoqtGXMlhVZlyNjQ0chiYEHjxW9v0CcgoxspKlyD4yNhU8dxDcKFk2PzV8+TDmgWe
NS4DHJxt74pjHDbq+tmUqBsSd6m0y8qQvtbUPKRHHnT78CpGv5UMkcQXU7bEDgUSOOT8CuXVRj5H
Ntci0mCs4yfAPBoDo1i09zqlJYk75rGXRxcbfYi8qnLhFvsmt5WEijDNuw+aGuOnzdMUTwAvBj1e
TH/8pRe5i47Ru2i1WrIEAFLejdYtnIhuSqMT6XJ2PwaPDNGRLRZBoxUoEeNqMUeQXtpIJRpY7Cjp
Z9TOzKcYxXSaOcmVm4R8Eb7mmkgV9A0HOd6FJBIy6EEtoygHG9WWe3jbB0nj2pKXZ08eSUVwyrxn
QcHamNzbquToOM+1DoOtRIiilTjNciNM/pP8VNpr8hkE+VOpf80Q8CmBvQaJFA5aiuaBPuAOf9q3
HGpwNNMRxik9XJnPfllACAgUztoGYDRFxzRVAVlmkzVrYzOyAefNOoFmGntpvRVAA5hnQ+mTPdYD
Ywd/mmvQ4bk3I04yTvQ8yqJvC7mWmCwAXSxyMb5oyOCbGC3ikGPlV6v9LSxqZ+mqGB/VDncfj4+K
uAt2IGTvQpYYy8FNI8yTq/VrAfb92ePT/Yw4/mvSDbRSMTJpLceoA1n2WumVtPPJDCIJB2zzWV3m
uTkpumR26wG8jPa24rKDkXxYbG3vQ5ezt2bHbG4rK5zOkmDSWFuyfoH8VlUasHPS7YNjQP4rKsq2
RXFlAlm+EG+3FZRMfYPI3tEiW0KYOjisroJKzmtuhhbNHErEJyKytNcIzbthMcwQIQvFZRK7Bjjp
F6Uu19P6jWUDKk4BsLamXKOVmFZXNZ1Edkvt6qyskIXgLsWLVlXRLP/Z1AUGBwiNjo9/XxBIaHR0
cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRlcmVyL2lt
YWdlcy9GaWcuanBnTxEEB2JwbGlzdDAw1AECAwQFBmFiWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNo
aXZlclQkdG9wEgABhqCvEBwHCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcVSRudWxs3QkKCwwN
Dg8QERITFBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNzUiQ0UiQ5
UiQwUiQ1UiQxgAcQCBAHgAiAAhAAgBqAG4AFgBKABhAB0yMQJCUmJ1dOUy5iYXNlW05TLnJlbGF0
aXZlgACABIADXxBIaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVu
dHMvcmVvcmRlcmVyL2ltYWdlcy9GaWcuanBn0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VS
TKIuL1VOU1VSTFhOU09iamVjdCNBuNEAL2JWFRDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOo
Njc4OTo7PD2ACYAKgAuADIANgA6AD4AQqD8fQUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZl
clxDb250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250
ZW50LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKVppbWFnZS9qcGVn
XxAbIjRlMDM0YS0xMWQ4LTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjox
NiBHTVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU1IEdNVFVieXRlc1Q0NTY4VWNsb3Nl0ior
WVpcTlNEaWN0aW9uYXJ5olkvERHY0iorXV5fEBFOU0hUVFBVUkxSZXNwb25zZaNfYC9fEBFOU0hU
VFBVUkxSZXNwb25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0WNkXxATV2ViUmVz
b3VyY2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAVgBcAHcAegB+AIEAhACHAIsAjgCVAJgAmwCe
AKEApACmAKgAqgCsAK4AsACyALQAtgC4ALoAvADDAMsA1wDZANsA3QEoAS0BOAFBAUcBSgFQAVkB
YgFkAWsBcwF+AYcBiQGLAY0BjwGRAZMBlQGXAaABogGkAaYBqAGqAawBrgGwAbIBuQHGAcsB2QHe
AewB+wIGAh8CKgJIAmgCiAKOApMCmQKeAqsCrgKxArYCygLOAuIC8AMCAwUDGwAAAAAAAAIBAAAA
AAAAAGUAAAAAAAAAAAAAAAAAAAMdTxER2P/Y/+AAEEpGSUYAAQEBAEgASAAA/9sAQwAIBgYHBgUI
BwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy
/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIy/8AAEQgAlgBkAwESAAIRAQMRAf/EABsAAAIDAQEBAAAAAAAAAAAAAAUGAwQH
AAIB/8QANRAAAgEDAwIFAwEHBAMAAAAAAQIDAAQRBRIhMUEGEyJRYRQycYEHFUKRobHRM1LB4SMk
8f/EABoBAAIDAQEAAAAAAAAAAAAAAAIEAQMFAAb/xAArEQACAgEEAQMDBAMBAAAAAAABAgARAwQS
ITFBEyJRBRQyYYHB0RVCUpH/2gAMAwEAAhEDEQA/AGq4Cyxhud4qu84KsAR0rwYEcHEE3cKi8U49
LHcT7VBdvI8g2sRg8NjIq1FYgjqXA8SvebVQ24HUf/D/ADr5MoubtZVIMe0qSD3q7Ggq27gmiOYP
s9SQjaW2sOCDSjdXhj1O4VWwFlYf1po6MMLEV3UamiRX8arjcKTrW/iZMPKc9sUu2kIhBo6tfBhg
cj4pVi1PnYqkAdz3qttKYQaMzXC7c7sfFA/qRnOc1V9vJ3Qr52VJzyaGrcZ713pVOu4RD46mhz3Q
A60YxtINS88wHIoQ9181aMUGX5blUUsTQK5vN6nnir8eAk8wGcLCo1aBoTHkZpOluCLkH5rR2nbQ
kLnPUZg5bnNDUv8ACjFZ7YjcMZDNAM4DjnkUEkuCZN27kVnY8dcmM1L0syqTt6E5oLc3459WMdaa
RCe50vpdeV5obAQHcKCWTPrGpC0Qv5Q/1Cvt7frVzIFAZ+IDN4EWRZahqWqypaWss7SOW9A6ZPc9
q3rQNJtNK00SJGiFucdxTS6slaVeP1/qULhZjzMz079muv3ESyMYICf4XY5H8q0XUNalS5S1QBZJ
c7CTj5FCcrtHMegZhYiTd/s+1qziRomS4bncAcY/HvTg2vyRwefK5AGRtHx1z/1Qnd8Q/wDH5OhM
vufqdPuTBdRsjjse/wCK0OeTTfFMBju7YKD9sucOvt+tRQ/2EryaLNjFkTOxfe/SvHiXw/qHh64w
+ZbZj6JQP6H2NWrgV+ooWI7n36wtnLcUA8924J4q0aWAckKXN92Q0MzmrFwKsAuTLK3Jc4Y1VbpV
m0SuSTgEgiq4mKnDdK4Cpwk4uSgxVd9rNkGoKAw90ZJtVILHIAHT5pRa6luDhnwPYVUuhA7jBzjx
C015PfXK29urySO2AqjOKZ/A+ikIt2wxvztB/wBo/wAmgyumAUosyBkZo2+GtMXQtPRf3fI8knqm
nDZ2sO3FN9vapFoYdFAkCkqcVmEvmG4xrBV0RBK6nAZ2s04dASynt7UEvLqzsd1y8kP1hGWATAY4
wOnJrseFl6ua6YVI47gbU7+Vrt9+SVIKOf4HGBioZrlLqX63y4ll37sKx2MMc9ec/FaOM0KIqPe1
AARKsV9PKpixvWLc2OuTnJNW9KhJuZopLaaRT9sacd+5q0kSfUUc1L1s3/vJm5WTcNx2faMDjihU
ljLCZFWMRS25LMUftn+2Pao2A9yCQy1cZLLUY9Yt3tL2JWhIKtuPeluwYyQGFYJfOLGTdvIG35qo
4wORF9RpcTCitQP4k8Ny6HeZXL2snMb/AB7U8+dDrOj/AEF0gywIjb/ae1Gmdl4eYWo+nullRxMs
XB60UutEurWd4WTlTj80zvB8zNNjgwa0ZxwatfRXCnmNqjcIMGSxEDJFX3s5yP8ASbH4qQwnQIWZ
Tir0lqwchlIP4owwk3B9nGZrmKIA5dgOKsaGN2sW4HXdmrMzbUJnAczYtIC28axoMJGiqMVSsZRH
Cd7YAAJNYGayIyoqaIsh/cIdCfsNUdGuxdaPLGpJYA8fmg0zgpt8iNYfyEz3ULqQJJE9q0e8LvZh
nec8HPxUmo2F1cXWY381A/oLtwv5+a0Me3vzPR8VcGapYMu1ILZ4lkw0WW6kDr+pq2xl+pQu5eYu
Y13HAHHaiPHMlcZr3TzocV9JMqymSM4yNg4K9Mk9a96j5sYi+nu5WEUQQk+nqftyKijOBJG3+Jdt
oVeEl1iVGn2li2WHP9qoQwXMEwhjhzIgDyFF3fn9Oa4NfUkqCLBlm5t2M86Q3kYRfTvTPIPbAryz
BFm+kmY+Y2Au3GTjnOeldddyDuoAGQwXVsk8EVskrts9SryS3fFTfQ+VGkYnSVyMpsA3o2OmR2qG
XxOG02Jf1h4zYxXpTIQYkJHOPmrNlaebZSWN0CBIm1gTnJpdcmxqPUwNfpBdrFptW07Z17Uraxpj
6deTWu5iyH+lOqquLBmKQQaMLTa7G2UtlUkH7jSnp8bvqMMWSNzgGrGwqq3J2zRLC1W6tEmuI03t
8dqtB9iqo4AAAxWLlyvv4hgTLNNl+m1W3kPADjOfniiep6MUy8IIYdv8Vv8AqJkXaYAMfIJh5C5I
/FLWjaiZ7ZYpPvXhgeue9ZuXCVNGXhpoug6ktrdorEbG4alGC6eCYPnIHeknwMrb07l6mNnijRzb
TteWcrBZ25j6Lu981d0u9g1eyFjd4aMjjPer8OYMabgzU0+ubGNr8iJBhkCC6DLIEk2kdjxnima6
0dtOd4l2fTM21Gzuxnrn5NOHIOpqJqEY2DxA9ndGXS7sEYlaQRqQM8sBkEe3+Ku2sMdnbsCAzvLn
pggLkmoJDC5zFdwqDFhksmSSG4aNioX3AwcH9O9W7eFXZbm6kIj8t2k57ew/nUmEeBzzPUUEa36x
XcnnQ7S8rKMAN26VSmmNvCv05aKSJGBQ4wQW6fyNcSR0JWQzCrlyxiaa/WSSYxooKAheBj3qTTYY
vo5lZpSxPIByAcd6rL0LnO5UbTJ9PWWK63tJI7sCW3j+1ENKszEBvZiez5zxSmX3G4tqsildsWvF
9gr3iTKv3ryfejfitY0skBxuV8A/mrNPkIbbPO6tAPcJmcVqINRjlxgq2asaiSnqAORWgrbhRiyv
4MYmuxxz2pYi1MNGMtgjg5pPJpjuh3HyPwVeXYB3Qrnn1Gi/18qqyZIkQ+knpjv+lLerkqwJrj6Y
pNCKGo/s91Syma8tGRlH3hQTn5xTdHrlwy7AQCDtJY8fqaJdXnHDCxCP0upnbTT2yYnjKEHk4rQH
vNN1C3CXtqrRs2wyYyAf+KIZwe1gt9OyL+MUdO1TyJAwbAz2PSrupeCZATPospkjHJhduR8A1JTF
l6MXZMicMI+aRfW2q2ghl2l+vPesusdYutGvBDcq8ToeVbgihGPLjHHInDIQZomuaN9PDJLFGWXb
tyeo9/0q1o/iW01S1EVyVORjPY1IzL10Y5h1jIeeYpxWplt7aKQkgMNxxjOT/wBU63eiq6ma3YMx
bcAewAOB/Wrw57jv3qOfiZ7qX08tzL62Xd6kAH3ZOOf0FGJNKEF9C91EfTDuKr3YdKLePJjCZE29
ylp5eN41AfC8gHuehB9+aJwW5ZvSoZSozge5z/zS2V4OXMpFQzYjcmeVYN0+K82k8NuheaUIR1HU
5/AqgG+pmZSLi349ZoLeBASN75Ofii3i6Kx13Qy1pMr3UHqVSpBb3AzTmBUVruZupDMJmW76hSGH
qFe1tbmNy7QSKq/dlDxTRodGJFTAVzZsZ2xkUwSW6s2aIZiBOuPUmyWXgyF+pJGOKpjVIIZQpZGb
BxIp4Pxis9iKns9rDoSeZ44bRZIhwDyo98YOaXrrV4xNPFCCVfk4PQ1Kl+DDGM3CFlaztdYYRKk0
ecSn0tz1474qjCLiRN1ow8l12uxHOOvHtRst9yS56jJBfzWNwI42RSjYZmPX/NCnvwYktDbKZH9I
nYcH9aD0AeROKDIaYX+sO3umad4wgxKo+qj+yWPjNdocEsN6jzXAdmI4UYxVRZ8Z4MS1OkxgWpmb
X66l4U1NrW4DoAfQ5+1hWu/tF8PR6x4ambYDMib0I6hgOKbXKjELlHB8/wBzFZCPxiVon7QXiCpJ
JgdwTkVmuiaJqet3RgsIXcpje3QICcc/4q/JosOMXu2/vK0dm4Aubxa63b63gRwmR89F7n81JoNp
Y+HBBYWxVpljwzdST1JY/NZD5xupSa/WPphygQ7a6MBF5t3hFIz5angfk96g1PUpJrQqrbSOu3sP
c1ZYI+ZYunyE+6eL3VLOwjC20MYVs7SoGDj5pGvp53PpjVo1xtKkjp1/U1d6LEdx9NFjHcaZNckT
yHKRCGb7SSOPzSob+1FiF4SRWUhGyS4PXBqDjkjTJZBEOtrsF1KY2hhddxXcSCCfYd6VZLV0ePaU
bdKGO08gnt+KMYUrgyftsR8Rgk0nQbt/ORGjDclVbABqtFcQxoUYQ5Bx61JP9KinHEUbQYybAipq
WkXA1Bktg/lDoG5waNX2ryw2SQJAWmIy7gd6vXgcTRAZjX8wHZeHTLbl2uI4phkgjJOfmp7W8lif
y5Yyh+5mA5IomZyJwwUbBgr6fU7I+TBLv3HkhuKPBBJM8wyFXGI2711/9CRtPzCWm6fKYEZrguFG
WJIxn4FQXd8bNlVImidl5U8giqShI4MJQz/iYzaXPKLnDFW2nkjtQzQb30HMW0k43L3FK5EZRyYG
XGV8R/vbhLjTXjZly64B9jVKWzZbYTA+gDOAaQc5Bx2Jlvjxk9wF4X8Orp9nL5aoo3liAOWPuT71
Dd621uUt4sASHGWJAH5Naj4zlFvzAwY2B9vUvapLDcCOOeTYyv1Uc49vxSlcXsZDNz5+fuySR8Y6
EVK6Tq5qqnx3Ptze/Qy3VxFMTApAMfLMF9qpfW21w7/UAAOvc8jtxVp06ge4wuQK7ly2v7bUbJpI
pcBjj0tgk47r2oDq9zBZajb3SR26LIMMkR2k474qPTY8p4g2PJqWJ7uKW4ihBaTyyeEGGPxQe3v3
neWOG39Uz+h1Hv05q8Jt5PmAz3HsG41CWOULFFCi5IY7S3HWh7w35jitvUCSAZNoxtA7jJ/pS5u+
YSgAewyaSKZXIEhXHYio3hfzH2TkLnjLUYYVzLqaFLy08lXTyxhj9/cCprTWobpPLnAOeM0imoK/
kJnLqa7i48sVjNMzAy7lwGIo7faLDdjzIZQcD0rTaanGwq41jz4m/Ixabdfx+crCJgOCeBRZdDkj
s23o0jg+lR2NW+ovzLGyqxpTKUFyjSeTfxs0gUFDmpo/D13I3mzxyCUnjHahLLXcMHH1f/kJabG0
d4DCpCN/DjimPQ9Ke0t0e4cBV5wetK5Mm4VKM2qRRtu4XuZEg0dmfjCdKTfEXi+0fV4dKicEH7yO
goVxFxx18zGbIC0Xru8864dVaWPLcYGQah1WKSGY7f4j9ig8j81q4wKAEfxVXEkj2wWsjpKnmbvs
kPLH3Aqi226v1giikBIwzv1z7miKHu40MgIueDZq8kfmweY20swjz+hIq6lg08iSiRnyAjKhwQfm
gPMPeJHc6Po1/arG8brOo2p2P5Jq4IYlaVmRo5FYbUByBj3/AL0C7gbU1OfGmSrEmFpbWkEdkqIw
RMqQMFSO4NfIXS9VY8ESIWUg4xjHbv1qoBrJMIooFGXrOWWO6t4prdmRFUtsOdy5ByAf1496l067
8y3jhSNWvVcBXJw2wdV9qgoByILAiwR+8931/BHdMHhmXuoIHTt0qaaFtSnknQoihigDAZ4oRzAX
aB7uIkQyyKQytiuoGUTIhOHUp1AG4/zrqoONficIRh12eEjGT+a6qtgh3xL48TXO0ekV1BUqJi74
n8aXttZsiFtz8D2FdWnocGN29wuL5mIHEzW0vJnv2lkctIx3Fj711bGVRsqovjJuaxoF0ur2KpOv
/kj+1sV1Y5JVyBH8bEHieZ7A2lzLOkhMpOc+1dVqux8zVxG15lW/uxdELGHi8peVDcbveuo0Nkgx
nGoAsTxozut5JbHaxlX725KkHOR/KuowOIWf8QfiSxEiaSSTLM8jHg4xXVFAcTl5FS5HO8kaB1XO
1dpAx8c11L5BtPEsCipeFiojT1Enbyc11L7jFSxsz//Z1AUGBwiRkpN/XxBLaHR0cDovL2ZsdWlk
cHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVvcmRlcmVyL2ltYWdlcy9HcmFw
ZXMuanBnTxEECmJwbGlzdDAw1AECAwQFBmFiWCR2ZXJzaW9uWCRvYmplY3RzWSRhcmNoaXZlclQk
dG9wEgABhqCvEBwHCCIoKTAbMTJISUpLTE1OT1BRUlNUVVZXWFtcVSRudWxs3QkKCwwNDg8QERIT
FBUWFxgZGhscHR4fFyAhUiQ2UyQxMFIkMlIkN1IkM1MkMTFSJDhWJGNsYXNzUiQ0UiQ5UiQwUiQ1
UiQxgAcQCBAHgAiAAhAAgBqAG4AFgBKABhAB0yMQJCUmJ1dOUy5iYXNlW05TLnJlbGF0aXZlgACA
BIADXxBLaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvcmVsZWFzZXMvMS40L2NvbXBvbmVudHMvcmVv
cmRlcmVyL2ltYWdlcy9HcmFwZXMuanBn0iorLC1aJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIu
L1VOU1VSTFhOU09iamVjdCNBuNEAL2K5kRDI0zM0EDU+R1dOUy5rZXlzWk5TLm9iamVjdHOoNjc4
OTo7PD2ACYAKgAuADIANgA6AD4AQqD8fQUJDREVGgBGAEoATgBSAFYAWgBeAGIAZVlNlcnZlclxD
b250ZW50LVR5cGVURXRhZ11MYXN0LU1vZGlmaWVkVERhdGVdQWNjZXB0LVJhbmdlc15Db250ZW50
LUxlbmd0aFpDb25uZWN0aW9uXxAWQXBhY2hlLzIuMi4xNSAoQ2VudE9TKVppbWFnZS9qcGVnXxAb
IjRlMDM0Yi0xNDQxLTRhZjMzZDAxM2U0MDAiXxAdVGh1LCAxMyBPY3QgMjAxMSAyMDoxNjoxNiBH
TVRfEB1XZWQsIDEyIE1hciAyMDE0IDIwOjUwOjU1IEdNVFVieXRlc1Q1MTg1VWNsb3Nl0iorWVpc
TlNEaWN0aW9uYXJ5olkvERRB0iorXV5fEBFOU0hUVFBVUkxSZXNwb25zZaNfYC9fEBFOU0hUVFBV
UkxSZXNwb25zZV1OU1VSTFJlc3BvbnNlXxAPTlNLZXllZEFyY2hpdmVy0WNkXxATV2ViUmVzb3Vy
Y2VSZXNwb25zZYABAAgAEQAaACMALQAyADcAVgBcAHcAegB+AIEAhACHAIsAjgCVAJgAmwCeAKEA
pACmAKgAqgCsAK4AsACyALQAtgC4ALoAvADDAMsA1wDZANsA3QErATABOwFEAUoBTQFTAVwBZQFn
AW4BdgGBAYoBjAGOAZABkgGUAZYBmAGaAaMBpQGnAakBqwGtAa8BsQGzAbUBvAHJAc4B3AHhAe8B
/gIJAiICLQJLAmsCiwKRApYCnAKhAq4CsQK0ArkCzQLRAuUC8wMFAwgDHgAAAAAAAAIBAAAAAAAA
AGUAAAAAAAAAAAAAAAAAAAMgTxEUQf/Y/+AAEEpGSUYAAQIAAGQAZAAA/+wAEUR1Y2t5AAEABAAA
ADUAAP/uAA5BZG9iZQBkwAAAAAH/2wCEAAgFBQUGBQgGBggLBwYHCw0JCAgJDQ8MDA0MDA8RDAwM
DAwMEQ4RERIREQ4XFxgYFxcgICAgICQkJCQkJCQkJCQBCAgIDw4PHBMTHB8ZFBkfJCQkJCQkJCQk
JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJP/AABEIAJYAcQMBEQACEQED
EQH/xACQAAABBQEBAQAAAAAAAAAAAAAAAQQFBgcIAwIBAQADAQEBAAAAAAAAAAAAAAABAwQCBQYQ
AAIBAwMCBQIFAwIHAAAAAAECAwARBCESBTEGQVEiEwdxFGEyQiMVkaEzgVKxwWKSJBYIEQACAgEE
AQMFAAIDAAAAAAAAARECAyExEgRBIhMFUWFxoRTwMoFCcv/aAAwDAQACEQMRAD8A36uCQoAqAFSA
oAoBhy2akQiw0lMOVnMIoWCkkX/OwPS4W9VZbxCW7O6VnXwiI7V43E4fm+U42GWSUuI8r94gsd99
x0/6jrWfr145LV+xdms7VTLNW0zBQBQBQCVAFoAoAqQFCAqCQqQFAFARXcEbM3GuDtEWdE7N5KEf
d/bSqM//AF/9FuJ7/gqbctn5/dfIZ3b+RiwYoeDixmTKZ1lnb1N7aIyjbHtsTu1rOmvddk/oizj6
UmPMP5CixuBfK5HJxcrlMMuubhQyJG5McjIz4242cbRuC/3rQsuksfzWb0T1KHkfOPc78ixiihx8
T3P24mTedl7AM19T9LVlfZvJ7mP4nE66zJp3Y3eUfc/HtI8JxsyAL70fVSHvteM9bG1a8OXmjx+9
03gtEymWOrTEFSAqAGtAFSBKgC0AVIPDkM7F4/Cmzst/bxsZDJK3WyqL9POobSUnVKO1lVbsxTmP
/oTmo+Vf7DDgi48XWOKcFpDcaO7KwAP4Csnv2b02PcXxeNVht8jz7m+RuFyOI4xeUm/ke4HIn5DG
kUjHiUo23G2RkoqklSVN2NvV+E3cr7mJdWybjYad1dw8X2727/6921nJLi5eHixjJxWuZJAZJMgl
lvbduG4eWlV8Ys39kW9TFyvNvBRuA4vN5TkYsCAF5piViF7kEAtoOv6TXMTse07Kql7H1MmZx+bJ
hy3jnheza/lkUlWsfqKquoL8UP8ABunxAvLZWKOQy4PYxIsZcSCQggz2bfvANtEta/41s66cSeB8
raifFOXM/g0StJ44lALQCa0AtSAqAFAFAQHyBLkQ9o8hJBCMgrHd0IvaO43uB5qNaryt8XBr6KTy
qXBzHx8WHyPcePjzv7UG93d1G63tq0nQkf7ay0Pos2hHZeJ7WQWZ9xdze/163qUyHRHr3LwuLxWZ
jS4s5mGRjxZCqLMVd/zxvtNgRa9WzpBlsmrSiS7Nxu4s/n8VuDglblEIlxwFIA29WLNZdvneqeDn
Q1PPj4vnsdI8J2LxeHgwrnoudn2MmXNMqt7ksnqk6rooYm1q01wryfP5u5a1tNF4LGFCgKoAUaAD
QADwq0xi0AlAFALQBUgSoAtAfMjpHG0kjBUQFmY9ABqSaBKTF+8/nXkHy5sDt3HhXCF42yspS7Sg
6HbHcAKfxvWW+dvY9zr/ABiSTu9Stdtdm8d3U+VnRg9vZXFQCbJm3mRJdyt+8sUu0Ir22kAka+Gl
4olBPcz3o/yRmf8AG/MZncsvHdsl87AEgGNPOpjIiZPcEkm4A7QARutr4dRUVSex3Xt+lOxVczBn
hzZcfKce5jMyEa9R9ahuDWly1Ng+M5eNgj4KTEmEfLNkDHkj3kqYZAfdG25Gqr5fmtXWN6oydyji
0r0x+yX7y+Z8zjuUkwuIgh9iFtn3GQGYyMps21VK2Xwuai/acxU463xVXVO79T8It3Y3eb9x4rJm
Y/2fJQqsjxC5R43/ACyxk+Bq/Fk5b7nn93p+05TmrLPVpiEqQFALUAKkBQBUAovyD8kcPw8z9vC0
vIZcTpIWsI4g6HYHv1LG2nhVOXKloej0+lay5vZfs51zsuFmO0ghm3enQAeVY0mfRyoJdu9uWlKj
Fw4ABh/YxK4voo/zIpKhpAblb3t5aVeedlxJ7zEyW7t35R7hmwziZ0iN/IlI589EEcqtCUjBQggM
Ci7WPhe9cpv1fcy/z0n8eCo9x8bj833rnrxWXiY6yEzF8mcRwtIFBlVZdV3Fr2HSuMSfH1bmnFd1
onqx/wBg8pxXb2ZNm85PsVccLjGBBNKskv5lj3Hakir1Nja/nXfBeSe075Eqo8OVyuU505OdjSJl
RRo+VkXBHsoDbeUaxt0G4fQ1SsbT+xZirWlfpk8ff7DHie+e5sLKWbHz5oZI4xEGRyRsXolmv6fI
Vbqtjv2630skbn8ad9cjyeMYufyImdomyMbK9CBo4yFlEm2ygre/QVfiyN7nld/p1prRflF5w+Qw
M6P3MPIiyYx1aF1cD/tJq5NPY8y9LV3UHvXRyF6gBUkHnk5OPiwPkZMiwwRAvJLIQqqo6kselQ3B
1WrbhEBg/JPYmdmLhYvMY75LtsRGJTc3gFZwqn+tcLJV+S+3UyVUtGE/NeTOnfefBlRqjWUxELt3
RFQUb8fxNZslfUz3Olde0oKx2xxuNyLZzZAjWPCxmnVpNw3SMyoqKRoW9RYLRzxk7Vl7iqOeB4n+
T5qHjZ5Vx4ZzZ53A2ooHXXSqqqWbctuNW4ki+byvtMnJ4jFl34AlRgPNo93qXxW+41oqvJ5eVLlA
LAI9piuSbFR/yNVOxux10JTvHBnwZ8Vc1lky/bUGWMk+4jqGRmJ6shuhPjYVY1oZqWUv6E72weBh
7XyeRyhv5SMiAYQlZfuYHBWZXXW10Y6+BFQkoJzcm0lt/kFRwuIyeTzZ4OFgyMxI/UiBC8wTwDrG
DdvC40qIZzXPVf7OGeuLFkwTvBkK8E0ZKSRShkdWHUMjWIP1ri6jQ0Y8nKH4Lz8eQtHJkcrFyD4e
RgBJkVSQsovrG2o3A2tamNayT3HNVWJT/R0PE++JH1G9Q1iLHUX6VvPkmj7oAoDPfnTNaDtGODYx
iypwjveyjaC4Ded7aVTneh6PxiXuT9jmnPyUjlYR6jwt4VXSsnq5skEjld25nKdv/wAby5k5LLxi
jcdlSMu/GQ/5ImbaXkVvBS1lOtWJGGI1T1Y+7hhx+NykXicj3MSPGhVSnR90aPKWv+ovfdVdtXBr
wp1qn5IrG5LJnkb2YzK6pdraWUaa28K54QXV7PhLU+k7cyORnkdH25MhL7W1PToSBUrMtvBnyddt
u3ljSaaXAmOLmA74wDpcdRfxtXbxTqhXtcNLHuOQys+WNgzCaIFfcdySVsAiqLenaP60soQxX9y0
+Ce4DC5flWmwYz78UETySxyPYhAPU0LG9mH9/Gq6yzVkVaqSJweY5XheQd+Jy5cPK2tC00DlGKE2
K3XztU1lFGalbtD7j8PkecyjbdkZ0pLuzszSSMBuLX1LE/jXLUmjHFVJqXxx8XS5DY/JZmfjvCmy
R8KE+67IbOqzDQJewpjwy5kzdz5JVq6qr/JtFbT5wKkgKEmR/NPeGZIX7TxMWKVMj20lllsze45G
zYP02v161ky5HPE9jodVcfcZivc3ARcVyk+Bf3ft2MTSEg7nGjH06Wv0tUJtM18FZS/JAiSSKd1R
RtfqAOlqurqjJdOtoR7yctN9uIpxqvpuD4eFR7euh3/Q0osTXZHI4mP/ACuPOq+/lY6xxK4sRZxI
djeB0Fc5lFTvqWV7/gl+IzMXG5jFmyvVirIv3BHXYTZiLeNqyV3PWvT0uNyE7+lwOQ7qyZ+NAOG9
tijp+IrdjtoeL2MLdkvMDFsnY6ZTybsmS6zREG6lLKrXtYgrUWoo0Jw24OCa4SRVmOVLNNjwFHWY
wi7vGQQ6LqAd35apShm+1pr9SLzMP3OWnkwlY48kpaENodh1Xd4X86ttZQZcVHMk/wBtjlsHPXkY
IWT7Mj3ncMqID6fU3heqHY2aNR9S79i8msORNyaZTRZeKY2EY9KzqCFdHW/iOlcUtrJPawt0VWpT
/RvA869E+SFqQJQGIfInYHceP3DJmYELZmHlze9BIpLMkjNv9tx169DXm5sbraVqfS9Lt474+NnD
SKxznxX3xk8jNs490h2+80zsBGiH1et/NR1A1ruqsvAtnxNL1KSpL242OsskziaLcYhIlwu5bE9b
Hob6ipWSdjv2oepGPx2NK86vOkPtIWT3L2cj9K28auozNmxojsKNjOzB9hW533q62qMOKVaUOzyu
Qr7AwF9C3hVXsI2PvWmESGPNEXheZhKygIb9Ag8NK4ZoxpD7utuFnbEyMLZFOyfvxRrtTeTr9LCu
1sVXWqJrsqTAOYy5SCXDjHuT2NiFOnn51SlqbW/RC3Fx4kxO5AcSP34shAYIiNxIlBCJ56rY6edR
a2pzVTU1Y/DTSdn42AmbKnIxoJGhlcnGV2JkaNUH5bE2v+Fd367ddHqebj+TVcsten9np2f8OJxu
VDmcvOJzAwkTGjvt3rqvuNf1AHwrnD1mtbHXb+X5p1oo+5pVbDxBKAWpAUAhsdDqKgFB+Ue1uzou
1+RzsmOLj8iQiVJ4zsZ51BCbUGjE7jcAa/3qjJSqU7HodTNltdVWpzbx3B5/L8zBx2MBJLOxtYaA
KC7sRfoqgmlWjdlo512PduGihyTjRAFWbaJDYknpc+Fc+4y5daq0E5/tscDyMEOSh92VVcRhlI2s
L3/C+lWqzgwZcSlcRrjYjRSoJEDa6g3F7/Sq3eTdjwNeT6z8HIxshVyLlXBaNgPC9Snoc2o1bUsf
ZvF4WRnRJlsZ0msiYqqymRz/AI42YfpLWvVTaL2rR9F9Tpzje3OFwpEy4sDGhzyiiSaONQ1woU7W
tcDStSolrGp85fNZ6S+JKV0VBQBUgKEBQkKAKgGTfP8AmlcbjsJ4bxuXlWcnS49LRgdL9DWXsvY9
r4iq9TkxDG5JuL5SPNx2K+2Sp29drAq4/oa5psbcihyfWbmImVvhmR1U7lkQ3U31BokyVdPWRny3
MT8nyA5DOm9yd2VOmgVQFuPLpVyThmS1krJ+B/LkISjxWuCLE28PrWbY9JbEr3dy0nInCeeBMaQR
hgoNm9tFEasfH12/tVrZnrVJwXP4m/jm5bjGxYyeSGSQ46qcf22MhZSP0mxB86nHEop7zfBztH7N
6rSfPBUgWgCgCgCgCoIChIx5rg+J5zBbA5XHTKxn12ONQf8AcjDVT+IqLVVlDLMWW1HNXDMu7y+H
vjfi+PlnfKnw8yYMcRHlD3ZVLbY4yF3aC+pql0rXyeji7eXK4jQxHNw44H/ba8Yaw8yDpu/pVase
k8KG/O8VjcfnpHBOuVEUR/cjB2+sA7TfoR0NXVehjyUSaY64+XAjyUTJO3GZ0E0gX3CqX9RRLi7V
XBpThQiVy8PjsnnEl/efHyAcjU2mMbs3tKd+l9u2ucl40LOvilN+TePiDtXA43hzzCQSxZPIABfu
SpdYkNvSFA2hm18+lWYKwp+p5HyWazvw8VL9V55wlSBaAKAKgBUgKASoAtSDnb5RXPyO4MyeVXVc
aQxxvKwT1rqfbvtv5+m9efknkfUdTj7SSM5njnmlbe4FrEowa4B6kWFiBp413pBDdlaC3x8l2Rmd
h/xkPD5A5zFRJZ+RBDb5C492NmBFoyv5Qen1qbW003Mzw5bWmVD8FNXCV5vSntqx9AJ0Hluv4UWQ
026zNJ+PO7szgeRbDz+JxspWdROTCv3CgKF3JKxNxYA26Vyrw9pK8nW510s0/wBHQPH5eJmYUOVi
EHGmQPHYW0PhbwtWxNRofPZKutmnuOKk5EoBakBQBQBQBQCUAtAc1/KXIScj3TmZTKyNHIYlSQ32
CP0Wt01Irzr3mx9b0sfHEkim8vJjDAx5Ym/8q7rMAT6VFtvXzBNd01OM8o+eE5gwrNiK22LIALXF
tzL0pkq4KurbXVyx5g5ePh8rFl5GN93ixG8kO4oGHlcVVVo3XTa0cD/B533O4o8srsEccUbiY+Ma
BPUx+ldt6lVKqGjoj47+7PbiyZCiNZZpZMdQyuPaJG03Qka6mteLY+d77XuafQslWGMKAWpAUAlC
BaAShItAFAYv8ydvcaO5IsqUfx8WZGHkygjSJI4ur+lejgW+ted2qxafqfR/FZrPHH+0eDKMrihm
O/shhDGBctYFhe27aOlcY7wb8+OdxjHx0JzkheQRxkjc/Qgf6kf8avraTLbGkJeRZNomE6EFWU2J
W7lVJ62PpvpXTqkpgp52d4nQkvtUgQX1ZjqSet/G9Zm5PSokkbn8R5mEkxwOMkeTClwo8qdHYsIs
kP7bqoPQNe9asD1hHh/J1bXK28x+UaRWk8cKkC0AUAUAUAUAlAFAMOc4Hi+dwfsuShWeEMHUN+lh
0YWt51Xkxqyhl2DPfFblV6kZN2B2nHxGVhY/GQj7iIoxAtISBdbSasuo8K4/nok4Rd/dltZN22Ob
uf4HCwct1M7ySh2T2DEwdGBtZ2PpP1H9KyVcaH0DTspK0/GZCzl5PQ+4WrVy0MHtNuTS+w/jLN7t
hyDNlx432XtEFQZFcybvEWsV26iqPYbejNGX5BYklZSbX2X2JxfauOwx2bIzZlCT5T6EqDcIi3sq
itOLFw/J43b7lsz+lV4LFVxjFoAoAoA0oBKgC0AVICgEqALQFb5b457T5XkjyOXhI2Q5UykFlDFT
e5VSBc+Jqq2CrcmvH3clK8Uyod3/AAThclmtn8HkLhySNdsWZSYQLamMrqPpXF8L8F+D5CFF1/yX
TsftGLtXhF48S/cZDN7mRMF2hmtYKo8FUaCraU4oydnP7lp8E/XZQFSAoAoAoBKAWoAVICgCgCoA
UAUAUAlSAqAFALUkBQkKAKgH/9nVlQUHCJaXmJmam18QFFdlYlJlc291cmNlRnJhbWVOYW1lXxAb
V2ViUmVzb3VyY2VUZXh0RW5jb2RpbmdOYW1lUF8QXGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL3Jl
bGVhc2VzLzEuNC9kZW1vcy9yZW9yZGVyZXIvaW1hZ2VSZW9yZGVyZXIvaHRtbC9pbWFnZVJlb3Jk
ZXJlci5odG1sTxEc+TwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4w
IFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJp
Y3QuZHRkIj48aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxh
bmc9ImVuIiBsYW5nPSJlbiI+PGhlYWQ+CiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVu
dC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgogICAgICAgIDx0aXRs
ZT5JbWFnZSBSZW9yZGVyZXI8L3RpdGxlPgogICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uLy4uL2ZyYW1ld29yay9mc3MvY3NzL2Zzcy1y
ZXNldC1nbG9iYWwuY3NzIj4KICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl
eHQvY3NzIiBocmVmPSIuLi8uLi8uLi8uLi9mcmFtZXdvcmsvZnNzL2Nzcy9mc3MtYmFzZS1nbG9i
YWwuY3NzIj4KICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIuLi8uLi8uLi8uLi9mcmFtZXdvcmsvZnNzL2Nzcy9mc3MtbGF5b3V0LmNzcyI+CiAgICAg
ICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4v
Li4vZnJhbWV3b3JrL2Zzcy9jc3MvZnNzLXRleHQuY3NzIj4KICAgICAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3Jl
b3JkZXJlci9jc3MvUmVvcmRlcmVyLmNzcyI+CgogICAgICAgIDxsaW5rIHR5cGU9InRleHQvY3Nz
IiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9Ii4uL2Nzcy9pbWFnZVJlb3JkZXJl
ci5jc3MiPgogICAgICAgIAogICAgICAgIDwhLS0gIFJlcXVpcmVkIGphdmFzY3JpcHQgbW9kdWxl
cyBmb3IgdGhlIEltYWdlIFJlb3JkZXJlci4gVGhlc2UgY2FuIGJlIHJlcGxhY2VkIGJ5IEluZnVz
aW9uLWFsbC5qcyAtLT4KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSIuLi8uLi8uLi8uLi9saWIvanF1ZXJ5L2NvcmUvanMvanF1ZXJ5LmpzIj48L3NjcmlwdD4KICAg
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9saWIv
anF1ZXJ5L3VpL2pzL2pxdWVyeS51aS5jb3JlLmpzIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9saWIvanF1ZXJ5L3VpL2pz
L2pxdWVyeS51aS53aWRnZXQuanMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL2xpYi9qcXVlcnkvdWkvanMvanF1ZXJ5LnVp
Lm1vdXNlLmpzIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi8uLi8uLi8uLi9saWIvanF1ZXJ5L3VpL2pzL2pxdWVyeS51aS5kcmFnZ2FibGUu
anMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
Ii4uLy4uLy4uLy4uL2ZyYW1ld29yay9jb3JlL2pzL0ZsdWlkRG9jdW1lbnQuanMiPjwvc2NyaXB0
PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4u
L2ZyYW1ld29yay9jb3JlL2pzL2pxdWVyeS5rZXlib2FyZC1hMTF5LmpzIj48L3NjcmlwdD4KICAg
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9mcmFt
ZXdvcmsvY29yZS9qcy9GbHVpZC5qcyI+PC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vLi4vZnJhbWV3b3JrL2NvcmUvanMvRmx1aWRE
T01VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL2ZyYW1ld29yay9jb3JlL2pzL0ZsdWlkVmlldy5qcyI+
PC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
Li4vLi4vLi4vZnJhbWV3b3JrL2NvcmUvanMvRGF0YUJpbmRpbmcuanMiPjwvc2NyaXB0PgogICAg
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL2ZyYW1l
d29yay9jb3JlL2pzL0ZsdWlkSW9DLmpzIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3Jlb3JkZXJlci9q
cy9SZW9yZGVyZXJET01VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcmVvcmRlcmVy
L2pzL0dlb21ldHJpY01hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcmVvcmRlcmVyL2pz
L1Jlb3JkZXJlci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iLi4vLi4vLi4vLi4vY29tcG9uZW50cy9yZW9yZGVyZXIvanMvSW1hZ2VSZW9y
ZGVyZXIuanMiPjwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4uL2pzL2ltYWdlUmVvcmRlcmVyRGVtby5qcyI+PC9zY3JpcHQ+CiAgICA8L2hlYWQ+
CgogIDxib2R5IGNsYXNzPSJkZW1vLWltYWdlUmVvcmRlcmVyLWNvbnRhaW5lciI+CiAgICAgPGgx
PkltYWdlIEdhbGxlcnk8L2gxPgogICAgIAogICAgIDxwPjxzdHJvbmc+TW91c2UgaW5zdHJ1Y3Rp
b25zOjwvc3Ryb25nPiBEcmFnIGFuZCBkcm9wIGl0ZW1zIHdpdGggdGhlIG1vdXNlLiAgVmlldyBh
biBpbWFnZSBieSBjbGlja2luZyBpdC48L3A+CiAgICAgPHA+PHN0cm9uZz5LZXlib2FyZCBpbnN0
cnVjdGlvbnM6PC9zdHJvbmc+RGlyZWN0aW9uIGtleXMgKGFycm93IGtleXMgb3IgaS1qLWstbSkg
bW92ZSBmb2N1cy4gQ1RSTCArIGRpcmVjdGlvbiBrZXlzIG1vdmUgdGhlIGl0ZW0uIFZpZXcgYW4g
aW1hZ2UgYnkgdXNpbmcgdGhlICdSZXR1cm4nIG9yICdFbnRlcicga2V5LjwvcD4KICAgICAgICAg
ICAgCiAgICA8Zm9ybSBhY3Rpb249IiMiIGlkPSJyZW9yZGVyLWltYWdlcy1mb3JtIiBjbGFzcz0i
ZmxjLWltYWdlUmVvcmRlcmVyIGZsLWltYWdlUmVvcmRlcmVyIGZsLXJlb3JkZXJlci1ob3Jpem9u
dGFsTGF5b3V0IGZsLWZvY3VzIiByb2xlPSJncmlkIiBhcmlhLW11bHRpc2VsZWN0YWJsZT0iZmFs
c2UiIGFyaWEtcmVhZG9ubHk9ImZhbHNlIiBhcmlhLWRpc2FibGVkPSJmYWxzZSIgdGFiaW5kZXg9
IjAiPgogICAgCiAgICAgICAgPGRpdj4gICAgICAKICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4v
Li4vLi4vY29tcG9uZW50cy9yZW9yZGVyZXIvaW1hZ2VzL0RyYWdvbmZydWl0LmpwZyIgY2xhc3M9
ImZsYy1pbWFnZVJlb3JkZXJlci1pdGVtIGZsLWltYWdlUmVvcmRlcmVyLWl0ZW0gZmwtcmVvcmRl
cmVyLW1vdmFibGUtZGVmYXVsdCB1aS1kcmFnZ2FibGUiIHJvbGU9ImdyaWRjZWxsIiBhcmlhLXNl
bGVjdGVkPSJmYWxzZSIgYXJpYS1kaXNhYmxlZD0iZmFsc2UiIHRhYmluZGV4PSItMSIgYXJpYS1n
cmFiYmVkPSJmYWxzZSIgaWQ9ImZsdWlkLWlkLTdqbWo2dzJhLTE3IiBhcmlhLWRyb3BlZmZlY3Q9
Im5vbmUiIGFyaWEtbGFiZWw9IiBEcmFnb25mcnVpdCAxIG9mIDYgbW92YWJsZSI+CiAgICAgICAg
ICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vY29tcG9uZW50cy9yZW9yZGVyZXIvaW1hZ2Vz
L0RyYWdvbmZydWl0LmpwZyIgYWx0PSJEcmFnb25mcnVpdCB0aHVtYm5haWwiPgogICAgICAgICAg
ICAgICAgPHNwYW4gY2xhc3M9ImZsYy1yZW9yZGVyZXItaW1hZ2VUaXRsZSAgZmwtaW1hZ2VSZW9y
ZGVyZXItY2FwdGlvbiI+RHJhZ29uZnJ1aXQ8L3NwYW4+CiAgICAgICAgICAgICAgICA8aW5wdXQg
bmFtZT0iZHJhZ29uZnJ1aXQiIHZhbHVlPSIwIiB0eXBlPSJoaWRkZW4iPiAKICAgICAgICAgICAg
PC9hPgogICAgCiAgICAKICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vLi4vY29tcG9uZW50
cy9yZW9yZGVyZXIvaW1hZ2VzL0JhbmFuYS5qcGciIGNsYXNzPSJmbGMtaW1hZ2VSZW9yZGVyZXIt
aXRlbSBmbC1pbWFnZVJlb3JkZXJlci1pdGVtIGZsLXJlb3JkZXJlci1tb3ZhYmxlLWRlZmF1bHQg
dWktZHJhZ2dhYmxlIiByb2xlPSJncmlkY2VsbCIgYXJpYS1zZWxlY3RlZD0iZmFsc2UiIGFyaWEt
ZGlzYWJsZWQ9ImZhbHNlIiB0YWJpbmRleD0iLTEiIGFyaWEtZ3JhYmJlZD0iZmFsc2UiIGlkPSJm
bHVpZC1pZC03am1qNncyYS0xOSIgYXJpYS1kcm9wZWZmZWN0PSJub25lIiBhcmlhLWxhYmVsPSIg
QmFuYW5hIDIgb2YgNiBtb3ZhYmxlIj4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8u
Li8uLi9jb21wb25lbnRzL3Jlb3JkZXJlci9pbWFnZXMvQmFuYW5hLmpwZyIgYWx0PSJCYW5hbmEg
dGh1bWJuYWlsIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmbGMtcmVvcmRlcmVyLWlt
YWdlVGl0bGUgIGZsLWltYWdlUmVvcmRlcmVyLWNhcHRpb24iPkJhbmFuYTwvc3Bhbj4KICAgICAg
ICAgICAgICAgIDxpbnB1dCBuYW1lPSJCYW5hbmEiIHZhbHVlPSIwIiB0eXBlPSJoaWRkZW4iPiAK
ICAgICAgICAgICAgPC9hPgogICAgCiAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL2Nv
bXBvbmVudHMvcmVvcmRlcmVyL2ltYWdlcy9CbGFja2JlcnJ5LmpwZyIgY2xhc3M9ImZsYy1pbWFn
ZVJlb3JkZXJlci1pdGVtIGZsLWltYWdlUmVvcmRlcmVyLWl0ZW0gZmwtcmVvcmRlcmVyLW1vdmFi
bGUtZGVmYXVsdCB1aS1kcmFnZ2FibGUiIHJvbGU9ImdyaWRjZWxsIiBhcmlhLXNlbGVjdGVkPSJm
YWxzZSIgYXJpYS1kaXNhYmxlZD0iZmFsc2UiIHRhYmluZGV4PSItMSIgYXJpYS1ncmFiYmVkPSJm
YWxzZSIgaWQ9ImZsdWlkLWlkLTdqbWo2dzJhLTIxIiBhcmlhLWRyb3BlZmZlY3Q9Im5vbmUiIGFy
aWEtbGFiZWw9IiBCbGFja2JlcnJ5IDMgb2YgNiBtb3ZhYmxlIj4KICAgICAgICAgICAgICAgIDxp
bWcgc3JjPSIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3Jlb3JkZXJlci9pbWFnZXMvQmxhY2tiZXJy
eS5qcGciIGFsdD0iQmxhY2tiZXJyeSB0aHVtYm5haWwiPgogICAgICAgICAgICAgICAgPHNwYW4g
Y2xhc3M9ImZsYy1yZW9yZGVyZXItaW1hZ2VUaXRsZSAgZmwtaW1hZ2VSZW9yZGVyZXItY2FwdGlv
biI+QmxhY2tiZXJyeTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJCbGFja2Jl
cnJ5IiB2YWx1ZT0iMCIgdHlwZT0iaGlkZGVuIj4gCiAgICAgICAgICAgIDwvYT4KICAgIAogICAg
ICAgICAgICA8YSBocmVmPSIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3Jlb3JkZXJlci9pbWFnZXMv
Q2hlcnJ5LmpwZyIgY2xhc3M9ImZsYy1pbWFnZVJlb3JkZXJlci1pdGVtIGZsLWltYWdlUmVvcmRl
cmVyLWl0ZW0gdWktZHJhZ2dhYmxlIGZsLXJlb3JkZXJlci1tb3ZhYmxlLWRlZmF1bHQiIHJvbGU9
ImdyaWRjZWxsIiBhcmlhLXNlbGVjdGVkPSJmYWxzZSIgYXJpYS1kaXNhYmxlZD0iZmFsc2UiIHRh
YmluZGV4PSItMSIgYXJpYS1ncmFiYmVkPSJmYWxzZSIgaWQ9ImZsdWlkLWlkLTdqbWo2dzJhLTIz
IiBhcmlhLWRyb3BlZmZlY3Q9Im5vbmUiIGFyaWEtbGFiZWw9IiBDaGVycnkgNCBvZiA2IG1vdmFi
bGUiPgogICAgICAgICAgICAgICAgPGltZyBzcmM9Ii4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcmVv
cmRlcmVyL2ltYWdlcy9DaGVycnkuanBnIiBhbHQ9IkNoZXJyeSB0aHVtYm5haWwiPgogICAgICAg
ICAgICAgICAgPHNwYW4gY2xhc3M9ImZsYy1yZW9yZGVyZXItaW1hZ2VUaXRsZSAgZmwtaW1hZ2VS
ZW9yZGVyZXItY2FwdGlvbiI+Q2hlcnJ5PC9zcGFuPgogICAgICAgICAgICAgICAgPGlucHV0IG5h
bWU9IkNoZXJyeSIgdmFsdWU9IjAiIHR5cGU9ImhpZGRlbiI+IAogICAgICAgICAgICA8L2E+CiAg
ICAKICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vLi4vY29tcG9uZW50cy9yZW9yZGVyZXIv
aW1hZ2VzL0ZpZy5qcGciIGNsYXNzPSJmbGMtaW1hZ2VSZW9yZGVyZXItaXRlbSBmbC1pbWFnZVJl
b3JkZXJlci1pdGVtIGZsLXJlb3JkZXJlci1tb3ZhYmxlLWRlZmF1bHQgdWktZHJhZ2dhYmxlIiBy
b2xlPSJncmlkY2VsbCIgYXJpYS1zZWxlY3RlZD0iZmFsc2UiIGFyaWEtZGlzYWJsZWQ9ImZhbHNl
IiB0YWJpbmRleD0iLTEiIGFyaWEtZ3JhYmJlZD0iZmFsc2UiIGlkPSJmbHVpZC1pZC03am1qNncy
YS0yNSIgYXJpYS1kcm9wZWZmZWN0PSJub25lIiBhcmlhLWxhYmVsPSIgRmlnIDUgb2YgNiBtb3Zh
YmxlIj4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3Jl
b3JkZXJlci9pbWFnZXMvRmlnLmpwZyIgYWx0PSJGaWcgdGh1bWJuYWlsIj4KICAgICAgICAgICAg
ICAgIDxzcGFuIGNsYXNzPSJmbGMtcmVvcmRlcmVyLWltYWdlVGl0bGUgIGZsLWltYWdlUmVvcmRl
cmVyLWNhcHRpb24iPkZpZzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJGaWci
IHZhbHVlPSIwIiB0eXBlPSJoaWRkZW4iPiAKICAgICAgICAgICAgPC9hPgogICAgCiAgICAgICAg
ICAgIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcmVvcmRlcmVyL2ltYWdlcy9HcmFw
ZXMuanBnIiBjbGFzcz0iZmxjLWltYWdlUmVvcmRlcmVyLWl0ZW0gZmwtaW1hZ2VSZW9yZGVyZXIt
aXRlbSBmbC1yZW9yZGVyZXItbW92YWJsZS1kZWZhdWx0IHVpLWRyYWdnYWJsZSIgcm9sZT0iZ3Jp
ZGNlbGwiIGFyaWEtc2VsZWN0ZWQ9ImZhbHNlIiBhcmlhLWRpc2FibGVkPSJmYWxzZSIgdGFiaW5k
ZXg9Ii0xIiBhcmlhLWdyYWJiZWQ9ImZhbHNlIiBpZD0iZmx1aWQtaWQtN2ptajZ3MmEtMjciIGFy
aWEtZHJvcGVmZmVjdD0ibm9uZSIgYXJpYS1sYWJlbD0iIEdyYXBlcyA2IG9mIDYgbW92YWJsZSI+
CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vY29tcG9uZW50cy9yZW9yZGVy
ZXIvaW1hZ2VzL0dyYXBlcy5qcGciIGFsdD0iR3JhcGVzIHRodW1ibmFpbCI+CiAgICAgICAgICAg
ICAgICA8c3BhbiBjbGFzcz0iZmxjLXJlb3JkZXJlci1pbWFnZVRpdGxlICBmbC1pbWFnZVJlb3Jk
ZXJlci1jYXB0aW9uIj5HcmFwZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0i
R3JhcGVzIiB2YWx1ZT0iMCIgdHlwZT0iaGlkZGVuIj4gCiAgICAgICAgICAgIDwvYT4KICAgICAg
IDwvZGl2PgogICAgPC9mb3JtPgogICAgCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CiAgICAgICAgZGVtby5mb3JtQmFzZWRJbWFnZVJlb3JkZXJlcigpOwogICAgPC9zY3JpcHQ+
CiAgCgoKPC9ib2R5PjwvaHRtbD5ZdGV4dC9odG1sVVVURi04AAAACAAAAA0AAAAfAAAAMQAAAFEA
AABaAAAAaQAAAH8AAACRAAAApwAAAPUAAAULAAAIwAAACMkAAAjSAAAJHwAADTUAABjiAAAY6wAA
GPQAABk8AAAdTwAAXD0AAFxGAABcTwAAXJUAAGClAAB6uwAAesQAAHrNAAB7GwAAfzIAAIccAACH
JQAAhy4AAIeLAACLsQAAkZ8AAJGoAACRsQAAkfUAAJYaAAQsEwAELCUABCwuAAQseAAEMJ4ABFBU
AARQZgAEUG8ABFC7AARU4wAEb7gABG/KAARv0wAEcB4ABHRFAASE6AAEhPoABIUDAASFUgAEiX4A
BP8PAAT/IQAE/yoABP90AAUDmQAFEw0ABRMfAAUTKAAFE3kABRenAAVvPwAFb1EABW9aAAVvnAAF
c74ABpc+AAaXUAAGl1kABpenAAab0QAGrx0ABq8vAAavOAAGr34ABrOgAAbIpwAGyLkABsjCAAbJ
CgAGzS8ABynUAAcp5gAHKe8AByo0AAcuVgAIBAIACAQUAAgEHQAIBHUACAioAAgWmQAIFqsACBa0
AAgXBwAIGzcACIFAAAiBUgAIgVsACIGnAAiF0AAJDfwACQ4OAAkOFwAJDmgACRKVAAkqoAAJKrIA
CSq7AAkrGgAJL1QACTN+AAkzkAAJM5kACTPsAAk3/wAJSQQACUkPAAlJGAAJSWYACU1zAAlUIwAJ
VCwACVR+AAlYkAAJaSUACWkuAAlpfAAJbYkACXqsAAl6tQAJewAACX8LAAmQ5wAJkPAACZE+AAmV
TAAJqZEACamcAAmpswAJqdEACanSAAmqMQAJxy4ACcc4AAAAAAAABAEAAAAAAAAAnAAAAAAAAAAA
AAAAAAAJxz4=
</data>

          </attachment>
      

    </bug>

</bugzilla>